formative-memory 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -4
- package/dist/cli.js +4 -2
- package/dist/{db-D1Sc76VE.js → db-Cqpy00Ox.js} +4 -1
- package/dist/index.js +896 -254
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { n as MemorySourceGuard, r as TemporalStateGuard, t as MemoryDatabase } from "./db-
|
|
1
|
+
import { n as MemorySourceGuard, r as TemporalStateGuard, t as MemoryDatabase } from "./db-Cqpy00Ox.js";
|
|
2
2
|
import { basename, dirname, isAbsolute, join, relative, sep } from "node:path";
|
|
3
3
|
import { appendFileSync, copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, statSync, writeFileSync } from "node:fs";
|
|
4
|
-
import {
|
|
4
|
+
import { getMemoryEmbeddingProvider, listMemoryEmbeddingProviders } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { delegateCompactionToRuntime } from "openclaw/plugin-sdk";
|
|
7
|
+
|
|
7
8
|
//#region \0rolldown/runtime.js
|
|
8
9
|
var __create = Object.create;
|
|
9
10
|
var __defProp = Object.defineProperty;
|
|
@@ -14,20 +15,28 @@ var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
|
14
15
|
var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
15
16
|
var __exportAll = (all, no_symbols) => {
|
|
16
17
|
let target = {};
|
|
17
|
-
for (var name in all)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
for (var name in all) {
|
|
19
|
+
__defProp(target, name, {
|
|
20
|
+
get: all[name],
|
|
21
|
+
enumerable: true
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
if (!no_symbols) {
|
|
25
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
26
|
+
}
|
|
22
27
|
return target;
|
|
23
28
|
};
|
|
24
29
|
var __copyProps = (to, from, except, desc) => {
|
|
25
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
31
|
+
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
32
|
+
key = keys[i];
|
|
33
|
+
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
34
|
+
__defProp(to, key, {
|
|
35
|
+
get: ((k) => from[k]).bind(null, key),
|
|
36
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
31
40
|
}
|
|
32
41
|
return to;
|
|
33
42
|
};
|
|
@@ -35,6 +44,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
35
44
|
value: mod,
|
|
36
45
|
enumerable: true
|
|
37
46
|
}) : target, mod));
|
|
47
|
+
|
|
38
48
|
//#endregion
|
|
39
49
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs
|
|
40
50
|
/** Returns true if this value is an async iterator */
|
|
@@ -97,6 +107,7 @@ function IsUint8Array$2(value) {
|
|
|
97
107
|
function IsUndefined$3(value) {
|
|
98
108
|
return value === void 0;
|
|
99
109
|
}
|
|
110
|
+
|
|
100
111
|
//#endregion
|
|
101
112
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs
|
|
102
113
|
function ArrayType(value) {
|
|
@@ -124,6 +135,7 @@ function Visit$2(value) {
|
|
|
124
135
|
function Clone(value) {
|
|
125
136
|
return Visit$2(value);
|
|
126
137
|
}
|
|
138
|
+
|
|
127
139
|
//#endregion
|
|
128
140
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs
|
|
129
141
|
/** Clones a Type */
|
|
@@ -133,6 +145,7 @@ function CloneType(schema, options) {
|
|
|
133
145
|
...schema
|
|
134
146
|
});
|
|
135
147
|
}
|
|
148
|
+
|
|
136
149
|
//#endregion
|
|
137
150
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs
|
|
138
151
|
/** Returns true of this value is an object type */
|
|
@@ -151,6 +164,7 @@ function IsUndefined$2(value) {
|
|
|
151
164
|
function IsNumber$2(value) {
|
|
152
165
|
return typeof value === "number";
|
|
153
166
|
}
|
|
167
|
+
|
|
154
168
|
//#endregion
|
|
155
169
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/system/policy.mjs
|
|
156
170
|
var TypeSystemPolicy;
|
|
@@ -200,6 +214,7 @@ var TypeSystemPolicy;
|
|
|
200
214
|
}
|
|
201
215
|
TypeSystemPolicy.IsVoidLike = IsVoidLike;
|
|
202
216
|
})(TypeSystemPolicy || (TypeSystemPolicy = {}));
|
|
217
|
+
|
|
203
218
|
//#endregion
|
|
204
219
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/create/immutable.mjs
|
|
205
220
|
function ImmutableArray(value) {
|
|
@@ -224,6 +239,7 @@ function ImmutableObject(value) {
|
|
|
224
239
|
function Immutable(value) {
|
|
225
240
|
return IsArray$3(value) ? ImmutableArray(value) : IsDate$2(value) ? ImmutableDate(value) : IsUint8Array$2(value) ? ImmutableUint8Array(value) : IsRegExp$2(value) ? ImmutableRegExp(value) : IsObject$3(value) ? ImmutableObject(value) : value;
|
|
226
241
|
}
|
|
242
|
+
|
|
227
243
|
//#endregion
|
|
228
244
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/create/type.mjs
|
|
229
245
|
/** Creates TypeBox schematics using the configured InstanceMode */
|
|
@@ -238,6 +254,7 @@ function CreateType(schema, options) {
|
|
|
238
254
|
default: return result;
|
|
239
255
|
}
|
|
240
256
|
}
|
|
257
|
+
|
|
241
258
|
//#endregion
|
|
242
259
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/error/error.mjs
|
|
243
260
|
/** The base Error type thrown for all TypeBox exceptions */
|
|
@@ -246,6 +263,7 @@ var TypeBoxError = class extends Error {
|
|
|
246
263
|
super(message);
|
|
247
264
|
}
|
|
248
265
|
};
|
|
266
|
+
|
|
249
267
|
//#endregion
|
|
250
268
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs
|
|
251
269
|
/** Symbol key applied to transform types */
|
|
@@ -258,6 +276,7 @@ const OptionalKind = Symbol.for("TypeBox.Optional");
|
|
|
258
276
|
const Hint = Symbol.for("TypeBox.Hint");
|
|
259
277
|
/** Symbol key applied to types */
|
|
260
278
|
const Kind = Symbol.for("TypeBox.Kind");
|
|
279
|
+
|
|
261
280
|
//#endregion
|
|
262
281
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs
|
|
263
282
|
/** `[Kind-Only]` Returns true if this value has a Readonly symbol */
|
|
@@ -432,6 +451,7 @@ function IsKind$1(value) {
|
|
|
432
451
|
function IsSchema$1(value) {
|
|
433
452
|
return IsAny$1(value) || IsArgument$1(value) || IsArray$1(value) || IsBoolean$1(value) || IsBigInt$1(value) || IsAsyncIterator$1(value) || IsComputed$1(value) || IsConstructor$1(value) || IsDate$1(value) || IsFunction$1(value) || IsInteger$1(value) || IsIntersect$1(value) || IsIterator$1(value) || IsLiteral$1(value) || IsMappedKey$1(value) || IsMappedResult$1(value) || IsNever$1(value) || IsNot$1(value) || IsNull$1(value) || IsNumber$1(value) || IsObject$1(value) || IsPromise$1(value) || IsRecord$1(value) || IsRef$1(value) || IsRegExp$1(value) || IsString$1(value) || IsSymbol$1(value) || IsTemplateLiteral$1(value) || IsThis$1(value) || IsTuple$1(value) || IsUndefined$1(value) || IsUnion$1(value) || IsUint8Array$1(value) || IsUnknown$1(value) || IsUnsafe$1(value) || IsVoid$1(value) || IsKind$1(value);
|
|
434
453
|
}
|
|
454
|
+
|
|
435
455
|
//#endregion
|
|
436
456
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs
|
|
437
457
|
const KnownTypes = [
|
|
@@ -698,16 +718,18 @@ function IsKind(value) {
|
|
|
698
718
|
function IsSchema(value) {
|
|
699
719
|
return IsObject$3(value) && (IsAny(value) || IsArgument(value) || IsArray(value) || IsBoolean(value) || IsBigInt(value) || IsAsyncIterator(value) || IsComputed(value) || IsConstructor(value) || IsDate(value) || IsFunction(value) || IsInteger(value) || IsIntersect(value) || IsIterator(value) || IsLiteral(value) || IsMappedKey(value) || IsMappedResult(value) || IsNever(value) || IsNot(value) || IsNull(value) || IsNumber(value) || IsObject(value) || IsPromise(value) || IsRecord(value) || IsRef(value) || IsRegExp(value) || IsString(value) || IsSymbol(value) || IsTemplateLiteral(value) || IsThis(value) || IsTuple(value) || IsUndefined(value) || IsUnion(value) || IsUint8Array(value) || IsUnknown(value) || IsUnsafe(value) || IsVoid(value) || IsKind(value));
|
|
700
720
|
}
|
|
721
|
+
|
|
701
722
|
//#endregion
|
|
702
723
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs
|
|
703
724
|
const PatternBoolean = "(true|false)";
|
|
704
725
|
const PatternNumber = "(0|[1-9][0-9]*)";
|
|
705
726
|
const PatternString = "(.*)";
|
|
706
727
|
const PatternNever = "(?!.*)";
|
|
707
|
-
|
|
728
|
+
const PatternBooleanExact = `^${PatternBoolean}$`;
|
|
708
729
|
const PatternNumberExact = `^${PatternNumber}$`;
|
|
709
730
|
const PatternStringExact = `^${PatternString}$`;
|
|
710
731
|
const PatternNeverExact = `^${PatternNever}$`;
|
|
732
|
+
|
|
711
733
|
//#endregion
|
|
712
734
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs
|
|
713
735
|
/** Returns true if element right is in the set of left */
|
|
@@ -736,12 +758,14 @@ function SetUnionMany(T) {
|
|
|
736
758
|
for (const L of T) Acc.push(...L);
|
|
737
759
|
return Acc;
|
|
738
760
|
}
|
|
761
|
+
|
|
739
762
|
//#endregion
|
|
740
763
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/any/any.mjs
|
|
741
764
|
/** `[Json]` Creates an Any type */
|
|
742
765
|
function Any(options) {
|
|
743
766
|
return CreateType({ [Kind]: "Any" }, options);
|
|
744
767
|
}
|
|
768
|
+
|
|
745
769
|
//#endregion
|
|
746
770
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/array/array.mjs
|
|
747
771
|
/** `[Json]` Creates an Array type */
|
|
@@ -752,6 +776,7 @@ function Array$1(items, options) {
|
|
|
752
776
|
items
|
|
753
777
|
}, options);
|
|
754
778
|
}
|
|
779
|
+
|
|
755
780
|
//#endregion
|
|
756
781
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/argument/argument.mjs
|
|
757
782
|
/** `[JavaScript]` Creates an Argument Type. */
|
|
@@ -761,6 +786,7 @@ function Argument(index) {
|
|
|
761
786
|
index
|
|
762
787
|
});
|
|
763
788
|
}
|
|
789
|
+
|
|
764
790
|
//#endregion
|
|
765
791
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs
|
|
766
792
|
/** `[JavaScript]` Creates a AsyncIterator type */
|
|
@@ -771,6 +797,7 @@ function AsyncIterator(items, options) {
|
|
|
771
797
|
items
|
|
772
798
|
}, options);
|
|
773
799
|
}
|
|
800
|
+
|
|
774
801
|
//#endregion
|
|
775
802
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/computed/computed.mjs
|
|
776
803
|
/** `[Internal]` Creates a deferred computed type. This type is used exclusively in modules to defer resolution of computable types that contain interior references */
|
|
@@ -781,6 +808,7 @@ function Computed(target, parameters, options) {
|
|
|
781
808
|
parameters
|
|
782
809
|
}, options);
|
|
783
810
|
}
|
|
811
|
+
|
|
784
812
|
//#endregion
|
|
785
813
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs
|
|
786
814
|
function DiscardKey(value, key) {
|
|
@@ -791,6 +819,7 @@ function DiscardKey(value, key) {
|
|
|
791
819
|
function Discard(value, keys) {
|
|
792
820
|
return keys.reduce((acc, key) => DiscardKey(acc, key), value);
|
|
793
821
|
}
|
|
822
|
+
|
|
794
823
|
//#endregion
|
|
795
824
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/never/never.mjs
|
|
796
825
|
/** `[Json]` Creates a Never type */
|
|
@@ -800,6 +829,7 @@ function Never(options) {
|
|
|
800
829
|
not: {}
|
|
801
830
|
}, options);
|
|
802
831
|
}
|
|
832
|
+
|
|
803
833
|
//#endregion
|
|
804
834
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs
|
|
805
835
|
function MappedResult(properties) {
|
|
@@ -808,6 +838,7 @@ function MappedResult(properties) {
|
|
|
808
838
|
properties
|
|
809
839
|
});
|
|
810
840
|
}
|
|
841
|
+
|
|
811
842
|
//#endregion
|
|
812
843
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs
|
|
813
844
|
/** `[JavaScript]` Creates a Constructor type */
|
|
@@ -819,6 +850,7 @@ function Constructor(parameters, returns, options) {
|
|
|
819
850
|
returns
|
|
820
851
|
}, options);
|
|
821
852
|
}
|
|
853
|
+
|
|
822
854
|
//#endregion
|
|
823
855
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/function/function.mjs
|
|
824
856
|
/** `[JavaScript]` Creates a Function type */
|
|
@@ -830,6 +862,7 @@ function Function(parameters, returns, options) {
|
|
|
830
862
|
returns
|
|
831
863
|
}, options);
|
|
832
864
|
}
|
|
865
|
+
|
|
833
866
|
//#endregion
|
|
834
867
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs
|
|
835
868
|
function UnionCreate(T, options) {
|
|
@@ -838,6 +871,7 @@ function UnionCreate(T, options) {
|
|
|
838
871
|
anyOf: T
|
|
839
872
|
}, options);
|
|
840
873
|
}
|
|
874
|
+
|
|
841
875
|
//#endregion
|
|
842
876
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs
|
|
843
877
|
function IsUnionOptional(types) {
|
|
@@ -856,12 +890,14 @@ function ResolveUnion(types, options) {
|
|
|
856
890
|
function UnionEvaluated(T, options) {
|
|
857
891
|
return T.length === 1 ? CreateType(T[0], options) : T.length === 0 ? Never(options) : ResolveUnion(T, options);
|
|
858
892
|
}
|
|
893
|
+
|
|
859
894
|
//#endregion
|
|
860
895
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/union/union.mjs
|
|
861
896
|
/** `[Json]` Creates a Union type */
|
|
862
897
|
function Union(types, options) {
|
|
863
898
|
return types.length === 0 ? Never(options) : types.length === 1 ? CreateType(types[0], options) : UnionCreate(types, options);
|
|
864
899
|
}
|
|
900
|
+
|
|
865
901
|
//#endregion
|
|
866
902
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs
|
|
867
903
|
var TemplateLiteralParserError = class extends TypeBoxError {};
|
|
@@ -976,6 +1012,7 @@ function TemplateLiteralParse(pattern) {
|
|
|
976
1012
|
function TemplateLiteralParseExact(pattern) {
|
|
977
1013
|
return TemplateLiteralParse(pattern.slice(1, pattern.length - 1));
|
|
978
1014
|
}
|
|
1015
|
+
|
|
979
1016
|
//#endregion
|
|
980
1017
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs
|
|
981
1018
|
var TemplateLiteralFiniteError = class extends TypeBoxError {};
|
|
@@ -997,6 +1034,7 @@ function IsTemplateLiteralExpressionFinite(expression) {
|
|
|
997
1034
|
function IsTemplateLiteralFinite(schema) {
|
|
998
1035
|
return IsTemplateLiteralExpressionFinite(TemplateLiteralParseExact(schema.pattern));
|
|
999
1036
|
}
|
|
1037
|
+
|
|
1000
1038
|
//#endregion
|
|
1001
1039
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs
|
|
1002
1040
|
var TemplateLiteralGenerateError = class extends TypeBoxError {};
|
|
@@ -1023,6 +1061,7 @@ function TemplateLiteralGenerate(schema) {
|
|
|
1023
1061
|
const expression = TemplateLiteralParseExact(schema.pattern);
|
|
1024
1062
|
return IsTemplateLiteralExpressionFinite(expression) ? [...TemplateLiteralExpressionGenerate(expression)] : [];
|
|
1025
1063
|
}
|
|
1064
|
+
|
|
1026
1065
|
//#endregion
|
|
1027
1066
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs
|
|
1028
1067
|
/** `[Json]` Creates a Literal type */
|
|
@@ -1033,6 +1072,7 @@ function Literal(value, options) {
|
|
|
1033
1072
|
type: typeof value
|
|
1034
1073
|
}, options);
|
|
1035
1074
|
}
|
|
1075
|
+
|
|
1036
1076
|
//#endregion
|
|
1037
1077
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs
|
|
1038
1078
|
/** `[Json]` Creates a Boolean type */
|
|
@@ -1042,6 +1082,7 @@ function Boolean$1(options) {
|
|
|
1042
1082
|
type: "boolean"
|
|
1043
1083
|
}, options);
|
|
1044
1084
|
}
|
|
1085
|
+
|
|
1045
1086
|
//#endregion
|
|
1046
1087
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs
|
|
1047
1088
|
/** `[JavaScript]` Creates a BigInt type */
|
|
@@ -1051,6 +1092,7 @@ function BigInt(options) {
|
|
|
1051
1092
|
type: "bigint"
|
|
1052
1093
|
}, options);
|
|
1053
1094
|
}
|
|
1095
|
+
|
|
1054
1096
|
//#endregion
|
|
1055
1097
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/number/number.mjs
|
|
1056
1098
|
/** `[Json]` Creates a Number type */
|
|
@@ -1060,6 +1102,7 @@ function Number$1(options) {
|
|
|
1060
1102
|
type: "number"
|
|
1061
1103
|
}, options);
|
|
1062
1104
|
}
|
|
1105
|
+
|
|
1063
1106
|
//#endregion
|
|
1064
1107
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/string/string.mjs
|
|
1065
1108
|
/** `[Json]` Creates a String type */
|
|
@@ -1069,6 +1112,7 @@ function String$1(options) {
|
|
|
1069
1112
|
type: "string"
|
|
1070
1113
|
}, options);
|
|
1071
1114
|
}
|
|
1115
|
+
|
|
1072
1116
|
//#endregion
|
|
1073
1117
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs
|
|
1074
1118
|
function* FromUnion$9(syntax) {
|
|
@@ -1095,6 +1139,7 @@ function* FromSyntax(syntax) {
|
|
|
1095
1139
|
function TemplateLiteralSyntax(syntax) {
|
|
1096
1140
|
return [...FromSyntax(syntax)];
|
|
1097
1141
|
}
|
|
1142
|
+
|
|
1098
1143
|
//#endregion
|
|
1099
1144
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs
|
|
1100
1145
|
var TemplateLiteralPatternError = class extends TypeBoxError {};
|
|
@@ -1109,12 +1154,14 @@ function Visit$1(schema, acc) {
|
|
|
1109
1154
|
function TemplateLiteralPattern(kinds) {
|
|
1110
1155
|
return `^${kinds.map((schema) => Visit$1(schema, "")).join("")}\$`;
|
|
1111
1156
|
}
|
|
1157
|
+
|
|
1112
1158
|
//#endregion
|
|
1113
1159
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs
|
|
1114
1160
|
/** Returns a Union from the given TemplateLiteral */
|
|
1115
1161
|
function TemplateLiteralToUnion(schema) {
|
|
1116
1162
|
return UnionEvaluated(TemplateLiteralGenerate(schema).map((S) => Literal(S)));
|
|
1117
1163
|
}
|
|
1164
|
+
|
|
1118
1165
|
//#endregion
|
|
1119
1166
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs
|
|
1120
1167
|
/** `[Json]` Creates a TemplateLiteral type */
|
|
@@ -1126,6 +1173,7 @@ function TemplateLiteral(unresolved, options) {
|
|
|
1126
1173
|
pattern
|
|
1127
1174
|
}, options);
|
|
1128
1175
|
}
|
|
1176
|
+
|
|
1129
1177
|
//#endregion
|
|
1130
1178
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs
|
|
1131
1179
|
function FromTemplateLiteral$2(templateLiteral) {
|
|
@@ -1143,6 +1191,7 @@ function FromLiteral$1(literalValue) {
|
|
|
1143
1191
|
function IndexPropertyKeys(type) {
|
|
1144
1192
|
return [...new Set(IsTemplateLiteral$1(type) ? FromTemplateLiteral$2(type) : IsUnion$1(type) ? FromUnion$8(type.anyOf) : IsLiteral$1(type) ? FromLiteral$1(type.const) : IsNumber$1(type) ? ["[number]"] : IsInteger$1(type) ? ["[number]"] : [])];
|
|
1145
1193
|
}
|
|
1194
|
+
|
|
1146
1195
|
//#endregion
|
|
1147
1196
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs
|
|
1148
1197
|
function FromProperties$18(type, properties, options) {
|
|
@@ -1156,6 +1205,7 @@ function FromMappedResult$11(type, mappedResult, options) {
|
|
|
1156
1205
|
function IndexFromMappedResult(type, mappedResult, options) {
|
|
1157
1206
|
return MappedResult(FromMappedResult$11(type, mappedResult, options));
|
|
1158
1207
|
}
|
|
1208
|
+
|
|
1159
1209
|
//#endregion
|
|
1160
1210
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs
|
|
1161
1211
|
function FromRest$6(types, key) {
|
|
@@ -1202,6 +1252,7 @@ function Index(type, key, options) {
|
|
|
1202
1252
|
if (IsMappedKey$1(key)) return IndexFromMappedKey(type, key, options);
|
|
1203
1253
|
return CreateType(IsSchema$1(key) ? FromSchema(type, IndexPropertyKeys(key)) : FromSchema(type, key), options);
|
|
1204
1254
|
}
|
|
1255
|
+
|
|
1205
1256
|
//#endregion
|
|
1206
1257
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs
|
|
1207
1258
|
function MappedIndexPropertyKey(type, key, options) {
|
|
@@ -1221,6 +1272,7 @@ function MappedIndexProperties(type, mappedKey, options) {
|
|
|
1221
1272
|
function IndexFromMappedKey(type, mappedKey, options) {
|
|
1222
1273
|
return MappedResult(MappedIndexProperties(type, mappedKey, options));
|
|
1223
1274
|
}
|
|
1275
|
+
|
|
1224
1276
|
//#endregion
|
|
1225
1277
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs
|
|
1226
1278
|
/** `[JavaScript]` Creates an Iterator type */
|
|
@@ -1231,6 +1283,7 @@ function Iterator(items, options) {
|
|
|
1231
1283
|
items
|
|
1232
1284
|
}, options);
|
|
1233
1285
|
}
|
|
1286
|
+
|
|
1234
1287
|
//#endregion
|
|
1235
1288
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/object/object.mjs
|
|
1236
1289
|
/** Creates a RequiredArray derived from the given TProperties value. */
|
|
@@ -1253,6 +1306,7 @@ function _Object(properties, options) {
|
|
|
1253
1306
|
}
|
|
1254
1307
|
/** `[Json]` Creates an Object type */
|
|
1255
1308
|
var Object$1 = _Object;
|
|
1309
|
+
|
|
1256
1310
|
//#endregion
|
|
1257
1311
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs
|
|
1258
1312
|
/** `[JavaScript]` Creates a Promise type */
|
|
@@ -1263,6 +1317,7 @@ function Promise$1(item, options) {
|
|
|
1263
1317
|
item
|
|
1264
1318
|
}, options);
|
|
1265
1319
|
}
|
|
1320
|
+
|
|
1266
1321
|
//#endregion
|
|
1267
1322
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs
|
|
1268
1323
|
function RemoveReadonly(schema) {
|
|
@@ -1282,6 +1337,7 @@ function Readonly(schema, enable) {
|
|
|
1282
1337
|
const F = enable ?? true;
|
|
1283
1338
|
return IsMappedResult$1(schema) ? ReadonlyFromMappedResult(schema, F) : ReadonlyWithFlag(schema, F);
|
|
1284
1339
|
}
|
|
1340
|
+
|
|
1285
1341
|
//#endregion
|
|
1286
1342
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs
|
|
1287
1343
|
function FromProperties$17(K, F) {
|
|
@@ -1295,6 +1351,7 @@ function FromMappedResult$10(R, F) {
|
|
|
1295
1351
|
function ReadonlyFromMappedResult(R, F) {
|
|
1296
1352
|
return MappedResult(FromMappedResult$10(R, F));
|
|
1297
1353
|
}
|
|
1354
|
+
|
|
1298
1355
|
//#endregion
|
|
1299
1356
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs
|
|
1300
1357
|
/** `[Json]` Creates a Tuple type */
|
|
@@ -1313,6 +1370,7 @@ function Tuple(types, options) {
|
|
|
1313
1370
|
maxItems: types.length
|
|
1314
1371
|
}, options);
|
|
1315
1372
|
}
|
|
1373
|
+
|
|
1316
1374
|
//#endregion
|
|
1317
1375
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs
|
|
1318
1376
|
function FromMappedResult$9(K, P) {
|
|
@@ -1357,6 +1415,7 @@ function Mapped(key, map, options) {
|
|
|
1357
1415
|
keys: K
|
|
1358
1416
|
})), options);
|
|
1359
1417
|
}
|
|
1418
|
+
|
|
1360
1419
|
//#endregion
|
|
1361
1420
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs
|
|
1362
1421
|
function RemoveOptional(schema) {
|
|
@@ -1376,6 +1435,7 @@ function Optional(schema, enable) {
|
|
|
1376
1435
|
const F = enable ?? true;
|
|
1377
1436
|
return IsMappedResult$1(schema) ? OptionalFromMappedResult(schema, F) : OptionalWithFlag(schema, F);
|
|
1378
1437
|
}
|
|
1438
|
+
|
|
1379
1439
|
//#endregion
|
|
1380
1440
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs
|
|
1381
1441
|
function FromProperties$15(P, F) {
|
|
@@ -1389,6 +1449,7 @@ function FromMappedResult$8(R, F) {
|
|
|
1389
1449
|
function OptionalFromMappedResult(R, F) {
|
|
1390
1450
|
return MappedResult(FromMappedResult$8(R, F));
|
|
1391
1451
|
}
|
|
1452
|
+
|
|
1392
1453
|
//#endregion
|
|
1393
1454
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs
|
|
1394
1455
|
function IntersectCreate(T, options = {}) {
|
|
@@ -1405,6 +1466,7 @@ function IntersectCreate(T, options = {}) {
|
|
|
1405
1466
|
allOf: T
|
|
1406
1467
|
}, options);
|
|
1407
1468
|
}
|
|
1469
|
+
|
|
1408
1470
|
//#endregion
|
|
1409
1471
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs
|
|
1410
1472
|
function IsIntersectOptional(types) {
|
|
@@ -1426,6 +1488,7 @@ function IntersectEvaluated(types, options = {}) {
|
|
|
1426
1488
|
if (types.some((schema) => IsTransform$1(schema))) throw new Error("Cannot intersect transform types");
|
|
1427
1489
|
return ResolveIntersect(types, options);
|
|
1428
1490
|
}
|
|
1491
|
+
|
|
1429
1492
|
//#endregion
|
|
1430
1493
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs
|
|
1431
1494
|
/** `[Json]` Creates an evaluated Intersect type */
|
|
@@ -1435,6 +1498,7 @@ function Intersect(types, options) {
|
|
|
1435
1498
|
if (types.some((schema) => IsTransform$1(schema))) throw new Error("Cannot intersect transform types");
|
|
1436
1499
|
return IntersectCreate(types, options);
|
|
1437
1500
|
}
|
|
1501
|
+
|
|
1438
1502
|
//#endregion
|
|
1439
1503
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs
|
|
1440
1504
|
/** `[Json]` Creates a Ref type. The referenced type must contain a $id */
|
|
@@ -1446,6 +1510,7 @@ function Ref(...args) {
|
|
|
1446
1510
|
$ref
|
|
1447
1511
|
}, options);
|
|
1448
1512
|
}
|
|
1513
|
+
|
|
1449
1514
|
//#endregion
|
|
1450
1515
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs
|
|
1451
1516
|
function FromComputed$4(target, parameters) {
|
|
@@ -1470,6 +1535,7 @@ function FromRest$4(types) {
|
|
|
1470
1535
|
function Awaited(type, options) {
|
|
1471
1536
|
return CreateType(IsComputed$1(type) ? FromComputed$4(type.target, type.parameters) : IsIntersect$1(type) ? FromIntersect$6(type.allOf) : IsUnion$1(type) ? FromUnion$6(type.anyOf) : IsPromise$1(type) ? FromPromise$2(type.item) : IsRef$1(type) ? FromRef$3(type.$ref) : type, options);
|
|
1472
1537
|
}
|
|
1538
|
+
|
|
1473
1539
|
//#endregion
|
|
1474
1540
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs
|
|
1475
1541
|
function FromRest$3(types) {
|
|
@@ -1503,6 +1569,7 @@ function KeyOfPropertyKeys(type) {
|
|
|
1503
1569
|
return IsIntersect$1(type) ? FromIntersect$5(type.allOf) : IsUnion$1(type) ? FromUnion$5(type.anyOf) : IsTuple$1(type) ? FromTuple$3(type.items ?? []) : IsArray$1(type) ? FromArray$4(type.items) : IsObject$1(type) ? FromProperties$14(type.properties) : IsRecord$1(type) ? FromPatternProperties(type.patternProperties) : [];
|
|
1504
1570
|
}
|
|
1505
1571
|
let includePatternProperties = false;
|
|
1572
|
+
|
|
1506
1573
|
//#endregion
|
|
1507
1574
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs
|
|
1508
1575
|
function FromComputed$3(target, parameters) {
|
|
@@ -1521,6 +1588,7 @@ function KeyOfPropertyKeysToRest(propertyKeys) {
|
|
|
1521
1588
|
function KeyOf(type, options) {
|
|
1522
1589
|
return IsComputed$1(type) ? FromComputed$3(type.target, type.parameters) : IsRef$1(type) ? FromRef$2(type.$ref) : IsMappedResult$1(type) ? KeyOfFromMappedResult(type, options) : KeyOfFromType(type, options);
|
|
1523
1590
|
}
|
|
1591
|
+
|
|
1524
1592
|
//#endregion
|
|
1525
1593
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs
|
|
1526
1594
|
function FromProperties$13(properties, options) {
|
|
@@ -1534,6 +1602,7 @@ function FromMappedResult$7(mappedResult, options) {
|
|
|
1534
1602
|
function KeyOfFromMappedResult(mappedResult, options) {
|
|
1535
1603
|
return MappedResult(FromMappedResult$7(mappedResult, options));
|
|
1536
1604
|
}
|
|
1605
|
+
|
|
1537
1606
|
//#endregion
|
|
1538
1607
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs
|
|
1539
1608
|
function CompositeKeys(T) {
|
|
@@ -1557,6 +1626,7 @@ function CompositeProperties(T, K) {
|
|
|
1557
1626
|
function Composite(T, options) {
|
|
1558
1627
|
return Object$1(CompositeProperties(T, CompositeKeys(T)), options);
|
|
1559
1628
|
}
|
|
1629
|
+
|
|
1560
1630
|
//#endregion
|
|
1561
1631
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/date/date.mjs
|
|
1562
1632
|
/** `[JavaScript]` Creates a Date type */
|
|
@@ -1566,6 +1636,7 @@ function Date$1(options) {
|
|
|
1566
1636
|
type: "Date"
|
|
1567
1637
|
}, options);
|
|
1568
1638
|
}
|
|
1639
|
+
|
|
1569
1640
|
//#endregion
|
|
1570
1641
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/null/null.mjs
|
|
1571
1642
|
/** `[Json]` Creates a Null type */
|
|
@@ -1575,6 +1646,7 @@ function Null(options) {
|
|
|
1575
1646
|
type: "null"
|
|
1576
1647
|
}, options);
|
|
1577
1648
|
}
|
|
1649
|
+
|
|
1578
1650
|
//#endregion
|
|
1579
1651
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs
|
|
1580
1652
|
/** `[JavaScript]` Creates a Symbol type */
|
|
@@ -1584,6 +1656,7 @@ function Symbol$1(options) {
|
|
|
1584
1656
|
type: "symbol"
|
|
1585
1657
|
}, options);
|
|
1586
1658
|
}
|
|
1659
|
+
|
|
1587
1660
|
//#endregion
|
|
1588
1661
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs
|
|
1589
1662
|
/** `[JavaScript]` Creates a Undefined type */
|
|
@@ -1593,6 +1666,7 @@ function Undefined(options) {
|
|
|
1593
1666
|
type: "undefined"
|
|
1594
1667
|
}, options);
|
|
1595
1668
|
}
|
|
1669
|
+
|
|
1596
1670
|
//#endregion
|
|
1597
1671
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs
|
|
1598
1672
|
/** `[JavaScript]` Creates a Uint8Array type */
|
|
@@ -1602,12 +1676,14 @@ function Uint8Array$1(options) {
|
|
|
1602
1676
|
type: "Uint8Array"
|
|
1603
1677
|
}, options);
|
|
1604
1678
|
}
|
|
1679
|
+
|
|
1605
1680
|
//#endregion
|
|
1606
1681
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs
|
|
1607
1682
|
/** `[Json]` Creates an Unknown type */
|
|
1608
1683
|
function Unknown(options) {
|
|
1609
1684
|
return CreateType({ [Kind]: "Unknown" }, options);
|
|
1610
1685
|
}
|
|
1686
|
+
|
|
1611
1687
|
//#endregion
|
|
1612
1688
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/const/const.mjs
|
|
1613
1689
|
function FromArray$3(T) {
|
|
@@ -1628,12 +1704,14 @@ function FromValue(value, root) {
|
|
|
1628
1704
|
function Const(T, options) {
|
|
1629
1705
|
return CreateType(FromValue(T, true), options);
|
|
1630
1706
|
}
|
|
1707
|
+
|
|
1631
1708
|
//#endregion
|
|
1632
1709
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs
|
|
1633
1710
|
/** `[JavaScript]` Extracts the ConstructorParameters from the given Constructor type */
|
|
1634
1711
|
function ConstructorParameters(schema, options) {
|
|
1635
1712
|
return IsConstructor$1(schema) ? Tuple(schema.parameters, options) : Never(options);
|
|
1636
1713
|
}
|
|
1714
|
+
|
|
1637
1715
|
//#endregion
|
|
1638
1716
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs
|
|
1639
1717
|
/** `[Json]` Creates a Enum type */
|
|
@@ -1645,6 +1723,7 @@ function Enum(item, options) {
|
|
|
1645
1723
|
[Hint]: "Enum"
|
|
1646
1724
|
});
|
|
1647
1725
|
}
|
|
1726
|
+
|
|
1648
1727
|
//#endregion
|
|
1649
1728
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs
|
|
1650
1729
|
var ExtendsResolverError = class extends TypeBoxError {};
|
|
@@ -1872,6 +1951,7 @@ function Visit(left, right) {
|
|
|
1872
1951
|
function ExtendsCheck(left, right) {
|
|
1873
1952
|
return Visit(left, right);
|
|
1874
1953
|
}
|
|
1954
|
+
|
|
1875
1955
|
//#endregion
|
|
1876
1956
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs
|
|
1877
1957
|
function FromProperties$11(P, Right, True, False, options) {
|
|
@@ -1885,6 +1965,7 @@ function FromMappedResult$6(Left, Right, True, False, options) {
|
|
|
1885
1965
|
function ExtendsFromMappedResult(Left, Right, True, False, options) {
|
|
1886
1966
|
return MappedResult(FromMappedResult$6(Left, Right, True, False, options));
|
|
1887
1967
|
}
|
|
1968
|
+
|
|
1888
1969
|
//#endregion
|
|
1889
1970
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs
|
|
1890
1971
|
function ExtendsResolve(left, right, trueType, falseType) {
|
|
@@ -1895,6 +1976,7 @@ function ExtendsResolve(left, right, trueType, falseType) {
|
|
|
1895
1976
|
function Extends(L, R, T, F, options) {
|
|
1896
1977
|
return IsMappedResult$1(L) ? ExtendsFromMappedResult(L, R, T, F, options) : IsMappedKey$1(L) ? CreateType(ExtendsFromMappedKey(L, R, T, F, options)) : CreateType(ExtendsResolve(L, R, T, F), options);
|
|
1897
1978
|
}
|
|
1979
|
+
|
|
1898
1980
|
//#endregion
|
|
1899
1981
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs
|
|
1900
1982
|
function FromPropertyKey$2(K, U, L, R, options) {
|
|
@@ -1914,11 +1996,13 @@ function FromMappedKey$2(K, U, L, R, options) {
|
|
|
1914
1996
|
function ExtendsFromMappedKey(T, U, L, R, options) {
|
|
1915
1997
|
return MappedResult(FromMappedKey$2(T, U, L, R, options));
|
|
1916
1998
|
}
|
|
1999
|
+
|
|
1917
2000
|
//#endregion
|
|
1918
2001
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs
|
|
1919
2002
|
function ExcludeFromTemplateLiteral(L, R) {
|
|
1920
2003
|
return Exclude(TemplateLiteralToUnion(L), R);
|
|
1921
2004
|
}
|
|
2005
|
+
|
|
1922
2006
|
//#endregion
|
|
1923
2007
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs
|
|
1924
2008
|
function ExcludeRest(L, R) {
|
|
@@ -1931,6 +2015,7 @@ function Exclude(L, R, options = {}) {
|
|
|
1931
2015
|
if (IsMappedResult$1(L)) return CreateType(ExcludeFromMappedResult(L, R), options);
|
|
1932
2016
|
return CreateType(IsUnion$1(L) ? ExcludeRest(L.anyOf, R) : ExtendsCheck(L, R) !== ExtendsResult.False ? Never() : L, options);
|
|
1933
2017
|
}
|
|
2018
|
+
|
|
1934
2019
|
//#endregion
|
|
1935
2020
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs
|
|
1936
2021
|
function FromProperties$10(P, U) {
|
|
@@ -1944,11 +2029,13 @@ function FromMappedResult$5(R, T) {
|
|
|
1944
2029
|
function ExcludeFromMappedResult(R, T) {
|
|
1945
2030
|
return MappedResult(FromMappedResult$5(R, T));
|
|
1946
2031
|
}
|
|
2032
|
+
|
|
1947
2033
|
//#endregion
|
|
1948
2034
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs
|
|
1949
2035
|
function ExtractFromTemplateLiteral(L, R) {
|
|
1950
2036
|
return Extract(TemplateLiteralToUnion(L), R);
|
|
1951
2037
|
}
|
|
2038
|
+
|
|
1952
2039
|
//#endregion
|
|
1953
2040
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs
|
|
1954
2041
|
function ExtractRest(L, R) {
|
|
@@ -1961,6 +2048,7 @@ function Extract(L, R, options) {
|
|
|
1961
2048
|
if (IsMappedResult$1(L)) return CreateType(ExtractFromMappedResult(L, R), options);
|
|
1962
2049
|
return CreateType(IsUnion$1(L) ? ExtractRest(L.anyOf, R) : ExtendsCheck(L, R) !== ExtendsResult.False ? L : Never(), options);
|
|
1963
2050
|
}
|
|
2051
|
+
|
|
1964
2052
|
//#endregion
|
|
1965
2053
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs
|
|
1966
2054
|
function FromProperties$9(P, T) {
|
|
@@ -1974,18 +2062,21 @@ function FromMappedResult$4(R, T) {
|
|
|
1974
2062
|
function ExtractFromMappedResult(R, T) {
|
|
1975
2063
|
return MappedResult(FromMappedResult$4(R, T));
|
|
1976
2064
|
}
|
|
2065
|
+
|
|
1977
2066
|
//#endregion
|
|
1978
2067
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs
|
|
1979
2068
|
/** `[JavaScript]` Extracts the InstanceType from the given Constructor type */
|
|
1980
2069
|
function InstanceType(schema, options) {
|
|
1981
2070
|
return IsConstructor$1(schema) ? CreateType(schema.returns, options) : Never(options);
|
|
1982
2071
|
}
|
|
2072
|
+
|
|
1983
2073
|
//#endregion
|
|
1984
2074
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs
|
|
1985
2075
|
/** `[Json]` Creates a Readonly and Optional property */
|
|
1986
2076
|
function ReadonlyOptional(schema) {
|
|
1987
2077
|
return Readonly(Optional(schema));
|
|
1988
2078
|
}
|
|
2079
|
+
|
|
1989
2080
|
//#endregion
|
|
1990
2081
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/record/record.mjs
|
|
1991
2082
|
function RecordCreateFromPattern(pattern, T, options) {
|
|
@@ -2053,6 +2144,7 @@ function RecordKey(type) {
|
|
|
2053
2144
|
function RecordValue(type) {
|
|
2054
2145
|
return type.patternProperties[RecordPattern(type)];
|
|
2055
2146
|
}
|
|
2147
|
+
|
|
2056
2148
|
//#endregion
|
|
2057
2149
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.mjs
|
|
2058
2150
|
function FromConstructor$1(args, type) {
|
|
@@ -2135,6 +2227,7 @@ function FromType$1(args, type) {
|
|
|
2135
2227
|
function Instantiate(type, args) {
|
|
2136
2228
|
return FromType$1(args, CloneType(type));
|
|
2137
2229
|
}
|
|
2230
|
+
|
|
2138
2231
|
//#endregion
|
|
2139
2232
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs
|
|
2140
2233
|
/** `[Json]` Creates an Integer type */
|
|
@@ -2144,6 +2237,7 @@ function Integer(options) {
|
|
|
2144
2237
|
type: "integer"
|
|
2145
2238
|
}, options);
|
|
2146
2239
|
}
|
|
2240
|
+
|
|
2147
2241
|
//#endregion
|
|
2148
2242
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs
|
|
2149
2243
|
function MappedIntrinsicPropertyKey(K, M, options) {
|
|
@@ -2163,6 +2257,7 @@ function MappedIntrinsicProperties(T, M, options) {
|
|
|
2163
2257
|
function IntrinsicFromMappedKey(T, M, options) {
|
|
2164
2258
|
return MappedResult(MappedIntrinsicProperties(T, M, options));
|
|
2165
2259
|
}
|
|
2260
|
+
|
|
2166
2261
|
//#endregion
|
|
2167
2262
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs
|
|
2168
2263
|
function ApplyUncapitalize(value) {
|
|
@@ -2197,30 +2292,35 @@ function FromRest$2(T, M) {
|
|
|
2197
2292
|
function Intrinsic(schema, mode, options = {}) {
|
|
2198
2293
|
return IsMappedKey$1(schema) ? IntrinsicFromMappedKey(schema, mode, options) : IsTemplateLiteral$1(schema) ? FromTemplateLiteral(schema, mode, options) : IsUnion$1(schema) ? Union(FromRest$2(schema.anyOf, mode), options) : IsLiteral$1(schema) ? Literal(FromLiteralValue(schema.const, mode), options) : CreateType(schema, options);
|
|
2199
2294
|
}
|
|
2295
|
+
|
|
2200
2296
|
//#endregion
|
|
2201
2297
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs
|
|
2202
2298
|
/** `[Json]` Intrinsic function to Capitalize LiteralString types */
|
|
2203
2299
|
function Capitalize(T, options = {}) {
|
|
2204
2300
|
return Intrinsic(T, "Capitalize", options);
|
|
2205
2301
|
}
|
|
2302
|
+
|
|
2206
2303
|
//#endregion
|
|
2207
2304
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs
|
|
2208
2305
|
/** `[Json]` Intrinsic function to Lowercase LiteralString types */
|
|
2209
2306
|
function Lowercase(T, options = {}) {
|
|
2210
2307
|
return Intrinsic(T, "Lowercase", options);
|
|
2211
2308
|
}
|
|
2309
|
+
|
|
2212
2310
|
//#endregion
|
|
2213
2311
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs
|
|
2214
2312
|
/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */
|
|
2215
2313
|
function Uncapitalize(T, options = {}) {
|
|
2216
2314
|
return Intrinsic(T, "Uncapitalize", options);
|
|
2217
2315
|
}
|
|
2316
|
+
|
|
2218
2317
|
//#endregion
|
|
2219
2318
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs
|
|
2220
2319
|
/** `[Json]` Intrinsic function to Uppercase LiteralString types */
|
|
2221
2320
|
function Uppercase(T, options = {}) {
|
|
2222
2321
|
return Intrinsic(T, "Uppercase", options);
|
|
2223
2322
|
}
|
|
2323
|
+
|
|
2224
2324
|
//#endregion
|
|
2225
2325
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs
|
|
2226
2326
|
function FromProperties$7(properties, propertyKeys, options) {
|
|
@@ -2234,6 +2334,7 @@ function FromMappedResult$3(mappedResult, propertyKeys, options) {
|
|
|
2234
2334
|
function OmitFromMappedResult(mappedResult, propertyKeys, options) {
|
|
2235
2335
|
return MappedResult(FromMappedResult$3(mappedResult, propertyKeys, options));
|
|
2236
2336
|
}
|
|
2337
|
+
|
|
2237
2338
|
//#endregion
|
|
2238
2339
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs
|
|
2239
2340
|
function FromIntersect$2(types, propertyKeys) {
|
|
@@ -2275,6 +2376,7 @@ function Omit(type, key, options) {
|
|
|
2275
2376
|
...options
|
|
2276
2377
|
});
|
|
2277
2378
|
}
|
|
2379
|
+
|
|
2278
2380
|
//#endregion
|
|
2279
2381
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs
|
|
2280
2382
|
function FromPropertyKey$1(type, key, options) {
|
|
@@ -2294,6 +2396,7 @@ function FromMappedKey$1(type, mappedKey, options) {
|
|
|
2294
2396
|
function OmitFromMappedKey(type, mappedKey, options) {
|
|
2295
2397
|
return MappedResult(FromMappedKey$1(type, mappedKey, options));
|
|
2296
2398
|
}
|
|
2399
|
+
|
|
2297
2400
|
//#endregion
|
|
2298
2401
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs
|
|
2299
2402
|
function FromProperties$5(properties, propertyKeys, options) {
|
|
@@ -2307,6 +2410,7 @@ function FromMappedResult$2(mappedResult, propertyKeys, options) {
|
|
|
2307
2410
|
function PickFromMappedResult(mappedResult, propertyKeys, options) {
|
|
2308
2411
|
return MappedResult(FromMappedResult$2(mappedResult, propertyKeys, options));
|
|
2309
2412
|
}
|
|
2413
|
+
|
|
2310
2414
|
//#endregion
|
|
2311
2415
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs
|
|
2312
2416
|
function FromIntersect$1(types, propertyKeys) {
|
|
@@ -2346,6 +2450,7 @@ function Pick(type, key, options) {
|
|
|
2346
2450
|
...options
|
|
2347
2451
|
});
|
|
2348
2452
|
}
|
|
2453
|
+
|
|
2349
2454
|
//#endregion
|
|
2350
2455
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs
|
|
2351
2456
|
function FromPropertyKey(type, key, options) {
|
|
@@ -2365,6 +2470,7 @@ function FromMappedKey(type, mappedKey, options) {
|
|
|
2365
2470
|
function PickFromMappedKey(type, mappedKey, options) {
|
|
2366
2471
|
return MappedResult(FromMappedKey(type, mappedKey, options));
|
|
2367
2472
|
}
|
|
2473
|
+
|
|
2368
2474
|
//#endregion
|
|
2369
2475
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs
|
|
2370
2476
|
function FromComputed$2(target, parameters) {
|
|
@@ -2401,6 +2507,7 @@ function Partial(type, options) {
|
|
|
2401
2507
|
...options
|
|
2402
2508
|
});
|
|
2403
2509
|
}
|
|
2510
|
+
|
|
2404
2511
|
//#endregion
|
|
2405
2512
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs
|
|
2406
2513
|
function FromProperties$2(K, options) {
|
|
@@ -2414,6 +2521,7 @@ function FromMappedResult$1(R, options) {
|
|
|
2414
2521
|
function PartialFromMappedResult(R, options) {
|
|
2415
2522
|
return MappedResult(FromMappedResult$1(R, options));
|
|
2416
2523
|
}
|
|
2524
|
+
|
|
2417
2525
|
//#endregion
|
|
2418
2526
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/required/required.mjs
|
|
2419
2527
|
function FromComputed$1(target, parameters) {
|
|
@@ -2450,6 +2558,7 @@ function Required(type, options) {
|
|
|
2450
2558
|
...options
|
|
2451
2559
|
});
|
|
2452
2560
|
}
|
|
2561
|
+
|
|
2453
2562
|
//#endregion
|
|
2454
2563
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs
|
|
2455
2564
|
function FromProperties(P, options) {
|
|
@@ -2463,6 +2572,7 @@ function FromMappedResult(R, options) {
|
|
|
2463
2572
|
function RequiredFromMappedResult(R, options) {
|
|
2464
2573
|
return MappedResult(FromMappedResult(R, options));
|
|
2465
2574
|
}
|
|
2575
|
+
|
|
2466
2576
|
//#endregion
|
|
2467
2577
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/module/compute.mjs
|
|
2468
2578
|
function DereferenceParameters(moduleProperties, types) {
|
|
@@ -2559,6 +2669,7 @@ function ComputeModuleProperties(moduleProperties) {
|
|
|
2559
2669
|
};
|
|
2560
2670
|
}, {});
|
|
2561
2671
|
}
|
|
2672
|
+
|
|
2562
2673
|
//#endregion
|
|
2563
2674
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/module/module.mjs
|
|
2564
2675
|
var TModule = class {
|
|
@@ -2594,6 +2705,7 @@ var TModule = class {
|
|
|
2594
2705
|
function Module(properties) {
|
|
2595
2706
|
return new TModule(properties);
|
|
2596
2707
|
}
|
|
2708
|
+
|
|
2597
2709
|
//#endregion
|
|
2598
2710
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/not/not.mjs
|
|
2599
2711
|
/** `[Json]` Creates a Not type */
|
|
@@ -2603,12 +2715,14 @@ function Not(type, options) {
|
|
|
2603
2715
|
not: type
|
|
2604
2716
|
}, options);
|
|
2605
2717
|
}
|
|
2718
|
+
|
|
2606
2719
|
//#endregion
|
|
2607
2720
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs
|
|
2608
2721
|
/** `[JavaScript]` Extracts the Parameters from the given Function type */
|
|
2609
2722
|
function Parameters(schema, options) {
|
|
2610
2723
|
return IsFunction$1(schema) ? Tuple(schema.parameters, options) : Never();
|
|
2611
2724
|
}
|
|
2725
|
+
|
|
2612
2726
|
//#endregion
|
|
2613
2727
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs
|
|
2614
2728
|
let Ordinal = 0;
|
|
@@ -2625,6 +2739,7 @@ function Recursive(callback, options = {}) {
|
|
|
2625
2739
|
...thisType
|
|
2626
2740
|
}, options);
|
|
2627
2741
|
}
|
|
2742
|
+
|
|
2628
2743
|
//#endregion
|
|
2629
2744
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs
|
|
2630
2745
|
/** `[JavaScript]` Creates a RegExp type */
|
|
@@ -2637,6 +2752,7 @@ function RegExp$1(unresolved, options) {
|
|
|
2637
2752
|
flags: expr.flags
|
|
2638
2753
|
}, options);
|
|
2639
2754
|
}
|
|
2755
|
+
|
|
2640
2756
|
//#endregion
|
|
2641
2757
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs
|
|
2642
2758
|
function RestResolve(T) {
|
|
@@ -2646,12 +2762,14 @@ function RestResolve(T) {
|
|
|
2646
2762
|
function Rest(T) {
|
|
2647
2763
|
return RestResolve(T);
|
|
2648
2764
|
}
|
|
2765
|
+
|
|
2649
2766
|
//#endregion
|
|
2650
2767
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs
|
|
2651
2768
|
/** `[JavaScript]` Extracts the ReturnType from the given Function type */
|
|
2652
2769
|
function ReturnType(schema, options) {
|
|
2653
2770
|
return IsFunction$1(schema) ? CreateType(schema.returns, options) : Never(options);
|
|
2654
2771
|
}
|
|
2772
|
+
|
|
2655
2773
|
//#endregion
|
|
2656
2774
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs
|
|
2657
2775
|
var TransformDecodeBuilder = class {
|
|
@@ -2697,12 +2815,14 @@ var TransformEncodeBuilder = class {
|
|
|
2697
2815
|
function Transform(schema) {
|
|
2698
2816
|
return new TransformDecodeBuilder(schema);
|
|
2699
2817
|
}
|
|
2818
|
+
|
|
2700
2819
|
//#endregion
|
|
2701
2820
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs
|
|
2702
2821
|
/** `[Json]` Creates a Unsafe type that will infers as the generic argument T */
|
|
2703
2822
|
function Unsafe(options = {}) {
|
|
2704
2823
|
return CreateType({ [Kind]: options[Kind] ?? "Unsafe" }, options);
|
|
2705
2824
|
}
|
|
2825
|
+
|
|
2706
2826
|
//#endregion
|
|
2707
2827
|
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/void/void.mjs
|
|
2708
2828
|
/** `[JavaScript]` Creates a Void type */
|
|
@@ -2712,10 +2832,10 @@ function Void(options) {
|
|
|
2712
2832
|
type: "void"
|
|
2713
2833
|
}, options);
|
|
2714
2834
|
}
|
|
2835
|
+
|
|
2715
2836
|
//#endregion
|
|
2716
|
-
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/type/
|
|
2717
|
-
|
|
2718
|
-
const Type = /* @__PURE__ */ __exportAll({
|
|
2837
|
+
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/type/type.mjs
|
|
2838
|
+
var type_exports = /* @__PURE__ */ __exportAll({
|
|
2719
2839
|
Any: () => Any,
|
|
2720
2840
|
Argument: () => Argument,
|
|
2721
2841
|
Array: () => Array$1,
|
|
@@ -2779,6 +2899,275 @@ const Type = /* @__PURE__ */ __exportAll({
|
|
|
2779
2899
|
Uppercase: () => Uppercase,
|
|
2780
2900
|
Void: () => Void
|
|
2781
2901
|
});
|
|
2902
|
+
|
|
2903
|
+
//#endregion
|
|
2904
|
+
//#region node_modules/.pnpm/@sinclair+typebox@0.34.48/node_modules/@sinclair/typebox/build/esm/type/type/index.mjs
|
|
2905
|
+
/** JavaScript Type Builder with Static Resolution for TypeScript */
|
|
2906
|
+
const Type = type_exports;
|
|
2907
|
+
|
|
2908
|
+
//#endregion
|
|
2909
|
+
//#region src/http.ts
|
|
2910
|
+
/**
|
|
2911
|
+
* Shared HTTP helpers for fetch-based provider clients.
|
|
2912
|
+
*
|
|
2913
|
+
* Kept out of the individual provider modules so that transport behavior
|
|
2914
|
+
* (timeout handling, abort semantics) stays consistent across LLM and
|
|
2915
|
+
* embedding callers.
|
|
2916
|
+
*/
|
|
2917
|
+
/**
|
|
2918
|
+
* Detect an AbortError robustly. Not all runtimes preserve the
|
|
2919
|
+
* DOMException prototype (Node.js undici typically does, but mocked
|
|
2920
|
+
* fetch implementations and proxy wrappers may not). The shape check
|
|
2921
|
+
* adds safety without cost.
|
|
2922
|
+
*/
|
|
2923
|
+
function isAbortError(error) {
|
|
2924
|
+
if (error instanceof DOMException && error.name === "AbortError") return true;
|
|
2925
|
+
return typeof error === "object" && error !== null && "name" in error && error.name === "AbortError";
|
|
2926
|
+
}
|
|
2927
|
+
/**
|
|
2928
|
+
* fetch with a timeout enforced via AbortController. Throws a clear error
|
|
2929
|
+
* on timeout ("<label> timed out after Nms") instead of leaking
|
|
2930
|
+
* AbortError to the caller, which is often too generic to act on.
|
|
2931
|
+
*/
|
|
2932
|
+
async function fetchWithTimeout(url, init, timeoutMs, label = "HTTP call") {
|
|
2933
|
+
const controller = new AbortController();
|
|
2934
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
2935
|
+
try {
|
|
2936
|
+
return await fetch(url, {
|
|
2937
|
+
...init,
|
|
2938
|
+
signal: controller.signal
|
|
2939
|
+
});
|
|
2940
|
+
} catch (error) {
|
|
2941
|
+
if (isAbortError(error)) throw new Error(`${label} timed out after ${timeoutMs}ms`);
|
|
2942
|
+
throw error;
|
|
2943
|
+
} finally {
|
|
2944
|
+
clearTimeout(timer);
|
|
2945
|
+
}
|
|
2946
|
+
}
|
|
2947
|
+
|
|
2948
|
+
//#endregion
|
|
2949
|
+
//#region src/standalone-embedding.ts
|
|
2950
|
+
/**
|
|
2951
|
+
* Resolve an API key for an embedding provider from auth profiles.
|
|
2952
|
+
*
|
|
2953
|
+
* Auth profiles (auth-profiles.json) are the only supported credential
|
|
2954
|
+
* source — environment variables are intentionally NOT used. OpenClaw's
|
|
2955
|
+
* canonical auth mechanism is auth-profiles.json; relying on env vars
|
|
2956
|
+
* encouraged skipping profile setup and created uncertainty about which
|
|
2957
|
+
* account was actually in use.
|
|
2958
|
+
*
|
|
2959
|
+
* Selection order (deterministic, prevents silent wrong-account selection):
|
|
2960
|
+
* 1. Profile named exactly "openai:default" or "google:default" — the
|
|
2961
|
+
* conventional default. Users with multiple profiles (e.g. "google:work"
|
|
2962
|
+
* and "google:personal") opt in via this name.
|
|
2963
|
+
* 2. If exactly one matching profile exists (by key prefix or provider
|
|
2964
|
+
* field), use it.
|
|
2965
|
+
* 3. If multiple non-default matches exist: log a warning naming the chosen
|
|
2966
|
+
* profile so log-scrapers can notice the ambiguity, then use the first
|
|
2967
|
+
* one (Object.entries preserves insertion order).
|
|
2968
|
+
*/
|
|
2969
|
+
function resolveEmbeddingApiKey(profiles, provider, logger) {
|
|
2970
|
+
if (!profiles) return null;
|
|
2971
|
+
const keyPrefix = provider === "gemini" ? "google:" : "openai:";
|
|
2972
|
+
const providerField = provider === "gemini" ? "google" : "openai";
|
|
2973
|
+
const defaultName = `${keyPrefix}default`;
|
|
2974
|
+
const defaultEntry = profiles[defaultName];
|
|
2975
|
+
if (defaultEntry?.key) return defaultEntry.key;
|
|
2976
|
+
const candidates = [];
|
|
2977
|
+
for (const [name, value] of Object.entries(profiles)) {
|
|
2978
|
+
if (!value?.key) continue;
|
|
2979
|
+
if (name.startsWith(keyPrefix) || value.provider === providerField) candidates.push({
|
|
2980
|
+
name,
|
|
2981
|
+
key: value.key
|
|
2982
|
+
});
|
|
2983
|
+
}
|
|
2984
|
+
if (candidates.length === 1) return candidates[0].key;
|
|
2985
|
+
if (candidates.length > 1) {
|
|
2986
|
+
logger?.warn(`Multiple auth profiles match ${provider} (${candidates.map((c) => c.name).join(", ")}). Using "${candidates[0].name}". Add a "${defaultName}" profile to select explicitly.`);
|
|
2987
|
+
return candidates[0].key;
|
|
2988
|
+
}
|
|
2989
|
+
return null;
|
|
2990
|
+
}
|
|
2991
|
+
/**
|
|
2992
|
+
* Validate that a value is an array of numbers, throwing a clear error if not.
|
|
2993
|
+
* Used to catch malformed API responses early (e.g. proxy error pages returning
|
|
2994
|
+
* 200, rate-limit bodies in a 200 response, schema changes by the provider).
|
|
2995
|
+
*/
|
|
2996
|
+
function assertNumberArray(value, context) {
|
|
2997
|
+
if (!Array.isArray(value)) throw new Error(`Invalid embedding response: ${context} is not an array`);
|
|
2998
|
+
for (let i = 0; i < value.length; i++) if (typeof value[i] !== "number") throw new Error(`Invalid embedding response: ${context}[${i}] is not a number`);
|
|
2999
|
+
return value;
|
|
3000
|
+
}
|
|
3001
|
+
const OPENAI_DEFAULT_MODEL = "text-embedding-3-small";
|
|
3002
|
+
const OPENAI_EMBEDDINGS_URL = "https://api.openai.com/v1/embeddings";
|
|
3003
|
+
async function openAiEmbed(texts, apiKey, model, timeoutMs) {
|
|
3004
|
+
if (texts.length === 0) return [];
|
|
3005
|
+
const response = await fetchWithTimeout(OPENAI_EMBEDDINGS_URL, {
|
|
3006
|
+
method: "POST",
|
|
3007
|
+
headers: {
|
|
3008
|
+
"Content-Type": "application/json",
|
|
3009
|
+
Authorization: `Bearer ${apiKey}`
|
|
3010
|
+
},
|
|
3011
|
+
body: JSON.stringify({
|
|
3012
|
+
model,
|
|
3013
|
+
input: texts
|
|
3014
|
+
})
|
|
3015
|
+
}, timeoutMs, "OpenAI Embeddings API call");
|
|
3016
|
+
if (!response.ok) {
|
|
3017
|
+
const body = await response.text().catch(() => "");
|
|
3018
|
+
throw new Error(`OpenAI Embeddings API error ${response.status}: ${body.slice(0, 200)}`);
|
|
3019
|
+
}
|
|
3020
|
+
const data = await response.json();
|
|
3021
|
+
if (!data || !Array.isArray(data.data)) throw new Error(`OpenAI Embeddings API returned invalid response: missing "data" array`);
|
|
3022
|
+
const items = data.data.map((item, i) => {
|
|
3023
|
+
if (!item || typeof item !== "object") throw new Error(`OpenAI Embeddings API returned invalid item at index ${i}`);
|
|
3024
|
+
const record = item;
|
|
3025
|
+
if (typeof record.index !== "number") throw new Error(`OpenAI Embeddings API returned invalid item at index ${i}: missing numeric "index"`);
|
|
3026
|
+
return {
|
|
3027
|
+
index: record.index,
|
|
3028
|
+
embedding: assertNumberArray(record.embedding, `data[${i}].embedding`)
|
|
3029
|
+
};
|
|
3030
|
+
});
|
|
3031
|
+
items.sort((a, b) => a.index - b.index);
|
|
3032
|
+
return items.map((item) => item.embedding);
|
|
3033
|
+
}
|
|
3034
|
+
function createOpenAiProvider(apiKey, model) {
|
|
3035
|
+
const resolvedModel = model || OPENAI_DEFAULT_MODEL;
|
|
3036
|
+
return {
|
|
3037
|
+
id: "openai",
|
|
3038
|
+
model: resolvedModel,
|
|
3039
|
+
async embedQuery(text) {
|
|
3040
|
+
const [result] = await openAiEmbed([text], apiKey, resolvedModel, 3e4);
|
|
3041
|
+
return result;
|
|
3042
|
+
},
|
|
3043
|
+
async embedBatch(texts) {
|
|
3044
|
+
return openAiEmbed(texts, apiKey, resolvedModel, 6e4);
|
|
3045
|
+
}
|
|
3046
|
+
};
|
|
3047
|
+
}
|
|
3048
|
+
const GEMINI_DEFAULT_MODEL = "text-embedding-004";
|
|
3049
|
+
const GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/models";
|
|
3050
|
+
/** Gemini's batchEmbedContents endpoint enforces a hard limit of 100 items per request. */
|
|
3051
|
+
const GEMINI_BATCH_LIMIT = 100;
|
|
3052
|
+
/**
|
|
3053
|
+
* Gemini auth goes in the `x-goog-api-key` header, not the URL query string.
|
|
3054
|
+
* Keys in URLs leak into proxy logs, APM traces, and error reports.
|
|
3055
|
+
*/
|
|
3056
|
+
function geminiHeaders(apiKey) {
|
|
3057
|
+
return {
|
|
3058
|
+
"Content-Type": "application/json",
|
|
3059
|
+
"x-goog-api-key": apiKey
|
|
3060
|
+
};
|
|
3061
|
+
}
|
|
3062
|
+
async function geminiEmbedSingle(text, apiKey, model, timeoutMs) {
|
|
3063
|
+
const response = await fetchWithTimeout(`${GEMINI_BASE_URL}/${encodeURIComponent(model)}:embedContent`, {
|
|
3064
|
+
method: "POST",
|
|
3065
|
+
headers: geminiHeaders(apiKey),
|
|
3066
|
+
body: JSON.stringify({
|
|
3067
|
+
model: `models/${model}`,
|
|
3068
|
+
content: { parts: [{ text }] }
|
|
3069
|
+
})
|
|
3070
|
+
}, timeoutMs, "Gemini embedContent call");
|
|
3071
|
+
if (!response.ok) {
|
|
3072
|
+
const body = await response.text().catch(() => "");
|
|
3073
|
+
throw new Error(`Gemini Embeddings API error ${response.status}: ${body.slice(0, 200)}`);
|
|
3074
|
+
}
|
|
3075
|
+
const data = await response.json();
|
|
3076
|
+
if (!data || !data.embedding || typeof data.embedding !== "object") throw new Error(`Gemini Embeddings API returned invalid response: missing "embedding" object`);
|
|
3077
|
+
return assertNumberArray(data.embedding.values, "embedding.values");
|
|
3078
|
+
}
|
|
3079
|
+
async function geminiEmbedBatchChunk(texts, apiKey, model, timeoutMs) {
|
|
3080
|
+
const response = await fetchWithTimeout(`${GEMINI_BASE_URL}/${encodeURIComponent(model)}:batchEmbedContents`, {
|
|
3081
|
+
method: "POST",
|
|
3082
|
+
headers: geminiHeaders(apiKey),
|
|
3083
|
+
body: JSON.stringify({ requests: texts.map((text) => ({
|
|
3084
|
+
model: `models/${model}`,
|
|
3085
|
+
content: { parts: [{ text }] }
|
|
3086
|
+
})) })
|
|
3087
|
+
}, timeoutMs, "Gemini batchEmbedContents call");
|
|
3088
|
+
if (!response.ok) {
|
|
3089
|
+
const body = await response.text().catch(() => "");
|
|
3090
|
+
throw new Error(`Gemini Embeddings API error ${response.status}: ${body.slice(0, 200)}`);
|
|
3091
|
+
}
|
|
3092
|
+
const data = await response.json();
|
|
3093
|
+
if (!data || !Array.isArray(data.embeddings)) throw new Error(`Gemini Embeddings API returned invalid response: missing "embeddings" array`);
|
|
3094
|
+
return data.embeddings.map((e, i) => {
|
|
3095
|
+
if (!e || typeof e !== "object") throw new Error(`Gemini Embeddings API returned invalid item at index ${i}`);
|
|
3096
|
+
return assertNumberArray(e.values, `embeddings[${i}].values`);
|
|
3097
|
+
});
|
|
3098
|
+
}
|
|
3099
|
+
async function geminiEmbed(texts, apiKey, model, timeoutMs) {
|
|
3100
|
+
if (texts.length === 0) return [];
|
|
3101
|
+
if (texts.length === 1) return [await geminiEmbedSingle(texts[0], apiKey, model, timeoutMs)];
|
|
3102
|
+
const results = [];
|
|
3103
|
+
for (let i = 0; i < texts.length; i += GEMINI_BATCH_LIMIT) {
|
|
3104
|
+
const chunkResults = await geminiEmbedBatchChunk(texts.slice(i, i + GEMINI_BATCH_LIMIT), apiKey, model, timeoutMs);
|
|
3105
|
+
results.push(...chunkResults);
|
|
3106
|
+
}
|
|
3107
|
+
return results;
|
|
3108
|
+
}
|
|
3109
|
+
function createGeminiProvider(apiKey, model) {
|
|
3110
|
+
const resolvedModel = model || GEMINI_DEFAULT_MODEL;
|
|
3111
|
+
return {
|
|
3112
|
+
id: "gemini",
|
|
3113
|
+
model: resolvedModel,
|
|
3114
|
+
async embedQuery(text) {
|
|
3115
|
+
const [result] = await geminiEmbed([text], apiKey, resolvedModel, 3e4);
|
|
3116
|
+
return result;
|
|
3117
|
+
},
|
|
3118
|
+
async embedBatch(texts) {
|
|
3119
|
+
return geminiEmbed(texts, apiKey, resolvedModel, 6e4);
|
|
3120
|
+
}
|
|
3121
|
+
};
|
|
3122
|
+
}
|
|
3123
|
+
/**
|
|
3124
|
+
* Try to create a standalone embedding provider for the given provider ID.
|
|
3125
|
+
*
|
|
3126
|
+
* Resolution order:
|
|
3127
|
+
* 1. Auth profiles (auth-profiles.json) — matched by key prefix or provider field
|
|
3128
|
+
* 2. Environment variables (OPENAI_API_KEY, GEMINI_API_KEY, GOOGLE_API_KEY)
|
|
3129
|
+
*
|
|
3130
|
+
* Returns null if no API key is found (does not throw).
|
|
3131
|
+
*/
|
|
3132
|
+
function tryCreateStandaloneProvider(providerId, profiles, model, logger) {
|
|
3133
|
+
if (providerId !== "openai" && providerId !== "gemini") return null;
|
|
3134
|
+
const apiKey = resolveEmbeddingApiKey(profiles, providerId, logger);
|
|
3135
|
+
if (!apiKey) {
|
|
3136
|
+
logger?.warn(`Standalone embedding: no API key found for ${providerId}`);
|
|
3137
|
+
return null;
|
|
3138
|
+
}
|
|
3139
|
+
if (providerId === "openai") return createOpenAiProvider(apiKey, model);
|
|
3140
|
+
return createGeminiProvider(apiKey, model);
|
|
3141
|
+
}
|
|
3142
|
+
/**
|
|
3143
|
+
* Auto-select a standalone embedding provider by trying each in priority order.
|
|
3144
|
+
* Returns the first provider for which an API key is available.
|
|
3145
|
+
*
|
|
3146
|
+
* Intentionally does NOT accept a `model` parameter: the user's configured
|
|
3147
|
+
* model string may be valid for one provider and invalid for another
|
|
3148
|
+
* (e.g. "text-embedding-3-small" for OpenAI vs. "text-embedding-004" for
|
|
3149
|
+
* Gemini). Each provider uses its own default model. Callers wanting a
|
|
3150
|
+
* specific model must use explicit provider selection.
|
|
3151
|
+
*
|
|
3152
|
+
* Priority order: OpenAI first, then Gemini. OpenAI is the common
|
|
3153
|
+
* default from the memory-core era (1536-dim vectors); defaulting to
|
|
3154
|
+
* Gemini (768-dim) would silently break existing vector stores.
|
|
3155
|
+
* Provider identity is persisted to DB state on first successful
|
|
3156
|
+
* resolution to prevent future drift (see createWorkspace).
|
|
3157
|
+
*
|
|
3158
|
+
* Probing is silent — missing API keys for individual providers are not
|
|
3159
|
+
* warned about here because at least one is expected to succeed. The
|
|
3160
|
+
* caller warns only if the entire auto-select returns null.
|
|
3161
|
+
*/
|
|
3162
|
+
function autoSelectStandaloneProvider(profiles, logger) {
|
|
3163
|
+
for (const id of ["openai", "gemini"]) {
|
|
3164
|
+
const provider = tryCreateStandaloneProvider(id, profiles, void 0, void 0);
|
|
3165
|
+
if (provider) return provider;
|
|
3166
|
+
}
|
|
3167
|
+
logger?.warn(`Standalone embedding auto-select: no API key found for openai or gemini`);
|
|
3168
|
+
return null;
|
|
3169
|
+
}
|
|
3170
|
+
|
|
2782
3171
|
//#endregion
|
|
2783
3172
|
//#region src/config.ts
|
|
2784
3173
|
function assertAllowedKeys(value, allowed, label) {
|
|
@@ -2820,6 +3209,7 @@ const memoryConfigSchema = { parse(value) {
|
|
|
2820
3209
|
requireEmbedding: cfg.requireEmbedding !== false
|
|
2821
3210
|
};
|
|
2822
3211
|
} };
|
|
3212
|
+
|
|
2823
3213
|
//#endregion
|
|
2824
3214
|
//#region src/logger.ts
|
|
2825
3215
|
const LEVEL_ORDER = {
|
|
@@ -2880,6 +3270,7 @@ const nullLogger = {
|
|
|
2880
3270
|
error: () => {},
|
|
2881
3271
|
isDebugEnabled: () => false
|
|
2882
3272
|
};
|
|
3273
|
+
|
|
2883
3274
|
//#endregion
|
|
2884
3275
|
//#region src/consolidation-steps.ts
|
|
2885
3276
|
/** Retrieval reinforcement learning rate (η). */
|
|
@@ -2890,8 +3281,12 @@ const DECAY_WORKING = .906;
|
|
|
2890
3281
|
const DECAY_CONSOLIDATED = .977;
|
|
2891
3282
|
/** Decay multiplier for association weights per cycle. */
|
|
2892
3283
|
const DECAY_ASSOCIATION = .9;
|
|
3284
|
+
/** Mode weight for hybrid retrieval. */
|
|
3285
|
+
const MODE_WEIGHT_HYBRID = 1;
|
|
2893
3286
|
/** Mode weight for BM25-only retrieval (degraded). */
|
|
2894
3287
|
const MODE_WEIGHT_BM25_ONLY = .5;
|
|
3288
|
+
/** Maximum catch-up cycles to prevent amnesia on very long gaps. */
|
|
3289
|
+
const MAX_CATCHUP_CYCLES = 30;
|
|
2895
3290
|
/**
|
|
2896
3291
|
* Apply catch-up decay for missed consolidation cycles.
|
|
2897
3292
|
*
|
|
@@ -2916,7 +3311,7 @@ function applyCatchUpDecay(db, lastConsolidationMs, nowMs = Date.now(), log = nu
|
|
|
2916
3311
|
const daysSince = (nowMs - (Number.isFinite(createdMs) ? Math.max(lastConsolidationMs, createdMs) : lastConsolidationMs)) / dayMs;
|
|
2917
3312
|
const cycles = Math.max(0, Math.floor(daysSince) - 1);
|
|
2918
3313
|
if (cycles <= 0) continue;
|
|
2919
|
-
const effectiveCycles = Math.min(cycles,
|
|
3314
|
+
const effectiveCycles = Math.min(cycles, MAX_CATCHUP_CYCLES);
|
|
2920
3315
|
const factor = mem.consolidated ? DECAY_CONSOLIDATED : DECAY_WORKING;
|
|
2921
3316
|
const newStrength = mem.strength * Math.pow(factor, effectiveCycles);
|
|
2922
3317
|
if (debug) log.debug(`catch-up decay: "${preview(mem.content)}" ${mem.strength.toFixed(3)} → ${newStrength.toFixed(3)} (${effectiveCycles} cycles, ${mem.consolidated ? "consolidated" : "working"})`);
|
|
@@ -2926,7 +3321,7 @@ function applyCatchUpDecay(db, lastConsolidationMs, nowMs = Date.now(), log = nu
|
|
|
2926
3321
|
const globalDaysSince = (nowMs - lastConsolidationMs) / dayMs;
|
|
2927
3322
|
const globalCycles = Math.max(0, Math.floor(globalDaysSince) - 1);
|
|
2928
3323
|
if (globalCycles > 0) {
|
|
2929
|
-
const effectiveGlobal = Math.min(globalCycles,
|
|
3324
|
+
const effectiveGlobal = Math.min(globalCycles, MAX_CATCHUP_CYCLES);
|
|
2930
3325
|
const associationFactor = Math.pow(DECAY_ASSOCIATION, effectiveGlobal);
|
|
2931
3326
|
if (debug) log.debug(`catch-up decay: associations ×${associationFactor.toFixed(4)} (${effectiveGlobal} cycles)`);
|
|
2932
3327
|
db.decayAllAssociationWeights(associationFactor);
|
|
@@ -2951,7 +3346,7 @@ function applyReinforcement(db, log = nullLogger) {
|
|
|
2951
3346
|
if (pendingAttrs.length === 0) return 0;
|
|
2952
3347
|
const reinforcements = /* @__PURE__ */ new Map();
|
|
2953
3348
|
for (const attr of pendingAttrs) {
|
|
2954
|
-
const modeWeight = db.getExposureRetrievalMode(attr.memory_id, attr.turn_id) === "bm25_only" ? MODE_WEIGHT_BM25_ONLY :
|
|
3349
|
+
const modeWeight = db.getExposureRetrievalMode(attr.memory_id, attr.turn_id) === "bm25_only" ? MODE_WEIGHT_BM25_ONLY : MODE_WEIGHT_HYBRID;
|
|
2955
3350
|
const reinforcement = ETA * attr.confidence * modeWeight;
|
|
2956
3351
|
const current = reinforcements.get(attr.memory_id) ?? 0;
|
|
2957
3352
|
reinforcements.set(attr.memory_id, current + reinforcement);
|
|
@@ -3005,6 +3400,8 @@ function applyDecay(db, log = nullLogger) {
|
|
|
3005
3400
|
function applyAssociationDecay(db) {
|
|
3006
3401
|
db.decayAllAssociationWeights(DECAY_ASSOCIATION);
|
|
3007
3402
|
}
|
|
3403
|
+
/** Minimum weight for a transitive association to be created. */
|
|
3404
|
+
const TRANSITIVE_WEIGHT_THRESHOLD = .1;
|
|
3008
3405
|
/** Base weight for a new co-retrieval association. */
|
|
3009
3406
|
const CO_RETRIEVAL_BASE_WEIGHT = .1;
|
|
3010
3407
|
/**
|
|
@@ -3063,7 +3460,7 @@ function updateTransitiveAssociations(db, maxUpdates = 100, log = nullLogger) {
|
|
|
3063
3460
|
const otherId2 = n2.memory_a === mem.id ? n2.memory_b : n2.memory_a;
|
|
3064
3461
|
if (otherId1 === otherId2) continue;
|
|
3065
3462
|
const transitiveWeight = n1.weight * n2.weight;
|
|
3066
|
-
if (transitiveWeight <
|
|
3463
|
+
if (transitiveWeight < TRANSITIVE_WEIGHT_THRESHOLD) continue;
|
|
3067
3464
|
const existing = db.getAssociationWeight(otherId1, otherId2);
|
|
3068
3465
|
const newWeight = existing + transitiveWeight - existing * transitiveWeight;
|
|
3069
3466
|
if (newWeight - existing < 1e-9) continue;
|
|
@@ -3075,6 +3472,8 @@ function updateTransitiveAssociations(db, maxUpdates = 100, log = nullLogger) {
|
|
|
3075
3472
|
if (count > 0) log.info(`associate: ${count} transitive associations created/updated`);
|
|
3076
3473
|
return count;
|
|
3077
3474
|
}
|
|
3475
|
+
/** Strength threshold below which memories are pruned. */
|
|
3476
|
+
const PRUNE_STRENGTH_THRESHOLD = .05;
|
|
3078
3477
|
/** Association weight threshold below which associations are pruned. */
|
|
3079
3478
|
const PRUNE_ASSOCIATION_THRESHOLD = .01;
|
|
3080
3479
|
/**
|
|
@@ -3089,7 +3488,7 @@ function applyPruning(db, log = nullLogger) {
|
|
|
3089
3488
|
const allMemories = db.getAllMemories();
|
|
3090
3489
|
const debug = log.isDebugEnabled();
|
|
3091
3490
|
let memoriesPruned = 0;
|
|
3092
|
-
for (const mem of allMemories) if (mem.strength <=
|
|
3491
|
+
for (const mem of allMemories) if (mem.strength <= PRUNE_STRENGTH_THRESHOLD) {
|
|
3093
3492
|
if (debug) log.debug(`prune: removing "${preview(mem.content, 80)}" (strength=${mem.strength.toFixed(3)}, type=${mem.type})`);
|
|
3094
3493
|
db.deleteMemory(mem.id);
|
|
3095
3494
|
memoriesPruned++;
|
|
@@ -3145,6 +3544,59 @@ function provenanceGC(db, cutoffDays = 30, log = nullLogger) {
|
|
|
3145
3544
|
if (count > 0) log.debug(`gc: ${count} exposure rows older than ${cutoffDays}d removed`);
|
|
3146
3545
|
return count;
|
|
3147
3546
|
}
|
|
3547
|
+
|
|
3548
|
+
//#endregion
|
|
3549
|
+
//#region src/cron-utils.ts
|
|
3550
|
+
/**
|
|
3551
|
+
* Cron job reconciliation and system event token matching utilities.
|
|
3552
|
+
*
|
|
3553
|
+
* Extracted from register() for testability. Token matching mirrors
|
|
3554
|
+
* memory-core's includesSystemEventToken() from dreaming-shared.ts.
|
|
3555
|
+
*/
|
|
3556
|
+
function normalizeTrimmedString(value) {
|
|
3557
|
+
if (typeof value !== "string") return void 0;
|
|
3558
|
+
const trimmed = value.trim();
|
|
3559
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
3560
|
+
}
|
|
3561
|
+
function includesSystemEventToken(cleanedBody, eventText) {
|
|
3562
|
+
const normalizedBody = normalizeTrimmedString(cleanedBody);
|
|
3563
|
+
const normalizedEventText = normalizeTrimmedString(eventText);
|
|
3564
|
+
if (!normalizedBody || !normalizedEventText) return false;
|
|
3565
|
+
if (normalizedBody === normalizedEventText) return true;
|
|
3566
|
+
return normalizedBody.split(/\r?\n/).some((line) => line.trim() === normalizedEventText);
|
|
3567
|
+
}
|
|
3568
|
+
/**
|
|
3569
|
+
* Reconcile a single managed cron job: create if missing, update if drifted, prune duplicates.
|
|
3570
|
+
* Identifies managed jobs by description tag OR matching name + payload text.
|
|
3571
|
+
* Sorts by createdAtMs for deterministic primary selection.
|
|
3572
|
+
*/
|
|
3573
|
+
async function reconcileCronJob(cron, allJobs, desired, tag, logger) {
|
|
3574
|
+
const managed = allJobs.filter((j) => j.description?.includes(tag) || j.name === desired.name && j.payload?.text === desired.payload.text).sort((a, b) => (a.createdAtMs ?? Number.MAX_SAFE_INTEGER) - (b.createdAtMs ?? Number.MAX_SAFE_INTEGER));
|
|
3575
|
+
if (managed.length === 0) {
|
|
3576
|
+
await cron.add(desired);
|
|
3577
|
+
logger.info(`Registered cron job: ${desired.name}`);
|
|
3578
|
+
return;
|
|
3579
|
+
}
|
|
3580
|
+
const primary = managed[0];
|
|
3581
|
+
if (primary.name !== desired.name || primary.description !== desired.description || primary.schedule?.expr !== desired.schedule.expr || primary.wakeMode !== desired.wakeMode || primary.enabled !== desired.enabled || primary.payload?.text !== desired.payload.text || primary.payload?.kind !== desired.payload.kind || primary.sessionTarget !== desired.sessionTarget) {
|
|
3582
|
+
await cron.update(primary.id, {
|
|
3583
|
+
name: desired.name,
|
|
3584
|
+
description: desired.description,
|
|
3585
|
+
schedule: desired.schedule,
|
|
3586
|
+
wakeMode: desired.wakeMode,
|
|
3587
|
+
enabled: desired.enabled,
|
|
3588
|
+
payload: desired.payload,
|
|
3589
|
+
sessionTarget: desired.sessionTarget
|
|
3590
|
+
});
|
|
3591
|
+
logger.info(`Updated cron job: ${desired.name}`);
|
|
3592
|
+
}
|
|
3593
|
+
for (let i = 1; i < managed.length; i++) try {
|
|
3594
|
+
await cron.remove(managed[i].id);
|
|
3595
|
+
} catch (err) {
|
|
3596
|
+
logger.warn(`Failed to remove duplicate cron job ${managed[i].id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
3597
|
+
}
|
|
3598
|
+
}
|
|
3599
|
+
|
|
3148
3600
|
//#endregion
|
|
3149
3601
|
//#region src/merge-candidates.ts
|
|
3150
3602
|
/** Minimum Jaccard score when no embeddings are available. */
|
|
@@ -3155,6 +3607,8 @@ const MERGE_THRESHOLD_JACCARD_ONLY = .6;
|
|
|
3155
3607
|
* confidence — embedding adds semantic check on top of lexical overlap.
|
|
3156
3608
|
*/
|
|
3157
3609
|
const MERGE_THRESHOLD_COMBINED = .5;
|
|
3610
|
+
/** Maximum number of merge pairs returned per run. */
|
|
3611
|
+
const MAX_MERGE_PAIRS = 20;
|
|
3158
3612
|
/** Minimum strength for a memory to be a merge source. */
|
|
3159
3613
|
const MERGE_SOURCE_MIN_STRENGTH = .5;
|
|
3160
3614
|
/** Minimum strength for a memory to be a merge target. */
|
|
@@ -3170,7 +3624,7 @@ const EMBEDDING_WEIGHT = .6;
|
|
|
3170
3624
|
* `type` are considered. Complexity is O(S×T) where both S and T
|
|
3171
3625
|
* are pre-filtered subsets of the full memory set.
|
|
3172
3626
|
*/
|
|
3173
|
-
function findMergeCandidatesDelta(sources, targets, maxPairs =
|
|
3627
|
+
function findMergeCandidatesDelta(sources, targets, maxPairs = MAX_MERGE_PAIRS) {
|
|
3174
3628
|
if (sources.length === 0 || targets.length === 0) return [];
|
|
3175
3629
|
const featureCache = /* @__PURE__ */ new Map();
|
|
3176
3630
|
const getFeatures = (m) => {
|
|
@@ -3254,11 +3708,13 @@ function cosineSimilarity$1(a, b) {
|
|
|
3254
3708
|
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
3255
3709
|
return denom === 0 ? 0 : dot / denom;
|
|
3256
3710
|
}
|
|
3711
|
+
|
|
3257
3712
|
//#endregion
|
|
3258
3713
|
//#region src/hash.ts
|
|
3259
3714
|
function contentHash(content) {
|
|
3260
3715
|
return createHash("sha256").update(content, "utf8").digest("hex");
|
|
3261
3716
|
}
|
|
3717
|
+
|
|
3262
3718
|
//#endregion
|
|
3263
3719
|
//#region src/merge-execution.ts
|
|
3264
3720
|
/**
|
|
@@ -3407,6 +3863,7 @@ function inheritAssociations(db, sourceIds, canonicalId, now) {
|
|
|
3407
3863
|
db.upsertAssociation(canonicalId, neighbor, finalWeight, now);
|
|
3408
3864
|
}
|
|
3409
3865
|
}
|
|
3866
|
+
|
|
3410
3867
|
//#endregion
|
|
3411
3868
|
//#region src/consolidation.ts
|
|
3412
3869
|
/**
|
|
@@ -3502,6 +3959,7 @@ async function runConsolidation(params) {
|
|
|
3502
3959
|
durationMs: Date.now() - start
|
|
3503
3960
|
};
|
|
3504
3961
|
}
|
|
3962
|
+
|
|
3505
3963
|
//#endregion
|
|
3506
3964
|
//#region src/retrieval-log.ts
|
|
3507
3965
|
/**
|
|
@@ -3529,6 +3987,7 @@ function appendFeedbackEvent(logPath, ratings, comment) {
|
|
|
3529
3987
|
function appendStoreEvent(logPath, newId, contextIds) {
|
|
3530
3988
|
appendFileSync(logPath, `${(/* @__PURE__ */ new Date()).toISOString()} store ${newId}${contextIds.length > 0 ? ` context:${contextIds.join(",")}` : ""}\n`);
|
|
3531
3989
|
}
|
|
3990
|
+
|
|
3532
3991
|
//#endregion
|
|
3533
3992
|
//#region src/after-turn.ts
|
|
3534
3993
|
const CONFIDENCE = {
|
|
@@ -3687,8 +4146,19 @@ function feedbackEvidenceForRating(rating) {
|
|
|
3687
4146
|
confidence: CONFIDENCE.agent_feedback_negative
|
|
3688
4147
|
};
|
|
3689
4148
|
}
|
|
4149
|
+
|
|
3690
4150
|
//#endregion
|
|
3691
4151
|
//#region src/llm-caller.ts
|
|
4152
|
+
/**
|
|
4153
|
+
* Lightweight LLM caller for plugin-internal tasks.
|
|
4154
|
+
*
|
|
4155
|
+
* Direct fetch to Anthropic or OpenAI API. Used for:
|
|
4156
|
+
* - Memory merge (consolidation)
|
|
4157
|
+
* - Migration enrichment
|
|
4158
|
+
* - Workspace file cleanup
|
|
4159
|
+
*
|
|
4160
|
+
* Not exposed to the agent — these are background operations.
|
|
4161
|
+
*/
|
|
3692
4162
|
const DEFAULTS = {
|
|
3693
4163
|
anthropic: {
|
|
3694
4164
|
model: "claude-haiku-4-5-20251001",
|
|
@@ -3727,7 +4197,7 @@ async function callAnthropic(prompt, apiKey, model, maxTokens, timeoutMs) {
|
|
|
3727
4197
|
content: prompt
|
|
3728
4198
|
}]
|
|
3729
4199
|
})
|
|
3730
|
-
}, timeoutMs);
|
|
4200
|
+
}, timeoutMs, "Anthropic LLM call");
|
|
3731
4201
|
if (!response.ok) {
|
|
3732
4202
|
const body = await response.text().catch(() => "");
|
|
3733
4203
|
throw new Error(`Anthropic API error ${response.status}: ${body.slice(0, 200)}`);
|
|
@@ -3751,7 +4221,7 @@ async function callOpenAi(prompt, apiKey, model, maxTokens, timeoutMs) {
|
|
|
3751
4221
|
content: prompt
|
|
3752
4222
|
}]
|
|
3753
4223
|
})
|
|
3754
|
-
}, timeoutMs);
|
|
4224
|
+
}, timeoutMs, "OpenAI LLM call");
|
|
3755
4225
|
if (!response.ok) {
|
|
3756
4226
|
const body = await response.text().catch(() => "");
|
|
3757
4227
|
throw new Error(`OpenAI API error ${response.status}: ${body.slice(0, 200)}`);
|
|
@@ -3760,21 +4230,6 @@ async function callOpenAi(prompt, apiKey, model, maxTokens, timeoutMs) {
|
|
|
3760
4230
|
if (!text) throw new Error("OpenAI returned empty response");
|
|
3761
4231
|
return text;
|
|
3762
4232
|
}
|
|
3763
|
-
async function fetchWithTimeout(url, init, timeoutMs) {
|
|
3764
|
-
const controller = new AbortController();
|
|
3765
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
3766
|
-
try {
|
|
3767
|
-
return await fetch(url, {
|
|
3768
|
-
...init,
|
|
3769
|
-
signal: controller.signal
|
|
3770
|
-
});
|
|
3771
|
-
} catch (error) {
|
|
3772
|
-
if (error instanceof DOMException && error.name === "AbortError") throw new Error(`LLM API call timed out after ${timeoutMs}ms`);
|
|
3773
|
-
throw error;
|
|
3774
|
-
} finally {
|
|
3775
|
-
clearTimeout(timer);
|
|
3776
|
-
}
|
|
3777
|
-
}
|
|
3778
4233
|
/**
|
|
3779
4234
|
* Extract an API key from OpenClaw auth profiles.
|
|
3780
4235
|
* Tries the specified provider, falls back to the other.
|
|
@@ -3792,6 +4247,7 @@ function resolveApiKey(authProfiles, preferredProvider) {
|
|
|
3792
4247
|
};
|
|
3793
4248
|
return null;
|
|
3794
4249
|
}
|
|
4250
|
+
|
|
3795
4251
|
//#endregion
|
|
3796
4252
|
//#region src/context-engine.ts
|
|
3797
4253
|
/**
|
|
@@ -4302,6 +4758,7 @@ function isTextBlock(v) {
|
|
|
4302
4758
|
const b = v;
|
|
4303
4759
|
return b.type === "text" && typeof b.text === "string";
|
|
4304
4760
|
}
|
|
4761
|
+
|
|
4305
4762
|
//#endregion
|
|
4306
4763
|
//#region src/embedding-circuit-breaker.ts
|
|
4307
4764
|
var EmbeddingCircuitBreaker = class {
|
|
@@ -4425,6 +4882,7 @@ var EmbeddingTimeoutError = class extends Error {
|
|
|
4425
4882
|
this.name = "EmbeddingTimeoutError";
|
|
4426
4883
|
}
|
|
4427
4884
|
};
|
|
4885
|
+
|
|
4428
4886
|
//#endregion
|
|
4429
4887
|
//#region src/memory-manager.ts
|
|
4430
4888
|
var MemoryManager = class {
|
|
@@ -4695,6 +5153,7 @@ function isNearDuplicate(content, selected) {
|
|
|
4695
5153
|
}
|
|
4696
5154
|
return false;
|
|
4697
5155
|
}
|
|
5156
|
+
|
|
4698
5157
|
//#endregion
|
|
4699
5158
|
//#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/decode.mjs
|
|
4700
5159
|
const decodeCache = {};
|
|
@@ -4766,6 +5225,7 @@ function decode(string, exclude) {
|
|
|
4766
5225
|
}
|
|
4767
5226
|
decode.defaultChars = ";/?:@&=+$,#";
|
|
4768
5227
|
decode.componentChars = "";
|
|
5228
|
+
|
|
4769
5229
|
//#endregion
|
|
4770
5230
|
//#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/encode.mjs
|
|
4771
5231
|
const encodeCache = {};
|
|
@@ -4820,6 +5280,7 @@ function encode(string, exclude, keepEscaped) {
|
|
|
4820
5280
|
}
|
|
4821
5281
|
encode.defaultChars = ";/?:@&=+$,-_.!~*'()#";
|
|
4822
5282
|
encode.componentChars = "-_.!~*'()";
|
|
5283
|
+
|
|
4823
5284
|
//#endregion
|
|
4824
5285
|
//#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/format.mjs
|
|
4825
5286
|
function format(url) {
|
|
@@ -4835,6 +5296,7 @@ function format(url) {
|
|
|
4835
5296
|
result += url.hash || "";
|
|
4836
5297
|
return result;
|
|
4837
5298
|
}
|
|
5299
|
+
|
|
4838
5300
|
//#endregion
|
|
4839
5301
|
//#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/parse.mjs
|
|
4840
5302
|
function Url() {
|
|
@@ -5007,6 +5469,7 @@ Url.prototype.parseHost = function(host) {
|
|
|
5007
5469
|
}
|
|
5008
5470
|
if (host) this.hostname = host;
|
|
5009
5471
|
};
|
|
5472
|
+
|
|
5010
5473
|
//#endregion
|
|
5011
5474
|
//#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/index.mjs
|
|
5012
5475
|
var mdurl_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -5015,24 +5478,31 @@ var mdurl_exports = /* @__PURE__ */ __exportAll({
|
|
|
5015
5478
|
format: () => format,
|
|
5016
5479
|
parse: () => urlParse
|
|
5017
5480
|
});
|
|
5481
|
+
|
|
5018
5482
|
//#endregion
|
|
5019
5483
|
//#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/properties/Any/regex.mjs
|
|
5020
5484
|
var regex_default$5 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
|
|
5485
|
+
|
|
5021
5486
|
//#endregion
|
|
5022
5487
|
//#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cc/regex.mjs
|
|
5023
5488
|
var regex_default$4 = /[\0-\x1F\x7F-\x9F]/;
|
|
5489
|
+
|
|
5024
5490
|
//#endregion
|
|
5025
5491
|
//#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cf/regex.mjs
|
|
5026
5492
|
var regex_default$3 = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/;
|
|
5493
|
+
|
|
5027
5494
|
//#endregion
|
|
5028
5495
|
//#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/P/regex.mjs
|
|
5029
5496
|
var regex_default$2 = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;
|
|
5497
|
+
|
|
5030
5498
|
//#endregion
|
|
5031
5499
|
//#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/S/regex.mjs
|
|
5032
5500
|
var regex_default$1 = /[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/;
|
|
5501
|
+
|
|
5033
5502
|
//#endregion
|
|
5034
5503
|
//#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Z/regex.mjs
|
|
5035
5504
|
var regex_default = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;
|
|
5505
|
+
|
|
5036
5506
|
//#endregion
|
|
5037
5507
|
//#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/index.mjs
|
|
5038
5508
|
var uc_micro_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -5043,12 +5513,15 @@ var uc_micro_exports = /* @__PURE__ */ __exportAll({
|
|
|
5043
5513
|
S: () => regex_default$1,
|
|
5044
5514
|
Z: () => regex_default
|
|
5045
5515
|
});
|
|
5516
|
+
|
|
5046
5517
|
//#endregion
|
|
5047
5518
|
//#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js
|
|
5048
5519
|
var decode_data_html_default = new Uint16Array("ᵁ<Õıʊҝջאٵ۞ޢߖࠏઑඡ༉༦ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲϏϢϸontourIntegraìȹoɴ\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲy;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱còJTabcdfgorstרׯؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ߂ߐĀiyޱrc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣসে্ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४ĀnrࢃgleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpwਖਛgȀLRlr৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼અઋp;椅y;䐜Ādl੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑඞcy;䐊cute;䅃ƀaeyહાron;䅇dil;䅅;䐝ƀgswે૰ativeƀMTV૨ediumSpace;怋hiĀcn૦ëeryThiîtedĀGLଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷreak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪௫ఄ಄ದൡඅ櫬Āoungruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater;EFGLSTஶஷ扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨setĀ;Eೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂෛ෧ขภยา฿ไlig;䅒cute耻Ó䃓Āiyීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲcr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬืde耻Õ䃕es;樷ml耻Ö䃖erĀBP๋Āar๐๓r;怾acĀek๚;揞et;掴arenthesis;揜ҀacfhilorsງຊຏຒດຝະrtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ檻cedesȀ;EST່້扺qual;檯lantEqual;扼ilde;找me;怳Ādpuct;戏ortionĀ;aȥl;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻\"䀢r;쀀𝔔pf;愚cr;쀀𝒬BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL憒ar;懥eftArrow;懄eiling;按oǵ\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄቕቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHcቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗ĀeiቻDzኀ\0ኇefore;戴a;䎘ĀcnኘkSpace;쀀 Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtèa;䎖r;愨pf;愤cr;쀀𝒵ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒;Eaeiopᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;eᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;eᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰᝃᝈ០៦ᠹᡐᜍ᥈ᥰot;櫭ĀcrᛶkȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;tbrk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯᝳ;䎲;愶een;扬r;쀀𝔟gcostuvwឍឝឳេ៕៛ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀakoᠦᠵĀcn៲ᠣkƀlst֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ;敛;敘;攘;攔;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģbar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;elƀ;bhᥨᥩᥫ䁜;槅sub;柈ŬᥴlĀ;e怢t»pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭒\0᯽\0ᰌƀcprᦲute;䄇̀;abcdsᦿᧀᧄ᧕᧙戩nd;橄rcup;橉Āau᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r;Ecefms᩠ᩢᩫ᪤᪪旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ\0\0aĀ;t䀬;䁀ƀ;fl戁îᅠeĀmxent»eóɍǧ\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯delprvw᭠᭬᭷ᮂᮬᯔarrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;pᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰻᰿ᱝᱩᱵᲞᲬᲷᴍᵻᶑᶫᶻ᷆᷍ròar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂᳖᳜᳠mƀ;oș᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄĀDoḆᴴoôĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»ṺƀaeiἒἚls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧\0耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₥₰₴⃰℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽ƀ;qsؾٌlanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqrⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0proør;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼ròòΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonóquigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roøurĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻\xA0ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨íistĀ;sடr;쀀𝔫ȀEest⩦⩹⩼ƀ;qs⩭ƀ;qs⩴lanôií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast⭕⭚⭟lleìl;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖchimpqu⮽⯍⯙⬄⯤⯯Ȁ;cerല⯆ഷ⯉uå;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭ååഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñĀ;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;cⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācrir;榿;쀀𝔬ͯ\0\0\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕⶥⶨrò᪀Āirⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔǒr;榷rp;榹;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ\0\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ脀¶;l䂶leìЃɩ\0\0m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳ᤈ⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t⾴ïrel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⋢⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔ABHabcdefhilmnoprstuxけさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstwガクシスゼゾダッデナp;極Ā;fゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ìâヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘rrowĀ;tㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowóarpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓ròaòՑ;怏oustĀ;a㈞掱che»mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì耻䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;qኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫwar;椪lig耻ß䃟㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rëƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproøim»ኬsðኞĀas㚺㚮ðrn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈadempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xôheadĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roðtré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜtré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌".split("").map((c) => c.charCodeAt(0)));
|
|
5520
|
+
|
|
5049
5521
|
//#endregion
|
|
5050
5522
|
//#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
|
|
5051
5523
|
var decode_data_xml_default = new Uint16Array("Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((c) => c.charCodeAt(0)));
|
|
5524
|
+
|
|
5052
5525
|
//#endregion
|
|
5053
5526
|
//#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
|
|
5054
5527
|
var _a;
|
|
@@ -5105,6 +5578,7 @@ function replaceCodePoint(codePoint) {
|
|
|
5105
5578
|
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) return 65533;
|
|
5106
5579
|
return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
|
|
5107
5580
|
}
|
|
5581
|
+
|
|
5108
5582
|
//#endregion
|
|
5109
5583
|
//#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
|
|
5110
5584
|
var CharCodes;
|
|
@@ -5461,7 +5935,7 @@ function determineBranch(decodeTree, current, nodeIdx, char) {
|
|
|
5461
5935
|
return -1;
|
|
5462
5936
|
}
|
|
5463
5937
|
const htmlDecoder = getDecoder(decode_data_html_default);
|
|
5464
|
-
getDecoder(decode_data_xml_default);
|
|
5938
|
+
const xmlDecoder = getDecoder(decode_data_xml_default);
|
|
5465
5939
|
/**
|
|
5466
5940
|
* Decodes an HTML string.
|
|
5467
5941
|
*
|
|
@@ -5472,6 +5946,7 @@ getDecoder(decode_data_xml_default);
|
|
|
5472
5946
|
function decodeHTML(str, mode = DecodingMode.Legacy) {
|
|
5473
5947
|
return htmlDecoder(str, mode);
|
|
5474
5948
|
}
|
|
5949
|
+
|
|
5475
5950
|
//#endregion
|
|
5476
5951
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/utils.mjs
|
|
5477
5952
|
var utils_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -5651,6 +6126,7 @@ const lib = {
|
|
|
5651
6126
|
mdurl: mdurl_exports,
|
|
5652
6127
|
ucmicro: uc_micro_exports
|
|
5653
6128
|
};
|
|
6129
|
+
|
|
5654
6130
|
//#endregion
|
|
5655
6131
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_label.mjs
|
|
5656
6132
|
function parseLinkLabel(state, start, disableNested) {
|
|
@@ -5683,6 +6159,7 @@ function parseLinkLabel(state, start, disableNested) {
|
|
|
5683
6159
|
state.pos = oldPos;
|
|
5684
6160
|
return labelEnd;
|
|
5685
6161
|
}
|
|
6162
|
+
|
|
5686
6163
|
//#endregion
|
|
5687
6164
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs
|
|
5688
6165
|
function parseLinkDestination(str, start, max) {
|
|
@@ -5740,6 +6217,7 @@ function parseLinkDestination(str, start, max) {
|
|
|
5740
6217
|
result.ok = true;
|
|
5741
6218
|
return result;
|
|
5742
6219
|
}
|
|
6220
|
+
|
|
5743
6221
|
//#endregion
|
|
5744
6222
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_title.mjs
|
|
5745
6223
|
function parseLinkTitle(str, start, max, prev_state) {
|
|
@@ -5779,6 +6257,7 @@ function parseLinkTitle(str, start, max, prev_state) {
|
|
|
5779
6257
|
state.str += unescapeAll(str.slice(start, pos));
|
|
5780
6258
|
return state;
|
|
5781
6259
|
}
|
|
6260
|
+
|
|
5782
6261
|
//#endregion
|
|
5783
6262
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/index.mjs
|
|
5784
6263
|
var helpers_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -5786,6 +6265,7 @@ var helpers_exports = /* @__PURE__ */ __exportAll({
|
|
|
5786
6265
|
parseLinkLabel: () => parseLinkLabel,
|
|
5787
6266
|
parseLinkTitle: () => parseLinkTitle
|
|
5788
6267
|
});
|
|
6268
|
+
|
|
5789
6269
|
//#endregion
|
|
5790
6270
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/renderer.mjs
|
|
5791
6271
|
/**
|
|
@@ -5999,6 +6479,7 @@ Renderer.prototype.render = function(tokens, options, env) {
|
|
|
5999
6479
|
}
|
|
6000
6480
|
return result;
|
|
6001
6481
|
};
|
|
6482
|
+
|
|
6002
6483
|
//#endregion
|
|
6003
6484
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/ruler.mjs
|
|
6004
6485
|
/**
|
|
@@ -6270,6 +6751,7 @@ Ruler.prototype.getRules = function(chainName) {
|
|
|
6270
6751
|
if (this.__cache__ === null) this.__compile__();
|
|
6271
6752
|
return this.__cache__[chainName] || [];
|
|
6272
6753
|
};
|
|
6754
|
+
|
|
6273
6755
|
//#endregion
|
|
6274
6756
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/token.mjs
|
|
6275
6757
|
/**
|
|
@@ -6424,6 +6906,7 @@ Token.prototype.attrJoin = function attrJoin(name, value) {
|
|
|
6424
6906
|
if (idx < 0) this.attrPush([name, value]);
|
|
6425
6907
|
else this.attrs[idx][1] = this.attrs[idx][1] + " " + value;
|
|
6426
6908
|
};
|
|
6909
|
+
|
|
6427
6910
|
//#endregion
|
|
6428
6911
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/state_core.mjs
|
|
6429
6912
|
function StateCore(src, md, env) {
|
|
@@ -6434,6 +6917,7 @@ function StateCore(src, md, env) {
|
|
|
6434
6917
|
this.md = md;
|
|
6435
6918
|
}
|
|
6436
6919
|
StateCore.prototype.Token = Token;
|
|
6920
|
+
|
|
6437
6921
|
//#endregion
|
|
6438
6922
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/normalize.mjs
|
|
6439
6923
|
const NEWLINES_RE = /\r\n?|\n/g;
|
|
@@ -6444,6 +6928,7 @@ function normalize(state) {
|
|
|
6444
6928
|
str = str.replace(NULL_RE, "�");
|
|
6445
6929
|
state.src = str;
|
|
6446
6930
|
}
|
|
6931
|
+
|
|
6447
6932
|
//#endregion
|
|
6448
6933
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/block.mjs
|
|
6449
6934
|
function block(state) {
|
|
@@ -6456,6 +6941,7 @@ function block(state) {
|
|
|
6456
6941
|
state.tokens.push(token);
|
|
6457
6942
|
} else state.md.block.parse(state.src, state.md, state.env, state.tokens);
|
|
6458
6943
|
}
|
|
6944
|
+
|
|
6459
6945
|
//#endregion
|
|
6460
6946
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/inline.mjs
|
|
6461
6947
|
function inline(state) {
|
|
@@ -6465,6 +6951,7 @@ function inline(state) {
|
|
|
6465
6951
|
if (tok.type === "inline") state.md.inline.parse(tok.content, state.md, state.env, tok.children);
|
|
6466
6952
|
}
|
|
6467
6953
|
}
|
|
6954
|
+
|
|
6468
6955
|
//#endregion
|
|
6469
6956
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/linkify.mjs
|
|
6470
6957
|
function isLinkOpen$1(str) {
|
|
@@ -6542,6 +7029,7 @@ function linkify$1(state) {
|
|
|
6542
7029
|
}
|
|
6543
7030
|
}
|
|
6544
7031
|
}
|
|
7032
|
+
|
|
6545
7033
|
//#endregion
|
|
6546
7034
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/replacements.mjs
|
|
6547
7035
|
const RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/;
|
|
@@ -6584,6 +7072,7 @@ function replace(state) {
|
|
|
6584
7072
|
if (RARE_RE.test(state.tokens[blkIdx].content)) replace_rare(state.tokens[blkIdx].children);
|
|
6585
7073
|
}
|
|
6586
7074
|
}
|
|
7075
|
+
|
|
6587
7076
|
//#endregion
|
|
6588
7077
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/smartquotes.mjs
|
|
6589
7078
|
const QUOTE_TEST_RE = /['"]/;
|
|
@@ -6692,6 +7181,7 @@ function smartquotes(state) {
|
|
|
6692
7181
|
process_inlines(state.tokens[blkIdx].children, state);
|
|
6693
7182
|
}
|
|
6694
7183
|
}
|
|
7184
|
+
|
|
6695
7185
|
//#endregion
|
|
6696
7186
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/text_join.mjs
|
|
6697
7187
|
function text_join(state) {
|
|
@@ -6711,6 +7201,7 @@ function text_join(state) {
|
|
|
6711
7201
|
if (curr !== last) tokens.length = last;
|
|
6712
7202
|
}
|
|
6713
7203
|
}
|
|
7204
|
+
|
|
6714
7205
|
//#endregion
|
|
6715
7206
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_core.mjs
|
|
6716
7207
|
/** internal
|
|
@@ -6750,6 +7241,7 @@ Core.prototype.process = function(state) {
|
|
|
6750
7241
|
for (let i = 0, l = rules.length; i < l; i++) rules[i](state);
|
|
6751
7242
|
};
|
|
6752
7243
|
Core.prototype.State = StateCore;
|
|
7244
|
+
|
|
6753
7245
|
//#endregion
|
|
6754
7246
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/state_block.mjs
|
|
6755
7247
|
function StateBlock(src, md, env, tokens) {
|
|
@@ -6857,6 +7349,7 @@ StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF
|
|
|
6857
7349
|
return queue.join("");
|
|
6858
7350
|
};
|
|
6859
7351
|
StateBlock.prototype.Token = Token;
|
|
7352
|
+
|
|
6860
7353
|
//#endregion
|
|
6861
7354
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/table.mjs
|
|
6862
7355
|
const MAX_AUTOCOMPLETED_CELLS = 65536;
|
|
@@ -6992,6 +7485,7 @@ function table(state, startLine, endLine, silent) {
|
|
|
6992
7485
|
state.line = nextLine;
|
|
6993
7486
|
return true;
|
|
6994
7487
|
}
|
|
7488
|
+
|
|
6995
7489
|
//#endregion
|
|
6996
7490
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/code.mjs
|
|
6997
7491
|
function code(state, startLine, endLine) {
|
|
@@ -7016,6 +7510,7 @@ function code(state, startLine, endLine) {
|
|
|
7016
7510
|
token.map = [startLine, state.line];
|
|
7017
7511
|
return true;
|
|
7018
7512
|
}
|
|
7513
|
+
|
|
7019
7514
|
//#endregion
|
|
7020
7515
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/fence.mjs
|
|
7021
7516
|
function fence(state, startLine, endLine, silent) {
|
|
@@ -7061,6 +7556,7 @@ function fence(state, startLine, endLine, silent) {
|
|
|
7061
7556
|
token.map = [startLine, state.line];
|
|
7062
7557
|
return true;
|
|
7063
7558
|
}
|
|
7559
|
+
|
|
7064
7560
|
//#endregion
|
|
7065
7561
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/blockquote.mjs
|
|
7066
7562
|
function blockquote(state, startLine, endLine, silent) {
|
|
@@ -7164,6 +7660,7 @@ function blockquote(state, startLine, endLine, silent) {
|
|
|
7164
7660
|
state.blkIndent = oldIndent;
|
|
7165
7661
|
return true;
|
|
7166
7662
|
}
|
|
7663
|
+
|
|
7167
7664
|
//#endregion
|
|
7168
7665
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/hr.mjs
|
|
7169
7666
|
function hr(state, startLine, endLine, silent) {
|
|
@@ -7186,6 +7683,7 @@ function hr(state, startLine, endLine, silent) {
|
|
|
7186
7683
|
token.markup = Array(cnt + 1).join(String.fromCharCode(marker));
|
|
7187
7684
|
return true;
|
|
7188
7685
|
}
|
|
7686
|
+
|
|
7189
7687
|
//#endregion
|
|
7190
7688
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/list.mjs
|
|
7191
7689
|
function skipBulletListMarker(state, startLine) {
|
|
@@ -7339,6 +7837,7 @@ function list(state, startLine, endLine, silent) {
|
|
|
7339
7837
|
if (tight) markTightParagraphs(state, listTokIdx);
|
|
7340
7838
|
return true;
|
|
7341
7839
|
}
|
|
7840
|
+
|
|
7342
7841
|
//#endregion
|
|
7343
7842
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/reference.mjs
|
|
7344
7843
|
function reference(state, startLine, _endLine, silent) {
|
|
@@ -7475,6 +7974,7 @@ function reference(state, startLine, _endLine, silent) {
|
|
|
7475
7974
|
state.line = nextLine;
|
|
7476
7975
|
return true;
|
|
7477
7976
|
}
|
|
7977
|
+
|
|
7478
7978
|
//#endregion
|
|
7479
7979
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/html_blocks.mjs
|
|
7480
7980
|
var html_blocks_default = [
|
|
@@ -7541,11 +8041,13 @@ var html_blocks_default = [
|
|
|
7541
8041
|
"track",
|
|
7542
8042
|
"ul"
|
|
7543
8043
|
];
|
|
8044
|
+
|
|
7544
8045
|
//#endregion
|
|
7545
8046
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/html_re.mjs
|
|
7546
8047
|
const open_tag = "<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>";
|
|
7547
8048
|
const HTML_TAG_RE = new RegExp("^(?:" + open_tag + "|<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>|<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->|<[?][\\s\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)");
|
|
7548
8049
|
const HTML_OPEN_CLOSE_TAG_RE = new RegExp("^(?:" + open_tag + "|<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>)");
|
|
8050
|
+
|
|
7549
8051
|
//#endregion
|
|
7550
8052
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/html_block.mjs
|
|
7551
8053
|
const HTML_SEQUENCES = [
|
|
@@ -7613,6 +8115,7 @@ function html_block(state, startLine, endLine, silent) {
|
|
|
7613
8115
|
token.content = state.getLines(startLine, nextLine, state.blkIndent, true);
|
|
7614
8116
|
return true;
|
|
7615
8117
|
}
|
|
8118
|
+
|
|
7616
8119
|
//#endregion
|
|
7617
8120
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/heading.mjs
|
|
7618
8121
|
function heading(state, startLine, endLine, silent) {
|
|
@@ -7644,6 +8147,7 @@ function heading(state, startLine, endLine, silent) {
|
|
|
7644
8147
|
token_c.markup = "########".slice(0, level);
|
|
7645
8148
|
return true;
|
|
7646
8149
|
}
|
|
8150
|
+
|
|
7647
8151
|
//#endregion
|
|
7648
8152
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/lheading.mjs
|
|
7649
8153
|
function lheading(state, startLine, endLine) {
|
|
@@ -7694,6 +8198,7 @@ function lheading(state, startLine, endLine) {
|
|
|
7694
8198
|
state.parentType = oldParentType;
|
|
7695
8199
|
return true;
|
|
7696
8200
|
}
|
|
8201
|
+
|
|
7697
8202
|
//#endregion
|
|
7698
8203
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/paragraph.mjs
|
|
7699
8204
|
function paragraph(state, startLine, endLine) {
|
|
@@ -7723,6 +8228,7 @@ function paragraph(state, startLine, endLine) {
|
|
|
7723
8228
|
state.parentType = oldParentType;
|
|
7724
8229
|
return true;
|
|
7725
8230
|
}
|
|
8231
|
+
|
|
7726
8232
|
//#endregion
|
|
7727
8233
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_block.mjs
|
|
7728
8234
|
/** internal
|
|
@@ -7855,6 +8361,7 @@ ParserBlock.prototype.parse = function(src, md, env, outTokens) {
|
|
|
7855
8361
|
this.tokenize(state, state.line, state.lineMax);
|
|
7856
8362
|
};
|
|
7857
8363
|
ParserBlock.prototype.State = StateBlock;
|
|
8364
|
+
|
|
7858
8365
|
//#endregion
|
|
7859
8366
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/state_inline.mjs
|
|
7860
8367
|
function StateInline(src, md, env, outTokens) {
|
|
@@ -7924,6 +8431,7 @@ StateInline.prototype.scanDelims = function(start, canSplitWord) {
|
|
|
7924
8431
|
};
|
|
7925
8432
|
};
|
|
7926
8433
|
StateInline.prototype.Token = Token;
|
|
8434
|
+
|
|
7927
8435
|
//#endregion
|
|
7928
8436
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/text.mjs
|
|
7929
8437
|
function isTerminatorChar(ch) {
|
|
@@ -7962,6 +8470,7 @@ function text(state, silent) {
|
|
|
7962
8470
|
state.pos = pos;
|
|
7963
8471
|
return true;
|
|
7964
8472
|
}
|
|
8473
|
+
|
|
7965
8474
|
//#endregion
|
|
7966
8475
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/linkify.mjs
|
|
7967
8476
|
const SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;
|
|
@@ -8001,6 +8510,7 @@ function linkify(state, silent) {
|
|
|
8001
8510
|
state.pos += url.length - proto.length;
|
|
8002
8511
|
return true;
|
|
8003
8512
|
}
|
|
8513
|
+
|
|
8004
8514
|
//#endregion
|
|
8005
8515
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/newline.mjs
|
|
8006
8516
|
function newline(state, silent) {
|
|
@@ -8023,6 +8533,7 @@ function newline(state, silent) {
|
|
|
8023
8533
|
state.pos = pos;
|
|
8024
8534
|
return true;
|
|
8025
8535
|
}
|
|
8536
|
+
|
|
8026
8537
|
//#endregion
|
|
8027
8538
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/escape.mjs
|
|
8028
8539
|
const ESCAPED = [];
|
|
@@ -8067,6 +8578,7 @@ function escape(state, silent) {
|
|
|
8067
8578
|
state.pos = pos + 1;
|
|
8068
8579
|
return true;
|
|
8069
8580
|
}
|
|
8581
|
+
|
|
8070
8582
|
//#endregion
|
|
8071
8583
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/backticks.mjs
|
|
8072
8584
|
function backtick(state, silent) {
|
|
@@ -8105,6 +8617,7 @@ function backtick(state, silent) {
|
|
|
8105
8617
|
state.pos += openerLength;
|
|
8106
8618
|
return true;
|
|
8107
8619
|
}
|
|
8620
|
+
|
|
8108
8621
|
//#endregion
|
|
8109
8622
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs
|
|
8110
8623
|
function strikethrough_tokenize(state, silent) {
|
|
@@ -8182,6 +8695,7 @@ var strikethrough_default = {
|
|
|
8182
8695
|
tokenize: strikethrough_tokenize,
|
|
8183
8696
|
postProcess: strikethrough_postProcess
|
|
8184
8697
|
};
|
|
8698
|
+
|
|
8185
8699
|
//#endregion
|
|
8186
8700
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/emphasis.mjs
|
|
8187
8701
|
function emphasis_tokenize(state, silent) {
|
|
@@ -8243,6 +8757,7 @@ var emphasis_default = {
|
|
|
8243
8757
|
tokenize: emphasis_tokenize,
|
|
8244
8758
|
postProcess: emphasis_post_process
|
|
8245
8759
|
};
|
|
8760
|
+
|
|
8246
8761
|
//#endregion
|
|
8247
8762
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/link.mjs
|
|
8248
8763
|
function link(state, silent) {
|
|
@@ -8323,6 +8838,7 @@ function link(state, silent) {
|
|
|
8323
8838
|
state.posMax = max;
|
|
8324
8839
|
return true;
|
|
8325
8840
|
}
|
|
8841
|
+
|
|
8326
8842
|
//#endregion
|
|
8327
8843
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/image.mjs
|
|
8328
8844
|
function image(state, silent) {
|
|
@@ -8401,6 +8917,7 @@ function image(state, silent) {
|
|
|
8401
8917
|
state.posMax = max;
|
|
8402
8918
|
return true;
|
|
8403
8919
|
}
|
|
8920
|
+
|
|
8404
8921
|
//#endregion
|
|
8405
8922
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/autolink.mjs
|
|
8406
8923
|
const EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;
|
|
@@ -8453,6 +8970,7 @@ function autolink(state, silent) {
|
|
|
8453
8970
|
}
|
|
8454
8971
|
return false;
|
|
8455
8972
|
}
|
|
8973
|
+
|
|
8456
8974
|
//#endregion
|
|
8457
8975
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/html_inline.mjs
|
|
8458
8976
|
function isLinkOpen(str) {
|
|
@@ -8483,6 +9001,7 @@ function html_inline(state, silent) {
|
|
|
8483
9001
|
state.pos += match[0].length;
|
|
8484
9002
|
return true;
|
|
8485
9003
|
}
|
|
9004
|
+
|
|
8486
9005
|
//#endregion
|
|
8487
9006
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/entity.mjs
|
|
8488
9007
|
const DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;
|
|
@@ -8523,6 +9042,7 @@ function entity(state, silent) {
|
|
|
8523
9042
|
}
|
|
8524
9043
|
return false;
|
|
8525
9044
|
}
|
|
9045
|
+
|
|
8526
9046
|
//#endregion
|
|
8527
9047
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs
|
|
8528
9048
|
function processDelimiters(delimiters) {
|
|
@@ -8582,6 +9102,7 @@ function link_pairs(state) {
|
|
|
8582
9102
|
processDelimiters(state.delimiters);
|
|
8583
9103
|
for (let curr = 0; curr < max; curr++) if (tokens_meta[curr] && tokens_meta[curr].delimiters) processDelimiters(tokens_meta[curr].delimiters);
|
|
8584
9104
|
}
|
|
9105
|
+
|
|
8585
9106
|
//#endregion
|
|
8586
9107
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs
|
|
8587
9108
|
function fragments_join(state) {
|
|
@@ -8601,6 +9122,7 @@ function fragments_join(state) {
|
|
|
8601
9122
|
}
|
|
8602
9123
|
if (curr !== last) tokens.length = last;
|
|
8603
9124
|
}
|
|
9125
|
+
|
|
8604
9126
|
//#endregion
|
|
8605
9127
|
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_inline.mjs
|
|
8606
9128
|
/** internal
|
|
@@ -8708,6 +9230,7 @@ ParserInline.prototype.parse = function(str, md, env, outTokens) {
|
|
|
8708
9230
|
for (let i = 0; i < len; i++) rules[i](state);
|
|
8709
9231
|
};
|
|
8710
9232
|
ParserInline.prototype.State = StateInline;
|
|
9233
|
+
|
|
8711
9234
|
//#endregion
|
|
8712
9235
|
//#region node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs
|
|
8713
9236
|
function re_default(opts) {
|
|
@@ -8748,6 +9271,7 @@ function re_default(opts) {
|
|
|
8748
9271
|
re.tpl_link_no_ip_fuzzy = "(^|(?![.:/\\-_@])(?:[$+<=>^`||]|" + re.src_ZPCc + "))((?![$+<=>^`||])" + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ")";
|
|
8749
9272
|
return re;
|
|
8750
9273
|
}
|
|
9274
|
+
|
|
8751
9275
|
//#endregion
|
|
8752
9276
|
//#region node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs
|
|
8753
9277
|
function assign(obj) {
|
|
@@ -9193,9 +9717,10 @@ LinkifyIt.prototype.normalize = function normalize(match) {
|
|
|
9193
9717
|
* Override to modify basic RegExp-s.
|
|
9194
9718
|
**/
|
|
9195
9719
|
LinkifyIt.prototype.onCompile = function onCompile() {};
|
|
9720
|
+
|
|
9196
9721
|
//#endregion
|
|
9197
|
-
//#region node_modules/.pnpm/
|
|
9198
|
-
var
|
|
9722
|
+
//#region node_modules/.pnpm/punycode.js@2.3.1/node_modules/punycode.js/punycode.js
|
|
9723
|
+
var require_punycode = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
9199
9724
|
/** Highest positive signed 32-bit float value */
|
|
9200
9725
|
const maxInt = 2147483647;
|
|
9201
9726
|
/** Bootstring parameters */
|
|
@@ -9467,7 +9992,8 @@ var import_punycode = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((e
|
|
|
9467
9992
|
return regexNonASCII.test(string) ? "xn--" + encode(string) : string;
|
|
9468
9993
|
});
|
|
9469
9994
|
};
|
|
9470
|
-
|
|
9995
|
+
/** Define the public API */
|
|
9996
|
+
const punycode = {
|
|
9471
9997
|
"version": "2.3.1",
|
|
9472
9998
|
"ucs2": {
|
|
9473
9999
|
"decode": ucs2decode,
|
|
@@ -9478,107 +10004,122 @@ var import_punycode = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((e
|
|
|
9478
10004
|
"toASCII": toASCII,
|
|
9479
10005
|
"toUnicode": toUnicode
|
|
9480
10006
|
};
|
|
9481
|
-
|
|
10007
|
+
module.exports = punycode;
|
|
10008
|
+
}));
|
|
10009
|
+
|
|
9482
10010
|
//#endregion
|
|
9483
|
-
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/
|
|
9484
|
-
|
|
9485
|
-
|
|
9486
|
-
|
|
9487
|
-
|
|
9488
|
-
|
|
9489
|
-
|
|
9490
|
-
|
|
9491
|
-
|
|
9492
|
-
|
|
9493
|
-
|
|
9494
|
-
|
|
9495
|
-
|
|
9496
|
-
},
|
|
9497
|
-
components: {
|
|
9498
|
-
core: {},
|
|
9499
|
-
block: {},
|
|
9500
|
-
inline: {}
|
|
9501
|
-
}
|
|
10011
|
+
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/default.mjs
|
|
10012
|
+
var import_punycode = /* @__PURE__ */ __toESM(require_punycode(), 1);
|
|
10013
|
+
var default_default = {
|
|
10014
|
+
options: {
|
|
10015
|
+
html: false,
|
|
10016
|
+
xhtmlOut: false,
|
|
10017
|
+
breaks: false,
|
|
10018
|
+
langPrefix: "language-",
|
|
10019
|
+
linkify: false,
|
|
10020
|
+
typographer: false,
|
|
10021
|
+
quotes: "“”‘’",
|
|
10022
|
+
highlight: null,
|
|
10023
|
+
maxNesting: 100
|
|
9502
10024
|
},
|
|
9503
|
-
|
|
9504
|
-
|
|
9505
|
-
|
|
9506
|
-
|
|
9507
|
-
|
|
9508
|
-
|
|
9509
|
-
|
|
9510
|
-
|
|
9511
|
-
|
|
9512
|
-
|
|
9513
|
-
|
|
9514
|
-
|
|
9515
|
-
|
|
9516
|
-
|
|
9517
|
-
|
|
9518
|
-
|
|
9519
|
-
|
|
9520
|
-
|
|
9521
|
-
|
|
9522
|
-
|
|
9523
|
-
|
|
9524
|
-
|
|
9525
|
-
|
|
9526
|
-
|
|
10025
|
+
components: {
|
|
10026
|
+
core: {},
|
|
10027
|
+
block: {},
|
|
10028
|
+
inline: {}
|
|
10029
|
+
}
|
|
10030
|
+
};
|
|
10031
|
+
|
|
10032
|
+
//#endregion
|
|
10033
|
+
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/zero.mjs
|
|
10034
|
+
var zero_default = {
|
|
10035
|
+
options: {
|
|
10036
|
+
html: false,
|
|
10037
|
+
xhtmlOut: false,
|
|
10038
|
+
breaks: false,
|
|
10039
|
+
langPrefix: "language-",
|
|
10040
|
+
linkify: false,
|
|
10041
|
+
typographer: false,
|
|
10042
|
+
quotes: "“”‘’",
|
|
10043
|
+
highlight: null,
|
|
10044
|
+
maxNesting: 20
|
|
10045
|
+
},
|
|
10046
|
+
components: {
|
|
10047
|
+
core: { rules: [
|
|
10048
|
+
"normalize",
|
|
10049
|
+
"block",
|
|
10050
|
+
"inline",
|
|
10051
|
+
"text_join"
|
|
10052
|
+
] },
|
|
10053
|
+
block: { rules: ["paragraph"] },
|
|
10054
|
+
inline: {
|
|
10055
|
+
rules: ["text"],
|
|
10056
|
+
rules2: ["balance_pairs", "fragments_join"]
|
|
9527
10057
|
}
|
|
10058
|
+
}
|
|
10059
|
+
};
|
|
10060
|
+
|
|
10061
|
+
//#endregion
|
|
10062
|
+
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/commonmark.mjs
|
|
10063
|
+
var commonmark_default = {
|
|
10064
|
+
options: {
|
|
10065
|
+
html: true,
|
|
10066
|
+
xhtmlOut: true,
|
|
10067
|
+
breaks: false,
|
|
10068
|
+
langPrefix: "language-",
|
|
10069
|
+
linkify: false,
|
|
10070
|
+
typographer: false,
|
|
10071
|
+
quotes: "“”‘’",
|
|
10072
|
+
highlight: null,
|
|
10073
|
+
maxNesting: 20
|
|
9528
10074
|
},
|
|
9529
|
-
|
|
9530
|
-
|
|
9531
|
-
|
|
9532
|
-
|
|
9533
|
-
|
|
9534
|
-
|
|
9535
|
-
|
|
9536
|
-
|
|
9537
|
-
|
|
9538
|
-
|
|
9539
|
-
|
|
9540
|
-
|
|
9541
|
-
|
|
9542
|
-
|
|
9543
|
-
|
|
9544
|
-
|
|
9545
|
-
|
|
9546
|
-
|
|
9547
|
-
|
|
9548
|
-
|
|
9549
|
-
|
|
9550
|
-
"
|
|
9551
|
-
"
|
|
9552
|
-
"
|
|
9553
|
-
"
|
|
9554
|
-
"
|
|
9555
|
-
"
|
|
9556
|
-
"
|
|
9557
|
-
"
|
|
9558
|
-
"
|
|
9559
|
-
|
|
9560
|
-
|
|
9561
|
-
|
|
9562
|
-
|
|
9563
|
-
|
|
9564
|
-
|
|
9565
|
-
|
|
9566
|
-
"escape",
|
|
9567
|
-
"html_inline",
|
|
9568
|
-
"image",
|
|
9569
|
-
"link",
|
|
9570
|
-
"newline",
|
|
9571
|
-
"text"
|
|
9572
|
-
],
|
|
9573
|
-
rules2: [
|
|
9574
|
-
"balance_pairs",
|
|
9575
|
-
"emphasis",
|
|
9576
|
-
"fragments_join"
|
|
9577
|
-
]
|
|
9578
|
-
}
|
|
10075
|
+
components: {
|
|
10076
|
+
core: { rules: [
|
|
10077
|
+
"normalize",
|
|
10078
|
+
"block",
|
|
10079
|
+
"inline",
|
|
10080
|
+
"text_join"
|
|
10081
|
+
] },
|
|
10082
|
+
block: { rules: [
|
|
10083
|
+
"blockquote",
|
|
10084
|
+
"code",
|
|
10085
|
+
"fence",
|
|
10086
|
+
"heading",
|
|
10087
|
+
"hr",
|
|
10088
|
+
"html_block",
|
|
10089
|
+
"lheading",
|
|
10090
|
+
"list",
|
|
10091
|
+
"reference",
|
|
10092
|
+
"paragraph"
|
|
10093
|
+
] },
|
|
10094
|
+
inline: {
|
|
10095
|
+
rules: [
|
|
10096
|
+
"autolink",
|
|
10097
|
+
"backticks",
|
|
10098
|
+
"emphasis",
|
|
10099
|
+
"entity",
|
|
10100
|
+
"escape",
|
|
10101
|
+
"html_inline",
|
|
10102
|
+
"image",
|
|
10103
|
+
"link",
|
|
10104
|
+
"newline",
|
|
10105
|
+
"text"
|
|
10106
|
+
],
|
|
10107
|
+
rules2: [
|
|
10108
|
+
"balance_pairs",
|
|
10109
|
+
"emphasis",
|
|
10110
|
+
"fragments_join"
|
|
10111
|
+
]
|
|
9579
10112
|
}
|
|
9580
10113
|
}
|
|
9581
10114
|
};
|
|
10115
|
+
|
|
10116
|
+
//#endregion
|
|
10117
|
+
//#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/index.mjs
|
|
10118
|
+
const config = {
|
|
10119
|
+
default: default_default,
|
|
10120
|
+
zero: zero_default,
|
|
10121
|
+
commonmark: commonmark_default
|
|
10122
|
+
};
|
|
9582
10123
|
const BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;
|
|
9583
10124
|
const GOOD_DATA_RE = /^data:image\/(gif|png|jpeg|webp);/;
|
|
9584
10125
|
function validateLink(url) {
|
|
@@ -10039,6 +10580,7 @@ MarkdownIt.prototype.renderInline = function(src, env) {
|
|
|
10039
10580
|
env = env || {};
|
|
10040
10581
|
return this.renderer.render(this.parseInline(src, env), this.options, env);
|
|
10041
10582
|
};
|
|
10583
|
+
|
|
10042
10584
|
//#endregion
|
|
10043
10585
|
//#region src/import-preprocess.ts
|
|
10044
10586
|
/**
|
|
@@ -10473,6 +11015,7 @@ function prepareImport(workspaceDir, extraPaths, sessionsDir) {
|
|
|
10473
11015
|
totalSegments: allSegments.length
|
|
10474
11016
|
};
|
|
10475
11017
|
}
|
|
11018
|
+
|
|
10476
11019
|
//#endregion
|
|
10477
11020
|
//#region src/migration-service.ts
|
|
10478
11021
|
/**
|
|
@@ -10503,7 +11046,8 @@ function calculateImportStrength(segmentDate) {
|
|
|
10503
11046
|
const ageMs = Date.now() - new Date(segmentDate).getTime();
|
|
10504
11047
|
if (ageMs <= 0) return 1;
|
|
10505
11048
|
const ageDays = ageMs / (1440 * 60 * 1e3);
|
|
10506
|
-
|
|
11049
|
+
const strength = Math.pow(DECAY_PER_DAY, ageDays);
|
|
11050
|
+
return Math.max(strength, MIN_IMPORT_STRENGTH);
|
|
10507
11051
|
}
|
|
10508
11052
|
/**
|
|
10509
11053
|
* Run the memory-core migration. Idempotent — checks db state before proceeding.
|
|
@@ -10853,6 +11397,7 @@ Here is the current content of ${fileName}:
|
|
|
10853
11397
|
|
|
10854
11398
|
${content}`;
|
|
10855
11399
|
}
|
|
11400
|
+
|
|
10856
11401
|
//#endregion
|
|
10857
11402
|
//#region src/turn-memory-ledger.ts
|
|
10858
11403
|
/**
|
|
@@ -10913,6 +11458,7 @@ var TurnMemoryLedger = class {
|
|
|
10913
11458
|
this.version = 0;
|
|
10914
11459
|
}
|
|
10915
11460
|
};
|
|
11461
|
+
|
|
10916
11462
|
//#endregion
|
|
10917
11463
|
//#region src/index.ts
|
|
10918
11464
|
/**
|
|
@@ -10926,25 +11472,82 @@ var TurnMemoryLedger = class {
|
|
|
10926
11472
|
* - Internal tick-based time perception
|
|
10927
11473
|
*/
|
|
10928
11474
|
const AUTH_PROFILE_FILENAME = "auth-profiles.json";
|
|
11475
|
+
const profileCache = /* @__PURE__ */ new Map();
|
|
10929
11476
|
/**
|
|
10930
11477
|
* Read API keys from auth-profiles.json.
|
|
10931
|
-
*
|
|
10932
|
-
*
|
|
11478
|
+
*
|
|
11479
|
+
* Lookup order:
|
|
11480
|
+
* 1. agentDir — the preferred location, passed by OpenClaw at runtime.
|
|
11481
|
+
* 2. stateDir/agents/main/agent/ — hardcoded "main" fallback for
|
|
11482
|
+
* single-agent setups. Multi-agent configurations (where the active
|
|
11483
|
+
* agent isn't named "main") will resolve the wrong credentials here.
|
|
11484
|
+
* A warning is emitted when this fallback actually returns a profile,
|
|
11485
|
+
* so operators notice the brittle assumption.
|
|
10933
11486
|
*/
|
|
10934
11487
|
function readAuthProfiles(stateDir, agentDir, logger) {
|
|
10935
|
-
const
|
|
10936
|
-
|
|
11488
|
+
const agentDirPath = agentDir ? join(agentDir, AUTH_PROFILE_FILENAME) : void 0;
|
|
11489
|
+
const mainFallbackPath = stateDir ? join(stateDir, "agents", "main", "agent", AUTH_PROFILE_FILENAME) : void 0;
|
|
11490
|
+
const candidates = [agentDirPath, mainFallbackPath].filter((p) => Boolean(p));
|
|
11491
|
+
for (const filePath of candidates) {
|
|
11492
|
+
const profiles = readProfilesWithCache(filePath, logger);
|
|
11493
|
+
if (!profiles) continue;
|
|
11494
|
+
if (filePath === mainFallbackPath && Object.keys(profiles).length > 0) logger?.warn(`Resolved auth-profiles from the hardcoded "main" agent fallback (${filePath}). This works for single-agent setups but may pick wrong credentials in multi-agent configurations. Ensure OpenClaw passes agentDir at runtime.`);
|
|
11495
|
+
return profiles;
|
|
11496
|
+
}
|
|
11497
|
+
return null;
|
|
11498
|
+
}
|
|
11499
|
+
/**
|
|
11500
|
+
* Cached read of a single auth-profiles.json file. Returns the parsed
|
|
11501
|
+
* (and validated) profiles object, or null if the file doesn't exist or
|
|
11502
|
+
* is malformed. Cache invalidates on mtime change.
|
|
11503
|
+
*/
|
|
11504
|
+
function readProfilesWithCache(filePath, logger) {
|
|
11505
|
+
let mtimeMs;
|
|
11506
|
+
try {
|
|
11507
|
+
mtimeMs = statSync(filePath).mtimeMs;
|
|
11508
|
+
} catch (err) {
|
|
11509
|
+
if (err?.code !== "ENOENT") logger?.warn(`Failed to stat auth profiles ${filePath}: ${err.message}`);
|
|
11510
|
+
profileCache.delete(filePath);
|
|
11511
|
+
return null;
|
|
11512
|
+
}
|
|
11513
|
+
const cached = profileCache.get(filePath);
|
|
11514
|
+
if (cached && cached.mtimeMs === mtimeMs) return cached.kind === "hit" ? cached.profiles : null;
|
|
11515
|
+
try {
|
|
10937
11516
|
const raw = readFileSync(filePath, "utf-8");
|
|
10938
11517
|
const data = JSON.parse(raw);
|
|
10939
|
-
if (!data || typeof data !== "object" || typeof data.profiles !== "object") {
|
|
11518
|
+
if (!data || typeof data !== "object" || Array.isArray(data) || !data.profiles || typeof data.profiles !== "object" || Array.isArray(data.profiles)) {
|
|
10940
11519
|
logger?.warn(`Invalid auth profile format: ${filePath}`);
|
|
10941
|
-
|
|
11520
|
+
profileCache.set(filePath, {
|
|
11521
|
+
kind: "miss",
|
|
11522
|
+
mtimeMs
|
|
11523
|
+
});
|
|
11524
|
+
return null;
|
|
11525
|
+
}
|
|
11526
|
+
const cleaned = {};
|
|
11527
|
+
for (const [name, entry] of Object.entries(data.profiles)) {
|
|
11528
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) continue;
|
|
11529
|
+
const record = entry;
|
|
11530
|
+
if (record.provider !== void 0 && typeof record.provider !== "string") continue;
|
|
11531
|
+
if (record.key !== void 0 && typeof record.key !== "string") continue;
|
|
11532
|
+
cleaned[name] = {
|
|
11533
|
+
provider: record.provider,
|
|
11534
|
+
key: record.key
|
|
11535
|
+
};
|
|
10942
11536
|
}
|
|
10943
|
-
|
|
11537
|
+
profileCache.set(filePath, {
|
|
11538
|
+
kind: "hit",
|
|
11539
|
+
mtimeMs,
|
|
11540
|
+
profiles: cleaned
|
|
11541
|
+
});
|
|
11542
|
+
return cleaned;
|
|
10944
11543
|
} catch (err) {
|
|
10945
|
-
|
|
11544
|
+
logger?.warn(`Failed to read auth profiles from ${filePath}: ${err.message}`);
|
|
11545
|
+
profileCache.set(filePath, {
|
|
11546
|
+
kind: "miss",
|
|
11547
|
+
mtimeMs
|
|
11548
|
+
});
|
|
11549
|
+
return null;
|
|
10946
11550
|
}
|
|
10947
|
-
return null;
|
|
10948
11551
|
}
|
|
10949
11552
|
/**
|
|
10950
11553
|
* Resolve LLM caller config from auth profiles.
|
|
@@ -11001,79 +11604,79 @@ function resolveMemoryDir(config, workspaceDir, pathResolver) {
|
|
|
11001
11604
|
if (isAbsolute(dbPath)) return dbPath;
|
|
11002
11605
|
return join(workspaceDir, dbPath);
|
|
11003
11606
|
}
|
|
11004
|
-
const EMBEDDING_REQUIRED_HINT = "Embedding provider required but not available.\
|
|
11005
|
-
/**
|
|
11006
|
-
* Try to create an embedding provider directly via SDK factory functions.
|
|
11007
|
-
* Used when the memory-core plugin is disabled and the global registry is empty.
|
|
11008
|
-
* Factory returns { provider, client } — we extract the provider.
|
|
11009
|
-
*/
|
|
11010
|
-
async function tryDirectProviderFactory(providerId, openclawConfig, agentDir, model) {
|
|
11011
|
-
const factory = {
|
|
11012
|
-
openai: createOpenAiEmbeddingProvider,
|
|
11013
|
-
gemini: createGeminiEmbeddingProvider
|
|
11014
|
-
}[providerId];
|
|
11015
|
-
if (!factory) return null;
|
|
11016
|
-
const result = await factory({
|
|
11017
|
-
config: openclawConfig,
|
|
11018
|
-
agentDir,
|
|
11019
|
-
model: model ?? ""
|
|
11020
|
-
});
|
|
11021
|
-
const provider = result?.provider ?? result;
|
|
11022
|
-
return provider?.embedQuery ? provider : null;
|
|
11023
|
-
}
|
|
11607
|
+
const EMBEDDING_REQUIRED_HINT = "Embedding provider required but not available.\nConfigure an API key in auth-profiles.json under an openai:default or google:default profile.\nIf memory-core embedding adapters are installed, their providers are also tried.\nTo run without embeddings (BM25-only), set \"requireEmbedding\": false in plugin config.";
|
|
11024
11608
|
/**
|
|
11025
|
-
* Resolve an embedding provider
|
|
11609
|
+
* Resolve an embedding provider.
|
|
11026
11610
|
*
|
|
11027
|
-
*
|
|
11028
|
-
*
|
|
11611
|
+
* Resolution order:
|
|
11612
|
+
* 1. Registry adapters (memory-core) — preferred when available
|
|
11613
|
+
* 2. Standalone fetch-based providers — fallback when registry is empty OR
|
|
11614
|
+
* when registered adapters fail to initialize (e.g. memory-core auth broken)
|
|
11615
|
+
*
|
|
11616
|
+
* The standalone fallback also runs after registry failures, not only on
|
|
11617
|
+
* empty registry. This is critical: memory-core may be installed but unable
|
|
11618
|
+
* to resolve API keys in non-tool contexts (cron, migration, assemble).
|
|
11029
11619
|
*
|
|
11030
11620
|
* Throws on failure — the plugin requires a working embedding provider.
|
|
11031
11621
|
*/
|
|
11032
|
-
async function resolveEmbeddingProvider(providerId, openclawConfig, agentDir, model) {
|
|
11622
|
+
async function resolveEmbeddingProvider(providerId, openclawConfig, agentDir, model, stateDir, logger) {
|
|
11033
11623
|
const errors = [];
|
|
11624
|
+
const profiles = readAuthProfiles(stateDir, agentDir, logger);
|
|
11034
11625
|
if (providerId === "auto") {
|
|
11035
11626
|
const adapters = listMemoryEmbeddingProviders().filter((a) => typeof a.autoSelectPriority === "number").toSorted((a, b) => (a.autoSelectPriority ?? Infinity) - (b.autoSelectPriority ?? Infinity));
|
|
11036
11627
|
for (const adapter of adapters) try {
|
|
11037
11628
|
const result = await adapter.create({
|
|
11038
11629
|
config: openclawConfig,
|
|
11039
11630
|
agentDir,
|
|
11040
|
-
model:
|
|
11631
|
+
model: adapter.defaultModel ?? ""
|
|
11041
11632
|
});
|
|
11042
11633
|
if (result.provider) return result.provider;
|
|
11043
11634
|
} catch (err) {
|
|
11044
11635
|
errors.push(`${adapter.id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
11045
11636
|
}
|
|
11046
|
-
|
|
11047
|
-
|
|
11048
|
-
|
|
11049
|
-
} catch (err) {
|
|
11050
|
-
errors.push(`${id} (direct): ${err instanceof Error ? err.message : String(err)}`);
|
|
11051
|
-
}
|
|
11637
|
+
const provider = autoSelectStandaloneProvider(profiles, logger);
|
|
11638
|
+
if (provider) return provider;
|
|
11639
|
+
errors.push("standalone: no API key found for openai or gemini");
|
|
11052
11640
|
throw new Error(`No embedding provider available (tried auto-selection).\n${errors.join("\n") || "No adapters registered."}`);
|
|
11053
11641
|
}
|
|
11054
11642
|
const adapter = getMemoryEmbeddingProvider(providerId);
|
|
11055
|
-
if (adapter) {
|
|
11643
|
+
if (adapter) try {
|
|
11056
11644
|
const result = await adapter.create({
|
|
11057
11645
|
config: openclawConfig,
|
|
11058
11646
|
agentDir,
|
|
11059
11647
|
model: model ?? adapter.defaultModel ?? ""
|
|
11060
11648
|
});
|
|
11061
11649
|
if (result.provider) return result.provider;
|
|
11062
|
-
|
|
11650
|
+
errors.push(`${providerId}: registry adapter returned no provider instance`);
|
|
11651
|
+
} catch (err) {
|
|
11652
|
+
errors.push(`${providerId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
11063
11653
|
}
|
|
11064
|
-
const
|
|
11065
|
-
if (
|
|
11066
|
-
throw new Error(`Unknown embedding provider: "${providerId}"`);
|
|
11654
|
+
const standaloneProvider = tryCreateStandaloneProvider(providerId, profiles, model, logger);
|
|
11655
|
+
if (standaloneProvider) return standaloneProvider;
|
|
11656
|
+
throw new Error(errors.length > 0 ? `Embedding provider "${providerId}" unavailable.\n${errors.join("\n")}` : `Unknown embedding provider: "${providerId}"`);
|
|
11067
11657
|
}
|
|
11068
11658
|
/**
|
|
11069
|
-
*
|
|
11070
|
-
*
|
|
11659
|
+
* WORKAROUND: ContextEngineFactory receives no runtime context (agentDir,
|
|
11660
|
+
* workspaceDir) from OpenClaw. We work around this with:
|
|
11661
|
+
*
|
|
11662
|
+
* 1. Lazy getters — agentDir is resolved dynamically via getAgentDir() at
|
|
11663
|
+
* each embed call, not captured once at construction time. This allows
|
|
11664
|
+
* the workspace to be created before agentDir is known (e.g. heartbeat)
|
|
11665
|
+
* and self-heal when a tool call later provides it.
|
|
11666
|
+
*
|
|
11667
|
+
* 2. Decoupled init — startup tasks (migration, cleanup) are tracked with a
|
|
11668
|
+
* separate flag, not tied to workspace creation. This prevents them from
|
|
11669
|
+
* being permanently skipped when the workspace is first created by a
|
|
11670
|
+
* non-tool caller (context engine, cron).
|
|
11671
|
+
*
|
|
11672
|
+
* 3. Non-permanent provider caching — when embedding resolution fails due
|
|
11673
|
+
* to missing agentDir, the error is NOT permanently cached. Subsequent
|
|
11674
|
+
* calls can retry once agentDir becomes available.
|
|
11071
11675
|
*
|
|
11072
|
-
*
|
|
11073
|
-
*
|
|
11074
|
-
* the first tool call which provides the real workspace context.
|
|
11676
|
+
* This will be removed when OpenClaw passes context to ContextEngineFactory.
|
|
11677
|
+
* See: issues/open/08-upstream-prs/proposal-factory-context.md
|
|
11075
11678
|
*/
|
|
11076
|
-
function createWorkspace(config, workspaceDir, openclawConfig,
|
|
11679
|
+
function createWorkspace(config, workspaceDir, openclawConfig, getAgentDir, logger, pathResolver, getStateDir) {
|
|
11077
11680
|
const memoryDir = resolveMemoryDir(config, workspaceDir, pathResolver);
|
|
11078
11681
|
const circuitBreaker = new EmbeddingCircuitBreaker({
|
|
11079
11682
|
onStateChange: (from, to) => {
|
|
@@ -11086,24 +11689,60 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
|
|
|
11086
11689
|
}
|
|
11087
11690
|
});
|
|
11088
11691
|
let providerPromise = null;
|
|
11692
|
+
let dbRef = null;
|
|
11089
11693
|
const getProvider = () => {
|
|
11090
|
-
if (!providerPromise)
|
|
11091
|
-
|
|
11092
|
-
|
|
11093
|
-
|
|
11094
|
-
|
|
11694
|
+
if (!providerPromise) {
|
|
11695
|
+
const currentAgentDir = getAgentDir();
|
|
11696
|
+
if (config.requireEmbedding && !currentAgentDir) return Promise.reject(/* @__PURE__ */ new Error("Embedding provider auth requires agentDir which is not yet available. Will retry when a tool call provides runtime context."));
|
|
11697
|
+
providerPromise = (async () => {
|
|
11698
|
+
const db = dbRef;
|
|
11699
|
+
const persistedId = db?.getState("embedding_provider_id") ?? null;
|
|
11700
|
+
const persistedModel = db?.getState("embedding_model") ?? null;
|
|
11701
|
+
let effectiveProvider = config.embedding.provider;
|
|
11702
|
+
let effectiveModel = config.embedding.model;
|
|
11703
|
+
if (persistedId) if (config.embedding.provider === "auto") {
|
|
11704
|
+
effectiveProvider = persistedId;
|
|
11705
|
+
effectiveModel = persistedModel ?? void 0;
|
|
11706
|
+
} else if (config.embedding.provider !== persistedId) throw new Error(`Embedding provider mismatch: DB was indexed with "${persistedId}" but config requests "${config.embedding.provider}". Vector dimensions differ between providers. Either set embedding.provider back to "${persistedId}", or re-embed the DB via migration.`);
|
|
11707
|
+
else if (config.embedding.model && persistedModel && config.embedding.model !== persistedModel) throw new Error(`Embedding model mismatch: DB was indexed with "${persistedId}/${persistedModel}" but config requests "${config.embedding.provider}/${config.embedding.model}". Different models produce different vector dimensions. Either set embedding.model back to "${persistedModel}", or re-embed the DB via migration.`);
|
|
11708
|
+
else effectiveModel = effectiveModel ?? persistedModel ?? void 0;
|
|
11709
|
+
const provider = await resolveEmbeddingProvider(effectiveProvider, openclawConfig, currentAgentDir, effectiveModel, getStateDir?.(), logger);
|
|
11710
|
+
if (db && !persistedId) {
|
|
11711
|
+
db.setState("embedding_provider_id", provider.id);
|
|
11712
|
+
db.setState("embedding_model", provider.model);
|
|
11713
|
+
logger?.info(`Persisted embedding identity to DB: ${provider.id}/${provider.model}`);
|
|
11714
|
+
}
|
|
11715
|
+
return provider;
|
|
11716
|
+
})().catch((err) => {
|
|
11717
|
+
providerPromise = null;
|
|
11718
|
+
if (config.requireEmbedding) throw new Error(`${EMBEDDING_REQUIRED_HINT}\nDetails: ${err instanceof Error ? err.message : String(err)}`);
|
|
11719
|
+
throw err;
|
|
11720
|
+
});
|
|
11721
|
+
}
|
|
11095
11722
|
return providerPromise;
|
|
11096
11723
|
};
|
|
11097
|
-
if (config.requireEmbedding) getProvider().catch(() => {});
|
|
11098
11724
|
const ws = {
|
|
11099
11725
|
manager: new MemoryManager(memoryDir, { async embed(text) {
|
|
11100
11726
|
const provider = await getProvider();
|
|
11101
11727
|
return circuitBreaker.call(() => provider.embedQuery(text));
|
|
11102
11728
|
} }, logger, config.logQueries),
|
|
11103
11729
|
circuitBreaker,
|
|
11104
|
-
memoryDir
|
|
11730
|
+
memoryDir,
|
|
11731
|
+
initProvider: async () => {
|
|
11732
|
+
await getProvider();
|
|
11733
|
+
}
|
|
11105
11734
|
};
|
|
11106
|
-
|
|
11735
|
+
dbRef = ws.manager.getDatabase();
|
|
11736
|
+
if (config.requireEmbedding && getAgentDir()) getProvider().catch(() => {});
|
|
11737
|
+
return ws;
|
|
11738
|
+
}
|
|
11739
|
+
/**
|
|
11740
|
+
* Run one-time startup tasks (migration + workspace cleanup).
|
|
11741
|
+
* Decoupled from createWorkspace so they can be triggered independently
|
|
11742
|
+
* of workspace creation — see workaround comment above.
|
|
11743
|
+
*/
|
|
11744
|
+
function runStartupTasks(ws, config, workspaceDir, getAgentDir, logger, initDeps) {
|
|
11745
|
+
(async () => {
|
|
11107
11746
|
const db = ws.manager.getDatabase();
|
|
11108
11747
|
const dbState = {
|
|
11109
11748
|
get: (key) => db.getState(key),
|
|
@@ -11124,7 +11763,7 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
|
|
|
11124
11763
|
logger?.warn(`Workspace cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
11125
11764
|
}
|
|
11126
11765
|
if (config.requireEmbedding) try {
|
|
11127
|
-
await
|
|
11766
|
+
await ws.initProvider();
|
|
11128
11767
|
} catch (err) {
|
|
11129
11768
|
logger?.error(`Migration aborted: embedding required but unavailable. ${err instanceof Error ? err.message : String(err)}`);
|
|
11130
11769
|
return;
|
|
@@ -11137,6 +11776,7 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
|
|
|
11137
11776
|
temporal_state: seg.date ? "past" : "none",
|
|
11138
11777
|
temporal_anchor: seg.date
|
|
11139
11778
|
}));
|
|
11779
|
+
const agentDir = getAgentDir();
|
|
11140
11780
|
const sessionsDir = agentDir ? join(agentDir, "sessions") : void 0;
|
|
11141
11781
|
const migrationResult = await runMigration({
|
|
11142
11782
|
workspaceDir,
|
|
@@ -11158,7 +11798,6 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
|
|
|
11158
11798
|
logger?.warn(`Migration failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
11159
11799
|
}
|
|
11160
11800
|
})();
|
|
11161
|
-
return ws;
|
|
11162
11801
|
}
|
|
11163
11802
|
function createMemoryTools(getManager, getLogPath, ledger) {
|
|
11164
11803
|
return [
|
|
@@ -11310,20 +11949,28 @@ const associativeMemoryPlugin = {
|
|
|
11310
11949
|
const ledger = new TurnMemoryLedger();
|
|
11311
11950
|
const runtimePaths = {};
|
|
11312
11951
|
let workspace = null;
|
|
11313
|
-
|
|
11314
|
-
|
|
11315
|
-
|
|
11316
|
-
|
|
11317
|
-
|
|
11318
|
-
llmConfig
|
|
11319
|
-
} : void 0);
|
|
11320
|
-
}
|
|
11952
|
+
let startupTasksTriggered = false;
|
|
11953
|
+
const getAgentDir = () => runtimePaths.agentDir;
|
|
11954
|
+
const getStateDir = () => runtimePaths.stateDir;
|
|
11955
|
+
const getWorkspace = (workspaceDir) => {
|
|
11956
|
+
if (!workspace) workspace = createWorkspace(config, workspaceDir, openclawConfig, getAgentDir, log, api.resolvePath, getStateDir);
|
|
11321
11957
|
return workspace;
|
|
11322
11958
|
};
|
|
11959
|
+
const triggerStartupTasks = (workspaceDir) => {
|
|
11960
|
+
if (startupTasksTriggered) return;
|
|
11961
|
+
const ws = getWorkspace(workspaceDir);
|
|
11962
|
+
const llmConfig = resolveLlmConfig(runtimePaths.stateDir, getAgentDir(), log);
|
|
11963
|
+
runStartupTasks(ws, config, workspaceDir, getAgentDir, log, {
|
|
11964
|
+
stateDir: runtimePaths.stateDir,
|
|
11965
|
+
llmConfig
|
|
11966
|
+
});
|
|
11967
|
+
startupTasksTriggered = true;
|
|
11968
|
+
};
|
|
11323
11969
|
api.registerTool((ctx) => {
|
|
11324
11970
|
const workspaceDir = ctx.workspaceDir ?? ctx.agentDir ?? ".";
|
|
11325
11971
|
runtimePaths.agentDir ??= ctx.agentDir;
|
|
11326
|
-
const ws = getWorkspace(workspaceDir
|
|
11972
|
+
const ws = getWorkspace(workspaceDir);
|
|
11973
|
+
triggerStartupTasks(workspaceDir);
|
|
11327
11974
|
return createMemoryTools(() => ws.manager, () => join(ws.memoryDir, "retrieval.log"), ledger);
|
|
11328
11975
|
}, { names: [
|
|
11329
11976
|
"memory_store",
|
|
@@ -11474,17 +12121,22 @@ const associativeMemoryPlugin = {
|
|
|
11474
12121
|
/** Cron expression: daily at 15:00 (03:00 is covered by full consolidation). */
|
|
11475
12122
|
const DEFAULT_TEMPORAL_CRON = "0 15 * * *";
|
|
11476
12123
|
api.registerHook("gateway:startup", async (event) => {
|
|
12124
|
+
const context = event?.context;
|
|
12125
|
+
const cron = context?.cron ?? context?.deps?.cron;
|
|
12126
|
+
if (!cron || typeof cron.list !== "function" || typeof cron.add !== "function") {
|
|
12127
|
+
log.warn("Cron service not available — scheduled consolidation disabled");
|
|
12128
|
+
return;
|
|
12129
|
+
}
|
|
12130
|
+
if (context?.stateDir) runtimePaths.stateDir = context.stateDir;
|
|
12131
|
+
let allJobs;
|
|
11477
12132
|
try {
|
|
11478
|
-
|
|
11479
|
-
|
|
11480
|
-
|
|
11481
|
-
|
|
11482
|
-
|
|
11483
|
-
|
|
11484
|
-
|
|
11485
|
-
const allJobs = await cron.list({ includeDisabled: true });
|
|
11486
|
-
const managed = allJobs.filter((j) => j.description?.includes(CONSOLIDATION_CRON_TAG));
|
|
11487
|
-
const desired = {
|
|
12133
|
+
allJobs = await cron.list({ includeDisabled: true });
|
|
12134
|
+
} catch (err) {
|
|
12135
|
+
log.warn(`Failed to list cron jobs — scheduled consolidation disabled: ${err instanceof Error ? err.message : String(err)}`);
|
|
12136
|
+
return;
|
|
12137
|
+
}
|
|
12138
|
+
try {
|
|
12139
|
+
await reconcileCronJob(cron, allJobs, {
|
|
11488
12140
|
name: CONSOLIDATION_CRON_NAME,
|
|
11489
12141
|
description: `${CONSOLIDATION_CRON_TAG} Full consolidation: decay, reinforce, merge, prune, promote.`,
|
|
11490
12142
|
enabled: true,
|
|
@@ -11493,25 +12145,17 @@ const associativeMemoryPlugin = {
|
|
|
11493
12145
|
expr: DEFAULT_CONSOLIDATION_CRON
|
|
11494
12146
|
},
|
|
11495
12147
|
sessionTarget: "main",
|
|
11496
|
-
wakeMode: "
|
|
12148
|
+
wakeMode: "now",
|
|
11497
12149
|
payload: {
|
|
11498
12150
|
kind: "systemEvent",
|
|
11499
12151
|
text: CONSOLIDATION_CRON_TRIGGER
|
|
11500
12152
|
}
|
|
11501
|
-
};
|
|
11502
|
-
|
|
11503
|
-
|
|
11504
|
-
|
|
11505
|
-
|
|
11506
|
-
|
|
11507
|
-
if (existing.schedule?.expr !== desired.schedule.expr) {
|
|
11508
|
-
await cron.update(existing.id, { schedule: desired.schedule });
|
|
11509
|
-
log.info("Updated consolidation cron schedule");
|
|
11510
|
-
}
|
|
11511
|
-
for (let i = 1; i < managed.length; i++) await cron.remove(managed[i].id);
|
|
11512
|
-
}
|
|
11513
|
-
const temporalManaged = allJobs.filter((j) => j.description?.includes(TEMPORAL_CRON_TAG));
|
|
11514
|
-
const desiredTemporal = {
|
|
12153
|
+
}, CONSOLIDATION_CRON_TAG, log);
|
|
12154
|
+
} catch (err) {
|
|
12155
|
+
log.warn(`Failed to reconcile consolidation cron: ${err instanceof Error ? err.message : String(err)}`);
|
|
12156
|
+
}
|
|
12157
|
+
try {
|
|
12158
|
+
await reconcileCronJob(cron, allJobs, {
|
|
11515
12159
|
name: TEMPORAL_CRON_NAME,
|
|
11516
12160
|
description: `${TEMPORAL_CRON_TAG} Transition temporal states: future→present→past.`,
|
|
11517
12161
|
enabled: true,
|
|
@@ -11520,32 +12164,30 @@ const associativeMemoryPlugin = {
|
|
|
11520
12164
|
expr: DEFAULT_TEMPORAL_CRON
|
|
11521
12165
|
},
|
|
11522
12166
|
sessionTarget: "main",
|
|
11523
|
-
wakeMode: "
|
|
12167
|
+
wakeMode: "now",
|
|
11524
12168
|
payload: {
|
|
11525
12169
|
kind: "systemEvent",
|
|
11526
12170
|
text: TEMPORAL_CRON_TRIGGER
|
|
11527
12171
|
}
|
|
11528
|
-
};
|
|
11529
|
-
if (temporalManaged.length === 0) {
|
|
11530
|
-
await cron.add(desiredTemporal);
|
|
11531
|
-
log.info("Registered temporal transitions cron job");
|
|
11532
|
-
} else {
|
|
11533
|
-
const existing = temporalManaged[0];
|
|
11534
|
-
if (existing.schedule?.expr !== desiredTemporal.schedule.expr) {
|
|
11535
|
-
await cron.update(existing.id, { schedule: desiredTemporal.schedule });
|
|
11536
|
-
log.info("Updated temporal transitions cron schedule");
|
|
11537
|
-
}
|
|
11538
|
-
for (let i = 1; i < temporalManaged.length; i++) await cron.remove(temporalManaged[i].id);
|
|
11539
|
-
}
|
|
12172
|
+
}, TEMPORAL_CRON_TAG, log);
|
|
11540
12173
|
} catch (err) {
|
|
11541
|
-
log.warn(`Failed to
|
|
12174
|
+
log.warn(`Failed to reconcile temporal cron: ${err instanceof Error ? err.message : String(err)}`);
|
|
11542
12175
|
}
|
|
11543
12176
|
}, { name: "formative-memory-consolidation-cron" });
|
|
11544
12177
|
api.on("before_agent_reply", async (event, ctx) => {
|
|
11545
12178
|
const body = event?.cleanedBody;
|
|
11546
12179
|
if (!body) return;
|
|
11547
|
-
if (
|
|
11548
|
-
|
|
12180
|
+
if (ctx?.trigger !== "heartbeat") return;
|
|
12181
|
+
const bodyPreview = typeof body === "string" && body.length > 200 ? `${body.slice(0, 100)}…${body.slice(-100)}` : body;
|
|
12182
|
+
log.debug(`cron-check session=${String(ctx?.sessionKey)} body=${JSON.stringify(bodyPreview ?? null)}`);
|
|
12183
|
+
const hasConsolidation = includesSystemEventToken(body, CONSOLIDATION_CRON_TRIGGER);
|
|
12184
|
+
const hasTemporal = includesSystemEventToken(body, TEMPORAL_CRON_TRIGGER);
|
|
12185
|
+
if (!hasConsolidation && !hasTemporal) {
|
|
12186
|
+
if (typeof body === "string" && /^__\w+__$/m.test(body.trim())) log.warn(`cron-check: heartbeat body looks like a system event but matches no managed token`);
|
|
12187
|
+
return;
|
|
12188
|
+
}
|
|
12189
|
+
const db = getWorkspace(ctx?.workspaceDir ?? ".").manager.getDatabase();
|
|
12190
|
+
if (hasTemporal && !hasConsolidation) try {
|
|
11549
12191
|
const count = db.transaction(() => applyTemporalTransitions(db, log));
|
|
11550
12192
|
if (count > 0) log.info(`Scheduled temporal transitions: ${count} transitioned`);
|
|
11551
12193
|
return {
|
|
@@ -11561,9 +12203,7 @@ const associativeMemoryPlugin = {
|
|
|
11561
12203
|
reason: "associative-memory-temporal-error"
|
|
11562
12204
|
};
|
|
11563
12205
|
}
|
|
11564
|
-
if (!body.includes(CONSOLIDATION_CRON_TRIGGER)) return;
|
|
11565
12206
|
try {
|
|
11566
|
-
const ws = getWorkspace(ctx?.workspaceDir ?? ".");
|
|
11567
12207
|
const llmConfig = resolveLlmConfig(runtimePaths.stateDir, runtimePaths.agentDir, log);
|
|
11568
12208
|
const mergeContentProducer = llmConfig ? async (a, b) => {
|
|
11569
12209
|
return {
|
|
@@ -11571,7 +12211,6 @@ const associativeMemoryPlugin = {
|
|
|
11571
12211
|
type: a.type
|
|
11572
12212
|
};
|
|
11573
12213
|
} : void 0;
|
|
11574
|
-
const db = ws.manager.getDatabase();
|
|
11575
12214
|
log.debug("consolidation: starting trigger=cron");
|
|
11576
12215
|
return {
|
|
11577
12216
|
handled: true,
|
|
@@ -11595,9 +12234,12 @@ const associativeMemoryPlugin = {
|
|
|
11595
12234
|
id: "formative-memory-startup",
|
|
11596
12235
|
async start(ctx) {
|
|
11597
12236
|
runtimePaths.stateDir = ctx.stateDir;
|
|
12237
|
+
const maybeAgentDir = ctx.agentDir;
|
|
12238
|
+
if (!runtimePaths.agentDir && typeof maybeAgentDir === "string") runtimePaths.agentDir = maybeAgentDir;
|
|
11598
12239
|
}
|
|
11599
12240
|
});
|
|
11600
12241
|
}
|
|
11601
12242
|
};
|
|
12243
|
+
|
|
11602
12244
|
//#endregion
|
|
11603
|
-
export { associativeMemoryPlugin as default };
|
|
12245
|
+
export { associativeMemoryPlugin as default };
|