codebee 0.1.95 → 0.1.97
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 +733 -720
- package/LICENSE +21 -21
- package/README.md +516 -509
- package/app/core/acceptance.py +100 -100
- package/app/core/agent_context.py +118 -0
- package/app/core/aiflavor.py +197 -197
- package/app/core/analytics.py +38 -38
- package/app/core/artifacts.py +148 -148
- package/app/core/assets.py +110 -110
- package/app/core/attachments.py +623 -623
- package/app/core/audit.py +30 -30
- package/app/core/backup.py +470 -470
- package/app/core/beekeeper.py +183 -183
- package/app/core/benchstore.py +102 -95
- package/app/core/board.py +246 -209
- package/app/core/bookmeta.py +1036 -1036
- package/app/core/bookmeta_catalog.py +180 -180
- package/app/core/branching.py +137 -137
- package/app/core/builtin_agent.py +2055 -1680
- package/app/core/capability.py +144 -144
- package/app/core/chaptersafe.py +32 -32
- package/app/core/checkpoints.py +648 -0
- package/app/core/cleanup.py +303 -303
- package/app/core/compaction.py +201 -201
- package/app/core/contracts.py +255 -255
- package/app/core/covergen.py +356 -356
- package/app/core/defectretro.py +43 -43
- package/app/core/diagnostics.py +114 -114
- package/app/core/dispatch.py +198 -191
- package/app/core/dispatch_log.py +128 -128
- package/app/core/env_scrub.py +85 -85
- package/app/core/errorlog.py +137 -137
- package/app/core/eval_matrix.py +82 -0
- package/app/core/evalbench.py +184 -91
- package/app/core/evaluation.py +174 -174
- package/app/core/failure_notify.py +290 -290
- package/app/core/flow_graph.py +33 -0
- package/app/core/goal_service.py +167 -167
- package/app/core/health.py +389 -389
- package/app/core/history.py +38 -38
- package/app/core/hooks.py +162 -162
- package/app/core/jobs.py +25 -4
- package/app/core/knowledge_pipeline.py +86 -0
- package/app/core/manager.py +2232 -2232
- package/app/core/mcp_client.py +200 -29
- package/app/core/mocks.py +64 -64
- package/app/core/notify.py +201 -201
- package/app/core/novel_quality.py +181 -189
- package/app/core/openapi.py +177 -154
- package/app/core/operations.py +228 -228
- package/app/core/paihang.py +145 -145
- package/app/core/pipeline.py +319 -59
- package/app/core/planner.py +17 -11
- package/app/core/policy.py +84 -0
- package/app/core/portguard.py +111 -111
- package/app/core/presence.py +77 -77
- package/app/core/preview.py +293 -293
- package/app/core/project_memory.py +139 -0
- package/app/core/prompt_guard.py +78 -78
- package/app/core/publish/__init__.py +7 -7
- package/app/core/publish/auto.py +106 -22
- package/app/core/publish/browser.py +694 -655
- package/app/core/publish/chaprows.py +138 -0
- package/app/core/publish/fanqie.py +212 -165
- package/app/core/publish/flow.py +832 -640
- package/app/core/publish/flows-fanqie-calibrated.json +361 -336
- package/app/core/publish/ledger.py +51 -2
- package/app/core/publish/manager.py +1150 -1118
- package/app/core/publish/qimao.py +176 -176
- package/app/core/publish/volumes.py +108 -0
- package/app/core/publish/ws.py +139 -139
- package/app/core/quality_gate.py +194 -194
- package/app/core/redact.py +38 -38
- package/app/core/repeat_guard.py +129 -129
- package/app/core/retrieval.py +137 -137
- package/app/core/router.py +398 -398
- package/app/core/runner.py +2239 -2238
- package/app/core/selfupdate.py +384 -384
- package/app/core/session_log.py +161 -161
- package/app/core/sessions.py +312 -312
- package/app/core/settings.py +33 -5
- package/app/core/settings_schema.py +282 -271
- package/app/core/share_page.py +114 -114
- package/app/core/skill_scan.py +139 -139
- package/app/core/skillpacks/fanqie-novel.md +8 -6
- package/app/core/skillpacks/market/character-bible.md +66 -66
- package/app/core/skillpacks/market/code-risk-checklist.md +58 -58
- package/app/core/skillpacks/market/git-workflow.md +57 -57
- package/app/core/skillpacks/market/release-notes.md +72 -72
- package/app/core/skillpacks/market/weekly-report.md +71 -71
- package/app/core/skillpacks/market/worldview-consistency.md +70 -70
- package/app/core/skillpacks/qimao-signing.md +14 -11
- package/app/core/skills.py +32 -21
- package/app/core/step_runner.py +132 -132
- package/app/core/store.py +24 -0
- package/app/core/story_tracking.py +275 -275
- package/app/core/task_compile.py +199 -199
- package/app/core/telemetry.py +292 -292
- package/app/core/tlsctx.py +64 -64
- package/app/core/token_meter.py +147 -147
- package/app/core/tool_outputs.py +107 -0
- package/app/core/tracing.py +207 -144
- package/app/core/upstream.py +41 -41
- package/app/core/usage.py +1038 -1038
- package/app/core/volumes.py +389 -389
- package/app/core/webhooks.py +89 -0
- package/app/core/wxdigest.py +865 -858
- package/app/core/zentao.py +2692 -2692
- package/app/main.py +179 -10
- package/app/mcp_server.py +244 -244
- package/app/pick_dialog.py +110 -110
- package/app/ui/app.js +563 -21
- package/app/ui/artdiff.js +74 -74
- package/app/ui/assets/community-qr.png +0 -0
- package/app/ui/assets/donate-alipay.jpg +0 -0
- package/app/ui/assets/donate-qr.jpg +0 -0
- package/app/ui/assets/workbench-reference.png +0 -0
- package/app/ui/board.css +451 -666
- package/app/ui/board.html +165 -162
- package/app/ui/board.js +509 -305
- package/app/ui/hive3d.js +242 -0
- package/app/ui/i18n.js +125 -9
- package/app/ui/icons/bee.svg +79 -79
- package/app/ui/index.html +60 -3
- package/app/ui/manifest.json +16 -16
- package/app/ui/qrcode.js +2297 -2297
- package/app/ui/style.css +189 -9
- package/bin/tutti.js +147 -147
- package/package.json +49 -48
- package/tools/wx_reader.py +261 -261
- package/app/.playwright-cli/console-2026-09-23T08-26-03-635Z.log +0 -88
- package/app/.playwright-cli/page-2026-09-23T08-26-03-845Z.yml +0 -126
- package/app/.playwright-cli/page-2026-09-23T08-29-44-203Z.png +0 -0
- package/app/.playwright-cli/page-2026-09-23T08-35-42-046Z.yml +0 -210
- package/app/.playwright-cli/page-2026-09-23T08-36-52-858Z.png +0 -0
- package/app/.playwright-cli/page-2026-09-23T08-37-33-938Z.png +0 -0
- package/app/.playwright-cli/run-detail-after.png +0 -0
- package/app/output/_createbook_body.json +0 -1
- package/app/output/_probe_fq_click.py +0 -50
- package/app/output/_probe_fq_form.py +0 -42
- package/app/output/_probe_fq_modal.py +0 -55
- package/app/output/_probe_fq_points.py +0 -71
- package/app/output/_probe_fq_submit.py +0 -34
- package/app/output/_probe_fq_watch.py +0 -62
package/app/ui/artdiff.js
CHANGED
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
/* 成品两版对比的纯 diff 计算(OpenCreator「版本化对比」借鉴)。
|
|
2
|
-
* 独立文件无 DOM 依赖:app.js 用 window.ArtifactDiff 渲染,tests 用
|
|
3
|
-
* module.exports 直测。算法:公共前后缀修剪 + 中段 LCS(上限保护,
|
|
4
|
-
* 超限诚实降级为整块替换计数,不装作对齐了)。 */
|
|
5
|
-
(function (root, factory) {
|
|
6
|
-
var api = factory();
|
|
7
|
-
if (typeof window !== "undefined") window.ArtifactDiff = api;
|
|
8
|
-
if (typeof module !== "undefined" && module.exports) module.exports = api;
|
|
9
|
-
})(typeof self !== "undefined" ? self : this, function () {
|
|
10
|
-
"use strict";
|
|
11
|
-
|
|
12
|
-
var MID_CAP = 400; // 中段行数单边上限
|
|
13
|
-
var MID_PRODUCT_CAP = 160000; // LCS DP 格子上限(400×400)
|
|
14
|
-
|
|
15
|
-
/* LCS 回溯产出统一 diff 行:[{t:"="|"-"/"+", s:行文本}](只对中段)。 */
|
|
16
|
-
function lcsRows(A, B) {
|
|
17
|
-
var n = A.length, m = B.length;
|
|
18
|
-
var dp = [];
|
|
19
|
-
for (var k = 0; k <= n; k++) dp.push(new Uint32Array(m + 1));
|
|
20
|
-
for (var i = n - 1; i >= 0; i--)
|
|
21
|
-
for (var j = m - 1; j >= 0; j--)
|
|
22
|
-
dp[i][j] = A[i] === B[j] ? dp[i + 1][j + 1] + 1
|
|
23
|
-
: (dp[i + 1][j] >= dp[i][j + 1] ? dp[i + 1][j] : dp[i][j + 1]);
|
|
24
|
-
var rows = [];
|
|
25
|
-
i = 0; j = 0;
|
|
26
|
-
while (i < n && j < m) {
|
|
27
|
-
if (A[i] === B[j]) { rows.push({ t: "=", s: A[i] }); i++; j++; }
|
|
28
|
-
else if (dp[i + 1][j] >= dp[i][j + 1]) { rows.push({ t: "-", s: A[i] }); i++; }
|
|
29
|
-
else { rows.push({ t: "+", s: B[j] }); j++; }
|
|
30
|
-
}
|
|
31
|
-
while (i < n) { rows.push({ t: "-", s: A[i] }); i++; }
|
|
32
|
-
while (j < m) { rows.push({ t: "+", s: B[j] }); j++; }
|
|
33
|
-
return rows;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/* 对外主口:旧版 a、新版 b → {
|
|
37
|
-
* prefix/suffix: 相同行数(渲染端折叠展示),
|
|
38
|
-
* identical: 布尔,两版一致,
|
|
39
|
-
* rows: 中段统一 diff 行(超限时为 null),
|
|
40
|
-
* oversized: {a, b} 超限时中段行数(诚实整块计数) } */
|
|
41
|
-
function diff(a, b) {
|
|
42
|
-
a = String(a == null ? "" : a);
|
|
43
|
-
b = String(b == null ? "" : b);
|
|
44
|
-
var A = a.split("\n"), B = b.split("\n");
|
|
45
|
-
var p = 0;
|
|
46
|
-
while (p < A.length && p < B.length && A[p] === B[p]) p++;
|
|
47
|
-
var s = 0;
|
|
48
|
-
while (s < A.length - p && s < B.length - p &&
|
|
49
|
-
A[A.length - 1 - s] === B[B.length - 1 - s]) s++;
|
|
50
|
-
var midA = A.slice(p, A.length - s), midB = B.slice(p, B.length - s);
|
|
51
|
-
var out = { prefix: p, suffix: s, identical: !midA.length && !midB.length,
|
|
52
|
-
rows: null, oversized: null };
|
|
53
|
-
if (out.identical) return out;
|
|
54
|
-
if (midA.length > MID_CAP || midB.length > MID_CAP ||
|
|
55
|
-
midA.length * midB.length > MID_PRODUCT_CAP) {
|
|
56
|
-
out.oversized = { a: midA.length, b: midB.length };
|
|
57
|
-
return out;
|
|
58
|
-
}
|
|
59
|
-
out.rows = lcsRows(midA, midB);
|
|
60
|
-
return out;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/* rows → 摘要计数(+x/-y,渲染端徽章用)。 */
|
|
64
|
-
function counts(d) {
|
|
65
|
-
var add = 0, del = 0;
|
|
66
|
-
if (d.oversized) return { add: d.oversized.b, del: d.oversized.a };
|
|
67
|
-
(d.rows || []).forEach(function (r) {
|
|
68
|
-
if (r.t === "+") add++; else if (r.t === "-") del++;
|
|
69
|
-
});
|
|
70
|
-
return { add: add, del: del };
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return { diff: diff, counts: counts, lcsRows: lcsRows };
|
|
74
|
-
});
|
|
1
|
+
/* 成品两版对比的纯 diff 计算(OpenCreator「版本化对比」借鉴)。
|
|
2
|
+
* 独立文件无 DOM 依赖:app.js 用 window.ArtifactDiff 渲染,tests 用
|
|
3
|
+
* module.exports 直测。算法:公共前后缀修剪 + 中段 LCS(上限保护,
|
|
4
|
+
* 超限诚实降级为整块替换计数,不装作对齐了)。 */
|
|
5
|
+
(function (root, factory) {
|
|
6
|
+
var api = factory();
|
|
7
|
+
if (typeof window !== "undefined") window.ArtifactDiff = api;
|
|
8
|
+
if (typeof module !== "undefined" && module.exports) module.exports = api;
|
|
9
|
+
})(typeof self !== "undefined" ? self : this, function () {
|
|
10
|
+
"use strict";
|
|
11
|
+
|
|
12
|
+
var MID_CAP = 400; // 中段行数单边上限
|
|
13
|
+
var MID_PRODUCT_CAP = 160000; // LCS DP 格子上限(400×400)
|
|
14
|
+
|
|
15
|
+
/* LCS 回溯产出统一 diff 行:[{t:"="|"-"/"+", s:行文本}](只对中段)。 */
|
|
16
|
+
function lcsRows(A, B) {
|
|
17
|
+
var n = A.length, m = B.length;
|
|
18
|
+
var dp = [];
|
|
19
|
+
for (var k = 0; k <= n; k++) dp.push(new Uint32Array(m + 1));
|
|
20
|
+
for (var i = n - 1; i >= 0; i--)
|
|
21
|
+
for (var j = m - 1; j >= 0; j--)
|
|
22
|
+
dp[i][j] = A[i] === B[j] ? dp[i + 1][j + 1] + 1
|
|
23
|
+
: (dp[i + 1][j] >= dp[i][j + 1] ? dp[i + 1][j] : dp[i][j + 1]);
|
|
24
|
+
var rows = [];
|
|
25
|
+
i = 0; j = 0;
|
|
26
|
+
while (i < n && j < m) {
|
|
27
|
+
if (A[i] === B[j]) { rows.push({ t: "=", s: A[i] }); i++; j++; }
|
|
28
|
+
else if (dp[i + 1][j] >= dp[i][j + 1]) { rows.push({ t: "-", s: A[i] }); i++; }
|
|
29
|
+
else { rows.push({ t: "+", s: B[j] }); j++; }
|
|
30
|
+
}
|
|
31
|
+
while (i < n) { rows.push({ t: "-", s: A[i] }); i++; }
|
|
32
|
+
while (j < m) { rows.push({ t: "+", s: B[j] }); j++; }
|
|
33
|
+
return rows;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* 对外主口:旧版 a、新版 b → {
|
|
37
|
+
* prefix/suffix: 相同行数(渲染端折叠展示),
|
|
38
|
+
* identical: 布尔,两版一致,
|
|
39
|
+
* rows: 中段统一 diff 行(超限时为 null),
|
|
40
|
+
* oversized: {a, b} 超限时中段行数(诚实整块计数) } */
|
|
41
|
+
function diff(a, b) {
|
|
42
|
+
a = String(a == null ? "" : a);
|
|
43
|
+
b = String(b == null ? "" : b);
|
|
44
|
+
var A = a.split("\n"), B = b.split("\n");
|
|
45
|
+
var p = 0;
|
|
46
|
+
while (p < A.length && p < B.length && A[p] === B[p]) p++;
|
|
47
|
+
var s = 0;
|
|
48
|
+
while (s < A.length - p && s < B.length - p &&
|
|
49
|
+
A[A.length - 1 - s] === B[B.length - 1 - s]) s++;
|
|
50
|
+
var midA = A.slice(p, A.length - s), midB = B.slice(p, B.length - s);
|
|
51
|
+
var out = { prefix: p, suffix: s, identical: !midA.length && !midB.length,
|
|
52
|
+
rows: null, oversized: null };
|
|
53
|
+
if (out.identical) return out;
|
|
54
|
+
if (midA.length > MID_CAP || midB.length > MID_CAP ||
|
|
55
|
+
midA.length * midB.length > MID_PRODUCT_CAP) {
|
|
56
|
+
out.oversized = { a: midA.length, b: midB.length };
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
out.rows = lcsRows(midA, midB);
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* rows → 摘要计数(+x/-y,渲染端徽章用)。 */
|
|
64
|
+
function counts(d) {
|
|
65
|
+
var add = 0, del = 0;
|
|
66
|
+
if (d.oversized) return { add: d.oversized.b, del: d.oversized.a };
|
|
67
|
+
(d.rows || []).forEach(function (r) {
|
|
68
|
+
if (r.t === "+") add++; else if (r.t === "-") del++;
|
|
69
|
+
});
|
|
70
|
+
return { add: add, del: del };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return { diff: diff, counts: counts, lcsRows: lcsRows };
|
|
74
|
+
});
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|