noteconnection 1.8.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 (195) hide show
  1. package/README.md +257 -1803
  2. package/dist/src/agent_workspace.contract.parity.test.js +105 -421
  3. package/dist/src/agent_workspace.frontend.test.js +410 -11
  4. package/dist/src/android.knowledgebase.picker.contract.test.js +102 -0
  5. package/dist/src/appimage.patchelf.test.js +113 -0
  6. package/dist/src/appimage.portability.test.js +156 -0
  7. package/dist/src/backend/FileLoader.js +18 -4
  8. package/dist/src/backend/FileLoader.test.js +125 -0
  9. package/dist/src/backend/GraphBuilder.identity.test.js +86 -0
  10. package/dist/src/backend/GraphBuilder.js +66 -18
  11. package/dist/src/backend/GraphBuilder.matching.test.js +127 -0
  12. package/dist/src/backend/GraphMetrics.js +0 -3
  13. package/dist/src/backend/ResourceIdentity.js +155 -0
  14. package/dist/src/backend/ResourceIdentity.test.js +113 -0
  15. package/dist/src/backend/algorithms/CycleDetection.js +0 -1
  16. package/dist/src/backend/algorithms/HybridEngine.js +0 -3
  17. package/dist/src/backend/algorithms/LayoutEngine.js +0 -1
  18. package/dist/src/backend/algorithms/StatisticalAnalyzer.js +0 -4
  19. package/dist/src/backend/algorithms/TopologicalSort.js +0 -2
  20. package/dist/src/backend/build_dag.js +0 -1
  21. package/dist/src/capacitor.bridge.serialization.contract.test.js +3 -0
  22. package/dist/src/capacitor.runtime.contract.test.js +11 -2
  23. package/dist/src/core/Graph.js +138 -42
  24. package/dist/src/core/Graph.test.js +74 -0
  25. package/dist/src/core/NoteConnection.js +2 -2
  26. package/dist/src/core/PathBridge.js +265 -2
  27. package/dist/src/core/ResourceReference.js +17 -0
  28. package/dist/src/desktop.godot.pack.test.js +142 -0
  29. package/dist/src/desktop.runtime.graph.test.js +66 -0
  30. package/dist/src/export/WorkspaceExportBundle.js +44 -0
  31. package/dist/src/export/WorkspaceExportBundle.test.js +61 -0
  32. package/dist/src/foundation.release.evidence.contract.test.js +127 -9
  33. package/dist/src/foundation.sqlite.runtime.contract.test.js +6 -0
  34. package/dist/src/frontend/README.md +257 -1803
  35. package/dist/src/frontend/agent_workspace.js +665 -7
  36. package/dist/src/frontend/index.html +31 -2
  37. package/dist/src/frontend/knowledge_projection_contract.js +230 -0
  38. package/dist/src/frontend/knowledge_projection_store.js +214 -0
  39. package/dist/src/frontend/libs/path_core.js +158 -42
  40. package/dist/src/frontend/locales/en.json +32 -0
  41. package/dist/src/frontend/locales/zh.json +32 -0
  42. package/dist/src/frontend/mobile_budget_runtime.js +33 -0
  43. package/dist/src/frontend/mobile_exact_analyzer.js +393 -0
  44. package/dist/src/frontend/mobile_identity_contract.js +221 -0
  45. package/dist/src/frontend/mobile_semantic_comparator.js +264 -0
  46. package/dist/src/frontend/path.html +6 -2
  47. package/dist/src/frontend/simulationWorker.js +1 -1
  48. package/dist/src/frontend/source_manager.js +110 -4
  49. package/dist/src/frontend/storage_provider.js +661 -71
  50. package/dist/src/frontend/styles.css +107 -13
  51. package/dist/src/frontend/workspace_panes.js +111 -7
  52. package/dist/src/frontend.runtime.assets.contract.test.js +81 -0
  53. package/dist/src/graph.answer.operator.contract.test.js +72 -0
  54. package/dist/src/index.js +6 -2
  55. package/dist/src/index.knowledge-root.test.js +118 -0
  56. package/dist/src/indexing/IndexLifecycle.js +22 -0
  57. package/dist/src/indexing/IndexLifecycle.test.js +24 -0
  58. package/dist/src/knowledge.api.contract.test.js +4 -2
  59. package/dist/src/knowledge_projection.contract.test.js +134 -0
  60. package/dist/src/knowledge_projection_store.test.js +200 -0
  61. package/dist/src/learning/AnswerQualityEvaluation.js +153 -0
  62. package/dist/src/learning/AnswerQualityEvaluation.test.js +118 -0
  63. package/dist/src/learning/KnowledgeLearningPlatform.js +4687 -3892
  64. package/dist/src/learning/KnowledgeLearningPlatform.persistence.test.js +418 -0
  65. package/dist/src/learning/KnowledgeLearningPlatform.test.js +243 -6
  66. package/dist/src/learning/KnowledgeWorkspaceConversationRegression.js +25 -1
  67. package/dist/src/learning/KnowledgeWorkspaceConversationRegression.test.js +13 -5
  68. package/dist/src/learning/MeasurementEvidenceConflicts.test.js +78 -0
  69. package/dist/src/learning/PublicAnswerContract.test.js +85 -0
  70. package/dist/src/learning/PublicEvidenceSelection.test.js +94 -0
  71. package/dist/src/learning/PublicMeasurementDisclosure.test.js +54 -0
  72. package/dist/src/learning/agentConversationExecution.js +211 -0
  73. package/dist/src/learning/agentConversationExecution.test.js +209 -0
  74. package/dist/src/learning/agentConversationSerialization.js +266 -0
  75. package/dist/src/learning/agentConversationSerialization.test.js +165 -0
  76. package/dist/src/learning/agentResponseBudget.js +179 -0
  77. package/dist/src/learning/agentResponseBudget.test.js +97 -0
  78. package/dist/src/learning/agentWorkspaceCapabilityContracts.js +65 -0
  79. package/dist/src/learning/answerReleaseReview.js +1191 -250
  80. package/dist/src/learning/answerReleaseReview.test.js +1293 -7
  81. package/dist/src/learning/answerTaskPlan.js +473 -0
  82. package/dist/src/learning/conversationComposer.js +627 -386
  83. package/dist/src/learning/conversationComposer.test.js +1403 -0
  84. package/dist/src/learning/evidenceContextAssembler.js +312 -120
  85. package/dist/src/learning/graphAnswerCoverage.js +37 -0
  86. package/dist/src/learning/graphAnswerCoverage.test.js +93 -0
  87. package/dist/src/learning/graphAnswerCoverageCalibration.js +59 -0
  88. package/dist/src/learning/graphAnswerCoverageCalibration.test.js +46 -0
  89. package/dist/src/learning/graphAnswerFacts.js +94 -0
  90. package/dist/src/learning/graphAnswerFacts.test.js +39 -0
  91. package/dist/src/learning/graphAnswerPlan.js +908 -0
  92. package/dist/src/learning/graphAnswerPlan.test.js +907 -0
  93. package/dist/src/learning/graphAnswerQualityCalibration.js +255 -0
  94. package/dist/src/learning/graphAnswerQualityCalibration.test.js +72 -0
  95. package/dist/src/learning/graphAnswerQualityPolicy.js +30 -0
  96. package/dist/src/learning/graphClaimMatcher.js +104 -0
  97. package/dist/src/learning/graphConditionedContext.js +109 -0
  98. package/dist/src/learning/graphConditionedContext.test.js +99 -0
  99. package/dist/src/learning/graphContextAssembler.js +3 -13
  100. package/dist/src/learning/graphContextAssembler.test.js +2 -2
  101. package/dist/src/learning/graphExpansionPolicy.js +22 -0
  102. package/dist/src/learning/graphExpansionPolicy.test.js +33 -0
  103. package/dist/src/learning/identityMetadata.test.js +26 -0
  104. package/dist/src/learning/index.js +1 -0
  105. package/dist/src/learning/mobileAnswerProjection.js +104 -0
  106. package/dist/src/learning/mobileAnswerProjection.test.js +102 -0
  107. package/dist/src/learning/queryBackend.js +34 -10
  108. package/dist/src/learning/queryBackend.test.js +21 -0
  109. package/dist/src/learning/ragContextPack.js +115 -16
  110. package/dist/src/learning/ragContextPack.test.js +151 -0
  111. package/dist/src/learning/ragEvidenceQuality.js +96 -0
  112. package/dist/src/learning/ragEvidenceQuality.test.js +29 -0
  113. package/dist/src/learning/ragPublicText.js +67 -4
  114. package/dist/src/learning/ragPublicText.test.js +57 -0
  115. package/dist/src/learning/ragSufficiencyJudge.js +11 -1
  116. package/dist/src/learning/ragSufficiencyProviderJudge.js +16 -26
  117. package/dist/src/learning/ragSufficiencyProviderJudge.test.js +51 -0
  118. package/dist/src/learning/requestNormalization.js +106 -0
  119. package/dist/src/learning/requestNormalization.test.js +101 -0
  120. package/dist/src/learning/store.js +116 -12
  121. package/dist/src/learning/store.test.js +299 -0
  122. package/dist/src/learning/vectorAccelerationAdapter.js +22 -6
  123. package/dist/src/learning/vectorAccelerationAdapter.test.js +30 -0
  124. package/dist/src/learning/workspaceHydration.js +168 -0
  125. package/dist/src/learning/workspaceHydration.test.js +30 -0
  126. package/dist/src/license.policy.contract.test.js +9 -4
  127. package/dist/src/markdown/MarkdownGateway.js +4 -0
  128. package/dist/src/markdown/MarkdownGateway.test.js +59 -0
  129. package/dist/src/middleware/SseResponseWriter.js +122 -0
  130. package/dist/src/middleware/SseResponseWriter.test.js +54 -0
  131. package/dist/src/middleware/auth.js +28 -7
  132. package/dist/src/middleware/auth.test.js +33 -0
  133. package/dist/src/middleware/index.js +2 -1
  134. package/dist/src/mobile.android.evidence.contract.test.js +146 -0
  135. package/dist/src/mobile.android.signing.contract.test.js +66 -0
  136. package/dist/src/mobile.artifact.contract.test.js +144 -0
  137. package/dist/src/mobile.budget.contract.test.js +90 -0
  138. package/dist/src/mobile.canonical-id.readiness.test.js +54 -0
  139. package/dist/src/mobile.graph.parity.contract.test.js +207 -0
  140. package/dist/src/mobile.identity.contract.test.js +66 -0
  141. package/dist/src/mobile.identity.corpus.manifest.test.js +72 -0
  142. package/dist/src/mobile.identity.corpus.test.js +40 -0
  143. package/dist/src/mobile.native.recovery.contract.test.js +64 -0
  144. package/dist/src/mobile.pipeline.test.js +11 -1
  145. package/dist/src/mobile.profile.contract.test.js +225 -0
  146. package/dist/src/mobile.semantic.parity.test.js +92 -0
  147. package/dist/src/mobile_exact_analyzer.test.js +113 -0
  148. package/dist/src/notemd/ContentGenerator.js +4 -9
  149. package/dist/src/notemd/FileProcessor.js +4 -9
  150. package/dist/src/notemd/NotemdService.js +12 -17
  151. package/dist/src/notemd/Translator.js +4 -9
  152. package/dist/src/notemd/progressReporter.js +9 -0
  153. package/dist/src/notemd.server.integration.test.js +119 -4
  154. package/dist/src/notemd.workflow.pipeline.test.js +1 -1
  155. package/dist/src/pathbridge.handshake.contract.test.js +29 -0
  156. package/dist/src/pathbridge.host-adapter.contract.test.js +133 -0
  157. package/dist/src/pathcore.bundle.contract.test.js +8 -0
  158. package/dist/src/platform/ExportProfile.js +28 -0
  159. package/dist/src/platform/MobileBudget.js +11 -0
  160. package/dist/src/platform/PlatformCapabilities.js +14 -0
  161. package/dist/src/platform/PlatformCapabilities.test.js +6 -0
  162. package/dist/src/query_backend.external_http.integration.test.js +2 -2
  163. package/dist/src/release.godot.mirror.contract.test.js +28 -4
  164. package/dist/src/resources/ResourceRegistry.js +40 -0
  165. package/dist/src/resources/ResourceRegistry.test.js +36 -0
  166. package/dist/src/routes/index.js +0 -4
  167. package/dist/src/routes/knowledge.js +46 -33
  168. package/dist/src/routes/knowledgePayload.js +185 -0
  169. package/dist/src/routes/knowledgePayload.test.js +53 -0
  170. package/dist/src/routes/markdown.js +8 -0
  171. package/dist/src/routes/notemd.js +990 -234
  172. package/dist/src/routes/registry.contract.test.js +5 -2
  173. package/dist/src/routes/registry.shadow.contract.test.js +22 -0
  174. package/dist/src/routes/render.js +14 -51
  175. package/dist/src/runtime.capabilities.test.js +18 -2
  176. package/dist/src/server.js +566 -1090
  177. package/dist/src/server.migration.test.js +417 -15
  178. package/dist/src/sidecar.build.lock.contract.test.js +201 -0
  179. package/dist/src/sidecar.freshness.contract.test.js +184 -0
  180. package/dist/src/sidecar.replacement.boundary.contract.test.js +6 -3
  181. package/dist/src/sidecar.supply.readiness.contract.test.js +11 -0
  182. package/dist/src/simulation.worker.offline.test.js +104 -0
  183. package/dist/src/storage.provider.capacitor.content.contract.test.js +4 -1
  184. package/dist/src/storage.provider.contract.test.js +152 -1
  185. package/dist/src/tauri.frontend.build.contract.test.js +8 -0
  186. package/dist/src/tauri.window.evidence.execution.test.js +68 -0
  187. package/dist/src/utils/RuntimePaths.js +6 -0
  188. package/dist/src/utils/RuntimePaths.test.js +27 -0
  189. package/dist/src/windows.installer.build.test.js +109 -0
  190. package/dist/src/windows.installer.payload.test.js +76 -0
  191. package/dist/src/windows.installer.runtime.test.js +69 -0
  192. package/dist/src/workspace/WorkspaceRegistry.js +13 -0
  193. package/package.json +32 -10
  194. package/dist/src/routes/data.js +0 -267
  195. package/dist/src/routes/diagnostics.js +0 -51
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  * Verifies the modular route registration and dispatch infrastructure.
6
6
  */
7
7
  const index_1 = require("./index");
8
+ const constants_1 = require("../notemd/constants");
8
9
  function createMockContext() {
9
10
  const scheduleKnowledgeLearningPlatformWarmup = jest.fn();
10
11
  return {
@@ -20,7 +21,9 @@ function createMockContext() {
20
21
  tutorRouter: { getDiagnosticsSummary: () => ({}) },
21
22
  memoryPolicyManager: { getDiagnosticsSummary: () => ({}) },
22
23
  notemdService: {},
23
- loadNotemdSettings: async () => ({}),
24
+ loadNotemdSettings: async () => structuredClone(constants_1.DEFAULT_SETTINGS),
25
+ persistNotemdSettings: async () => structuredClone(constants_1.DEFAULT_SETTINGS),
26
+ notemdHttp: {},
24
27
  LOOPBACK_HOST: '127.0.0.1',
25
28
  finalPort: 3000,
26
29
  KNOWLEDGE_GRAPH_STORE_BACKEND: 'file',
@@ -68,7 +71,7 @@ describe('Route Registry', () => {
68
71
  });
69
72
  test('render routes are registered', () => {
70
73
  const renderRoutes = routes.filter(r => r.path.startsWith('/api/render') || r.path.startsWith('/api/clipboard'));
71
- expect(renderRoutes.length).toBeGreaterThanOrEqual(4);
74
+ expect(renderRoutes.map(route => route.path).sort()).toEqual(['/api/render/math', '/api/render/mermaid']);
72
75
  });
73
76
  test('no duplicate method+path combinations', () => {
74
77
  const seen = new Set();
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_fs_1 = __importDefault(require("node:fs"));
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ describe('route registry shadow parity gate', () => {
9
+ const repoRoot = node_path_1.default.resolve(__dirname, '..', '..');
10
+ const serverSource = node_fs_1.default.readFileSync(node_path_1.default.join(repoRoot, 'src', 'server.ts'), 'utf8');
11
+ const packageJson = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(repoRoot, 'package.json'), 'utf8'));
12
+ test('supports an explicit legacy mode without changing the default registry mode', () => {
13
+ expect(serverSource.includes('NOTE_CONNECTION_ROUTE_DISPATCH_MODE')).toBe(true);
14
+ expect(serverSource.includes("ROUTE_DISPATCH_MODE === 'registry'")).toBe(true);
15
+ expect(serverSource.includes("registeredRoute && (USE_REGISTRY_DISPATCH || requestPath.startsWith('/api/notemd/'))")).toBe(true);
16
+ expect(/(?:get|post)Pathname === '\/api\/notemd\//.test(serverSource)).toBe(false);
17
+ });
18
+ test('ships an executable parity harness as a release gate', () => {
19
+ expect(packageJson.scripts?.['verify:route:shadow']).toBe('npm run build:mini && node scripts/verify-route-registry-shadow.js');
20
+ expect(node_fs_1.default.existsSync(node_path_1.default.join(repoRoot, 'scripts', 'verify-route-registry-shadow.js'))).toBe(true);
21
+ });
22
+ });
@@ -34,6 +34,15 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerRenderRoutes = registerRenderRoutes;
37
+ const isPngBuffer = (value) => value.length >= 8
38
+ && value[0] === 0x89
39
+ && value[1] === 0x50
40
+ && value[2] === 0x4e
41
+ && value[3] === 0x47
42
+ && value[4] === 0x0d
43
+ && value[5] === 0x0a
44
+ && value[6] === 0x1a
45
+ && value[7] === 0x0a;
37
46
  const CrashLogger_1 = require("../backend/utils/CrashLogger");
38
47
  const RenderMaterializer_1 = require("../platform/RenderMaterializer");
39
48
  function normalizeMermaidRendererPreference(value) {
@@ -155,7 +164,10 @@ function registerRenderRoutes(ctx) {
155
164
  ? payload.expression
156
165
  : (typeof payload?.source === 'string' ? payload.source : '');
157
166
  if (!expression.trim()) {
158
- json(res, 400, { success: false, error: 'Missing expression' });
167
+ const hasExpressionField = Object.prototype.hasOwnProperty.call(payload || {}, 'expression');
168
+ json(res, 400, hasExpressionField
169
+ ? { success: false, error: 'Missing expression' }
170
+ : { error: 'Missing source' });
159
171
  return;
160
172
  }
161
173
  const { renderMathPng } = await Promise.resolve().then(() => __importStar(require('../reader_renderer')));
@@ -194,7 +206,7 @@ function registerRenderRoutes(ctx) {
194
206
  ? payload.source
195
207
  : (typeof payload?.diagram === 'string' ? payload.diagram : '');
196
208
  if (!source.trim()) {
197
- json(res, 400, { success: false, error: 'Missing source' });
209
+ json(res, 400, { error: 'Missing source' });
198
210
  return;
199
211
  }
200
212
  const includeStages = payload?.includeStages === true;
@@ -232,54 +244,5 @@ function registerRenderRoutes(ctx) {
232
244
  }
233
245
  },
234
246
  },
235
- {
236
- method: 'POST',
237
- path: '/api/render/graphviz',
238
- handler: async (req, res) => {
239
- try {
240
- const body = await readBody(req);
241
- json(res, 200, { success: true, message: 'graphviz render route' });
242
- }
243
- catch (e) {
244
- fail(res, e, 'POST /api/render/graphviz');
245
- }
246
- },
247
- },
248
- {
249
- method: 'POST',
250
- path: '/api/clipboard/image',
251
- handler: async (req, res) => {
252
- try {
253
- const body = await readBody(req);
254
- const { pngBase64 } = JSON.parse(body);
255
- const { copyPngToClipboard } = await Promise.resolve().then(() => __importStar(require('../native_clipboard')));
256
- await copyPngToClipboard(Buffer.from(pngBase64 || '', 'base64'));
257
- json(res, 200, { success: true });
258
- }
259
- catch (e) {
260
- fail(res, e, 'POST /api/clipboard/image');
261
- }
262
- },
263
- },
264
- {
265
- method: 'POST',
266
- path: '/api/clipboard/image-binary',
267
- handler: async (req, res) => {
268
- try {
269
- const chunks = [];
270
- req.on('data', (c) => chunks.push(c));
271
- await new Promise((resolve, reject) => {
272
- req.on('end', resolve);
273
- req.on('error', reject);
274
- });
275
- const { copyPngToClipboard } = await Promise.resolve().then(() => __importStar(require('../native_clipboard')));
276
- await copyPngToClipboard(Buffer.concat(chunks));
277
- json(res, 200, { success: true });
278
- }
279
- catch (e) {
280
- fail(res, e, 'POST /api/clipboard/image-binary');
281
- }
282
- },
283
- },
284
247
  ];
285
248
  }
@@ -56,6 +56,11 @@ describe('runtime capability gating contract', () => {
56
56
  expect(sourceManager).toContain('supports_mobile_wasm_compute');
57
57
  expect(sourceManager).toContain('mobile_wasm_reason');
58
58
  expect(sourceManager).toContain('detectMobileWasmCapability');
59
+ expect(sourceManager).toContain('storage_requested_provider');
60
+ expect(sourceManager).toContain('storage_resolved_provider');
61
+ expect(sourceManager).toContain('storage_fallback_reason');
62
+ expect(sourceManager).toContain('supports_sqlite');
63
+ expect(sourceManager).toContain('refreshStorageResolution');
59
64
  });
60
65
  test('source manager blocks build path when runtime does not support build', () => {
61
66
  const sourceManager = fs.readFileSync(sourceManagerPath, 'utf8');
@@ -76,18 +81,29 @@ describe('runtime capability gating contract', () => {
76
81
  expect(reader).toContain('supports_content_api');
77
82
  expect(reader).toContain("window.i18n.t('source.error.contentUnavailableMobile')");
78
83
  });
79
- test('rust runtime capabilities command is registered and has android-safe defaults', () => {
84
+ test('rust runtime capabilities command is registered and keeps Godot Pathmode opt-in', () => {
80
85
  const tauriLib = fs.readFileSync(tauriLibPath, 'utf8');
81
86
  expect(tauriLib).toContain('fn get_runtime_capabilities()');
82
87
  expect(tauriLib).toContain('get_runtime_capabilities,');
83
88
  expect(tauriLib).toContain('choose_kb_path,');
89
+ expect(tauriLib).toContain('request_kb_path_change,');
90
+ expect(tauriLib).toContain('poll_kb_path_change,');
84
91
  expect(tauriLib).toContain('reset_kb_path,');
85
92
  expect(tauriLib).toContain('open_native_pathmode,');
86
93
  expect(tauriLib).toContain('build_graph_runtime,');
87
94
  expect(tauriLib).toContain('supports_sidecar: false');
88
95
  expect(tauriLib).toContain('supports_build: true');
89
96
  expect(tauriLib).toContain('supports_content_api: true');
90
- expect(tauriLib).toContain('supports_native_pathmode: true');
97
+ expect(tauriLib).toContain('supports_kb_import: true');
98
+ expect(tauriLib).toContain('kb_import_mode: "android-saf-copy"');
99
+ expect(tauriLib).toContain('supports_projection_store: true');
100
+ expect(tauriLib).toContain('storage_requested_provider: "projection".to_string()');
101
+ expect(tauriLib).toContain('storage_resolved_provider: "projection".to_string()');
102
+ expect(tauriLib).toContain('storage_requested_provider: "sqlite".to_string()');
103
+ expect(tauriLib).toContain('storage_resolved_provider: "unknown".to_string()');
104
+ expect(tauriLib).toContain('supports_sqlite: false');
105
+ expect(tauriLib).toContain('supports_sqlite: true');
106
+ expect(tauriLib).toContain('supports_native_pathmode: option_env!("NOTE_CONNECTION_ANDROID_INCLUDE_GODOT_PATHMODE")');
91
107
  expect(tauriLib).toContain('read_node_content');
92
108
  });
93
109
  test('path mode entry prefers native android activity when capability is enabled', () => {