formative-memory 0.2.0 → 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/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
- import { n as MemorySourceGuard, r as TemporalStateGuard, t as MemoryDatabase } from "./db-D1Sc76VE.js";
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 { createGeminiEmbeddingProvider, createOpenAiEmbeddingProvider, getMemoryEmbeddingProvider, listMemoryEmbeddingProviders } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
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) __defProp(target, name, {
18
- get: all[name],
19
- enumerable: true
20
- });
21
- if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
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") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
26
- key = keys[i];
27
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
28
- get: ((k) => from[k]).bind(null, key),
29
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
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
- `${PatternBoolean}`;
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/index.mjs
2717
- /** JavaScript Type Builder with Static Resolution for TypeScript */
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 = {
@@ -2833,8 +3223,7 @@ const LEVEL_ORDER = {
2833
3223
  * configured minimum level.
2834
3224
  */
2835
3225
  function createLogger(opts) {
2836
- const envDebug = process.env.FORMATIVE_MEMORY_DEBUG === "1";
2837
- const minOrder = LEVEL_ORDER[opts.verbose || envDebug ? "debug" : "info"];
3226
+ const minOrder = LEVEL_ORDER[opts.verbose ? "debug" : "info"];
2838
3227
  const host = opts.host;
2839
3228
  function stringifyArg(a) {
2840
3229
  if (a instanceof Error) return a.stack || a.message;
@@ -2881,6 +3270,7 @@ const nullLogger = {
2881
3270
  error: () => {},
2882
3271
  isDebugEnabled: () => false
2883
3272
  };
3273
+
2884
3274
  //#endregion
2885
3275
  //#region src/consolidation-steps.ts
2886
3276
  /** Retrieval reinforcement learning rate (η). */
@@ -2891,8 +3281,12 @@ const DECAY_WORKING = .906;
2891
3281
  const DECAY_CONSOLIDATED = .977;
2892
3282
  /** Decay multiplier for association weights per cycle. */
2893
3283
  const DECAY_ASSOCIATION = .9;
3284
+ /** Mode weight for hybrid retrieval. */
3285
+ const MODE_WEIGHT_HYBRID = 1;
2894
3286
  /** Mode weight for BM25-only retrieval (degraded). */
2895
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;
2896
3290
  /**
2897
3291
  * Apply catch-up decay for missed consolidation cycles.
2898
3292
  *
@@ -2917,7 +3311,7 @@ function applyCatchUpDecay(db, lastConsolidationMs, nowMs = Date.now(), log = nu
2917
3311
  const daysSince = (nowMs - (Number.isFinite(createdMs) ? Math.max(lastConsolidationMs, createdMs) : lastConsolidationMs)) / dayMs;
2918
3312
  const cycles = Math.max(0, Math.floor(daysSince) - 1);
2919
3313
  if (cycles <= 0) continue;
2920
- const effectiveCycles = Math.min(cycles, 30);
3314
+ const effectiveCycles = Math.min(cycles, MAX_CATCHUP_CYCLES);
2921
3315
  const factor = mem.consolidated ? DECAY_CONSOLIDATED : DECAY_WORKING;
2922
3316
  const newStrength = mem.strength * Math.pow(factor, effectiveCycles);
2923
3317
  if (debug) log.debug(`catch-up decay: "${preview(mem.content)}" ${mem.strength.toFixed(3)} → ${newStrength.toFixed(3)} (${effectiveCycles} cycles, ${mem.consolidated ? "consolidated" : "working"})`);
@@ -2927,7 +3321,7 @@ function applyCatchUpDecay(db, lastConsolidationMs, nowMs = Date.now(), log = nu
2927
3321
  const globalDaysSince = (nowMs - lastConsolidationMs) / dayMs;
2928
3322
  const globalCycles = Math.max(0, Math.floor(globalDaysSince) - 1);
2929
3323
  if (globalCycles > 0) {
2930
- const effectiveGlobal = Math.min(globalCycles, 30);
3324
+ const effectiveGlobal = Math.min(globalCycles, MAX_CATCHUP_CYCLES);
2931
3325
  const associationFactor = Math.pow(DECAY_ASSOCIATION, effectiveGlobal);
2932
3326
  if (debug) log.debug(`catch-up decay: associations ×${associationFactor.toFixed(4)} (${effectiveGlobal} cycles)`);
2933
3327
  db.decayAllAssociationWeights(associationFactor);
@@ -2952,7 +3346,7 @@ function applyReinforcement(db, log = nullLogger) {
2952
3346
  if (pendingAttrs.length === 0) return 0;
2953
3347
  const reinforcements = /* @__PURE__ */ new Map();
2954
3348
  for (const attr of pendingAttrs) {
2955
- const modeWeight = db.getExposureRetrievalMode(attr.memory_id, attr.turn_id) === "bm25_only" ? MODE_WEIGHT_BM25_ONLY : 1;
3349
+ const modeWeight = db.getExposureRetrievalMode(attr.memory_id, attr.turn_id) === "bm25_only" ? MODE_WEIGHT_BM25_ONLY : MODE_WEIGHT_HYBRID;
2956
3350
  const reinforcement = ETA * attr.confidence * modeWeight;
2957
3351
  const current = reinforcements.get(attr.memory_id) ?? 0;
2958
3352
  reinforcements.set(attr.memory_id, current + reinforcement);
@@ -3006,6 +3400,8 @@ function applyDecay(db, log = nullLogger) {
3006
3400
  function applyAssociationDecay(db) {
3007
3401
  db.decayAllAssociationWeights(DECAY_ASSOCIATION);
3008
3402
  }
3403
+ /** Minimum weight for a transitive association to be created. */
3404
+ const TRANSITIVE_WEIGHT_THRESHOLD = .1;
3009
3405
  /** Base weight for a new co-retrieval association. */
3010
3406
  const CO_RETRIEVAL_BASE_WEIGHT = .1;
3011
3407
  /**
@@ -3064,7 +3460,7 @@ function updateTransitiveAssociations(db, maxUpdates = 100, log = nullLogger) {
3064
3460
  const otherId2 = n2.memory_a === mem.id ? n2.memory_b : n2.memory_a;
3065
3461
  if (otherId1 === otherId2) continue;
3066
3462
  const transitiveWeight = n1.weight * n2.weight;
3067
- if (transitiveWeight < .1) continue;
3463
+ if (transitiveWeight < TRANSITIVE_WEIGHT_THRESHOLD) continue;
3068
3464
  const existing = db.getAssociationWeight(otherId1, otherId2);
3069
3465
  const newWeight = existing + transitiveWeight - existing * transitiveWeight;
3070
3466
  if (newWeight - existing < 1e-9) continue;
@@ -3076,6 +3472,8 @@ function updateTransitiveAssociations(db, maxUpdates = 100, log = nullLogger) {
3076
3472
  if (count > 0) log.info(`associate: ${count} transitive associations created/updated`);
3077
3473
  return count;
3078
3474
  }
3475
+ /** Strength threshold below which memories are pruned. */
3476
+ const PRUNE_STRENGTH_THRESHOLD = .05;
3079
3477
  /** Association weight threshold below which associations are pruned. */
3080
3478
  const PRUNE_ASSOCIATION_THRESHOLD = .01;
3081
3479
  /**
@@ -3090,7 +3488,7 @@ function applyPruning(db, log = nullLogger) {
3090
3488
  const allMemories = db.getAllMemories();
3091
3489
  const debug = log.isDebugEnabled();
3092
3490
  let memoriesPruned = 0;
3093
- for (const mem of allMemories) if (mem.strength <= .05) {
3491
+ for (const mem of allMemories) if (mem.strength <= PRUNE_STRENGTH_THRESHOLD) {
3094
3492
  if (debug) log.debug(`prune: removing "${preview(mem.content, 80)}" (strength=${mem.strength.toFixed(3)}, type=${mem.type})`);
3095
3493
  db.deleteMemory(mem.id);
3096
3494
  memoriesPruned++;
@@ -3146,6 +3544,59 @@ function provenanceGC(db, cutoffDays = 30, log = nullLogger) {
3146
3544
  if (count > 0) log.debug(`gc: ${count} exposure rows older than ${cutoffDays}d removed`);
3147
3545
  return count;
3148
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
+
3149
3600
  //#endregion
3150
3601
  //#region src/merge-candidates.ts
3151
3602
  /** Minimum Jaccard score when no embeddings are available. */
@@ -3156,6 +3607,8 @@ const MERGE_THRESHOLD_JACCARD_ONLY = .6;
3156
3607
  * confidence — embedding adds semantic check on top of lexical overlap.
3157
3608
  */
3158
3609
  const MERGE_THRESHOLD_COMBINED = .5;
3610
+ /** Maximum number of merge pairs returned per run. */
3611
+ const MAX_MERGE_PAIRS = 20;
3159
3612
  /** Minimum strength for a memory to be a merge source. */
3160
3613
  const MERGE_SOURCE_MIN_STRENGTH = .5;
3161
3614
  /** Minimum strength for a memory to be a merge target. */
@@ -3171,7 +3624,7 @@ const EMBEDDING_WEIGHT = .6;
3171
3624
  * `type` are considered. Complexity is O(S×T) where both S and T
3172
3625
  * are pre-filtered subsets of the full memory set.
3173
3626
  */
3174
- function findMergeCandidatesDelta(sources, targets, maxPairs = 20) {
3627
+ function findMergeCandidatesDelta(sources, targets, maxPairs = MAX_MERGE_PAIRS) {
3175
3628
  if (sources.length === 0 || targets.length === 0) return [];
3176
3629
  const featureCache = /* @__PURE__ */ new Map();
3177
3630
  const getFeatures = (m) => {
@@ -3255,11 +3708,13 @@ function cosineSimilarity$1(a, b) {
3255
3708
  const denom = Math.sqrt(normA) * Math.sqrt(normB);
3256
3709
  return denom === 0 ? 0 : dot / denom;
3257
3710
  }
3711
+
3258
3712
  //#endregion
3259
3713
  //#region src/hash.ts
3260
3714
  function contentHash(content) {
3261
3715
  return createHash("sha256").update(content, "utf8").digest("hex");
3262
3716
  }
3717
+
3263
3718
  //#endregion
3264
3719
  //#region src/merge-execution.ts
3265
3720
  /**
@@ -3408,6 +3863,7 @@ function inheritAssociations(db, sourceIds, canonicalId, now) {
3408
3863
  db.upsertAssociation(canonicalId, neighbor, finalWeight, now);
3409
3864
  }
3410
3865
  }
3866
+
3411
3867
  //#endregion
3412
3868
  //#region src/consolidation.ts
3413
3869
  /**
@@ -3503,6 +3959,7 @@ async function runConsolidation(params) {
3503
3959
  durationMs: Date.now() - start
3504
3960
  };
3505
3961
  }
3962
+
3506
3963
  //#endregion
3507
3964
  //#region src/retrieval-log.ts
3508
3965
  /**
@@ -3530,6 +3987,7 @@ function appendFeedbackEvent(logPath, ratings, comment) {
3530
3987
  function appendStoreEvent(logPath, newId, contextIds) {
3531
3988
  appendFileSync(logPath, `${(/* @__PURE__ */ new Date()).toISOString()} store ${newId}${contextIds.length > 0 ? ` context:${contextIds.join(",")}` : ""}\n`);
3532
3989
  }
3990
+
3533
3991
  //#endregion
3534
3992
  //#region src/after-turn.ts
3535
3993
  const CONFIDENCE = {
@@ -3688,8 +4146,19 @@ function feedbackEvidenceForRating(rating) {
3688
4146
  confidence: CONFIDENCE.agent_feedback_negative
3689
4147
  };
3690
4148
  }
4149
+
3691
4150
  //#endregion
3692
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
+ */
3693
4162
  const DEFAULTS = {
3694
4163
  anthropic: {
3695
4164
  model: "claude-haiku-4-5-20251001",
@@ -3728,7 +4197,7 @@ async function callAnthropic(prompt, apiKey, model, maxTokens, timeoutMs) {
3728
4197
  content: prompt
3729
4198
  }]
3730
4199
  })
3731
- }, timeoutMs);
4200
+ }, timeoutMs, "Anthropic LLM call");
3732
4201
  if (!response.ok) {
3733
4202
  const body = await response.text().catch(() => "");
3734
4203
  throw new Error(`Anthropic API error ${response.status}: ${body.slice(0, 200)}`);
@@ -3752,7 +4221,7 @@ async function callOpenAi(prompt, apiKey, model, maxTokens, timeoutMs) {
3752
4221
  content: prompt
3753
4222
  }]
3754
4223
  })
3755
- }, timeoutMs);
4224
+ }, timeoutMs, "OpenAI LLM call");
3756
4225
  if (!response.ok) {
3757
4226
  const body = await response.text().catch(() => "");
3758
4227
  throw new Error(`OpenAI API error ${response.status}: ${body.slice(0, 200)}`);
@@ -3761,21 +4230,6 @@ async function callOpenAi(prompt, apiKey, model, maxTokens, timeoutMs) {
3761
4230
  if (!text) throw new Error("OpenAI returned empty response");
3762
4231
  return text;
3763
4232
  }
3764
- async function fetchWithTimeout(url, init, timeoutMs) {
3765
- const controller = new AbortController();
3766
- const timer = setTimeout(() => controller.abort(), timeoutMs);
3767
- try {
3768
- return await fetch(url, {
3769
- ...init,
3770
- signal: controller.signal
3771
- });
3772
- } catch (error) {
3773
- if (error instanceof DOMException && error.name === "AbortError") throw new Error(`LLM API call timed out after ${timeoutMs}ms`);
3774
- throw error;
3775
- } finally {
3776
- clearTimeout(timer);
3777
- }
3778
- }
3779
4233
  /**
3780
4234
  * Extract an API key from OpenClaw auth profiles.
3781
4235
  * Tries the specified provider, falls back to the other.
@@ -3793,6 +4247,7 @@ function resolveApiKey(authProfiles, preferredProvider) {
3793
4247
  };
3794
4248
  return null;
3795
4249
  }
4250
+
3796
4251
  //#endregion
3797
4252
  //#region src/context-engine.ts
3798
4253
  /**
@@ -4303,6 +4758,7 @@ function isTextBlock(v) {
4303
4758
  const b = v;
4304
4759
  return b.type === "text" && typeof b.text === "string";
4305
4760
  }
4761
+
4306
4762
  //#endregion
4307
4763
  //#region src/embedding-circuit-breaker.ts
4308
4764
  var EmbeddingCircuitBreaker = class {
@@ -4426,6 +4882,7 @@ var EmbeddingTimeoutError = class extends Error {
4426
4882
  this.name = "EmbeddingTimeoutError";
4427
4883
  }
4428
4884
  };
4885
+
4429
4886
  //#endregion
4430
4887
  //#region src/memory-manager.ts
4431
4888
  var MemoryManager = class {
@@ -4696,6 +5153,7 @@ function isNearDuplicate(content, selected) {
4696
5153
  }
4697
5154
  return false;
4698
5155
  }
5156
+
4699
5157
  //#endregion
4700
5158
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/decode.mjs
4701
5159
  const decodeCache = {};
@@ -4767,6 +5225,7 @@ function decode(string, exclude) {
4767
5225
  }
4768
5226
  decode.defaultChars = ";/?:@&=+$,#";
4769
5227
  decode.componentChars = "";
5228
+
4770
5229
  //#endregion
4771
5230
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/encode.mjs
4772
5231
  const encodeCache = {};
@@ -4821,6 +5280,7 @@ function encode(string, exclude, keepEscaped) {
4821
5280
  }
4822
5281
  encode.defaultChars = ";/?:@&=+$,-_.!~*'()#";
4823
5282
  encode.componentChars = "-_.!~*'()";
5283
+
4824
5284
  //#endregion
4825
5285
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/format.mjs
4826
5286
  function format(url) {
@@ -4836,6 +5296,7 @@ function format(url) {
4836
5296
  result += url.hash || "";
4837
5297
  return result;
4838
5298
  }
5299
+
4839
5300
  //#endregion
4840
5301
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/parse.mjs
4841
5302
  function Url() {
@@ -5008,6 +5469,7 @@ Url.prototype.parseHost = function(host) {
5008
5469
  }
5009
5470
  if (host) this.hostname = host;
5010
5471
  };
5472
+
5011
5473
  //#endregion
5012
5474
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/index.mjs
5013
5475
  var mdurl_exports = /* @__PURE__ */ __exportAll({
@@ -5016,24 +5478,31 @@ var mdurl_exports = /* @__PURE__ */ __exportAll({
5016
5478
  format: () => format,
5017
5479
  parse: () => urlParse
5018
5480
  });
5481
+
5019
5482
  //#endregion
5020
5483
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/properties/Any/regex.mjs
5021
5484
  var regex_default$5 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
5485
+
5022
5486
  //#endregion
5023
5487
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cc/regex.mjs
5024
5488
  var regex_default$4 = /[\0-\x1F\x7F-\x9F]/;
5489
+
5025
5490
  //#endregion
5026
5491
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cf/regex.mjs
5027
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
+
5028
5494
  //#endregion
5029
5495
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/P/regex.mjs
5030
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
+
5031
5498
  //#endregion
5032
5499
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/S/regex.mjs
5033
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
+
5034
5502
  //#endregion
5035
5503
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Z/regex.mjs
5036
5504
  var regex_default = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;
5505
+
5037
5506
  //#endregion
5038
5507
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/index.mjs
5039
5508
  var uc_micro_exports = /* @__PURE__ */ __exportAll({
@@ -5044,12 +5513,15 @@ var uc_micro_exports = /* @__PURE__ */ __exportAll({
5044
5513
  S: () => regex_default$1,
5045
5514
  Z: () => regex_default
5046
5515
  });
5516
+
5047
5517
  //#endregion
5048
5518
  //#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js
5049
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୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢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;怳Ādp໩໮uct;戏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ǣጓ\0጖y;䐎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Ā;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀ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Ā;e᜚᜜lƀ;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\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩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ↄⅪ←ٖ↛ǰ↉\0↎proø₞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;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\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\0⹻m;櫳;櫽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
+
5050
5521
  //#endregion
5051
5522
  //#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
5052
5523
  var decode_data_xml_default = new Uint16Array("Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((c) => c.charCodeAt(0)));
5524
+
5053
5525
  //#endregion
5054
5526
  //#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
5055
5527
  var _a;
@@ -5106,6 +5578,7 @@ function replaceCodePoint(codePoint) {
5106
5578
  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) return 65533;
5107
5579
  return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
5108
5580
  }
5581
+
5109
5582
  //#endregion
5110
5583
  //#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
5111
5584
  var CharCodes;
@@ -5462,7 +5935,7 @@ function determineBranch(decodeTree, current, nodeIdx, char) {
5462
5935
  return -1;
5463
5936
  }
5464
5937
  const htmlDecoder = getDecoder(decode_data_html_default);
5465
- getDecoder(decode_data_xml_default);
5938
+ const xmlDecoder = getDecoder(decode_data_xml_default);
5466
5939
  /**
5467
5940
  * Decodes an HTML string.
5468
5941
  *
@@ -5473,6 +5946,7 @@ getDecoder(decode_data_xml_default);
5473
5946
  function decodeHTML(str, mode = DecodingMode.Legacy) {
5474
5947
  return htmlDecoder(str, mode);
5475
5948
  }
5949
+
5476
5950
  //#endregion
5477
5951
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/utils.mjs
5478
5952
  var utils_exports = /* @__PURE__ */ __exportAll({
@@ -5652,6 +6126,7 @@ const lib = {
5652
6126
  mdurl: mdurl_exports,
5653
6127
  ucmicro: uc_micro_exports
5654
6128
  };
6129
+
5655
6130
  //#endregion
5656
6131
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_label.mjs
5657
6132
  function parseLinkLabel(state, start, disableNested) {
@@ -5684,6 +6159,7 @@ function parseLinkLabel(state, start, disableNested) {
5684
6159
  state.pos = oldPos;
5685
6160
  return labelEnd;
5686
6161
  }
6162
+
5687
6163
  //#endregion
5688
6164
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs
5689
6165
  function parseLinkDestination(str, start, max) {
@@ -5741,6 +6217,7 @@ function parseLinkDestination(str, start, max) {
5741
6217
  result.ok = true;
5742
6218
  return result;
5743
6219
  }
6220
+
5744
6221
  //#endregion
5745
6222
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_title.mjs
5746
6223
  function parseLinkTitle(str, start, max, prev_state) {
@@ -5780,6 +6257,7 @@ function parseLinkTitle(str, start, max, prev_state) {
5780
6257
  state.str += unescapeAll(str.slice(start, pos));
5781
6258
  return state;
5782
6259
  }
6260
+
5783
6261
  //#endregion
5784
6262
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/index.mjs
5785
6263
  var helpers_exports = /* @__PURE__ */ __exportAll({
@@ -5787,6 +6265,7 @@ var helpers_exports = /* @__PURE__ */ __exportAll({
5787
6265
  parseLinkLabel: () => parseLinkLabel,
5788
6266
  parseLinkTitle: () => parseLinkTitle
5789
6267
  });
6268
+
5790
6269
  //#endregion
5791
6270
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/renderer.mjs
5792
6271
  /**
@@ -6000,6 +6479,7 @@ Renderer.prototype.render = function(tokens, options, env) {
6000
6479
  }
6001
6480
  return result;
6002
6481
  };
6482
+
6003
6483
  //#endregion
6004
6484
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/ruler.mjs
6005
6485
  /**
@@ -6271,6 +6751,7 @@ Ruler.prototype.getRules = function(chainName) {
6271
6751
  if (this.__cache__ === null) this.__compile__();
6272
6752
  return this.__cache__[chainName] || [];
6273
6753
  };
6754
+
6274
6755
  //#endregion
6275
6756
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/token.mjs
6276
6757
  /**
@@ -6425,6 +6906,7 @@ Token.prototype.attrJoin = function attrJoin(name, value) {
6425
6906
  if (idx < 0) this.attrPush([name, value]);
6426
6907
  else this.attrs[idx][1] = this.attrs[idx][1] + " " + value;
6427
6908
  };
6909
+
6428
6910
  //#endregion
6429
6911
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/state_core.mjs
6430
6912
  function StateCore(src, md, env) {
@@ -6435,6 +6917,7 @@ function StateCore(src, md, env) {
6435
6917
  this.md = md;
6436
6918
  }
6437
6919
  StateCore.prototype.Token = Token;
6920
+
6438
6921
  //#endregion
6439
6922
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/normalize.mjs
6440
6923
  const NEWLINES_RE = /\r\n?|\n/g;
@@ -6445,6 +6928,7 @@ function normalize(state) {
6445
6928
  str = str.replace(NULL_RE, "�");
6446
6929
  state.src = str;
6447
6930
  }
6931
+
6448
6932
  //#endregion
6449
6933
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/block.mjs
6450
6934
  function block(state) {
@@ -6457,6 +6941,7 @@ function block(state) {
6457
6941
  state.tokens.push(token);
6458
6942
  } else state.md.block.parse(state.src, state.md, state.env, state.tokens);
6459
6943
  }
6944
+
6460
6945
  //#endregion
6461
6946
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/inline.mjs
6462
6947
  function inline(state) {
@@ -6466,6 +6951,7 @@ function inline(state) {
6466
6951
  if (tok.type === "inline") state.md.inline.parse(tok.content, state.md, state.env, tok.children);
6467
6952
  }
6468
6953
  }
6954
+
6469
6955
  //#endregion
6470
6956
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/linkify.mjs
6471
6957
  function isLinkOpen$1(str) {
@@ -6543,6 +7029,7 @@ function linkify$1(state) {
6543
7029
  }
6544
7030
  }
6545
7031
  }
7032
+
6546
7033
  //#endregion
6547
7034
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/replacements.mjs
6548
7035
  const RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/;
@@ -6585,6 +7072,7 @@ function replace(state) {
6585
7072
  if (RARE_RE.test(state.tokens[blkIdx].content)) replace_rare(state.tokens[blkIdx].children);
6586
7073
  }
6587
7074
  }
7075
+
6588
7076
  //#endregion
6589
7077
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/smartquotes.mjs
6590
7078
  const QUOTE_TEST_RE = /['"]/;
@@ -6693,6 +7181,7 @@ function smartquotes(state) {
6693
7181
  process_inlines(state.tokens[blkIdx].children, state);
6694
7182
  }
6695
7183
  }
7184
+
6696
7185
  //#endregion
6697
7186
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/text_join.mjs
6698
7187
  function text_join(state) {
@@ -6712,6 +7201,7 @@ function text_join(state) {
6712
7201
  if (curr !== last) tokens.length = last;
6713
7202
  }
6714
7203
  }
7204
+
6715
7205
  //#endregion
6716
7206
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_core.mjs
6717
7207
  /** internal
@@ -6751,6 +7241,7 @@ Core.prototype.process = function(state) {
6751
7241
  for (let i = 0, l = rules.length; i < l; i++) rules[i](state);
6752
7242
  };
6753
7243
  Core.prototype.State = StateCore;
7244
+
6754
7245
  //#endregion
6755
7246
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/state_block.mjs
6756
7247
  function StateBlock(src, md, env, tokens) {
@@ -6858,6 +7349,7 @@ StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF
6858
7349
  return queue.join("");
6859
7350
  };
6860
7351
  StateBlock.prototype.Token = Token;
7352
+
6861
7353
  //#endregion
6862
7354
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/table.mjs
6863
7355
  const MAX_AUTOCOMPLETED_CELLS = 65536;
@@ -6993,6 +7485,7 @@ function table(state, startLine, endLine, silent) {
6993
7485
  state.line = nextLine;
6994
7486
  return true;
6995
7487
  }
7488
+
6996
7489
  //#endregion
6997
7490
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/code.mjs
6998
7491
  function code(state, startLine, endLine) {
@@ -7017,6 +7510,7 @@ function code(state, startLine, endLine) {
7017
7510
  token.map = [startLine, state.line];
7018
7511
  return true;
7019
7512
  }
7513
+
7020
7514
  //#endregion
7021
7515
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/fence.mjs
7022
7516
  function fence(state, startLine, endLine, silent) {
@@ -7062,6 +7556,7 @@ function fence(state, startLine, endLine, silent) {
7062
7556
  token.map = [startLine, state.line];
7063
7557
  return true;
7064
7558
  }
7559
+
7065
7560
  //#endregion
7066
7561
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/blockquote.mjs
7067
7562
  function blockquote(state, startLine, endLine, silent) {
@@ -7165,6 +7660,7 @@ function blockquote(state, startLine, endLine, silent) {
7165
7660
  state.blkIndent = oldIndent;
7166
7661
  return true;
7167
7662
  }
7663
+
7168
7664
  //#endregion
7169
7665
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/hr.mjs
7170
7666
  function hr(state, startLine, endLine, silent) {
@@ -7187,6 +7683,7 @@ function hr(state, startLine, endLine, silent) {
7187
7683
  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));
7188
7684
  return true;
7189
7685
  }
7686
+
7190
7687
  //#endregion
7191
7688
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/list.mjs
7192
7689
  function skipBulletListMarker(state, startLine) {
@@ -7340,6 +7837,7 @@ function list(state, startLine, endLine, silent) {
7340
7837
  if (tight) markTightParagraphs(state, listTokIdx);
7341
7838
  return true;
7342
7839
  }
7840
+
7343
7841
  //#endregion
7344
7842
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/reference.mjs
7345
7843
  function reference(state, startLine, _endLine, silent) {
@@ -7476,6 +7974,7 @@ function reference(state, startLine, _endLine, silent) {
7476
7974
  state.line = nextLine;
7477
7975
  return true;
7478
7976
  }
7977
+
7479
7978
  //#endregion
7480
7979
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/html_blocks.mjs
7481
7980
  var html_blocks_default = [
@@ -7542,11 +8041,13 @@ var html_blocks_default = [
7542
8041
  "track",
7543
8042
  "ul"
7544
8043
  ];
8044
+
7545
8045
  //#endregion
7546
8046
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/html_re.mjs
7547
8047
  const open_tag = "<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>";
7548
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]*?\\]\\]>)");
7549
8049
  const HTML_OPEN_CLOSE_TAG_RE = new RegExp("^(?:" + open_tag + "|<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>)");
8050
+
7550
8051
  //#endregion
7551
8052
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/html_block.mjs
7552
8053
  const HTML_SEQUENCES = [
@@ -7614,6 +8115,7 @@ function html_block(state, startLine, endLine, silent) {
7614
8115
  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);
7615
8116
  return true;
7616
8117
  }
8118
+
7617
8119
  //#endregion
7618
8120
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/heading.mjs
7619
8121
  function heading(state, startLine, endLine, silent) {
@@ -7645,6 +8147,7 @@ function heading(state, startLine, endLine, silent) {
7645
8147
  token_c.markup = "########".slice(0, level);
7646
8148
  return true;
7647
8149
  }
8150
+
7648
8151
  //#endregion
7649
8152
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/lheading.mjs
7650
8153
  function lheading(state, startLine, endLine) {
@@ -7695,6 +8198,7 @@ function lheading(state, startLine, endLine) {
7695
8198
  state.parentType = oldParentType;
7696
8199
  return true;
7697
8200
  }
8201
+
7698
8202
  //#endregion
7699
8203
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/paragraph.mjs
7700
8204
  function paragraph(state, startLine, endLine) {
@@ -7724,6 +8228,7 @@ function paragraph(state, startLine, endLine) {
7724
8228
  state.parentType = oldParentType;
7725
8229
  return true;
7726
8230
  }
8231
+
7727
8232
  //#endregion
7728
8233
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_block.mjs
7729
8234
  /** internal
@@ -7856,6 +8361,7 @@ ParserBlock.prototype.parse = function(src, md, env, outTokens) {
7856
8361
  this.tokenize(state, state.line, state.lineMax);
7857
8362
  };
7858
8363
  ParserBlock.prototype.State = StateBlock;
8364
+
7859
8365
  //#endregion
7860
8366
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/state_inline.mjs
7861
8367
  function StateInline(src, md, env, outTokens) {
@@ -7925,6 +8431,7 @@ StateInline.prototype.scanDelims = function(start, canSplitWord) {
7925
8431
  };
7926
8432
  };
7927
8433
  StateInline.prototype.Token = Token;
8434
+
7928
8435
  //#endregion
7929
8436
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/text.mjs
7930
8437
  function isTerminatorChar(ch) {
@@ -7963,6 +8470,7 @@ function text(state, silent) {
7963
8470
  state.pos = pos;
7964
8471
  return true;
7965
8472
  }
8473
+
7966
8474
  //#endregion
7967
8475
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/linkify.mjs
7968
8476
  const SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;
@@ -8002,6 +8510,7 @@ function linkify(state, silent) {
8002
8510
  state.pos += url.length - proto.length;
8003
8511
  return true;
8004
8512
  }
8513
+
8005
8514
  //#endregion
8006
8515
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/newline.mjs
8007
8516
  function newline(state, silent) {
@@ -8024,6 +8533,7 @@ function newline(state, silent) {
8024
8533
  state.pos = pos;
8025
8534
  return true;
8026
8535
  }
8536
+
8027
8537
  //#endregion
8028
8538
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/escape.mjs
8029
8539
  const ESCAPED = [];
@@ -8068,6 +8578,7 @@ function escape(state, silent) {
8068
8578
  state.pos = pos + 1;
8069
8579
  return true;
8070
8580
  }
8581
+
8071
8582
  //#endregion
8072
8583
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/backticks.mjs
8073
8584
  function backtick(state, silent) {
@@ -8106,6 +8617,7 @@ function backtick(state, silent) {
8106
8617
  state.pos += openerLength;
8107
8618
  return true;
8108
8619
  }
8620
+
8109
8621
  //#endregion
8110
8622
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs
8111
8623
  function strikethrough_tokenize(state, silent) {
@@ -8183,6 +8695,7 @@ var strikethrough_default = {
8183
8695
  tokenize: strikethrough_tokenize,
8184
8696
  postProcess: strikethrough_postProcess
8185
8697
  };
8698
+
8186
8699
  //#endregion
8187
8700
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/emphasis.mjs
8188
8701
  function emphasis_tokenize(state, silent) {
@@ -8244,6 +8757,7 @@ var emphasis_default = {
8244
8757
  tokenize: emphasis_tokenize,
8245
8758
  postProcess: emphasis_post_process
8246
8759
  };
8760
+
8247
8761
  //#endregion
8248
8762
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/link.mjs
8249
8763
  function link(state, silent) {
@@ -8324,6 +8838,7 @@ function link(state, silent) {
8324
8838
  state.posMax = max;
8325
8839
  return true;
8326
8840
  }
8841
+
8327
8842
  //#endregion
8328
8843
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/image.mjs
8329
8844
  function image(state, silent) {
@@ -8402,6 +8917,7 @@ function image(state, silent) {
8402
8917
  state.posMax = max;
8403
8918
  return true;
8404
8919
  }
8920
+
8405
8921
  //#endregion
8406
8922
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/autolink.mjs
8407
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])?)*)$/;
@@ -8454,6 +8970,7 @@ function autolink(state, silent) {
8454
8970
  }
8455
8971
  return false;
8456
8972
  }
8973
+
8457
8974
  //#endregion
8458
8975
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/html_inline.mjs
8459
8976
  function isLinkOpen(str) {
@@ -8484,6 +9001,7 @@ function html_inline(state, silent) {
8484
9001
  state.pos += match[0].length;
8485
9002
  return true;
8486
9003
  }
9004
+
8487
9005
  //#endregion
8488
9006
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/entity.mjs
8489
9007
  const DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;
@@ -8524,6 +9042,7 @@ function entity(state, silent) {
8524
9042
  }
8525
9043
  return false;
8526
9044
  }
9045
+
8527
9046
  //#endregion
8528
9047
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs
8529
9048
  function processDelimiters(delimiters) {
@@ -8583,6 +9102,7 @@ function link_pairs(state) {
8583
9102
  processDelimiters(state.delimiters);
8584
9103
  for (let curr = 0; curr < max; curr++) if (tokens_meta[curr] && tokens_meta[curr].delimiters) processDelimiters(tokens_meta[curr].delimiters);
8585
9104
  }
9105
+
8586
9106
  //#endregion
8587
9107
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs
8588
9108
  function fragments_join(state) {
@@ -8602,6 +9122,7 @@ function fragments_join(state) {
8602
9122
  }
8603
9123
  if (curr !== last) tokens.length = last;
8604
9124
  }
9125
+
8605
9126
  //#endregion
8606
9127
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_inline.mjs
8607
9128
  /** internal
@@ -8709,6 +9230,7 @@ ParserInline.prototype.parse = function(str, md, env, outTokens) {
8709
9230
  for (let i = 0; i < len; i++) rules[i](state);
8710
9231
  };
8711
9232
  ParserInline.prototype.State = StateInline;
9233
+
8712
9234
  //#endregion
8713
9235
  //#region node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs
8714
9236
  function re_default(opts) {
@@ -8749,6 +9271,7 @@ function re_default(opts) {
8749
9271
  re.tpl_link_no_ip_fuzzy = "(^|(?![.:/\\-_@])(?:[$+<=>^`||]|" + re.src_ZPCc + "))((?![$+<=>^`||])" + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ")";
8750
9272
  return re;
8751
9273
  }
9274
+
8752
9275
  //#endregion
8753
9276
  //#region node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs
8754
9277
  function assign(obj) {
@@ -9194,9 +9717,10 @@ LinkifyIt.prototype.normalize = function normalize(match) {
9194
9717
  * Override to modify basic RegExp-s.
9195
9718
  **/
9196
9719
  LinkifyIt.prototype.onCompile = function onCompile() {};
9720
+
9197
9721
  //#endregion
9198
- //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/default.mjs
9199
- var import_punycode = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
9722
+ //#region node_modules/.pnpm/punycode.js@2.3.1/node_modules/punycode.js/punycode.js
9723
+ var require_punycode = /* @__PURE__ */ __commonJSMin(((exports, module) => {
9200
9724
  /** Highest positive signed 32-bit float value */
9201
9725
  const maxInt = 2147483647;
9202
9726
  /** Bootstring parameters */
@@ -9468,7 +9992,8 @@ var import_punycode = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((e
9468
9992
  return regexNonASCII.test(string) ? "xn--" + encode(string) : string;
9469
9993
  });
9470
9994
  };
9471
- module.exports = {
9995
+ /** Define the public API */
9996
+ const punycode = {
9472
9997
  "version": "2.3.1",
9473
9998
  "ucs2": {
9474
9999
  "decode": ucs2decode,
@@ -9479,107 +10004,122 @@ var import_punycode = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((e
9479
10004
  "toASCII": toASCII,
9480
10005
  "toUnicode": toUnicode
9481
10006
  };
9482
- })))(), 1);
10007
+ module.exports = punycode;
10008
+ }));
10009
+
9483
10010
  //#endregion
9484
- //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/index.mjs
9485
- const config = {
9486
- default: {
9487
- options: {
9488
- html: false,
9489
- xhtmlOut: false,
9490
- breaks: false,
9491
- langPrefix: "language-",
9492
- linkify: false,
9493
- typographer: false,
9494
- quotes: "“”‘’",
9495
- highlight: null,
9496
- maxNesting: 100
9497
- },
9498
- components: {
9499
- core: {},
9500
- block: {},
9501
- inline: {}
9502
- }
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
9503
10024
  },
9504
- zero: {
9505
- options: {
9506
- html: false,
9507
- xhtmlOut: false,
9508
- breaks: false,
9509
- langPrefix: "language-",
9510
- linkify: false,
9511
- typographer: false,
9512
- quotes: "“”‘’",
9513
- highlight: null,
9514
- maxNesting: 20
9515
- },
9516
- components: {
9517
- core: { rules: [
9518
- "normalize",
9519
- "block",
9520
- "inline",
9521
- "text_join"
9522
- ] },
9523
- block: { rules: ["paragraph"] },
9524
- inline: {
9525
- rules: ["text"],
9526
- rules2: ["balance_pairs", "fragments_join"]
9527
- }
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"]
9528
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
9529
10074
  },
9530
- commonmark: {
9531
- options: {
9532
- html: true,
9533
- xhtmlOut: true,
9534
- breaks: false,
9535
- langPrefix: "language-",
9536
- linkify: false,
9537
- typographer: false,
9538
- quotes: "“”‘’",
9539
- highlight: null,
9540
- maxNesting: 20
9541
- },
9542
- components: {
9543
- core: { rules: [
9544
- "normalize",
9545
- "block",
9546
- "inline",
9547
- "text_join"
9548
- ] },
9549
- block: { rules: [
9550
- "blockquote",
9551
- "code",
9552
- "fence",
9553
- "heading",
9554
- "hr",
9555
- "html_block",
9556
- "lheading",
9557
- "list",
9558
- "reference",
9559
- "paragraph"
9560
- ] },
9561
- inline: {
9562
- rules: [
9563
- "autolink",
9564
- "backticks",
9565
- "emphasis",
9566
- "entity",
9567
- "escape",
9568
- "html_inline",
9569
- "image",
9570
- "link",
9571
- "newline",
9572
- "text"
9573
- ],
9574
- rules2: [
9575
- "balance_pairs",
9576
- "emphasis",
9577
- "fragments_join"
9578
- ]
9579
- }
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
+ ]
9580
10112
  }
9581
10113
  }
9582
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
+ };
9583
10123
  const BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;
9584
10124
  const GOOD_DATA_RE = /^data:image\/(gif|png|jpeg|webp);/;
9585
10125
  function validateLink(url) {
@@ -10040,6 +10580,7 @@ MarkdownIt.prototype.renderInline = function(src, env) {
10040
10580
  env = env || {};
10041
10581
  return this.renderer.render(this.parseInline(src, env), this.options, env);
10042
10582
  };
10583
+
10043
10584
  //#endregion
10044
10585
  //#region src/import-preprocess.ts
10045
10586
  /**
@@ -10474,6 +11015,7 @@ function prepareImport(workspaceDir, extraPaths, sessionsDir) {
10474
11015
  totalSegments: allSegments.length
10475
11016
  };
10476
11017
  }
11018
+
10477
11019
  //#endregion
10478
11020
  //#region src/migration-service.ts
10479
11021
  /**
@@ -10504,7 +11046,8 @@ function calculateImportStrength(segmentDate) {
10504
11046
  const ageMs = Date.now() - new Date(segmentDate).getTime();
10505
11047
  if (ageMs <= 0) return 1;
10506
11048
  const ageDays = ageMs / (1440 * 60 * 1e3);
10507
- return Math.max(Math.pow(DECAY_PER_DAY, ageDays), MIN_IMPORT_STRENGTH);
11049
+ const strength = Math.pow(DECAY_PER_DAY, ageDays);
11050
+ return Math.max(strength, MIN_IMPORT_STRENGTH);
10508
11051
  }
10509
11052
  /**
10510
11053
  * Run the memory-core migration. Idempotent — checks db state before proceeding.
@@ -10854,6 +11397,7 @@ Here is the current content of ${fileName}:
10854
11397
 
10855
11398
  ${content}`;
10856
11399
  }
11400
+
10857
11401
  //#endregion
10858
11402
  //#region src/turn-memory-ledger.ts
10859
11403
  /**
@@ -10914,6 +11458,7 @@ var TurnMemoryLedger = class {
10914
11458
  this.version = 0;
10915
11459
  }
10916
11460
  };
11461
+
10917
11462
  //#endregion
10918
11463
  //#region src/index.ts
10919
11464
  /**
@@ -10927,25 +11472,82 @@ var TurnMemoryLedger = class {
10927
11472
  * - Internal tick-based time perception
10928
11473
  */
10929
11474
  const AUTH_PROFILE_FILENAME = "auth-profiles.json";
11475
+ const profileCache = /* @__PURE__ */ new Map();
10930
11476
  /**
10931
11477
  * Read API keys from auth-profiles.json.
10932
- * Tries agentDir first, then stateDir/agents/main/agent/ as fallback
10933
- * (hardcoded "main" — works for single-agent setups which is the common case).
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.
10934
11486
  */
10935
11487
  function readAuthProfiles(stateDir, agentDir, logger) {
10936
- const candidates = [agentDir ? join(agentDir, AUTH_PROFILE_FILENAME) : void 0, stateDir ? join(stateDir, "agents", "main", "agent", AUTH_PROFILE_FILENAME) : void 0].filter((p) => Boolean(p));
10937
- for (const filePath of candidates) try {
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 {
10938
11516
  const raw = readFileSync(filePath, "utf-8");
10939
11517
  const data = JSON.parse(raw);
10940
- 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)) {
10941
11519
  logger?.warn(`Invalid auth profile format: ${filePath}`);
10942
- continue;
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
+ };
10943
11536
  }
10944
- return data.profiles;
11537
+ profileCache.set(filePath, {
11538
+ kind: "hit",
11539
+ mtimeMs,
11540
+ profiles: cleaned
11541
+ });
11542
+ return cleaned;
10945
11543
  } catch (err) {
10946
- if (err?.code !== "ENOENT") logger?.warn(`Failed to read auth profiles from ${filePath}: ${err.message}`);
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;
10947
11550
  }
10948
- return null;
10949
11551
  }
10950
11552
  /**
10951
11553
  * Resolve LLM caller config from auth profiles.
@@ -11002,79 +11604,79 @@ function resolveMemoryDir(config, workspaceDir, pathResolver) {
11002
11604
  if (isAbsolute(dbPath)) return dbPath;
11003
11605
  return join(workspaceDir, dbPath);
11004
11606
  }
11005
- const EMBEDDING_REQUIRED_HINT = "Embedding provider required but not available.\nSet one of: OPENAI_API_KEY, GEMINI_API_KEY, VOYAGE_API_KEY, or MISTRAL_API_KEY.\nTo run without embeddings (BM25-only), set \"requireEmbedding\": false in plugin config.";
11006
- /**
11007
- * Try to create an embedding provider directly via SDK factory functions.
11008
- * Used when the memory-core plugin is disabled and the global registry is empty.
11009
- * Factory returns { provider, client } — we extract the provider.
11010
- */
11011
- async function tryDirectProviderFactory(providerId, openclawConfig, agentDir, model) {
11012
- const factory = {
11013
- openai: createOpenAiEmbeddingProvider,
11014
- gemini: createGeminiEmbeddingProvider
11015
- }[providerId];
11016
- if (!factory) return null;
11017
- const result = await factory({
11018
- config: openclawConfig,
11019
- agentDir,
11020
- model: model ?? ""
11021
- });
11022
- const provider = result?.provider ?? result;
11023
- return provider?.embedQuery ? provider : null;
11024
- }
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.";
11025
11608
  /**
11026
- * Resolve an embedding provider from the OpenClaw provider registry.
11609
+ * Resolve an embedding provider.
11027
11610
  *
11028
- * For "auto": tries each registered adapter in priority order.
11029
- * For explicit IDs: creates the specific provider or throws.
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).
11030
11619
  *
11031
11620
  * Throws on failure — the plugin requires a working embedding provider.
11032
11621
  */
11033
- async function resolveEmbeddingProvider(providerId, openclawConfig, agentDir, model) {
11622
+ async function resolveEmbeddingProvider(providerId, openclawConfig, agentDir, model, stateDir, logger) {
11034
11623
  const errors = [];
11624
+ const profiles = readAuthProfiles(stateDir, agentDir, logger);
11035
11625
  if (providerId === "auto") {
11036
11626
  const adapters = listMemoryEmbeddingProviders().filter((a) => typeof a.autoSelectPriority === "number").toSorted((a, b) => (a.autoSelectPriority ?? Infinity) - (b.autoSelectPriority ?? Infinity));
11037
11627
  for (const adapter of adapters) try {
11038
11628
  const result = await adapter.create({
11039
11629
  config: openclawConfig,
11040
11630
  agentDir,
11041
- model: model ?? adapter.defaultModel ?? ""
11631
+ model: adapter.defaultModel ?? ""
11042
11632
  });
11043
11633
  if (result.provider) return result.provider;
11044
11634
  } catch (err) {
11045
11635
  errors.push(`${adapter.id}: ${err instanceof Error ? err.message : String(err)}`);
11046
11636
  }
11047
- if (adapters.length === 0) for (const id of ["gemini", "openai"]) try {
11048
- const provider = await tryDirectProviderFactory(id, openclawConfig, agentDir, model);
11049
- if (provider) return provider;
11050
- } catch (err) {
11051
- errors.push(`${id} (direct): ${err instanceof Error ? err.message : String(err)}`);
11052
- }
11637
+ const provider = autoSelectStandaloneProvider(profiles, logger);
11638
+ if (provider) return provider;
11639
+ errors.push("standalone: no API key found for openai or gemini");
11053
11640
  throw new Error(`No embedding provider available (tried auto-selection).\n${errors.join("\n") || "No adapters registered."}`);
11054
11641
  }
11055
11642
  const adapter = getMemoryEmbeddingProvider(providerId);
11056
- if (adapter) {
11643
+ if (adapter) try {
11057
11644
  const result = await adapter.create({
11058
11645
  config: openclawConfig,
11059
11646
  agentDir,
11060
11647
  model: model ?? adapter.defaultModel ?? ""
11061
11648
  });
11062
11649
  if (result.provider) return result.provider;
11063
- throw new Error(`Embedding provider "${providerId}" returned no provider instance`);
11650
+ errors.push(`${providerId}: registry adapter returned no provider instance`);
11651
+ } catch (err) {
11652
+ errors.push(`${providerId}: ${err instanceof Error ? err.message : String(err)}`);
11064
11653
  }
11065
- const directProvider = await tryDirectProviderFactory(providerId, openclawConfig, agentDir, model);
11066
- if (directProvider) return directProvider;
11067
- 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}"`);
11068
11657
  }
11069
11658
  /**
11070
- * Create the single workspace instance for this plugin registration.
11071
- * Provider resolution is lazy deferred to first embed call via a cached promise.
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.
11072
11675
  *
11073
- * When `initDeps` is provided, one-time startup tasks (migration, workspace
11074
- * cleanup) are run asynchronously after workspace creation. This happens on
11075
- * 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
11076
11678
  */
11077
- function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger, pathResolver, initDeps) {
11679
+ function createWorkspace(config, workspaceDir, openclawConfig, getAgentDir, logger, pathResolver, getStateDir) {
11078
11680
  const memoryDir = resolveMemoryDir(config, workspaceDir, pathResolver);
11079
11681
  const circuitBreaker = new EmbeddingCircuitBreaker({
11080
11682
  onStateChange: (from, to) => {
@@ -11087,24 +11689,60 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
11087
11689
  }
11088
11690
  });
11089
11691
  let providerPromise = null;
11692
+ let dbRef = null;
11090
11693
  const getProvider = () => {
11091
- if (!providerPromise) providerPromise = resolveEmbeddingProvider(config.embedding.provider, openclawConfig, agentDir, config.embedding.model).catch((err) => {
11092
- if (config.requireEmbedding) throw new Error(`${EMBEDDING_REQUIRED_HINT}\nDetails: ${err instanceof Error ? err.message : String(err)}`);
11093
- providerPromise = null;
11094
- throw err;
11095
- });
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
+ }
11096
11722
  return providerPromise;
11097
11723
  };
11098
- if (config.requireEmbedding) getProvider().catch(() => {});
11099
11724
  const ws = {
11100
11725
  manager: new MemoryManager(memoryDir, { async embed(text) {
11101
11726
  const provider = await getProvider();
11102
11727
  return circuitBreaker.call(() => provider.embedQuery(text));
11103
11728
  } }, logger, config.logQueries),
11104
11729
  circuitBreaker,
11105
- memoryDir
11730
+ memoryDir,
11731
+ initProvider: async () => {
11732
+ await getProvider();
11733
+ }
11106
11734
  };
11107
- if (initDeps) (async () => {
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 () => {
11108
11746
  const db = ws.manager.getDatabase();
11109
11747
  const dbState = {
11110
11748
  get: (key) => db.getState(key),
@@ -11125,7 +11763,7 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
11125
11763
  logger?.warn(`Workspace cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
11126
11764
  }
11127
11765
  if (config.requireEmbedding) try {
11128
- await getProvider();
11766
+ await ws.initProvider();
11129
11767
  } catch (err) {
11130
11768
  logger?.error(`Migration aborted: embedding required but unavailable. ${err instanceof Error ? err.message : String(err)}`);
11131
11769
  return;
@@ -11138,6 +11776,7 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
11138
11776
  temporal_state: seg.date ? "past" : "none",
11139
11777
  temporal_anchor: seg.date
11140
11778
  }));
11779
+ const agentDir = getAgentDir();
11141
11780
  const sessionsDir = agentDir ? join(agentDir, "sessions") : void 0;
11142
11781
  const migrationResult = await runMigration({
11143
11782
  workspaceDir,
@@ -11159,7 +11798,6 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
11159
11798
  logger?.warn(`Migration failed: ${err instanceof Error ? err.message : String(err)}`);
11160
11799
  }
11161
11800
  })();
11162
- return ws;
11163
11801
  }
11164
11802
  function createMemoryTools(getManager, getLogPath, ledger) {
11165
11803
  return [
@@ -11311,20 +11949,28 @@ const associativeMemoryPlugin = {
11311
11949
  const ledger = new TurnMemoryLedger();
11312
11950
  const runtimePaths = {};
11313
11951
  let workspace = null;
11314
- const getWorkspace = (workspaceDir, agentDir, triggerInit = false) => {
11315
- if (!workspace) {
11316
- const llmConfig = resolveLlmConfig(runtimePaths.stateDir, agentDir, log);
11317
- workspace = createWorkspace(config, workspaceDir, openclawConfig, agentDir, log, api.resolvePath, triggerInit ? {
11318
- stateDir: runtimePaths.stateDir,
11319
- llmConfig
11320
- } : void 0);
11321
- }
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);
11322
11957
  return workspace;
11323
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
+ };
11324
11969
  api.registerTool((ctx) => {
11325
11970
  const workspaceDir = ctx.workspaceDir ?? ctx.agentDir ?? ".";
11326
11971
  runtimePaths.agentDir ??= ctx.agentDir;
11327
- const ws = getWorkspace(workspaceDir, ctx.agentDir, true);
11972
+ const ws = getWorkspace(workspaceDir);
11973
+ triggerStartupTasks(workspaceDir);
11328
11974
  return createMemoryTools(() => ws.manager, () => join(ws.memoryDir, "retrieval.log"), ledger);
11329
11975
  }, { names: [
11330
11976
  "memory_store",
@@ -11475,17 +12121,22 @@ const associativeMemoryPlugin = {
11475
12121
  /** Cron expression: daily at 15:00 (03:00 is covered by full consolidation). */
11476
12122
  const DEFAULT_TEMPORAL_CRON = "0 15 * * *";
11477
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;
11478
12132
  try {
11479
- const context = event?.context;
11480
- const cron = context?.cron ?? context?.deps?.cron;
11481
- if (!cron || typeof cron.list !== "function" || typeof cron.add !== "function") {
11482
- log.warn("Cron service not available — scheduled consolidation disabled");
11483
- return;
11484
- }
11485
- if (context?.stateDir) runtimePaths.stateDir = context.stateDir;
11486
- const allJobs = await cron.list({ includeDisabled: true });
11487
- const managed = allJobs.filter((j) => j.description?.includes(CONSOLIDATION_CRON_TAG));
11488
- 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, {
11489
12140
  name: CONSOLIDATION_CRON_NAME,
11490
12141
  description: `${CONSOLIDATION_CRON_TAG} Full consolidation: decay, reinforce, merge, prune, promote.`,
11491
12142
  enabled: true,
@@ -11494,25 +12145,17 @@ const associativeMemoryPlugin = {
11494
12145
  expr: DEFAULT_CONSOLIDATION_CRON
11495
12146
  },
11496
12147
  sessionTarget: "main",
11497
- wakeMode: "next-heartbeat",
12148
+ wakeMode: "now",
11498
12149
  payload: {
11499
12150
  kind: "systemEvent",
11500
12151
  text: CONSOLIDATION_CRON_TRIGGER
11501
12152
  }
11502
- };
11503
- if (managed.length === 0) {
11504
- await cron.add(desired);
11505
- log.info("Registered consolidation cron job");
11506
- } else {
11507
- const existing = managed[0];
11508
- if (existing.schedule?.expr !== desired.schedule.expr) {
11509
- await cron.update(existing.id, { schedule: desired.schedule });
11510
- log.info("Updated consolidation cron schedule");
11511
- }
11512
- for (let i = 1; i < managed.length; i++) await cron.remove(managed[i].id);
11513
- }
11514
- const temporalManaged = allJobs.filter((j) => j.description?.includes(TEMPORAL_CRON_TAG));
11515
- 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, {
11516
12159
  name: TEMPORAL_CRON_NAME,
11517
12160
  description: `${TEMPORAL_CRON_TAG} Transition temporal states: future→present→past.`,
11518
12161
  enabled: true,
@@ -11521,32 +12164,30 @@ const associativeMemoryPlugin = {
11521
12164
  expr: DEFAULT_TEMPORAL_CRON
11522
12165
  },
11523
12166
  sessionTarget: "main",
11524
- wakeMode: "next-heartbeat",
12167
+ wakeMode: "now",
11525
12168
  payload: {
11526
12169
  kind: "systemEvent",
11527
12170
  text: TEMPORAL_CRON_TRIGGER
11528
12171
  }
11529
- };
11530
- if (temporalManaged.length === 0) {
11531
- await cron.add(desiredTemporal);
11532
- log.info("Registered temporal transitions cron job");
11533
- } else {
11534
- const existing = temporalManaged[0];
11535
- if (existing.schedule?.expr !== desiredTemporal.schedule.expr) {
11536
- await cron.update(existing.id, { schedule: desiredTemporal.schedule });
11537
- log.info("Updated temporal transitions cron schedule");
11538
- }
11539
- for (let i = 1; i < temporalManaged.length; i++) await cron.remove(temporalManaged[i].id);
11540
- }
12172
+ }, TEMPORAL_CRON_TAG, log);
11541
12173
  } catch (err) {
11542
- log.warn(`Failed to register consolidation cron: ${err instanceof Error ? err.message : String(err)}`);
12174
+ log.warn(`Failed to reconcile temporal cron: ${err instanceof Error ? err.message : String(err)}`);
11543
12175
  }
11544
12176
  }, { name: "formative-memory-consolidation-cron" });
11545
12177
  api.on("before_agent_reply", async (event, ctx) => {
11546
12178
  const body = event?.cleanedBody;
11547
12179
  if (!body) return;
11548
- if (body.includes(TEMPORAL_CRON_TRIGGER) && !body.includes(CONSOLIDATION_CRON_TRIGGER)) try {
11549
- const db = getWorkspace(ctx?.workspaceDir ?? ".").manager.getDatabase();
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 {
11550
12191
  const count = db.transaction(() => applyTemporalTransitions(db, log));
11551
12192
  if (count > 0) log.info(`Scheduled temporal transitions: ${count} transitioned`);
11552
12193
  return {
@@ -11562,9 +12203,7 @@ const associativeMemoryPlugin = {
11562
12203
  reason: "associative-memory-temporal-error"
11563
12204
  };
11564
12205
  }
11565
- if (!body.includes(CONSOLIDATION_CRON_TRIGGER)) return;
11566
12206
  try {
11567
- const ws = getWorkspace(ctx?.workspaceDir ?? ".");
11568
12207
  const llmConfig = resolveLlmConfig(runtimePaths.stateDir, runtimePaths.agentDir, log);
11569
12208
  const mergeContentProducer = llmConfig ? async (a, b) => {
11570
12209
  return {
@@ -11572,7 +12211,6 @@ const associativeMemoryPlugin = {
11572
12211
  type: a.type
11573
12212
  };
11574
12213
  } : void 0;
11575
- const db = ws.manager.getDatabase();
11576
12214
  log.debug("consolidation: starting trigger=cron");
11577
12215
  return {
11578
12216
  handled: true,
@@ -11596,9 +12234,12 @@ const associativeMemoryPlugin = {
11596
12234
  id: "formative-memory-startup",
11597
12235
  async start(ctx) {
11598
12236
  runtimePaths.stateDir = ctx.stateDir;
12237
+ const maybeAgentDir = ctx.agentDir;
12238
+ if (!runtimePaths.agentDir && typeof maybeAgentDir === "string") runtimePaths.agentDir = maybeAgentDir;
11599
12239
  }
11600
12240
  });
11601
12241
  }
11602
12242
  };
12243
+
11603
12244
  //#endregion
11604
- export { associativeMemoryPlugin as default };
12245
+ export { associativeMemoryPlugin as default };