Record phase two acceptance evidence and synchronize delivery status

This commit is contained in:
2026-09-07 02:55:19 +08:00
parent 89df10bc4e
commit e667dd55dd
24 changed files with 13892 additions and 45 deletions
+10 -3
View File
@@ -1,6 +1,6 @@
# Benchmark 开发说明
> 所属模块:Knowledge / Retrieval Core(后端,负责人 yxx)。RAG Benchmark 已交付;Agent Benchmark 暂缓,待 Agent Runtime 完成后在同一契约下补齐
> 所属模块:Knowledge / Retrieval Core(后端,负责人 yxx)。RAG 与标准Agent Benchmark均已实现,前端入口`/benchmarks`。真实验收结果与范围见[第二阶段收尾记录](第二阶段收尾实现与验收-2026-09-07.md)
## 定位
@@ -18,7 +18,7 @@ Benchmark Service 用受控 Dataset 对检索引擎做可复现评测:创建
| POST | `/api/benchmarks/runs/{run_id}/cancel` | 取消运行 |
| GET | `/api/benchmarks/runs/{run_id}/report` | 结构化完整报告 |
Agent Benchmark`/api/benchmarks/agent/runs` 未暴露(暂缓),不在 OpenAPI 注册占位接口
Agent Benchmark`POST /api/benchmarks/agent/runs`已实现并注册OpenAPI,使用正式Agent Runtime与Trace;请求/Case见[契约§9](../contracts/第二阶段接口契约-开发版.md)。默认只接受真实Provider,显式offline才允许mock,不自动批准工具权限
## Dataset
@@ -30,7 +30,7 @@ RAG Case 结构:`case_id`、`query`、`expected_note_ids`、`expected_block_id
`queued → running → completed | failed | cancelled`
- 创建时校验索引兼容性:索引非空、Embedding model/dim 与当前引擎一致、vector/hybrid 时向量索引非空;不满足返回 `BENCHMARK_INDEX_INCOMPATIBLE`(409),避免把环境/索引错误误判为检索质量差。
- RAG创建时校验索引兼容性:索引非空、Embedding model/dim 与当前引擎一致、vector/hybrid 时向量索引非空;不满足返回 `BENCHMARK_INDEX_INCOMPATIBLE`(409),避免把环境/索引错误误判为检索质量差。
- 内存注册表上限 `MAX_RUNS=100`,超限只淘汰终态 run;满容量且全为活动 run 时返回 `BENCHMARK_CAPACITY_EXCEEDED`429)。
- 失败/取消只向公开响应暴露项目错误码与安全消息,详细异常进入日志,不通过 HTTP/SSE 返回。
@@ -76,3 +76,10 @@ uv run pytest -q
```
`tests/test_benchmark.py` 覆盖数据集注册与校验、指标纯函数、端到端运行、取消、索引兼容、容量与失败样本聚合;`tests/test_retrieval.py` 覆盖 FTS 阈值与分页 total 一致性。
## 2026-09-07 数据与复现补充
`agent-core-v1.json`为四例标准任务;`rag-phase2-v1.json`对应独立测试语料,不对应任意用户Vault,运行前必须用`phase2-quality.py`准备语料及真实索引。语料源、配置、逐例结果和冷暖缓存说明见收尾验收记录。UI支持RAG/Agent切换、Provider/模型、融合/TopK/RRF/rerank配置、取消、报告JSON与Trace入口。
Agent成功判定包含终态完成、预期工具及声明参数一一匹配、无额外调用、工具结果成功、输出子串、引用和任务数量;并非由另一个LLM主观打分。失败/取消报告保留total_cases与evaluated_cases,不能当成完成的质量测量。报告注册表最多100条且不跨进程恢复,重要结果须下载保存;持久Agent Trace独立保留。工具选择/参数准确率和无效调用率在无分母时返回null。
@@ -0,0 +1,234 @@
{
"python": "3.13.9",
"platform": "Windows-11-10.0.26100-SP0",
"provider": "mock with 50 ms injected delay per model turn; no network",
"results": [
{
"scenario": "agent_tool_runs",
"concurrency": 1,
"runs": 20,
"latency": {
"count": 20,
"median_ms": 168.93,
"p95_ms": 172.17,
"max_ms": 173.06
},
"completed": 20,
"ordered_events_and_replay": true,
"terminal_recovery": true,
"recovery_read_ms": 35.15,
"retained_records": 20,
"elapsed_ms": 3446.25,
"event_loop_lag": {
"count": 223,
"median_ms": 5.42,
"p95_ms": 12.94,
"max_ms": 15.02
}
},
{
"scenario": "agent_tool_runs",
"concurrency": 10,
"runs": 20,
"latency": {
"count": 20,
"median_ms": 203.54,
"p95_ms": 205.86,
"max_ms": 206.36
},
"completed": 20,
"ordered_events_and_replay": true,
"terminal_recovery": true,
"recovery_read_ms": 31.0,
"retained_records": 40,
"elapsed_ms": 479.2,
"event_loop_lag": {
"count": 31,
"median_ms": 5.12,
"p95_ms": 13.95,
"max_ms": 14.6
}
},
{
"scenario": "agent_tool_runs",
"concurrency": 50,
"runs": 50,
"latency": {
"count": 50,
"median_ms": 396.17,
"p95_ms": 397.13,
"max_ms": 397.52
},
"completed": 50,
"ordered_events_and_replay": true,
"terminal_recovery": true,
"recovery_read_ms": 86.99,
"retained_records": 90,
"elapsed_ms": 554.8,
"event_loop_lag": {
"count": 35,
"median_ms": 5.12,
"p95_ms": 11.71,
"max_ms": 46.86
}
},
{
"scenario": "agent_tool_runs",
"concurrency": 200,
"runs": 200,
"latency": {
"count": 200,
"median_ms": 1004.47,
"p95_ms": 1155.52,
"max_ms": 1155.62
},
"completed": 200,
"ordered_events_and_replay": true,
"terminal_recovery": true,
"recovery_read_ms": 313.29,
"retained_records": 200,
"elapsed_ms": 1550.94,
"event_loop_lag": {
"count": 113,
"median_ms": 3.39,
"p95_ms": 10.13,
"max_ms": 12.19
}
},
{
"scenario": "capacity_and_cancel",
"active_limit": 200,
"overflow_rejected": true,
"cancelled": 200,
"cancel_latency": {
"count": 200,
"median_ms": 4.26,
"p95_ms": 5.85,
"max_ms": 12.49
},
"elapsed_ms": 1977.57,
"event_loop_lag": {
"count": 167,
"median_ms": 1.68,
"p95_ms": 4.24,
"max_ms": 6.54
}
},
{
"scenario": "permission_wait",
"runs": 20,
"approved_completed": 10,
"cancelled_waiting_permission": 10,
"subscribers_released": true,
"elapsed_ms": 294.49,
"event_loop_lag": {
"count": 20,
"median_ms": 4.08,
"p95_ms": 6.57,
"max_ms": 9.92
}
},
{
"scenario": "failure_and_timeout_isolation",
"runs": 20,
"success": 5,
"provider_errors": 5,
"model_timeouts": 5,
"tool_timeouts": 5,
"remaining_tool_executors": 0,
"elapsed_ms": 1220.51,
"event_loop_lag": {
"count": 80,
"median_ms": 5.38,
"p95_ms": 6.33,
"max_ms": 11.29
}
},
{
"scenario": "task_api_crud",
"tasks": 100,
"client_concurrency": 20,
"latencies": {
"create": {
"count": 100,
"median_ms": 103.05,
"p95_ms": 143.89,
"max_ms": 167.59
},
"update": {
"count": 100,
"median_ms": 124.21,
"p95_ms": 139.58,
"max_ms": 146.49
},
"list": {
"count": 1,
"median_ms": 3.33,
"p95_ms": 3.33,
"max_ms": 3.33
},
"delete": {
"count": 100,
"median_ms": 118.6,
"p95_ms": 134.84,
"max_ms": 147.0
}
},
"default_page_count": 50,
"default_total": 100,
"pagination_complete": true,
"final_total": 0,
"elapsed_ms": 1841.45,
"event_loop_lag": {
"count": 146,
"median_ms": 1.87,
"p95_ms": 5.05,
"max_ms": 65.53
}
},
{
"scenario": "task_api_crud",
"tasks": 1000,
"client_concurrency": 20,
"latencies": {
"create": {
"count": 1000,
"median_ms": 109.16,
"p95_ms": 121.67,
"max_ms": 133.03
},
"update": {
"count": 1000,
"median_ms": 125.42,
"p95_ms": 146.2,
"max_ms": 165.48
},
"list": {
"count": 10,
"median_ms": 5.12,
"p95_ms": 7.31,
"max_ms": 7.31
},
"delete": {
"count": 1000,
"median_ms": 122.71,
"p95_ms": 145.87,
"max_ms": 171.81
}
},
"default_page_count": 50,
"default_total": 1000,
"pagination_complete": true,
"final_total": 0,
"elapsed_ms": 18067.11,
"event_loop_lag": {
"count": 1540,
"median_ms": 1.33,
"p95_ms": 4.46,
"max_ms": 31.93
}
}
],
"database_bytes": 2932736,
"complete": true
}
@@ -0,0 +1,230 @@
{
"python": "3.13.9",
"platform": "Windows-11-10.0.26100-SP0",
"provider": "mock with 50 ms injected delay per model turn; no network",
"results": [
{
"scenario": "agent_tool_runs",
"concurrency": 1,
"runs": 20,
"latency": {
"count": 20,
"median_ms": 167.71,
"p95_ms": 181.07,
"max_ms": 203.5
},
"completed": 20,
"ordered_events_and_replay": true,
"terminal_recovery": true,
"retained_records": 20,
"elapsed_ms": 3464.02,
"event_loop_lag": {
"count": 224,
"median_ms": 5.41,
"p95_ms": 13.45,
"max_ms": 33.56
}
},
{
"scenario": "agent_tool_runs",
"concurrency": 10,
"runs": 20,
"latency": {
"count": 20,
"median_ms": 219.61,
"p95_ms": 224.28,
"max_ms": 224.39
},
"completed": 20,
"ordered_events_and_replay": true,
"terminal_recovery": true,
"retained_records": 40,
"elapsed_ms": 500.46,
"event_loop_lag": {
"count": 33,
"median_ms": 4.35,
"p95_ms": 13.1,
"max_ms": 24.21
}
},
{
"scenario": "agent_tool_runs",
"concurrency": 50,
"runs": 50,
"latency": {
"count": 50,
"median_ms": 356.51,
"p95_ms": 358.17,
"max_ms": 358.28
},
"completed": 50,
"ordered_events_and_replay": true,
"terminal_recovery": true,
"retained_records": 90,
"elapsed_ms": 495.22,
"event_loop_lag": {
"count": 27,
"median_ms": 2.66,
"p95_ms": 35.07,
"max_ms": 73.78
}
},
{
"scenario": "agent_tool_runs",
"concurrency": 200,
"runs": 200,
"latency": {
"count": 200,
"median_ms": 944.9,
"p95_ms": 1007.22,
"max_ms": 1007.96
},
"completed": 200,
"ordered_events_and_replay": true,
"terminal_recovery": true,
"retained_records": 200,
"elapsed_ms": 1412.6,
"event_loop_lag": {
"count": 77,
"median_ms": 3.46,
"p95_ms": 10.98,
"max_ms": 326.14
}
},
{
"scenario": "capacity_and_cancel",
"active_limit": 200,
"overflow_rejected": true,
"cancelled": 200,
"cancel_latency": {
"count": 200,
"median_ms": 4.47,
"p95_ms": 6.37,
"max_ms": 14.65
},
"elapsed_ms": 2086.28,
"event_loop_lag": {
"count": 174,
"median_ms": 1.48,
"p95_ms": 4.69,
"max_ms": 14.19
}
},
{
"scenario": "permission_wait",
"runs": 20,
"approved_completed": 10,
"cancelled_waiting_permission": 10,
"subscribers_released": true,
"elapsed_ms": 307.52,
"event_loop_lag": {
"count": 20,
"median_ms": 5.28,
"p95_ms": 12.2,
"max_ms": 15.35
}
},
{
"scenario": "failure_and_timeout_isolation",
"runs": 20,
"success": 5,
"provider_errors": 5,
"model_timeouts": 5,
"tool_timeouts": 5,
"remaining_tool_executors": 0,
"elapsed_ms": 1236.24,
"event_loop_lag": {
"count": 80,
"median_ms": 5.44,
"p95_ms": 6.58,
"max_ms": 15.75
}
},
{
"scenario": "task_api_crud",
"tasks": 100,
"client_concurrency": 20,
"latencies": {
"create": {
"count": 100,
"median_ms": 107.62,
"p95_ms": 146.4,
"max_ms": 177.83
},
"update": {
"count": 100,
"median_ms": 119.9,
"p95_ms": 148.86,
"max_ms": 176.92
},
"list": {
"count": 1,
"median_ms": 3.96,
"p95_ms": 3.96,
"max_ms": 3.96
},
"delete": {
"count": 100,
"median_ms": 126.81,
"p95_ms": 180.34,
"max_ms": 181.32
}
},
"default_page_count": 50,
"default_total": 100,
"pagination_complete": true,
"final_total": 0,
"elapsed_ms": 1908.85,
"event_loop_lag": {
"count": 156,
"median_ms": 1.39,
"p95_ms": 5.2,
"max_ms": 65.37
}
},
{
"scenario": "task_api_crud",
"tasks": 1000,
"client_concurrency": 20,
"latencies": {
"create": {
"count": 1000,
"median_ms": 109.25,
"p95_ms": 122.91,
"max_ms": 130.79
},
"update": {
"count": 1000,
"median_ms": 127.29,
"p95_ms": 150.37,
"max_ms": 180.05
},
"list": {
"count": 10,
"median_ms": 4.6,
"p95_ms": 8.08,
"max_ms": 8.08
},
"delete": {
"count": 1000,
"median_ms": 124.33,
"p95_ms": 146.88,
"max_ms": 167.34
}
},
"default_page_count": 50,
"default_total": 1000,
"pagination_complete": true,
"final_total": 0,
"elapsed_ms": 18264.74,
"event_loop_lag": {
"count": 1555,
"median_ms": 1.31,
"p95_ms": 4.68,
"max_ms": 39.35
}
}
],
"database_bytes": 2928640,
"complete": true
}
@@ -0,0 +1,142 @@
{
"run_id": "benchmark_e3047791a92d",
"kind": "agent",
"dataset_id": "agent-core-v1",
"dataset_hash": "sha256:82fd1b84cc2dc2feec0fc67357d64b145dcdf6c44ec2660f182d550e85b9d27f",
"status": "completed",
"config_snapshot": {
"dataset_id": "agent-core-v1",
"provider_id": "provider_65fd326edba646e3bc735c25fbf5ffe8",
"model": "deepseek-v4-flash",
"max_steps": 6,
"timeout_seconds": 90,
"token_budget": 6000,
"repeat": 1,
"allow_network": false,
"offline": false,
"dataset_hash": "sha256:82fd1b84cc2dc2feec0fc67357d64b145dcdf6c44ec2660f182d550e85b9d27f",
"dataset_version": "1.0.0",
"execution": "real_agent_runtime",
"provider_type": "openai_compatible",
"scoring_version": "1.0",
"permission_policy": "runtime_user_decision",
"active_agent_run_id": "run_1230c37a1c2c4559b69cbc4e01b4721b"
},
"metrics": {
"total_cases": 4,
"evaluated_cases": 4,
"task_success_rate": 1,
"tool_selection_accuracy": 1,
"tool_argument_accuracy": 1,
"invalid_tool_call_rate": 0,
"average_steps": 1.75,
"average_latency_ms": 4646.515175001696,
"token_usage": 5939,
"tool_calls": 3,
"expected_calls": 3
},
"cases": [
{
"case_id": "arithmetic",
"repeat": 0,
"agent_run_id": "run_f4baf45c66c34e3f94b60b90f0846a95",
"success": true,
"tool_calls": 1,
"expected_calls": 1,
"selected_calls": 1,
"accurate_calls": 1,
"invalid_calls": 0,
"steps": 2,
"latency_ms": 4902.329800010193,
"token_usage": 1585,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
},
{
"case_id": "echo",
"repeat": 0,
"agent_run_id": "run_5cf8341f73fa431ab7978f9ed4fe84c7",
"success": true,
"tool_calls": 1,
"expected_calls": 1,
"selected_calls": 1,
"accurate_calls": 1,
"invalid_calls": 0,
"steps": 2,
"latency_ms": 5341.693700000178,
"token_usage": 1821,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
},
{
"case_id": "no-tool",
"repeat": 0,
"agent_run_id": "run_226a20145fbc4737ae2d3e812ff8f25c",
"success": true,
"tool_calls": 0,
"expected_calls": 0,
"selected_calls": 0,
"accurate_calls": 0,
"invalid_calls": 0,
"steps": 1,
"latency_ms": 1806.5612000063993,
"token_usage": 541,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
},
{
"case_id": "markdown-catalog",
"repeat": 0,
"agent_run_id": "run_1230c37a1c2c4559b69cbc4e01b4721b",
"success": true,
"tool_calls": 1,
"expected_calls": 1,
"selected_calls": 1,
"accurate_calls": 1,
"invalid_calls": 0,
"steps": 2,
"latency_ms": 6535.4759999900125,
"token_usage": 1992,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
}
],
"error": null,
"error_code": null
}
@@ -0,0 +1,46 @@
{
"html": {
"bytes": 42542,
"sha256": "4c5e3f5eeb0167110cbbc750c12ef0a52420975288853f9653575cb49f3b4098",
"snapshot_present": true,
"static_images": 2
},
"pdf": {
"bytes": 53952,
"sha256": "a2aa2095495cfa612f4b3f2e2c35104f305289468bb5a8a5de8748a899d8f598"
},
"docx": {
"bytes": 59638,
"sha256": "ade1b2d993c8e157e245af5476a7808c891d70ae91b82ac300e12d3fa727288e",
"snapshot_present": true,
"images": [
{
"name": "word/media/image1.png",
"width": 1280,
"height": 1008
},
{
"name": "word/media/image2.png",
"width": 1000,
"height": 280
},
{
"name": "word/media/image3.png",
"width": 135,
"height": 32
}
]
},
"browser_interactions": [
"six_themes",
"wide_narrow_viewer",
"source_toggle",
"zoom_reset",
"edit_refresh",
"theme_switch",
"invalid_expression",
"html_pdf_docx_download",
"print_warning",
"export_cancelled"
]
}
@@ -0,0 +1,19 @@
........................................................................ [ 8%]
........................................................................ [ 16%]
........................................................................ [ 25%]
........................................................................ [ 33%]
........................................................................ [ 41%]
........................................................................ [ 50%]
........................................................................ [ 58%]
........................................................................ [ 66%]
........................................................................ [ 75%]
........................................................................ [ 83%]
........................................................................ [ 91%]
..................................................................... [100%]
============================== warnings summary ===============================
.venv\Lib\site-packages\fastapi\testclient.py:1
C:\Users\KiriAky\.codex\worktrees\7950\NotesAgent\backend\.venv\Lib\site-packages\fastapi\testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
from starlette.testclient import TestClient as TestClient # noqa
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
861 passed, 1 warning in 48.32s
@@ -0,0 +1,222 @@
{
"passed": 36,
"total": 36,
"results": [
{
"theme": "light",
"type": "flowchart",
"passed": true,
"warnings": []
},
{
"theme": "light",
"type": "sequence",
"passed": true,
"warnings": []
},
{
"theme": "light",
"type": "class",
"passed": true,
"warnings": []
},
{
"theme": "light",
"type": "state",
"passed": true,
"warnings": []
},
{
"theme": "light",
"type": "er",
"passed": true,
"warnings": []
},
{
"theme": "light",
"type": "gantt",
"passed": true,
"warnings": []
},
{
"theme": "dark",
"type": "flowchart",
"passed": true,
"warnings": []
},
{
"theme": "dark",
"type": "sequence",
"passed": true,
"warnings": []
},
{
"theme": "dark",
"type": "class",
"passed": true,
"warnings": []
},
{
"theme": "dark",
"type": "state",
"passed": true,
"warnings": []
},
{
"theme": "dark",
"type": "er",
"passed": true,
"warnings": []
},
{
"theme": "dark",
"type": "gantt",
"passed": true,
"warnings": []
},
{
"theme": "sepia",
"type": "flowchart",
"passed": true,
"warnings": []
},
{
"theme": "sepia",
"type": "sequence",
"passed": true,
"warnings": []
},
{
"theme": "sepia",
"type": "class",
"passed": true,
"warnings": []
},
{
"theme": "sepia",
"type": "state",
"passed": true,
"warnings": []
},
{
"theme": "sepia",
"type": "er",
"passed": true,
"warnings": []
},
{
"theme": "sepia",
"type": "gantt",
"passed": true,
"warnings": []
},
{
"theme": "paper-moments",
"type": "flowchart",
"passed": true,
"warnings": []
},
{
"theme": "paper-moments",
"type": "sequence",
"passed": true,
"warnings": []
},
{
"theme": "paper-moments",
"type": "class",
"passed": true,
"warnings": []
},
{
"theme": "paper-moments",
"type": "state",
"passed": true,
"warnings": []
},
{
"theme": "paper-moments",
"type": "er",
"passed": true,
"warnings": []
},
{
"theme": "paper-moments",
"type": "gantt",
"passed": true,
"warnings": []
},
{
"theme": "ocean-blue",
"type": "flowchart",
"passed": true,
"warnings": []
},
{
"theme": "ocean-blue",
"type": "sequence",
"passed": true,
"warnings": []
},
{
"theme": "ocean-blue",
"type": "class",
"passed": true,
"warnings": []
},
{
"theme": "ocean-blue",
"type": "state",
"passed": true,
"warnings": []
},
{
"theme": "ocean-blue",
"type": "er",
"passed": true,
"warnings": []
},
{
"theme": "ocean-blue",
"type": "gantt",
"passed": true,
"warnings": []
},
{
"theme": "midnight-purple",
"type": "flowchart",
"passed": true,
"warnings": []
},
{
"theme": "midnight-purple",
"type": "sequence",
"passed": true,
"warnings": []
},
{
"theme": "midnight-purple",
"type": "class",
"passed": true,
"warnings": []
},
{
"theme": "midnight-purple",
"type": "state",
"passed": true,
"warnings": []
},
{
"theme": "midnight-purple",
"type": "er",
"passed": true,
"warnings": []
},
{
"theme": "midnight-purple",
"type": "gantt",
"passed": true,
"warnings": []
}
]
}
@@ -0,0 +1,32 @@
[
{
"theme": "light",
"errors": [],
"plotCount": 4
},
{
"theme": "dark",
"errors": [],
"plotCount": 4
},
{
"theme": "sepia",
"errors": [],
"plotCount": 4
},
{
"theme": "paper-moments",
"errors": [],
"plotCount": 4
},
{
"theme": "ocean-blue",
"errors": [],
"plotCount": 4
},
{
"theme": "midnight-purple",
"errors": [],
"plotCount": 4
}
]
@@ -0,0 +1,560 @@
> notes-agent-frontend@0.2.0 build C:\Users\KiriAky\.codex\worktrees\7950\NotesAgent\frontend
> vue-tsc -b && vite build
vite v6.4.3 building for production...
transforming...
✓ 3262 modules transformed.
rendering chunks...
computing gzip size...
dist/index.html 0.55 kB │ gzip: 0.33 kB
dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff 4.42 kB
dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 4.93 kB
dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 5.21 kB
dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 5.47 kB
dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff 5.98 kB
dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff 6.19 kB
dist/assets/KaTeX_Size1-Regular-C195tn64.woff 6.50 kB
dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 6.91 kB
dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 6.91 kB
dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf 7.59 kB
dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff 7.66 kB
dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff 7.72 kB
dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 9.64 kB
dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 10.34 kB
dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf 10.36 kB
dist/assets/KaTeX_Script-Regular-D5yQViql.woff 10.59 kB
dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 11.32 kB
dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 11.35 kB
dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf 11.51 kB
dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 12.03 kB
dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 12.22 kB
dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf 12.23 kB
dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff 12.32 kB
dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf 12.34 kB
dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf 12.37 kB
dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff 13.21 kB
dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff 13.30 kB
dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 13.57 kB
dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff 14.11 kB
dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff 14.41 kB
dist/assets/paper-moments-DOmjCJQa.theme 15.58 kB
dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff 16.03 kB
dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 16.40 kB
dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 16.44 kB
dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf 16.65 kB
dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 16.78 kB
dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 16.99 kB
dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff 18.67 kB
dist/assets/KaTeX_Math-Italic-DA0__PXp.woff 18.75 kB
dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff 19.41 kB
dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf 19.44 kB
dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf 19.57 kB
dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf 19.58 kB
dist/assets/KaTeX_Main-Italic-BMLOBm91.woff 19.68 kB
dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf 22.36 kB
dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf 24.50 kB
dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 25.32 kB
dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 26.27 kB
dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf 27.56 kB
dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 28.08 kB
dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff 29.91 kB
dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff 30.77 kB
dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf 31.20 kB
dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf 31.31 kB
dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf 32.97 kB
dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff 33.52 kB
dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf 33.58 kB
dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf 51.34 kB
dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf 53.58 kB
dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf 63.63 kB
dist/.vite/manifest.json 258.05 kB │ gzip: 20.84 kB
dist/assets/HeadingStyleSettings-DHfF7b37.css 0.57 kB │ gzip: 0.29 kB
dist/assets/SkillsView-BwLulPo9.css 0.98 kB │ gzip: 0.39 kB
dist/assets/WorkspaceChat-DhGri1NS.css 1.09 kB │ gzip: 0.48 kB
dist/assets/ExtensionInstallDialog-DRNL9bJf.css 1.14 kB │ gzip: 0.45 kB
dist/assets/LogsView-BrIX2apd.css 1.35 kB │ gzip: 0.53 kB
dist/assets/BenchmarkView-DLutUBdD.css 1.39 kB │ gzip: 0.55 kB
dist/assets/TasksView-DUgcfVCX.css 1.47 kB │ gzip: 0.58 kB
dist/assets/SearchView-DW-1gSdx.css 1.47 kB │ gzip: 0.56 kB
dist/assets/FilePicker-BO9C6lOI.css 1.63 kB │ gzip: 0.60 kB
dist/assets/MediaView-D48AE7U_.css 1.98 kB │ gzip: 0.69 kB
dist/assets/ChatPersonaDialog-DHMXahgY.css 2.03 kB │ gzip: 0.72 kB
dist/assets/MarkdownContent-CLXIe9X7.css 3.56 kB │ gzip: 0.94 kB
dist/assets/WorkspaceView-yzL09utK.css 4.35 kB │ gzip: 1.23 kB
dist/assets/McpServersView-BFLRUwRT.css 5.10 kB │ gzip: 1.25 kB
dist/assets/ChatView-BQEJrX-5.css 5.20 kB │ gzip: 1.41 kB
dist/assets/markdown-D2L0VTei.css 5.43 kB │ gzip: 1.51 kB
dist/assets/VaultEntry-DjSz9QsE.css 5.64 kB │ gzip: 1.37 kB
dist/assets/ThemesView-i5ccHc0M.css 7.00 kB │ gzip: 1.72 kB
dist/assets/PluginsView-CwBTnoBl.css 11.21 kB │ gzip: 2.11 kB
dist/assets/AgentView-DSWsxP_V.css 12.59 kB │ gzip: 2.31 kB
dist/assets/SettingsView-CNkfTZZK.css 13.85 kB │ gzip: 3.02 kB
dist/assets/math-katex-0-18-4-CEK31ho9.css 30.19 kB │ gzip: 8.06 kB
dist/assets/index-DUxb9c05.css 50.43 kB │ gzip: 9.59 kB
dist/assets/editor-milkdown-DebjlF2b.css 83.87 kB │ gzip: 16.14 kB
dist/assets/VisualMarkdownEditor-IxqBomSx.css 390.03 kB │ gzip: 105.48 kB
dist/assets/channel-CrNH6nrN.js 0.11 kB │ gzip: 0.13 kB
dist/assets/init-Gi6I4Gst.js 0.15 kB │ gzip: 0.13 kB
dist/assets/chunk-2Q5K7J3B-BZASLIXN.js 0.19 kB │ gzip: 0.16 kB
dist/assets/chunk-XXDRQBXY-ChINTzlJ.js 0.23 kB │ gzip: 0.21 kB
dist/assets/chunk-JWPE2WC7-BNAOuj8n.js 0.30 kB │ gzip: 0.21 kB
dist/assets/diff-DbItnlRl.js 0.31 kB │ gzip: 0.24 kB
dist/assets/chunk-5VM5RSS4-TQefSFWe.js 0.37 kB │ gzip: 0.27 kB
dist/assets/index-DIIxsTGV.js 0.48 kB │ gzip: 0.31 kB
dist/assets/stateDiagram-v2-MP3YSRHH-Nc43I8Ns.js 0.51 kB │ gzip: 0.35 kB
dist/assets/chunk-POPQ4Y6H-BG03mjXr.js 0.53 kB │ gzip: 0.38 kB
dist/assets/codeowners-Bp6g37R7.js 0.55 kB │ gzip: 0.32 kB
dist/assets/classDiagram-ZZMXUADV-CI5Lv9Pw.js 0.55 kB │ gzip: 0.36 kB
dist/assets/classDiagram-v2-VYDZK3BY-CI5Lv9Pw.js 0.55 kB │ gzip: 0.36 kB
dist/assets/brainfuck-C4LP7Hcl.js 0.61 kB │ gzip: 0.33 kB
dist/assets/swimlanesDiagram-VR7AAH4N-C4Ag8puk.js 0.63 kB │ gzip: 0.41 kB
dist/assets/infoDiagram-27XIBGKW-Bb4UVFAL.js 0.66 kB │ gzip: 0.45 kB
dist/assets/properties-C78fOPTZ.js 0.67 kB │ gzip: 0.35 kB
dist/assets/shellsession-BADoaaVG.js 0.71 kB │ gzip: 0.43 kB
dist/assets/tsv-B_m7g4N7.js 0.74 kB │ gzip: 0.34 kB
dist/assets/cmake-BQqOBYOt.js 0.78 kB │ gzip: 0.46 kB
dist/assets/asciiarmor-Df11BRmG.js 0.79 kB │ gzip: 0.41 kB
dist/assets/http-DBlCnlav.js 0.85 kB │ gzip: 0.41 kB
dist/assets/protobuf-ChK-085T.js 0.86 kB │ gzip: 0.52 kB
dist/assets/solr-DehyRSwq.js 0.87 kB │ gzip: 0.46 kB
dist/assets/html-derivative-DlHx6ybY.js 0.90 kB │ gzip: 0.50 kB
dist/assets/troff-wAsdV37c.js 0.96 kB │ gzip: 0.44 kB
dist/assets/git-rebase-r7XF79zn.js 0.98 kB │ gzip: 0.44 kB
dist/assets/qmldir-C8lEn-DE.js 1.00 kB │ gzip: 0.45 kB
dist/assets/FilePicker-CjNjYr-N.js 1.04 kB │ gzip: 0.61 kB
dist/assets/sizeCapture-INFHLROL-DWCqhl6c.js 1.08 kB │ gzip: 0.61 kB
dist/assets/spreadsheet-BCZA_wO0.js 1.14 kB │ gzip: 0.54 kB
dist/assets/toml-Bm5Em-hy.js 1.14 kB │ gzip: 0.54 kB
dist/assets/csv-fuZLfV_i.js 1.14 kB │ gzip: 0.37 kB
dist/assets/ordinal-Cboi1Yqb.js 1.19 kB │ gzip: 0.57 kB
dist/assets/git-commit-F4YmCXRG.js 1.23 kB │ gzip: 0.53 kB
dist/assets/xsl-CtQFsRM5.js 1.39 kB │ gzip: 0.52 kB
dist/assets/mbox-CNhZ1qSd.js 1.40 kB │ gzip: 0.66 kB
dist/assets/dotenv-Da5cRb03.js 1.42 kB │ gzip: 0.53 kB
dist/assets/sparql-rVzFXLq3.js 1.48 kB │ gzip: 0.82 kB
dist/assets/index-Vcq4gwWv.js 1.49 kB │ gzip: 0.82 kB
dist/assets/ini-BEwlwnbL.js 1.53 kB │ gzip: 0.50 kB
dist/assets/MarkdownContent.vue_vue_type_style_index_0_lang-B376YVIn.js 1.56 kB │ gzip: 0.83 kB
dist/assets/sieve-C3Gn_uJK.js 1.62 kB │ gzip: 0.77 kB
dist/assets/rpm-CTu-6PCP.js 1.62 kB │ gzip: 0.83 kB
dist/assets/markdownPreferences-DKoh9bVv.js 1.66 kB │ gzip: 0.86 kB
dist/assets/fortran-fixed-form-CkoXwp7k.js 1.67 kB │ gzip: 0.69 kB
dist/assets/factor-kuTfRLto.js 1.67 kB │ gzip: 0.61 kB
dist/assets/railroadDiagram-O6MQD6OU-DwB0kF9i.js 1.69 kB │ gzip: 0.80 kB
dist/assets/docker-BcOcwvcX.js 1.74 kB │ gzip: 0.60 kB
dist/assets/z80-Hz9HOZM7.js 1.75 kB │ gzip: 0.81 kB
dist/assets/eiffel-CnydiIhH.js 1.81 kB │ gzip: 0.92 kB
dist/assets/desktop-BmXAJ9_W.js 1.83 kB │ gzip: 0.76 kB
dist/assets/pluginCommandForm-DV9KKjoP.js 1.85 kB │ gzip: 0.95 kB
dist/assets/chunk-F27PBJKO-Ctsjd131.js 1.88 kB │ gzip: 0.83 kB
dist/assets/abnfDiagram-VCTEODGH-s3lnCumS.js 1.89 kB │ gzip: 0.94 kB
dist/assets/elm-vLlmbW-K.js 1.89 kB │ gzip: 0.82 kB
dist/assets/hxml-2-FPmUDs.js 1.89 kB │ gzip: 0.90 kB
dist/assets/mathematica-DTrFuWx2.js 1.92 kB │ gzip: 0.82 kB
dist/assets/dockerfile-BKs6k2Af.js 1.95 kB │ gzip: 0.67 kB
dist/assets/turtle-B1tBg_DP.js 1.98 kB │ gzip: 0.90 kB
dist/assets/ebnf-CDyGwa7X.js 1.99 kB │ gzip: 0.81 kB
dist/assets/smalltalk-CnHTOXQT.js 2.01 kB │ gzip: 0.85 kB
dist/assets/pegDiagram-XKGWAZYB-CUdM1qfX.js 2.04 kB │ gzip: 0.97 kB
dist/assets/dtd-DF_7sFjM.js 2.06 kB │ gzip: 0.87 kB
dist/assets/mumps-BT43cFF4.js 2.07 kB │ gzip: 0.98 kB
dist/assets/fcl-Kvtd6kyn.js 2.08 kB │ gzip: 0.95 kB
dist/assets/ebnfDiagram-PWID7BFC-B0NYa1C1.js 2.09 kB │ gzip: 0.92 kB
dist/assets/ntriples-BfvgReVJ.js 2.10 kB │ gzip: 0.75 kB
dist/assets/yacas-BJ4BC0dw.js 2.15 kB │ gzip: 1.09 kB
dist/assets/wenyan-BV7otONQ.js 2.16 kB │ gzip: 1.09 kB
dist/assets/jssm-C2t-YnRu.js 2.24 kB │ gzip: 0.62 kB
dist/assets/simple-mode-GW_nhZxv.js 2.28 kB │ gzip: 1.09 kB
dist/assets/apl-B4CMkyY2.js 2.30 kB │ gzip: 1.23 kB
dist/assets/pascal--L3eBynH.js 2.30 kB │ gzip: 1.19 kB
dist/assets/octave-Ck1zUtKM.js 2.31 kB │ gzip: 1.09 kB
dist/assets/commonlisp-DBKNyK5s.js 2.32 kB │ gzip: 1.10 kB
dist/assets/reg-C-SQnVFl.js 2.35 kB │ gzip: 0.70 kB
dist/assets/tcl-DVfN8rqt.js 2.36 kB │ gzip: 1.23 kB
dist/assets/edge-FbVlp4U3.js 2.36 kB │ gzip: 0.70 kB
dist/assets/index-CjhMCctz.js 2.46 kB │ gzip: 1.52 kB
dist/assets/webidl-ZXfAyPTL.js 2.52 kB │ gzip: 1.26 kB
dist/assets/pig-CevX1Tat.js 2.53 kB │ gzip: 1.38 kB
dist/assets/puppet-DMA9R1ak.js 2.54 kB │ gzip: 1.20 kB
dist/assets/forth-Ffai-XNe.js 2.54 kB │ gzip: 1.33 kB
dist/assets/diff-D97Zzqfu.js 2.57 kB │ gzip: 0.70 kB
dist/assets/shell-CjFT_Tl9.js 2.57 kB │ gzip: 1.21 kB
dist/assets/gleam-BspZqrRM.js 2.58 kB │ gzip: 0.82 kB
dist/assets/erb-DXfck5VN.js 2.61 kB │ gzip: 0.84 kB
dist/assets/hy-DFXneXwc.js 2.65 kB │ gzip: 1.18 kB
dist/assets/index-Bu1SCIgx.js 2.66 kB │ gzip: 1.53 kB
dist/assets/velocity-D8B20fx6.js 2.67 kB │ gzip: 1.11 kB
dist/assets/tiddlywiki-DO-Gjzrf.js 2.78 kB │ gzip: 1.07 kB
dist/assets/modelica-Dc1JOy9r.js 2.79 kB │ gzip: 1.29 kB
dist/assets/json-Cp-IABpG.js 2.82 kB │ gzip: 0.78 kB
dist/assets/openscad-C4EeE6gA.js 2.82 kB │ gzip: 1.01 kB
dist/assets/log-2UxHyX5q.js 2.85 kB │ gzip: 0.90 kB
dist/assets/oz-BzwKVEFT.js 2.90 kB │ gzip: 1.28 kB
dist/assets/cairo-KRGpt6FW.js 2.94 kB │ gzip: 0.81 kB
dist/assets/r-B6wPVr8A.js 2.94 kB │ gzip: 1.36 kB
dist/assets/berry-uYugtg8r.js 3.01 kB │ gzip: 0.81 kB
dist/assets/jsonl-DcaNXYhu.js 3.01 kB │ gzip: 0.79 kB
dist/assets/jsonc-Des-eS-w.js 3.11 kB │ gzip: 0.80 kB
dist/assets/HeadingStyleSettings-Bhiwz6_B.js 3.12 kB │ gzip: 1.48 kB
dist/assets/stex-C3f8Ysf7.js 3.12 kB │ gzip: 1.20 kB
dist/assets/logo-BtOb2qkB.js 3.13 kB │ gzip: 1.47 kB
dist/assets/po-BTJTHyun.js 3.24 kB │ gzip: 0.91 kB
dist/assets/tiki-DGYXhP31.js 3.25 kB │ gzip: 1.26 kB
dist/assets/json5-C9tS-k6U.js 3.25 kB │ gzip: 0.83 kB
dist/assets/mipsasm-CKIfxQSi.js 3.26 kB │ gzip: 1.18 kB
dist/assets/tasl-QIJgUcNo.js 3.29 kB │ gzip: 0.85 kB
dist/assets/rbs-CpoqiR4B.js 3.31 kB │ gzip: 0.73 kB
dist/assets/vhdl-lSbBsy5d.js 3.35 kB │ gzip: 1.51 kB
dist/assets/genie-D0YGMca9.js 3.36 kB │ gzip: 1.21 kB
dist/assets/rel-C3B-1QV4.js 3.37 kB │ gzip: 1.11 kB
dist/assets/vala-CsfeWuGM.js 3.37 kB │ gzip: 1.19 kB
dist/assets/lua-VAEuO923.js 3.41 kB │ gzip: 1.43 kB
dist/assets/mermaidService-EVMjUBQI.js 3.42 kB │ gzip: 1.79 kB
dist/assets/arc-DnWybcCe.js 3.43 kB │ gzip: 1.47 kB
dist/assets/splunk-BtCnVYZw.js 3.44 kB │ gzip: 1.52 kB
dist/assets/index-833-DuH6.js 3.44 kB │ gzip: 1.74 kB
dist/assets/mscgen-BA5vi2Kp.js 3.51 kB │ gzip: 0.98 kB
dist/assets/sparql-DkYu6x3z.js 3.55 kB │ gzip: 1.63 kB
dist/assets/cypher-C_CwsFkJ.js 3.56 kB │ gzip: 1.52 kB
dist/assets/fluent-C4IJs8-o.js 3.61 kB │ gzip: 0.90 kB
dist/assets/ssh-config-_ykCGR6B.js 3.62 kB │ gzip: 1.60 kB
dist/assets/jsonnet-DFQXde-d.js 3.62 kB │ gzip: 1.05 kB
dist/assets/kdl-DV7GczEv.js 3.63 kB │ gzip: 1.04 kB
dist/assets/glsl-DplSGwfg.js 3.63 kB │ gzip: 1.41 kB
dist/assets/hurl-irOxFIW8.js 3.65 kB │ gzip: 1.16 kB
dist/assets/narrat-DRg8JJMk.js 3.67 kB │ gzip: 1.11 kB
dist/assets/_baseMerge-BNBydYQA.js 3.68 kB │ gzip: 1.73 kB
dist/assets/turtle-BsS91CYL.js 3.70 kB │ gzip: 0.98 kB
dist/assets/d-pRatUO7H.js 3.72 kB │ gzip: 1.68 kB
dist/assets/coffeescript-S37ZYGWr.js 3.87 kB │ gzip: 1.69 kB
dist/assets/vb-CmGdzxic.js 3.90 kB │ gzip: 1.79 kB
dist/assets/zenscript-DVFEvuxE.js 3.91 kB │ gzip: 1.28 kB
dist/assets/ron-D8l8udqQ.js 3.91 kB │ gzip: 0.98 kB
dist/assets/swift-BzpIVaGY.js 3.96 kB │ gzip: 1.79 kB
dist/assets/VaultEntry-DmoPppw3.js 3.96 kB │ gzip: 1.95 kB
dist/assets/WorkspaceChat-CrwU7la3.js 3.97 kB │ gzip: 1.89 kB
dist/assets/asn1-EdZsLKOL.js 3.98 kB │ gzip: 1.96 kB
dist/assets/gn-n2N0HUVH.js 4.00 kB │ gzip: 1.49 kB
dist/assets/q-pXgVlZs6.js 4.03 kB │ gzip: 1.67 kB
dist/assets/ttcn-cfg-B9xdYoR4.js 4.05 kB │ gzip: 1.71 kB
dist/assets/dylan-DwRh75JA.js 4.05 kB │ gzip: 1.65 kB
dist/assets/livescript-BwQOo05w.js 4.09 kB │ gzip: 1.64 kB
dist/assets/groovy-D9Dt4D0W.js 4.14 kB │ gzip: 1.77 kB
dist/assets/pascal-D93ZcfNL.js 4.15 kB │ gzip: 1.67 kB
dist/assets/haskell-Cw1EW3IL.js 4.17 kB │ gzip: 1.89 kB
dist/assets/SearchView-B47FoyI1.js 4.26 kB │ gzip: 2.09 kB
dist/assets/diagram-Z3DM3KII-Bb5zNdmf.js 4.33 kB │ gzip: 1.91 kB
dist/assets/tcl-dwOrl1Do.js 4.43 kB │ gzip: 1.52 kB
dist/assets/asterisk-B-8jnY81.js 4.48 kB │ gzip: 1.78 kB
dist/assets/nextflow-C-mBbutL.js 4.51 kB │ gzip: 1.17 kB
dist/assets/rosmsg-BJDFO7_C.js 4.52 kB │ gzip: 1.06 kB
dist/assets/http-jrhK8wxY.js 4.55 kB │ gzip: 1.12 kB
dist/assets/gas-Bneqetm1.js 4.57 kB │ gzip: 1.28 kB
dist/assets/fortran-DYz_wnZ1.js 4.65 kB │ gzip: 2.01 kB
dist/assets/polar-C0HS_06l.js 4.67 kB │ gzip: 1.12 kB
dist/assets/defaultLocale-DX6XiGOO.js 4.69 kB │ gzip: 2.18 kB
dist/assets/sdbl-DVxCFoDh.js 4.70 kB │ gzip: 2.01 kB
dist/assets/fennel-BYunw83y.js 4.77 kB │ gzip: 1.53 kB
dist/assets/mllike-CXdrOF99.js 4.79 kB │ gzip: 1.53 kB
dist/assets/bibtex-CHM0blh-.js 4.80 kB │ gzip: 0.83 kB
dist/assets/ttcn-CfJYG6tj.js 4.80 kB │ gzip: 2.13 kB
dist/assets/SkillsView-BIOhy4r9.js 4.90 kB │ gzip: 2.06 kB
dist/assets/index-BlxF_W4d.js 4.95 kB │ gzip: 1.51 kB
dist/assets/llvm-BZoOZj88.js 5.04 kB │ gzip: 2.01 kB
dist/assets/index-E-vsI35b.js 5.10 kB │ gzip: 2.43 kB
dist/assets/index-D2e4uDXw.js 5.11 kB │ gzip: 2.55 kB
dist/assets/ecl-Cabwm37j.js 5.13 kB │ gzip: 2.31 kB
dist/assets/crystal-SjHAIU92.js 5.13 kB │ gzip: 2.07 kB
dist/assets/wgsl-Dx-B1_4e.js 5.14 kB │ gzip: 1.39 kB
dist/assets/ruby-B2Rjki9n.js 5.16 kB │ gzip: 2.15 kB
dist/assets/gdresource-TyuKm33G.js 5.29 kB │ gzip: 1.34 kB
dist/assets/qml-3beO22l8.js 5.34 kB │ gzip: 1.38 kB
dist/assets/zig-VOosw3JB.js 5.34 kB │ gzip: 1.55 kB
dist/assets/dax-CEL-wOlO.js 5.37 kB │ gzip: 2.23 kB
dist/assets/bicep-Bmn6On1c.js 5.38 kB │ gzip: 1.15 kB
dist/assets/xml-sdJ4AIDG.js 5.38 kB │ gzip: 1.21 kB
dist/assets/julia-DuME0IfC.js 5.39 kB │ gzip: 2.14 kB
dist/assets/awk-DMzUqQB5.js 5.46 kB │ gzip: 1.38 kB
dist/assets/browser-c3U3mMxj.js 5.53 kB │ gzip: 2.79 kB
dist/assets/TasksView-BnSHnCQV.js 5.65 kB │ gzip: 2.49 kB
dist/assets/linear-Dsc1LO7N.js 5.66 kB │ gzip: 2.31 kB
dist/assets/ExtensionInstallDialog-BSAwvlPk.js 5.68 kB │ gzip: 2.80 kB
dist/assets/jinja-f2NsQr07.js 5.69 kB │ gzip: 1.40 kB
dist/assets/lean-BZvkOJ9d.js 5.78 kB │ gzip: 1.92 kB
dist/assets/vbscript-BuJXcnF6.js 5.82 kB │ gzip: 2.57 kB
dist/assets/powerquery-CEu0bR-o.js 5.90 kB │ gzip: 1.52 kB
dist/assets/mirc-CjQqDB4T.js 5.92 kB │ gzip: 2.68 kB
dist/assets/shaderlab-Dg9Lc6iA.js 5.92 kB │ gzip: 2.08 kB
dist/assets/cypher-COkxafJQ.js 5.96 kB │ gzip: 1.73 kB
dist/assets/coq-C7JzOVbR.js 6.01 kB │ gzip: 1.95 kB
dist/assets/vb-Cu-pLBUe.js 6.08 kB │ gzip: 2.33 kB
dist/assets/cobol-CWcv1MsR.js 6.20 kB │ gzip: 2.96 kB
dist/assets/diagram-UQ7AKVKN-Cms5HwfU.js 6.31 kB │ gzip: 2.73 kB
dist/assets/gdshader-DkwncUOv.js 6.33 kB │ gzip: 1.73 kB
dist/assets/ara-BRHolxvo.js 6.36 kB │ gzip: 1.81 kB
dist/assets/scheme-C41bIUwD.js 6.37 kB │ gzip: 2.39 kB
dist/assets/verilog-nZwndyjY.js 6.41 kB │ gzip: 1.92 kB
dist/assets/clojure-P80f7IUj.js 6.41 kB │ gzip: 1.42 kB
dist/assets/postcss-CXtECtnM.js 6.42 kB │ gzip: 1.91 kB
dist/assets/toml-vGWfd6FD.js 6.43 kB │ gzip: 1.28 kB
dist/assets/pieDiagram-E7YTZNPT-YK6ICI5_.js 6.43 kB │ gzip: 2.70 kB
dist/assets/python-BuPzkPfP.js 6.48 kB │ gzip: 2.73 kB
dist/assets/LogsView-ZSnm_Csu.js 6.52 kB │ gzip: 3.14 kB
dist/assets/proto-C7zT0LnQ.js 6.55 kB │ gzip: 1.42 kB
dist/assets/chapel-DTp_pixX.js 6.62 kB │ gzip: 1.85 kB
dist/assets/xquery-DzFWVndE.js 6.62 kB │ gzip: 2.56 kB
dist/assets/pug-DeIclll2.js 6.67 kB │ gzip: 1.94 kB
dist/assets/r-Cf5RLm7j.js 6.74 kB │ gzip: 1.84 kB
dist/assets/talonscript-CkByrt1z.js 6.76 kB │ gzip: 1.49 kB
dist/assets/textile-CnDTJFAw.js 6.80 kB │ gzip: 2.44 kB
dist/assets/nsis-LdVXkNf5.js 6.81 kB │ gzip: 2.99 kB
dist/assets/BenchmarkView-CoNnmLzX.js 6.89 kB │ gzip: 3.19 kB
dist/assets/riscv-BM1_JUlF.js 6.91 kB │ gzip: 1.98 kB
dist/assets/soy-8wufbnw4.js 6.98 kB │ gzip: 1.66 kB
dist/assets/scheme-C98Dy4si.js 7.17 kB │ gzip: 2.05 kB
dist/assets/hlsl-D3lLCCz7.js 7.26 kB │ gzip: 2.19 kB
dist/assets/nginx-DdIZxoE0.js 7.34 kB │ gzip: 2.72 kB
dist/assets/qss-IeuSbFQv.js 7.47 kB │ gzip: 2.58 kB
dist/assets/prisma-Vru482bI.js 7.74 kB │ gzip: 1.48 kB
dist/assets/powershell-CFHJl5sT.js 7.77 kB │ gzip: 3.33 kB
dist/assets/ChatPersonaDialog-BHpRSHc3.js 7.84 kB │ gzip: 3.61 kB
dist/assets/systemd-4A_iFExJ.js 7.87 kB │ gzip: 2.55 kB
dist/assets/haxe-H-WmDvRZ.js 7.89 kB │ gzip: 2.95 kB
dist/assets/regexp-CDVJQ6XC.js 7.99 kB │ gzip: 1.42 kB
dist/assets/erlang-BNw1qcRV.js 8.10 kB │ gzip: 2.89 kB
dist/assets/verilog-C6RDOZhf.js 8.24 kB │ gzip: 3.52 kB
dist/assets/haml-D5jkg6IW.js 8.26 kB │ gzip: 1.81 kB
dist/assets/diagram-S7CK7UJ4-C0vmdMvd.js 8.44 kB │ gzip: 3.77 kB
dist/assets/vue-html-AaS7Mt5G.js 8.47 kB │ gzip: 1.68 kB
dist/assets/plsql-ChMvpjG-.js 8.51 kB │ gzip: 3.00 kB
dist/assets/isArrayLikeObject-Csl51Uc7.js 8.52 kB │ gzip: 3.19 kB
dist/assets/dart-bE4Kk8sk.js 8.62 kB │ gzip: 2.00 kB
dist/assets/kotlin-BdnUsdx6.js 8.79 kB │ gzip: 2.13 kB
dist/assets/make-CHLpvVh8.js 8.96 kB │ gzip: 1.77 kB
dist/assets/sas-DEy46yEz.js 9.06 kB │ gzip: 3.81 kB
dist/assets/smithy-cds9vsN8.js 9.13 kB │ gzip: 1.53 kB
dist/assets/sass-Cj5Yp3dK.js 9.29 kB │ gzip: 2.49 kB
dist/assets/sas-B4kiWyti.js 9.33 kB │ gzip: 4.11 kB
dist/assets/tex-D96PA37w.js 9.67 kB │ gzip: 3.06 kB
dist/assets/jison-wvAkD_A8.js 9.69 kB │ gzip: 1.85 kB
dist/assets/perl-CdXCOZ3F.js 9.75 kB │ gzip: 3.46 kB
dist/assets/cmake-D1j8_8rp.js 9.86 kB │ gzip: 3.37 kB
dist/assets/hcl-BWvSN4gD.js 10.05 kB │ gzip: 1.93 kB
dist/assets/gherkin-heZmZLOM.js 10.16 kB │ gzip: 5.09 kB
dist/assets/cynefinDiagram-5FMLGOSQ-BD2mGua6.js 10.18 kB │ gzip: 3.68 kB
dist/assets/pkl-u5AG7uiY.js 10.37 kB │ gzip: 1.38 kB
dist/assets/beancount-k_qm7-4y.js 10.37 kB │ gzip: 1.44 kB
dist/assets/nextflow-groovy-vE_lwT2v.js 10.44 kB │ gzip: 2.14 kB
dist/assets/dream-maker-BtqSS_iP.js 10.47 kB │ gzip: 2.25 kB
dist/assets/raku-DXvB9xmW.js 10.47 kB │ gzip: 2.94 kB
dist/assets/stateDiagram-D77RDMKH-B-0A9xPX.js 10.48 kB │ gzip: 3.69 kB
dist/assets/yaml-Buea-lGh.js 10.51 kB │ gzip: 2.27 kB
dist/assets/rst-bs7f0vWN.js 10.67 kB │ gzip: 2.42 kB
dist/assets/clojure-BMjYHr_A.js 10.82 kB │ gzip: 3.99 kB
dist/assets/diagram-VSXAHHWV-Df9UVgEq.js 10.90 kB │ gzip: 4.21 kB
dist/assets/elm-DbKCFpqz.js 10.97 kB │ gzip: 2.12 kB
dist/assets/just-Cwhn7H3k.js 11.23 kB │ gzip: 2.80 kB
dist/assets/dagre-GXQ25YYZ-xEIgJp7x.js 11.25 kB │ gzip: 4.25 kB
dist/assets/prolog-CbFg5uaA.js 11.36 kB │ gzip: 3.83 kB
dist/assets/terraform-BETggiCN.js 11.39 kB │ gzip: 2.51 kB
dist/assets/puppet-BMWR74SV.js 11.44 kB │ gzip: 2.11 kB
dist/assets/idl-BEugSyMb.js 11.63 kB │ gzip: 4.52 kB
dist/assets/gherkin-DyxjwDmM.js 11.95 kB │ gzip: 5.05 kB
dist/assets/wasm-MzD3tlZU.js 12.01 kB │ gzip: 2.19 kB
dist/assets/hjson-D5-asLiD.js 12.05 kB │ gzip: 1.64 kB
dist/assets/surrealql-Cjom0U5J.js 12.06 kB │ gzip: 3.30 kB
dist/assets/handlebars-BpdQsYii.js 12.15 kB │ gzip: 2.38 kB
dist/assets/apache-Pmp26Uib.js 12.46 kB │ gzip: 3.72 kB
dist/assets/index-CZ9cYO_F.js 12.75 kB │ gzip: 5.63 kB
dist/assets/bat-CickPsom.js 12.89 kB │ gzip: 3.23 kB
dist/assets/fish-BvzEVeQv.js 13.04 kB │ gzip: 1.74 kB
dist/assets/nsis-BlV79W_Q.js 13.13 kB │ gzip: 4.07 kB
dist/assets/v-BGw2Nkan.js 13.33 kB │ gzip: 2.77 kB
dist/assets/pug-DKIMFp6K.js 13.84 kB │ gzip: 2.58 kB
dist/assets/smalltalk-BOQMe2GC.js 14.13 kB │ gzip: 2.16 kB
dist/assets/clarity-Dn5IMItf.js 14.36 kB │ gzip: 2.51 kB
dist/assets/gnuplot-DdkO51Og.js 14.78 kB │ gzip: 3.27 kB
dist/assets/index-CvBQ3_sw.js 14.83 kB │ gzip: 6.00 kB
dist/assets/rust-B1yitclQ.js 15.07 kB │ gzip: 2.72 kB
dist/assets/kusto-wEQ09or8.js 15.17 kB │ gzip: 3.92 kB
dist/assets/ChatView-yeXQKTN6.js 15.41 kB │ gzip: 6.38 kB
dist/assets/nix-CwoSXNpI.js 15.51 kB │ gzip: 2.48 kB
dist/assets/lua-BaeVxFsk.js 15.54 kB │ gzip: 3.16 kB
dist/assets/actionscript-3-B3316cI-.js 15.54 kB │ gzip: 2.71 kB
dist/assets/MediaView-DDn-_XZH.js 15.57 kB │ gzip: 6.74 kB
dist/assets/chunk-SVP7TREG-C9m5TIe-.js 15.75 kB │ gzip: 4.42 kB
dist/assets/abap-BdImnpbu.js 15.85 kB │ gzip: 5.91 kB
dist/assets/matlab-D7o27uSR.js 16.09 kB │ gzip: 3.06 kB
dist/assets/luau-BnpPk5vE.js 16.14 kB │ gzip: 3.55 kB
dist/assets/diagram-VX7I27RA-ziQFycS8.js 16.15 kB │ gzip: 5.78 kB
dist/assets/cue-D82EKSYY.js 16.20 kB │ gzip: 2.06 kB
dist/assets/elixir-CkH2-t6x.js 16.32 kB │ gzip: 2.80 kB
dist/assets/index-Cs5JlGLq.js 16.35 kB │ gzip: 7.47 kB
dist/assets/solidity-DijEV5ha.js 16.41 kB │ gzip: 3.16 kB
dist/assets/odin-BBf5iR-q.js 16.51 kB │ gzip: 2.94 kB
dist/assets/ts-tags-D351s5mN.js 16.57 kB │ gzip: 2.07 kB
dist/assets/javascript-iXu5QeM3.js 17.08 kB │ gzip: 5.75 kB
dist/assets/ishikawaDiagram-5VMMS53U-DiQySQzt.js 17.65 kB │ gzip: 6.72 kB
dist/assets/move-el3G9tDJ.js 17.66 kB │ gzip: 3.06 kB
dist/assets/graphql-ChdNCCLP.js 18.00 kB │ gzip: 2.52 kB
dist/assets/liquid-C0sCDyMI.js 18.09 kB │ gzip: 3.16 kB
dist/assets/svelte-Cy7k_4gC.js 18.24 kB │ gzip: 3.14 kB
dist/assets/gdscript-DqcFQ5yU.js 19.09 kB │ gzip: 3.77 kB
dist/assets/groovy-gcz8RCvz.js 19.18 kB │ gzip: 3.60 kB
dist/assets/WorkspaceView-D--Q9mXh.js 19.88 kB │ gzip: 8.44 kB
dist/assets/glimmer-js-ByusRIyA.js 20.07 kB │ gzip: 2.95 kB
dist/assets/glimmer-ts-BfAWNZQY.js 20.07 kB │ gzip: 2.94 kB
dist/assets/powershell-BmBUJMz7.js 20.16 kB │ gzip: 4.07 kB
dist/assets/mdc-D1_yUvq7.js 20.18 kB │ gzip: 6.81 kB
dist/assets/viml-CJc9bBzg.js 20.37 kB │ gzip: 6.73 kB
dist/assets/kanban-definition-UXKFOSKX-C3erkLcV.js 20.78 kB │ gzip: 7.34 kB
dist/assets/nushell-D3jzshHO.js 20.88 kB │ gzip: 5.36 kB
dist/assets/index-D0DaXqvL.js 20.96 kB │ gzip: 9.37 kB
dist/assets/index-Cmf0-okb.js 21.23 kB │ gzip: 9.76 kB
dist/assets/wit-5i3qLPDT.js 21.47 kB │ gzip: 2.89 kB
dist/assets/twig-27uCiNez.js 21.98 kB │ gzip: 3.98 kB
dist/assets/clike-B9uivgTg.js 22.30 kB │ gzip: 7.86 kB
dist/assets/nim-BIad80T-.js 22.46 kB │ gzip: 3.16 kB
dist/assets/common-lisp-Cg-RD9OK.js 22.58 kB │ gzip: 6.06 kB
dist/assets/index-DduR1oeT.js 23.10 kB │ gzip: 10.41 kB
dist/assets/sql-CRqJ_cUM.js 23.43 kB │ gzip: 7.42 kB
dist/assets/mindmap-definition-YA3MSWOX-DSZ7Nbk9.js 23.44 kB │ gzip: 7.94 kB
dist/assets/sankeyDiagram-P5KCCOFB-Cnmoq8od.js 23.47 kB │ gzip: 8.63 kB
dist/assets/journeyDiagram-3NMN7TZE-BwGxWKov.js 23.65 kB │ gzip: 8.39 kB
dist/assets/cadence-Bv_4Rxtq.js 23.67 kB │ gzip: 3.67 kB
dist/assets/astro-HNnZUWAn.js 24.01 kB │ gzip: 7.55 kB
dist/assets/apl-CORt7UWP.js 24.04 kB │ gzip: 4.20 kB
dist/assets/templ-DhtptRzy.js 24.06 kB │ gzip: 5.40 kB
dist/assets/vhdl-CeAyd5Ju.js 24.26 kB │ gzip: 3.87 kB
dist/assets/angular-html-DA-rfuFy.js 24.29 kB │ gzip: 4.01 kB
dist/assets/purescript-CklMAg4u.js 24.69 kB │ gzip: 3.25 kB
dist/assets/McpServersView-BXDi-IBv.js 24.81 kB │ gzip: 9.19 kB
dist/assets/moonbit-CHtswR0a.js 24.94 kB │ gzip: 3.79 kB
dist/assets/vue-BqiEGhQt.js 24.96 kB │ gzip: 3.04 kB
dist/assets/typespec-CAFt9gP4.js 25.05 kB │ gzip: 2.63 kB
dist/assets/fsharp-CXgrBDvD.js 25.31 kB │ gzip: 4.13 kB
dist/assets/marko-DjSrsDqO.js 25.48 kB │ gzip: 3.59 kB
dist/assets/stylus-B533Al4x.js 25.80 kB │ gzip: 8.60 kB
dist/assets/wardleyDiagram-VM6X3IG4-bQBfHON_.js 26.18 kB │ gzip: 6.99 kB
dist/assets/c3-Dp5svz6Z.js 26.39 kB │ gzip: 3.99 kB
dist/assets/system-verilog-0hqHdDBg.js 26.56 kB │ gzip: 4.88 kB
dist/assets/PluginsView-L41qWUGa.js 26.83 kB │ gzip: 8.88 kB
dist/assets/codeql-DsOJ9woJ.js 26.88 kB │ gzip: 3.79 kB
dist/assets/css-BnMrqG3P.js 27.13 kB │ gzip: 8.47 kB
dist/assets/AgentView-vuEh8_sU.js 27.16 kB │ gzip: 9.10 kB
dist/assets/scss-D5BDwBP9.js 27.20 kB │ gzip: 4.20 kB
dist/assets/java-CylS5w8V.js 27.22 kB │ gzip: 4.26 kB
dist/assets/coffee-Ch7k5sss.js 27.42 kB │ gzip: 6.35 kB
dist/assets/razor-BjBPvh-w.js 27.51 kB │ gzip: 3.57 kB
dist/assets/index-yVH2efBJ.js 28.27 kB │ gzip: 12.76 kB
dist/assets/index-rtxKP8li.js 28.80 kB │ gzip: 11.71 kB
dist/assets/scala-CqE71os6.js 28.89 kB │ gzip: 3.94 kB
dist/assets/purify.es-5AjVNlXF.js 28.92 kB │ gzip: 11.14 kB
dist/assets/crystal-DGywbUpC.js 29.39 kB │ gzip: 4.45 kB
dist/assets/applescript-Co6uUVPk.js 29.57 kB │ gzip: 5.93 kB
dist/assets/gitGraphDiagram-WWUBYQGX-C3QLpWqM.js 30.02 kB │ gzip: 8.92 kB
dist/assets/index-l9h65gFm.js 30.82 kB │ gzip: 12.67 kB
dist/assets/erDiagram-RLTQ6QDP-gaZhO_Bd.js 31.01 kB │ gzip: 10.68 kB
dist/assets/stylus-BEDo0Tqx.js 31.07 kB │ gzip: 7.99 kB
dist/assets/julia-5Bft2YPA.js 31.08 kB │ gzip: 4.34 kB
dist/assets/requirementDiagram-BXWQKSXE-Cia-WX85.js 31.29 kB │ gzip: 9.87 kB
dist/assets/timeline-definition-24CTP7MA-DRPkaIkb.js 31.43 kB │ gzip: 10.47 kB
dist/assets/ahk-CsyLZFj1.js 31.44 kB │ gzip: 7.81 kB
dist/assets/layout-BPporBfO.js 32.04 kB │ gzip: 11.47 kB
dist/assets/VisualMarkdownEditor-DpC_b1CQ.js 32.34 kB │ gzip: 12.47 kB
dist/assets/index-BtCU2wNO.js 32.36 kB │ gzip: 13.09 kB
dist/assets/bsl-DlhNcFeZ.js 33.95 kB │ gzip: 8.36 kB
dist/assets/quadrantDiagram-AXDQQJYC-BjYsuyTc.js 34.57 kB │ gzip: 10.18 kB
dist/assets/nginx-BpAMiNFr.js 35.37 kB │ gzip: 4.43 kB
dist/assets/haxe-CfZj7gIn.js 35.95 kB │ gzip: 6.01 kB
dist/assets/org-DM6o9KBp.js 36.32 kB │ gzip: 3.70 kB
dist/assets/sql-D0XecflT.js 37.05 kB │ gzip: 10.94 kB
dist/assets/erlang-DsQrWhSR.js 37.48 kB │ gzip: 4.40 kB
dist/assets/chunk-IMKFNOWR-CMjnXVE8.js 38.62 kB │ gzip: 12.68 kB
dist/assets/bird2-Bx8U0n9b.js 38.68 kB │ gzip: 8.50 kB
dist/assets/cobol-nBiQ_Alo.js 39.13 kB │ gzip: 10.86 kB
dist/assets/asm-D_Q5rh1f.js 40.72 kB │ gzip: 8.21 kB
dist/assets/index-CRAC0HLJ.js 40.77 kB │ gzip: 16.77 kB
dist/assets/shellscript-Yzrsuije.js 41.48 kB │ gzip: 6.09 kB
dist/assets/haskell-Df6bDoY_.js 41.49 kB │ gzip: 6.44 kB
dist/assets/vennDiagram-4TSXK5OY-CS54t_H7.js 42.45 kB │ gzip: 15.85 kB
dist/assets/perl-B9cMNwum.js 43.16 kB │ gzip: 4.67 kB
dist/assets/blockDiagram-I7D4REHJ-CwXV7v-G.js 43.24 kB │ gzip: 13.96 kB
dist/assets/d-85-TOEBH.js 43.80 kB │ gzip: 8.47 kB
dist/assets/index-CiwVSVo-.js 44.38 kB │ gzip: 15.39 kB
dist/assets/xychartDiagram-S5SC5T6Z-SD9juUjS.js 44.59 kB │ gzip: 12.66 kB
dist/assets/ahk2-8Zs4aa1G.js 45.07 kB │ gzip: 9.88 kB
dist/assets/index-Dl3jeLBI.js 45.14 kB │ gzip: 19.18 kB
dist/assets/ruby-C0TQ7zu5.js 46.72 kB │ gzip: 5.83 kB
dist/assets/go-C27-OAKa.js 46.82 kB │ gzip: 5.18 kB
dist/assets/apex-DhZFqWV2.js 47.89 kB │ gzip: 6.90 kB
dist/assets/ada-bCR0ucgS.js 48.08 kB │ gzip: 6.03 kB
dist/assets/css-CLj8gQPS.js 49.04 kB │ gzip: 11.86 kB
dist/assets/chunk-TICWLB2K-Dykoa1DO.js 49.34 kB │ gzip: 15.79 kB
dist/assets/imba-DGztddWO.js 49.93 kB │ gzip: 9.46 kB
dist/assets/mermaid-CQcHuHx7.js 54.81 kB │ gzip: 4.81 kB
dist/assets/wikitext-BhOHFoWU.js 55.89 kB │ gzip: 4.76 kB
dist/assets/stata-DI20mbqo.js 56.99 kB │ gzip: 12.36 kB
dist/assets/html-pp8916En.js 57.25 kB │ gzip: 11.69 kB
dist/assets/ballerina-BFfxhgS-.js 58.69 kB │ gzip: 8.15 kB
dist/assets/markdown-Cvjx9yec.js 59.34 kB │ gzip: 5.64 kB
dist/assets/ThemesView-ROhLW1IX.js 60.69 kB │ gzip: 16.28 kB
dist/assets/ocaml-C0hk2d4L.js 62.45 kB │ gzip: 5.02 kB
dist/assets/flowDiagram-HODETNUW-B-wmlXgh.js 62.65 kB │ gzip: 20.06 kB
dist/assets/c4Diagram-7LVT6UL2-CZK_oPAh.js 65.64 kB │ gzip: 18.87 kB
dist/assets/mojo-DJz3ZmWd.js 69.52 kB │ gzip: 9.27 kB
dist/assets/ganttDiagram-EL5Y4UJY-C00FfxS-.js 69.78 kB │ gzip: 23.60 kB
dist/assets/python-B6aJPvgy.js 69.95 kB │ gzip: 9.13 kB
dist/assets/index-C7y4_zOF.js 70.84 kB │ gzip: 25.86 kB
dist/assets/c-BIGW1oBm.js 72.11 kB │ gzip: 10.51 kB
dist/assets/latex-D5pSuvFb.js 72.90 kB │ gzip: 6.78 kB
dist/assets/vyper-CDx5xZoG.js 74.65 kB │ gzip: 10.74 kB
dist/assets/preload-helper-BYUGvJBp.js 77.31 kB │ gzip: 30.71 kB
dist/assets/hack-BWmVpMyf.js 81.13 kB │ gzip: 26.38 kB
dist/assets/cose-bilkent-JH36ORCC-ucdrH9O7.js 81.80 kB │ gzip: 22.53 kB
dist/assets/index-DJmQi6DI.js 87.01 kB │ gzip: 34.53 kB
dist/assets/swift-C2oV4EkX.js 87.23 kB │ gzip: 14.84 kB
dist/assets/fortran-free-form-BxgE0vQu.js 88.97 kB │ gzip: 11.27 kB
dist/assets/csharp-DSvCPggb.js 90.19 kB │ gzip: 10.75 kB
dist/assets/racket-BqYA7rlc.js 92.39 kB │ gzip: 15.02 kB
dist/assets/less-B1dDrJ26.js 97.63 kB │ gzip: 14.70 kB
dist/assets/index-B_zoUCtT.js 97.90 kB │ gzip: 28.48 kB
dist/assets/index-CVdm6qZy.js 103.95 kB │ gzip: 34.40 kB
dist/assets/blade-2xfisSek.js 104.98 kB │ gzip: 28.20 kB
dist/assets/objective-c-DXmwc3jG.js 105.41 kB │ gzip: 23.33 kB
dist/assets/SettingsView-CA8mvhNi.js 110.00 kB │ gzip: 38.72 kB
dist/assets/php-Csjmro_R.js 113.09 kB │ gzip: 28.74 kB
dist/assets/swimlanes-42K2YHIH-DBnK_luN.js 117.20 kB │ gzip: 42.88 kB
dist/assets/sequenceDiagram-WJ2MYXX4-CT529fmH.js 117.53 kB │ gzip: 31.32 kB
dist/assets/asciidoc-CSVQ5wI8.js 136.05 kB │ gzip: 9.50 kB
dist/assets/mdx-Cmh6b_Ma.js 136.11 kB │ gzip: 23.35 kB
dist/assets/architectureDiagram-5GKGNRK7-MxGRspvX.js 152.10 kB │ gzip: 43.27 kB
dist/assets/typst-BUadGCkm.js 163.55 kB │ gzip: 10.98 kB
dist/assets/index-CX-Z_M19.js 165.35 kB │ gzip: 49.44 kB
dist/assets/objective-cpp-CLxacb5B.js 171.97 kB │ gzip: 30.62 kB
dist/assets/javascript-wDzz0qaB.js 174.83 kB │ gzip: 16.51 kB
dist/assets/tsx-COt5Ahok.js 175.54 kB │ gzip: 16.51 kB
dist/assets/jsx-g9-lgVsj.js 177.79 kB │ gzip: 16.61 kB
dist/assets/markdown-D1OO11DI.js 180.56 kB │ gzip: 56.48 kB
dist/assets/typescript-BPQ3VLAy.js 181.08 kB │ gzip: 16.04 kB
dist/assets/angular-ts-BrjP3tb8.js 183.82 kB │ gzip: 16.63 kB
dist/assets/vue-vine-BoDAl6tE.js 190.05 kB │ gzip: 17.99 kB
dist/assets/math-katex-0-18-4-CHandE1Z.js 261.18 kB │ gzip: 77.76 kB
dist/assets/editor-prosemirror-DdSLUblA.js 261.62 kB │ gzip: 81.66 kB
dist/assets/wolfram-lXgVvXCa.js 262.39 kB │ gzip: 77.14 kB
dist/assets/editor-milkdown-CfUWLk7w.js 288.62 kB │ gzip: 86.76 kB
dist/assets/index-BPFAEZBr.js 347.56 kB │ gzip: 114.62 kB
dist/assets/editor-codemirror-BFoSK6g_.js 425.42 kB │ gzip: 137.40 kB
dist/assets/cytoscape.esm-Bch-eiPH.js 443.83 kB │ gzip: 142.41 kB
dist/assets/wasm-CG6Dc4jp.js 622.34 kB │ gzip: 230.29 kB
dist/assets/mermaid.core-C2yjh7Um.js 658.47 kB │ gzip: 158.25 kB
dist/assets/cynefin-OW5HDTMX-DYRSVYbi.js 690.86 kB │ gzip: 155.12 kB
dist/assets/cpp-BMRokrvK.js 785.49 kB │ gzip: 53.20 kB
dist/assets/emacs-lisp-C_m_b--Z.js 790.01 kB │ gzip: 198.83 kB
(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
✓ built in 18.06s
@@ -0,0 +1,25 @@
{
"model": "deepseek-v4-flash",
"configured_test_window": 8192,
"vendor_max_context_tested": false,
"detect": {
"error_code": "CONTEXT_COMPRESSION_REQUIRED",
"network_calls": 0
},
"compression": {
"passed": false,
"before_estimate": 2262,
"after_estimate": 523,
"archive_unchanged": true,
"network_calls": 2,
"answer_input_tokens": 132,
"answer_output_tokens": 256
},
"observed_provider_cache": {
"requests": 18,
"reporting_requests": 16,
"positive_hit_requests": 12,
"positive_miss_requests": 16,
"scope": "provider reported usage across this isolated acceptance session; not deterministic cache control"
}
}
@@ -0,0 +1,25 @@
{
"model": "deepseek-v4-flash",
"configured_test_window": 8192,
"vendor_max_context_tested": false,
"detect": {
"error_code": "CONTEXT_COMPRESSION_REQUIRED",
"network_calls": 0
},
"compression": {
"passed": true,
"before_estimate": 2262,
"after_estimate": 516,
"archive_unchanged": true,
"network_calls": 2,
"answer_input_tokens": 129,
"answer_output_tokens": 289
},
"observed_provider_cache": {
"requests": 20,
"reporting_requests": 18,
"positive_hit_requests": 13,
"positive_miss_requests": 18,
"scope": "provider reported usage across this isolated acceptance session; not deterministic cache control"
}
}
@@ -0,0 +1,27 @@
> notes-agent-frontend@0.2.0 test C:\Users\KiriAky\.codex\worktrees\7950\NotesAgent\frontend
> vitest run "--reporter=dot"
RUN v4.1.11 C:/Users/KiriAky/.codex/worktrees/7950/NotesAgent/frontend
stderr | src/features/editor/shikiCodeMirror.spec.ts
Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.
stderr | src/features/themes/ThemesView.spec.ts
Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.
stderr | src/features/editor/diagramIntegration.spec.ts
Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.
Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.
stderr | src/features/editor/EditorPane.spec.ts > EditorPane file switching > recreates the visual editor with the newly loaded file content
Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.
Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.
·····················································································································································································································································································································································································································································
Test Files 80 passed (80)
Tests 437 passed (437)
Start at 02:50:15
Duration 21.99s (transform 24.03s, setup 0ms, import 75.03s, tests 27.89s, environment 143.74s)
@@ -0,0 +1,107 @@
{
"run_id": "benchmark_f98741e7649a",
"kind": "agent",
"dataset_id": "agent-integration-v1",
"dataset_hash": "sha256:af10b953037a35cad6fae678cbc118b519b209e88906f80721080560d49a508c",
"status": "completed",
"config_snapshot": {
"dataset_id": "agent-integration-v1",
"provider_id": "provider_65fd326edba646e3bc735c25fbf5ffe8",
"model": "deepseek-v4-flash",
"max_steps": 10,
"timeout_seconds": 150,
"token_budget": 10000,
"repeat": 1,
"allow_network": true,
"offline": false,
"dataset_hash": "sha256:af10b953037a35cad6fae678cbc118b519b209e88906f80721080560d49a508c",
"dataset_version": "1.0.0",
"execution": "real_agent_runtime",
"provider_type": "openai_compatible",
"scoring_version": "1.0",
"permission_policy": "runtime_user_decision",
"active_agent_run_id": "run_d55e28a22cb0433498ae59d0eabce566"
},
"metrics": {
"total_cases": 2,
"task_success_rate": 1.0,
"tool_selection_accuracy": 1.0,
"tool_argument_accuracy": 1.0,
"invalid_tool_call_rate": 0.0,
"average_steps": 2.5,
"average_latency_ms": 10539.258899982087,
"token_usage": 16070,
"tool_calls": 6,
"expected_calls": 6
},
"cases": [
{
"case_id": "retrieval-tasks",
"repeat": 0,
"agent_run_id": "run_dc5ad9f709c64b59b792bebafad77653",
"success": true,
"tool_calls": 5,
"expected_calls": 5,
"selected_calls": 5,
"accurate_calls": 5,
"invalid_calls": 0,
"steps": 3,
"latency_ms": 13835.580999962986,
"token_usage": 8651,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
},
{
"case_id": "mcp-search",
"repeat": 0,
"agent_run_id": "run_d55e28a22cb0433498ae59d0eabce566",
"success": true,
"tool_calls": 1,
"expected_calls": 1,
"selected_calls": 1,
"accurate_calls": 1,
"invalid_calls": 0,
"steps": 2,
"latency_ms": 7242.936800001189,
"token_usage": 7419,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
}
],
"error": null,
"error_code": null,
"permission_approvals": 3,
"mcp_present": true,
"tasks": [
{
"task_id": "task_7380b0dd0b2c4161a20f3b6c1a19dffa",
"title": "验收-锁顺序"
},
{
"task_id": "task_5e0584d287c442b597ca4c22f8998214",
"title": "验收-循环等待"
},
{
"task_id": "task_22ac49c4e4214c98951b387a6f128a94",
"title": "验收-互斥条件"
}
]
}
@@ -0,0 +1,196 @@
{
"provider_id": "provider_65fd326edba646e3bc735c25fbf5ffe8",
"protocol": "openai_compatible",
"model": "deepseek-v4-flash",
"checks": {
"discovery": {
"passed": true,
"count": 3,
"elapsed_ms": 1904.77
},
"normal_chat": {
"passed": true,
"input_tokens": 87,
"output_tokens": 16,
"elapsed_ms": 2107.22
},
"stream_usage_reasoning": {
"passed": true,
"events": [
"Done",
"TextDelta",
"ThinkingDelta",
"Usage"
],
"usage_reported": true,
"reasoning_observed": true,
"elapsed_ms": 2118.0
},
"stream_cancel": {
"passed": true,
"first_event": "ThinkingDelta",
"close_ms": 12.160799989942461,
"scope": "client stream resource close; provider billing cessation not observable",
"elapsed_ms": 1842.69
},
"error_mapping": {
"passed": true,
"error_code": "PROVIDER_INVALID_REQUEST",
"elapsed_ms": 1590.6
}
},
"unconfigured_protocols": [
"openai_responses",
"anthropic_messages",
"ollama"
],
"not_tested": [
"vendor_maximum_context_boundary"
],
"max_direct_requests": 5,
"agent": {
"run_id": "benchmark_8ebbf8c6f27f",
"kind": "agent",
"dataset_id": "agent-core-v1",
"dataset_hash": "sha256:82fd1b84cc2dc2feec0fc67357d64b145dcdf6c44ec2660f182d550e85b9d27f",
"status": "completed",
"config_snapshot": {
"dataset_id": "agent-core-v1",
"provider_id": "provider_65fd326edba646e3bc735c25fbf5ffe8",
"model": "deepseek-v4-flash",
"max_steps": 6,
"timeout_seconds": 90,
"token_budget": 6000,
"repeat": 1,
"allow_network": false,
"offline": false,
"dataset_hash": "sha256:82fd1b84cc2dc2feec0fc67357d64b145dcdf6c44ec2660f182d550e85b9d27f",
"dataset_version": "1.0.0",
"execution": "real_agent_runtime",
"provider_type": "openai_compatible",
"scoring_version": "1.0",
"permission_policy": "runtime_user_decision",
"active_agent_run_id": "run_c9296aaea4c7429db97528edc72b6180"
},
"metrics": {
"total_cases": 4,
"task_success_rate": 1.0,
"tool_selection_accuracy": 1.0,
"tool_argument_accuracy": 1.0,
"invalid_tool_call_rate": 0.0,
"average_steps": 1.75,
"average_latency_ms": 5682.329325005412,
"token_usage": 5888,
"tool_calls": 3,
"expected_calls": 3
},
"cases": [
{
"case_id": "arithmetic",
"repeat": 0,
"agent_run_id": "run_480c159ffc0341f9883a09914ff003b5",
"success": true,
"tool_calls": 1,
"expected_calls": 1,
"selected_calls": 1,
"accurate_calls": 1,
"invalid_calls": 0,
"steps": 2,
"latency_ms": 4888.349500019103,
"token_usage": 1545,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
},
{
"case_id": "echo",
"repeat": 0,
"agent_run_id": "run_4fdbd0508bb84bcda424d97de1b91241",
"success": true,
"tool_calls": 1,
"expected_calls": 1,
"selected_calls": 1,
"accurate_calls": 1,
"invalid_calls": 0,
"steps": 2,
"latency_ms": 4978.496600000653,
"token_usage": 1601,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
},
{
"case_id": "no-tool",
"repeat": 0,
"agent_run_id": "run_5dfb4ae0a6c547b79706ad102e577bab",
"success": true,
"tool_calls": 0,
"expected_calls": 0,
"selected_calls": 0,
"accurate_calls": 0,
"invalid_calls": 0,
"steps": 1,
"latency_ms": 2549.696500005666,
"token_usage": 541,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
},
{
"case_id": "markdown-catalog",
"repeat": 0,
"agent_run_id": "run_c9296aaea4c7429db97528edc72b6180",
"success": true,
"tool_calls": 1,
"expected_calls": 1,
"selected_calls": 1,
"accurate_calls": 1,
"invalid_calls": 0,
"steps": 2,
"latency_ms": 10312.774699996226,
"token_usage": 2201,
"checks": {
"completed": true,
"tools_selected": true,
"tool_arguments": true,
"no_extra_calls": true,
"tool_results": true,
"output": true,
"citation": true,
"tasks_created": true
},
"error_code": null
}
],
"error": null,
"error_code": null
},
"followup_evidence": [
"context.json",
"integration.json"
]
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,106 @@
# 第二阶段全量验收报告
> 以下保留修复前基线审计。其后已完成的收尾实现、真实运行结果和剩余外部边界以[第二阶段收尾实现与验收](第二阶段收尾实现与验收-2026-09-07.md)为准,不能把本报告中的“未实现”继续当作当前分支状态。
> 日期:2026-09-07。基线:`main` / `95095197df8b607e55144748c9be0c7f6daf00df`,与本轮拉取的 `gitea/main` 一致。范围包含三位成员负责的全部第二阶段模块,不沿用历史“不含杨侧验收”的排除范围。
## 结论与口径
**第二阶段主要基础能力已落地,但尚未达到完整 Definition of Done。** 自动化测试通过不代表 Agent Benchmark、函数图像前端、Mermaid 静态导出、真实厂商协议和音频质量已经验收。
依据为[第二阶段团队分工表](../architecture/第二阶段团队分工表.md)、[第二阶段接口契约](../contracts/第二阶段接口契约-开发版.md)、当前实现、自动化测试、隔离压测及浏览器检查。历史文档中未经同步的勾选框不直接作为实时完成率。
本轮不修改业务逻辑、不调用收费模型或外部 MCP、不重跑长录音。测试使用临时数据库/Vault;内置语料检查读取 Git HEAD,避开用户未提交笔记。主工作区原有两份笔记修改保持不变。
## 本轮验证结果
| 检查 | 结果 | 证据与边界 |
| --- | --- | --- |
| 后端全量 | 838 项通过 | Python 3.12,临时 APP_DATA_DIR / APP_DB_PATH / APP_VAULT_PATH1 条既有 Starlette/httpx 弃用提示 |
| 前端全量 | 78 个测试文件、433 项通过 | Vitest;部分测试存在 KaTeX quirks-mode 提示 |
| 类型与生产构建 | 通过 | `npm run build`vue-tsc + Vite;仍有超过 500 kB 的惰性分块提示 |
| Mermaid 真实渲染 | 36 / 36 结构检查通过 | 6 图型 × 6 主题,无 Mermaid mock;不是所有图形字形、缩放和主题外观的完整人工验收 |
| Agent 并发 | 1 / 10 / 50 / 200 并发场景通过 | 共 290 次完成;mock 每轮注入 50 ms,验证事件顺序、回放及终态恢复,不代表真实模型性能 |
| 容量与取消 | 200 个活跃运行上限及取消通过 | 溢出拒绝;取消 P95 9.84 ms;权限等待 10 个批准、10 个取消,订阅释放 |
| 故障隔离 | 通过 | 成功、Provider 错误、模型超时、工具超时各 5 次;剩余工具执行器为 0 |
| Task API | 100 / 1000 条 CRUD、20 并发通过 | 默认分页 50,分页完整,删除后 total=0;1000 条场景创建/更新/删除 P95 为 262.36 / 275.78 / 286.18 ms |
| sqlite-vec 合成对照 | Top-20 一致 | 4000 块 × 384 维,5 次样本;Python JSON 扫描中位 1376.98 mssqlite-vec 12.92 ms;只证明该合成场景效率,不代表检索质量 |
| 内置 RAG 数据集完整性 | 5 / 5 案例关联有效 | 对照 HEAD 中 16 篇笔记、3787 块;预期 note_id / block_id 均存在,不等同于质量指标达标 |
首次后端测试因本地 `.venv` 缺少 `python-docx` 等新合并依赖而在收集阶段失败。执行 `uv sync --frozen` 后补齐 6 个锁定包并重新全量通过;未改动依赖声明或锁文件。这是本机环境未同步,不作为代码回归计数。
性能测试与构建曾并行执行,上述延迟只用于发现功能及容量问题,不作为吞吐 SLA 或性能倍率承诺。200 并发 Agent 的事件循环最大延迟为 334.08 ms,值得单独串行复测。
## 第二阶段任务矩阵
| 任务 | 当前状态 | 实现/验证依据 | 尚缺内容 |
| --- | --- | --- | --- |
| 音频转写 | 替代技术路径已实现,质量待验收 | `app/local_models/worker.py`、阶段 F 记录;当前为 Qwen3-ASR | 原清单 faster-whisper 未交付;需明确接受技术替代并同步清单 |
| 说话人分段 | 部分实现 | ERes2NetV2 片段聚类,历史 CPU/CUDA 与长录音闭环 | 非 pyannote 完整分离;逐字强制对齐、同段多人/重叠分离未实现;CER/WER/DER、阈值缺标注验收 |
| MCP Bridge / Registry | 工程实现与离线回归通过 | `extensions`、MCP Host/Registry 测试、Agent 工具链 | 目标外部服务器专项并非本轮重验;生产 OS 沙箱属于第三阶段 |
| Plugin Command | 已实现 | Palette、工作区右键与工具栏、命令校验及 effect 回归 | 后续复杂 UI 贡献属于扩展阶段 |
| Plugin Settings / Secret | 已实现 | schema 动态表单、独立凭据引用及权限校验测试 | 真实第三方插件组合仍按包验收 |
| Skill / Plugin 本地持久注册 | 已实现 | `extensions/installed.py`、恢复、摘要复核、ZIP 清理回归 | 不应继续列为“尚无持久化”;在线升级事务与社区审核属于第三阶段 |
| Provider 适配 | 工程实现,外部专项待验收 | OpenAI Compatible/Responses、Anthropic、Ollama 适配及协议回归 | 逐厂商的发现、工具往返、流、取消、Usage、错误映射、上下文限制等真实矩阵未全部验收 |
| RAG Benchmark | 后端基础已实现 | `benchmarks`、指标与生命周期测试、5 案例数据集 | 代表性评测集与调优前后对照不足;无前端报告页 |
| Agent Benchmark | 未实现 | 无 `/api/benchmarks/agent/runs``Benchmark开发说明` 明确暂缓 | 标准 Case/Dataset、任务成功率、工具选择/参数准确率、无效调用率、步骤/耗时/Token 报告 |
| Retrieval 调优 | 性能改进已实现,质量验收不完整 | 模型/维度隔离 sqlite-vec、增量索引、过滤及检索回归 | 相同数据集/模型/参数下的质量前后对照;当前 reranker 仍为 LexicalReranker,不是已上线 BGE Cross-Encoder |
| HTML / PDF / DOCX 导出 | 后端基础已实现,界面联调未完成 | `export`、三种产物内容/结构回归 | 前端无 exportService、调用入口及任务下载流程;仍不能直接完成工作区总 Demo |
| 复杂内容导出 | 部分实现 | 警告框、嵌套表格、主题配色已覆盖 | Mermaid 为源码占位;PDF/DOCX 公式为文本,图片嵌入/资源解析仍有限;DOCX 函数图像占位 |
| 函数图像 | 后端解析/静态渲染已实现 | `plot`、SVG/PDF 共享几何与预算测试 | 前端没有 function-plot 渲染、编辑刷新、缩放和预览入口;仅 Mermaid 被前端识别为图表 |
| Theme Manifest / 导入 / 管理 | 已实现 | 文件/URL/ZIP、兼容性、安全校验、隔离预览、启停卸载及前端测试 | 网络 Marketplace 非第二阶段要求;导出固定配色不等于完整主题 CSS 复刻 |
| Agent Trace | 已实现 | Tree/Timeline、参数/结果/耗时/错误、筛选、引用跳转、恢复与取消测试 | 真实 Provider 的特殊事件仍需专项验证 |
| Mermaid 编辑器与预览 | 已实现 | 真实 36 组矩阵、编辑器回归、源码/预览及大图组件 | 静态 SVG/Image 向 Export Service 的传递尚未打通 |
| 跨模块共同 Demo | 部分完成 | 录音→笔记→检索、Agent/工具/Trace 已有历史闭环 | 函数图像前端、三格式导出 UI、Mermaid 静态导出等阻止完整演示闭环 |
## 当前可推进的收尾项
### 优先完成第二阶段明确交付项
1. **Agent Benchmark**:复用已有 Agent Runtime/Trace 实现标准 Case 和报告,不以 mock 压测脚本替代任务成功率验收。
2. **函数图像前端接入**:接入编辑器、只读 Markdown/聊天、源码/预览、编辑刷新、缩放及主题。复用后端语法和资源预算,不新增不一致语法。
3. **导出前端闭环**:工作区格式/选项入口、后台任务状态、取消、下载、warning 呈现,支持未保存内容快照。
4. **Mermaid 静态导出**:安全传递 SVG/Image,补齐三格式产物检查;DOCX 函数图像和公式/图片保真度随后逐项补齐。
5. **检索质量验收**:扩充当前仅 5 案例的 Dataset,冻结语料、模型、维度、参数与回退策略,保存 FTS/vector/hybrid/RRF/rerank 的对照报告。
### 有外部依赖的验收
- 真实 Provider:准备各协议对应账号/模型矩阵与用量预算,逐项记录结果;连接测试不能代替工具、取消、错误与上下文专项。
- 音频质量:准备人工参考文本、说话人及时间标注,明确 CER/WER/DER 和业务阈值。替代技术路径是否满足原始 DoD 应单独确认。
### 本阶段可继续优化
- 单独复测 200 并发 Agent 的事件循环峰值,定位批量持久化/事件分发热点。
- 构建仍含两份 KaTeX 运行时与较大 Mermaid/语法资源块;按兼容性和首屏加载数据优化,不通过调高阈值隐藏问题。
- Mermaid 矩阵循环复用全局主题,结束后页面保留最后一个主题;36/36 只能证明结构检查。视觉验收应使用 `?theme=` 分主题页面或隔离容器并保存截图。
- 清理历史文档状态冲突:团队清单未勾选已有功能;第三阶段规划仍有“安装记录仅内存、待持久化”的旧描述;契约含旧 HashEmbedding 基线,应统一标明历史与当前实现。
## 与第三阶段的边界
Tauri/Rust Host、独立 Sync Server、联网主题/Skill/Plugin/MCP 等社区、签名分发、生产沙箱及跨设备冲突处理,仍按[第三阶段规划](../architecture/第三阶段实施规划.md)推进,不计入本轮第二阶段代码缺陷。第二阶段要求的是本地扩展、包格式与稳定接口;不能将“社区格式已实现”写成“联网社区已交付”。
## 复测与本地证据
```powershell
cd backend
uv sync --frozen
# 先设置 APP_DATA_DIR / APP_DB_PATH / APP_VAULT_PATH 为独立临时目录
uv run pytest tests -q -p no:cacheprovider
# 此脚本自行隔离运行数据,使用 mock,不调用远端 Provider
.venv/Scripts/python.exe scripts/agent-task-stress.py --output ../.local-plans/phase2-audit-20260907/agent-task.json
.venv/Scripts/python.exe scripts/vector-index-benchmark.py
cd ../frontend
npm test -- --reporter=dot
npm run build
npm run dev -- --host 127.0.0.1 --port 5187 --strictPort
```
浏览器入口:`/tests/visual/mermaid-matrix.html`。本轮开发服务器验证完成后关闭,不替换用户正在使用的服务。
本地详细证据:`.local-plans/phase2-audit-20260907/agent-task.json``dataset-integrity.json`。这些是本机生成的审计产物,不作为真实模型质量或生产性能承诺;本报告记录可复查的汇总结果。
## 用户追加验收要求:所有主题支持函数图像
第二阶段收尾任务必须更新所有现有主题对 function-plot 的支持,包括 light、dark、sepia、paper-moments、ocean-blue、midnight-purple,以及实际主题注册表中的其他主题。统一函数图像设计变量及导出配色映射,覆盖坐标轴、刻度、网格、多曲线、图例/标签、背景、错误提示、焦点/悬停和缩放控件。检查工作区编辑器、只读预览、AI 对话、大图窗口及适用的静态导出。不得仅在默认浅色下通过;以逐主题实际渲染和截图验证对比度、文字完整性、窄屏布局及主题切换。PDF/DOCX 如仍采用明确的打印配色策略,应保留可读性和提示,不声称复刻整个主题。
@@ -0,0 +1,87 @@
# 第二阶段收尾实现与验收
日期:2026-09-07。实现提交 `89df10b`,开发分支 `feat/phase2-completion`,基于最新拉取的 `gitea/main` / `95095197df8b607e55144748c9be0c7f6daf00df`。本分支尚未合并、推送或发布。本记录覆盖所有成员的第二阶段工程范围,替代早期“不含杨侧验收”的当前状态口径;[此前全量审计](第二阶段全量验收报告-2026-09-07.md)保留为修复前基线。
## 结论
原审计中可在现有环境推进的主要缺项已实现:标准 Agent Benchmark 与报告页、函数图像编辑器和共用 Markdown 预览、三格式未保存快照导出、Mermaid 静态图片、DOCX 图像与受支持公式、真实 RAG 质量对照,以及现有 Provider/MCP 的受限集成验证。
不将本次结果写成“所有厂商、所有文档及音频质量全部通过”。未配置的 Responses/Anthropic/Ollama 真实服务、厂商最大上下文边界、DOCX Office/LibreOffice 整页视觉复核仍列为验收边界;音频质量按本轮范围排除。Tauri/Rust、联网社区、Sync Server、操作系统沙箱仍属第三阶段。
## DoD 矩阵
| 项目 | 本轮状态 | 实现与证据 |
| --- | --- | --- |
| Agent Benchmark | 已实现、真实运行通过 | 标准版本化 Case、正式 Runtime、真实 Trace、逐例检查及成功/选择/参数/无效调用/步骤/耗时/Token 指标;4/4 标准案例与2/2集成案例通过 |
| RAG Benchmark 与报告页 | 已实现、真实本地模型对照完成 | 12篇自建中文工程笔记,关键词/语义改写各12题;6配置×24题×2轮,288个样本,零运行失败;冻结语料与逐例 provenance |
| 函数图像 | 已实现、页面复核通过 | 写作/源码切换、编辑刷新、诊断、只读/AI共用组件、缩放/重置/大图、六主题宽窄屏;共享后端白名单语法与几何 |
| 导出 UI | 已实现、浏览器下载通过 | HTML/PDF/DOCX,点击时快照、标题/纸张选项、后台状态、取消、下载和 warning;包含未保存 PHASE2-SNAPSHOT |
| 静态内容导出 | 已实现、产物检查通过 | Mermaid 浏览器净化后栅格化,按源码摘要绑定PNG;HTML/PDF/DOCX真实嵌图;DOCX函数图、MathText公式及Vault内PNG/JPEG/WebP;无法表示的资源显式warning |
| 主题与 Mermaid | 已复核 | light/dark/sepia/paper-moments/ocean-blue/midnight-purple36组Mermaid用隔离iframe检查,无全局主题串扰 |
| Provider | 已配置协议通过 | DeepSeek OpenAI Compatible:发现、普通、流式、推理事件、Tool往返、Usage、取消与错误映射;额外上下文压缩及缓存字段观测 |
| MCP | 现有服务通过 | MiniMax Coding Plan stdio注册与Agent真实web_search调用,工具权限仍由Runtime约束 |
| Plugin/Skill、Trace、Task、工作区 | 回归通过 | 全量回归;隔离压力测试、权限等待/取消、恢复与分页;本地持久安装已实现 |
| 音频 | 本轮排除质量专项 | 当前Qwen3-ASR + ERes2NetV2;没有将faster-whisper/pyannote写成已交付,也未声称CER/WER/DER达标 |
## RAG 结果与调优决策
冻结模型 `hotchpotch/bekko-embedding-v1-a8m@c721113d59a1d91b447450324f51c4b3332c924a`,384维,真实已安装本地模型;LexicalReranker `lexical-v1/1`。Top K=5、RRF K=60、候选20,参数变体K=20。向量来源逐例为local,无HashEmbedding测试注入或远端失败回退。完整记录见[rag-quality.json](evidence/phase2-20260907/rag-quality.json)。
| 配置 | Hit@1 | Hit@5 / Recall@5 | MRR | Citation Hit Rate | P50 / P95 ms |
| --- | ---: | ---: | ---: | ---: | ---: |
| FTS | .9583 | 1 / 1 | .9667 | .7500 | 9.64 / 12.20 |
| Vector(冷暖混合) | 1 | 1 / 1 | 1 | .5833 | 4571.74 / 10284.19 |
| Hybrid 加权50/50 | .9583 | 1 / 1 | .9688 | .6667 | 15.44 / 19.69 |
| Hybrid RRF | .9167 | 1 / 1 | .9583 | .6667 | 15.44 / 20.28 |
| RRF + Lexical rerank | .9167 | 1 / 1 | .9583 | .8750 | 15.70 / 22.26 |
| RRF K=20 | .9167 | 1 / 1 | .9583 | .6667 | 15.68 / 27.67 |
Citation Hit Rate判断首条返回块是否命中预期引用块,不是“任意返回块命中”。因此高笔记命中率不等于准确引用。数据属于开发集,不是生产分布或留出测试集;没有事后补造质量阈值来宣布生产达标。
RRF K=20没有收益,保留默认60;加权融合提供可选对照,不改变默认策略。Lexical rerank改善本集引用命中,却未提高笔记Top1,不能宣布通用质量提升。
瓶颈是重复查询反复启动本地Embedding推理。新增128条/10分钟进程内缓存,仅存真实本地单文本向量,键包含模型目录/revision、冻结运行配置与查询摘要;返回副本,未安装模型不走缓存,不缓存远端响应。Vector的24个miss P50=9474.32ms24个hit P50=15.11ms。后续Hybrid配置大多复用暖缓存,其时延不能与冷Vector直接比较。改前无缓存Vector P50约9368.46ms;冷推理没有提速。保留本地进程长期驻留优化作为后续独立设计,不扩大本轮范围。
## 真实 Provider、Agent、MCP
[标准报告](evidence/phase2-20260907/live.json):现有DeepSeek `deepseek-v4-flash`,4/4任务成功,工具选择/参数准确率均1,无效调用率0,平均1.75步、5682.33ms5888 Token。发现3个模型;流包含TextDelta/ThinkingDelta/Usage/Done;无效模型映射PROVIDER_INVALID_REQUEST。取消关闭客户端流约12.16ms,不等于能观测到服务商停止计费。
另通过实际Benchmark页面启动、下载与Trace跳转复测,4/4成功、5939 Token、平均4646.52ms,见[UI运行报告](evidence/phase2-20260907/agent-ui-report.json)。修复了未打开工作区时无法从报告进入已有Trace的路由拦截;创建普通新Agent运行仍遵守原工作区入口约束。
[集成报告](evidence/phase2-20260907/integration.json):检索→读笔记→3个任务创建,以及MCP web_search,共2/2通过,工具6/6匹配,16070 Token。写入仅针对隔离数据库的3个任务,按这次运行的权限票据逐项批准。报告保留真实Agent Run ID,可在保留隔离数据库时恢复Trace;Benchmark报告本身是有界内存任务,应下载保存,重启不会恢复评测注册表。
[上下文复测](evidence/phase2-20260907/context.json):不修改已保存Provider配置,在请求级测试配置中设8192窗口;detect在网络前返回CONTEXT_COMPRESSION_REQUIREDcompress调用真实模型生成摘要再回答,估算从2262降至516,原会话不变,最终答案保留Vault事实。首次256输出Token预算耗尽,见[失败记录](evidence/phase2-20260907/context-budget256.json);改用1024上限后最终回答使用289输出Token并通过。四次受限调用包含两轮摘要及回答。该测试验证应用的预算与压缩路径,不证明厂商最大窗口。
验收库中18个该Provider请求上报缓存计数,13个有正命中、18个有正未命中;缺失字段保持未知,不记作0。缓存是否命中由服务商控制,不能强制保证。没有新增账号、密钥或服务,没有打印凭据或请求认证信息。
外部剩余项:当前未配置OpenAI Responses、Anthropic Messages、Ollama真实服务,协议单测通过仍不足以替代真实服务矩阵;厂商极限上下文需要单独预算与目标窗口。本轮没有发出超大输入探测。
## 性能与回归
- 后端全量与前端测试/构建结果以本报告末尾最终验证记录为准。
- [串行压力基线](evidence/phase2-20260907/agent-task-before.json)与[修复后](evidence/phase2-20260907/agent-task-after.json):200并发均完成,事件顺序、回放和终态恢复正确。恢复读取约313ms移出事件循环;该场景loop lag max从326.14降到12.19ms。运行P95从1007.22到1155.52ms,没有声称模型或总吞吐提速。
- 200活跃运行容量拒绝与取消通过,取消P95=5.85ms;权限等待10批准/10取消、订阅释放,故障隔离后无残余工具执行器。
- Task API 100/1000条、20并发CRUD及50条分页完整;1000条创建/更新/删除P95约121.67/146.20/145.87ms。此脚本显式mock,不能代替真实Agent Benchmark。
- KaTeX通过Vite dedupe合为一个运行时chunkMermaid/语法等大惰性资源仍有构建提示,未调高阈值隐藏问题。
## 产物与视觉复核边界
浏览器真实加载项目组件与API,六主题各保存宽屏、390px窄屏和大图截图,检查缩放、源码切换、实时编辑、主题切换、无效表达式及打印warning。使用受限复杂图文档实际从UI取消后台PDF任务并看到已取消终态。[页面结果](evidence/phase2-20260907/browser-results.json)、[Mermaid矩阵](evidence/phase2-20260907/browser-mermaid-matrix.json)。窄屏函数图保留640px坐标区域并可横向滚动,避免刻度被整体缩得过小。
PDF使用嵌入的可用CJK字体,已通过Poppler检查实际页面;未安装可用字体时保留CID回退并明确warning。可用APP_EXPORT_FONT指定兼容TTF/TTC。三格式包含未保存快照、函数图、中文Mermaid及公式;DOCX的OOXML、图片关系和媒体内容通过结构检查,参见[产物清单](evidence/phase2-20260907/artifacts.json)。捆绑文档渲染器因缺少LibreOffice `soffice.exe` 无法完成DOCX整页渲染,不能声称Word分页已视觉通过。没有改用用户安装的Office/LibreOffice绕过工具约束。
MathText是受限TeX子集,不等同于KaTeX全语法;不支持的公式、远端/越界图片明确保留源码或替代文字及warning。服务器不执行客户端SVG/XML、任意TeX命令或外部资源下载。PNG每图4百万像素、总16百万像素/8MiB、最多64附件;重复引用及本地自动补全资源也受文档级累计预算约束;前端最多准备16幅Mermaid。函数图每块16表达式、预览总8000节点,导出每文档16图/8000节点,预览并发2。取消在线程渲染边界生效,不能强杀正在运行的Python绘图线程。
## 复现
1. `uv sync --frozen``pnpm install --frozen-lockfile`;把APP_DATA_DIR/APP_DB_PATH/APP_VAULT_PATH指向全新验收目录,不能指向用户知识库。
2. 仅在用户授权下复用已有Provider凭据及模型配置;APP_MODEL_PYTHON指向已安装模型解释器。语料源为`backend/data/benchmarks/corpus/phase2-v1.json`;运行`backend/scripts/phase2-quality.py --output <report.json>`,生成独立Vault和Dataset、重建真实索引。`--reuse-index`会验证块ID一致,不能跳过缺失索引。
3. 标准真实测试:`backend/scripts/phase2-live.py --provider <已有ID> --output <report.json> --execute`;上下文`phase2-context.py`同参数。写任务/MCP测试用`phase2-integration.py --execute`,先查脚本中隔离端口与现有工具ID;不能复制到生产Vault直接执行。
4. API监听8017,前端以NOTES_API_TARGET=http://127.0.0.1:8017在5187启动。设置NODE_PATH到含Playwright的运行库后执行`node frontend/scripts/phase2-browser-check.cjs <输出目录>`,访问`/tests/visual/phase2.html`及隔离Mermaid矩阵。
5. `backend/.venv/Scripts/python -m pytest backend/tests -q -p no:cacheprovider`;前端目录`pnpm test -- --reporter=dot``pnpm build`。压力脚本`backend/scripts/agent-task-stress.py --output <report.json>`自建隔离数据。
浏览器产物及完整测试日志保留于本机`.local-plans/phase2-completion/`;可复查的配置、指标与逐例证据已提交文档目录,不依赖该忽略目录才能读到结果。主工作区两份原有未提交笔记未修改。
## 最终验证记录
后端861测试通过(Python 3.13.948.32s),含HTTP/OpenAPI、预览累计复杂度、重复资源预算、导出、评分、取消与缓存回归;仅1条既有Starlette/httpx弃用提示。前端80文件437测试通过,vue-tsc及Vite生产构建通过;KaTeX仅一个261.18kB运行时chunkgzip77.76kB),大惰性分块警告仍保留。