docs: 添加发散探讨文档和测试截图
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
添加了关于管家主动性与行业配置体系的发散探讨文档,包含现状诊断、关键讨论、架构设计等内容。同时添加了测试失败的截图和日志文件。
This commit is contained in:
6
admin-v2/test-results/artifacts/.last-run.json
Normal file
6
admin-v2/test-results/artifacts/.last-run.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"status": "failed",
|
||||
"failedTests": [
|
||||
"825d61429c68a1b0492e-735d17b3ccbad35e8726"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
# Instructions
|
||||
|
||||
- Following Playwright test failed.
|
||||
- Explain why, be concise, respect Playwright best practices.
|
||||
- Provide a snippet of code with the fix, if possible.
|
||||
|
||||
# Test info
|
||||
|
||||
- Name: smoke_admin.spec.ts >> A6: 模型服务页面加载→Provider和Model tab可见
|
||||
- Location: tests\e2e\smoke_admin.spec.ts:179:1
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
|
||||
Call log:
|
||||
- waiting for locator('#main-content') to be visible
|
||||
|
||||
```
|
||||
|
||||
# Page snapshot
|
||||
|
||||
```yaml
|
||||
- generic [ref=e1]:
|
||||
- link "跳转到主要内容" [ref=e2] [cursor=pointer]:
|
||||
- /url: "#main-content"
|
||||
- generic [ref=e5]:
|
||||
- generic [ref=e9]:
|
||||
- generic [ref=e11]: Z
|
||||
- heading "ZCLAW" [level=1] [ref=e12]
|
||||
- paragraph [ref=e13]: AI Agent 管理平台
|
||||
- paragraph [ref=e15]: 统一管理 AI 服务商、模型配置、API 密钥、用量监控与系统配置
|
||||
- generic [ref=e17]:
|
||||
- heading "登录" [level=2] [ref=e18]
|
||||
- paragraph [ref=e19]: 输入您的账号信息以继续
|
||||
- generic [ref=e22]:
|
||||
- generic [ref=e28]:
|
||||
- img "user" [ref=e30]:
|
||||
- img [ref=e31]
|
||||
- textbox "请输入用户名" [active] [ref=e33]
|
||||
- generic [ref=e40]:
|
||||
- img "lock" [ref=e42]:
|
||||
- img [ref=e43]
|
||||
- textbox "请输入密码" [ref=e45]
|
||||
- img "eye-invisible" [ref=e47] [cursor=pointer]:
|
||||
- img [ref=e48]
|
||||
- button "登 录" [ref=e51] [cursor=pointer]:
|
||||
- generic [ref=e52]: 登 录
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | /**
|
||||
2 | * Smoke Tests — Admin V2 连通性断裂探测
|
||||
3 | *
|
||||
4 | * 6 个冒烟测试验证 Admin V2 页面与 SaaS 后端的完整连通性。
|
||||
5 | * 所有测试使用真实浏览器 + 真实 SaaS Server。
|
||||
6 | *
|
||||
7 | * 前提条件:
|
||||
8 | * - SaaS Server 运行在 http://localhost:8080
|
||||
9 | * - Admin V2 dev server 运行在 http://localhost:5173
|
||||
10 | * - 种子用户: testadmin / Admin123456 (super_admin)
|
||||
11 | *
|
||||
12 | * 运行: cd admin-v2 && npx playwright test smoke_admin
|
||||
13 | */
|
||||
14 |
|
||||
15 | import { test, expect, type Page } from '@playwright/test';
|
||||
16 |
|
||||
17 | const SaaS_BASE = 'http://localhost:8080/api/v1';
|
||||
18 | const ADMIN_USER = 'admin';
|
||||
19 | const ADMIN_PASS = 'admin123';
|
||||
20 |
|
||||
21 | // Helper: 通过 API 登录获取 HttpOnly cookie + 设置 localStorage
|
||||
22 | async function apiLogin(page: Page) {
|
||||
23 | const res = await page.request.post(`${SaaS_BASE}/auth/login`, {
|
||||
24 | data: { username: ADMIN_USER, password: ADMIN_PASS },
|
||||
25 | });
|
||||
26 | const json = await res.json();
|
||||
27 | // 设置 localStorage 让 Admin V2 AuthGuard 认为已登录
|
||||
28 | await page.goto('/');
|
||||
29 | await page.evaluate((account) => {
|
||||
30 | localStorage.setItem('zclaw_admin_account', JSON.stringify(account));
|
||||
31 | }, json.account);
|
||||
32 | return json;
|
||||
33 | }
|
||||
34 |
|
||||
35 | // Helper: 通过 API 登录 + 导航到指定路径
|
||||
36 | async function loginAndGo(page: Page, path: string) {
|
||||
37 | await apiLogin(page);
|
||||
38 | // 重新导航到目标路径 (localStorage 已设置,React 应识别为已登录)
|
||||
39 | await page.goto(path, { waitUntil: 'networkidle' });
|
||||
40 | // 等待主内容区加载
|
||||
> 41 | await page.waitForSelector('#main-content', { timeout: 15000 });
|
||||
| ^ TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
|
||||
42 | }
|
||||
43 |
|
||||
44 | // ── A1: 登录→Dashboard ────────────────────────────────────────────
|
||||
45 |
|
||||
46 | test('A1: 登录→Dashboard 5个统计卡片', async ({ page }) => {
|
||||
47 | // 导航到登录页
|
||||
48 | await page.goto('/login');
|
||||
49 | await expect(page.getByPlaceholder('请输入用户名')).toBeVisible({ timeout: 10000 });
|
||||
50 |
|
||||
51 | // 填写表单
|
||||
52 | await page.getByPlaceholder('请输入用户名').fill(ADMIN_USER);
|
||||
53 | await page.getByPlaceholder('请输入密码').fill(ADMIN_PASS);
|
||||
54 |
|
||||
55 | // 提交 (Ant Design 按钮文本有全角空格 "登 录")
|
||||
56 | const loginBtn = page.locator('button').filter({ hasText: /登/ }).first();
|
||||
57 | await loginBtn.click();
|
||||
58 |
|
||||
59 | // 验证跳转到 Dashboard (可能需要等待 API 响应)
|
||||
60 | await expect(page).toHaveURL(/\/(login)?$/, { timeout: 20000 });
|
||||
61 |
|
||||
62 | // 验证 5 个统计卡片
|
||||
63 | await expect(page.getByText('总账号')).toBeVisible({ timeout: 10000 });
|
||||
64 | await expect(page.getByText('活跃服务商')).toBeVisible();
|
||||
65 | await expect(page.getByText('活跃模型')).toBeVisible();
|
||||
66 | await expect(page.getByText('今日请求')).toBeVisible();
|
||||
67 | await expect(page.getByText('今日 Token')).toBeVisible();
|
||||
68 |
|
||||
69 | // 验证统计卡片有数值 (不是 loading 状态)
|
||||
70 | const statCards = page.locator('.ant-statistic-content-value');
|
||||
71 | await expect(statCards.first()).not.toBeEmpty({ timeout: 10000 });
|
||||
72 | });
|
||||
73 |
|
||||
74 | // ── A2: Provider CRUD ──────────────────────────────────────────────
|
||||
75 |
|
||||
76 | test('A2: Provider 创建→列表可见→禁用', async ({ page }) => {
|
||||
77 | // 通过 API 创建 Provider
|
||||
78 | await apiLogin(page);
|
||||
79 | const createRes = await page.request.post(`${SaaS_BASE}/providers`, {
|
||||
80 | data: {
|
||||
81 | name: `smoke_provider_${Date.now()}`,
|
||||
82 | provider_type: 'openai',
|
||||
83 | base_url: 'https://api.smoke.test/v1',
|
||||
84 | enabled: true,
|
||||
85 | display_name: 'Smoke Test Provider',
|
||||
86 | },
|
||||
87 | });
|
||||
88 | if (!createRes.ok()) {
|
||||
89 | const body = await createRes.text();
|
||||
90 | console.log(`A2: Provider create failed: ${createRes.status()} — ${body.slice(0, 300)}`);
|
||||
91 | }
|
||||
92 | expect(createRes.ok()).toBeTruthy();
|
||||
93 |
|
||||
94 | // 导航到 Model Services 页面
|
||||
95 | await page.goto('/model-services');
|
||||
96 | await page.waitForSelector('#main-content', { timeout: 15000 });
|
||||
97 |
|
||||
98 | // 切换到 Provider tab (如果存在 tab 切换)
|
||||
99 | const providerTab = page.getByRole('tab', { name: /服务商|Provider/i });
|
||||
100 | if (await providerTab.isVisible()) {
|
||||
101 | await providerTab.click();
|
||||
102 | }
|
||||
103 |
|
||||
104 | // 验证 Provider 列表非空
|
||||
105 | const tableRows = page.locator('.ant-table-row');
|
||||
106 | await expect(tableRows.first()).toBeVisible({ timeout: 10000 });
|
||||
107 | expect(await tableRows.count()).toBeGreaterThan(0);
|
||||
108 | });
|
||||
109 |
|
||||
110 | // ── A3: Account 管理 ───────────────────────────────────────────────
|
||||
111 |
|
||||
112 | test('A3: Account 列表加载→角色可见', async ({ page }) => {
|
||||
113 | await loginAndGo(page, '/accounts');
|
||||
114 |
|
||||
115 | // 验证表格加载
|
||||
116 | const tableRows = page.locator('.ant-table-row');
|
||||
117 | await expect(tableRows.first()).toBeVisible({ timeout: 10000 });
|
||||
118 |
|
||||
119 | // 至少有 testadmin 自己
|
||||
120 | expect(await tableRows.count()).toBeGreaterThanOrEqual(1);
|
||||
121 |
|
||||
122 | // 验证有角色列
|
||||
123 | const roleText = await page.locator('.ant-table').textContent();
|
||||
124 | expect(roleText).toMatch(/super_admin|admin|user/);
|
||||
125 | });
|
||||
126 |
|
||||
127 | // ── A4: 知识管理 ───────────────────────────────────────────────────
|
||||
128 |
|
||||
129 | test('A4: 知识分类→条目→搜索', async ({ page }) => {
|
||||
130 | // 通过 API 创建分类和条目
|
||||
131 | await apiLogin(page);
|
||||
132 |
|
||||
133 | const catRes = await page.request.post(`${SaaS_BASE}/knowledge/categories`, {
|
||||
134 | data: { name: `smoke_cat_${Date.now()}`, description: 'Smoke test category' },
|
||||
135 | });
|
||||
136 | expect(catRes.ok()).toBeTruthy();
|
||||
137 | const catJson = await catRes.json();
|
||||
138 |
|
||||
139 | const itemRes = await page.request.post(`${SaaS_BASE}/knowledge/items`, {
|
||||
140 | data: {
|
||||
141 | title: 'Smoke Test Knowledge Item',
|
||||
```
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 281 KiB |
Binary file not shown.
221
docs/E2E_VERIFICATION_REPORT.md
Normal file
221
docs/E2E_VERIFICATION_REPORT.md
Normal file
@@ -0,0 +1,221 @@
|
||||
# ZCLAW 端到端功能一致性与完整性验证报告
|
||||
|
||||
> 日期: 2026-04-10 | 验证环境: Tauri 桌面端 (1420) + SaaS 后端 (8080) + Admin V2 (5173)
|
||||
|
||||
## 一、服务状态
|
||||
|
||||
| 服务 | 端口 | 状态 |
|
||||
|------|------|------|
|
||||
| SaaS 后端 (Axum) | 8080 | ✅ healthy, DB connected |
|
||||
| Admin V2 (Vite) | 5173 | ✅ running |
|
||||
| Tauri 桌面端 | 1420 | ✅ running |
|
||||
|
||||
---
|
||||
|
||||
## 二、Tauri 桌面端验证结果
|
||||
|
||||
### 2.1 登录流程
|
||||
- ✅ SaaS 登录(admin/admin123)成功,返回 JWT + refresh_token
|
||||
- ✅ 登录后自动跳转到主聊天界面
|
||||
|
||||
### 2.2 主界面 (专业模式)
|
||||
- ✅ 侧边栏:对话列表 + 智能体面板 + 搜索
|
||||
- ✅ 聊天区域:流式响应、思考过程展示、工具调用展示 (file_write, shell_exec, 澄清问题)
|
||||
- ✅ 输入区:文本输入 + 附件 + 模型选择 (kimi-for-coding) + 发送
|
||||
- ✅ 智能体面板:默认助手 + 创建新 Agent
|
||||
- ✅ 模式切换:简洁/专业模式正常切换
|
||||
|
||||
### 2.3 设置页面 (19 个分类)
|
||||
|
||||
| 设置页 | 状态 | 内容 |
|
||||
|--------|------|------|
|
||||
| 通用 | ✅ 正常 | Gateway token、简洁/专业模式切换 |
|
||||
| 用量统计 | ⚠️ 部分 | 6会话/100消息,但 Token 统计为 0 |
|
||||
| 积分详情 | ❌ 开发中 | 显示"积分系统开发中" |
|
||||
| 模型与 API | ✅ 正常 | 已连接 Gateway、模型列表、Embedding 配置 |
|
||||
| MCP 服务 | ⚠️ 未接入 | "新增/删除/详细参数配置尚未在桌面端接入" |
|
||||
| IM 频道 | ⚠️ 未接入 | 0 个频道,飞书/Discord 等为规划中 |
|
||||
| 工作区 | ✅ 正常 | 项目目录、文件监听、自动保存 |
|
||||
| 数据与隐私 | ✅ 正常 | 本地数据路径、备案信息 |
|
||||
| 安全存储 | ✅ 正常 | Keyring 可用,6 类密钥槽位 |
|
||||
| **SaaS 平台** | **❌ 加载失败** | "SaaS 平台加载失败,请稍后重试" |
|
||||
| **订阅与计费** | **❌ 加载失败** | "计费信息加载失败,请稍后重试" |
|
||||
| 技能管理 | ⚠️ 空 | 0 个技能加载,"连接 Gateway 后加载" |
|
||||
| 语义记忆 | ✅ 正常 | SQLite+FTS5+TF-IDF,0 条记忆,搜索可用 |
|
||||
| 安全状态 | ✅ 正常 | 评分 94,16 层防护展示 |
|
||||
| 审计日志 | ✅ 正常 | Live Stream 模式,0 条记录 |
|
||||
| 定时任务 | ⚠️ 空 | 0 个定时任务 |
|
||||
| 心跳配置 | ✅ 正常 | 巡检间隔、主动性级别、免打扰、检查项 |
|
||||
| 提交反馈 | ✅ 存在 | 反馈入口 |
|
||||
| 关于 | ✅ 正常 | 版本 0.1.0 |
|
||||
|
||||
### 2.4 Tauri 桌面端问题清单
|
||||
|
||||
| 严重度 | 问题 | 影响 |
|
||||
|--------|------|------|
|
||||
| **P1** | SaaS 平台页加载失败 | 桌面端无法管理 SaaS 账户 |
|
||||
| **P1** | 订阅与计费页加载失败 | 桌面端无法查看订阅状态 |
|
||||
| P2 | 积分系统显示"开发中" | 用户看到占位 UI |
|
||||
| P2 | 技能管理显示 0 个技能 | 75 个 SKILL.md 未加载到前端 |
|
||||
| P3 | MCP 服务前端未接入 | 只能配置文件手动添加 |
|
||||
| P3 | IM 频道为规划中 | 功能未实现 |
|
||||
| P3 | Token 统计为 0 | 用量统计不完整 |
|
||||
|
||||
---
|
||||
|
||||
## 三、SaaS 后端 API 验证结果
|
||||
|
||||
### 3.1 全端点状态总览
|
||||
|
||||
| 模块 | 端点数 | 200 OK | 4xx/5xx | 说明 |
|
||||
|------|--------|--------|---------|------|
|
||||
| Auth | 10 | 9 | 1 (password 参数错误) | ✅ |
|
||||
| Account | 11 | 11 | 0 | ✅ |
|
||||
| Model Config | 13 | 12 | 1 (usage 500) | ⚠️ |
|
||||
| Relay | 5 | 5 | 0 | ✅ |
|
||||
| Role | 7 | 7 | 0 | ✅ |
|
||||
| Prompt | 6 | 6 | 0 | ✅ |
|
||||
| Agent Template | 9 | 9 | 0 | ✅ |
|
||||
| Scheduled Task | 5 | 5 | 0 | ✅ |
|
||||
| Telemetry | 4 | 4 | 0 | ✅ |
|
||||
| Billing | 10 | 10 | 0 | ✅ |
|
||||
| Knowledge | 16 | 13 | 3 (422参数错误) | ✅ |
|
||||
| Migration | 7 | 7 | 0 | ✅ |
|
||||
| **总计** | **103** | **95** | **8** | **92% 通过** |
|
||||
|
||||
### 3.2 后端问题
|
||||
|
||||
| 严重度 | 端点 | 状态码 | 根因 | 修复文件 |
|
||||
|--------|------|--------|------|----------|
|
||||
| **P0** | POST /auth/register | 连接重置/崩溃 | `ConnectInfo<SocketAddr>` extractor 在某些条件下引发 panic | `auth/handlers.rs:65` |
|
||||
| **P0** | GET /usage | 500 | `Option<String>` 绑定到 `$2::timestamptz`,PostgreSQL 无法隐式转换 | `model_config/types.rs:148-149`, `service.rs:419` |
|
||||
| **P0** | POST /auth/refresh | 500 | `refresh_tokens` 表 `expires_at` 列 TEXT 类型无法转为 TIMESTAMPTZ | refresh token 相关代码 |
|
||||
| P3 | POST /knowledge/items/batch | 422 | 参数验证问题 | - |
|
||||
| P3 | POST /knowledge/items/import | 422 | 参数验证问题 | - |
|
||||
|
||||
---
|
||||
|
||||
## 四、Admin V2 前端-后端集成对比
|
||||
|
||||
### 4.1 统计概览
|
||||
|
||||
| 指标 | 数量 |
|
||||
|------|------|
|
||||
| 前端定义的 API 调用 | 83 |
|
||||
| 前端✅匹配后端 | 47 |
|
||||
| 前端❌调用后端不存在 | 8 |
|
||||
| 后端⚠️存在但前端未调用 | 34 |
|
||||
| 有 service 但无页面调用 | ~10 |
|
||||
|
||||
### 4.2 前端调了但后端不存在的路由 (❌ 断链)
|
||||
|
||||
| 路径 | 说明 |
|
||||
|------|------|
|
||||
| DELETE /knowledge/categories/:id | 后端有 categories 但无单条删除 |
|
||||
| PUT /knowledge/categories/:id | 后端无单条更新 |
|
||||
| GET /knowledge/items/:id | 后端无单条查询 |
|
||||
| DELETE /knowledge/items/:id | 后端无单条删除 |
|
||||
| POST /knowledge/items/:id/rollback/:version | 后端无版本回滚 |
|
||||
| PUT /config/items/:id | 后端路由不同,无法单条更新 |
|
||||
| GET /billing/payments/:id | 后端无单条支付查询 |
|
||||
| POST /prompts/:name/rollback/:version | 后端有 rollback 但需确认路径 |
|
||||
|
||||
### 4.3 后端存在但前端完全未接入的路由 (⚠️ 开发了没接)
|
||||
|
||||
| 路由 | 模块 | 功能 |
|
||||
|------|------|------|
|
||||
| POST /auth/register | Auth | 用户注册 |
|
||||
| PUT /auth/password | Auth | 修改密码 |
|
||||
| POST /auth/totp/* (3个) | Auth | TOTP 2FA |
|
||||
| GET /accounts/:id | Account | 账户详情 |
|
||||
| GET /tokens | Account | Token 管理 |
|
||||
| GET /devices | Account | 设备管理 |
|
||||
| GET /model-groups/* (5个) | Model Config | 模型分组管理(整套) |
|
||||
| POST /keys/:id/rotate | Model Config | Key 轮换 |
|
||||
| POST /relay/chat/completions | Relay | Chat 代理 |
|
||||
| GET /relay/models | Relay | 可用模型列表 |
|
||||
| GET /agent-templates/available | Agent Template | 可用模板 |
|
||||
| POST /agent-templates/:id/create-agent | Agent Template | 从模板创建 Agent |
|
||||
| POST /accounts/me/assign-template | Agent Template | 分配模板 |
|
||||
| GET /prompts/check | Prompt | Prompt 更新检查 |
|
||||
| GET /billing/usage | Billing | 计费用量 |
|
||||
| GET /billing/invoices/* | Billing | 发票 PDF |
|
||||
| POST /config/analysis | Config | 配置分析 |
|
||||
| POST /config/seed | Config | 配置种子 |
|
||||
| POST /config/sync | Config | 配置同步 |
|
||||
| POST /config/diff | Config | 配置差异 |
|
||||
| GET /config/pull | Config | 配置拉取 |
|
||||
|
||||
### 4.4 空壳/问题页面
|
||||
|
||||
| 页面 | 问题 |
|
||||
|------|------|
|
||||
| API Keys | service 定义了 CRUD 但无独立页面,路由指向 ModelServices |
|
||||
| Usage Service | 定义了 daily()/byModel() 但无页面调用,Usage 页用 telemetryService |
|
||||
| Knowledge | 前端定义了 16 个子功能,部分后端不存在,UI 按钮可能触发 404 |
|
||||
|
||||
---
|
||||
|
||||
## 五、一致性交叉验证
|
||||
|
||||
### 5.1 Tauri 桌面端 vs Admin V2 功能对比
|
||||
|
||||
| 功能 | Tauri 桌面端 | Admin V2 | 一致性 |
|
||||
|------|-------------|----------|--------|
|
||||
| 账户管理 | ❌ SaaS页加载失败 | ✅ Accounts 页完整 CRUD | ❌ 不一致 |
|
||||
| 模型管理 | ✅ 设置→模型与API | ✅ ModelServices 页完整 | ✅ 一致 |
|
||||
| 提供商管理 | ✅ 设置→模型与API | ✅ Provider CRUD | ✅ 一致 |
|
||||
| 订阅/计费 | ❌ 加载失败 | ✅ Billing 页 | ❌ 不一致 |
|
||||
| 角色权限 | ❌ 无入口 | ✅ Roles 页完整 CRUD | ❌ Admin独有 |
|
||||
| Prompt 管理 | ❌ 无入口 | ✅ Prompts 页完整 | ❌ Admin独有 |
|
||||
| 知识库 | ✅ 语义记忆(本地) | ✅ Knowledge 页(SaaS) | ⚠️ 不同实现 |
|
||||
| 审计日志 | ✅ 有展示 | ✅ Logs 页 | ✅ 一致 |
|
||||
| 定时任务 | ✅ 有展示 | ✅ ScheduledTasks 页 | ✅ 一致 |
|
||||
| 技能管理 | ⚠️ 0 个加载 | ❌ 无页面 | ❌ 不一致 |
|
||||
| MCP 服务 | ⚠️ 未接入 | ❌ 无页面 | ❌ 两端都缺 |
|
||||
|
||||
### 5.2 功能闭环验证
|
||||
|
||||
| 闭环流程 | 验证结果 |
|
||||
|----------|----------|
|
||||
| 登录→聊天→流式响应 | ✅ 完整 |
|
||||
| 登录→设置→配置→生效 | ⚠️ Gateway 配置生效,SaaS 配置失败 |
|
||||
| Admin→创建账户→桌面端登录 | ✅ 可行(后端已验证) |
|
||||
| Admin→配置模型→桌面端切换 | ✅ 可行 |
|
||||
| Admin→管理角色→桌面端生效 | ✅ 可行(RBAC 通过 JWT) |
|
||||
| Admin→管理 Prompt→桌面端使用 | ⚠️ Prompt 系统未接入桌面端 |
|
||||
| Admin→知识库→桌面端搜索 | ❌ 两端实现不同(本地 vs SaaS) |
|
||||
|
||||
---
|
||||
|
||||
## 六、优先修复建议
|
||||
|
||||
### P0 - 必须修复(影响核心用户体验)
|
||||
|
||||
1. **POST /auth/register 服务器崩溃** - `ConnectInfo<SocketAddr>` 在 `auth/handlers.rs:65` 引发 panic,需要改用 `Optional` 或移除该 extractor
|
||||
2. **GET /usage 500 错误** - `model_config/types.rs:148-149` 的 `from/to` 字段为 `Option<String>`,但 SQL 绑定到 `$2::timestamptz`,需改为 `Option<chrono::DateTime>` 或在查询中解析
|
||||
3. **POST /auth/refresh 500 错误** - `refresh_tokens` 表的 `expires_at` 列类型为 TEXT,需迁移为 TIMESTAMPTZ 或在查询中显式转换
|
||||
4. **Tauri 桌面端 SaaS 平台页加载失败** - 排查 saasStore 连接逻辑,可能是 token 传递或 API 路径问题
|
||||
5. **Tauri 桌面端 订阅与计费页加载失败** - 同上,与 billing API 交互失败
|
||||
|
||||
### P1 - 应该修复(影响功能完整性)
|
||||
|
||||
4. **Knowledge 前端 8 个断链路由** - 前端调了后端不存在的路由,需补齐后端或修正前端
|
||||
5. **技能管理前端为空** - 75 个 SKILL.md 未加载到桌面端,可能是 Gateway 加载逻辑问题
|
||||
6. **Model Groups 完整模块未接入前端** - 后端 5 个端点已实现,Admin 无页面
|
||||
|
||||
### P2 - 建议修复(提升产品完成度)
|
||||
|
||||
7. **34 个后端路由未接入前端** - 包括 TOTP 2FA、设备管理、配置同步等
|
||||
8. **积分系统显示"开发中"** - 补齐或隐藏
|
||||
9. **MCP 服务前端未接入** - 只能手动配置
|
||||
10. **Usage Service 空壳** - service 定义了但无页面使用
|
||||
|
||||
---
|
||||
|
||||
## 七、验证方法说明
|
||||
|
||||
- **Tauri 桌面端**: 通过 Tauri MCP (Chrome DevTools Protocol) 进行 DOM 交互、截图、JS 执行验证
|
||||
- **SaaS 后端**: 通过 curl 对全部 103 个 API 端点进行 HTTP 状态码验证
|
||||
- **Admin V2**: 通过代码分析(services/*.ts + pages/*.tsx)对比后端路由定义(crates/zclaw-saas/src/*/mod.rs)
|
||||
- **Admin V2 浏览器验证**: Tauri MCP 在 Admin V2 (5173) 上 DOM 查询超时(疑似 Vite HMR CSP 限制),仅截图可用
|
||||
204
docs/brainstorming/2026-04-12-发散探讨-管家主动性与行业配置.md
Normal file
204
docs/brainstorming/2026-04-12-发散探讨-管家主动性与行业配置.md
Normal file
@@ -0,0 +1,204 @@
|
||||
# ZCLAW 发散式探讨 — 管家主动性与行业配置体系
|
||||
|
||||
> 日期: 2026-04-12
|
||||
> 形式: 发散式互动探讨
|
||||
> 参与者: iven + Claude
|
||||
> 计划产出: `plans/fancy-kindling-karp.md`
|
||||
|
||||
---
|
||||
|
||||
## 议题:Agent 对话主动性 — 如何让管家主动解决问题?
|
||||
|
||||
### 抛砖
|
||||
|
||||
管家模式已有痛点检测、用户画像、人格检测、Heartbeat 等感知能力,但感知完之后什么都没做。用户提出讨论如何让 agent 主动去解决用户提出的问题,让用户觉得系统人性化、是合格管家。
|
||||
|
||||
---
|
||||
|
||||
## 一、现状诊断
|
||||
|
||||
### 感知层 vs 行动层
|
||||
|
||||
**核心发现:感知层齐了,行动层为零。**
|
||||
|
||||
| 已有能力 | 状态 | 核心局限 |
|
||||
|----------|------|---------|
|
||||
| ButlerRouter 关键词路由 (4域81词) | ✅ | 只注入 prompt,不改变行为模式 |
|
||||
| 痛点检测+聚合 (18信号词) | ✅ | 检测后只存储,不触发行动 |
|
||||
| 用户画像 (7维度) | ✅ | 只在 prompt 里一行摘要 |
|
||||
| 人格检测 (含 proactiveness) | ✅ | 检测了但无行为差异 |
|
||||
| Heartbeat (5项检查) | ✅ | 检查结果不推向用户 |
|
||||
| 经验闭环 (痛点→方案→经验) | ✅ | 静默复用,用户无感 |
|
||||
| 冷启动 (4阶段状态机) | ✅ | 只首次,固定问候语 |
|
||||
|
||||
**一句话:管家能"看到"用户的痛点、画像、情绪,但看完之后什么都没做。**
|
||||
|
||||
### Hermes 分析的关键启发
|
||||
|
||||
讨论前先读了 `wiki/hermes-analysis.md`(Hermes Agent 44.1K stars 竞品分析),核心洞察:
|
||||
|
||||
> **"大多数 Agent 记录了'发生了什么',Hermes 提取了'什么有效'"**
|
||||
|
||||
ZCLAW 的痛点检测、画像积累、经验存储全是在**记录发生了什么**,但"什么有效"这一步断了。闭环没合上。
|
||||
|
||||
---
|
||||
|
||||
## 二、关键讨论与共识
|
||||
|
||||
### 2.1 主动性光谱
|
||||
|
||||
```
|
||||
L0 被动响应 "你问我答" ← 当前位置
|
||||
L1 主动理解 "你没说明白,我追问" ← 有痛点检测但不行动
|
||||
L2 主动建议 "你问A,我顺便提醒B" ← 近期目标
|
||||
L3 主动行动 "检测到问题,我先做了" ← 中期目标
|
||||
L4 预见行动 "你还没说,我已经准备好了" ← 远期愿景
|
||||
```
|
||||
|
||||
**共识:目标 L2-L3。**
|
||||
|
||||
L4 不应该是弹窗通知,而是**"用户下次来的时候,管家已经准备好了"**。这符合之前"建议不代理"原则,也避免打扰。
|
||||
|
||||
### 2.2 主动性由谁驱动?
|
||||
|
||||
**讨论:** System Prompt 注入 vs Heartbeat 调度 vs 中间件规则?
|
||||
|
||||
**共识(参考 Hermes):混合驱动,Prompt 驱动为主。**
|
||||
|
||||
| 路径 | 占比 | 用途 |
|
||||
|------|------|------|
|
||||
| System Prompt 注入 | 80% | 对话内主动建议 |
|
||||
| Heartbeat 调度 | 15% | 跨对话准备工作 |
|
||||
| 中间件规则 | 5% | 安全兜底 |
|
||||
|
||||
**核心认知:主动性不是独立模块,是 prompt 质量的结果。** 当 system prompt 包含足够用户画像、痛点历史、过往经验时,LLM 自然会产生主动行为。
|
||||
|
||||
### 2.3 学习驱动方式
|
||||
|
||||
**讨论:** Hermes 核心是"Agent 自己决定什么值得学习"。ZCLAW 要走这条路还是规则驱动?
|
||||
|
||||
**iven 提出关键约束:** ZCLAW 不仅面向医疗,面向所有行业。
|
||||
|
||||
**论证过程:**
|
||||
|
||||
纯规则驱动走不通——4 行业 81 关键词已经暴露问题,每进入一个新行业就要写一套新规则。500 个关键词、20 个域,这不是产品是定制开发。
|
||||
|
||||
纯 LLM 驱动也不对——不可审计(企业客户问"Agent 学了什么"无法回答)、可能学错、隐私风险、成本问题。
|
||||
|
||||
**共识:混合模式 — LLM 做发动机,规则做刹车。**
|
||||
|
||||
```
|
||||
规则管"不能做什么" → 安全边界、质量门控、触发信号
|
||||
LLM 管"应该学什么" → 判断什么有效、提取经验、生成建议
|
||||
```
|
||||
|
||||
**与 Hermes 的区别:** Hermes 无条件触发 Periodic Nudge,ZCLAW 采用**被动触发**:
|
||||
- 对话结束后检查触发信号(纯规则,零 LLM 成本)
|
||||
- 有信号才调 LLM 提取
|
||||
- 触发信号:痛点阈值跨过 / 隐式正反馈 / 连续 3+ 工具调用 / 用户纠正
|
||||
|
||||
### 2.4 行业配置架构
|
||||
|
||||
**iven 提出架构方向:** 行业配置做到 SaaS Admin 端,Tauri 端初始化时选择行业,从 Admin 端获取配置。
|
||||
|
||||
**讨论重点:**
|
||||
|
||||
**Q: 行业配置粒度?**
|
||||
- A: 模板化(空白表单)→ 灵活但质量低
|
||||
- B: 预设+微调 → 快但不可扩展
|
||||
- C: 分层(内置基础+Admin增强)→ **共识选择**
|
||||
|
||||
共识:C(分层),设计上预留向 A 演进。内置 4 行业基础配置保证质量,Admin 可覆盖/增强,后续迁移内置到 Admin DB。
|
||||
|
||||
**Q: 一个用户可以属于多个行业吗?**
|
||||
**共识:多行业并行。** Admin 控制用户可用的行业列表。ButlerRouter 只扫描授权行业的关键词,多行业同时打分,LLM 做最终判断。
|
||||
|
||||
**Q: 数据源?**
|
||||
**共识:Admin 管理为主。** SaaS Admin 是真相源,Tauri 拉取+本地缓存(离线可用),增量同步。
|
||||
|
||||
### 2.5 Admin 用户管理增强
|
||||
|
||||
**iven 衍生提出:** Admin 用户管理需要全面升级:
|
||||
|
||||
| 新增能力 | 说明 |
|
||||
|----------|------|
|
||||
| 行业授权 | 控制用户可使用的行业列表 |
|
||||
| 页面权限 | 控制用户在 Tauri 端能看到哪些页面/功能 |
|
||||
| 套餐关联 | 用户关联 BillingPlan |
|
||||
| Agent 模板 | 初始 Agent 人格、预配技能、工作流 |
|
||||
|
||||
### 2.6 实施顺序
|
||||
|
||||
**iven 确认:全套一起做。** 顺序:
|
||||
1. 4 个行业内置配置
|
||||
2. 学习循环基础
|
||||
3. Tauri 行业配置加载
|
||||
4. Admin 行业管理 API+UI
|
||||
|
||||
---
|
||||
|
||||
## 三、Hermes 参考要点
|
||||
|
||||
| 维度 | Hermes 做法 | ZCLAW 借鉴 |
|
||||
|------|------------|-----------|
|
||||
| 学习循环 | Periodic Nudge + Skill 自动创建 | 被动触发 + 经验→技能补丁(成本更低) |
|
||||
| 记忆分层 | 4 层(声明/情景/程序/用户建模) | 增强现有 3 层注入力度 + Prompt 冻结 |
|
||||
| Prompt Cache | Frozen MEMORY.md,技能用 user message | 计划引入会话内冻结策略 |
|
||||
| 上下文压缩 | 多级策略(剪裁→保护头尾→LLM摘要) | 计划增强 CompactionMiddleware |
|
||||
| 技能进化 | 自动 patch 更新 | 计划引入(经验→技能补丁) |
|
||||
| 用户建模 | Honcho 方言式建模 12 维度 | 增强 UserProfiler 的注入格式 |
|
||||
|
||||
---
|
||||
|
||||
## 四、主动性架构全貌
|
||||
|
||||
```
|
||||
SaaS Admin(真相源)
|
||||
├── 行业配置 (关键词/Prompt/技能优先级/痛点种子)
|
||||
├── 用户权限 (页面可见/行业授权/套餐/Agent模板)
|
||||
└── 管理 API
|
||||
│
|
||||
│ Tauri 初始化拉取 + 缓存
|
||||
▼
|
||||
Tauri 客户端
|
||||
├── 感知层(已有,需增强注入力度)
|
||||
│ ├── ButlerRouter → 多行业动态关键词
|
||||
│ ├── PainDetector → 18信号词 + 触发信号
|
||||
│ ├── UserProfiler → 7维度 + 行业偏好
|
||||
│ └── PersonalityDetector → proactiveness 维度
|
||||
│
|
||||
├── 学习层(新增,混合驱动)
|
||||
│ ├── 规则触发(低成本前置判断)
|
||||
│ ├── LLM 提取("什么有效")
|
||||
│ ├── 安全过滤(DataMasking + 格式校验)
|
||||
│ └── 持久化(ExperienceStore + UserProfile)
|
||||
│
|
||||
├── 注入层(已有,需增强)
|
||||
│ └── System Prompt 组装(会话开始时冻结)
|
||||
│ ├── 行业上下文
|
||||
│ ├── 用户画像摘要
|
||||
│ ├── 活跃痛点
|
||||
│ ├── 相关经验
|
||||
│ └── 人格偏好
|
||||
│
|
||||
└── LLM → 自然产生主动行为
|
||||
"我注意到..." / "顺便提醒..." / "上次您提到的..."
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、计划产出
|
||||
|
||||
完整实施计划:`plans/fancy-kindling-karp.md`
|
||||
|
||||
5 个 Phase、17 个 Task:
|
||||
|
||||
| Phase | 内容 | 依赖 |
|
||||
|-------|------|------|
|
||||
| Phase 1 | 行业配置基础(数据模型 + 4行业内置 + ButlerRouter改造) | 无 |
|
||||
| Phase 2 | 学习循环基础(触发信号 + LLM提取 + 经验增强) | Phase 1.1 |
|
||||
| Phase 3 | Tauri 行业配置加载(拉取缓存 + Rust注入 + Prompt组装 + 行业UI) | Phase 1+2 |
|
||||
| Phase 4 | Admin 用户管理增强(行业管理页 + Accounts增强 + SaaS API + 页面可见性) | Phase 1,可与2/3并行 |
|
||||
| Phase 5 | 主动行为激活(Prompt冻结 + 跨会话连续性 + Periodic Reflection + 注入格式) | Phase 1-4 |
|
||||
|
||||
**iven 批准计划,将在新会话中推进实施。**
|
||||
BIN
docs/screenshots/scenario_1.3_meeting_notes.png
Normal file
BIN
docs/screenshots/scenario_1.3_meeting_notes.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 818 KiB |
BIN
docs/screenshots/screenshot_1775730707086.jpg
Normal file
BIN
docs/screenshots/screenshot_1775730707086.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
BIN
docs/screenshots/screenshot_1775742907688.jpg
Normal file
BIN
docs/screenshots/screenshot_1775742907688.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
BIN
docs/screenshots/screenshot_1775744964451.jpg
Normal file
BIN
docs/screenshots/screenshot_1775744964451.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 68 KiB |
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
window.ALL_CRATES = ["dashmap","matchit"];
|
||||
//{"start":21,"fragment_lengths":[9,10]}
|
||||
window.ALL_CRATES = ["calamine","dashmap","matchit"];
|
||||
//{"start":21,"fragment_lengths":[10,10,10]}
|
||||
1
target/doc/search.index/028fba8e1fdd.js
Normal file
1
target/doc/search.index/028fba8e1fdd.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("UUQAAIEFggW3BbgF1QXWBRUAQwAAAzwFdmEEdwUxQAAA2gIhBVAF5QUFAcAAAAEmBHEiBP0EoAWhBaIFowWkBaUFZW9jAAOgcAAABWtucnP0KQIAAPMBwQEBAPMAAXIBPgQAAHFCAAAxA3gDeQN6A3sDfAN9A58FNwMAh6BAAAAFfqDAAAAFy6BQAAAFIlFQBgHiAAAA")
|
||||
1
target/doc/search.index/032957f067f0.js
Normal file
1
target/doc/search.index/032957f067f0.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQBAAAAFVQVjMgVlAEAAAAbhBWIzBTQFNQWyBcIF0wXUBQUBxAAAA+kFBe0FbnMFAcQAAAPoBQXsBW5z84ECZmmTBISgYAAABeWgQAAABayBQAHzEQUAAA0AAQA7A6AQAAADOmFjbg==")
|
||||
1
target/doc/search.index/034e41cd632d.js
Normal file
1
target/doc/search.index/034e41cd632d.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAAIaQUSJQMmA2F5VQFAAAAR5gXnBRXdBd4FYXK2Ad4BKwQHBdgF2QU1AEQAAANRBXQdBB4EHwQgBCFLAADCBdMF1AW3AQCFsJAFZwABGEAGAdMAAAAxSQAAxQXGBdsF3AUxSAAAtwW4BdUF1gUFAEYAAAOxBXRTBfsDYXJ3a4ShAAAABdGgEAAABCkJCAQ=")
|
||||
1
target/doc/search.index/035a0d269dcd.js
Normal file
1
target/doc/search.index/035a0d269dcd.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("RQFBAAAXwwXEBQNvBWVuVwNYA1kDWgOJBPMAAWU7MAAAAQAABgACAIoEAAAqBQUABQHBAAARewV8BQfaBWl0UUUAAEAFQQVCBUMFRAVFBWsDoFAAAAV0ZGdyFQBDAAAR5gXnBWHYBdkF8wADZW90AUUAAAA=")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("NQBBAAAiQAJGAkcCbdkB2gHqAesBIwECoEAAAAI4ZWn1EgEAAAEAAQAVAAEAMUIAAF0CaQJqAmsCawOgMAAAAe5kdXY=")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("BQHAAAAEGgIDWwFmcjFFAABdAmkCagJrAlMAA7BAAjAAAWFjZTowAAABAAAAAAANABAAAAAMAOcBTQJPAlACWgJbAlwCXwJgAmMCZAJlAmYC")
|
||||
1
target/doc/search.index/09a573253fb6.js
Normal file
1
target/doc/search.index/09a573253fb6.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQBAAAAC3wVyyQUFAcQAAAPpBQXtBW5zBQHEAAAD6AUF7AVuc/sCZmkxQAAA3wHgATcCOAJRRAAAgQWCBbcFuAXVBdYFFQBDAAADPAV2YQR3BTFAAADaAiEFUAXlBQUBwAAAASYEcSIE/QSgBaEFogWjBaQFpQVlb2MBA6BwAAAFa25yc/QpAgAA8wHBAQEA0wCEoEAAAAV+UEACAeIAAADfAYWgAAAAAy4IEAc=")
|
||||
1
target/doc/search.index/09c60b42cd06.js
Normal file
1
target/doc/search.index/09c60b42cd06.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQEAOzAAAAEAAD0AAgAyAgAA5wI8APMAAWk6MAAAAQAAAAAABwAQAAAAJQMmAykDVgMoBFEFgAWxBSMAA6BAAAAFWqAQAAAC5mFlbzswAAABAAAFAAEAwAAFAA==")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("MUIAADQCNQI9Aj4CBQHAAAATNgI3AhMfAiACbnITAgKwMAJLABZldzswAAABAAAIAAMACAEFACcBAQDWAQAA8wACZWsBZwEAAA==")
|
||||
1
target/doc/search.index/0c5b71e3923e.js
Normal file
1
target/doc/search.index/0c5b71e3923e.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQCEoDAAAAUVsDAEggABsEAFwQAPoMAAAAXQCAEGOzAAAAEAAB4ACgAvAgIAOgMAAEYDAAA4BAIAWgQCAGoEDAD4BAIA/wQAAD0FAADsBQEA")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("BQBFAAACLQJtuwEVAEUAAA1rAmFnAmgCE4ICoKAAAAJqaHPzBAFhOzAAAAEAAAYAAwBkAQIAvgEBAEQCAQAzAAOwIAEOAAFhcHI6MAAAAQAAAAAADAAQAAAACwA4ADkAOgA7ABoBHAEtATYBNwE4ATkBHQI=")
|
||||
1
target/doc/search.index/0dc122e94fbe.js
Normal file
1
target/doc/search.index/0dc122e94fbe.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("NQBAAAAULwQwBGXoAOkA6gCzATUAQAAAFC0ELgRl5QDmAOcAsgEnAgCGsBAF5gABsEADSQABoGAAAASMsFAF3QABE0AhOjAAAAEAAAAAAAkAEAAAAEYARwBIAM8AtgHeASsEBwXYBdkF")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("BQHBAAAWTwJQAhAYARkBYWaRRgAAOQJRAlICUwJUAlUCVgJXAlgCWQJhQgAAMQEyAWABYQEnAjICMwIxQgAAFQEWASsBLAHXAQCFoHAAAAI/AVQBOjAAAAEAAAAAAA0AEAAAACQAJQAmACcAKABEAE8AUAAdATUBYgFjAXEBcgE=")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("VQBAAAAEIgJt2gBXAcUBxgHHAS0CI4ECsCABXQABbHRBQwAAHgEuAS8BMAEaAlMAhKBQAAAB2KAgAAACChEQATswAAABAAASAAkADQABAKEAAAClAAAAvAAHAOcAAAAOAQEAGAEBAGsBAAC7AQAA")
|
||||
1
target/doc/search.index/12feedea63cc.js
Normal file
1
target/doc/search.index/12feedea63cc.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("UUAAAAgFCQUKBQsFDAUNBTFCAADMBc0FzgXPBQUAQQAAAt8FcskF8wQCYXI7MAAAAQAABQABAKYFBQAxRwAAswW0BbUFtgUVAEkAABHmBecFYdgF2QVRRgAAuwW8Bb0FvgW/BcAF5wMEhrCgBd0AASQwA/IsBAAAKAEFAEMAAAXqBWbHBRMDAqBQAAAF12FmAV8FAAD7AmJz")
|
||||
1
target/doc/search.index/14f6047e1b8c.js
Normal file
1
target/doc/search.index/14f6047e1b8c.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("FQBCAAAAdgVzJwRiBNUAQAAAMi0DOwQ8BD0EbbkB/QH+Af8BAAIBAgICAwIEArkFzAXNBc4FzwVrA6CwAAAF2mNmbg==")
|
||||
1
target/doc/search.index/18ae28c4509e.js
Normal file
1
target/doc/search.index/18ae28c4509e.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAAFEgUBiARncmUAQAAABuEFYjMFNAU1BbIFwgXTBdQFBQHEAAAD6QUF7QVucwUBxAAAA+gFBewFbnPzgQJmaZMChKBgAAAF5aBAAAAFrIFAAfMRBQAADQABACFCAAAjBSQFJQXbhKAQAAAEJRRBAA==")
|
||||
1
target/doc/search.index/1938617ff618.js
Normal file
1
target/doc/search.index/1938617ff618.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAAO0QUhugK7ArwCaXSHAACFoGAAAAVhoDAAAANQsBAFwQAPoAAAAAKtBBBGOzAAAAEAAAcAAgBsBQEAuwUFAA==")
|
||||
1
target/doc/search.index/1cbbd2760835.js
Normal file
1
target/doc/search.index/1cbbd2760835.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("FQBEAAAG4AVieAXLBQUAQAAAAjsFbSME84ECZmcFAcAAAANdBQJvBWFvBQBJAAAG4QVisgUFAcAAABXDBcQFElYFVwVkdGsDoCAAAAQpbG5zpwIAiLBABCsA3KBwAAAFyqBAAAAFP6BQAAAFPaAwAAAFgBShBzswAAABAAAsAAoA1QEAACUCAACyAgAANwMAAFcDAwCFAxsAWQQAAIkEAABABQUArAUAAA==")
|
||||
1
target/doc/search.index/1d6f1f5ee9c3.js
Normal file
1
target/doc/search.index/1d6f1f5ee9c3.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHBAAAO6wUL4gVjcisCoFAAAAWwcHUFAcQAAFKgBaEFogWjBaQFpQUAUAVycxUARAAADe4FYTAFMQX7AmFlFQBFAAAN8AVh4wXkBROCAqCgAAAF72hz8wcBYfJlBQAAAQCnAQCGoCAAAAKwoRAAAAXloKAAAAW6jkAC9uEAAADMAAQAawBdA08A")
|
||||
1
target/doc/search.index/1e7be3038e8e.js
Normal file
1
target/doc/search.index/1e7be3038e8e.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQIAOzAAAAEAAD0AAgAbBAAAlAQ8APMAAW07MAAAAQAARQAFAB8CAABFAjwAIgQAAP0EAACgBQUAAQACoAAAAAKDoDAAAAVRc3Q7MAAAAQAAKAAPAL4BCQAIAgAAqgIBADgDAQBHAwQAbwMCAB0EAwAtBAMAQQQCAIEEAACFBAAAFgUBAFgFAAB9BQAAfwUAAPsCcncjAAKgEAAABCZlb/JUAAAAfAA=")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("JQBAAAAycwF0AXUBdgFwXQFeASICJQBBAAAixAHoAekBYa8A4QDiAPMAAmVpOjAAAAEAAAAAAAkAEAAAANsA3AAeAS4BLwEwAb0BGgIbAhwC")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("AQEAOjAAAAEAAAAAABAAEAAAAKYApwDEAMUA5QDmAN4B7AHtASMCJAI2AjcCOAI6AjsCQQIFAcEAAAVKAgBrAWFmIUIAAGgBaQFqAYUAQgAAAywCYcsBzAHNAc4BzwHQAdEB0gHTASsCoDAAAAIYbnTzAANpa3I7MAAAAQAAQAAFAEsAAABwABoAJAEAAJ4BGgALAggABQHAAAATIwIkAgA0AW5yBQBDAAAyNAI1Aj0CPgJrZwHzAIQRQAE6MAAAAQAAAAAADQAQAAAA0ADgACEB1AHiARQCFQIZAjACMQJdAmkCagJrAg==")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("FQBFAAANaQJhKQIqAhUARQAADWsCYWcCaAITggKgoAAAAmpoc/MHAWHyRAIAAAEAMwADoKAAAAJdY2hz86AAAACrARYA")
|
||||
1
target/doc/search.index/23a15deffd45.js
Normal file
1
target/doc/search.index/23a15deffd45.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAAIaQUSJQMmA2F5VQFAAAAR5gXnBRXdBd4FYXK2Ad4BKwQHBdgF2QU1AEQAAANRBXQdBB4EHwQgBCFLAADCBdMF1AW3AQCFsJAFZwABGEAG9tMAAAANAFcDVgABAOwA")
|
||||
1
target/doc/search.index/268961667ebc.js
Normal file
1
target/doc/search.index/268961667ebc.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAAEIAURrgJcA3B0BQHAAAAD9gQQ1wXqBWFzFQBDAAADOQVhPwRABOMAhKAgAAADWwQBAzswAAABAACgAAUA2QAAAPIAYACzAgAAoQM8ANEEAAA=")
|
||||
1
target/doc/search.index/2ac690af1761.js
Normal file
1
target/doc/search.index/2ac690af1761.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQBBAAAEfwVlKQUFAcAAABNNBU4FExYFFwVuchMAArAwBXkAT2V3OzAAAAEAAAgAAwCIAgUAvwIBAGAEAABhQgAAOAM5A0kDSgNvA3ADcQNlAEAAAAbhBWIzBTQFNQWyBcIF0wXUBQUBxAAAA+kFBe0FbnMFAcQAAAPoBQXsBW5z84ECZmmTBYSgYAAABeWgQAAABayBQAHzEQUAAA0AAQD7BGlydHY=")
|
||||
1
target/doc/search.index/2ea8d4ccfe11.js
Normal file
1
target/doc/search.index/2ea8d4ccfe11.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("ZQBAAAAG4QViMwU0BTUFsgXCBdMF1AUFAcQAAAPpBQXtBW5zBQHEAAAD6AUF7AVuc/OBAmZpkwGEoGAAAAXloEAAAAWsgUAB8xEFAAANAAEA")
|
||||
1
target/doc/search.index/2f116f22a9e2.js
Normal file
1
target/doc/search.index/2f116f22a9e2.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("FQBAAAAGdgVlmwKcAisCsGAFgQABYWYxQgAAzAXNBc4FzwUFAEEAAALfBXLJBfMDAmFyOzAAAAEAAAUAAQCmBQUA+wJhZQ==")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("MUQAAF8CYAJlAmYCMUIAACABcAHCAcMBBQHAAAAhxAHoAekBIlgBKwIsAmx0MwCEsCACHwABsCABcQABARADOzAAAAEAAB4ACwBNAAEAiwAFAKsAAQCvAAAA3QAAAOEAAQAXAQAANAEAALoBAADJAQoA5AECAAUBwAAAINMABQEGATIjAiQCNgI3AmR0xwEAhaBAAAACWqAAAAAATEAwAwEhAgAA")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("VQBAAAAidwF4AXkBbZgAmQCaAJsAnACdAAUAQAAAMjQCNQI9Aj4Ca2cB8wABc/QVAQAAAQAVAAEAawOwgAJeAARsbnI=")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("BQLCAAASJQImAgG8AQLnAWNlbwUBwAAAEzYCNwITHwIgAm5yMwCEoLAAAAJhsDACSwAWEAEROzAAAAEAAAgAAwAIAQUAJwEBANYBAAA=")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("IUEAAN8B4AHhAVFCAABsAW0BbgFvAcABwQE1AEEAACJAAkYCRwJt2QHaAeoB6wEjAgKgQAAAAjhlafUSAQAAAQABABUAAQDzAANvcHUBTAAAAA==")
|
||||
1
target/doc/search.index/3a8e5b3a6506.js
Normal file
1
target/doc/search.index/3a8e5b3a6506.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("VQBAAAAEGgVtKgItAzsEPAQ9BDsFI4ECsCADQgABbHQVAEMAAAR9BWWGBIcEFQBFAAAAdgVzJwRiBNFDAACsAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAgEFtwEAhqCAAAAFXaAgAAAE0REZATowAAABAAAAAAAbABAAAAA5ADoAOwC0AbkB/QH+Af8BAAIBAgICAwIEAkICkQKSApsCnAKpAmQDIwQmBLkFzAXNBc4FzwXfBQ==")
|
||||
1
target/doc/search.index/3c369646dd5e.js
Normal file
1
target/doc/search.index/3c369646dd5e.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAAEAQUDOgNmcjFFAAC6Be4F7wXwBVcAAIWwQAVGAAGwEAV7AAGgcAAABdoVAQQ6MAAAAQAAAAAAEQAQAAAANwA9Az4DPwNAA4gEfgWBBYIFrgW3BbgFxQXGBdUF1gXbBdwF")
|
||||
1
target/doc/search.index/3d643572c595.js
Normal file
1
target/doc/search.index/3d643572c595.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQACoAAAAAKDoDAAAAVRc3Q7MAAAAQAAKAAPAL4BCQAIAgAAqgIBADgDAQBHAwQAbwMCAB0EAwAtBAMAQQQCAIEEAACFBAAAFgUBAFgFAAB9BQAAfwUAAA==")
|
||||
1
target/doc/search.index/3f2fec7abcc5.js
Normal file
1
target/doc/search.index/3f2fec7abcc5.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQBDAAAF6gVmxwUTCAKgUAAABddhZgFfBQAAAQEAOzAAAAEAAD0AAgAyAgAA5wI8AAUAQwAAAjsFbSMERQFDAAAXwwXEBQNvBWVuVwNYA1kDWgOJBPcAAIWgMAAAA0sMIQE6MAAAAQAAAAAABwAQAAAAJQMmAykDVgMoBFEFgAWxBQ==")
|
||||
1
target/doc/search.index/4081ca3d24f7.js
Normal file
1
target/doc/search.index/4081ca3d24f7.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("hQBAAAAd7gXwBWEjAoYCvQK+Ag4FMAUxBeMF5AUrAqBAAAAFIWFyEwCEsCACpwAhoCAAAAKosEAE+wABEBAK9toAAAB5AAEAAQBsBA8A")
|
||||
1
target/doc/search.index/40b45409d051.js
Normal file
1
target/doc/search.index/40b45409d051.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("UUAAAAgFCQUKBQsFDAUNBTFCAADMBc0FzgXPBQUAQQAAAt8FcskF8wQCYXI7MAAAAQAABQABAKYFBQAxRwAAswW0BbUFtgUVAEkAABHmBecFYdgF2QVRRgAAuwW8Bb0FvgW/BcAF5wMDhrCgBd0AASQwA/IsBAAAKAEbAqAgAAAFA2hp")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("AQADsBAA3QA6oEAAAAIioCAAAADYZW1wOzAAAAEAADkAFQA8AAAAqAAAANgAAADaAAAA6AAAACABAAAxAQEAVwEAAGABAQBwAQAAdwECALkBAADCAQEAxQECAN8BAgDvARoAJwIAAC0CAAAyAgEAQAIAAEYCAQA=")
|
||||
1
target/doc/search.index/42f709f97f38.js
Normal file
1
target/doc/search.index/42f709f97f38.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAARkQKSAmSKBCoFKwUsBS0FLgUvBWVvBQBFAAACOwVtIwQVAEUAAA3wBWHjBeQFE4ICoKAAAAXvaHPzBAFhOzAAAAEAAAYAAwBRAwIAMQQBAGUFAQDzAANhcHI6MAAAAQAAAAAADAAQAAAAMQCgAKEAogCjAKQCpwLIAuIC4wLkAuUCBgU=")
|
||||
1
target/doc/search.index/430d83796d7f.js
Normal file
1
target/doc/search.index/430d83796d7f.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("NQBAAAADhARpKAKTApQCWgUxQwAAugXuBe8F8AU1AEAAAAbSBWkmBScFXQWvBUMAA6BQAAAFP6AgAAAFuWRyc/bfAAAAuwABAAEAZgNiANMAhKAgAAADUBBBAvIuAwAAEQI=")
|
||||
1
target/doc/search.index/47e31bf8f114.js
Normal file
1
target/doc/search.index/47e31bf8f114.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQLCAAAiIwUkBSUFASUEAogEY2VvBQLAAAAEgAUTTQVOBRMWBRcFZG5yNwAAhqCwAAAFyKBAAAAEe7AwBXkAT6AgAAAFURABUzswAAABAAALAAUAEQIBAIgCBQC/AgEAYAQAANoFAAA=")
|
||||
1
target/doc/search.index/47e89ca0087d.js
Normal file
1
target/doc/search.index/47e89ca0087d.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHGAAAO6wUL4gVjcjFCAADMBc0FzgXPBQUASwAABuEFYrIFBQBBAAAC3wVyyQXzAYQJABE7MAAAAQAACgAFANMBAAAPAgAA9gQAAGcFAQCmBQUA")
|
||||
1
target/doc/search.index/48416e7405d7.js
Normal file
1
target/doc/search.index/48416e7405d7.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("ZQBAAAAHnwVtLgIIBQkFCgULBQwFDQUxQgAAzAXNBc4FzwUFAEEAAALfBXLJBfMEAmFyOzAAAAEAAAUAAQCmBQUAMUYAALMFtAW1BbYFBQBCAAAAJgVzAgX7AmFvFQBJAAAR5gXnBWHYBdkFUUYAALsFvAW9Bb4FvwXABecDAMiwoAXdAAGgMAAABCigYAAABT4ACYwLOjAAAAEAAAAAAAcAEAAAANQBLAR7BIAEEgVUBdIF4AU=")
|
||||
1
target/doc/search.index/48ef43389025.js
Normal file
1
target/doc/search.index/48ef43389025.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("MUIAAEoFSwVbBVwFBQHCAAAEagUAfQRjcwUBwAAAAtIFCdEFZWkFAcAAABNNBU4FExYFFwVuchMCArAwBXkAT2V3OzAAAAEAAAgAAwCIAgUAvwIBAGAEAADnAQCGoGAAAAXgoLAAAAWAkgUIOjAAAAEAAAAAAAcAEAAAAMYCVANVA30EjAR4BbAFywU=")
|
||||
1
target/doc/search.index/4904d5ec1731.js
Normal file
1
target/doc/search.index/4904d5ec1731.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQAAOzAAAAEAABsAAQDSBBsAIwECoEAAAAVYZW/yOwMAAAEANQBAAAAiYAVwBXEFbWMEZASPBJAEAQAAOzAAAAEAAD0AAgAyAgAA5wI8AL8AhaAgAAACh7AQBQ8AAWggAg==")
|
||||
1
target/doc/search.index/4c901ea52192.js
Normal file
1
target/doc/search.index/4c901ea52192.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAAKrQUT7AXtBW5yFQBCAAAEWAVlOwM8AxUARAAABH0FZYYEhwTHAACFoDAAAAQkoEAAAASFsAADdgABMgEE89EBAAABAE4D8wACZXT3gwIAAFcARwIvAIcADgAFAA==")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("BQBBAAAETgJlKAIFAcAAABM2AjcCEx8CIAJuchMAArAwAksAFmV3OzAAAAEAAAgAAwAIAQUAJwEBANYBAAD7AnR2")
|
||||
1
target/doc/search.index/4f7ae698e6f1.js
Normal file
1
target/doc/search.index/4f7ae698e6f1.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("VQBAAAAiggODA4QDbacBqAGpAaoBqwGsARUAQAAAMkoFSwVbBVwFa1QDVQPzAAFz9JgCAAABACoAAQBrA7CABcEAD2xucg==")
|
||||
1
target/doc/search.index/4ffb3cfe555f.js
Normal file
1
target/doc/search.index/4ffb3cfe555f.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHEAAAY1QXWBRnbBdwFcnchQgAAKgQEBQUFBQBDAAAEfwVlKQXzggJldTFCAADiAuMC5ALlAgEBADswAAABAAA9AAIAtAIAAN4DPAAjgQKgcAAABchzdCUAQgAAIigFSAVJBW3hAk4DTwMBAwA7MAAAAQAAPQACALMCAAChAzwAIUQAAHcEkQSSBHcrAIqgUAAABIugIAAAAuagUAAABQbwkUk6MAAAAQAAAAAAEAAQAAAAvAG9AQYCBwI5AjoCdwSRBJIEGwUcBU0FTgVPBVYFVwVhBQ==")
|
||||
1
target/doc/search.index/508385a9cfee.js
Normal file
1
target/doc/search.index/508385a9cfee.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHBAAAErgU0xQXGBdsF3AVncwUAQwAAA3kFd2AEMUUAAGIFYwVyBXMFAQAAOzAAAAEAAB0ACQAvAgIAOgMAAEYDAAA4BAIAWgQCAGoEDAD4BAIAPQUAAOwFAQD7A2drcwUAQAAABVUFYzIFZQBAAAAG4QViMwU0BTUFsgXCBdMF1AUFAcQAAAPpBQXtBW5zBQHEAAAD6AUF7AVuc/OBAmZpkwSEoGAAAAXloEAAAAWsgUAB8xEFAAANAAEA3wKGoDAAAAVpoEAAAAUdB6AE")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("BQLDAAASJQImAgG8AQLnAWNlb7UBQAAANV0CaQJqAmsCFDACMQJhY00CTwJQAloCWwJcAl8CYAJjAmQCZQJmAjUAQAAAA+YBadkAEAERATwC8wEBcwEvAgAA8wADYWR09LEAAAABADEAAQA=")
|
||||
1
target/doc/search.index/53a8ca945a45.js
Normal file
1
target/doc/search.index/53a8ca945a45.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHBAAACLgPSRgNqBGsEbARtBG4EbwRwBHEEcgRzBHQEdQR2BGVpBQHAAAACgAQC2gVlb1MAA6BAAAAFTGhpdPS5AAAAAQAlAgcA")
|
||||
1
target/doc/search.index/53c7e05e6ecd.js
Normal file
1
target/doc/search.index/53c7e05e6ecd.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("JQBAAAAyfgN/A4ADgQNwQgNDAxoFJQBBAAAiNwSNBI4EYdwBNQI2AgUAQAAAB2kFdCkEcwCEsCADJQABEQFAOzAAAAEAABIABgArAgEArAIAAMkCCwAqBAAAAQUAAAQFAQA=")
|
||||
1
target/doc/search.index/54ffc9c6021d.js
Normal file
1
target/doc/search.index/54ffc9c6021d.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("JQBAAAAyfgN/A4ADgQNwQgNDAxoF8wABaTswAAABAAASAAYAKwIBAKwCAADJAgsAKgQAAAEFAAAEBQEABQHAAAADrwUGbgVhbxMAAqAgAAAFdW5yAfcEAABxQAAAbAVtBbsFvAW9Bb4FvwXABbuEoAAAAADgEQgE")
|
||||
1
target/doc/search.index/55a067829a31.js
Normal file
1
target/doc/search.index/55a067829a31.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHBAAATZwVoBQPqBWFv8wABZvLvAAAA2AQFAEAAABAtApoCcmkFpwAAhqDgAAAF66BAAAAFGqAgAAACJ6CwAAAF4hTQATswAAABAABeABcApAAAAMoBAAAnAgAAKgIAAEMCAACvAgAA2AIBAC0DAAAvAwAATAMBAHUDAACCAwIAGwQAADUEAQA7BAIASQQBAHgEAgCUBDwAKAUAADsFAABIBQEAYAUAAHAFAQA=")
|
||||
1
target/doc/search.index/569e6b891c1b.js
Normal file
1
target/doc/search.index/569e6b891c1b.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQCHoHAAAAV6sCACJAJnsDACuAABsGAFbAABoDAAAAUYsHAFewABoBAAAAIcPBAFOzAAAAEAAEAABADOAQAAMgIAAOcCPAB7BQEA")
|
||||
1
target/doc/search.index/58492e58eedb.js
Normal file
1
target/doc/search.index/58492e58eedb.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQcAOzAAAAEAABwAAgBSBQAAgwUbAAEDADswAAABAAAbAAEA0gQbAGMBA6AwAAAE0WZpdDswAAABAAAcAAIAtwEAAOEBGwA=")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("BQHBAAAEWgI0XwJgAmUCZgJncwUAQwAAA0sCd9YBMUUAAEICQwJIAkkCUUAAAN4AWwFfAdsB3AHdAfsDZ2tz+wJudA==")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("lQJBAAADCgKDCwIMAg0CDgIPAhACEQISAhMClzkCUQJSAlMCVAJVAlYCVwJYAlkCZml0owCzALQAtQC2ALcAuAC5ALoAuwA=")
|
||||
1
target/doc/search.index/5d53fdb39383.js
Normal file
1
target/doc/search.index/5d53fdb39383.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQLCAAAiIwUkBSUFASUEAogEY2VvEwACoEAAAAR7aXPyEQIAAAEAFQBCAAAEWAVlOwM8AxUARAAABH0FZYYEhwTDAYSgMAAABCSgQAAABIUyAQDz0QEAAAEATgMFAUAAAAY9BQCpAmRmxwK1AUAAADW6Be4F7wXwBRRGBUcFYWN+BYEFggWuBbcFuAXFBcYF1QXWBdsF3AU1AEAAAAOEBGkoApMClAJaBfMAAXMBPwUAACsCoCAAAAR8Ym3zAIUZAAb03wEAAAEAVwABAA==")
|
||||
1
target/doc/search.index/5ea1d5b38768.js
Normal file
1
target/doc/search.index/5ea1d5b38768.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("QUIAACsCLAIqBAQFBQUxQwAAxQXGBdsF3AUFAEEAAAR/BWUpBWUAQAAABuEFYjMFNAU1BbIFwgXTBdQFBQHEAAAD6QUF7QVucwUBxAAAA+gFBewFbnPzgQJmaZMFhKBgAAAF5aBAAAAFrIFAAfMRBQAADQABAPsCaXYrArAQArECT25yZwIAhqBwAAAFHaBgAAAF0rAQArgAAZQBDPelAgAAfQIEAAEANgAZADkA")
|
||||
1
target/doc/search.index/5f011f70bdae.js
Normal file
1
target/doc/search.index/5f011f70bdae.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("IUoAAO4F7wXwBQUBwAAAE8MFxAUFGQVmbRUARQAADfAFYeMF5AUlAEAAACIvA0kESgRtzQENAg4CKwKggAAABcpkeLcBAIWgUAAABJOQUAI6MAAAAQAAAAAAFgAQAAAAUgBTAAkCCgILAgwCHgIhAkQChAKFAjYDNgU3BTgFWQVrBW4FswW0BbUFtgXRBQ==")
|
||||
1
target/doc/search.index/60ac3cdd4bf7.js
Normal file
1
target/doc/search.index/60ac3cdd4bf7.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("ZQBAAAAG4QViMwU0BTUFsgXCBdMF1AUFAcAAAAXlBTJmBGcEaARpBGVpYUAAANUBQAVBBUIFQwVEBUUFBQHEAAAD6QUF7QVucwUBxAAAA+gFBewFbnPzgQJmaXcBAIWgQAAABayJQAE6MAAAAQAAAAAABwAQAAAAFAJgA/sE/AQDBREFHgUfBQ==")
|
||||
1
target/doc/search.index/61753b11b634.js
Normal file
1
target/doc/search.index/61753b11b634.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHAAAACGQUQrgJcA2FyKwKgQAAABSBwdAUBwAAAA/YEENcF6gVhcwUBwQAAA3wEAMcCYWUbArBABeIACWFvFQBDAAADOQVhPwRABMcDAIaggAAABVqgIAAAA1sFgQM7MAAAAQAAogAHANkAAADyAGAAIAIAAIICAACzAgAAoQM8ANEEAAA=")
|
||||
1
target/doc/search.index/66e69315a96c.js
Normal file
1
target/doc/search.index/66e69315a96c.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("JQFAAAASRANFAwMDBWxzXQReBF8EFQBFAAAN8AVh4wXkBROCAqCgAAAF72hz8wIBYTswAAABAAAGAAMAUQMCADEEAQBlBQEABQBCAAAUGwUcBWUzAt8AhaBQAAAFYaBgAAAEgBEFAQ==")
|
||||
1
target/doc/search.index/6726e859da2b.js
Normal file
1
target/doc/search.index/6726e859da2b.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHBAAAO6wUL4gVjcisCoFAAAAWwcHUFAcQAAFKgBaEFogWjBaQFpQUAUAVycxUARAAADe4FYTAFMQX7AmFlFQBFAAAN8AVh4wXkBROCAqCgAAAF72hz8wcBYfJlBQAAAQDXAACFoRAAAAXloKAAAAW6jEAC87EBAADIA08A")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("FQBFAAANawJhZwJoAhOCAqCgAAACamhz8wIBYTswAAABAAAGAAMAZAECAL4BAQBEAgEABQBCAAAUIwIkAmXgAFsDoFAAAAJBYWVp")
|
||||
1
target/doc/search.index/68b8dcd91d22.js
Normal file
1
target/doc/search.index/68b8dcd91d22.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("UUIAAEAFQQVCBUMFRAVFBQEAADswAAABAAAdAAMArwEAAFIFAACDBRsAAQEAOzAAAAEAABwAAgBSBQAAgwUbACsCsEAEggABZ2nbhLAQBRMAAQAghg==")
|
||||
1
target/doc/search.index/6d6ec4bec575.js
Normal file
1
target/doc/search.index/6d6ec4bec575.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("YUAAAEYFRwVqBboF7gXvBfAFAQMAOzAAAAEAABwAAgBSBQAAgwUbAPFAAAAJAgoCCwIMAjYDNgU3BTgFWQVrBW4FswW0BbUFtgXRBfsDZGl0")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("gUIAAAsCDAINAg4CDwIQAhECEgITAjUAQAAAIkACRgJHAm3ZAdoB6gHrAQEAADswAAABAAAbAAIA3wAAADoBGgD7A2Rmbg==")
|
||||
1
target/doc/search.index/6fe638074369.js
Normal file
1
target/doc/search.index/6fe638074369.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQMAOzAAAAEAABwAAgCyAgAAhQMbAJFAAADRANIA8ADbAtwC3QJdA14DXwMkBAUAQwAABeoFZscFEwACoFAAAAXXYWYBXwUAAD8BhaCQAAAFWqBAAAAF2gAcEg==")
|
||||
1
target/doc/search.index/728e166ee63f.js
Normal file
1
target/doc/search.index/728e166ee63f.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("AQEAOjAAAAEAAAAAABAAEAAAALwBvQEGAgcCOQI6AncEkQSSBBsFHAVNBU4FTwVWBVcFYQUFAcEAAAV3BQBkA2FmIUIAAGEDYgNjA8UAQgAAAzoFYUsETARNBE4ETwRQBFEEUgRTBFQEVQRWBFcEKwKgMAAABP5udPMAA2lrcjswAAABAACXAAUA2wAAAFYBPAC0AgAA3gM8ANIEGwAFAEAAAAJYBXLgAisCsDAFGwABbnIVAEMAADJKBUsFWwVcBWtUA1UDtwEAhaEQAAAF2hFBATswAAABAAAlABIALQABAB0CAAAzAgAAjgICALECAADVAgIAOwMBAFgEAABmBAMAfgQBAO4EBwAABQAARgUBAGoFAAC6BQAA4gUAAOsFAADuBQIA")
|
||||
1
target/doc/search.index/7a38a3b92bb9.js
Normal file
1
target/doc/search.index/7a38a3b92bb9.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQHGAAAO6wUL4gVjcjFCAADMBc0FzgXPBQUASwAABuEFYrIFBQBBAAAC3wVyyQXzAIQJABE7MAAAAQAACgAFANMBAAAPAgAA9gQAAGcFAQCmBQUAJwAAhqAwAAAFFbAwBIIAAaAwAAAEPrBABcEAD6DAAAAF0BgBBzswAAABAAAeAAoALwICADoDAABGAwAAOAQCAFoEAgBqBAwA+AQCAP8EAAA9BQAA7AUBAA==")
|
||||
1
target/doc/search.index/7cfbffc18d8a.js
Normal file
1
target/doc/search.index/7cfbffc18d8a.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("5QBBAAACrQVyugG7AQUCZQNmA2cDaANpA2oDawNsA20DbgMzBDQEBQHBAAADfAQAxwJhZVMAA7BABeIACWFvdDswAAABAAAFAAIATwACACMFAgA=")
|
||||
@@ -1 +0,0 @@
|
||||
rn_("BQHEAAAYYwJkAhllAmYCcnchQgAAvQEbAhwCBQBDAAAETgJlKALzggJldTFCAAA2ATcBOAE5AQEBADswAAABAAAbAAIAJAEAAJ4BGgAjgQKgcAAAAmFzdCUAQgAAIicCMgIzAm01AWIBYwEBAwA7MAAAAQAAGwACACMBAACDARoAIUQAAN4B7AHtAfcLAIigUAAAAh1wEUk6MAAAAQAAAAAAEAAQAAAApgCnAMQAxQDlAOYA3gHsAe0BIwIkAjYCNwI4AjoCOwJBAg==")
|
||||
1
target/doc/search.index/7d43fc8920de.js
Normal file
1
target/doc/search.index/7d43fc8920de.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("NQFDAAASDwUQBQOxBWl0KgMrAywDUwUxRAAAxQXGBdsF3AVhQgAAQQRCBEMEFgUXBVgFfQUxQgAArwJ1AzUENgQFAcAAACE3BI0EjgQyMAM5BToFygVsdHMAhLAgA3YAAQEQAzswAAABAAAiAAwA3QABAJMBBQDYAQEA3AEAAC0CAAA1AgEAmgIAAOACAAAhBAAAPwQBAEsEDACCBAIABQHAAAAgIQKEAoUCMhsFHAVNBU4FZHRFAkAAABfDBcQFA28FA4AFZW50VwNYA1kDWgOJBJcHAIegQAAABa6gAAAAANxIMAfyGQUAAFAA")
|
||||
1
target/doc/search.index/7ed04a89a0b6.js
Normal file
1
target/doc/search.index/7ed04a89a0b6.js
Normal file
@@ -0,0 +1 @@
|
||||
rn_("BQBDAAAG0gVpJwUbAqBgAAAFWWFvBQBFAAACuQVyZAVTAYSgwAAABcqgAAAABSISIAL21gEAAOEAbQAdADsBwgA=")
|
||||
@@ -1 +0,0 @@
|
||||
rd_("gdashmapgmatchit")
|
||||
1
target/doc/search.index/crateNames/b23b1e0a52c0.js
Normal file
1
target/doc/search.index/crateNames/b23b1e0a52c0.js
Normal file
@@ -0,0 +1 @@
|
||||
rd_("hcalaminegdashmapgmatchit")
|
||||
1
target/doc/search.index/desc/88b2198f1f55.js
Normal file
1
target/doc/search.index/desc/88b2198f1f55.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
target/doc/search.index/entry/1e4641b72927.js
Normal file
1
target/doc/search.index/entry/1e4641b72927.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
target/doc/search.index/function/bb6041739fe3.js
Normal file
1
target/doc/search.index/function/bb6041739fe3.js
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
rb_("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")
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user