formative-memory 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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 = {
@@ -2880,6 +3270,7 @@ const nullLogger = {
2880
3270
  error: () => {},
2881
3271
  isDebugEnabled: () => false
2882
3272
  };
3273
+
2883
3274
  //#endregion
2884
3275
  //#region src/consolidation-steps.ts
2885
3276
  /** Retrieval reinforcement learning rate (η). */
@@ -2890,8 +3281,12 @@ const DECAY_WORKING = .906;
2890
3281
  const DECAY_CONSOLIDATED = .977;
2891
3282
  /** Decay multiplier for association weights per cycle. */
2892
3283
  const DECAY_ASSOCIATION = .9;
3284
+ /** Mode weight for hybrid retrieval. */
3285
+ const MODE_WEIGHT_HYBRID = 1;
2893
3286
  /** Mode weight for BM25-only retrieval (degraded). */
2894
3287
  const MODE_WEIGHT_BM25_ONLY = .5;
3288
+ /** Maximum catch-up cycles to prevent amnesia on very long gaps. */
3289
+ const MAX_CATCHUP_CYCLES = 30;
2895
3290
  /**
2896
3291
  * Apply catch-up decay for missed consolidation cycles.
2897
3292
  *
@@ -2916,7 +3311,7 @@ function applyCatchUpDecay(db, lastConsolidationMs, nowMs = Date.now(), log = nu
2916
3311
  const daysSince = (nowMs - (Number.isFinite(createdMs) ? Math.max(lastConsolidationMs, createdMs) : lastConsolidationMs)) / dayMs;
2917
3312
  const cycles = Math.max(0, Math.floor(daysSince) - 1);
2918
3313
  if (cycles <= 0) continue;
2919
- const effectiveCycles = Math.min(cycles, 30);
3314
+ const effectiveCycles = Math.min(cycles, MAX_CATCHUP_CYCLES);
2920
3315
  const factor = mem.consolidated ? DECAY_CONSOLIDATED : DECAY_WORKING;
2921
3316
  const newStrength = mem.strength * Math.pow(factor, effectiveCycles);
2922
3317
  if (debug) log.debug(`catch-up decay: "${preview(mem.content)}" ${mem.strength.toFixed(3)} → ${newStrength.toFixed(3)} (${effectiveCycles} cycles, ${mem.consolidated ? "consolidated" : "working"})`);
@@ -2926,7 +3321,7 @@ function applyCatchUpDecay(db, lastConsolidationMs, nowMs = Date.now(), log = nu
2926
3321
  const globalDaysSince = (nowMs - lastConsolidationMs) / dayMs;
2927
3322
  const globalCycles = Math.max(0, Math.floor(globalDaysSince) - 1);
2928
3323
  if (globalCycles > 0) {
2929
- const effectiveGlobal = Math.min(globalCycles, 30);
3324
+ const effectiveGlobal = Math.min(globalCycles, MAX_CATCHUP_CYCLES);
2930
3325
  const associationFactor = Math.pow(DECAY_ASSOCIATION, effectiveGlobal);
2931
3326
  if (debug) log.debug(`catch-up decay: associations ×${associationFactor.toFixed(4)} (${effectiveGlobal} cycles)`);
2932
3327
  db.decayAllAssociationWeights(associationFactor);
@@ -2951,7 +3346,7 @@ function applyReinforcement(db, log = nullLogger) {
2951
3346
  if (pendingAttrs.length === 0) return 0;
2952
3347
  const reinforcements = /* @__PURE__ */ new Map();
2953
3348
  for (const attr of pendingAttrs) {
2954
- const modeWeight = db.getExposureRetrievalMode(attr.memory_id, attr.turn_id) === "bm25_only" ? MODE_WEIGHT_BM25_ONLY : 1;
3349
+ const modeWeight = db.getExposureRetrievalMode(attr.memory_id, attr.turn_id) === "bm25_only" ? MODE_WEIGHT_BM25_ONLY : MODE_WEIGHT_HYBRID;
2955
3350
  const reinforcement = ETA * attr.confidence * modeWeight;
2956
3351
  const current = reinforcements.get(attr.memory_id) ?? 0;
2957
3352
  reinforcements.set(attr.memory_id, current + reinforcement);
@@ -3005,6 +3400,8 @@ function applyDecay(db, log = nullLogger) {
3005
3400
  function applyAssociationDecay(db) {
3006
3401
  db.decayAllAssociationWeights(DECAY_ASSOCIATION);
3007
3402
  }
3403
+ /** Minimum weight for a transitive association to be created. */
3404
+ const TRANSITIVE_WEIGHT_THRESHOLD = .1;
3008
3405
  /** Base weight for a new co-retrieval association. */
3009
3406
  const CO_RETRIEVAL_BASE_WEIGHT = .1;
3010
3407
  /**
@@ -3063,7 +3460,7 @@ function updateTransitiveAssociations(db, maxUpdates = 100, log = nullLogger) {
3063
3460
  const otherId2 = n2.memory_a === mem.id ? n2.memory_b : n2.memory_a;
3064
3461
  if (otherId1 === otherId2) continue;
3065
3462
  const transitiveWeight = n1.weight * n2.weight;
3066
- if (transitiveWeight < .1) continue;
3463
+ if (transitiveWeight < TRANSITIVE_WEIGHT_THRESHOLD) continue;
3067
3464
  const existing = db.getAssociationWeight(otherId1, otherId2);
3068
3465
  const newWeight = existing + transitiveWeight - existing * transitiveWeight;
3069
3466
  if (newWeight - existing < 1e-9) continue;
@@ -3075,6 +3472,8 @@ function updateTransitiveAssociations(db, maxUpdates = 100, log = nullLogger) {
3075
3472
  if (count > 0) log.info(`associate: ${count} transitive associations created/updated`);
3076
3473
  return count;
3077
3474
  }
3475
+ /** Strength threshold below which memories are pruned. */
3476
+ const PRUNE_STRENGTH_THRESHOLD = .05;
3078
3477
  /** Association weight threshold below which associations are pruned. */
3079
3478
  const PRUNE_ASSOCIATION_THRESHOLD = .01;
3080
3479
  /**
@@ -3089,7 +3488,7 @@ function applyPruning(db, log = nullLogger) {
3089
3488
  const allMemories = db.getAllMemories();
3090
3489
  const debug = log.isDebugEnabled();
3091
3490
  let memoriesPruned = 0;
3092
- for (const mem of allMemories) if (mem.strength <= .05) {
3491
+ for (const mem of allMemories) if (mem.strength <= PRUNE_STRENGTH_THRESHOLD) {
3093
3492
  if (debug) log.debug(`prune: removing "${preview(mem.content, 80)}" (strength=${mem.strength.toFixed(3)}, type=${mem.type})`);
3094
3493
  db.deleteMemory(mem.id);
3095
3494
  memoriesPruned++;
@@ -3145,6 +3544,59 @@ function provenanceGC(db, cutoffDays = 30, log = nullLogger) {
3145
3544
  if (count > 0) log.debug(`gc: ${count} exposure rows older than ${cutoffDays}d removed`);
3146
3545
  return count;
3147
3546
  }
3547
+
3548
+ //#endregion
3549
+ //#region src/cron-utils.ts
3550
+ /**
3551
+ * Cron job reconciliation and system event token matching utilities.
3552
+ *
3553
+ * Extracted from register() for testability. Token matching mirrors
3554
+ * memory-core's includesSystemEventToken() from dreaming-shared.ts.
3555
+ */
3556
+ function normalizeTrimmedString(value) {
3557
+ if (typeof value !== "string") return void 0;
3558
+ const trimmed = value.trim();
3559
+ return trimmed.length > 0 ? trimmed : void 0;
3560
+ }
3561
+ function includesSystemEventToken(cleanedBody, eventText) {
3562
+ const normalizedBody = normalizeTrimmedString(cleanedBody);
3563
+ const normalizedEventText = normalizeTrimmedString(eventText);
3564
+ if (!normalizedBody || !normalizedEventText) return false;
3565
+ if (normalizedBody === normalizedEventText) return true;
3566
+ return normalizedBody.split(/\r?\n/).some((line) => line.trim() === normalizedEventText);
3567
+ }
3568
+ /**
3569
+ * Reconcile a single managed cron job: create if missing, update if drifted, prune duplicates.
3570
+ * Identifies managed jobs by description tag OR matching name + payload text.
3571
+ * Sorts by createdAtMs for deterministic primary selection.
3572
+ */
3573
+ async function reconcileCronJob(cron, allJobs, desired, tag, logger) {
3574
+ const managed = allJobs.filter((j) => j.description?.includes(tag) || j.name === desired.name && j.payload?.text === desired.payload.text).sort((a, b) => (a.createdAtMs ?? Number.MAX_SAFE_INTEGER) - (b.createdAtMs ?? Number.MAX_SAFE_INTEGER));
3575
+ if (managed.length === 0) {
3576
+ await cron.add(desired);
3577
+ logger.info(`Registered cron job: ${desired.name}`);
3578
+ return;
3579
+ }
3580
+ const primary = managed[0];
3581
+ if (primary.name !== desired.name || primary.description !== desired.description || primary.schedule?.expr !== desired.schedule.expr || primary.wakeMode !== desired.wakeMode || primary.enabled !== desired.enabled || primary.payload?.text !== desired.payload.text || primary.payload?.kind !== desired.payload.kind || primary.sessionTarget !== desired.sessionTarget) {
3582
+ await cron.update(primary.id, {
3583
+ name: desired.name,
3584
+ description: desired.description,
3585
+ schedule: desired.schedule,
3586
+ wakeMode: desired.wakeMode,
3587
+ enabled: desired.enabled,
3588
+ payload: desired.payload,
3589
+ sessionTarget: desired.sessionTarget
3590
+ });
3591
+ logger.info(`Updated cron job: ${desired.name}`);
3592
+ }
3593
+ for (let i = 1; i < managed.length; i++) try {
3594
+ await cron.remove(managed[i].id);
3595
+ } catch (err) {
3596
+ logger.warn(`Failed to remove duplicate cron job ${managed[i].id}: ${err instanceof Error ? err.message : String(err)}`);
3597
+ }
3598
+ }
3599
+
3148
3600
  //#endregion
3149
3601
  //#region src/merge-candidates.ts
3150
3602
  /** Minimum Jaccard score when no embeddings are available. */
@@ -3155,6 +3607,8 @@ const MERGE_THRESHOLD_JACCARD_ONLY = .6;
3155
3607
  * confidence — embedding adds semantic check on top of lexical overlap.
3156
3608
  */
3157
3609
  const MERGE_THRESHOLD_COMBINED = .5;
3610
+ /** Maximum number of merge pairs returned per run. */
3611
+ const MAX_MERGE_PAIRS = 20;
3158
3612
  /** Minimum strength for a memory to be a merge source. */
3159
3613
  const MERGE_SOURCE_MIN_STRENGTH = .5;
3160
3614
  /** Minimum strength for a memory to be a merge target. */
@@ -3170,7 +3624,7 @@ const EMBEDDING_WEIGHT = .6;
3170
3624
  * `type` are considered. Complexity is O(S×T) where both S and T
3171
3625
  * are pre-filtered subsets of the full memory set.
3172
3626
  */
3173
- function findMergeCandidatesDelta(sources, targets, maxPairs = 20) {
3627
+ function findMergeCandidatesDelta(sources, targets, maxPairs = MAX_MERGE_PAIRS) {
3174
3628
  if (sources.length === 0 || targets.length === 0) return [];
3175
3629
  const featureCache = /* @__PURE__ */ new Map();
3176
3630
  const getFeatures = (m) => {
@@ -3254,11 +3708,13 @@ function cosineSimilarity$1(a, b) {
3254
3708
  const denom = Math.sqrt(normA) * Math.sqrt(normB);
3255
3709
  return denom === 0 ? 0 : dot / denom;
3256
3710
  }
3711
+
3257
3712
  //#endregion
3258
3713
  //#region src/hash.ts
3259
3714
  function contentHash(content) {
3260
3715
  return createHash("sha256").update(content, "utf8").digest("hex");
3261
3716
  }
3717
+
3262
3718
  //#endregion
3263
3719
  //#region src/merge-execution.ts
3264
3720
  /**
@@ -3407,6 +3863,7 @@ function inheritAssociations(db, sourceIds, canonicalId, now) {
3407
3863
  db.upsertAssociation(canonicalId, neighbor, finalWeight, now);
3408
3864
  }
3409
3865
  }
3866
+
3410
3867
  //#endregion
3411
3868
  //#region src/consolidation.ts
3412
3869
  /**
@@ -3502,6 +3959,7 @@ async function runConsolidation(params) {
3502
3959
  durationMs: Date.now() - start
3503
3960
  };
3504
3961
  }
3962
+
3505
3963
  //#endregion
3506
3964
  //#region src/retrieval-log.ts
3507
3965
  /**
@@ -3529,6 +3987,7 @@ function appendFeedbackEvent(logPath, ratings, comment) {
3529
3987
  function appendStoreEvent(logPath, newId, contextIds) {
3530
3988
  appendFileSync(logPath, `${(/* @__PURE__ */ new Date()).toISOString()} store ${newId}${contextIds.length > 0 ? ` context:${contextIds.join(",")}` : ""}\n`);
3531
3989
  }
3990
+
3532
3991
  //#endregion
3533
3992
  //#region src/after-turn.ts
3534
3993
  const CONFIDENCE = {
@@ -3687,8 +4146,19 @@ function feedbackEvidenceForRating(rating) {
3687
4146
  confidence: CONFIDENCE.agent_feedback_negative
3688
4147
  };
3689
4148
  }
4149
+
3690
4150
  //#endregion
3691
4151
  //#region src/llm-caller.ts
4152
+ /**
4153
+ * Lightweight LLM caller for plugin-internal tasks.
4154
+ *
4155
+ * Direct fetch to Anthropic or OpenAI API. Used for:
4156
+ * - Memory merge (consolidation)
4157
+ * - Migration enrichment
4158
+ * - Workspace file cleanup
4159
+ *
4160
+ * Not exposed to the agent — these are background operations.
4161
+ */
3692
4162
  const DEFAULTS = {
3693
4163
  anthropic: {
3694
4164
  model: "claude-haiku-4-5-20251001",
@@ -3727,7 +4197,7 @@ async function callAnthropic(prompt, apiKey, model, maxTokens, timeoutMs) {
3727
4197
  content: prompt
3728
4198
  }]
3729
4199
  })
3730
- }, timeoutMs);
4200
+ }, timeoutMs, "Anthropic LLM call");
3731
4201
  if (!response.ok) {
3732
4202
  const body = await response.text().catch(() => "");
3733
4203
  throw new Error(`Anthropic API error ${response.status}: ${body.slice(0, 200)}`);
@@ -3751,7 +4221,7 @@ async function callOpenAi(prompt, apiKey, model, maxTokens, timeoutMs) {
3751
4221
  content: prompt
3752
4222
  }]
3753
4223
  })
3754
- }, timeoutMs);
4224
+ }, timeoutMs, "OpenAI LLM call");
3755
4225
  if (!response.ok) {
3756
4226
  const body = await response.text().catch(() => "");
3757
4227
  throw new Error(`OpenAI API error ${response.status}: ${body.slice(0, 200)}`);
@@ -3760,21 +4230,6 @@ async function callOpenAi(prompt, apiKey, model, maxTokens, timeoutMs) {
3760
4230
  if (!text) throw new Error("OpenAI returned empty response");
3761
4231
  return text;
3762
4232
  }
3763
- async function fetchWithTimeout(url, init, timeoutMs) {
3764
- const controller = new AbortController();
3765
- const timer = setTimeout(() => controller.abort(), timeoutMs);
3766
- try {
3767
- return await fetch(url, {
3768
- ...init,
3769
- signal: controller.signal
3770
- });
3771
- } catch (error) {
3772
- if (error instanceof DOMException && error.name === "AbortError") throw new Error(`LLM API call timed out after ${timeoutMs}ms`);
3773
- throw error;
3774
- } finally {
3775
- clearTimeout(timer);
3776
- }
3777
- }
3778
4233
  /**
3779
4234
  * Extract an API key from OpenClaw auth profiles.
3780
4235
  * Tries the specified provider, falls back to the other.
@@ -3792,6 +4247,7 @@ function resolveApiKey(authProfiles, preferredProvider) {
3792
4247
  };
3793
4248
  return null;
3794
4249
  }
4250
+
3795
4251
  //#endregion
3796
4252
  //#region src/context-engine.ts
3797
4253
  /**
@@ -4302,6 +4758,7 @@ function isTextBlock(v) {
4302
4758
  const b = v;
4303
4759
  return b.type === "text" && typeof b.text === "string";
4304
4760
  }
4761
+
4305
4762
  //#endregion
4306
4763
  //#region src/embedding-circuit-breaker.ts
4307
4764
  var EmbeddingCircuitBreaker = class {
@@ -4425,6 +4882,7 @@ var EmbeddingTimeoutError = class extends Error {
4425
4882
  this.name = "EmbeddingTimeoutError";
4426
4883
  }
4427
4884
  };
4885
+
4428
4886
  //#endregion
4429
4887
  //#region src/memory-manager.ts
4430
4888
  var MemoryManager = class {
@@ -4695,6 +5153,7 @@ function isNearDuplicate(content, selected) {
4695
5153
  }
4696
5154
  return false;
4697
5155
  }
5156
+
4698
5157
  //#endregion
4699
5158
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/decode.mjs
4700
5159
  const decodeCache = {};
@@ -4766,6 +5225,7 @@ function decode(string, exclude) {
4766
5225
  }
4767
5226
  decode.defaultChars = ";/?:@&=+$,#";
4768
5227
  decode.componentChars = "";
5228
+
4769
5229
  //#endregion
4770
5230
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/encode.mjs
4771
5231
  const encodeCache = {};
@@ -4820,6 +5280,7 @@ function encode(string, exclude, keepEscaped) {
4820
5280
  }
4821
5281
  encode.defaultChars = ";/?:@&=+$,-_.!~*'()#";
4822
5282
  encode.componentChars = "-_.!~*'()";
5283
+
4823
5284
  //#endregion
4824
5285
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/format.mjs
4825
5286
  function format(url) {
@@ -4835,6 +5296,7 @@ function format(url) {
4835
5296
  result += url.hash || "";
4836
5297
  return result;
4837
5298
  }
5299
+
4838
5300
  //#endregion
4839
5301
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/parse.mjs
4840
5302
  function Url() {
@@ -5007,6 +5469,7 @@ Url.prototype.parseHost = function(host) {
5007
5469
  }
5008
5470
  if (host) this.hostname = host;
5009
5471
  };
5472
+
5010
5473
  //#endregion
5011
5474
  //#region node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/index.mjs
5012
5475
  var mdurl_exports = /* @__PURE__ */ __exportAll({
@@ -5015,24 +5478,31 @@ var mdurl_exports = /* @__PURE__ */ __exportAll({
5015
5478
  format: () => format,
5016
5479
  parse: () => urlParse
5017
5480
  });
5481
+
5018
5482
  //#endregion
5019
5483
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/properties/Any/regex.mjs
5020
5484
  var regex_default$5 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
5485
+
5021
5486
  //#endregion
5022
5487
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cc/regex.mjs
5023
5488
  var regex_default$4 = /[\0-\x1F\x7F-\x9F]/;
5489
+
5024
5490
  //#endregion
5025
5491
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cf/regex.mjs
5026
5492
  var regex_default$3 = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/;
5493
+
5027
5494
  //#endregion
5028
5495
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/P/regex.mjs
5029
5496
  var regex_default$2 = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;
5497
+
5030
5498
  //#endregion
5031
5499
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/S/regex.mjs
5032
5500
  var regex_default$1 = /[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/;
5501
+
5033
5502
  //#endregion
5034
5503
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Z/regex.mjs
5035
5504
  var regex_default = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;
5505
+
5036
5506
  //#endregion
5037
5507
  //#region node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/index.mjs
5038
5508
  var uc_micro_exports = /* @__PURE__ */ __exportAll({
@@ -5043,12 +5513,15 @@ var uc_micro_exports = /* @__PURE__ */ __exportAll({
5043
5513
  S: () => regex_default$1,
5044
5514
  Z: () => regex_default
5045
5515
  });
5516
+
5046
5517
  //#endregion
5047
5518
  //#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js
5048
5519
  var decode_data_html_default = new Uint16Array("ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Ā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
+
5049
5521
  //#endregion
5050
5522
  //#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
5051
5523
  var decode_data_xml_default = new Uint16Array("Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((c) => c.charCodeAt(0)));
5524
+
5052
5525
  //#endregion
5053
5526
  //#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
5054
5527
  var _a;
@@ -5105,6 +5578,7 @@ function replaceCodePoint(codePoint) {
5105
5578
  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) return 65533;
5106
5579
  return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
5107
5580
  }
5581
+
5108
5582
  //#endregion
5109
5583
  //#region node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
5110
5584
  var CharCodes;
@@ -5461,7 +5935,7 @@ function determineBranch(decodeTree, current, nodeIdx, char) {
5461
5935
  return -1;
5462
5936
  }
5463
5937
  const htmlDecoder = getDecoder(decode_data_html_default);
5464
- getDecoder(decode_data_xml_default);
5938
+ const xmlDecoder = getDecoder(decode_data_xml_default);
5465
5939
  /**
5466
5940
  * Decodes an HTML string.
5467
5941
  *
@@ -5472,6 +5946,7 @@ getDecoder(decode_data_xml_default);
5472
5946
  function decodeHTML(str, mode = DecodingMode.Legacy) {
5473
5947
  return htmlDecoder(str, mode);
5474
5948
  }
5949
+
5475
5950
  //#endregion
5476
5951
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/utils.mjs
5477
5952
  var utils_exports = /* @__PURE__ */ __exportAll({
@@ -5651,6 +6126,7 @@ const lib = {
5651
6126
  mdurl: mdurl_exports,
5652
6127
  ucmicro: uc_micro_exports
5653
6128
  };
6129
+
5654
6130
  //#endregion
5655
6131
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_label.mjs
5656
6132
  function parseLinkLabel(state, start, disableNested) {
@@ -5683,6 +6159,7 @@ function parseLinkLabel(state, start, disableNested) {
5683
6159
  state.pos = oldPos;
5684
6160
  return labelEnd;
5685
6161
  }
6162
+
5686
6163
  //#endregion
5687
6164
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs
5688
6165
  function parseLinkDestination(str, start, max) {
@@ -5740,6 +6217,7 @@ function parseLinkDestination(str, start, max) {
5740
6217
  result.ok = true;
5741
6218
  return result;
5742
6219
  }
6220
+
5743
6221
  //#endregion
5744
6222
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_title.mjs
5745
6223
  function parseLinkTitle(str, start, max, prev_state) {
@@ -5779,6 +6257,7 @@ function parseLinkTitle(str, start, max, prev_state) {
5779
6257
  state.str += unescapeAll(str.slice(start, pos));
5780
6258
  return state;
5781
6259
  }
6260
+
5782
6261
  //#endregion
5783
6262
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/index.mjs
5784
6263
  var helpers_exports = /* @__PURE__ */ __exportAll({
@@ -5786,6 +6265,7 @@ var helpers_exports = /* @__PURE__ */ __exportAll({
5786
6265
  parseLinkLabel: () => parseLinkLabel,
5787
6266
  parseLinkTitle: () => parseLinkTitle
5788
6267
  });
6268
+
5789
6269
  //#endregion
5790
6270
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/renderer.mjs
5791
6271
  /**
@@ -5999,6 +6479,7 @@ Renderer.prototype.render = function(tokens, options, env) {
5999
6479
  }
6000
6480
  return result;
6001
6481
  };
6482
+
6002
6483
  //#endregion
6003
6484
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/ruler.mjs
6004
6485
  /**
@@ -6270,6 +6751,7 @@ Ruler.prototype.getRules = function(chainName) {
6270
6751
  if (this.__cache__ === null) this.__compile__();
6271
6752
  return this.__cache__[chainName] || [];
6272
6753
  };
6754
+
6273
6755
  //#endregion
6274
6756
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/token.mjs
6275
6757
  /**
@@ -6424,6 +6906,7 @@ Token.prototype.attrJoin = function attrJoin(name, value) {
6424
6906
  if (idx < 0) this.attrPush([name, value]);
6425
6907
  else this.attrs[idx][1] = this.attrs[idx][1] + " " + value;
6426
6908
  };
6909
+
6427
6910
  //#endregion
6428
6911
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/state_core.mjs
6429
6912
  function StateCore(src, md, env) {
@@ -6434,6 +6917,7 @@ function StateCore(src, md, env) {
6434
6917
  this.md = md;
6435
6918
  }
6436
6919
  StateCore.prototype.Token = Token;
6920
+
6437
6921
  //#endregion
6438
6922
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/normalize.mjs
6439
6923
  const NEWLINES_RE = /\r\n?|\n/g;
@@ -6444,6 +6928,7 @@ function normalize(state) {
6444
6928
  str = str.replace(NULL_RE, "�");
6445
6929
  state.src = str;
6446
6930
  }
6931
+
6447
6932
  //#endregion
6448
6933
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/block.mjs
6449
6934
  function block(state) {
@@ -6456,6 +6941,7 @@ function block(state) {
6456
6941
  state.tokens.push(token);
6457
6942
  } else state.md.block.parse(state.src, state.md, state.env, state.tokens);
6458
6943
  }
6944
+
6459
6945
  //#endregion
6460
6946
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/inline.mjs
6461
6947
  function inline(state) {
@@ -6465,6 +6951,7 @@ function inline(state) {
6465
6951
  if (tok.type === "inline") state.md.inline.parse(tok.content, state.md, state.env, tok.children);
6466
6952
  }
6467
6953
  }
6954
+
6468
6955
  //#endregion
6469
6956
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/linkify.mjs
6470
6957
  function isLinkOpen$1(str) {
@@ -6542,6 +7029,7 @@ function linkify$1(state) {
6542
7029
  }
6543
7030
  }
6544
7031
  }
7032
+
6545
7033
  //#endregion
6546
7034
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/replacements.mjs
6547
7035
  const RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/;
@@ -6584,6 +7072,7 @@ function replace(state) {
6584
7072
  if (RARE_RE.test(state.tokens[blkIdx].content)) replace_rare(state.tokens[blkIdx].children);
6585
7073
  }
6586
7074
  }
7075
+
6587
7076
  //#endregion
6588
7077
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/smartquotes.mjs
6589
7078
  const QUOTE_TEST_RE = /['"]/;
@@ -6692,6 +7181,7 @@ function smartquotes(state) {
6692
7181
  process_inlines(state.tokens[blkIdx].children, state);
6693
7182
  }
6694
7183
  }
7184
+
6695
7185
  //#endregion
6696
7186
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/text_join.mjs
6697
7187
  function text_join(state) {
@@ -6711,6 +7201,7 @@ function text_join(state) {
6711
7201
  if (curr !== last) tokens.length = last;
6712
7202
  }
6713
7203
  }
7204
+
6714
7205
  //#endregion
6715
7206
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_core.mjs
6716
7207
  /** internal
@@ -6750,6 +7241,7 @@ Core.prototype.process = function(state) {
6750
7241
  for (let i = 0, l = rules.length; i < l; i++) rules[i](state);
6751
7242
  };
6752
7243
  Core.prototype.State = StateCore;
7244
+
6753
7245
  //#endregion
6754
7246
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/state_block.mjs
6755
7247
  function StateBlock(src, md, env, tokens) {
@@ -6857,6 +7349,7 @@ StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF
6857
7349
  return queue.join("");
6858
7350
  };
6859
7351
  StateBlock.prototype.Token = Token;
7352
+
6860
7353
  //#endregion
6861
7354
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/table.mjs
6862
7355
  const MAX_AUTOCOMPLETED_CELLS = 65536;
@@ -6992,6 +7485,7 @@ function table(state, startLine, endLine, silent) {
6992
7485
  state.line = nextLine;
6993
7486
  return true;
6994
7487
  }
7488
+
6995
7489
  //#endregion
6996
7490
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/code.mjs
6997
7491
  function code(state, startLine, endLine) {
@@ -7016,6 +7510,7 @@ function code(state, startLine, endLine) {
7016
7510
  token.map = [startLine, state.line];
7017
7511
  return true;
7018
7512
  }
7513
+
7019
7514
  //#endregion
7020
7515
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/fence.mjs
7021
7516
  function fence(state, startLine, endLine, silent) {
@@ -7061,6 +7556,7 @@ function fence(state, startLine, endLine, silent) {
7061
7556
  token.map = [startLine, state.line];
7062
7557
  return true;
7063
7558
  }
7559
+
7064
7560
  //#endregion
7065
7561
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/blockquote.mjs
7066
7562
  function blockquote(state, startLine, endLine, silent) {
@@ -7164,6 +7660,7 @@ function blockquote(state, startLine, endLine, silent) {
7164
7660
  state.blkIndent = oldIndent;
7165
7661
  return true;
7166
7662
  }
7663
+
7167
7664
  //#endregion
7168
7665
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/hr.mjs
7169
7666
  function hr(state, startLine, endLine, silent) {
@@ -7186,6 +7683,7 @@ function hr(state, startLine, endLine, silent) {
7186
7683
  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));
7187
7684
  return true;
7188
7685
  }
7686
+
7189
7687
  //#endregion
7190
7688
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/list.mjs
7191
7689
  function skipBulletListMarker(state, startLine) {
@@ -7339,6 +7837,7 @@ function list(state, startLine, endLine, silent) {
7339
7837
  if (tight) markTightParagraphs(state, listTokIdx);
7340
7838
  return true;
7341
7839
  }
7840
+
7342
7841
  //#endregion
7343
7842
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/reference.mjs
7344
7843
  function reference(state, startLine, _endLine, silent) {
@@ -7475,6 +7974,7 @@ function reference(state, startLine, _endLine, silent) {
7475
7974
  state.line = nextLine;
7476
7975
  return true;
7477
7976
  }
7977
+
7478
7978
  //#endregion
7479
7979
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/html_blocks.mjs
7480
7980
  var html_blocks_default = [
@@ -7541,11 +8041,13 @@ var html_blocks_default = [
7541
8041
  "track",
7542
8042
  "ul"
7543
8043
  ];
8044
+
7544
8045
  //#endregion
7545
8046
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/html_re.mjs
7546
8047
  const open_tag = "<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>";
7547
8048
  const HTML_TAG_RE = new RegExp("^(?:" + open_tag + "|<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>|<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->|<[?][\\s\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)");
7548
8049
  const HTML_OPEN_CLOSE_TAG_RE = new RegExp("^(?:" + open_tag + "|<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>)");
8050
+
7549
8051
  //#endregion
7550
8052
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/html_block.mjs
7551
8053
  const HTML_SEQUENCES = [
@@ -7613,6 +8115,7 @@ function html_block(state, startLine, endLine, silent) {
7613
8115
  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);
7614
8116
  return true;
7615
8117
  }
8118
+
7616
8119
  //#endregion
7617
8120
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/heading.mjs
7618
8121
  function heading(state, startLine, endLine, silent) {
@@ -7644,6 +8147,7 @@ function heading(state, startLine, endLine, silent) {
7644
8147
  token_c.markup = "########".slice(0, level);
7645
8148
  return true;
7646
8149
  }
8150
+
7647
8151
  //#endregion
7648
8152
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/lheading.mjs
7649
8153
  function lheading(state, startLine, endLine) {
@@ -7694,6 +8198,7 @@ function lheading(state, startLine, endLine) {
7694
8198
  state.parentType = oldParentType;
7695
8199
  return true;
7696
8200
  }
8201
+
7697
8202
  //#endregion
7698
8203
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/paragraph.mjs
7699
8204
  function paragraph(state, startLine, endLine) {
@@ -7723,6 +8228,7 @@ function paragraph(state, startLine, endLine) {
7723
8228
  state.parentType = oldParentType;
7724
8229
  return true;
7725
8230
  }
8231
+
7726
8232
  //#endregion
7727
8233
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_block.mjs
7728
8234
  /** internal
@@ -7855,6 +8361,7 @@ ParserBlock.prototype.parse = function(src, md, env, outTokens) {
7855
8361
  this.tokenize(state, state.line, state.lineMax);
7856
8362
  };
7857
8363
  ParserBlock.prototype.State = StateBlock;
8364
+
7858
8365
  //#endregion
7859
8366
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/state_inline.mjs
7860
8367
  function StateInline(src, md, env, outTokens) {
@@ -7924,6 +8431,7 @@ StateInline.prototype.scanDelims = function(start, canSplitWord) {
7924
8431
  };
7925
8432
  };
7926
8433
  StateInline.prototype.Token = Token;
8434
+
7927
8435
  //#endregion
7928
8436
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/text.mjs
7929
8437
  function isTerminatorChar(ch) {
@@ -7962,6 +8470,7 @@ function text(state, silent) {
7962
8470
  state.pos = pos;
7963
8471
  return true;
7964
8472
  }
8473
+
7965
8474
  //#endregion
7966
8475
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/linkify.mjs
7967
8476
  const SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;
@@ -8001,6 +8510,7 @@ function linkify(state, silent) {
8001
8510
  state.pos += url.length - proto.length;
8002
8511
  return true;
8003
8512
  }
8513
+
8004
8514
  //#endregion
8005
8515
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/newline.mjs
8006
8516
  function newline(state, silent) {
@@ -8023,6 +8533,7 @@ function newline(state, silent) {
8023
8533
  state.pos = pos;
8024
8534
  return true;
8025
8535
  }
8536
+
8026
8537
  //#endregion
8027
8538
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/escape.mjs
8028
8539
  const ESCAPED = [];
@@ -8067,6 +8578,7 @@ function escape(state, silent) {
8067
8578
  state.pos = pos + 1;
8068
8579
  return true;
8069
8580
  }
8581
+
8070
8582
  //#endregion
8071
8583
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/backticks.mjs
8072
8584
  function backtick(state, silent) {
@@ -8105,6 +8617,7 @@ function backtick(state, silent) {
8105
8617
  state.pos += openerLength;
8106
8618
  return true;
8107
8619
  }
8620
+
8108
8621
  //#endregion
8109
8622
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs
8110
8623
  function strikethrough_tokenize(state, silent) {
@@ -8182,6 +8695,7 @@ var strikethrough_default = {
8182
8695
  tokenize: strikethrough_tokenize,
8183
8696
  postProcess: strikethrough_postProcess
8184
8697
  };
8698
+
8185
8699
  //#endregion
8186
8700
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/emphasis.mjs
8187
8701
  function emphasis_tokenize(state, silent) {
@@ -8243,6 +8757,7 @@ var emphasis_default = {
8243
8757
  tokenize: emphasis_tokenize,
8244
8758
  postProcess: emphasis_post_process
8245
8759
  };
8760
+
8246
8761
  //#endregion
8247
8762
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/link.mjs
8248
8763
  function link(state, silent) {
@@ -8323,6 +8838,7 @@ function link(state, silent) {
8323
8838
  state.posMax = max;
8324
8839
  return true;
8325
8840
  }
8841
+
8326
8842
  //#endregion
8327
8843
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/image.mjs
8328
8844
  function image(state, silent) {
@@ -8401,6 +8917,7 @@ function image(state, silent) {
8401
8917
  state.posMax = max;
8402
8918
  return true;
8403
8919
  }
8920
+
8404
8921
  //#endregion
8405
8922
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/autolink.mjs
8406
8923
  const EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;
@@ -8453,6 +8970,7 @@ function autolink(state, silent) {
8453
8970
  }
8454
8971
  return false;
8455
8972
  }
8973
+
8456
8974
  //#endregion
8457
8975
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/html_inline.mjs
8458
8976
  function isLinkOpen(str) {
@@ -8483,6 +9001,7 @@ function html_inline(state, silent) {
8483
9001
  state.pos += match[0].length;
8484
9002
  return true;
8485
9003
  }
9004
+
8486
9005
  //#endregion
8487
9006
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/entity.mjs
8488
9007
  const DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;
@@ -8523,6 +9042,7 @@ function entity(state, silent) {
8523
9042
  }
8524
9043
  return false;
8525
9044
  }
9045
+
8526
9046
  //#endregion
8527
9047
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs
8528
9048
  function processDelimiters(delimiters) {
@@ -8582,6 +9102,7 @@ function link_pairs(state) {
8582
9102
  processDelimiters(state.delimiters);
8583
9103
  for (let curr = 0; curr < max; curr++) if (tokens_meta[curr] && tokens_meta[curr].delimiters) processDelimiters(tokens_meta[curr].delimiters);
8584
9104
  }
9105
+
8585
9106
  //#endregion
8586
9107
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs
8587
9108
  function fragments_join(state) {
@@ -8601,6 +9122,7 @@ function fragments_join(state) {
8601
9122
  }
8602
9123
  if (curr !== last) tokens.length = last;
8603
9124
  }
9125
+
8604
9126
  //#endregion
8605
9127
  //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_inline.mjs
8606
9128
  /** internal
@@ -8708,6 +9230,7 @@ ParserInline.prototype.parse = function(str, md, env, outTokens) {
8708
9230
  for (let i = 0; i < len; i++) rules[i](state);
8709
9231
  };
8710
9232
  ParserInline.prototype.State = StateInline;
9233
+
8711
9234
  //#endregion
8712
9235
  //#region node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs
8713
9236
  function re_default(opts) {
@@ -8748,6 +9271,7 @@ function re_default(opts) {
8748
9271
  re.tpl_link_no_ip_fuzzy = "(^|(?![.:/\\-_@])(?:[$+<=>^`||]|" + re.src_ZPCc + "))((?![$+<=>^`||])" + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ")";
8749
9272
  return re;
8750
9273
  }
9274
+
8751
9275
  //#endregion
8752
9276
  //#region node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs
8753
9277
  function assign(obj) {
@@ -9193,9 +9717,10 @@ LinkifyIt.prototype.normalize = function normalize(match) {
9193
9717
  * Override to modify basic RegExp-s.
9194
9718
  **/
9195
9719
  LinkifyIt.prototype.onCompile = function onCompile() {};
9720
+
9196
9721
  //#endregion
9197
- //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/default.mjs
9198
- 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) => {
9199
9724
  /** Highest positive signed 32-bit float value */
9200
9725
  const maxInt = 2147483647;
9201
9726
  /** Bootstring parameters */
@@ -9467,7 +9992,8 @@ var import_punycode = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((e
9467
9992
  return regexNonASCII.test(string) ? "xn--" + encode(string) : string;
9468
9993
  });
9469
9994
  };
9470
- module.exports = {
9995
+ /** Define the public API */
9996
+ const punycode = {
9471
9997
  "version": "2.3.1",
9472
9998
  "ucs2": {
9473
9999
  "decode": ucs2decode,
@@ -9478,107 +10004,122 @@ var import_punycode = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((e
9478
10004
  "toASCII": toASCII,
9479
10005
  "toUnicode": toUnicode
9480
10006
  };
9481
- })))(), 1);
10007
+ module.exports = punycode;
10008
+ }));
10009
+
9482
10010
  //#endregion
9483
- //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/index.mjs
9484
- const config = {
9485
- default: {
9486
- options: {
9487
- html: false,
9488
- xhtmlOut: false,
9489
- breaks: false,
9490
- langPrefix: "language-",
9491
- linkify: false,
9492
- typographer: false,
9493
- quotes: "“”‘’",
9494
- highlight: null,
9495
- maxNesting: 100
9496
- },
9497
- components: {
9498
- core: {},
9499
- block: {},
9500
- inline: {}
9501
- }
10011
+ //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/default.mjs
10012
+ var import_punycode = /* @__PURE__ */ __toESM(require_punycode(), 1);
10013
+ var default_default = {
10014
+ options: {
10015
+ html: false,
10016
+ xhtmlOut: false,
10017
+ breaks: false,
10018
+ langPrefix: "language-",
10019
+ linkify: false,
10020
+ typographer: false,
10021
+ quotes: "“”‘’",
10022
+ highlight: null,
10023
+ maxNesting: 100
9502
10024
  },
9503
- zero: {
9504
- options: {
9505
- html: false,
9506
- xhtmlOut: false,
9507
- breaks: false,
9508
- langPrefix: "language-",
9509
- linkify: false,
9510
- typographer: false,
9511
- quotes: "“”‘’",
9512
- highlight: null,
9513
- maxNesting: 20
9514
- },
9515
- components: {
9516
- core: { rules: [
9517
- "normalize",
9518
- "block",
9519
- "inline",
9520
- "text_join"
9521
- ] },
9522
- block: { rules: ["paragraph"] },
9523
- inline: {
9524
- rules: ["text"],
9525
- rules2: ["balance_pairs", "fragments_join"]
9526
- }
10025
+ components: {
10026
+ core: {},
10027
+ block: {},
10028
+ inline: {}
10029
+ }
10030
+ };
10031
+
10032
+ //#endregion
10033
+ //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/zero.mjs
10034
+ var zero_default = {
10035
+ options: {
10036
+ html: false,
10037
+ xhtmlOut: false,
10038
+ breaks: false,
10039
+ langPrefix: "language-",
10040
+ linkify: false,
10041
+ typographer: false,
10042
+ quotes: "“”‘’",
10043
+ highlight: null,
10044
+ maxNesting: 20
10045
+ },
10046
+ components: {
10047
+ core: { rules: [
10048
+ "normalize",
10049
+ "block",
10050
+ "inline",
10051
+ "text_join"
10052
+ ] },
10053
+ block: { rules: ["paragraph"] },
10054
+ inline: {
10055
+ rules: ["text"],
10056
+ rules2: ["balance_pairs", "fragments_join"]
9527
10057
  }
10058
+ }
10059
+ };
10060
+
10061
+ //#endregion
10062
+ //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/commonmark.mjs
10063
+ var commonmark_default = {
10064
+ options: {
10065
+ html: true,
10066
+ xhtmlOut: true,
10067
+ breaks: false,
10068
+ langPrefix: "language-",
10069
+ linkify: false,
10070
+ typographer: false,
10071
+ quotes: "“”‘’",
10072
+ highlight: null,
10073
+ maxNesting: 20
9528
10074
  },
9529
- commonmark: {
9530
- options: {
9531
- html: true,
9532
- xhtmlOut: true,
9533
- breaks: false,
9534
- langPrefix: "language-",
9535
- linkify: false,
9536
- typographer: false,
9537
- quotes: "“”‘’",
9538
- highlight: null,
9539
- maxNesting: 20
9540
- },
9541
- components: {
9542
- core: { rules: [
9543
- "normalize",
9544
- "block",
9545
- "inline",
9546
- "text_join"
9547
- ] },
9548
- block: { rules: [
9549
- "blockquote",
9550
- "code",
9551
- "fence",
9552
- "heading",
9553
- "hr",
9554
- "html_block",
9555
- "lheading",
9556
- "list",
9557
- "reference",
9558
- "paragraph"
9559
- ] },
9560
- inline: {
9561
- rules: [
9562
- "autolink",
9563
- "backticks",
9564
- "emphasis",
9565
- "entity",
9566
- "escape",
9567
- "html_inline",
9568
- "image",
9569
- "link",
9570
- "newline",
9571
- "text"
9572
- ],
9573
- rules2: [
9574
- "balance_pairs",
9575
- "emphasis",
9576
- "fragments_join"
9577
- ]
9578
- }
10075
+ components: {
10076
+ core: { rules: [
10077
+ "normalize",
10078
+ "block",
10079
+ "inline",
10080
+ "text_join"
10081
+ ] },
10082
+ block: { rules: [
10083
+ "blockquote",
10084
+ "code",
10085
+ "fence",
10086
+ "heading",
10087
+ "hr",
10088
+ "html_block",
10089
+ "lheading",
10090
+ "list",
10091
+ "reference",
10092
+ "paragraph"
10093
+ ] },
10094
+ inline: {
10095
+ rules: [
10096
+ "autolink",
10097
+ "backticks",
10098
+ "emphasis",
10099
+ "entity",
10100
+ "escape",
10101
+ "html_inline",
10102
+ "image",
10103
+ "link",
10104
+ "newline",
10105
+ "text"
10106
+ ],
10107
+ rules2: [
10108
+ "balance_pairs",
10109
+ "emphasis",
10110
+ "fragments_join"
10111
+ ]
9579
10112
  }
9580
10113
  }
9581
10114
  };
10115
+
10116
+ //#endregion
10117
+ //#region node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/index.mjs
10118
+ const config = {
10119
+ default: default_default,
10120
+ zero: zero_default,
10121
+ commonmark: commonmark_default
10122
+ };
9582
10123
  const BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;
9583
10124
  const GOOD_DATA_RE = /^data:image\/(gif|png|jpeg|webp);/;
9584
10125
  function validateLink(url) {
@@ -10039,6 +10580,7 @@ MarkdownIt.prototype.renderInline = function(src, env) {
10039
10580
  env = env || {};
10040
10581
  return this.renderer.render(this.parseInline(src, env), this.options, env);
10041
10582
  };
10583
+
10042
10584
  //#endregion
10043
10585
  //#region src/import-preprocess.ts
10044
10586
  /**
@@ -10473,6 +11015,7 @@ function prepareImport(workspaceDir, extraPaths, sessionsDir) {
10473
11015
  totalSegments: allSegments.length
10474
11016
  };
10475
11017
  }
11018
+
10476
11019
  //#endregion
10477
11020
  //#region src/migration-service.ts
10478
11021
  /**
@@ -10503,7 +11046,8 @@ function calculateImportStrength(segmentDate) {
10503
11046
  const ageMs = Date.now() - new Date(segmentDate).getTime();
10504
11047
  if (ageMs <= 0) return 1;
10505
11048
  const ageDays = ageMs / (1440 * 60 * 1e3);
10506
- 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);
10507
11051
  }
10508
11052
  /**
10509
11053
  * Run the memory-core migration. Idempotent — checks db state before proceeding.
@@ -10853,6 +11397,7 @@ Here is the current content of ${fileName}:
10853
11397
 
10854
11398
  ${content}`;
10855
11399
  }
11400
+
10856
11401
  //#endregion
10857
11402
  //#region src/turn-memory-ledger.ts
10858
11403
  /**
@@ -10913,6 +11458,7 @@ var TurnMemoryLedger = class {
10913
11458
  this.version = 0;
10914
11459
  }
10915
11460
  };
11461
+
10916
11462
  //#endregion
10917
11463
  //#region src/index.ts
10918
11464
  /**
@@ -10926,25 +11472,82 @@ var TurnMemoryLedger = class {
10926
11472
  * - Internal tick-based time perception
10927
11473
  */
10928
11474
  const AUTH_PROFILE_FILENAME = "auth-profiles.json";
11475
+ const profileCache = /* @__PURE__ */ new Map();
10929
11476
  /**
10930
11477
  * Read API keys from auth-profiles.json.
10931
- * Tries agentDir first, then stateDir/agents/main/agent/ as fallback
10932
- * (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.
10933
11486
  */
10934
11487
  function readAuthProfiles(stateDir, agentDir, logger) {
10935
- 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));
10936
- 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 {
10937
11516
  const raw = readFileSync(filePath, "utf-8");
10938
11517
  const data = JSON.parse(raw);
10939
- if (!data || typeof data !== "object" || typeof data.profiles !== "object") {
11518
+ if (!data || typeof data !== "object" || Array.isArray(data) || !data.profiles || typeof data.profiles !== "object" || Array.isArray(data.profiles)) {
10940
11519
  logger?.warn(`Invalid auth profile format: ${filePath}`);
10941
- 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
+ };
10942
11536
  }
10943
- return data.profiles;
11537
+ profileCache.set(filePath, {
11538
+ kind: "hit",
11539
+ mtimeMs,
11540
+ profiles: cleaned
11541
+ });
11542
+ return cleaned;
10944
11543
  } catch (err) {
10945
- 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;
10946
11550
  }
10947
- return null;
10948
11551
  }
10949
11552
  /**
10950
11553
  * Resolve LLM caller config from auth profiles.
@@ -11001,79 +11604,79 @@ function resolveMemoryDir(config, workspaceDir, pathResolver) {
11001
11604
  if (isAbsolute(dbPath)) return dbPath;
11002
11605
  return join(workspaceDir, dbPath);
11003
11606
  }
11004
- const EMBEDDING_REQUIRED_HINT = "Embedding provider required but not available.\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.";
11005
- /**
11006
- * Try to create an embedding provider directly via SDK factory functions.
11007
- * Used when the memory-core plugin is disabled and the global registry is empty.
11008
- * Factory returns { provider, client } — we extract the provider.
11009
- */
11010
- async function tryDirectProviderFactory(providerId, openclawConfig, agentDir, model) {
11011
- const factory = {
11012
- openai: createOpenAiEmbeddingProvider,
11013
- gemini: createGeminiEmbeddingProvider
11014
- }[providerId];
11015
- if (!factory) return null;
11016
- const result = await factory({
11017
- config: openclawConfig,
11018
- agentDir,
11019
- model: model ?? ""
11020
- });
11021
- const provider = result?.provider ?? result;
11022
- return provider?.embedQuery ? provider : null;
11023
- }
11607
+ const EMBEDDING_REQUIRED_HINT = "Embedding provider required but not available.\nConfigure an API key in auth-profiles.json under an openai:default or google:default profile.\nIf memory-core embedding adapters are installed, their providers are also tried.\nTo run without embeddings (BM25-only), set \"requireEmbedding\": false in plugin config.";
11024
11608
  /**
11025
- * Resolve an embedding provider from the OpenClaw provider registry.
11609
+ * Resolve an embedding provider.
11026
11610
  *
11027
- * For "auto": tries each registered adapter in priority order.
11028
- * 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).
11029
11619
  *
11030
11620
  * Throws on failure — the plugin requires a working embedding provider.
11031
11621
  */
11032
- async function resolveEmbeddingProvider(providerId, openclawConfig, agentDir, model) {
11622
+ async function resolveEmbeddingProvider(providerId, openclawConfig, agentDir, model, stateDir, logger) {
11033
11623
  const errors = [];
11624
+ const profiles = readAuthProfiles(stateDir, agentDir, logger);
11034
11625
  if (providerId === "auto") {
11035
11626
  const adapters = listMemoryEmbeddingProviders().filter((a) => typeof a.autoSelectPriority === "number").toSorted((a, b) => (a.autoSelectPriority ?? Infinity) - (b.autoSelectPriority ?? Infinity));
11036
11627
  for (const adapter of adapters) try {
11037
11628
  const result = await adapter.create({
11038
11629
  config: openclawConfig,
11039
11630
  agentDir,
11040
- model: model ?? adapter.defaultModel ?? ""
11631
+ model: adapter.defaultModel ?? ""
11041
11632
  });
11042
11633
  if (result.provider) return result.provider;
11043
11634
  } catch (err) {
11044
11635
  errors.push(`${adapter.id}: ${err instanceof Error ? err.message : String(err)}`);
11045
11636
  }
11046
- if (adapters.length === 0) for (const id of ["gemini", "openai"]) try {
11047
- const provider = await tryDirectProviderFactory(id, openclawConfig, agentDir, model);
11048
- if (provider) return provider;
11049
- } catch (err) {
11050
- errors.push(`${id} (direct): ${err instanceof Error ? err.message : String(err)}`);
11051
- }
11637
+ const provider = autoSelectStandaloneProvider(profiles, logger);
11638
+ if (provider) return provider;
11639
+ errors.push("standalone: no API key found for openai or gemini");
11052
11640
  throw new Error(`No embedding provider available (tried auto-selection).\n${errors.join("\n") || "No adapters registered."}`);
11053
11641
  }
11054
11642
  const adapter = getMemoryEmbeddingProvider(providerId);
11055
- if (adapter) {
11643
+ if (adapter) try {
11056
11644
  const result = await adapter.create({
11057
11645
  config: openclawConfig,
11058
11646
  agentDir,
11059
11647
  model: model ?? adapter.defaultModel ?? ""
11060
11648
  });
11061
11649
  if (result.provider) return result.provider;
11062
- 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)}`);
11063
11653
  }
11064
- const directProvider = await tryDirectProviderFactory(providerId, openclawConfig, agentDir, model);
11065
- if (directProvider) return directProvider;
11066
- throw new Error(`Unknown embedding provider: "${providerId}"`);
11654
+ const standaloneProvider = tryCreateStandaloneProvider(providerId, profiles, model, logger);
11655
+ if (standaloneProvider) return standaloneProvider;
11656
+ throw new Error(errors.length > 0 ? `Embedding provider "${providerId}" unavailable.\n${errors.join("\n")}` : `Unknown embedding provider: "${providerId}"`);
11067
11657
  }
11068
11658
  /**
11069
- * Create the single workspace instance for this plugin registration.
11070
- * 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.
11071
11675
  *
11072
- * When `initDeps` is provided, one-time startup tasks (migration, workspace
11073
- * cleanup) are run asynchronously after workspace creation. This happens on
11074
- * the first tool call which provides the real workspace context.
11676
+ * This will be removed when OpenClaw passes context to ContextEngineFactory.
11677
+ * See: issues/open/08-upstream-prs/proposal-factory-context.md
11075
11678
  */
11076
- function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger, pathResolver, initDeps) {
11679
+ function createWorkspace(config, workspaceDir, openclawConfig, getAgentDir, logger, pathResolver, getStateDir) {
11077
11680
  const memoryDir = resolveMemoryDir(config, workspaceDir, pathResolver);
11078
11681
  const circuitBreaker = new EmbeddingCircuitBreaker({
11079
11682
  onStateChange: (from, to) => {
@@ -11086,24 +11689,60 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
11086
11689
  }
11087
11690
  });
11088
11691
  let providerPromise = null;
11692
+ let dbRef = null;
11089
11693
  const getProvider = () => {
11090
- if (!providerPromise) providerPromise = resolveEmbeddingProvider(config.embedding.provider, openclawConfig, agentDir, config.embedding.model).catch((err) => {
11091
- if (config.requireEmbedding) throw new Error(`${EMBEDDING_REQUIRED_HINT}\nDetails: ${err instanceof Error ? err.message : String(err)}`);
11092
- providerPromise = null;
11093
- throw err;
11094
- });
11694
+ if (!providerPromise) {
11695
+ const currentAgentDir = getAgentDir();
11696
+ if (config.requireEmbedding && !currentAgentDir) return Promise.reject(/* @__PURE__ */ new Error("Embedding provider auth requires agentDir which is not yet available. Will retry when a tool call provides runtime context."));
11697
+ providerPromise = (async () => {
11698
+ const db = dbRef;
11699
+ const persistedId = db?.getState("embedding_provider_id") ?? null;
11700
+ const persistedModel = db?.getState("embedding_model") ?? null;
11701
+ let effectiveProvider = config.embedding.provider;
11702
+ let effectiveModel = config.embedding.model;
11703
+ if (persistedId) if (config.embedding.provider === "auto") {
11704
+ effectiveProvider = persistedId;
11705
+ effectiveModel = persistedModel ?? void 0;
11706
+ } else if (config.embedding.provider !== persistedId) throw new Error(`Embedding provider mismatch: DB was indexed with "${persistedId}" but config requests "${config.embedding.provider}". Vector dimensions differ between providers. Either set embedding.provider back to "${persistedId}", or re-embed the DB via migration.`);
11707
+ else if (config.embedding.model && persistedModel && config.embedding.model !== persistedModel) throw new Error(`Embedding model mismatch: DB was indexed with "${persistedId}/${persistedModel}" but config requests "${config.embedding.provider}/${config.embedding.model}". Different models produce different vector dimensions. Either set embedding.model back to "${persistedModel}", or re-embed the DB via migration.`);
11708
+ else effectiveModel = effectiveModel ?? persistedModel ?? void 0;
11709
+ const provider = await resolveEmbeddingProvider(effectiveProvider, openclawConfig, currentAgentDir, effectiveModel, getStateDir?.(), logger);
11710
+ if (db && !persistedId) {
11711
+ db.setState("embedding_provider_id", provider.id);
11712
+ db.setState("embedding_model", provider.model);
11713
+ logger?.info(`Persisted embedding identity to DB: ${provider.id}/${provider.model}`);
11714
+ }
11715
+ return provider;
11716
+ })().catch((err) => {
11717
+ providerPromise = null;
11718
+ if (config.requireEmbedding) throw new Error(`${EMBEDDING_REQUIRED_HINT}\nDetails: ${err instanceof Error ? err.message : String(err)}`);
11719
+ throw err;
11720
+ });
11721
+ }
11095
11722
  return providerPromise;
11096
11723
  };
11097
- if (config.requireEmbedding) getProvider().catch(() => {});
11098
11724
  const ws = {
11099
11725
  manager: new MemoryManager(memoryDir, { async embed(text) {
11100
11726
  const provider = await getProvider();
11101
11727
  return circuitBreaker.call(() => provider.embedQuery(text));
11102
11728
  } }, logger, config.logQueries),
11103
11729
  circuitBreaker,
11104
- memoryDir
11730
+ memoryDir,
11731
+ initProvider: async () => {
11732
+ await getProvider();
11733
+ }
11105
11734
  };
11106
- 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 () => {
11107
11746
  const db = ws.manager.getDatabase();
11108
11747
  const dbState = {
11109
11748
  get: (key) => db.getState(key),
@@ -11124,7 +11763,7 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
11124
11763
  logger?.warn(`Workspace cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
11125
11764
  }
11126
11765
  if (config.requireEmbedding) try {
11127
- await getProvider();
11766
+ await ws.initProvider();
11128
11767
  } catch (err) {
11129
11768
  logger?.error(`Migration aborted: embedding required but unavailable. ${err instanceof Error ? err.message : String(err)}`);
11130
11769
  return;
@@ -11137,6 +11776,7 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
11137
11776
  temporal_state: seg.date ? "past" : "none",
11138
11777
  temporal_anchor: seg.date
11139
11778
  }));
11779
+ const agentDir = getAgentDir();
11140
11780
  const sessionsDir = agentDir ? join(agentDir, "sessions") : void 0;
11141
11781
  const migrationResult = await runMigration({
11142
11782
  workspaceDir,
@@ -11158,7 +11798,6 @@ function createWorkspace(config, workspaceDir, openclawConfig, agentDir, logger,
11158
11798
  logger?.warn(`Migration failed: ${err instanceof Error ? err.message : String(err)}`);
11159
11799
  }
11160
11800
  })();
11161
- return ws;
11162
11801
  }
11163
11802
  function createMemoryTools(getManager, getLogPath, ledger) {
11164
11803
  return [
@@ -11310,20 +11949,28 @@ const associativeMemoryPlugin = {
11310
11949
  const ledger = new TurnMemoryLedger();
11311
11950
  const runtimePaths = {};
11312
11951
  let workspace = null;
11313
- const getWorkspace = (workspaceDir, agentDir, triggerInit = false) => {
11314
- if (!workspace) {
11315
- const llmConfig = resolveLlmConfig(runtimePaths.stateDir, agentDir, log);
11316
- workspace = createWorkspace(config, workspaceDir, openclawConfig, agentDir, log, api.resolvePath, triggerInit ? {
11317
- stateDir: runtimePaths.stateDir,
11318
- llmConfig
11319
- } : void 0);
11320
- }
11952
+ let startupTasksTriggered = false;
11953
+ const getAgentDir = () => runtimePaths.agentDir;
11954
+ const getStateDir = () => runtimePaths.stateDir;
11955
+ const getWorkspace = (workspaceDir) => {
11956
+ if (!workspace) workspace = createWorkspace(config, workspaceDir, openclawConfig, getAgentDir, log, api.resolvePath, getStateDir);
11321
11957
  return workspace;
11322
11958
  };
11959
+ const triggerStartupTasks = (workspaceDir) => {
11960
+ if (startupTasksTriggered) return;
11961
+ const ws = getWorkspace(workspaceDir);
11962
+ const llmConfig = resolveLlmConfig(runtimePaths.stateDir, getAgentDir(), log);
11963
+ runStartupTasks(ws, config, workspaceDir, getAgentDir, log, {
11964
+ stateDir: runtimePaths.stateDir,
11965
+ llmConfig
11966
+ });
11967
+ startupTasksTriggered = true;
11968
+ };
11323
11969
  api.registerTool((ctx) => {
11324
11970
  const workspaceDir = ctx.workspaceDir ?? ctx.agentDir ?? ".";
11325
11971
  runtimePaths.agentDir ??= ctx.agentDir;
11326
- const ws = getWorkspace(workspaceDir, ctx.agentDir, true);
11972
+ const ws = getWorkspace(workspaceDir);
11973
+ triggerStartupTasks(workspaceDir);
11327
11974
  return createMemoryTools(() => ws.manager, () => join(ws.memoryDir, "retrieval.log"), ledger);
11328
11975
  }, { names: [
11329
11976
  "memory_store",
@@ -11474,17 +12121,22 @@ const associativeMemoryPlugin = {
11474
12121
  /** Cron expression: daily at 15:00 (03:00 is covered by full consolidation). */
11475
12122
  const DEFAULT_TEMPORAL_CRON = "0 15 * * *";
11476
12123
  api.registerHook("gateway:startup", async (event) => {
12124
+ const context = event?.context;
12125
+ const cron = context?.cron ?? context?.deps?.cron;
12126
+ if (!cron || typeof cron.list !== "function" || typeof cron.add !== "function") {
12127
+ log.warn("Cron service not available — scheduled consolidation disabled");
12128
+ return;
12129
+ }
12130
+ if (context?.stateDir) runtimePaths.stateDir = context.stateDir;
12131
+ let allJobs;
11477
12132
  try {
11478
- const context = event?.context;
11479
- const cron = context?.cron ?? context?.deps?.cron;
11480
- if (!cron || typeof cron.list !== "function" || typeof cron.add !== "function") {
11481
- log.warn("Cron service not available — scheduled consolidation disabled");
11482
- return;
11483
- }
11484
- if (context?.stateDir) runtimePaths.stateDir = context.stateDir;
11485
- const allJobs = await cron.list({ includeDisabled: true });
11486
- const managed = allJobs.filter((j) => j.description?.includes(CONSOLIDATION_CRON_TAG));
11487
- const desired = {
12133
+ allJobs = await cron.list({ includeDisabled: true });
12134
+ } catch (err) {
12135
+ log.warn(`Failed to list cron jobs scheduled consolidation disabled: ${err instanceof Error ? err.message : String(err)}`);
12136
+ return;
12137
+ }
12138
+ try {
12139
+ await reconcileCronJob(cron, allJobs, {
11488
12140
  name: CONSOLIDATION_CRON_NAME,
11489
12141
  description: `${CONSOLIDATION_CRON_TAG} Full consolidation: decay, reinforce, merge, prune, promote.`,
11490
12142
  enabled: true,
@@ -11493,25 +12145,17 @@ const associativeMemoryPlugin = {
11493
12145
  expr: DEFAULT_CONSOLIDATION_CRON
11494
12146
  },
11495
12147
  sessionTarget: "main",
11496
- wakeMode: "next-heartbeat",
12148
+ wakeMode: "now",
11497
12149
  payload: {
11498
12150
  kind: "systemEvent",
11499
12151
  text: CONSOLIDATION_CRON_TRIGGER
11500
12152
  }
11501
- };
11502
- if (managed.length === 0) {
11503
- await cron.add(desired);
11504
- log.info("Registered consolidation cron job");
11505
- } else {
11506
- const existing = managed[0];
11507
- if (existing.schedule?.expr !== desired.schedule.expr) {
11508
- await cron.update(existing.id, { schedule: desired.schedule });
11509
- log.info("Updated consolidation cron schedule");
11510
- }
11511
- for (let i = 1; i < managed.length; i++) await cron.remove(managed[i].id);
11512
- }
11513
- const temporalManaged = allJobs.filter((j) => j.description?.includes(TEMPORAL_CRON_TAG));
11514
- const desiredTemporal = {
12153
+ }, CONSOLIDATION_CRON_TAG, log);
12154
+ } catch (err) {
12155
+ log.warn(`Failed to reconcile consolidation cron: ${err instanceof Error ? err.message : String(err)}`);
12156
+ }
12157
+ try {
12158
+ await reconcileCronJob(cron, allJobs, {
11515
12159
  name: TEMPORAL_CRON_NAME,
11516
12160
  description: `${TEMPORAL_CRON_TAG} Transition temporal states: future→present→past.`,
11517
12161
  enabled: true,
@@ -11520,32 +12164,30 @@ const associativeMemoryPlugin = {
11520
12164
  expr: DEFAULT_TEMPORAL_CRON
11521
12165
  },
11522
12166
  sessionTarget: "main",
11523
- wakeMode: "next-heartbeat",
12167
+ wakeMode: "now",
11524
12168
  payload: {
11525
12169
  kind: "systemEvent",
11526
12170
  text: TEMPORAL_CRON_TRIGGER
11527
12171
  }
11528
- };
11529
- if (temporalManaged.length === 0) {
11530
- await cron.add(desiredTemporal);
11531
- log.info("Registered temporal transitions cron job");
11532
- } else {
11533
- const existing = temporalManaged[0];
11534
- if (existing.schedule?.expr !== desiredTemporal.schedule.expr) {
11535
- await cron.update(existing.id, { schedule: desiredTemporal.schedule });
11536
- log.info("Updated temporal transitions cron schedule");
11537
- }
11538
- for (let i = 1; i < temporalManaged.length; i++) await cron.remove(temporalManaged[i].id);
11539
- }
12172
+ }, TEMPORAL_CRON_TAG, log);
11540
12173
  } catch (err) {
11541
- log.warn(`Failed to 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)}`);
11542
12175
  }
11543
12176
  }, { name: "formative-memory-consolidation-cron" });
11544
12177
  api.on("before_agent_reply", async (event, ctx) => {
11545
12178
  const body = event?.cleanedBody;
11546
12179
  if (!body) return;
11547
- if (body.includes(TEMPORAL_CRON_TRIGGER) && !body.includes(CONSOLIDATION_CRON_TRIGGER)) try {
11548
- 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 {
11549
12191
  const count = db.transaction(() => applyTemporalTransitions(db, log));
11550
12192
  if (count > 0) log.info(`Scheduled temporal transitions: ${count} transitioned`);
11551
12193
  return {
@@ -11561,9 +12203,7 @@ const associativeMemoryPlugin = {
11561
12203
  reason: "associative-memory-temporal-error"
11562
12204
  };
11563
12205
  }
11564
- if (!body.includes(CONSOLIDATION_CRON_TRIGGER)) return;
11565
12206
  try {
11566
- const ws = getWorkspace(ctx?.workspaceDir ?? ".");
11567
12207
  const llmConfig = resolveLlmConfig(runtimePaths.stateDir, runtimePaths.agentDir, log);
11568
12208
  const mergeContentProducer = llmConfig ? async (a, b) => {
11569
12209
  return {
@@ -11571,7 +12211,6 @@ const associativeMemoryPlugin = {
11571
12211
  type: a.type
11572
12212
  };
11573
12213
  } : void 0;
11574
- const db = ws.manager.getDatabase();
11575
12214
  log.debug("consolidation: starting trigger=cron");
11576
12215
  return {
11577
12216
  handled: true,
@@ -11595,9 +12234,12 @@ const associativeMemoryPlugin = {
11595
12234
  id: "formative-memory-startup",
11596
12235
  async start(ctx) {
11597
12236
  runtimePaths.stateDir = ctx.stateDir;
12237
+ const maybeAgentDir = ctx.agentDir;
12238
+ if (!runtimePaths.agentDir && typeof maybeAgentDir === "string") runtimePaths.agentDir = maybeAgentDir;
11598
12239
  }
11599
12240
  });
11600
12241
  }
11601
12242
  };
12243
+
11602
12244
  //#endregion
11603
- export { associativeMemoryPlugin as default };
12245
+ export { associativeMemoryPlugin as default };