@monoes/monomindcli 2.11.1 → 2.11.3

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 (84) hide show
  1. package/bin/cli.js +14 -1
  2. package/dist/src/commands/doctor-native-checks.d.ts +13 -0
  3. package/dist/src/commands/doctor-native-checks.d.ts.map +1 -0
  4. package/dist/src/commands/doctor-native-checks.js +32 -0
  5. package/dist/src/commands/doctor-native-checks.js.map +1 -0
  6. package/dist/src/commands/doctor.d.ts.map +1 -1
  7. package/dist/src/commands/doctor.js +4 -0
  8. package/dist/src/commands/doctor.js.map +1 -1
  9. package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -1
  10. package/dist/src/commands/hooks-routing-commands.js +18 -0
  11. package/dist/src/commands/hooks-routing-commands.js.map +1 -1
  12. package/dist/src/commands/mcp-daemon.d.ts +30 -0
  13. package/dist/src/commands/mcp-daemon.d.ts.map +1 -0
  14. package/dist/src/commands/mcp-daemon.js +89 -0
  15. package/dist/src/commands/mcp-daemon.js.map +1 -0
  16. package/dist/src/commands/mcp.d.ts.map +1 -1
  17. package/dist/src/commands/mcp.js +38 -3
  18. package/dist/src/commands/mcp.js.map +1 -1
  19. package/dist/src/commands/monograph.d.ts.map +1 -1
  20. package/dist/src/commands/monograph.js +52 -2
  21. package/dist/src/commands/monograph.js.map +1 -1
  22. package/dist/src/commands/org.d.ts +33 -0
  23. package/dist/src/commands/org.d.ts.map +1 -1
  24. package/dist/src/commands/org.js +96 -28
  25. package/dist/src/commands/org.js.map +1 -1
  26. package/dist/src/commands/platforms.d.ts.map +1 -1
  27. package/dist/src/commands/platforms.js +83 -15
  28. package/dist/src/commands/platforms.js.map +1 -1
  29. package/dist/src/commands/security-scan.d.ts +1 -1
  30. package/dist/src/commands/security-scan.js +1 -1
  31. package/dist/src/commands/security.js +1 -1
  32. package/dist/src/commands/security.js.map +1 -1
  33. package/dist/src/init/claudemd-generator.d.ts.map +1 -1
  34. package/dist/src/init/claudemd-generator.js +62 -25
  35. package/dist/src/init/claudemd-generator.js.map +1 -1
  36. package/dist/src/init/managed-block.d.ts +7 -0
  37. package/dist/src/init/managed-block.d.ts.map +1 -0
  38. package/dist/src/init/managed-block.js +188 -0
  39. package/dist/src/init/managed-block.js.map +1 -0
  40. package/dist/src/init/shared.d.ts +1 -28
  41. package/dist/src/init/shared.d.ts.map +1 -1
  42. package/dist/src/init/shared.js +4 -42
  43. package/dist/src/init/shared.js.map +1 -1
  44. package/dist/src/init/write-opencode.d.ts.map +1 -1
  45. package/dist/src/init/write-opencode.js +13 -4
  46. package/dist/src/init/write-opencode.js.map +1 -1
  47. package/dist/src/mcp-server.d.ts +36 -3
  48. package/dist/src/mcp-server.d.ts.map +1 -1
  49. package/dist/src/mcp-server.js +115 -13
  50. package/dist/src/mcp-server.js.map +1 -1
  51. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
  52. package/dist/src/mcp-tools/hooks-routing.js +47 -2
  53. package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
  54. package/dist/src/orgrt/copilot-runner.d.ts +17 -0
  55. package/dist/src/orgrt/copilot-runner.d.ts.map +1 -1
  56. package/dist/src/orgrt/copilot-runner.js +142 -21
  57. package/dist/src/orgrt/copilot-runner.js.map +1 -1
  58. package/dist/src/orgrt/cross-org.d.ts.map +1 -1
  59. package/dist/src/orgrt/cross-org.js +9 -1
  60. package/dist/src/orgrt/cross-org.js.map +1 -1
  61. package/dist/src/orgrt/daemon.d.ts +9 -0
  62. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  63. package/dist/src/orgrt/daemon.js +5 -0
  64. package/dist/src/orgrt/daemon.js.map +1 -1
  65. package/dist/src/orgrt/decisions.d.ts +12 -0
  66. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  67. package/dist/src/orgrt/decisions.js +38 -2
  68. package/dist/src/orgrt/decisions.js.map +1 -1
  69. package/dist/src/parser.d.ts +11 -0
  70. package/dist/src/parser.d.ts.map +1 -1
  71. package/dist/src/parser.js +21 -2
  72. package/dist/src/parser.js.map +1 -1
  73. package/dist/src/platform-adapters/migration.d.ts.map +1 -1
  74. package/dist/src/platform-adapters/migration.js +40 -2
  75. package/dist/src/platform-adapters/migration.js.map +1 -1
  76. package/dist/src/utils/native-binding.d.ts +107 -0
  77. package/dist/src/utils/native-binding.d.ts.map +1 -0
  78. package/dist/src/utils/native-binding.js +281 -0
  79. package/dist/src/utils/native-binding.js.map +1 -0
  80. package/dist/src/utils/native-error.d.ts.map +1 -1
  81. package/dist/src/utils/native-error.js +15 -1
  82. package/dist/src/utils/native-error.js.map +1 -1
  83. package/dist/tsconfig.tsbuildinfo +1 -1
  84. package/package.json +1 -1
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Native-addon (better-sqlite3) load diagnosis and recovery.
3
+ *
4
+ * Issue #231: `monograph build` died with a raw NODE_MODULE_VERSION dump and the
5
+ * reporter then ran `npm rebuild better-sqlite3` five times — from their project
6
+ * directory and against a *separate* global `@monoes/monograph` install — while the
7
+ * binary that actually gets loaded lives several node_modules levels deeper, under
8
+ * the globally installed `monomind` -> `@monoes/monomindcli` -> `@monoes/monograph`.
9
+ * Every attempt left the file byte-identical because none of them ever touched it.
10
+ *
11
+ * So the useful thing to report is not "run npm rebuild" — it is *which physical
12
+ * file* is being loaded and *which directory* owns the node_modules tree it lives
13
+ * in, which is what these helpers derive.
14
+ */
15
+ import { spawnSync } from 'node:child_process';
16
+ import { accessSync, constants } from 'node:fs';
17
+ import { createRequire } from 'node:module';
18
+ import { delimiter, dirname } from 'node:path';
19
+ function currentRuntime() {
20
+ return { nodeVersion: process.version, runtimeAbi: process.versions.modules };
21
+ }
22
+ /**
23
+ * Works out where a `.node` binary's package lives and which directory a rebuild
24
+ * has to run from. `rebuildCwd` is the part users can't guess: for a nested
25
+ * global install it is not the project, and not the top-level global package,
26
+ * but the intermediate package that owns the node_modules holding the binary.
27
+ */
28
+ export function deriveRebuildTarget(binaryPath) {
29
+ const norm = binaryPath.replace(/\\/g, '/');
30
+ const lastIdx = norm.lastIndexOf('/node_modules/');
31
+ if (lastIdx === -1)
32
+ return null;
33
+ const rest = norm.slice(lastIdx + '/node_modules/'.length).split('/');
34
+ if (rest.length === 0 || rest[0] === '')
35
+ return null;
36
+ const nameSegs = rest[0].startsWith('@') ? rest.slice(0, 2) : rest.slice(0, 1);
37
+ if (nameSegs.length === 2 && !nameSegs[1])
38
+ return null;
39
+ const packageDir = `${norm.slice(0, lastIdx)}/node_modules/${nameSegs.join('/')}`;
40
+ // pnpm keeps every package in a content-addressed store at
41
+ // <root>/node_modules/.pnpm/<name>@<version>/node_modules/<name>. Rebuilding
42
+ // from inside the store is not how pnpm works — the rebuild is driven from the
43
+ // project/workspace root that owns the store.
44
+ const pnpmMarker = '/node_modules/.pnpm/';
45
+ const pnpmIdx = norm.indexOf(pnpmMarker);
46
+ if (pnpmIdx !== -1) {
47
+ return { packageManager: 'pnpm', rebuildCwd: norm.slice(0, pnpmIdx), packageDir };
48
+ }
49
+ return { packageManager: 'npm', rebuildCwd: norm.slice(0, lastIdx), packageDir };
50
+ }
51
+ function fixCommand(module, status, target) {
52
+ // `--build-from-source` matters for the ABI case specifically: a plain rebuild
53
+ // can resolve a cached prebuilt of the wrong ABI and change nothing at all.
54
+ const rebuild = target?.packageManager === 'pnpm'
55
+ ? `pnpm rebuild ${module}`
56
+ : `npm rebuild ${module}${status === 'abi-mismatch' ? ' --build-from-source' : ''}`;
57
+ return target ? `cd ${target.rebuildCwd} && ${rebuild}` : rebuild;
58
+ }
59
+ /** Message of an error plus its immediate cause, on one line. */
60
+ function firstLine(err) {
61
+ if (!(err instanceof Error))
62
+ return String(err);
63
+ const cause = err.cause;
64
+ if (cause === undefined)
65
+ return err.message;
66
+ return `${err.message}: ${cause instanceof Error ? cause.message : String(cause)}`;
67
+ }
68
+ /**
69
+ * Flattens an error and its `.cause` chain into one searchable blob. The native
70
+ * failure arrives wrapped (MonographError('Failed to open database at …', cause)),
71
+ * and neither `.message` nor `.stack` of the wrapper contains the cause's text.
72
+ */
73
+ function errorText(err, depth = 0) {
74
+ if (depth > 5)
75
+ return '';
76
+ if (!(err instanceof Error))
77
+ return String(err);
78
+ const cause = err.cause;
79
+ const head = `${err.message}\n${err.stack ?? ''}`;
80
+ return cause === undefined ? head : `${head}\n${errorText(cause, depth + 1)}`;
81
+ }
82
+ /**
83
+ * Turns a native-addon load failure into a diagnosis naming the running Node, the
84
+ * ABI the binary was built for, the file itself, and the exact fix command.
85
+ * Pure — takes the runtime facts rather than reading them, so it is testable.
86
+ */
87
+ export function diagnoseNativeLoadError(err, module, runtime = currentRuntime(),
88
+ /**
89
+ * Absolute path of the module as resolved by the caller. The "bindings file not
90
+ * found" error lists only *candidate* paths, most of them relative, so there is
91
+ * nothing trustworthy in its text to locate the install from.
92
+ */
93
+ resolvedModulePath) {
94
+ const raw = errorText(err);
95
+ const base = { module, nodeVersion: runtime.nodeVersion, runtimeAbi: runtime.runtimeAbi, raw };
96
+ const binaryPath = raw.match(/The module '([^']+)'/)?.[1];
97
+ const target = (binaryPath ? deriveRebuildTarget(binaryPath) : null) ??
98
+ (resolvedModulePath ? deriveRebuildTarget(resolvedModulePath) : null) ??
99
+ undefined;
100
+ // build.log is append-only, so several failures can pile up; match bounded
101
+ // pairs and take the last (most recent) one.
102
+ const pairs = [
103
+ ...raw.matchAll(/NODE_MODULE_VERSION (\d+)[\s\S]{0,200}?NODE_MODULE_VERSION (\d+)/g),
104
+ ];
105
+ if (pairs.length > 0) {
106
+ const [, builtForAbi] = pairs[pairs.length - 1];
107
+ return {
108
+ ...base,
109
+ status: 'abi-mismatch',
110
+ builtForAbi,
111
+ binaryPath,
112
+ target,
113
+ summary: `\`${module}\`'s native binary was built for Node ABI ${builtForAbi}, but this ` +
114
+ `process is Node ${runtime.nodeVersion} (ABI ${runtime.runtimeAbi})`,
115
+ fix: fixCommand(module, 'abi-mismatch', target),
116
+ };
117
+ }
118
+ if (/Could not locate the bindings file/i.test(raw)) {
119
+ return {
120
+ ...base,
121
+ status: 'missing-binary',
122
+ binaryPath,
123
+ target,
124
+ summary: `\`${module}\`'s native binary was never built for this platform (it does not exist — ` +
125
+ 'not an ABI mismatch). Its install script was most likely blocked or failed silently',
126
+ fix: fixCommand(module, 'missing-binary', target),
127
+ };
128
+ }
129
+ return {
130
+ ...base,
131
+ status: 'load-error',
132
+ binaryPath,
133
+ target,
134
+ summary: `\`${module}\` failed to load: ${firstLine(err)}`,
135
+ fix: target ? fixCommand(module, 'load-error', target) : undefined,
136
+ };
137
+ }
138
+ /** Multi-line, human-facing rendering of a failed diagnosis. */
139
+ export function formatNativeDiagnosis(diag) {
140
+ const lines = [diag.summary];
141
+ if (diag.binaryPath)
142
+ lines.push(` binary : ${diag.binaryPath}`);
143
+ if (diag.target)
144
+ lines.push(` owned by: ${diag.target.rebuildCwd}`);
145
+ if (diag.fix)
146
+ lines.push(` fix : ${diag.fix}`);
147
+ if (diag.status === 'abi-mismatch') {
148
+ lines.push(' note : rebuilding from your project directory, or reinstalling a different copy ' +
149
+ 'of the package, will not touch the file above — the command must run in the ' +
150
+ 'directory named there.');
151
+ }
152
+ return lines.join('\n');
153
+ }
154
+ /**
155
+ * A `require` rooted at @monoes/monograph, so `better-sqlite3` resolves exactly as
156
+ * it does for the code that actually uses it. Monograph is ESM-only (its exports
157
+ * map has no `require` condition), so `require.resolve` can't find it and
158
+ * `import.meta.resolve` has to do the locating. Falls back to resolving from this
159
+ * package when that isn't available.
160
+ */
161
+ function requireFromMonograph() {
162
+ const here = createRequire(import.meta.url);
163
+ try {
164
+ const url = import.meta.resolve?.('@monoes/monograph');
165
+ if (url)
166
+ return createRequire(url);
167
+ }
168
+ catch {
169
+ /* fall back to this package's own resolution below */
170
+ }
171
+ return here;
172
+ }
173
+ /** Where `@monoes/monograph` resolves a module to, or undefined if it can't. */
174
+ function resolveFromMonograph(module) {
175
+ try {
176
+ return requireFromMonograph().resolve(module);
177
+ }
178
+ catch {
179
+ return undefined;
180
+ }
181
+ }
182
+ /**
183
+ * Diagnoses a failure thrown while monograph was using better-sqlite3, locating the
184
+ * install through monograph's own resolution rather than guessing from error text.
185
+ */
186
+ export function diagnoseMonographNativeError(err) {
187
+ return diagnoseNativeLoadError(err, 'better-sqlite3', currentRuntime(), resolveFromMonograph('better-sqlite3'));
188
+ }
189
+ /**
190
+ * Loads the very same `better-sqlite3` copy `@monoes/monograph` will load (resolved
191
+ * from monograph's own location, not the CLI's — under nested installs they can
192
+ * differ, which is the whole point) and opens an in-memory database to force the
193
+ * addon binding.
194
+ *
195
+ * Runs in a child process on purpose. Once an addon has failed to dlopen in a
196
+ * process, later attempts report a useless "Module did not self-register" instead
197
+ * of the real ABI error — and doctor has other checks that touch sqlite before
198
+ * this one. A fresh process also means a binary that segfaults on load can't take
199
+ * doctor down with it.
200
+ */
201
+ export function probeMonographSqliteBinding(runtime = currentRuntime()) {
202
+ const module = 'better-sqlite3';
203
+ const base = { module, nodeVersion: runtime.nodeVersion, runtimeAbi: runtime.runtimeAbi };
204
+ const entry = resolveFromMonograph(module);
205
+ if (!entry) {
206
+ return {
207
+ ...base,
208
+ status: 'load-error',
209
+ summary: `\`${module}\` could not be resolved from @monoes/monograph — is it installed?`,
210
+ };
211
+ }
212
+ const res = spawnSync(process.execPath, ['-e', `new (require(${JSON.stringify(entry)}))(':memory:').close()`], { encoding: 'utf8', timeout: 60_000 });
213
+ if (res.status === 0) {
214
+ return {
215
+ ...base,
216
+ status: 'ok',
217
+ binaryPath: entry,
218
+ summary: `${module} loads under Node ${runtime.nodeVersion} (ABI ${runtime.runtimeAbi})`,
219
+ };
220
+ }
221
+ const text = `${res.stderr ?? ''}\n${res.stdout ?? ''}`.trim();
222
+ const crashed = res.signal ? ` (killed by ${res.signal})` : '';
223
+ return diagnoseNativeLoadError(new Error(text || `probe exited with status ${res.status}${crashed}`), module, runtime, entry);
224
+ }
225
+ /**
226
+ * Decides whether monomind may rebuild the module itself. Deliberately
227
+ * conservative: a native rebuild mutates an install tree that may be a shared or
228
+ * root-owned global one, so it only runs when the current user can actually
229
+ * write there and the user hasn't opted out.
230
+ */
231
+ export function planAutoRebuild(diag, opts = {}) {
232
+ if (diag.status === 'ok')
233
+ return { attempt: false, reason: 'binding already loads' };
234
+ if (opts.disabled)
235
+ return { attempt: false, reason: 'MONOMIND_NO_NATIVE_REBUILD is set' };
236
+ if (!diag.target)
237
+ return { attempt: false, reason: 'could not locate the install directory' };
238
+ const writable = opts.isWritable ?? defaultIsWritable;
239
+ if (!writable(diag.target.rebuildCwd)) {
240
+ return { attempt: false, reason: `${diag.target.rebuildCwd} is not writable by this user` };
241
+ }
242
+ return { attempt: true, reason: `rebuilding in ${diag.target.rebuildCwd}` };
243
+ }
244
+ function defaultIsWritable(dir) {
245
+ try {
246
+ accessSync(dir, constants.W_OK);
247
+ return true;
248
+ }
249
+ catch {
250
+ return false;
251
+ }
252
+ }
253
+ /** Runs the single rebuild `planAutoRebuild` approved. */
254
+ export function runNativeRebuild(diag) {
255
+ const target = diag.target;
256
+ if (!target)
257
+ return { ok: false, command: '', output: 'no rebuild target' };
258
+ const bin = target.packageManager === 'pnpm' ? 'pnpm' : 'npm';
259
+ const args = ['rebuild', diag.module];
260
+ if (bin === 'npm' && diag.status === 'abi-mismatch')
261
+ args.push('--build-from-source');
262
+ const res = spawnSync(bin, args, {
263
+ cwd: target.rebuildCwd,
264
+ encoding: 'utf8',
265
+ timeout: 15 * 60_000,
266
+ // node-gyp compiles against whichever `node` it finds on PATH. If monomind
267
+ // is running under a different Node than the PATH default — the exact
268
+ // situation that produces an ABI mismatch — an inherited PATH would rebuild
269
+ // for the wrong ABI again, so put the running Node first.
270
+ env: {
271
+ ...process.env,
272
+ PATH: `${dirname(process.execPath)}${delimiter}${process.env.PATH ?? ''}`,
273
+ },
274
+ });
275
+ return {
276
+ ok: res.status === 0,
277
+ command: `cd ${target.rebuildCwd} && ${bin} ${args.join(' ')}`,
278
+ output: `${res.stdout ?? ''}${res.stderr ?? ''}`.trim(),
279
+ };
280
+ }
281
+ //# sourceMappingURL=native-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-binding.js","sourceRoot":"","sources":["../../../src/utils/native-binding.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"native-error.d.ts","sourceRoot":"","sources":["../../../src/utils/native-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2DrE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1E"}
1
+ {"version":3,"file":"native-error.d.ts","sourceRoot":"","sources":["../../../src/utils/native-error.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0ErE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1E"}
@@ -1,3 +1,4 @@
1
+ import { deriveRebuildTarget } from './native-binding.js';
1
2
  /**
2
3
  * Formats an Error together with its `.cause`, if present, so wrapper errors
3
4
  * (e.g. MonographError('Failed to open database at ...', err)) don't silently
@@ -30,8 +31,21 @@ export function classifyNativeModuleError(text) {
30
31
  ];
31
32
  if (pairs.length > 0) {
32
33
  const [, builtFor, required] = pairs[pairs.length - 1];
34
+ // Name the directory that actually owns the binary. Issue #231's reporter ran
35
+ // `npm rebuild` five times from their project and against a separate global
36
+ // copy, all of which left the loaded file byte-identical — because none of
37
+ // them was the tree it lives in.
38
+ const binaryPath = text.match(/The module '([^']+)'/)?.[1];
39
+ const target = binaryPath ? deriveRebuildTarget(binaryPath) : null;
40
+ const precise = target
41
+ ? `The binary actually loaded is ${binaryPath} — rebuild it where it lives: ` +
42
+ `\`cd ${target.rebuildCwd} && ${target.packageManager === 'pnpm'
43
+ ? 'pnpm rebuild better-sqlite3'
44
+ : 'npm rebuild better-sqlite3 --build-from-source'}\`. A rebuild run anywhere else will not touch that file. `
45
+ : '';
33
46
  return (`Native module built for Node ABI ${builtFor}, but this Node needs ABI ${required} ` +
34
- `(NODE_MODULE_VERSION mismatch). Try: delete the module's build/ or prebuilds/ ` +
47
+ `(NODE_MODULE_VERSION mismatch). ${precise}` +
48
+ `Otherwise: delete the module's build/ or prebuilds/ ` +
35
49
  `directory and reinstall, or reinstall under the exact Node version you run ` +
36
50
  `monomind with. If a plain reinstall never changes the binary at all (same size, ` +
37
51
  `same mtime, every time), it's likely resolving a cached prebuilt asset instead of ` +
@@ -1 +1 @@
1
- {"version":3,"file":"native-error.js","sourceRoot":"","sources":["../../../src/utils/native-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,KAAK,GAAI,GAA2B,CAAC,KAAK,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC5C,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,0EAA0E;IAC1E,uEAAuE;IACvE,sEAAsE;IACtE,uEAAuE;IACvE,qEAAqE;IACrE,kDAAkD;IAClD,MAAM,KAAK,GAAG;QACZ,GAAG,IAAI,CAAC,QAAQ,CAAC,mEAAmE,CAAC;KACtF,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvD,OAAO,CACL,oCAAoC,QAAQ,6BAA6B,QAAQ,GAAG;YACpF,gFAAgF;YAChF,6EAA6E;YAC7E,kFAAkF;YAClF,oFAAoF;YACpF,8DAA8D;YAC9D,gFAAgF;YAChF,kFAAkF;YAClF,mFAAmF;YACnF,6EAA6E;YAC7E,gFAAgF;YAChF,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IACD,IAAI,mDAAmD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO,CACL,8EAA8E;YAC9E,uFAAuF,CACxF,CAAC;IACJ,CAAC;IACD,0EAA0E;IAC1E,sEAAsE;IACtE,sEAAsE;IACtE,+DAA+D;IAC/D,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC;IAClF,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,yEAAyE;QACzE,wEAAwE;QACxE,uEAAuE;QACvE,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,WAAW,GAAG,IAAI;aACrB,KAAK,CAAC,WAAW,CAAC;aAClB,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CACL,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,iBAAiB,gCAAgC;YACvF,wFAAwF;YACxF,sDAAsD;YACtD,iBAAiB,UAAU,IAAI,UAAU,8CAA8C;YACvF,iCAAiC,CAClC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAY;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACjF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"native-error.js","sourceRoot":"","sources":["../../../src/utils/native-error.ts"],"names":[],"mappings":"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"}