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.
Files changed (328) hide show
  1. package/LICENSE +674 -21
  2. package/README.md +260 -1626
  3. package/dist/src/agent_workspace.contract.parity.test.js +159 -0
  4. package/dist/src/agent_workspace.frontend.test.js +10388 -0
  5. package/dist/src/agent_workspace.locale.contract.test.js +95 -0
  6. package/dist/src/agent_workspace.runtime.behavior.test.js +5072 -0
  7. package/dist/src/android.knowledgebase.picker.contract.test.js +102 -0
  8. package/dist/src/appimage.patchelf.test.js +113 -0
  9. package/dist/src/appimage.portability.test.js +156 -0
  10. package/dist/src/backend/FileLoader.js +18 -4
  11. package/dist/src/backend/FileLoader.test.js +125 -0
  12. package/dist/src/backend/GraphBuilder.identity.test.js +86 -0
  13. package/dist/src/backend/GraphBuilder.js +66 -18
  14. package/dist/src/backend/GraphBuilder.matching.test.js +127 -0
  15. package/dist/src/backend/GraphMetrics.js +0 -3
  16. package/dist/src/backend/ResourceIdentity.js +155 -0
  17. package/dist/src/backend/ResourceIdentity.test.js +113 -0
  18. package/dist/src/backend/algorithms/CycleDetection.js +0 -1
  19. package/dist/src/backend/algorithms/HybridEngine.js +0 -3
  20. package/dist/src/backend/algorithms/LayoutEngine.js +0 -1
  21. package/dist/src/backend/algorithms/StatisticalAnalyzer.js +0 -4
  22. package/dist/src/backend/algorithms/TopologicalSort.js +0 -2
  23. package/dist/src/backend/build_dag.js +0 -1
  24. package/dist/src/capacitor.bridge.serialization.contract.test.js +3 -0
  25. package/dist/src/capacitor.runtime.contract.test.js +11 -2
  26. package/dist/src/copy.assets.contract.test.js +130 -0
  27. package/dist/src/core/Graph.js +138 -42
  28. package/dist/src/core/Graph.test.js +74 -0
  29. package/dist/src/core/NoteConnection.js +2 -2
  30. package/dist/src/core/PathBridge.js +293 -5
  31. package/dist/src/core/ResourceReference.js +17 -0
  32. package/dist/src/desktop.godot.pack.test.js +142 -0
  33. package/dist/src/desktop.runtime.graph.test.js +66 -0
  34. package/dist/src/export/WorkspaceExportBundle.js +1174 -0
  35. package/dist/src/export/WorkspaceExportBundle.test.js +1541 -0
  36. package/dist/src/export/index.js +18 -0
  37. package/dist/src/export/types.js +2 -0
  38. package/dist/src/fixrisk.issue.verifier.contract.test.js +3 -1
  39. package/dist/src/foundation.ann.runtime.contract.test.js +81 -0
  40. package/dist/src/foundation.release.evidence.contract.test.js +524 -0
  41. package/dist/src/foundation.sqlite.runtime.contract.test.js +88 -0
  42. package/dist/src/frontend/README.md +260 -1626
  43. package/dist/src/frontend/agent_workspace.js +6011 -0
  44. package/dist/src/frontend/agent_workspace_runtime.js +4434 -0
  45. package/dist/src/frontend/analysis.js +31 -4
  46. package/dist/src/frontend/app.js +2178 -62
  47. package/dist/src/frontend/focus_mode_interactions.js +33 -0
  48. package/dist/src/frontend/godot_future_path_renderer.js +540 -0
  49. package/dist/src/frontend/godot_tree_interactions.js +178 -0
  50. package/dist/src/frontend/graph_state.mjs +105 -0
  51. package/dist/src/frontend/hosted_future_path_runtime.js +157 -0
  52. package/dist/src/frontend/i18n.mjs +186 -0
  53. package/dist/src/frontend/index.html +672 -268
  54. package/dist/src/frontend/knowledge_projection_contract.js +230 -0
  55. package/dist/src/frontend/knowledge_projection_store.js +214 -0
  56. package/dist/src/frontend/layout_gpu.js +12 -4
  57. package/dist/src/frontend/libs/path_core.js +158 -42
  58. package/dist/src/frontend/locales/en.json +753 -5
  59. package/dist/src/frontend/locales/zh.json +753 -5
  60. package/dist/src/frontend/main.mjs +60 -0
  61. package/dist/src/frontend/markdown_runtime.js +827 -0
  62. package/dist/src/frontend/mobile_budget_runtime.js +33 -0
  63. package/dist/src/frontend/mobile_exact_analyzer.js +393 -0
  64. package/dist/src/frontend/mobile_identity_contract.js +221 -0
  65. package/dist/src/frontend/mobile_semantic_comparator.js +264 -0
  66. package/dist/src/frontend/notemd.css +49 -0
  67. package/dist/src/frontend/notemd.html +7 -1
  68. package/dist/src/frontend/notemd.js +64 -0
  69. package/dist/src/frontend/path.html +113 -2
  70. package/dist/src/frontend/path_app.js +2108 -130
  71. package/dist/src/frontend/path_layout.mjs +143 -0
  72. package/dist/src/frontend/path_mermaid_utils.mjs +108 -0
  73. package/dist/src/frontend/path_modules_bridge.js +486 -0
  74. package/dist/src/frontend/path_state.mjs +118 -0
  75. package/dist/src/frontend/path_styles.css +146 -0
  76. package/dist/src/frontend/path_worker_bridge.mjs +85 -0
  77. package/dist/src/frontend/reader.js +393 -33
  78. package/dist/src/frontend/runtime_bridge.js +67 -54
  79. package/dist/src/frontend/runtime_bridge.mjs +279 -0
  80. package/dist/src/frontend/settings.js +130 -12
  81. package/dist/src/frontend/simulationWorker.js +1 -1
  82. package/dist/src/frontend/source_manager.js +297 -22
  83. package/dist/src/frontend/storage_provider.js +661 -71
  84. package/dist/src/frontend/styles.css +2814 -72
  85. package/dist/src/frontend/workbench_state.mjs +101 -0
  86. package/dist/src/frontend/workspace_panes.js +10272 -0
  87. package/dist/src/frontend.locale.contract.test.js +62 -0
  88. package/dist/src/frontend.runtime.assets.contract.test.js +81 -0
  89. package/dist/src/godot.sidecar.bootstrap.contract.test.js +244 -0
  90. package/dist/src/graph.answer.operator.contract.test.js +72 -0
  91. package/dist/src/index.js +6 -2
  92. package/dist/src/index.knowledge-root.test.js +118 -0
  93. package/dist/src/indexing/IndexLifecycle.js +217 -0
  94. package/dist/src/indexing/IndexLifecycle.test.js +73 -0
  95. package/dist/src/indexing/SegmentBuilder.js +64 -0
  96. package/dist/src/indexing/UnitBuilder.js +48 -0
  97. package/dist/src/indexing/types.js +2 -0
  98. package/dist/src/knowledge.api.contract.test.js +172 -0
  99. package/dist/src/knowledge_projection.contract.test.js +134 -0
  100. package/dist/src/knowledge_projection_store.test.js +200 -0
  101. package/dist/src/learning/AnswerQualityEvaluation.js +153 -0
  102. package/dist/src/learning/AnswerQualityEvaluation.test.js +118 -0
  103. package/dist/src/learning/KnowledgeLearningPlatform.js +11181 -0
  104. package/dist/src/learning/KnowledgeLearningPlatform.persistence.test.js +745 -0
  105. package/dist/src/learning/KnowledgeLearningPlatform.program-f.test.js +99 -0
  106. package/dist/src/learning/KnowledgeLearningPlatform.test.js +3208 -0
  107. package/dist/src/learning/KnowledgeWorkspaceConversationRegression.js +2998 -0
  108. package/dist/src/learning/KnowledgeWorkspaceConversationRegression.test.js +3936 -0
  109. package/dist/src/learning/MeasurementEvidenceConflicts.test.js +78 -0
  110. package/dist/src/learning/PublicAnswerContract.test.js +85 -0
  111. package/dist/src/learning/PublicEvidenceSelection.test.js +94 -0
  112. package/dist/src/learning/PublicMeasurementDisclosure.test.js +54 -0
  113. package/dist/src/learning/agentConversationExecution.js +211 -0
  114. package/dist/src/learning/agentConversationExecution.test.js +209 -0
  115. package/dist/src/learning/agentConversationSerialization.js +266 -0
  116. package/dist/src/learning/agentConversationSerialization.test.js +165 -0
  117. package/dist/src/learning/agentResponseBudget.js +179 -0
  118. package/dist/src/learning/agentResponseBudget.test.js +97 -0
  119. package/dist/src/learning/agentWorkspaceCapabilityContracts.js +65 -0
  120. package/dist/src/learning/answerReleaseReview.js +5260 -0
  121. package/dist/src/learning/answerReleaseReview.test.js +4174 -0
  122. package/dist/src/learning/answerTaskPlan.js +473 -0
  123. package/dist/src/learning/api.js +2 -0
  124. package/dist/src/learning/conversationComposer.js +1721 -0
  125. package/dist/src/learning/conversationComposer.test.js +3220 -0
  126. package/dist/src/learning/domains/ConversationManager.js +53 -0
  127. package/dist/src/learning/domains/KnowledgeIngestor.js +238 -0
  128. package/dist/src/learning/domains/KnowledgeQuerier.js +187 -0
  129. package/dist/src/learning/domains/MasteryEngine.js +387 -0
  130. package/dist/src/learning/domains/MemoryPolicyManager.js +408 -0
  131. package/dist/src/learning/domains/QualityEvaluator.js +307 -0
  132. package/dist/src/learning/domains/TutorRouter.js +313 -0
  133. package/dist/src/learning/domains/index.js +33 -0
  134. package/dist/src/learning/domains/types.js +7 -0
  135. package/dist/src/learning/errors.js +29 -0
  136. package/dist/src/learning/evidenceContextAssembler.js +1368 -0
  137. package/dist/src/learning/evidenceContextAssembler.test.js +6332 -0
  138. package/dist/src/learning/graphAnswerCoverage.js +37 -0
  139. package/dist/src/learning/graphAnswerCoverage.test.js +93 -0
  140. package/dist/src/learning/graphAnswerCoverageCalibration.js +59 -0
  141. package/dist/src/learning/graphAnswerCoverageCalibration.test.js +46 -0
  142. package/dist/src/learning/graphAnswerFacts.js +94 -0
  143. package/dist/src/learning/graphAnswerFacts.test.js +39 -0
  144. package/dist/src/learning/graphAnswerPlan.js +908 -0
  145. package/dist/src/learning/graphAnswerPlan.test.js +907 -0
  146. package/dist/src/learning/graphAnswerQualityCalibration.js +255 -0
  147. package/dist/src/learning/graphAnswerQualityCalibration.test.js +72 -0
  148. package/dist/src/learning/graphAnswerQualityPolicy.js +30 -0
  149. package/dist/src/learning/graphClaimMatcher.js +104 -0
  150. package/dist/src/learning/graphConditionedContext.js +109 -0
  151. package/dist/src/learning/graphConditionedContext.test.js +99 -0
  152. package/dist/src/learning/graphContextAssembler.js +860 -0
  153. package/dist/src/learning/graphContextAssembler.test.js +1033 -0
  154. package/dist/src/learning/graphExpansionPolicy.js +22 -0
  155. package/dist/src/learning/graphExpansionPolicy.test.js +33 -0
  156. package/dist/src/learning/identityMetadata.test.js +26 -0
  157. package/dist/src/learning/index.js +29 -0
  158. package/dist/src/learning/mobileAnswerProjection.js +104 -0
  159. package/dist/src/learning/mobileAnswerProjection.test.js +102 -0
  160. package/dist/src/learning/queryBackend.js +1922 -0
  161. package/dist/src/learning/queryBackend.test.js +976 -0
  162. package/dist/src/learning/ragContextPack.js +356 -0
  163. package/dist/src/learning/ragContextPack.test.js +311 -0
  164. package/dist/src/learning/ragEvidenceQuality.js +96 -0
  165. package/dist/src/learning/ragEvidenceQuality.test.js +29 -0
  166. package/dist/src/learning/ragPublicText.js +101 -0
  167. package/dist/src/learning/ragPublicText.test.js +57 -0
  168. package/dist/src/learning/ragSufficiencyJudge.js +171 -0
  169. package/dist/src/learning/ragSufficiencyJudge.test.js +177 -0
  170. package/dist/src/learning/ragSufficiencyProviderJudge.js +217 -0
  171. package/dist/src/learning/ragSufficiencyProviderJudge.test.js +207 -0
  172. package/dist/src/learning/requestNormalization.js +304 -0
  173. package/dist/src/learning/requestNormalization.test.js +101 -0
  174. package/dist/src/learning/runtimeCapability.js +4677 -0
  175. package/dist/src/learning/runtimeCapability.test.js +3635 -0
  176. package/dist/src/learning/store.js +1344 -0
  177. package/dist/src/learning/store.test.js +1425 -0
  178. package/dist/src/learning/tutorAdapter.js +2 -0
  179. package/dist/src/learning/types.js +2 -0
  180. package/dist/src/learning/vectorAccelerationAdapter.js +958 -0
  181. package/dist/src/learning/vectorAccelerationAdapter.test.js +412 -0
  182. package/dist/src/learning/workspaceHydration.js +168 -0
  183. package/dist/src/learning/workspaceHydration.test.js +30 -0
  184. package/dist/src/lfs.asset.policy.contract.test.js +153 -0
  185. package/dist/src/license.policy.contract.test.js +71 -0
  186. package/dist/src/markdown/MarkdownGateway.js +4 -0
  187. package/dist/src/markdown/MarkdownGateway.test.js +59 -0
  188. package/dist/src/memory/MemoryGovernance.js +74 -0
  189. package/dist/src/memory/MemoryGovernance.test.js +46 -0
  190. package/dist/src/memory/types.js +2 -0
  191. package/dist/src/mermaid.frontend.guard.contract.test.js +77 -0
  192. package/dist/src/middleware/SseResponseWriter.js +122 -0
  193. package/dist/src/middleware/SseResponseWriter.test.js +54 -0
  194. package/dist/src/middleware/auth.js +38 -0
  195. package/dist/src/middleware/auth.test.js +33 -0
  196. package/dist/src/middleware/body-parser.js +45 -0
  197. package/dist/src/middleware/cors.js +44 -0
  198. package/dist/src/middleware/index.js +22 -0
  199. package/dist/src/middleware/request-trace.js +96 -0
  200. package/dist/src/mobile.android.evidence.contract.test.js +146 -0
  201. package/dist/src/mobile.android.signing.contract.test.js +66 -0
  202. package/dist/src/mobile.artifact.contract.test.js +144 -0
  203. package/dist/src/mobile.budget.contract.test.js +90 -0
  204. package/dist/src/mobile.canonical-id.readiness.test.js +54 -0
  205. package/dist/src/mobile.graph.parity.contract.test.js +207 -0
  206. package/dist/src/mobile.identity.contract.test.js +66 -0
  207. package/dist/src/mobile.identity.corpus.manifest.test.js +72 -0
  208. package/dist/src/mobile.identity.corpus.test.js +40 -0
  209. package/dist/src/mobile.native.recovery.contract.test.js +64 -0
  210. package/dist/src/mobile.pipeline.test.js +11 -1
  211. package/dist/src/mobile.profile.contract.test.js +225 -0
  212. package/dist/src/mobile.semantic.parity.test.js +92 -0
  213. package/dist/src/mobile_exact_analyzer.test.js +113 -0
  214. package/dist/src/notemd/AppConfigToml.js +6 -4
  215. package/dist/src/notemd/ContentGenerator.js +4 -9
  216. package/dist/src/notemd/FileProcessor.js +4 -9
  217. package/dist/src/notemd/MermaidProcessor.js +400 -50
  218. package/dist/src/notemd/NotemdService.js +506 -26
  219. package/dist/src/notemd/PromptManager.js +15 -0
  220. package/dist/src/notemd/Translator.js +4 -9
  221. package/dist/src/notemd/cli/commands.js +357 -0
  222. package/dist/src/notemd/cli/dispatcher.js +225 -0
  223. package/dist/src/notemd/cli/index.js +169 -0
  224. package/dist/src/notemd/cli/parser.js +68 -0
  225. package/dist/src/notemd/cli/types.js +2 -0
  226. package/dist/src/notemd/constants.js +43 -0
  227. package/dist/src/notemd/diagram/diagramGenerationService.js +78 -0
  228. package/dist/src/notemd/diagram/diagramSpec.js +79 -0
  229. package/dist/src/notemd/diagram/diagramSpecResponseParser.js +131 -0
  230. package/dist/src/notemd/diagram/intent.js +95 -0
  231. package/dist/src/notemd/diagram/planner.js +71 -0
  232. package/dist/src/notemd/diagram/prompts/diagramSpecPrompt.js +42 -0
  233. package/dist/src/notemd/diagram/types.js +18 -0
  234. package/dist/src/notemd/index.js +26 -0
  235. package/dist/src/notemd/operations/capabilityManifest.js +23 -0
  236. package/dist/src/notemd/operations/cliContracts.js +17 -0
  237. package/dist/src/notemd/operations/configProfileCommands.js +85 -0
  238. package/dist/src/notemd/operations/registry.contract.test.js +95 -0
  239. package/dist/src/notemd/operations/registry.js +991 -0
  240. package/dist/src/notemd/operations/types.js +2 -0
  241. package/dist/src/notemd/progressReporter.js +9 -0
  242. package/dist/src/notemd/providerDiagnostics.js +220 -0
  243. package/dist/src/notemd/providerProfiles.js +42 -0
  244. package/dist/src/notemd/providerTemplates.js +231 -0
  245. package/dist/src/notemd/search/DuckDuckGoProvider.js +39 -0
  246. package/dist/src/notemd/search/SearchManager.js +13 -0
  247. package/dist/src/notemd/search/SearchProvider.js +2 -0
  248. package/dist/src/notemd/search/TavilyProvider.js +44 -0
  249. package/dist/src/notemd.agent.manifest.test.js +85 -0
  250. package/dist/src/notemd.api.contract.test.js +14 -1
  251. package/dist/src/notemd.app_config_toml.test.js +2 -1
  252. package/dist/src/notemd.batch.workflow.test.js +117 -0
  253. package/dist/src/notemd.cli.e2e.test.js +136 -0
  254. package/dist/src/notemd.core.test.js +51 -0
  255. package/dist/src/notemd.diagram.pipeline.test.js +233 -0
  256. package/dist/src/notemd.providerTemplates.test.js +34 -0
  257. package/dist/src/notemd.server.integration.test.js +262 -39
  258. package/dist/src/notemd.workflow.pipeline.test.js +162 -0
  259. package/dist/src/pathbridge.handshake.contract.test.js +45 -2
  260. package/dist/src/pathbridge.host-adapter.contract.test.js +133 -0
  261. package/dist/src/pathcore.bundle.contract.test.js +8 -0
  262. package/dist/src/pathmode.background.contract.test.js +69 -0
  263. package/dist/src/pathmode.settings.api.contract.test.js +9 -0
  264. package/dist/src/pkg.sidecar.contract.test.js +9 -3
  265. package/dist/src/platform/ExportProfile.js +86 -0
  266. package/dist/src/platform/MobileBudget.js +11 -0
  267. package/dist/src/platform/PlatformCapabilities.js +59 -0
  268. package/dist/src/platform/PlatformCapabilities.test.js +36 -0
  269. package/dist/src/platform/RenderMaterializer.js +33 -0
  270. package/dist/src/platform/RenderMaterializer.test.js +32 -0
  271. package/dist/src/query_backend.external_http.integration.test.js +410 -0
  272. package/dist/src/reader_renderer.js +404 -3
  273. package/dist/src/reader_renderer.test.js +87 -0
  274. package/dist/src/release.godot.mirror.contract.test.js +97 -0
  275. package/dist/src/resources/ResourceRegistry.js +263 -0
  276. package/dist/src/resources/ResourceRegistry.test.js +97 -0
  277. package/dist/src/resources/types.js +2 -0
  278. package/dist/src/routes/agentWorkspaceDiagnostics.js +173 -0
  279. package/dist/src/routes/index.js +19 -0
  280. package/dist/src/routes/knowledge.js +981 -0
  281. package/dist/src/routes/knowledgePayload.js +185 -0
  282. package/dist/src/routes/knowledgePayload.test.js +53 -0
  283. package/dist/src/routes/markdown.js +295 -0
  284. package/dist/src/routes/notemd.js +1321 -0
  285. package/dist/src/routes/registry.contract.test.js +133 -0
  286. package/dist/src/routes/registry.shadow.contract.test.js +22 -0
  287. package/dist/src/routes/render.js +248 -0
  288. package/dist/src/routes/runtimeRunbookRouteOps.js +149 -0
  289. package/dist/src/routes/runtimeRunbookRouteOps.test.js +194 -0
  290. package/dist/src/routes/settings.js +6 -0
  291. package/dist/src/routes/staticFiles.js +94 -0
  292. package/dist/src/routes/types.js +2 -0
  293. package/dist/src/runtime.capabilities.test.js +18 -2
  294. package/dist/src/runtime.transport.adapter.contract.test.js +81 -0
  295. package/dist/src/server.js +10342 -1325
  296. package/dist/src/server.migration.test.js +584 -10
  297. package/dist/src/server.port.fallback.contract.test.js +63 -0
  298. package/dist/src/session/SessionStateStore.js +81 -0
  299. package/dist/src/session/SessionStateStore.test.js +58 -0
  300. package/dist/src/session/types.js +2 -0
  301. package/dist/src/settings.runtime.contract.test.js +50 -0
  302. package/dist/src/shared/types.contract.test.js +107 -0
  303. package/dist/src/shared/types.js +22 -0
  304. package/dist/src/sidecar.build.lock.contract.test.js +201 -0
  305. package/dist/src/sidecar.freshness.contract.test.js +184 -0
  306. package/dist/src/sidecar.replacement.boundary.contract.test.js +131 -0
  307. package/dist/src/sidecar.supply.readiness.contract.test.js +155 -0
  308. package/dist/src/simulation.worker.offline.test.js +104 -0
  309. package/dist/src/source_manager.loadflow.test.js +46 -0
  310. package/dist/src/startup.layout.snapshot.contract.test.js +57 -0
  311. package/dist/src/storage.provider.capacitor.content.contract.test.js +4 -1
  312. package/dist/src/storage.provider.contract.test.js +152 -1
  313. package/dist/src/tauri.frontend.build.contract.test.js +68 -0
  314. package/dist/src/tauri.sidecar.cleanup.contract.test.js +21 -0
  315. package/dist/src/tauri.window.evidence.execution.test.js +68 -0
  316. package/dist/src/utils/RuntimePaths.js +10 -13
  317. package/dist/src/utils/RuntimePaths.test.js +27 -0
  318. package/dist/src/utils/platform.js +153 -0
  319. package/dist/src/windows.installer.build.test.js +109 -0
  320. package/dist/src/windows.installer.payload.test.js +76 -0
  321. package/dist/src/windows.installer.runtime.test.js +69 -0
  322. package/dist/src/workflows/WorkflowArtifactStore.js +96 -0
  323. package/dist/src/workflows/WorkflowArtifactStore.test.js +80 -0
  324. package/dist/src/workflows/types.js +2 -0
  325. package/dist/src/workspace/WorkspaceRegistry.js +135 -0
  326. package/dist/src/workspace/WorkspaceRegistry.test.js +29 -0
  327. package/dist/src/workspace/types.js +2 -0
  328. package/package.json +80 -15
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta
7
7
  http-equiv="Content-Security-Policy"
8
- content="default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' data: https://fonts.gstatic.com; img-src 'self' data: blob:; connect-src 'self' http://127.0.0.1:* http://localhost:* ws://127.0.0.1:* ws://localhost:* tauri://localhost http://tauri.localhost https://tauri.localhost; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; form-action 'self';"
8
+ content="default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' data: https://fonts.gstatic.com; img-src 'self' data: blob:; connect-src 'self' ipc: http://127.0.0.1:* http://localhost:* http://ipc.localhost https://ipc.localhost ws://127.0.0.1:* ws://localhost:* tauri://localhost http://tauri.localhost https://tauri.localhost; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self';"
9
9
  />
10
10
  <title>NoteConnection Knowledge Graph</title>
11
11
  <link
@@ -123,6 +123,20 @@
123
123
  >
124
124
  NoteMD
125
125
  </button>
126
+ <button
127
+ id="btn-open-agent-workspace"
128
+ style="
129
+ background: #744210;
130
+ color: #fff8e1;
131
+ border: 1px solid #a16207;
132
+ padding: 2px 8px;
133
+ cursor: pointer;
134
+ "
135
+ data-i18n="agentWorkspace.actions.openWorkspace"
136
+ title="Open Knowledge Workspace"
137
+ >
138
+ Knowledge Workspace
139
+ </button>
126
140
  <span
127
141
  id="kb-current-path"
128
142
  style="
@@ -140,6 +154,155 @@
140
154
  ></span>
141
155
  </div>
142
156
 
157
+ <div id="agent-workspace-backdrop" class="agent-workspace-backdrop" hidden></div>
158
+ <aside
159
+ id="agent-workspace-drawer"
160
+ class="agent-workspace-drawer"
161
+ aria-hidden="true"
162
+ data-open="false"
163
+ >
164
+ <div class="agent-workspace-drawer-frame">
165
+ <div class="agent-workspace-drawer-toolbar">
166
+ <div class="agent-workspace-drawer-heading">
167
+ <span class="agent-workspace-drawer-title" data-i18n="agentWorkspace.title">Knowledge Workspace</span>
168
+ <span class="agent-workspace-drawer-subtitle" data-i18n="agentWorkspace.subtitle">Grounded conversation, knowledge search, and guided learning</span>
169
+ </div>
170
+ <button
171
+ id="btn-close-agent-workspace"
172
+ type="button"
173
+ class="agent-workspace-drawer-close"
174
+ data-i18n="agentWorkspace.actions.closeWorkspace"
175
+ >
176
+ Close
177
+ </button>
178
+ </div>
179
+
180
+ <div id="agent-workspace-shell" class="agent-workspace-shell">
181
+ <section id="agent-chat-pane" class="agent-chat-pane">
182
+ <div class="agent-pane-header">
183
+ <h3 data-i18n="agentWorkspace.conversationTitle">Grounded Conversation</h3>
184
+ <span class="agent-pane-subtitle" data-i18n="agentWorkspace.conversationSubtitle">Scoped knowledge, citations, and guided learning actions</span>
185
+ </div>
186
+ <div class="agent-scope-control agent-scope-control--workspace">
187
+ <label for="agent-workspace-scope-select" data-i18n="agentWorkspace.scope.label">Knowledge Scope</label>
188
+ <select id="agent-workspace-scope-select" aria-describedby="agent-workspace-scope-summary"></select>
189
+ <div
190
+ id="agent-workspace-scope-summary"
191
+ class="agent-scope-summary"
192
+ data-i18n="agentWorkspace.scope.summaryAll"
193
+ >All folders</div>
194
+ </div>
195
+ <div class="agent-answer-language-control">
196
+ <label for="agent-workspace-answer-language-select" data-i18n="agentWorkspace.answerLanguage.label">Answer language</label>
197
+ <select id="agent-workspace-answer-language-select" aria-describedby="agent-workspace-answer-language-summary">
198
+ <option value="en" data-i18n="agentWorkspace.answerLanguage.english">English</option>
199
+ <option value="zh" data-i18n="agentWorkspace.answerLanguage.chinese">中文</option>
200
+ </select>
201
+ <div id="agent-workspace-answer-language-summary" class="agent-answer-language-summary" data-i18n="agentWorkspace.answerLanguage.summary">Matches software language</div>
202
+ </div>
203
+ <div class="agent-response-mode-control">
204
+ <label for="agent-workspace-response-mode-select" data-i18n="agentWorkspace.responseMode.label">Answer detail</label>
205
+ <select id="agent-workspace-response-mode-select" aria-describedby="agent-workspace-response-mode-summary">
206
+ <option value="slim" data-i18n="agentWorkspace.responseMode.slim">Slim</option>
207
+ <option value="full" data-i18n="agentWorkspace.responseMode.full">Full report</option>
208
+ </select>
209
+ <div id="agent-workspace-response-mode-summary" class="agent-response-mode-summary" data-i18n="agentWorkspace.responseMode.summary">Short grounded answer</div>
210
+ </div>
211
+ <div class="agent-response-budget-control" data-agent-desktop-only="true">
212
+ <label for="agent-workspace-response-budget-select" data-i18n="agentWorkspace.responseBudget.label">Full report budget</label>
213
+ <select id="agent-workspace-response-budget-select" aria-describedby="agent-workspace-response-budget-summary">
214
+ <option value="adaptive" data-i18n="agentWorkspace.responseBudget.adaptive">Adaptive</option>
215
+ <option value="unbounded" data-i18n="agentWorkspace.responseBudget.unbounded">No product cap</option>
216
+ </select>
217
+ <div id="agent-workspace-response-budget-summary" class="agent-response-budget-summary" data-i18n="agentWorkspace.responseBudget.summary">Host-adaptive report budget</div>
218
+ </div>
219
+ <div class="agent-pane-field">
220
+ <label for="agent-workspace-user-id" data-i18n="agentWorkspace.userId">Learner ID</label>
221
+ <input id="agent-workspace-user-id" type="text" value="path_user_default" />
222
+ </div>
223
+ <div id="agent-workspace-chat-messages" class="agent-chat-messages"></div>
224
+ <div id="agent-workspace-knowledge-points" class="agent-knowledge-points">
225
+ <div class="agent-knowledge-empty" data-i18n="agentWorkspace.knowledge.emptyInitial">No scoped knowledge matches yet.</div>
226
+ </div>
227
+ <div class="agent-pane-field agent-chat-input-field">
228
+ <label for="agent-workspace-chat-input" data-i18n="agentWorkspace.inputLabel">Ask the scoped knowledge corpus</label>
229
+ <textarea
230
+ id="agent-workspace-chat-input"
231
+ rows="3"
232
+ placeholder="Ask about a concept, citation, prerequisite, or study step..."
233
+ data-i18n-placeholder="agentWorkspace.inputPlaceholder"
234
+ ></textarea>
235
+ </div>
236
+ <div class="agent-pane-actions">
237
+ <button id="btn-agent-workspace-send" type="button" data-i18n="agentWorkspace.actions.send">Send</button>
238
+ </div>
239
+ <div
240
+ id="agent-workspace-api-status"
241
+ class="agent-api-status"
242
+ data-api-state="idle"
243
+ aria-live="polite"
244
+ ></div>
245
+ </section>
246
+
247
+ <div id="agent-side-work-area" class="agent-side-work-area">
248
+ <section
249
+ id="agent-graph-focus-pane"
250
+ class="agent-workspace-pane"
251
+ data-open="false"
252
+ data-fullscreen="false"
253
+ >
254
+ <div class="agent-workspace-pane-header">
255
+ <h4 data-i18n="agentWorkspace.graphFocus.title">Knowledge Focus</h4>
256
+ <div class="agent-pane-controls">
257
+ <button id="btn-agent-graph-focus-fullscreen" type="button" data-i18n="agentWorkspace.actions.fullscreen">Fullscreen</button>
258
+ <button id="btn-agent-graph-focus-close" class="agent-pane-close-button" type="button" aria-label="Close pane">&times;</button>
259
+ </div>
260
+ </div>
261
+ <div id="agent-graph-focus-body" class="agent-workspace-pane-body">
262
+ <div class="agent-pane-empty" data-i18n="agentWorkspace.graphFocus.emptyIdle">Graph focus pane is idle.</div>
263
+ </div>
264
+ </section>
265
+
266
+ <section
267
+ id="agent-evidence-pane"
268
+ class="agent-workspace-pane"
269
+ data-open="false"
270
+ data-fullscreen="false"
271
+ >
272
+ <div class="agent-workspace-pane-header">
273
+ <h4 data-i18n="agentWorkspace.evidence.title">Evidence Inspector</h4>
274
+ <div class="agent-pane-controls">
275
+ <button id="btn-agent-evidence-fullscreen" type="button" data-i18n="agentWorkspace.actions.fullscreen">Fullscreen</button>
276
+ <button id="btn-agent-evidence-close" class="agent-pane-close-button" type="button" aria-label="Close pane">&times;</button>
277
+ </div>
278
+ </div>
279
+ <div id="agent-evidence-body" class="agent-workspace-pane-body">
280
+ <div class="agent-pane-empty" data-i18n="agentWorkspace.evidence.emptyIdle">Evidence pane is idle.</div>
281
+ </div>
282
+ </section>
283
+
284
+ <section
285
+ id="agent-learning-path-pane"
286
+ class="agent-workspace-pane"
287
+ data-open="false"
288
+ data-fullscreen="false"
289
+ >
290
+ <div class="agent-workspace-pane-header">
291
+ <h4 data-i18n="agentWorkspace.learningPath.title">Guided Learning</h4>
292
+ <div class="agent-pane-controls">
293
+ <button id="btn-agent-learning-path-fullscreen" type="button" data-i18n="agentWorkspace.actions.fullscreen">Fullscreen</button>
294
+ <button id="btn-agent-learning-path-close" class="agent-pane-close-button" type="button" aria-label="Close pane">&times;</button>
295
+ </div>
296
+ </div>
297
+ <div id="agent-learning-path-body" class="agent-workspace-pane-body">
298
+ <div class="agent-pane-empty" data-i18n="agentWorkspace.learningPath.emptyIdle">Learning path pane is idle.</div>
299
+ </div>
300
+ </section>
301
+ </div>
302
+ </div>
303
+ </div>
304
+ </aside>
305
+
143
306
  <div id="controls">
144
307
  <h3
145
308
  style="
@@ -828,304 +991,420 @@
828
991
  </button>
829
992
  </div>
830
993
  </div>
831
- <div id="reading-body" class="reading-body locked">
832
- <!-- Content injected here -->
994
+ <div class="reading-layout">
995
+ <div class="reading-main">
996
+ <div id="reading-diagnostics" class="reading-diagnostics">
997
+ <span class="reading-diagnostics-item" data-i18n="reader_loading">Reader loading...</span>
998
+ </div>
999
+ <div id="reading-body" class="reading-body locked">
1000
+ <!-- Content injected here -->
1001
+ </div>
1002
+ </div>
1003
+ <aside id="reading-outline" class="reading-outline" aria-label="Document outline">
1004
+ <div class="reading-outline-header" data-i18n="reader_outline_title">Outline</div>
1005
+ <div id="reading-outline-body" class="reading-outline-body">
1006
+ <div class="reading-outline-empty" data-i18n="reader_outline_empty">No headings available.</div>
1007
+ </div>
1008
+ </aside>
833
1009
  </div>
834
1010
  </div>
835
1011
  </div>
836
1012
 
837
1013
  <!-- Settings Modal -->
838
- <div id="settings-modal" class="modal-overlay" style="display: none">
839
- <div class="modal-content">
1014
+ <div
1015
+ id="settings-modal"
1016
+ class="modal-overlay settings-modal-overlay"
1017
+ style="display: none"
1018
+ >
1019
+ <div class="modal-content modal-content-settings">
840
1020
  <div class="modal-header">
841
- <h2 data-i18n="settings_title">Settings</h2>
842
- <button class="modal-close">&times;</button>
843
- </div>
844
- <div class="modal-body">
845
- <div class="settings-group">
846
- <h3 data-i18n="grp_general">General</h3>
847
- <div class="setting-item">
848
- <label data-i18n="lbl_language">Language</label>
849
- <select
850
- id="set-language"
851
- style="
852
- background: #444;
853
- color: white;
854
- border: 1px solid #555;
855
- padding: 2px;
856
- "
857
- >
858
- <option value="en">English</option>
859
- <option value="zh">中文</option>
860
- </select>
861
- </div>
862
- </div>
863
-
864
- <div class="settings-group">
865
- <h3 data-i18n="grp_physics">Physics</h3>
866
- <div class="setting-item">
867
- <label data-i18n="lbl_repulsion">Repulsion Strength</label>
868
- <input
869
- type="range"
870
- id="set-charge"
871
- min="-1000"
872
- max="-50"
873
- step="50"
874
- />
875
- <span class="value-display" id="val-charge"></span>
876
- </div>
877
- <div class="setting-item">
878
- <label data-i18n="lbl_distance">Link Distance</label>
879
- <input
880
- type="range"
881
- id="set-distance"
882
- min="20"
883
- max="900"
884
- step="10"
885
- />
886
- <span class="value-display" id="val-distance"></span>
887
- </div>
888
- <div class="setting-item">
889
- <label data-i18n="lbl_collision">Collision Radius</label>
890
- <input
891
- type="range"
892
- id="set-collision"
893
- min="5"
894
- max="100"
895
- step="5"
896
- />
897
- <span class="value-display" id="val-collision"></span>
898
- </div>
1021
+ <div class="modal-header-copy">
1022
+ <h2 data-i18n="settings_title">Visualization Settings</h2>
1023
+ <p class="settings-modal-subtitle" data-i18n="settings_subtitle">
1024
+ Keep graph, reading, and performance controls compact. Agent
1025
+ provider setup lives on its own page.
1026
+ </p>
899
1027
  </div>
900
-
901
- <div class="settings-group">
902
- <div class="setting-item">
903
- <label
904
- ><span data-i18n="lbl_inbound_count"
905
- >Inbound Count:</span
906
- ></label
907
- >
908
- <select
909
- id="set-degree-mode"
910
- style="
911
- background: #444;
912
- color: white;
913
- border: 1px solid #555;
914
- padding: 2px;
915
- "
916
- >
917
- <option value="visible" data-i18n="opt_visible">
918
- Visible Nodes (Default)
919
- </option>
920
- <option value="total" data-i18n="opt_total">
921
- Total Statistical
922
- </option>
923
- </select>
924
- </div>
925
-
926
- <h3 data-i18n="grp_performance">Performance</h3>
927
- <div class="setting-item">
928
- <label data-i18n="lbl_max_workers">Max Workers (Memory)</label>
929
- <div style="display: flex; gap: 10px; align-items: center">
930
- <input
931
- type="range"
932
- id="set-workers-slider"
933
- min="1"
934
- max="32"
935
- value="4"
936
- style="flex: 1"
937
- />
938
- <input
939
- type="number"
940
- id="set-workers-input"
941
- min="1"
942
- max="128"
943
- value="4"
944
- style="
945
- width: 50px;
946
- background: #333;
947
- color: white;
948
- border: 1px solid #555;
949
- "
950
- />
951
- </div>
952
- <div
953
- style="font-size: 0.75rem; color: #888; margin-top: 2px"
954
- data-i18n="desc_workers"
955
- >
956
- Lower this if Node.js runs out of memory.
1028
+ <button class="modal-close" data-settings-close="main">&times;</button>
1029
+ </div>
1030
+ <div class="modal-body settings-modal-body">
1031
+ <div class="settings-page-grid">
1032
+ <section class="settings-card">
1033
+ <div class="settings-group">
1034
+ <h3 data-i18n="grp_general">General</h3>
1035
+ <div class="setting-item">
1036
+ <label data-i18n="lbl_language">Language</label>
1037
+ <select id="set-language" class="settings-select">
1038
+ <option value="en">English</option>
1039
+ <option value="zh">中文</option>
1040
+ </select>
1041
+ </div>
957
1042
  </div>
958
- </div>
1043
+ </section>
959
1044
 
960
- <div class="setting-item">
961
- <label
962
- style="display: flex; align-items: center; cursor: pointer"
963
- >
964
- <input type="checkbox" id="set-gpu" checked />
965
- <span style="margin-left: 10px" data-i18n="lbl_gpu"
966
- >Enable GPU Acceleration</span
967
- >
968
- </label>
969
- <div
970
- style="font-size: 0.75rem; color: #888; margin-top: 2px"
971
- data-i18n="desc_gpu"
972
- >
973
- Use GPU for similarity calculation (Requires page reload).
1045
+ <section class="settings-card">
1046
+ <div class="settings-group">
1047
+ <h3 data-i18n="grp_visuals">Visuals</h3>
1048
+ <div class="setting-item">
1049
+ <label data-i18n="lbl_opacity">Edge Opacity</label>
1050
+ <input
1051
+ type="range"
1052
+ id="set-opacity"
1053
+ min="0.1"
1054
+ max="1.0"
1055
+ step="0.1"
1056
+ />
1057
+ <span class="value-display" id="val-opacity"></span>
1058
+ </div>
1059
+ <div class="setting-item">
1060
+ <label><span data-i18n="lbl_inbound_count">Inbound Count:</span></label>
1061
+ <select id="set-degree-mode" class="settings-select">
1062
+ <option value="visible" data-i18n="opt_visible">
1063
+ Visible Nodes (Default)
1064
+ </option>
1065
+ <option value="total" data-i18n="opt_total">
1066
+ Total Statistical
1067
+ </option>
1068
+ </select>
1069
+ </div>
974
1070
  </div>
975
- </div>
1071
+ </section>
976
1072
 
977
- <div class="setting-item">
978
- <label
979
- style="display: flex; align-items: center; cursor: pointer"
980
- >
981
- <input type="checkbox" id="set-memory-saving" />
982
- <span style="margin-left: 10px" data-i18n="lbl_memory_saving"
983
- >Large File Memory Saving Strategy</span
984
- >
985
- </label>
986
- <div
987
- style="font-size: 0.75rem; color: #888; margin-top: 2px"
988
- data-i18n="desc_memory_saving"
989
- >
990
- Use lower precision strategies to prevent OOM on large files.
1073
+ <section class="settings-card">
1074
+ <div class="settings-group">
1075
+ <h3 data-i18n="grp_physics">Physics</h3>
1076
+ <div class="setting-item">
1077
+ <label data-i18n="lbl_repulsion">Repulsion Strength</label>
1078
+ <input
1079
+ type="range"
1080
+ id="set-charge"
1081
+ min="-1000"
1082
+ max="-50"
1083
+ step="50"
1084
+ />
1085
+ <span class="value-display" id="val-charge"></span>
1086
+ </div>
1087
+ <div class="setting-item">
1088
+ <label data-i18n="lbl_distance">Link Distance</label>
1089
+ <input
1090
+ type="range"
1091
+ id="set-distance"
1092
+ min="20"
1093
+ max="900"
1094
+ step="10"
1095
+ />
1096
+ <span class="value-display" id="val-distance"></span>
1097
+ </div>
1098
+ <div class="setting-item">
1099
+ <label data-i18n="lbl_collision">Collision Radius</label>
1100
+ <input
1101
+ type="range"
1102
+ id="set-collision"
1103
+ min="5"
1104
+ max="100"
1105
+ step="5"
1106
+ />
1107
+ <span class="value-display" id="val-collision"></span>
1108
+ </div>
991
1109
  </div>
992
- </div>
1110
+ </section>
993
1111
 
994
- <div class="setting-item">
995
- <label
996
- style="display: flex; align-items: center; cursor: pointer"
997
- >
998
- <input type="checkbox" id="set-compact-mode" />
999
- <span style="margin-left: 10px" data-i18n="lbl_compact_mode"
1000
- >Compact Mode (Hide Edges)</span
1001
- >
1002
- </label>
1003
- <div
1004
- style="font-size: 0.75rem; color: #888; margin-top: 2px"
1005
- data-i18n="desc_compact_mode"
1006
- >
1007
- Don't load/render edges by default to improve performance for
1008
- >5k nodes.
1112
+ <section class="settings-card">
1113
+ <div class="settings-group">
1114
+ <h3 data-i18n="grp_performance">Performance</h3>
1115
+ <div class="setting-item setting-item-stack">
1116
+ <label data-i18n="lbl_max_workers">Max Workers (Memory)</label>
1117
+ <div class="settings-inline-row">
1118
+ <input
1119
+ type="range"
1120
+ id="set-workers-slider"
1121
+ min="1"
1122
+ max="32"
1123
+ value="4"
1124
+ style="flex: 1"
1125
+ />
1126
+ <input
1127
+ type="number"
1128
+ id="set-workers-input"
1129
+ min="1"
1130
+ max="128"
1131
+ value="4"
1132
+ class="settings-number"
1133
+ />
1134
+ </div>
1135
+ <div class="settings-helper-block" data-i18n="desc_workers">
1136
+ Lower this if Node.js runs out of memory.
1137
+ </div>
1138
+ </div>
1139
+
1140
+ <div class="setting-item setting-item-stack">
1141
+ <label class="settings-toggle">
1142
+ <input type="checkbox" id="set-gpu" checked />
1143
+ <span data-i18n="lbl_gpu">Enable GPU Acceleration</span>
1144
+ </label>
1145
+ <div class="settings-helper-block" data-i18n="desc_gpu">
1146
+ Use GPU for similarity calculation (Requires page reload).
1147
+ </div>
1148
+ </div>
1149
+
1150
+ <div class="setting-item setting-item-stack">
1151
+ <label class="settings-toggle">
1152
+ <input type="checkbox" id="set-memory-saving" />
1153
+ <span data-i18n="lbl_memory_saving">Large File Memory Saving Strategy</span>
1154
+ </label>
1155
+ <div class="settings-helper-block" data-i18n="desc_memory_saving">
1156
+ Use lower precision strategies to prevent OOM on large files.
1157
+ </div>
1158
+ </div>
1159
+
1160
+ <div class="setting-item setting-item-stack">
1161
+ <label class="settings-toggle">
1162
+ <input type="checkbox" id="set-compact-mode" />
1163
+ <span data-i18n="lbl_compact_mode">Compact Mode (Hide Edges)</span>
1164
+ </label>
1165
+ <div class="settings-helper-block" data-i18n="desc_compact_mode">
1166
+ Don't load/render edges by default to improve performance for >5k nodes.
1167
+ </div>
1168
+ </div>
1169
+
1170
+ <div class="setting-item setting-item-stack">
1171
+ <label class="settings-toggle">
1172
+ <input type="checkbox" id="set-static-mode" />
1173
+ <span data-i18n="lbl_static_mode">Static Mode</span>
1174
+ </label>
1175
+ <div class="settings-helper-block" data-i18n="desc_static_mode">
1176
+ Stop simulation after 2 seconds. Recommended for large graphs.
1177
+ </div>
1178
+ </div>
1179
+
1180
+ <div class="setting-item setting-item-stack">
1181
+ <label class="settings-toggle">
1182
+ <input type="checkbox" id="set-gpu-rendering" />
1183
+ <span data-i18n="lbl_gpu_rendering">GPU Optimised Rendering</span>
1184
+ </label>
1185
+ <div class="settings-helper-block" data-i18n="desc_gpu_rendering">
1186
+ Enable AMDGPU acceleration for loading and positioning.
1187
+ </div>
1188
+ </div>
1189
+
1190
+ <div class="setting-item setting-item-stack">
1191
+ <label class="settings-toggle">
1192
+ <input type="checkbox" id="set-deep-debug" />
1193
+ <span data-i18n="lbl_deep_debug">Developer Mode</span>
1194
+ </label>
1195
+ <div class="settings-helper-block" data-i18n="desc_deep_debug">
1196
+ Show backend diagnostics and relation details in advanced workspace panes.
1197
+ </div>
1198
+ </div>
1009
1199
  </div>
1010
- </div>
1200
+ </section>
1011
1201
 
1012
- <div class="setting-item">
1013
- <label
1014
- style="display: flex; align-items: center; cursor: pointer"
1015
- >
1016
- <input type="checkbox" id="set-static-mode" />
1017
- <span style="margin-left: 10px" data-i18n="lbl_static_mode"
1018
- >Static Mode</span
1019
- >
1020
- </label>
1021
- <div
1022
- style="font-size: 0.75rem; color: #888; margin-top: 2px"
1023
- data-i18n="desc_static_mode"
1024
- >
1025
- Stop simulation after 2 seconds. Recommended for large graphs.
1202
+ <section class="settings-card">
1203
+ <div class="settings-group">
1204
+ <h3 data-i18n="grp_reading">Reading</h3>
1205
+ <div class="setting-item">
1206
+ <label data-i18n="lbl_reading_mode">Open Mode</label>
1207
+ <select id="set-reading-mode" class="settings-select">
1208
+ <option value="window" data-i18n="opt_window">Window</option>
1209
+ <option value="fullscreen" data-i18n="opt_fullscreen">
1210
+ Full Screen
1211
+ </option>
1212
+ </select>
1213
+ </div>
1026
1214
  </div>
1027
- </div>
1028
1215
 
1029
- <div class="setting-item">
1030
- <label
1031
- style="display: flex; align-items: center; cursor: pointer"
1032
- >
1033
- <input type="checkbox" id="set-gpu-rendering" />
1034
- <span style="margin-left: 10px" data-i18n="lbl_gpu_rendering"
1035
- >GPU Optimised Rendering</span
1036
- >
1037
- </label>
1038
- <div
1039
- style="font-size: 0.75rem; color: #888; margin-top: 2px"
1040
- data-i18n="desc_gpu_rendering"
1041
- >
1042
- Enable AMDGPU acceleration for loading and positioning.
1216
+ <div class="settings-group">
1217
+ <h3 data-i18n="grp_path_mode">Path Mode</h3>
1218
+ <div class="setting-item setting-item-stack">
1219
+ <label class="settings-toggle">
1220
+ <input type="checkbox" id="set-retain-history" checked />
1221
+ <span data-i18n="lbl_retain_history">Retain Learning History</span>
1222
+ </label>
1223
+ <div class="settings-helper-block" data-i18n="desc_retain_history">
1224
+ Keep learned nodes state across sessions.
1225
+ </div>
1226
+ </div>
1043
1227
  </div>
1044
- </div>
1228
+ </section>
1045
1229
 
1046
- <div class="setting-item">
1047
- <label
1048
- style="display: flex; align-items: center; cursor: pointer"
1049
- >
1050
- <input type="checkbox" id="set-deep-debug" />
1051
- <span style="margin-left: 10px" data-i18n="lbl_deep_debug"
1052
- >Deep Debug</span
1230
+ <section class="settings-card settings-card-accent">
1231
+ <div class="settings-card-callout">
1232
+ <span class="settings-card-kicker" data-i18n="grp_ai_provider">AI Provider</span>
1233
+ <h3 class="settings-card-title" data-i18n="settings_agent_title">
1234
+ Agent Settings
1235
+ </h3>
1236
+ <p class="settings-card-copy" data-i18n="settings_agent_description">
1237
+ Provider presets, API keys, models, and TOML template actions are isolated on a dedicated page.
1238
+ </p>
1239
+ <button
1240
+ type="button"
1241
+ id="btn-open-agent-settings"
1242
+ class="btn btn-primary"
1243
+ data-i18n="settings_open_agent"
1053
1244
  >
1054
- </label>
1055
- <div
1056
- style="font-size: 0.75rem; color: #888; margin-top: 2px"
1057
- data-i18n="desc_deep_debug"
1058
- >
1059
- Enable detailed logging for debugging.
1245
+ Open Agent Settings
1246
+ </button>
1060
1247
  </div>
1061
- </div>
1248
+ </section>
1062
1249
  </div>
1250
+ </div>
1251
+ <div class="modal-footer modal-footer-settings">
1252
+ <button
1253
+ class="btn btn-secondary"
1254
+ id="btn-reset-settings"
1255
+ data-i18n="btn_reset"
1256
+ >
1257
+ Reset
1258
+ </button>
1259
+ <button
1260
+ class="btn btn-primary modal-close"
1261
+ data-settings-close="main"
1262
+ data-i18n="btn_done"
1263
+ >
1264
+ Done
1265
+ </button>
1266
+ </div>
1267
+ </div>
1268
+ </div>
1063
1269
 
1064
- <div class="settings-group">
1065
- <h3 data-i18n="grp_visuals">Visuals</h3>
1066
- <div class="setting-item">
1067
- <label data-i18n="lbl_opacity">Edge Opacity</label>
1068
- <input
1069
- type="range"
1070
- id="set-opacity"
1071
- min="0.1"
1072
- max="1.0"
1073
- step="0.1"
1074
- />
1075
- <span class="value-display" id="val-opacity"></span>
1270
+ <div
1271
+ id="agent-settings-modal"
1272
+ class="modal-overlay settings-modal-overlay"
1273
+ style="display: none"
1274
+ >
1275
+ <div class="modal-content modal-content-settings modal-content-agent-settings">
1276
+ <div class="modal-header">
1277
+ <div class="modal-header-copy">
1278
+ <div class="settings-breadcrumb-row">
1279
+ <button
1280
+ type="button"
1281
+ id="btn-agent-settings-back"
1282
+ class="btn btn-secondary btn-inline-nav"
1283
+ data-i18n="settings_back_to_general"
1284
+ >
1285
+ Back to Settings
1286
+ </button>
1076
1287
  </div>
1288
+ <h2 data-i18n="settings_agent_title">Agent Settings</h2>
1289
+ <p class="settings-modal-subtitle" data-i18n="settings_agent_subtitle">
1290
+ Provider, model, API key, and TOML template controls for agent workflows.
1291
+ </p>
1077
1292
  </div>
1293
+ <button class="modal-close" data-settings-close="agent">&times;</button>
1294
+ </div>
1295
+ <div class="modal-body settings-modal-body">
1296
+ <div class="settings-page-grid settings-page-grid-single">
1297
+ <section class="settings-card settings-card-wide">
1298
+ <div class="settings-group">
1299
+ <h3 data-i18n="grp_ai_provider">AI Provider</h3>
1300
+ <div class="setting-item setting-item-stack">
1301
+ <label data-i18n="lbl_notemd_provider_template">Preset Template</label>
1302
+ <div class="settings-inline-row">
1303
+ <select id="set-notemd-provider-template" class="settings-select settings-select-grow"></select>
1304
+ <button
1305
+ type="button"
1306
+ id="btn-apply-notemd-provider-template"
1307
+ class="btn btn-secondary"
1308
+ data-i18n="btn_apply_provider_template"
1309
+ >
1310
+ Apply Preset
1311
+ </button>
1312
+ </div>
1313
+ <div
1314
+ id="set-notemd-provider-template-hint"
1315
+ class="settings-helper-block"
1316
+ ></div>
1317
+ </div>
1078
1318
 
1079
- <div class="settings-group">
1080
- <h3 data-i18n="grp_path_mode">Path Mode</h3>
1081
- <div class="setting-item">
1082
- <label
1083
- style="display: flex; align-items: center; cursor: pointer"
1084
- >
1085
- <input type="checkbox" id="set-retain-history" checked />
1086
- <span style="margin-left: 10px" data-i18n="lbl_retain_history"
1087
- >Retain Learning History</span
1319
+ <div class="setting-item setting-item-stack">
1320
+ <label data-i18n="lbl_notemd_active_provider">Active Provider</label>
1321
+ <select id="set-notemd-provider-name" class="settings-select"></select>
1322
+ </div>
1323
+
1324
+ <div class="setting-item setting-item-stack">
1325
+ <label data-i18n="lbl_notemd_provider_base_url">Base URL</label>
1326
+ <input type="text" id="set-notemd-provider-base-url" class="settings-text-input" />
1327
+ </div>
1328
+
1329
+ <div class="setting-item setting-item-stack">
1330
+ <label data-i18n="lbl_notemd_provider_model">Model</label>
1331
+ <input type="text" id="set-notemd-provider-model" class="settings-text-input" />
1332
+ </div>
1333
+
1334
+ <div class="setting-item setting-item-stack">
1335
+ <label data-i18n="lbl_notemd_provider_api_key">API Key</label>
1336
+ <input type="password" id="set-notemd-provider-api-key" class="settings-text-input" />
1337
+ </div>
1338
+
1339
+ <div
1340
+ class="setting-item setting-item-stack"
1341
+ id="set-notemd-provider-api-version-row"
1088
1342
  >
1089
- </label>
1090
- <div
1091
- style="font-size: 0.75rem; color: #888; margin-top: 2px"
1092
- data-i18n="desc_retain_history"
1093
- >
1094
- Keep learned nodes state across sessions.
1095
- </div>
1096
- </div>
1097
- </div>
1343
+ <label data-i18n="lbl_notemd_provider_api_version">API Version</label>
1344
+ <input type="text" id="set-notemd-provider-api-version" class="settings-text-input" />
1345
+ <div
1346
+ id="set-notemd-provider-api-version-hint"
1347
+ class="settings-helper-block"
1348
+ data-i18n="notemd_provider_api_version_optional"
1349
+ >
1350
+ Optional. Leave blank for standard OpenAI-compatible endpoints. This is mainly used by Azure OpenAI.
1351
+ </div>
1352
+ </div>
1098
1353
 
1099
- <div class="settings-group">
1100
- <h3 data-i18n="grp_reading">Reading</h3>
1101
- <div class="setting-item">
1102
- <label data-i18n="lbl_reading_mode">Open Mode</label>
1103
- <select
1104
- id="set-reading-mode"
1105
- style="
1106
- background: #444;
1107
- color: white;
1108
- border: 1px solid #555;
1109
- padding: 2px;
1110
- "
1111
- >
1112
- <option value="window" data-i18n="opt_window">Window</option>
1113
- <option value="fullscreen" data-i18n="opt_fullscreen">
1114
- Full Screen
1115
- </option>
1116
- </select>
1117
- </div>
1354
+ <div class="setting-item setting-item-stack">
1355
+ <div class="settings-inline-row">
1356
+ <button
1357
+ type="button"
1358
+ id="btn-test-notemd-provider"
1359
+ class="btn btn-secondary"
1360
+ data-i18n="btn_test_provider_connection"
1361
+ >
1362
+ Test Connection
1363
+ </button>
1364
+ <button
1365
+ type="button"
1366
+ id="btn-save-notemd-provider"
1367
+ class="btn btn-primary"
1368
+ data-i18n="btn_save_provider_config"
1369
+ >
1370
+ Save Provider
1371
+ </button>
1372
+ <button
1373
+ type="button"
1374
+ id="btn-materialize-notemd-provider-templates"
1375
+ class="btn btn-secondary"
1376
+ data-i18n="btn_write_provider_templates"
1377
+ >
1378
+ Write TOML Templates
1379
+ </button>
1380
+ </div>
1381
+ <div
1382
+ id="set-notemd-provider-status"
1383
+ class="settings-helper-block"
1384
+ ></div>
1385
+ <div
1386
+ id="set-notemd-provider-config-path"
1387
+ class="settings-helper-block settings-helper-code"
1388
+ ></div>
1389
+ </div>
1390
+ </div>
1391
+ </section>
1118
1392
  </div>
1119
1393
  </div>
1120
- <div class="modal-footer">
1394
+ <div class="modal-footer modal-footer-settings">
1121
1395
  <button
1396
+ type="button"
1397
+ id="btn-agent-settings-back-footer"
1122
1398
  class="btn btn-secondary"
1123
- id="btn-reset-settings"
1124
- data-i18n="btn_reset"
1399
+ data-i18n="settings_back_to_general"
1125
1400
  >
1126
- Reset
1401
+ Back to Settings
1127
1402
  </button>
1128
- <button class="btn btn-primary modal-close" data-i18n="btn_done">
1403
+ <button
1404
+ class="btn btn-primary modal-close"
1405
+ data-settings-close="agent"
1406
+ data-i18n="btn_done"
1407
+ >
1129
1408
  Done
1130
1409
  </button>
1131
1410
  </div>
@@ -1263,13 +1542,25 @@
1263
1542
  <script src="tutorial.js"></script>
1264
1543
 
1265
1544
  <!-- Application Scripts -->
1266
- <script src="runtime_bridge.js"></script>
1267
- <script src="storage_provider.js"></script>
1545
+ <script src="runtime_bridge.js"></script>
1546
+ <script src="mobile_budget_runtime.js"></script>
1547
+ <script src="knowledge_projection_contract.js"></script>
1548
+ <script src="knowledge_projection_store.js"></script>
1549
+ <script src="mobile_exact_analyzer.js"></script>
1550
+ <script src="mobile_identity_contract.js"></script>
1551
+ <script src="storage_provider.js"></script>
1268
1552
  <script src="settings.js"></script>
1553
+ <script src="markdown_runtime.js"></script>
1269
1554
  <script src="reader.js"></script>
1270
1555
  <!-- app.js removed for dynamic loading after data.js -->
1271
1556
  <script src="analysis.js"></script>
1272
1557
  <script src="loading.js"></script>
1558
+ <script src="focus_mode_interactions.js"></script>
1559
+ <script src="godot_tree_interactions.js"></script>
1560
+ <script src="godot_future_path_renderer.js"></script>
1561
+ <script src="hosted_future_path_runtime.js"></script>
1562
+ <script src="workspace_panes.js"></script>
1563
+ <script src="agent_workspace.js"></script>
1273
1564
  <script src="source_manager.js"></script>
1274
1565
  <script src="welcome.js"></script>
1275
1566
  <!-- Path Mode Container (Hidden by default) -->
@@ -1345,6 +1636,16 @@
1345
1636
  </button>
1346
1637
  </div>
1347
1638
 
1639
+ <div class="toolbar-group">
1640
+ <button
1641
+ id="btn-toggle-learning-workbench"
1642
+ class="icon-btn"
1643
+ title="Toggle Learning Workbench"
1644
+ >
1645
+ <span>Workbench</span>
1646
+ </button>
1647
+ </div>
1648
+
1348
1649
  <div class="toolbar-group right">
1349
1650
  <button id="btn-exit-path" class="icon-btn" title="Exit Path Mode">
1350
1651
  <i class="fas fa-times"></i> <span data-i18n="btn_exit">Exit</span>
@@ -1396,6 +1697,106 @@
1396
1697
  </div>
1397
1698
  </div>
1398
1699
 
1700
+ <!-- Learning Workbench Sidebar -->
1701
+ <div
1702
+ id="learning-workbench-sidebar"
1703
+ class="path-sidebar workbench-sidebar"
1704
+ style="display: none"
1705
+ >
1706
+ <div class="sidebar-header">
1707
+ <h3>Learning Workbench</h3>
1708
+ <button id="btn-close-learning-workbench" class="close-btn">&times;</button>
1709
+ </div>
1710
+ <div class="sidebar-content workbench-content">
1711
+ <div class="workbench-field">
1712
+ <label for="learning-user-id">Learner ID</label>
1713
+ <input
1714
+ id="learning-user-id"
1715
+ type="text"
1716
+ placeholder="path_user_default"
1717
+ />
1718
+ </div>
1719
+ <div class="workbench-row">
1720
+ <button id="btn-refresh-learning-workbench" class="btn-small">Refresh</button>
1721
+ <button id="btn-ingest-focus-node" class="btn-small">Ingest Focus</button>
1722
+ <button id="btn-run-learning-session" class="btn-small">Run Session</button>
1723
+ <button id="btn-run-retest-session" class="btn-small">Run Retest</button>
1724
+ </div>
1725
+ <div id="learning-workbench-status" class="workbench-status">Ready.</div>
1726
+ <div id="learning-workbench-updated-at" class="workbench-updated-at">Last updated: -</div>
1727
+
1728
+ <div class="workbench-section">
1729
+ <h4>Quality Snapshot</h4>
1730
+ <div class="workbench-row">
1731
+ <button id="btn-set-quality-baseline" class="btn-small" type="button">Set Baseline</button>
1732
+ <button id="btn-evaluate-quality-gates" class="btn-small" type="button">Evaluate Gates</button>
1733
+ </div>
1734
+ <ul id="learning-quality-summary" class="workbench-list">
1735
+ <li class="muted">No quality snapshot yet.</li>
1736
+ </ul>
1737
+ <pre id="learning-quality-gates" class="workbench-feedback">No quality gate evaluation yet.</pre>
1738
+ </div>
1739
+
1740
+ <div class="workbench-section">
1741
+ <h4>Top Misconceptions</h4>
1742
+ <ul id="learning-misconception-list" class="workbench-list">
1743
+ <li class="muted">No recurring misconceptions detected.</li>
1744
+ </ul>
1745
+ </div>
1746
+
1747
+ <div class="workbench-section">
1748
+ <h4>Session Actions</h4>
1749
+ <ul id="learning-session-actions" class="workbench-list">
1750
+ <li class="muted">No session actions yet.</li>
1751
+ </ul>
1752
+ </div>
1753
+
1754
+ <div class="workbench-section">
1755
+ <h4>Tutor Feedback</h4>
1756
+ <pre id="learning-tutor-feedback" class="workbench-feedback">No tutor feedback yet.</pre>
1757
+ </div>
1758
+
1759
+ <div class="workbench-section">
1760
+ <h4>Session Execution</h4>
1761
+ <pre id="learning-session-execution" class="workbench-feedback">No session execution yet.</pre>
1762
+ </div>
1763
+
1764
+ <div class="workbench-section">
1765
+ <h4>Session History</h4>
1766
+ <div class="workbench-row">
1767
+ <label for="learning-history-kind-filter">Kind</label>
1768
+ <select id="learning-history-kind-filter" class="control-select">
1769
+ <option value="all">All</option>
1770
+ <option value="session">Session</option>
1771
+ <option value="retest">Retest</option>
1772
+ <option value="custom">Custom</option>
1773
+ </select>
1774
+ <button id="btn-learning-history-prev" class="btn-small" type="button">Prev</button>
1775
+ <button id="btn-learning-history-next" class="btn-small" type="button">Next</button>
1776
+ <span id="learning-history-page" class="muted">Page 1/1</span>
1777
+ </div>
1778
+ <div class="workbench-row">
1779
+ <label for="learning-history-from-date">From</label>
1780
+ <input id="learning-history-from-date" type="date" class="control-input" />
1781
+ <label for="learning-history-to-date">To</label>
1782
+ <input id="learning-history-to-date" type="date" class="control-input" />
1783
+ <button id="btn-learning-history-apply-range" class="btn-small" type="button">Apply</button>
1784
+ <button id="btn-learning-history-clear-range" class="btn-small" type="button">Clear</button>
1785
+ </div>
1786
+ <div id="learning-session-history-summary" class="workbench-runtime">
1787
+ History summary: unavailable
1788
+ </div>
1789
+ <ul id="learning-session-history" class="workbench-list">
1790
+ <li class="muted">No session history yet.</li>
1791
+ </ul>
1792
+ </div>
1793
+
1794
+ <div id="learning-runtime-summary" class="workbench-runtime">
1795
+ Runtime: unavailable
1796
+ </div>
1797
+ </div>
1798
+ </div>
1799
+
1399
1800
  <!-- Node Selector Modal for Diffusion Mode -->
1400
1801
  <div id="node-select-modal" class="modal-overlay" style="display: none">
1401
1802
  <div class="modal-content" style="max-width: 500px">
@@ -1431,7 +1832,10 @@
1431
1832
 
1432
1833
  <!-- Path Mode Scripts -->
1433
1834
  <script src="libs/path_core.js"></script>
1835
+ <script src="path_modules_bridge.js"></script>
1434
1836
  <script src="path_app.js"></script>
1837
+
1838
+ <!-- ES Module Entry (Vite dev/build) - loads after legacy scripts for backward compat -->
1839
+ <script type="module" src="./main.mjs"></script>
1435
1840
  </body>
1436
1841
  </html>
1437
-