noteconnection 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -21
- package/README.md +260 -1626
- package/dist/src/agent_workspace.contract.parity.test.js +159 -0
- package/dist/src/agent_workspace.frontend.test.js +10388 -0
- package/dist/src/agent_workspace.locale.contract.test.js +95 -0
- package/dist/src/agent_workspace.runtime.behavior.test.js +5072 -0
- package/dist/src/android.knowledgebase.picker.contract.test.js +102 -0
- package/dist/src/appimage.patchelf.test.js +113 -0
- package/dist/src/appimage.portability.test.js +156 -0
- package/dist/src/backend/FileLoader.js +18 -4
- package/dist/src/backend/FileLoader.test.js +125 -0
- package/dist/src/backend/GraphBuilder.identity.test.js +86 -0
- package/dist/src/backend/GraphBuilder.js +66 -18
- package/dist/src/backend/GraphBuilder.matching.test.js +127 -0
- package/dist/src/backend/GraphMetrics.js +0 -3
- package/dist/src/backend/ResourceIdentity.js +155 -0
- package/dist/src/backend/ResourceIdentity.test.js +113 -0
- package/dist/src/backend/algorithms/CycleDetection.js +0 -1
- package/dist/src/backend/algorithms/HybridEngine.js +0 -3
- package/dist/src/backend/algorithms/LayoutEngine.js +0 -1
- package/dist/src/backend/algorithms/StatisticalAnalyzer.js +0 -4
- package/dist/src/backend/algorithms/TopologicalSort.js +0 -2
- package/dist/src/backend/build_dag.js +0 -1
- package/dist/src/capacitor.bridge.serialization.contract.test.js +3 -0
- package/dist/src/capacitor.runtime.contract.test.js +11 -2
- package/dist/src/copy.assets.contract.test.js +130 -0
- package/dist/src/core/Graph.js +138 -42
- package/dist/src/core/Graph.test.js +74 -0
- package/dist/src/core/NoteConnection.js +2 -2
- package/dist/src/core/PathBridge.js +293 -5
- package/dist/src/core/ResourceReference.js +17 -0
- package/dist/src/desktop.godot.pack.test.js +142 -0
- package/dist/src/desktop.runtime.graph.test.js +66 -0
- package/dist/src/export/WorkspaceExportBundle.js +1174 -0
- package/dist/src/export/WorkspaceExportBundle.test.js +1541 -0
- package/dist/src/export/index.js +18 -0
- package/dist/src/export/types.js +2 -0
- package/dist/src/fixrisk.issue.verifier.contract.test.js +3 -1
- package/dist/src/foundation.ann.runtime.contract.test.js +81 -0
- package/dist/src/foundation.release.evidence.contract.test.js +524 -0
- package/dist/src/foundation.sqlite.runtime.contract.test.js +88 -0
- package/dist/src/frontend/README.md +260 -1626
- package/dist/src/frontend/agent_workspace.js +6011 -0
- package/dist/src/frontend/agent_workspace_runtime.js +4434 -0
- package/dist/src/frontend/analysis.js +31 -4
- package/dist/src/frontend/app.js +2178 -62
- package/dist/src/frontend/focus_mode_interactions.js +33 -0
- package/dist/src/frontend/godot_future_path_renderer.js +540 -0
- package/dist/src/frontend/godot_tree_interactions.js +178 -0
- package/dist/src/frontend/graph_state.mjs +105 -0
- package/dist/src/frontend/hosted_future_path_runtime.js +157 -0
- package/dist/src/frontend/i18n.mjs +186 -0
- package/dist/src/frontend/index.html +672 -268
- package/dist/src/frontend/knowledge_projection_contract.js +230 -0
- package/dist/src/frontend/knowledge_projection_store.js +214 -0
- package/dist/src/frontend/layout_gpu.js +12 -4
- package/dist/src/frontend/libs/path_core.js +158 -42
- package/dist/src/frontend/locales/en.json +753 -5
- package/dist/src/frontend/locales/zh.json +753 -5
- package/dist/src/frontend/main.mjs +60 -0
- package/dist/src/frontend/markdown_runtime.js +827 -0
- package/dist/src/frontend/mobile_budget_runtime.js +33 -0
- package/dist/src/frontend/mobile_exact_analyzer.js +393 -0
- package/dist/src/frontend/mobile_identity_contract.js +221 -0
- package/dist/src/frontend/mobile_semantic_comparator.js +264 -0
- package/dist/src/frontend/notemd.css +49 -0
- package/dist/src/frontend/notemd.html +7 -1
- package/dist/src/frontend/notemd.js +64 -0
- package/dist/src/frontend/path.html +113 -2
- package/dist/src/frontend/path_app.js +2108 -130
- package/dist/src/frontend/path_layout.mjs +143 -0
- package/dist/src/frontend/path_mermaid_utils.mjs +108 -0
- package/dist/src/frontend/path_modules_bridge.js +486 -0
- package/dist/src/frontend/path_state.mjs +118 -0
- package/dist/src/frontend/path_styles.css +146 -0
- package/dist/src/frontend/path_worker_bridge.mjs +85 -0
- package/dist/src/frontend/reader.js +393 -33
- package/dist/src/frontend/runtime_bridge.js +67 -54
- package/dist/src/frontend/runtime_bridge.mjs +279 -0
- package/dist/src/frontend/settings.js +130 -12
- package/dist/src/frontend/simulationWorker.js +1 -1
- package/dist/src/frontend/source_manager.js +297 -22
- package/dist/src/frontend/storage_provider.js +661 -71
- package/dist/src/frontend/styles.css +2814 -72
- package/dist/src/frontend/workbench_state.mjs +101 -0
- package/dist/src/frontend/workspace_panes.js +10272 -0
- package/dist/src/frontend.locale.contract.test.js +62 -0
- package/dist/src/frontend.runtime.assets.contract.test.js +81 -0
- package/dist/src/godot.sidecar.bootstrap.contract.test.js +244 -0
- package/dist/src/graph.answer.operator.contract.test.js +72 -0
- package/dist/src/index.js +6 -2
- package/dist/src/index.knowledge-root.test.js +118 -0
- package/dist/src/indexing/IndexLifecycle.js +217 -0
- package/dist/src/indexing/IndexLifecycle.test.js +73 -0
- package/dist/src/indexing/SegmentBuilder.js +64 -0
- package/dist/src/indexing/UnitBuilder.js +48 -0
- package/dist/src/indexing/types.js +2 -0
- package/dist/src/knowledge.api.contract.test.js +172 -0
- package/dist/src/knowledge_projection.contract.test.js +134 -0
- package/dist/src/knowledge_projection_store.test.js +200 -0
- package/dist/src/learning/AnswerQualityEvaluation.js +153 -0
- package/dist/src/learning/AnswerQualityEvaluation.test.js +118 -0
- package/dist/src/learning/KnowledgeLearningPlatform.js +11181 -0
- package/dist/src/learning/KnowledgeLearningPlatform.persistence.test.js +745 -0
- package/dist/src/learning/KnowledgeLearningPlatform.program-f.test.js +99 -0
- package/dist/src/learning/KnowledgeLearningPlatform.test.js +3208 -0
- package/dist/src/learning/KnowledgeWorkspaceConversationRegression.js +2998 -0
- package/dist/src/learning/KnowledgeWorkspaceConversationRegression.test.js +3936 -0
- package/dist/src/learning/MeasurementEvidenceConflicts.test.js +78 -0
- package/dist/src/learning/PublicAnswerContract.test.js +85 -0
- package/dist/src/learning/PublicEvidenceSelection.test.js +94 -0
- package/dist/src/learning/PublicMeasurementDisclosure.test.js +54 -0
- package/dist/src/learning/agentConversationExecution.js +211 -0
- package/dist/src/learning/agentConversationExecution.test.js +209 -0
- package/dist/src/learning/agentConversationSerialization.js +266 -0
- package/dist/src/learning/agentConversationSerialization.test.js +165 -0
- package/dist/src/learning/agentResponseBudget.js +179 -0
- package/dist/src/learning/agentResponseBudget.test.js +97 -0
- package/dist/src/learning/agentWorkspaceCapabilityContracts.js +65 -0
- package/dist/src/learning/answerReleaseReview.js +5260 -0
- package/dist/src/learning/answerReleaseReview.test.js +4174 -0
- package/dist/src/learning/answerTaskPlan.js +473 -0
- package/dist/src/learning/api.js +2 -0
- package/dist/src/learning/conversationComposer.js +1721 -0
- package/dist/src/learning/conversationComposer.test.js +3220 -0
- package/dist/src/learning/domains/ConversationManager.js +53 -0
- package/dist/src/learning/domains/KnowledgeIngestor.js +238 -0
- package/dist/src/learning/domains/KnowledgeQuerier.js +187 -0
- package/dist/src/learning/domains/MasteryEngine.js +387 -0
- package/dist/src/learning/domains/MemoryPolicyManager.js +408 -0
- package/dist/src/learning/domains/QualityEvaluator.js +307 -0
- package/dist/src/learning/domains/TutorRouter.js +313 -0
- package/dist/src/learning/domains/index.js +33 -0
- package/dist/src/learning/domains/types.js +7 -0
- package/dist/src/learning/errors.js +29 -0
- package/dist/src/learning/evidenceContextAssembler.js +1368 -0
- package/dist/src/learning/evidenceContextAssembler.test.js +6332 -0
- package/dist/src/learning/graphAnswerCoverage.js +37 -0
- package/dist/src/learning/graphAnswerCoverage.test.js +93 -0
- package/dist/src/learning/graphAnswerCoverageCalibration.js +59 -0
- package/dist/src/learning/graphAnswerCoverageCalibration.test.js +46 -0
- package/dist/src/learning/graphAnswerFacts.js +94 -0
- package/dist/src/learning/graphAnswerFacts.test.js +39 -0
- package/dist/src/learning/graphAnswerPlan.js +908 -0
- package/dist/src/learning/graphAnswerPlan.test.js +907 -0
- package/dist/src/learning/graphAnswerQualityCalibration.js +255 -0
- package/dist/src/learning/graphAnswerQualityCalibration.test.js +72 -0
- package/dist/src/learning/graphAnswerQualityPolicy.js +30 -0
- package/dist/src/learning/graphClaimMatcher.js +104 -0
- package/dist/src/learning/graphConditionedContext.js +109 -0
- package/dist/src/learning/graphConditionedContext.test.js +99 -0
- package/dist/src/learning/graphContextAssembler.js +860 -0
- package/dist/src/learning/graphContextAssembler.test.js +1033 -0
- package/dist/src/learning/graphExpansionPolicy.js +22 -0
- package/dist/src/learning/graphExpansionPolicy.test.js +33 -0
- package/dist/src/learning/identityMetadata.test.js +26 -0
- package/dist/src/learning/index.js +29 -0
- package/dist/src/learning/mobileAnswerProjection.js +104 -0
- package/dist/src/learning/mobileAnswerProjection.test.js +102 -0
- package/dist/src/learning/queryBackend.js +1922 -0
- package/dist/src/learning/queryBackend.test.js +976 -0
- package/dist/src/learning/ragContextPack.js +356 -0
- package/dist/src/learning/ragContextPack.test.js +311 -0
- package/dist/src/learning/ragEvidenceQuality.js +96 -0
- package/dist/src/learning/ragEvidenceQuality.test.js +29 -0
- package/dist/src/learning/ragPublicText.js +101 -0
- package/dist/src/learning/ragPublicText.test.js +57 -0
- package/dist/src/learning/ragSufficiencyJudge.js +171 -0
- package/dist/src/learning/ragSufficiencyJudge.test.js +177 -0
- package/dist/src/learning/ragSufficiencyProviderJudge.js +217 -0
- package/dist/src/learning/ragSufficiencyProviderJudge.test.js +207 -0
- package/dist/src/learning/requestNormalization.js +304 -0
- package/dist/src/learning/requestNormalization.test.js +101 -0
- package/dist/src/learning/runtimeCapability.js +4677 -0
- package/dist/src/learning/runtimeCapability.test.js +3635 -0
- package/dist/src/learning/store.js +1344 -0
- package/dist/src/learning/store.test.js +1425 -0
- package/dist/src/learning/tutorAdapter.js +2 -0
- package/dist/src/learning/types.js +2 -0
- package/dist/src/learning/vectorAccelerationAdapter.js +958 -0
- package/dist/src/learning/vectorAccelerationAdapter.test.js +412 -0
- package/dist/src/learning/workspaceHydration.js +168 -0
- package/dist/src/learning/workspaceHydration.test.js +30 -0
- package/dist/src/lfs.asset.policy.contract.test.js +153 -0
- package/dist/src/license.policy.contract.test.js +71 -0
- package/dist/src/markdown/MarkdownGateway.js +4 -0
- package/dist/src/markdown/MarkdownGateway.test.js +59 -0
- package/dist/src/memory/MemoryGovernance.js +74 -0
- package/dist/src/memory/MemoryGovernance.test.js +46 -0
- package/dist/src/memory/types.js +2 -0
- package/dist/src/mermaid.frontend.guard.contract.test.js +77 -0
- package/dist/src/middleware/SseResponseWriter.js +122 -0
- package/dist/src/middleware/SseResponseWriter.test.js +54 -0
- package/dist/src/middleware/auth.js +38 -0
- package/dist/src/middleware/auth.test.js +33 -0
- package/dist/src/middleware/body-parser.js +45 -0
- package/dist/src/middleware/cors.js +44 -0
- package/dist/src/middleware/index.js +22 -0
- package/dist/src/middleware/request-trace.js +96 -0
- package/dist/src/mobile.android.evidence.contract.test.js +146 -0
- package/dist/src/mobile.android.signing.contract.test.js +66 -0
- package/dist/src/mobile.artifact.contract.test.js +144 -0
- package/dist/src/mobile.budget.contract.test.js +90 -0
- package/dist/src/mobile.canonical-id.readiness.test.js +54 -0
- package/dist/src/mobile.graph.parity.contract.test.js +207 -0
- package/dist/src/mobile.identity.contract.test.js +66 -0
- package/dist/src/mobile.identity.corpus.manifest.test.js +72 -0
- package/dist/src/mobile.identity.corpus.test.js +40 -0
- package/dist/src/mobile.native.recovery.contract.test.js +64 -0
- package/dist/src/mobile.pipeline.test.js +11 -1
- package/dist/src/mobile.profile.contract.test.js +225 -0
- package/dist/src/mobile.semantic.parity.test.js +92 -0
- package/dist/src/mobile_exact_analyzer.test.js +113 -0
- package/dist/src/notemd/AppConfigToml.js +6 -4
- package/dist/src/notemd/ContentGenerator.js +4 -9
- package/dist/src/notemd/FileProcessor.js +4 -9
- package/dist/src/notemd/MermaidProcessor.js +400 -50
- package/dist/src/notemd/NotemdService.js +506 -26
- package/dist/src/notemd/PromptManager.js +15 -0
- package/dist/src/notemd/Translator.js +4 -9
- package/dist/src/notemd/cli/commands.js +357 -0
- package/dist/src/notemd/cli/dispatcher.js +225 -0
- package/dist/src/notemd/cli/index.js +169 -0
- package/dist/src/notemd/cli/parser.js +68 -0
- package/dist/src/notemd/cli/types.js +2 -0
- package/dist/src/notemd/constants.js +43 -0
- package/dist/src/notemd/diagram/diagramGenerationService.js +78 -0
- package/dist/src/notemd/diagram/diagramSpec.js +79 -0
- package/dist/src/notemd/diagram/diagramSpecResponseParser.js +131 -0
- package/dist/src/notemd/diagram/intent.js +95 -0
- package/dist/src/notemd/diagram/planner.js +71 -0
- package/dist/src/notemd/diagram/prompts/diagramSpecPrompt.js +42 -0
- package/dist/src/notemd/diagram/types.js +18 -0
- package/dist/src/notemd/index.js +26 -0
- package/dist/src/notemd/operations/capabilityManifest.js +23 -0
- package/dist/src/notemd/operations/cliContracts.js +17 -0
- package/dist/src/notemd/operations/configProfileCommands.js +85 -0
- package/dist/src/notemd/operations/registry.contract.test.js +95 -0
- package/dist/src/notemd/operations/registry.js +991 -0
- package/dist/src/notemd/operations/types.js +2 -0
- package/dist/src/notemd/progressReporter.js +9 -0
- package/dist/src/notemd/providerDiagnostics.js +220 -0
- package/dist/src/notemd/providerProfiles.js +42 -0
- package/dist/src/notemd/providerTemplates.js +231 -0
- package/dist/src/notemd/search/DuckDuckGoProvider.js +39 -0
- package/dist/src/notemd/search/SearchManager.js +13 -0
- package/dist/src/notemd/search/SearchProvider.js +2 -0
- package/dist/src/notemd/search/TavilyProvider.js +44 -0
- package/dist/src/notemd.agent.manifest.test.js +85 -0
- package/dist/src/notemd.api.contract.test.js +14 -1
- package/dist/src/notemd.app_config_toml.test.js +2 -1
- package/dist/src/notemd.batch.workflow.test.js +117 -0
- package/dist/src/notemd.cli.e2e.test.js +136 -0
- package/dist/src/notemd.core.test.js +51 -0
- package/dist/src/notemd.diagram.pipeline.test.js +233 -0
- package/dist/src/notemd.providerTemplates.test.js +34 -0
- package/dist/src/notemd.server.integration.test.js +262 -39
- package/dist/src/notemd.workflow.pipeline.test.js +162 -0
- package/dist/src/pathbridge.handshake.contract.test.js +45 -2
- package/dist/src/pathbridge.host-adapter.contract.test.js +133 -0
- package/dist/src/pathcore.bundle.contract.test.js +8 -0
- package/dist/src/pathmode.background.contract.test.js +69 -0
- package/dist/src/pathmode.settings.api.contract.test.js +9 -0
- package/dist/src/pkg.sidecar.contract.test.js +9 -3
- package/dist/src/platform/ExportProfile.js +86 -0
- package/dist/src/platform/MobileBudget.js +11 -0
- package/dist/src/platform/PlatformCapabilities.js +59 -0
- package/dist/src/platform/PlatformCapabilities.test.js +36 -0
- package/dist/src/platform/RenderMaterializer.js +33 -0
- package/dist/src/platform/RenderMaterializer.test.js +32 -0
- package/dist/src/query_backend.external_http.integration.test.js +410 -0
- package/dist/src/reader_renderer.js +404 -3
- package/dist/src/reader_renderer.test.js +87 -0
- package/dist/src/release.godot.mirror.contract.test.js +97 -0
- package/dist/src/resources/ResourceRegistry.js +263 -0
- package/dist/src/resources/ResourceRegistry.test.js +97 -0
- package/dist/src/resources/types.js +2 -0
- package/dist/src/routes/agentWorkspaceDiagnostics.js +173 -0
- package/dist/src/routes/index.js +19 -0
- package/dist/src/routes/knowledge.js +981 -0
- package/dist/src/routes/knowledgePayload.js +185 -0
- package/dist/src/routes/knowledgePayload.test.js +53 -0
- package/dist/src/routes/markdown.js +295 -0
- package/dist/src/routes/notemd.js +1321 -0
- package/dist/src/routes/registry.contract.test.js +133 -0
- package/dist/src/routes/registry.shadow.contract.test.js +22 -0
- package/dist/src/routes/render.js +248 -0
- package/dist/src/routes/runtimeRunbookRouteOps.js +149 -0
- package/dist/src/routes/runtimeRunbookRouteOps.test.js +194 -0
- package/dist/src/routes/settings.js +6 -0
- package/dist/src/routes/staticFiles.js +94 -0
- package/dist/src/routes/types.js +2 -0
- package/dist/src/runtime.capabilities.test.js +18 -2
- package/dist/src/runtime.transport.adapter.contract.test.js +81 -0
- package/dist/src/server.js +10342 -1325
- package/dist/src/server.migration.test.js +584 -10
- package/dist/src/server.port.fallback.contract.test.js +63 -0
- package/dist/src/session/SessionStateStore.js +81 -0
- package/dist/src/session/SessionStateStore.test.js +58 -0
- package/dist/src/session/types.js +2 -0
- package/dist/src/settings.runtime.contract.test.js +50 -0
- package/dist/src/shared/types.contract.test.js +107 -0
- package/dist/src/shared/types.js +22 -0
- package/dist/src/sidecar.build.lock.contract.test.js +201 -0
- package/dist/src/sidecar.freshness.contract.test.js +184 -0
- package/dist/src/sidecar.replacement.boundary.contract.test.js +131 -0
- package/dist/src/sidecar.supply.readiness.contract.test.js +155 -0
- package/dist/src/simulation.worker.offline.test.js +104 -0
- package/dist/src/source_manager.loadflow.test.js +46 -0
- package/dist/src/startup.layout.snapshot.contract.test.js +57 -0
- package/dist/src/storage.provider.capacitor.content.contract.test.js +4 -1
- package/dist/src/storage.provider.contract.test.js +152 -1
- package/dist/src/tauri.frontend.build.contract.test.js +68 -0
- package/dist/src/tauri.sidecar.cleanup.contract.test.js +21 -0
- package/dist/src/tauri.window.evidence.execution.test.js +68 -0
- package/dist/src/utils/RuntimePaths.js +10 -13
- package/dist/src/utils/RuntimePaths.test.js +27 -0
- package/dist/src/utils/platform.js +153 -0
- package/dist/src/windows.installer.build.test.js +109 -0
- package/dist/src/windows.installer.payload.test.js +76 -0
- package/dist/src/windows.installer.runtime.test.js +69 -0
- package/dist/src/workflows/WorkflowArtifactStore.js +96 -0
- package/dist/src/workflows/WorkflowArtifactStore.test.js +80 -0
- package/dist/src/workflows/types.js +2 -0
- package/dist/src/workspace/WorkspaceRegistry.js +135 -0
- package/dist/src/workspace/WorkspaceRegistry.test.js +29 -0
- package/dist/src/workspace/types.js +2 -0
- package/package.json +80 -15
|
@@ -1,10 +1,68 @@
|
|
|
1
1
|
document.addEventListener('DOMContentLoaded', () => {
|
|
2
|
+
const hasExplicitBrowserRuntimeBootstrap = () => {
|
|
3
|
+
if (typeof window === 'undefined' || !window.__NC_SIDECAR_RUNTIME) {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
const currentOrigin = String((window.location && window.location.origin) || '').trim().replace(/\/+$/, '');
|
|
7
|
+
const runtimeBaseUrl = String(window.__NC_SIDECAR_RUNTIME.baseUrl || '').trim().replace(/\/+$/, '');
|
|
8
|
+
return Boolean(currentOrigin && runtimeBaseUrl && currentOrigin === runtimeBaseUrl);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const isDetachedTauriCliPreviewPage = () =>
|
|
12
|
+
!window.__TAURI__ &&
|
|
13
|
+
Array.from(document.scripts || []).some((script) =>
|
|
14
|
+
/__tauri_cli/.test(String(script && (script.text || script.textContent) || ''))
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
const getRuntimeBaseOrigin = () => {
|
|
18
|
+
const bridge = (typeof window !== 'undefined') ? window.NoteConnectionRuntime : null;
|
|
19
|
+
const baseUrl = bridge && typeof bridge.getBaseUrl === 'function'
|
|
20
|
+
? String(bridge.getBaseUrl() || '').trim()
|
|
21
|
+
: '';
|
|
22
|
+
if (!baseUrl) {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
return new URL(baseUrl).origin;
|
|
27
|
+
} catch (_error) {
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const isDetachedPreviewWithoutRuntimeBootstrap = () =>
|
|
33
|
+
isDetachedTauriCliPreviewPage() && window.location.origin !== getRuntimeBaseOrigin();
|
|
34
|
+
|
|
35
|
+
const canUseBrowserRuntimeBackend = () => {
|
|
36
|
+
if (typeof window === 'undefined' || window.__TAURI__) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (isDetachedPreviewWithoutRuntimeBootstrap()) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (hasExplicitBrowserRuntimeBootstrap()) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
const origin = String((window.location && window.location.origin) || '').trim().toLowerCase();
|
|
46
|
+
return /^https?:\/\/(?:127\.0\.0\.1|localhost):3000$/.test(origin);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const isTauriRuntime = typeof window !== 'undefined' && Boolean(window.__TAURI__);
|
|
50
|
+
const initialBrowserRuntimeBackend = canUseBrowserRuntimeBackend();
|
|
2
51
|
let runtimeCaps = {
|
|
3
52
|
platform: 'web',
|
|
4
|
-
supports_sidecar:
|
|
5
|
-
supports_build:
|
|
6
|
-
supports_content_api:
|
|
7
|
-
supports_kb_runtime_change:
|
|
53
|
+
supports_sidecar: initialBrowserRuntimeBackend,
|
|
54
|
+
supports_build: initialBrowserRuntimeBackend,
|
|
55
|
+
supports_content_api: initialBrowserRuntimeBackend,
|
|
56
|
+
supports_kb_runtime_change: false,
|
|
57
|
+
supports_kb_import: false,
|
|
58
|
+
kb_import_mode: 'none',
|
|
59
|
+
supports_projection_store: true,
|
|
60
|
+
storage_requested_provider: isTauriRuntime || initialBrowserRuntimeBackend ? 'sqlite' : 'projection',
|
|
61
|
+
storage_resolved_provider: isTauriRuntime || initialBrowserRuntimeBackend ? 'unknown' : 'projection',
|
|
62
|
+
storage_fallback_reason: isTauriRuntime
|
|
63
|
+
? 'runtime_capability_unavailable'
|
|
64
|
+
: initialBrowserRuntimeBackend ? '' : 'runtime_backend_unavailable',
|
|
65
|
+
supports_sqlite: initialBrowserRuntimeBackend,
|
|
8
66
|
supports_native_pathmode: false,
|
|
9
67
|
supports_mobile_wasm_compute: false,
|
|
10
68
|
mobile_wasm_reason: 'non-mobile-runtime'
|
|
@@ -38,6 +96,11 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
38
96
|
return null;
|
|
39
97
|
};
|
|
40
98
|
|
|
99
|
+
const isStandaloneFrontendPreviewRuntime = () =>
|
|
100
|
+
!window.__TAURI__ &&
|
|
101
|
+
!resolveCapacitorPlatform() &&
|
|
102
|
+
runtimeCaps.supports_sidecar !== true;
|
|
103
|
+
|
|
41
104
|
const supportsCapacitorContentApi = () => {
|
|
42
105
|
if (typeof window === 'undefined') {
|
|
43
106
|
return false;
|
|
@@ -165,6 +228,25 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
165
228
|
return window.NoteConnectionStorage.createProvider({ runtimeCaps });
|
|
166
229
|
};
|
|
167
230
|
|
|
231
|
+
const refreshStorageResolution = async () => {
|
|
232
|
+
const provider = getStorageProvider();
|
|
233
|
+
if (!provider || typeof provider.refreshStorageResolution !== 'function') {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const resolution = await provider.refreshStorageResolution();
|
|
237
|
+
if (!resolution || typeof resolution !== 'object') {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
runtimeCaps = {
|
|
241
|
+
...runtimeCaps,
|
|
242
|
+
storage_requested_provider: resolution.requestedProvider,
|
|
243
|
+
storage_resolved_provider: resolution.resolvedProvider,
|
|
244
|
+
storage_fallback_reason: resolution.fallbackReason || '',
|
|
245
|
+
supports_sqlite: resolution.supportsSqlite === true,
|
|
246
|
+
};
|
|
247
|
+
exposeRuntimeCaps();
|
|
248
|
+
};
|
|
249
|
+
|
|
168
250
|
const resolveRuntimeCapabilities = async () => {
|
|
169
251
|
if (!window.__TAURI__) {
|
|
170
252
|
const capacitorPlatform = resolveCapacitorPlatform();
|
|
@@ -179,6 +261,13 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
179
261
|
supports_build: canBuildGraph,
|
|
180
262
|
supports_content_api: canReadContent,
|
|
181
263
|
supports_kb_runtime_change: false,
|
|
264
|
+
supports_kb_import: false,
|
|
265
|
+
kb_import_mode: 'app-local-only',
|
|
266
|
+
supports_projection_store: true,
|
|
267
|
+
storage_requested_provider: 'projection',
|
|
268
|
+
storage_resolved_provider: 'projection',
|
|
269
|
+
storage_fallback_reason: 'native_sqlite_runtime_unavailable',
|
|
270
|
+
supports_sqlite: false,
|
|
182
271
|
supports_native_pathmode: false,
|
|
183
272
|
supports_mobile_wasm_compute: mobileWasm.supported,
|
|
184
273
|
mobile_wasm_reason: mobileWasm.reason,
|
|
@@ -190,6 +279,27 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
190
279
|
supports_mobile_wasm_compute: runtimeCaps.supports_mobile_wasm_compute,
|
|
191
280
|
mobile_wasm_reason: runtimeCaps.mobile_wasm_reason
|
|
192
281
|
});
|
|
282
|
+
} else {
|
|
283
|
+
const browserRuntimeBackend = canUseBrowserRuntimeBackend();
|
|
284
|
+
runtimeCaps = {
|
|
285
|
+
...runtimeCaps,
|
|
286
|
+
platform: 'web',
|
|
287
|
+
supports_sidecar: browserRuntimeBackend,
|
|
288
|
+
supports_build: browserRuntimeBackend,
|
|
289
|
+
supports_content_api: browserRuntimeBackend,
|
|
290
|
+
supports_kb_runtime_change: false,
|
|
291
|
+
supports_kb_import: false,
|
|
292
|
+
kb_import_mode: 'none',
|
|
293
|
+
supports_projection_store: true,
|
|
294
|
+
storage_requested_provider: browserRuntimeBackend ? 'sqlite' : 'projection',
|
|
295
|
+
storage_resolved_provider: browserRuntimeBackend ? 'unknown' : 'projection',
|
|
296
|
+
storage_fallback_reason: browserRuntimeBackend ? '' : 'runtime_backend_unavailable',
|
|
297
|
+
supports_sqlite: browserRuntimeBackend,
|
|
298
|
+
supports_native_pathmode: false
|
|
299
|
+
};
|
|
300
|
+
if (!browserRuntimeBackend) {
|
|
301
|
+
console.log('[SourceManager] Frontend preview runtime detected: backend-dependent APIs disabled until a runtime bootstrap is provided.');
|
|
302
|
+
}
|
|
193
303
|
}
|
|
194
304
|
exposeRuntimeCaps();
|
|
195
305
|
return;
|
|
@@ -247,8 +357,61 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
247
357
|
// 动态脚本加载器(缓存破坏与顺序保证)
|
|
248
358
|
const loadGraphDataFromSidecar = async (src) => {
|
|
249
359
|
const parseGraphDataPayload = (text) => {
|
|
360
|
+
const mobileRuntime = window.NoteConnectionMobileBudget && window.NoteConnectionMobileBudget.runtime;
|
|
361
|
+
if (mobileRuntime && Number.isInteger(mobileRuntime.maxProjectionBytes)) {
|
|
362
|
+
const payloadText = String(text || '');
|
|
363
|
+
const byteCounter = window.NoteConnectionStorage
|
|
364
|
+
&& typeof window.NoteConnectionStorage.measureUtf8Bytes === 'function'
|
|
365
|
+
? window.NoteConnectionStorage.measureUtf8Bytes
|
|
366
|
+
: null;
|
|
367
|
+
const payloadBytes = byteCounter
|
|
368
|
+
? byteCounter(payloadText)
|
|
369
|
+
: (typeof TextEncoder === 'function'
|
|
370
|
+
? new TextEncoder().encode(payloadText).length
|
|
371
|
+
: (typeof Buffer !== 'undefined' && typeof Buffer.byteLength === 'function'
|
|
372
|
+
? Buffer.byteLength(payloadText, 'utf8')
|
|
373
|
+
: payloadText.length));
|
|
374
|
+
if (payloadBytes > mobileRuntime.maxProjectionBytes) {
|
|
375
|
+
throw new Error(
|
|
376
|
+
`Mobile graph projection exceeds ${mobileRuntime.maxProjectionBytes} bytes.`
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
250
380
|
const trimmed = text.trim();
|
|
251
381
|
let parsed = null;
|
|
382
|
+
const extractAssignedJson = (sourceText, equalsIndex) => {
|
|
383
|
+
const textAfterEquals = sourceText.slice(equalsIndex + 1);
|
|
384
|
+
const openingIndex = textAfterEquals.search(/[\[{]/);
|
|
385
|
+
if (openingIndex < 0) {
|
|
386
|
+
return '';
|
|
387
|
+
}
|
|
388
|
+
const startIndex = equalsIndex + 1 + openingIndex;
|
|
389
|
+
const openingChar = sourceText.charAt(startIndex);
|
|
390
|
+
const closingChar = openingChar === '{' ? '}' : ']';
|
|
391
|
+
let depth = 0;
|
|
392
|
+
let inString = false;
|
|
393
|
+
|
|
394
|
+
for (let cursor = startIndex; cursor < sourceText.length; cursor += 1) {
|
|
395
|
+
const char = sourceText.charAt(cursor);
|
|
396
|
+
const previous = sourceText.charAt(cursor - 1);
|
|
397
|
+
if (char === '"' && previous !== '\\') {
|
|
398
|
+
inString = !inString;
|
|
399
|
+
}
|
|
400
|
+
if (inString) {
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
if (char === openingChar) {
|
|
404
|
+
depth += 1;
|
|
405
|
+
} else if (char === closingChar) {
|
|
406
|
+
depth -= 1;
|
|
407
|
+
if (depth === 0) {
|
|
408
|
+
return sourceText.slice(startIndex, cursor + 1);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
return '';
|
|
414
|
+
};
|
|
252
415
|
|
|
253
416
|
// Expected format: const graphData = {...};
|
|
254
417
|
if (
|
|
@@ -258,10 +421,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
258
421
|
) {
|
|
259
422
|
const eqPos = trimmed.indexOf('=');
|
|
260
423
|
if (eqPos > -1) {
|
|
261
|
-
|
|
262
|
-
if (jsonText.endsWith(';')) {
|
|
263
|
-
jsonText = jsonText.slice(0, -1);
|
|
264
|
-
}
|
|
424
|
+
const jsonText = extractAssignedJson(trimmed, eqPos);
|
|
265
425
|
parsed = JSON.parse(jsonText);
|
|
266
426
|
}
|
|
267
427
|
} else if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
|
|
@@ -284,10 +444,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
284
444
|
if (equalsIndex < 0) {
|
|
285
445
|
continue;
|
|
286
446
|
}
|
|
287
|
-
|
|
288
|
-
if (candidateJson.endsWith(';')) {
|
|
289
|
-
candidateJson = candidateJson.slice(0, -1).trim();
|
|
290
|
-
}
|
|
447
|
+
const candidateJson = extractAssignedJson(trimmed, equalsIndex);
|
|
291
448
|
if (!candidateJson) {
|
|
292
449
|
continue;
|
|
293
450
|
}
|
|
@@ -324,6 +481,23 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
324
481
|
}
|
|
325
482
|
}
|
|
326
483
|
|
|
484
|
+
if (isDetachedPreviewWithoutRuntimeBootstrap()) {
|
|
485
|
+
throw new Error('Detached preview runtime has no sidecar-backed graph asset bootstrap.');
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
if (!window.__TAURI__ && runtimeCaps.supports_sidecar !== true) {
|
|
489
|
+
const previewUrl = `${src}?v=${Date.now()}`;
|
|
490
|
+
const response = await fetch(previewUrl, { cache: 'no-store' });
|
|
491
|
+
if (!response.ok) {
|
|
492
|
+
throw new Error(`Failed to fetch ${src}: HTTP ${response.status}`);
|
|
493
|
+
}
|
|
494
|
+
const text = await response.text();
|
|
495
|
+
const parsed = parseGraphDataPayload(text);
|
|
496
|
+
window.graphData = parsed;
|
|
497
|
+
console.log(`[Loader] Loaded ${src} via frontend preview asset: ${parsed.nodes.length} nodes`);
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
|
|
327
501
|
// ─── Strategy 1: HTTP fetch from sidecar (works in browser, may fail in Tauri WebView) ───
|
|
328
502
|
// 策略1:通过 HTTP 从 sidecar 获取(浏览器中有效,Tauri WebView 中可能因混合内容限制而失败)
|
|
329
503
|
const maxAttempts = (window.__TAURI__ && runtimeCaps.supports_sidecar) ? 20 : 1;
|
|
@@ -379,10 +553,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
379
553
|
|
|
380
554
|
const loadScript = async (src) => {
|
|
381
555
|
const isRuntimeGeneratedDataAsset = src.startsWith('data');
|
|
382
|
-
const useRuntimeGeneratedAssetFlow = Boolean(
|
|
383
|
-
isRuntimeGeneratedDataAsset &&
|
|
384
|
-
(window.__TAURI__ || (typeof runtimeCaps.platform === 'string' && runtimeCaps.platform.startsWith('capacitor-')))
|
|
385
|
-
);
|
|
556
|
+
const useRuntimeGeneratedAssetFlow = Boolean(isRuntimeGeneratedDataAsset);
|
|
386
557
|
if (useRuntimeGeneratedAssetFlow) {
|
|
387
558
|
await loadGraphDataFromSidecar(src);
|
|
388
559
|
return;
|
|
@@ -452,6 +623,19 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
452
623
|
};
|
|
453
624
|
|
|
454
625
|
const bootstrapScriptLoad = () => {
|
|
626
|
+
if (isDetachedPreviewWithoutRuntimeBootstrap()) {
|
|
627
|
+
console.log('[Loader] Detached preview runtime detected. Skipping runtime graph preload and loading app.js directly.');
|
|
628
|
+
triggerWelcomeModal(false);
|
|
629
|
+
loadScript('app.js')
|
|
630
|
+
.then(() => {
|
|
631
|
+
console.log('[Loader] app.js loaded successfully');
|
|
632
|
+
})
|
|
633
|
+
.catch(err => {
|
|
634
|
+
console.error('[Loader] Failed to load app.js (Critical Error):', err);
|
|
635
|
+
});
|
|
636
|
+
return;
|
|
637
|
+
}
|
|
638
|
+
|
|
455
639
|
// Load data.js first (Critical Data), then app.js (Application Logic)
|
|
456
640
|
loadScript('data.js')
|
|
457
641
|
.then(() => {
|
|
@@ -492,7 +676,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
492
676
|
|
|
493
677
|
if (!folderSelect || !loadBtn) return;
|
|
494
678
|
if (loadBtn.dataset.sourceManagerBound === '1') {
|
|
495
|
-
console.
|
|
679
|
+
console.log('[SourceManager] Duplicate binding guard triggered; skipping re-initialization.');
|
|
496
680
|
return;
|
|
497
681
|
}
|
|
498
682
|
loadBtn.dataset.sourceManagerBound = '1';
|
|
@@ -610,6 +794,33 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
610
794
|
return await provider.checkCache(target);
|
|
611
795
|
};
|
|
612
796
|
|
|
797
|
+
const ACTIVE_SOURCE_TARGET_EVENT = 'noteconnection:active-target-changed';
|
|
798
|
+
|
|
799
|
+
const normalizeActiveSourceTarget = (target) => {
|
|
800
|
+
const normalized = String(target || '').trim();
|
|
801
|
+
return normalized || 'ALL_FOLDERS';
|
|
802
|
+
};
|
|
803
|
+
|
|
804
|
+
const publishActiveSourceTarget = (target, source) => {
|
|
805
|
+
const normalizedTarget = normalizeActiveSourceTarget(target);
|
|
806
|
+
const payload = {
|
|
807
|
+
target: normalizedTarget,
|
|
808
|
+
source: String(source || 'source-manager').trim() || 'source-manager',
|
|
809
|
+
scope: normalizedTarget === 'ALL_FOLDERS'
|
|
810
|
+
? null
|
|
811
|
+
: {
|
|
812
|
+
workspaceId: normalizedTarget.toLowerCase(),
|
|
813
|
+
corpusId: normalizedTarget.toLowerCase(),
|
|
814
|
+
sourcePathPrefixes: [`Knowledge_Base/${normalizedTarget}`],
|
|
815
|
+
},
|
|
816
|
+
};
|
|
817
|
+
window.__NC_ACTIVE_SOURCE_TARGET = payload;
|
|
818
|
+
if (typeof window.dispatchEvent === 'function' && typeof window.CustomEvent === 'function') {
|
|
819
|
+
window.dispatchEvent(new CustomEvent(ACTIVE_SOURCE_TARGET_EVENT, { detail: payload }));
|
|
820
|
+
}
|
|
821
|
+
return payload;
|
|
822
|
+
};
|
|
823
|
+
|
|
613
824
|
const syncSidecarKbPath = async (kbPath) => {
|
|
614
825
|
if (!kbPath) {
|
|
615
826
|
return;
|
|
@@ -775,7 +986,13 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
775
986
|
let folders = [];
|
|
776
987
|
const inCapacitorRuntime = isCapacitorNativeRuntime();
|
|
777
988
|
|
|
778
|
-
if (
|
|
989
|
+
if (
|
|
990
|
+
isStandaloneFrontendPreviewRuntime() ||
|
|
991
|
+
isDetachedPreviewWithoutRuntimeBootstrap()
|
|
992
|
+
) {
|
|
993
|
+
kbPath = t('source.previewPath');
|
|
994
|
+
folders = [];
|
|
995
|
+
} else if (inCapacitorRuntime) {
|
|
779
996
|
kbPath = t('source.capacitor.bundlePath');
|
|
780
997
|
const provider = getStorageProvider();
|
|
781
998
|
let listedFolders = [];
|
|
@@ -868,6 +1085,17 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
868
1085
|
folderSelect.appendChild(packagedOption);
|
|
869
1086
|
}
|
|
870
1087
|
|
|
1088
|
+
if (folderSelect.options.length === 0 && isStandaloneFrontendPreviewRuntime()) {
|
|
1089
|
+
const previewOption = document.createElement('option');
|
|
1090
|
+
previewOption.value = '';
|
|
1091
|
+
previewOption.disabled = true;
|
|
1092
|
+
previewOption.selected = true;
|
|
1093
|
+
previewOption.textContent = t('source.previewPath');
|
|
1094
|
+
folderSelect.appendChild(previewOption);
|
|
1095
|
+
loadBtn.disabled = true;
|
|
1096
|
+
return;
|
|
1097
|
+
}
|
|
1098
|
+
|
|
871
1099
|
if (folderSelect.options.length === 0) {
|
|
872
1100
|
const emptyOption = document.createElement('option');
|
|
873
1101
|
emptyOption.value = '';
|
|
@@ -892,6 +1120,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
892
1120
|
} else {
|
|
893
1121
|
folderSelect.value = folderSelect.options[0].value;
|
|
894
1122
|
}
|
|
1123
|
+
publishActiveSourceTarget(folderSelect.value, 'folder-bootstrap');
|
|
895
1124
|
console.log('[SourceManager] Folder dropdown populated with', folderSelect.options.length, 'options');
|
|
896
1125
|
|
|
897
1126
|
} catch (err) {
|
|
@@ -913,10 +1142,11 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
913
1142
|
updateRuntimeCapabilityNotice();
|
|
914
1143
|
updateKbPathControls();
|
|
915
1144
|
|
|
916
|
-
|
|
917
|
-
|
|
1145
|
+
if (window.__TAURI__ && runtimeCaps.supports_sidecar) {
|
|
1146
|
+
await waitForSidecarReady();
|
|
1147
|
+
}
|
|
1148
|
+
await refreshStorageResolution();
|
|
918
1149
|
bootstrapScriptLoad();
|
|
919
|
-
await waitForSidecarReady();
|
|
920
1150
|
|
|
921
1151
|
if (window.i18n && window.i18n.isInitialized) {
|
|
922
1152
|
await fetchFolders();
|
|
@@ -938,6 +1168,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
938
1168
|
if (folderSelect.value) {
|
|
939
1169
|
localStorage.setItem(LAST_TARGET_KEY, folderSelect.value);
|
|
940
1170
|
}
|
|
1171
|
+
publishActiveSourceTarget(folderSelect.value, 'folder-change');
|
|
941
1172
|
});
|
|
942
1173
|
|
|
943
1174
|
// Add refresh functionality (will be triggered by IPC event from main process)
|
|
@@ -959,6 +1190,47 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
959
1190
|
});
|
|
960
1191
|
}
|
|
961
1192
|
|
|
1193
|
+
const requestKnowledgeBasePathChange = async () => {
|
|
1194
|
+
try {
|
|
1195
|
+
const request = await window.__TAURI__.core.invoke('request_kb_path_change');
|
|
1196
|
+
if (typeof request === 'string') {
|
|
1197
|
+
return request;
|
|
1198
|
+
}
|
|
1199
|
+
const status = String(request && request.status || '').trim().toLowerCase();
|
|
1200
|
+
if (status === 'completed') {
|
|
1201
|
+
return String(request.path || '').trim();
|
|
1202
|
+
}
|
|
1203
|
+
if (status !== 'pending') {
|
|
1204
|
+
return '';
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
const deadline = Date.now() + 120000;
|
|
1208
|
+
while (Date.now() < deadline) {
|
|
1209
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
1210
|
+
const result = await window.__TAURI__.core.invoke('poll_kb_path_change');
|
|
1211
|
+
const resultStatus = String(result && result.status || '').trim().toLowerCase();
|
|
1212
|
+
if (resultStatus === 'completed') {
|
|
1213
|
+
return String(result.path || '').trim();
|
|
1214
|
+
}
|
|
1215
|
+
if (resultStatus === 'cancelled') {
|
|
1216
|
+
return '';
|
|
1217
|
+
}
|
|
1218
|
+
if (resultStatus === 'failed' || resultStatus === 'unavailable') {
|
|
1219
|
+
const detail = String(result && result.detail || '').trim();
|
|
1220
|
+
throw new Error(detail || `Knowledge base picker ${resultStatus}.`);
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
throw new Error('Timed out waiting for Android knowledge base import.');
|
|
1224
|
+
} catch (error) {
|
|
1225
|
+
// Older Tauri builds do not expose the additive request/poll commands.
|
|
1226
|
+
// Preserve their synchronous desktop picker contract as a fallback.
|
|
1227
|
+
if (/unknown command|not found|invalid command/i.test(String(error && error.message || error))) {
|
|
1228
|
+
return await window.__TAURI__.core.invoke('choose_kb_path');
|
|
1229
|
+
}
|
|
1230
|
+
throw error;
|
|
1231
|
+
}
|
|
1232
|
+
};
|
|
1233
|
+
|
|
962
1234
|
if (changeKbPathBtn && window.__TAURI__) {
|
|
963
1235
|
changeKbPathBtn.addEventListener('click', async () => {
|
|
964
1236
|
if (!runtimeCaps.supports_kb_runtime_change) {
|
|
@@ -970,7 +1242,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
970
1242
|
if (resetKbPathBtn) resetKbPathBtn.disabled = true;
|
|
971
1243
|
|
|
972
1244
|
try {
|
|
973
|
-
const selectedPath = await
|
|
1245
|
+
const selectedPath = await requestKnowledgeBasePathChange();
|
|
974
1246
|
if (!selectedPath) {
|
|
975
1247
|
return;
|
|
976
1248
|
}
|
|
@@ -1039,6 +1311,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
1039
1311
|
return;
|
|
1040
1312
|
}
|
|
1041
1313
|
localStorage.setItem(LAST_TARGET_KEY, target);
|
|
1314
|
+
publishActiveSourceTarget(target, 'build-request');
|
|
1042
1315
|
|
|
1043
1316
|
// Feature: Check for cached graph (Multi-Session Optimization)
|
|
1044
1317
|
// Bridge-first runtime: sidecar HTTP path with Tauri IPC fallback.
|
|
@@ -1067,6 +1340,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
1067
1340
|
const restoreSuccess = await storageProvider.restoreCache(target);
|
|
1068
1341
|
|
|
1069
1342
|
if (restoreSuccess) {
|
|
1343
|
+
publishActiveSourceTarget(target, 'cache-restore');
|
|
1070
1344
|
keepLockedForReload = requestSafeReload('cache-restore', { force: true });
|
|
1071
1345
|
return;
|
|
1072
1346
|
}
|
|
@@ -1134,6 +1408,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
1134
1408
|
}
|
|
1135
1409
|
|
|
1136
1410
|
if (success) {
|
|
1411
|
+
publishActiveSourceTarget(target, 'build-success');
|
|
1137
1412
|
keepLockedForReload = true;
|
|
1138
1413
|
|
|
1139
1414
|
// v1.0.1: Pre-verify data.js is accessible before triggering reload.
|