feat: Page AI Reasonix desktop session alignment, settings IA cleanup, knowledge RAG hardening
- ACP client/session manager: Reasonix desktop live session context - Hermes tools: knowledge_rag tool manifest and skill updates - Browser runtime: sidebar page AI permission/profile/render/session/tree modules - Routes: hermes_client, hermes_tools, knowledge_rag, web_shell - Scripts: reasonix ACP wrapper, LightRAG MCP, smoke tasks 159/558/559/561/562 - Skills: mnote-knowledge-rag and mnote-lightrag-bridge SKILL.md updates
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -374,6 +374,9 @@ pub(crate) async fn execute_mnote_tool_call(
|
||||
}
|
||||
"mnote.knowledge_rag.status" => knowledge_rag::status(&state, &context, &input).await,
|
||||
"mnote.knowledge_rag.query" => knowledge_rag::query(&state, &context, &input).await,
|
||||
"mnote.knowledge_rag.section_context" => {
|
||||
knowledge_rag::section_context(&state, &context, &input).await
|
||||
}
|
||||
"mnote.knowledge_rag.open_reference" => {
|
||||
knowledge_rag::open_reference(&state, &context, &input).await
|
||||
}
|
||||
@@ -726,6 +729,7 @@ fn is_read_tool(tool_name: &str) -> bool {
|
||||
| "mnote.evidence.open"
|
||||
| "mnote.knowledge_rag.status"
|
||||
| "mnote.knowledge_rag.query"
|
||||
| "mnote.knowledge_rag.section_context"
|
||||
| "mnote.knowledge_rag.open_reference"
|
||||
| "mnote.index.status"
|
||||
| "mnote.index.refresh"
|
||||
@@ -758,6 +762,7 @@ fn is_evidence_receipt_tool(tool_name: &str) -> bool {
|
||||
| "mnote.evidence.open"
|
||||
| "mnote.knowledge_rag.status"
|
||||
| "mnote.knowledge_rag.query"
|
||||
| "mnote.knowledge_rag.section_context"
|
||||
| "mnote.knowledge_rag.open_reference"
|
||||
)
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -91,6 +91,10 @@ pub fn build_router(state: AppState) -> Router {
|
||||
.route("/api/knowledge-rag/ingest", post(knowledge_rag::ingest))
|
||||
.route("/api/knowledge-rag/search", post(knowledge_rag::search))
|
||||
.route("/api/knowledge-rag/query", post(knowledge_rag::query_rag))
|
||||
.route(
|
||||
"/api/knowledge-rag/section-context",
|
||||
post(knowledge_rag::section_context),
|
||||
)
|
||||
.route(
|
||||
"/api/knowledge-rag/open-reference",
|
||||
post(knowledge_rag::open_reference),
|
||||
@@ -517,6 +521,46 @@ pub fn build_router(state: AppState) -> Router {
|
||||
"/api/page-ai/sessions/{session_id}/active-run",
|
||||
get(hermes_client::get_page_ai_session_active_run),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/runtime/status",
|
||||
get(hermes_client::get_page_ai_runtime_status),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/runtime/reset",
|
||||
post(hermes_client::reset_page_ai_runtime),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/sessions",
|
||||
get(hermes_client::list_sessions).post(hermes_client::create_session),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/sessions/search",
|
||||
get(hermes_client::search_sessions),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/sessions/{session_id}",
|
||||
get(hermes_client::get_session).delete(hermes_client::delete_session),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/sessions/{session_id}/resume",
|
||||
post(hermes_client::resume_session),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/sessions/{session_id}/rename",
|
||||
post(hermes_client::rename_session),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/sessions/{session_id}/export",
|
||||
get(hermes_client::export_session),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/sessions/{session_id}/auto-title",
|
||||
post(hermes_client::auto_title_session),
|
||||
)
|
||||
.route(
|
||||
"/api/page-ai/sessions/{session_id}/queue/{queue_id}",
|
||||
delete(hermes_client::cancel_queued_run),
|
||||
)
|
||||
.route(
|
||||
"/api/onlyoffice/bridge/commands",
|
||||
post(onlyoffice_bridge::enqueue_command),
|
||||
@@ -936,6 +980,8 @@ mod tests {
|
||||
assert!(!html.contains(">下载<"));
|
||||
assert!(html.contains(r#"data-page-width-content-type="word""#));
|
||||
assert!(html.contains("applyPreviewWidthPreference"));
|
||||
assert!(html.contains("data-mnote-office-preview-footnotes-disabled"));
|
||||
assert!(html.contains("renderFootnotes: false"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
|
||||
@@ -1930,13 +1930,27 @@ pub async fn office_preview_page(Query(query): Query<OfficePreviewQuery>) -> Res
|
||||
}}
|
||||
const buffer = await fetchArrayBuffer();
|
||||
viewer.replaceChildren();
|
||||
await window.docx.renderAsync(buffer, viewer, null, {{
|
||||
const options = {{
|
||||
className: 'mnote-docx',
|
||||
inWrapper: true,
|
||||
breakPages: true,
|
||||
renderHeaders: true,
|
||||
renderFooters: true
|
||||
}});
|
||||
}};
|
||||
try {{
|
||||
await window.docx.renderAsync(buffer, viewer, null, options);
|
||||
}} catch (error) {{
|
||||
if (!String(error && error.message || '').includes("reading 'type'")) {{
|
||||
throw error;
|
||||
}}
|
||||
viewer.replaceChildren();
|
||||
document.documentElement.setAttribute('data-mnote-office-preview-footnotes-disabled', 'true');
|
||||
await window.docx.renderAsync(buffer.slice(0), viewer, null, {{
|
||||
...options,
|
||||
renderFootnotes: false,
|
||||
renderEndnotes: false
|
||||
}});
|
||||
}}
|
||||
}}
|
||||
|
||||
async function renderWorkbook() {{
|
||||
|
||||
Reference in New Issue
Block a user