@happyvertical/smrt-core 0.41.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/AGENTS.md +1 -1
  2. package/agents/schema-paths.md +79 -8
  3. package/dist/change-feed.d.ts.map +1 -1
  4. package/dist/change-feed.js +2 -2
  5. package/dist/change-feed.js.map +1 -1
  6. package/dist/change-signals.d.ts.map +1 -1
  7. package/dist/change-signals.js +8 -1
  8. package/dist/change-signals.js.map +1 -1
  9. package/dist/class.d.ts.map +1 -1
  10. package/dist/class.js +10 -9
  11. package/dist/class.js.map +1 -1
  12. package/dist/collection.d.ts.map +1 -1
  13. package/dist/collection.js +2 -2
  14. package/dist/collection.js.map +1 -1
  15. package/dist/dispatch/collections/Dispatches.d.ts.map +1 -1
  16. package/dist/dispatch/collections/Dispatches.js +5 -5
  17. package/dist/dispatch/collections/Dispatches.js.map +1 -1
  18. package/dist/dispatch/models/Dispatch.d.ts +1 -1
  19. package/dist/dispatch/models/Dispatch.d.ts.map +1 -1
  20. package/dist/dispatch/models/Dispatch.js +3 -2
  21. package/dist/dispatch/models/Dispatch.js.map +1 -1
  22. package/dist/dispatch/models/DispatchSubscription.d.ts +1 -1
  23. package/dist/dispatch/models/DispatchSubscription.d.ts.map +1 -1
  24. package/dist/dispatch/models/DispatchSubscription.js +2 -1
  25. package/dist/dispatch/models/DispatchSubscription.js.map +1 -1
  26. package/dist/embeddings/storage.d.ts.map +1 -1
  27. package/dist/embeddings/storage.js +2 -1
  28. package/dist/embeddings/storage.js.map +1 -1
  29. package/dist/learning/memory.d.ts.map +1 -1
  30. package/dist/learning/memory.js +5 -4
  31. package/dist/learning/memory.js.map +1 -1
  32. package/dist/manifest/static-manifest.js +1 -1
  33. package/dist/manifest/static-manifest.js.map +1 -1
  34. package/dist/manifest/store.js +1 -1
  35. package/dist/manifest.json +1 -1
  36. package/dist/migrations/differ.js +2 -2
  37. package/dist/migrations/differ.js.map +1 -1
  38. package/dist/migrations/index.d.ts +1 -0
  39. package/dist/migrations/index.d.ts.map +1 -1
  40. package/dist/migrations/index.js +2 -1
  41. package/dist/migrations/integer-width.d.ts +99 -0
  42. package/dist/migrations/integer-width.d.ts.map +1 -0
  43. package/dist/migrations/integer-width.js +237 -0
  44. package/dist/migrations/integer-width.js.map +1 -0
  45. package/dist/migrations/minor-units.d.ts +2 -2
  46. package/dist/migrations/minor-units.d.ts.map +1 -1
  47. package/dist/migrations/minor-units.js +16 -14
  48. package/dist/migrations/minor-units.js.map +1 -1
  49. package/dist/migrations/tracker.d.ts.map +1 -1
  50. package/dist/migrations/tracker.js +28 -20
  51. package/dist/migrations/tracker.js.map +1 -1
  52. package/dist/migrations.js +2 -1
  53. package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -1
  54. package/dist/schema/ddl/duckdb-strategy.js +1 -0
  55. package/dist/schema/ddl/duckdb-strategy.js.map +1 -1
  56. package/dist/schema/ddl/postgres-strategy.d.ts.map +1 -1
  57. package/dist/schema/ddl/postgres-strategy.js +2 -0
  58. package/dist/schema/ddl/postgres-strategy.js.map +1 -1
  59. package/dist/schema/generator.d.ts +1 -33
  60. package/dist/schema/generator.d.ts.map +1 -1
  61. package/dist/schema/generator.js +1 -150
  62. package/dist/schema/generator.js.map +1 -1
  63. package/dist/schema/index.d.ts +1 -2
  64. package/dist/schema/index.d.ts.map +1 -1
  65. package/dist/schema/index.js +1 -2
  66. package/dist/schema/live-parity.d.ts +3 -1
  67. package/dist/schema/live-parity.d.ts.map +1 -1
  68. package/dist/schema/live-parity.js +19 -0
  69. package/dist/schema/live-parity.js.map +1 -1
  70. package/dist/schema/types.d.ts +17 -10
  71. package/dist/schema/types.d.ts.map +1 -1
  72. package/dist/schema.js +1 -2
  73. package/dist/smrt-knowledge.json +7 -7
  74. package/dist/system/retention.d.ts.map +1 -1
  75. package/dist/system/retention.js +3 -3
  76. package/dist/system/retention.js.map +1 -1
  77. package/dist/system/schema.d.ts +2 -1
  78. package/dist/system/schema.d.ts.map +1 -1
  79. package/dist/system/schema.js +4 -2
  80. package/dist/system/schema.js.map +1 -1
  81. package/dist/utils/safe-integer.d.ts +19 -0
  82. package/dist/utils/safe-integer.d.ts.map +1 -0
  83. package/dist/utils/safe-integer.js +31 -0
  84. package/dist/utils/safe-integer.js.map +1 -0
  85. package/dist/utils.d.ts +2 -1
  86. package/dist/utils.d.ts.map +1 -1
  87. package/dist/utils.js +6 -3
  88. package/dist/utils.js.map +1 -1
  89. package/dist/vite-plugin/index.d.ts.map +1 -1
  90. package/dist/vite-plugin/index.js +0 -53
  91. package/dist/vite-plugin/index.js.map +1 -1
  92. package/package.json +4 -4
  93. package/dist/schema/override-system.d.ts +0 -43
  94. package/dist/schema/override-system.d.ts.map +0 -1
  95. package/dist/schema/override-system.js +0 -205
  96. package/dist/schema/override-system.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","names":[],"sources":["../../src/learning/memory.ts"],"sourcesContent":["/**\n * LearningMemory — confidence-scored, self-correcting memory over the existing\n * `_smrt_contexts` (keyed recall) and `_smrt_embeddings` (semantic recall)\n * substrate.\n *\n * This is the L1 deep module of the tenant-learning-agents epic (#1885 / #1886).\n * It wires the reinforcement columns that ship on `_smrt_contexts` but were\n * never written — `success_count`, `failure_count`, and a `last_used_at` that\n * is refreshed on recall — and layers a confidence floor + decay on top of the\n * primitive `remember()` / `recall()` methods so a strategy that stops working\n * stops being reused.\n *\n * It generalises the confidence-scored parser cache anytown's `praeco` agent\n * hand-rolls: recall only reuses a memory at `confidence >= minConfidence`\n * (default 0.7); a validated success strengthens confidence toward 1.0; an\n * observed failure decays it toward `failureConfidence` (default 0.3) so a\n * single failure drops it below the reuse floor.\n *\n * @module\n */\n\nimport type { DatabaseInterface } from '@happyvertical/sql';\n\n/**\n * A relevance-scored memory returned by {@link LearningMemory.recall}.\n *\n * Records sourced from keyed `_smrt_contexts` lookups carry reinforcement\n * counters; records sourced from semantic embedding search carry a\n * `similarity` score (mirrored into `confidence` for uniform ranking).\n */\nexport interface LearningMemoryRecord {\n /** Row id in `_smrt_contexts`, or the matched object id for semantic hits. */\n id: string;\n /** Hierarchical scope the memory is filed under. */\n scope: string;\n /** Lookup key within the scope. */\n key: string;\n /** The stored value (JSON-parsed for context rows; the matched object for semantic hits). */\n value: unknown;\n /** Confidence in `[0, 1]`. For semantic hits this equals `similarity`. */\n confidence: number;\n /** Number of captured successes reinforcing this memory. */\n successCount: number;\n /** Number of captured failures decaying this memory. */\n failureCount: number;\n /** Last time this memory was recalled or reinforced. */\n lastUsedAt: Date | null;\n /** Where the record came from. */\n source: 'context' | 'semantic';\n /** Cosine similarity for semantic hits (absent for context rows). */\n similarity?: number;\n}\n\n/**\n * The outcome of acting on a recalled (or freshly generated) memory.\n *\n * A boolean `success` signal is the common case; a numeric `metric` delta is\n * supported as a convenience (positive → success, non-positive → failure).\n */\nexport type LearningOutcome =\n | { success: boolean; error?: string }\n | { metric: number; error?: string };\n\n/**\n * The episode being reinforced — the scope/key of the memory the agent acted\n * on, plus (for a first capture) the value to persist.\n */\nexport interface LearningEpisode {\n /** Scope the memory is filed under (e.g. `'sample/parse-invoice'`). */\n scope: string;\n /** Lookup key within the scope. */\n key: string;\n /**\n * The value (strategy) this outcome pertains to. Seeds a new memory when none\n * exists for `(scope, key)`, and refreshes the stored value when one does — so\n * a regenerated strategy supersedes a decayed one. Omit to reinforce an\n * existing memory's confidence without touching its stored value.\n */\n value?: unknown;\n /** Optional metadata to persist on a first capture. */\n metadata?: Record<string, unknown>;\n /** Optional expiry after which recall ignores the memory. */\n expiresAt?: Date;\n}\n\n/**\n * Tunable thresholds for the reinforcement loop. Defaults mirror the proven\n * `praeco` behaviour.\n */\nexport interface LearningMemoryConfig {\n /** Reuse floor — recall omits memories below this confidence. Default 0.7. */\n minConfidence: number;\n /** Confidence a brand-new memory is seeded at on a first success. Default 0.9. */\n successConfidence: number;\n /** Target a memory decays toward on failure. Default 0.3. */\n failureConfidence: number;\n /**\n * Blend weight in `[0, 1]` for each reinforcement step. At 0.5 a single\n * failure from any confident value (>= 0.7) always lands below the 0.7 floor\n * (`0.5·c + 0.15 <= 0.65`). Default 0.5.\n */\n reinforcement: number;\n /**\n * Optional half-life (ms) for time-based confidence decay. When set, recall\n * discounts a memory's stored confidence by `0.5 ^ (age / halfLife)` based on\n * `last_used_at`, so stale memory falls below the floor over time even\n * without an explicit failure. Off (no time decay) when undefined.\n */\n decayHalfLifeMs?: number;\n}\n\n/** Default reinforcement thresholds. */\nexport const DEFAULT_LEARNING_CONFIG: LearningMemoryConfig = {\n minConfidence: 0.7,\n successConfidence: 0.9,\n failureConfidence: 0.3,\n reinforcement: 0.5,\n};\n\n/**\n * A semantic search over stored embeddings, injected so `LearningMemory` never\n * reaches into a collection's internals. Matches the shape of\n * `SmrtCollection.semanticSearch`.\n */\nexport type LearningSemanticSearch = (\n query: string,\n options: {\n limit?: number;\n minSimilarity?: number;\n where?: Record<string, unknown>;\n },\n) => Promise<\n Array<{ id?: string; _similarity: number } & Record<string, unknown>>\n>;\n\n/** Options for {@link LearningMemory.recall}. */\nexport interface LearningRecallOptions {\n /** Exact key to look up within the scope. Omit for a scope-wide recall. */\n key?: string;\n /** Free-text query for semantic recall (only used when a searcher is wired). */\n query?: string;\n /** Override the reuse floor for this call. */\n minConfidence?: number;\n /** Walk up the scope hierarchy when no match is found at `scope`. Default true. */\n includeAncestors?: boolean;\n /** Cap on returned records. */\n limit?: number;\n /** Cap on semantic hits requested from the searcher. Default 10. */\n semanticLimit?: number;\n /** Minimum cosine similarity for semantic hits. Default 0. */\n minSimilarity?: number;\n /** Reference time for decay/expiry evaluation (injectable for tests). */\n now?: Date;\n}\n\n/** Constructor options for {@link LearningMemory}. */\nexport interface LearningMemoryOptions {\n /** System database handle (an owning object's `systemDb`). */\n db: DatabaseInterface;\n /** `owner_class` the memories are filed under. */\n ownerClass: string;\n /** `owner_id` the memories are filed under (isolates memory per owner). */\n ownerId: string;\n /**\n * Optional tenant id. When set it is threaded into the semantic searcher's\n * `where` filter so embedding recall stays tenant-scoped. Keyed-context\n * recall is already isolated by `owner_id`.\n */\n tenantId?: string | null;\n /** Optional embedding search for the semantic recall arm. */\n semanticSearch?: LearningSemanticSearch;\n /** Threshold overrides; merged over {@link DEFAULT_LEARNING_CONFIG}. */\n config?: Partial<LearningMemoryConfig>;\n}\n\nconst CONTEXTS_TABLE = '_smrt_contexts';\nconst CONFLICT_COLUMNS = ['owner_class', 'owner_id', 'scope', 'key', 'version'];\n/**\n * The single `_smrt_contexts` version LearningMemory reads and writes. Kept\n * explicit so capture and recall agree on the row identity.\n */\nconst MEMORY_VERSION = 1;\n\nfunction clamp01(value: number): number {\n if (Number.isNaN(value)) return 0;\n if (value < 0) return 0;\n if (value > 1) return 1;\n return value;\n}\n\nfunction normalizeOutcome(outcome: LearningOutcome): {\n success: boolean;\n error?: string;\n} {\n if ('success' in outcome) {\n return { success: outcome.success, error: outcome.error };\n }\n return { success: outcome.metric > 0, error: outcome.error };\n}\n\nfunction toDate(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return value;\n const parsed = new Date(value as string);\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n}\n\nfunction parseValue(raw: unknown): unknown {\n if (typeof raw !== 'string') return raw ?? null;\n try {\n return JSON.parse(raw);\n } catch {\n // Tolerate legacy/non-JSON payloads rather than throwing mid-recall.\n return raw;\n }\n}\n\n/**\n * Confidence-scored, self-correcting memory over `_smrt_contexts` and\n * (optionally) semantic embedding search.\n *\n * @example\n * ```typescript\n * const memory = new LearningMemory({\n * db: agent.systemDb,\n * ownerClass: 'InvoiceAgent',\n * ownerId: agent.id,\n * tenantId: agent.tenantId,\n * });\n *\n * // Recall a confident strategy for this task.\n * const [hit] = await memory.recall('parser/acme', { key: docUrl });\n * const strategy = hit?.value ?? (await generateStrategy(docUrl));\n *\n * // ...act on `strategy`, then reinforce the outcome.\n * await memory.capture(\n * { scope: 'parser/acme', key: docUrl, value: strategy },\n * { success: extracted.length > 0 },\n * );\n * ```\n */\nexport class LearningMemory {\n private readonly db: DatabaseInterface;\n private readonly ownerClass: string;\n private readonly ownerId: string;\n private readonly tenantId: string | null;\n private readonly semanticSearch?: LearningSemanticSearch;\n private readonly config: LearningMemoryConfig;\n\n constructor(options: LearningMemoryOptions) {\n this.db = options.db;\n this.ownerClass = options.ownerClass;\n this.ownerId = options.ownerId;\n this.tenantId = options.tenantId ?? null;\n this.semanticSearch = options.semanticSearch;\n this.config = { ...DEFAULT_LEARNING_CONFIG, ...(options.config ?? {}) };\n }\n\n /** The resolved reinforcement thresholds (defaults merged with overrides). */\n get thresholds(): LearningMemoryConfig {\n return { ...this.config };\n }\n\n /**\n * Recall confidence-filtered, relevant memories for a scope.\n *\n * Unions two arms:\n * 1. **Keyed context recall** over `_smrt_contexts` — owner-scoped (and thus\n * tenant-isolated), filtered by the confidence floor, expiry, and optional\n * time-decay, with hierarchical scope fallback. Surviving rows have their\n * `last_used_at` refreshed.\n * 2. **Semantic recall** over stored embeddings (only when a searcher was\n * wired and a `query` is given) — tenant-scoped via the searcher's `where`.\n *\n * @returns Records sorted by confidence (then similarity) descending.\n */\n async recall(\n scope: string,\n options: LearningRecallOptions = {},\n ): Promise<LearningMemoryRecord[]> {\n const floor = options.minConfidence ?? this.config.minConfidence;\n const now = options.now ?? new Date();\n const includeAncestors = options.includeAncestors ?? true;\n\n const contextRecords = await this.recallContexts(scope, {\n key: options.key,\n floor,\n now,\n includeAncestors,\n });\n\n // Wire the previously-dead refresh: recall marks a memory as used.\n await this.touch(\n contextRecords.map((r) => r.id),\n now,\n );\n\n let semanticRecords: LearningMemoryRecord[] = [];\n if (options.query && this.semanticSearch) {\n // Semantic hits carry `confidence = _similarity`, so the reuse floor must\n // apply to them too: default `minSimilarity` to the resolved confidence\n // floor unless the caller explicitly overrides it. Otherwise a\n // low-similarity hit could be reused while a context memory at the same\n // confidence is filtered out.\n semanticRecords = await this.recallSemantic(options.query, {\n floor: options.minSimilarity ?? floor,\n limit: options.semanticLimit ?? 10,\n });\n }\n\n const merged = [...contextRecords, ...semanticRecords].sort((a, b) => {\n if (b.confidence !== a.confidence) return b.confidence - a.confidence;\n return (b.similarity ?? 0) - (a.similarity ?? 0);\n });\n\n return options.limit != null ? merged.slice(0, options.limit) : merged;\n }\n\n /**\n * Reinforce a memory from an observed outcome.\n *\n * - Wires the dormant reinforcement columns: increments `success_count` on\n * success, `failure_count` on failure.\n * - Adjusts `confidence`: success strengthens toward 1.0; failure decays\n * toward `failureConfidence` (default 0.3), dropping a confident memory\n * below the reuse floor in a single step.\n * - Refreshes `last_used_at` and `updated_at`, and (when the episode carries a\n * `value`) the stored value — so a regenerated strategy supersedes a decayed\n * one instead of the old value resurfacing on the next success.\n * - Seeds a new memory when none exists for `(scope, key)` and the episode\n * carries a `value` (a failed first attempt is retained at low confidence\n * for self-correction context).\n *\n * @returns The updated (or seeded) record, or `null` when there was nothing\n * to reinforce (no existing memory and no value to seed).\n */\n async capture(\n episode: LearningEpisode,\n outcome: LearningOutcome,\n ): Promise<LearningMemoryRecord | null> {\n const { success, error } = normalizeOutcome(outcome);\n const now = new Date();\n\n const existing = await this.db.get(CONTEXTS_TABLE, {\n owner_class: this.ownerClass,\n owner_id: this.ownerId,\n scope: episode.scope,\n key: episode.key,\n version: MEMORY_VERSION,\n });\n\n if (existing) {\n const currentConfidence = Number(existing.confidence ?? 1);\n const nextConfidence = this.nextConfidence(currentConfidence, success);\n const successCount =\n Number(existing.success_count ?? 0) + (success ? 1 : 0);\n const failureCount =\n Number(existing.failure_count ?? 0) + (success ? 0 : 1);\n\n const data: Record<string, unknown> = {\n confidence: nextConfidence,\n success_count: successCount,\n failure_count: failureCount,\n last_used_at: now,\n updated_at: now,\n };\n // The episode's value is the strategy this outcome pertains to, so always\n // reflect it in storage. Without this, a regenerated strategy (staged\n // after the previous one decayed below the floor) would be discarded and\n // the next successful capture would resurrect the stale failed value.\n if (episode.value !== undefined) {\n data.value = JSON.stringify(episode.value);\n }\n if (episode.metadata !== undefined) {\n data.metadata = JSON.stringify({\n ...this.parseMetadata(existing.metadata),\n ...episode.metadata,\n ...(error ? { lastError: error } : {}),\n });\n } else if (error) {\n data.metadata = JSON.stringify({\n ...this.parseMetadata(existing.metadata),\n lastError: error,\n });\n }\n\n await this.db.update(CONTEXTS_TABLE, { id: existing.id }, data);\n\n return {\n id: String(existing.id),\n scope: episode.scope,\n key: episode.key,\n value:\n episode.value !== undefined\n ? episode.value\n : parseValue(existing.value),\n confidence: nextConfidence,\n successCount,\n failureCount,\n lastUsedAt: now,\n source: 'context',\n };\n }\n\n // No existing memory: seed one only if the episode provides a value.\n if (episode.value === undefined) {\n return null;\n }\n\n const id = crypto.randomUUID();\n const confidence = success\n ? this.config.successConfidence\n : this.config.failureConfidence;\n const metadata =\n episode.metadata || error\n ? JSON.stringify({\n ...(episode.metadata ?? {}),\n ...(error ? { lastError: error } : {}),\n })\n : null;\n\n await this.db.upsert(CONTEXTS_TABLE, CONFLICT_COLUMNS, {\n id,\n owner_class: this.ownerClass,\n owner_id: this.ownerId,\n scope: episode.scope,\n key: episode.key,\n value: JSON.stringify(episode.value),\n metadata,\n version: MEMORY_VERSION,\n confidence,\n success_count: success ? 1 : 0,\n failure_count: success ? 0 : 1,\n created_at: now,\n updated_at: now,\n last_used_at: now,\n expires_at: episode.expiresAt ?? null,\n });\n\n return {\n id,\n scope: episode.scope,\n key: episode.key,\n value: episode.value,\n confidence,\n successCount: success ? 1 : 0,\n failureCount: success ? 0 : 1,\n lastUsedAt: now,\n source: 'context',\n };\n }\n\n /**\n * Compute the next confidence from the current value and an outcome.\n *\n * Success strengthens toward 1.0; failure blends toward `failureConfidence`.\n * Exposed as a pure step so callers/tests can reason about the curve.\n */\n nextConfidence(current: number, success: boolean): number {\n const r = this.config.reinforcement;\n if (success) {\n return clamp01(current + r * (1 - current));\n }\n return clamp01(current + r * (this.config.failureConfidence - current));\n }\n\n private async recallContexts(\n scope: string,\n opts: {\n key?: string;\n floor: number;\n now: Date;\n includeAncestors: boolean;\n },\n ): Promise<LearningMemoryRecord[]> {\n const scopes = opts.includeAncestors ? this.scopeChain(scope) : [scope];\n\n for (const candidateScope of scopes) {\n const rows = await this.selectContextRows(candidateScope, opts.key);\n const records = this.filterAndRank(rows, opts.floor, opts.now);\n if (records.length > 0) {\n return records;\n }\n }\n return [];\n }\n\n private async selectContextRows(\n scope: string,\n key?: string,\n ): Promise<Record<string, unknown>[]> {\n // Row identity is (owner_class, owner_id, scope, key, version); `capture()`\n // only ever writes version 1, so recall filters to it — otherwise a future\n // multi-version write would surface stale versions here.\n if (key !== undefined) {\n const { rows } = await this.db.query(\n `SELECT * FROM ${CONTEXTS_TABLE}\n WHERE owner_class = ? AND owner_id = ? AND scope = ? AND key = ?\n AND version = ?`,\n this.ownerClass,\n this.ownerId,\n scope,\n key,\n MEMORY_VERSION,\n );\n return rows;\n }\n const { rows } = await this.db.query(\n `SELECT * FROM ${CONTEXTS_TABLE}\n WHERE owner_class = ? AND owner_id = ? AND scope = ? AND version = ?`,\n this.ownerClass,\n this.ownerId,\n scope,\n MEMORY_VERSION,\n );\n return rows;\n }\n\n private filterAndRank(\n rows: Record<string, unknown>[],\n floor: number,\n now: Date,\n ): LearningMemoryRecord[] {\n const records: LearningMemoryRecord[] = [];\n\n for (const row of rows) {\n const expiresAt = toDate(row.expires_at);\n if (expiresAt && expiresAt.getTime() <= now.getTime()) {\n continue;\n }\n\n const lastUsedAt = toDate(row.last_used_at);\n const stored = Number(row.confidence ?? 1);\n const effective = this.applyTimeDecay(stored, lastUsedAt, now);\n if (effective < floor) {\n continue;\n }\n\n records.push({\n id: String(row.id),\n scope: String(row.scope),\n key: String(row.key),\n value: parseValue(row.value),\n confidence: effective,\n successCount: Number(row.success_count ?? 0),\n failureCount: Number(row.failure_count ?? 0),\n lastUsedAt,\n source: 'context',\n });\n }\n\n // Highest effective confidence first.\n return records.sort((a, b) => b.confidence - a.confidence);\n }\n\n private applyTimeDecay(\n confidence: number,\n lastUsedAt: Date | null,\n now: Date,\n ): number {\n const halfLife = this.config.decayHalfLifeMs;\n if (!halfLife || halfLife <= 0 || !lastUsedAt) {\n return confidence;\n }\n const age = now.getTime() - lastUsedAt.getTime();\n if (age <= 0) return confidence;\n return clamp01(confidence * 0.5 ** (age / halfLife));\n }\n\n private async recallSemantic(\n query: string,\n opts: { floor: number; limit: number },\n ): Promise<LearningMemoryRecord[]> {\n if (!this.semanticSearch) return [];\n\n const where: Record<string, unknown> | undefined =\n this.tenantId != null ? { tenant_id: this.tenantId } : undefined;\n\n const hits = await this.semanticSearch(query, {\n limit: opts.limit,\n minSimilarity: opts.floor,\n where,\n });\n\n return hits.map((hit) => ({\n id: hit.id != null ? String(hit.id) : crypto.randomUUID(),\n scope: 'semantic',\n key: hit.id != null ? String(hit.id) : query,\n value: hit,\n confidence: hit._similarity,\n successCount: 0,\n failureCount: 0,\n lastUsedAt: null,\n source: 'semantic',\n similarity: hit._similarity,\n }));\n }\n\n private async touch(ids: string[], now: Date): Promise<void> {\n if (ids.length === 0) return;\n // Single batched UPDATE rather than one per row (avoids an N+1 on large\n // recalls). Raw parameterised queries don't coerce Date bind params the way\n // db.update() does, so serialise to ISO first.\n const placeholders = ids.map(() => '?').join(', ');\n await this.db.query(\n `UPDATE ${CONTEXTS_TABLE} SET last_used_at = ? WHERE id IN (${placeholders})`,\n now.toISOString(),\n ...ids,\n );\n }\n\n private scopeChain(scope: string): string[] {\n const chain: string[] = [scope];\n const parts = scope.split('/');\n while (parts.length > 0) {\n parts.pop();\n chain.push(parts.join('/') || 'global');\n }\n // De-dupe while preserving order (guards against a leading 'global').\n return [...new Set(chain)];\n }\n\n private parseMetadata(raw: unknown): Record<string, unknown> {\n if (typeof raw !== 'string' || raw.length === 0) return {};\n try {\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === 'object' ? parsed : {};\n } catch {\n return {};\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"memory.js","names":[],"sources":["../../src/learning/memory.ts"],"sourcesContent":["/**\n * LearningMemory — confidence-scored, self-correcting memory over the existing\n * `_smrt_contexts` (keyed recall) and `_smrt_embeddings` (semantic recall)\n * substrate.\n *\n * This is the L1 deep module of the tenant-learning-agents epic (#1885 / #1886).\n * It wires the reinforcement columns that ship on `_smrt_contexts` but were\n * never written — `success_count`, `failure_count`, and a `last_used_at` that\n * is refreshed on recall — and layers a confidence floor + decay on top of the\n * primitive `remember()` / `recall()` methods so a strategy that stops working\n * stops being reused.\n *\n * It generalises the confidence-scored parser cache anytown's `praeco` agent\n * hand-rolls: recall only reuses a memory at `confidence >= minConfidence`\n * (default 0.7); a validated success strengthens confidence toward 1.0; an\n * observed failure decays it toward `failureConfidence` (default 0.3) so a\n * single failure drops it below the reuse floor.\n *\n * @module\n */\n\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport { toSafeInteger } from '../utils/safe-integer.js';\n\n/**\n * A relevance-scored memory returned by {@link LearningMemory.recall}.\n *\n * Records sourced from keyed `_smrt_contexts` lookups carry reinforcement\n * counters; records sourced from semantic embedding search carry a\n * `similarity` score (mirrored into `confidence` for uniform ranking).\n */\nexport interface LearningMemoryRecord {\n /** Row id in `_smrt_contexts`, or the matched object id for semantic hits. */\n id: string;\n /** Hierarchical scope the memory is filed under. */\n scope: string;\n /** Lookup key within the scope. */\n key: string;\n /** The stored value (JSON-parsed for context rows; the matched object for semantic hits). */\n value: unknown;\n /** Confidence in `[0, 1]`. For semantic hits this equals `similarity`. */\n confidence: number;\n /** Number of captured successes reinforcing this memory. */\n successCount: number;\n /** Number of captured failures decaying this memory. */\n failureCount: number;\n /** Last time this memory was recalled or reinforced. */\n lastUsedAt: Date | null;\n /** Where the record came from. */\n source: 'context' | 'semantic';\n /** Cosine similarity for semantic hits (absent for context rows). */\n similarity?: number;\n}\n\n/**\n * The outcome of acting on a recalled (or freshly generated) memory.\n *\n * A boolean `success` signal is the common case; a numeric `metric` delta is\n * supported as a convenience (positive → success, non-positive → failure).\n */\nexport type LearningOutcome =\n | { success: boolean; error?: string }\n | { metric: number; error?: string };\n\n/**\n * The episode being reinforced — the scope/key of the memory the agent acted\n * on, plus (for a first capture) the value to persist.\n */\nexport interface LearningEpisode {\n /** Scope the memory is filed under (e.g. `'sample/parse-invoice'`). */\n scope: string;\n /** Lookup key within the scope. */\n key: string;\n /**\n * The value (strategy) this outcome pertains to. Seeds a new memory when none\n * exists for `(scope, key)`, and refreshes the stored value when one does — so\n * a regenerated strategy supersedes a decayed one. Omit to reinforce an\n * existing memory's confidence without touching its stored value.\n */\n value?: unknown;\n /** Optional metadata to persist on a first capture. */\n metadata?: Record<string, unknown>;\n /** Optional expiry after which recall ignores the memory. */\n expiresAt?: Date;\n}\n\n/**\n * Tunable thresholds for the reinforcement loop. Defaults mirror the proven\n * `praeco` behaviour.\n */\nexport interface LearningMemoryConfig {\n /** Reuse floor — recall omits memories below this confidence. Default 0.7. */\n minConfidence: number;\n /** Confidence a brand-new memory is seeded at on a first success. Default 0.9. */\n successConfidence: number;\n /** Target a memory decays toward on failure. Default 0.3. */\n failureConfidence: number;\n /**\n * Blend weight in `[0, 1]` for each reinforcement step. At 0.5 a single\n * failure from any confident value (>= 0.7) always lands below the 0.7 floor\n * (`0.5·c + 0.15 <= 0.65`). Default 0.5.\n */\n reinforcement: number;\n /**\n * Optional half-life (ms) for time-based confidence decay. When set, recall\n * discounts a memory's stored confidence by `0.5 ^ (age / halfLife)` based on\n * `last_used_at`, so stale memory falls below the floor over time even\n * without an explicit failure. Off (no time decay) when undefined.\n */\n decayHalfLifeMs?: number;\n}\n\n/** Default reinforcement thresholds. */\nexport const DEFAULT_LEARNING_CONFIG: LearningMemoryConfig = {\n minConfidence: 0.7,\n successConfidence: 0.9,\n failureConfidence: 0.3,\n reinforcement: 0.5,\n};\n\n/**\n * A semantic search over stored embeddings, injected so `LearningMemory` never\n * reaches into a collection's internals. Matches the shape of\n * `SmrtCollection.semanticSearch`.\n */\nexport type LearningSemanticSearch = (\n query: string,\n options: {\n limit?: number;\n minSimilarity?: number;\n where?: Record<string, unknown>;\n },\n) => Promise<\n Array<{ id?: string; _similarity: number } & Record<string, unknown>>\n>;\n\n/** Options for {@link LearningMemory.recall}. */\nexport interface LearningRecallOptions {\n /** Exact key to look up within the scope. Omit for a scope-wide recall. */\n key?: string;\n /** Free-text query for semantic recall (only used when a searcher is wired). */\n query?: string;\n /** Override the reuse floor for this call. */\n minConfidence?: number;\n /** Walk up the scope hierarchy when no match is found at `scope`. Default true. */\n includeAncestors?: boolean;\n /** Cap on returned records. */\n limit?: number;\n /** Cap on semantic hits requested from the searcher. Default 10. */\n semanticLimit?: number;\n /** Minimum cosine similarity for semantic hits. Default 0. */\n minSimilarity?: number;\n /** Reference time for decay/expiry evaluation (injectable for tests). */\n now?: Date;\n}\n\n/** Constructor options for {@link LearningMemory}. */\nexport interface LearningMemoryOptions {\n /** System database handle (an owning object's `systemDb`). */\n db: DatabaseInterface;\n /** `owner_class` the memories are filed under. */\n ownerClass: string;\n /** `owner_id` the memories are filed under (isolates memory per owner). */\n ownerId: string;\n /**\n * Optional tenant id. When set it is threaded into the semantic searcher's\n * `where` filter so embedding recall stays tenant-scoped. Keyed-context\n * recall is already isolated by `owner_id`.\n */\n tenantId?: string | null;\n /** Optional embedding search for the semantic recall arm. */\n semanticSearch?: LearningSemanticSearch;\n /** Threshold overrides; merged over {@link DEFAULT_LEARNING_CONFIG}. */\n config?: Partial<LearningMemoryConfig>;\n}\n\nconst CONTEXTS_TABLE = '_smrt_contexts';\nconst CONFLICT_COLUMNS = ['owner_class', 'owner_id', 'scope', 'key', 'version'];\n/**\n * The single `_smrt_contexts` version LearningMemory reads and writes. Kept\n * explicit so capture and recall agree on the row identity.\n */\nconst MEMORY_VERSION = 1;\n\nfunction clamp01(value: number): number {\n if (Number.isNaN(value)) return 0;\n if (value < 0) return 0;\n if (value > 1) return 1;\n return value;\n}\n\nfunction normalizeOutcome(outcome: LearningOutcome): {\n success: boolean;\n error?: string;\n} {\n if ('success' in outcome) {\n return { success: outcome.success, error: outcome.error };\n }\n return { success: outcome.metric > 0, error: outcome.error };\n}\n\nfunction toDate(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return value;\n const parsed = new Date(value as string);\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n}\n\nfunction parseValue(raw: unknown): unknown {\n if (typeof raw !== 'string') return raw ?? null;\n try {\n return JSON.parse(raw);\n } catch {\n // Tolerate legacy/non-JSON payloads rather than throwing mid-recall.\n return raw;\n }\n}\n\n/**\n * Confidence-scored, self-correcting memory over `_smrt_contexts` and\n * (optionally) semantic embedding search.\n *\n * @example\n * ```typescript\n * const memory = new LearningMemory({\n * db: agent.systemDb,\n * ownerClass: 'InvoiceAgent',\n * ownerId: agent.id,\n * tenantId: agent.tenantId,\n * });\n *\n * // Recall a confident strategy for this task.\n * const [hit] = await memory.recall('parser/acme', { key: docUrl });\n * const strategy = hit?.value ?? (await generateStrategy(docUrl));\n *\n * // ...act on `strategy`, then reinforce the outcome.\n * await memory.capture(\n * { scope: 'parser/acme', key: docUrl, value: strategy },\n * { success: extracted.length > 0 },\n * );\n * ```\n */\nexport class LearningMemory {\n private readonly db: DatabaseInterface;\n private readonly ownerClass: string;\n private readonly ownerId: string;\n private readonly tenantId: string | null;\n private readonly semanticSearch?: LearningSemanticSearch;\n private readonly config: LearningMemoryConfig;\n\n constructor(options: LearningMemoryOptions) {\n this.db = options.db;\n this.ownerClass = options.ownerClass;\n this.ownerId = options.ownerId;\n this.tenantId = options.tenantId ?? null;\n this.semanticSearch = options.semanticSearch;\n this.config = { ...DEFAULT_LEARNING_CONFIG, ...(options.config ?? {}) };\n }\n\n /** The resolved reinforcement thresholds (defaults merged with overrides). */\n get thresholds(): LearningMemoryConfig {\n return { ...this.config };\n }\n\n /**\n * Recall confidence-filtered, relevant memories for a scope.\n *\n * Unions two arms:\n * 1. **Keyed context recall** over `_smrt_contexts` — owner-scoped (and thus\n * tenant-isolated), filtered by the confidence floor, expiry, and optional\n * time-decay, with hierarchical scope fallback. Surviving rows have their\n * `last_used_at` refreshed.\n * 2. **Semantic recall** over stored embeddings (only when a searcher was\n * wired and a `query` is given) — tenant-scoped via the searcher's `where`.\n *\n * @returns Records sorted by confidence (then similarity) descending.\n */\n async recall(\n scope: string,\n options: LearningRecallOptions = {},\n ): Promise<LearningMemoryRecord[]> {\n const floor = options.minConfidence ?? this.config.minConfidence;\n const now = options.now ?? new Date();\n const includeAncestors = options.includeAncestors ?? true;\n\n const contextRecords = await this.recallContexts(scope, {\n key: options.key,\n floor,\n now,\n includeAncestors,\n });\n\n // Wire the previously-dead refresh: recall marks a memory as used.\n await this.touch(\n contextRecords.map((r) => r.id),\n now,\n );\n\n let semanticRecords: LearningMemoryRecord[] = [];\n if (options.query && this.semanticSearch) {\n // Semantic hits carry `confidence = _similarity`, so the reuse floor must\n // apply to them too: default `minSimilarity` to the resolved confidence\n // floor unless the caller explicitly overrides it. Otherwise a\n // low-similarity hit could be reused while a context memory at the same\n // confidence is filtered out.\n semanticRecords = await this.recallSemantic(options.query, {\n floor: options.minSimilarity ?? floor,\n limit: options.semanticLimit ?? 10,\n });\n }\n\n const merged = [...contextRecords, ...semanticRecords].sort((a, b) => {\n if (b.confidence !== a.confidence) return b.confidence - a.confidence;\n return (b.similarity ?? 0) - (a.similarity ?? 0);\n });\n\n return options.limit != null ? merged.slice(0, options.limit) : merged;\n }\n\n /**\n * Reinforce a memory from an observed outcome.\n *\n * - Wires the dormant reinforcement columns: increments `success_count` on\n * success, `failure_count` on failure.\n * - Adjusts `confidence`: success strengthens toward 1.0; failure decays\n * toward `failureConfidence` (default 0.3), dropping a confident memory\n * below the reuse floor in a single step.\n * - Refreshes `last_used_at` and `updated_at`, and (when the episode carries a\n * `value`) the stored value — so a regenerated strategy supersedes a decayed\n * one instead of the old value resurfacing on the next success.\n * - Seeds a new memory when none exists for `(scope, key)` and the episode\n * carries a `value` (a failed first attempt is retained at low confidence\n * for self-correction context).\n *\n * @returns The updated (or seeded) record, or `null` when there was nothing\n * to reinforce (no existing memory and no value to seed).\n */\n async capture(\n episode: LearningEpisode,\n outcome: LearningOutcome,\n ): Promise<LearningMemoryRecord | null> {\n const { success, error } = normalizeOutcome(outcome);\n const now = new Date();\n\n const existing = await this.db.get(CONTEXTS_TABLE, {\n owner_class: this.ownerClass,\n owner_id: this.ownerId,\n scope: episode.scope,\n key: episode.key,\n version: MEMORY_VERSION,\n });\n\n if (existing) {\n const currentConfidence = Number(existing.confidence ?? 1);\n const nextConfidence = this.nextConfidence(currentConfidence, success);\n const successCount = toSafeInteger(\n toSafeInteger(\n existing.success_count ?? 0,\n 'Learning memory success count',\n ) + (success ? 1 : 0),\n 'Learning memory success count',\n );\n const failureCount = toSafeInteger(\n toSafeInteger(\n existing.failure_count ?? 0,\n 'Learning memory failure count',\n ) + (success ? 0 : 1),\n 'Learning memory failure count',\n );\n\n const data: Record<string, unknown> = {\n confidence: nextConfidence,\n success_count: successCount,\n failure_count: failureCount,\n last_used_at: now,\n updated_at: now,\n };\n // The episode's value is the strategy this outcome pertains to, so always\n // reflect it in storage. Without this, a regenerated strategy (staged\n // after the previous one decayed below the floor) would be discarded and\n // the next successful capture would resurrect the stale failed value.\n if (episode.value !== undefined) {\n data.value = JSON.stringify(episode.value);\n }\n if (episode.metadata !== undefined) {\n data.metadata = JSON.stringify({\n ...this.parseMetadata(existing.metadata),\n ...episode.metadata,\n ...(error ? { lastError: error } : {}),\n });\n } else if (error) {\n data.metadata = JSON.stringify({\n ...this.parseMetadata(existing.metadata),\n lastError: error,\n });\n }\n\n await this.db.update(CONTEXTS_TABLE, { id: existing.id }, data);\n\n return {\n id: String(existing.id),\n scope: episode.scope,\n key: episode.key,\n value:\n episode.value !== undefined\n ? episode.value\n : parseValue(existing.value),\n confidence: nextConfidence,\n successCount,\n failureCount,\n lastUsedAt: now,\n source: 'context',\n };\n }\n\n // No existing memory: seed one only if the episode provides a value.\n if (episode.value === undefined) {\n return null;\n }\n\n const id = crypto.randomUUID();\n const confidence = success\n ? this.config.successConfidence\n : this.config.failureConfidence;\n const metadata =\n episode.metadata || error\n ? JSON.stringify({\n ...(episode.metadata ?? {}),\n ...(error ? { lastError: error } : {}),\n })\n : null;\n\n await this.db.upsert(CONTEXTS_TABLE, CONFLICT_COLUMNS, {\n id,\n owner_class: this.ownerClass,\n owner_id: this.ownerId,\n scope: episode.scope,\n key: episode.key,\n value: JSON.stringify(episode.value),\n metadata,\n version: MEMORY_VERSION,\n confidence,\n success_count: success ? 1 : 0,\n failure_count: success ? 0 : 1,\n created_at: now,\n updated_at: now,\n last_used_at: now,\n expires_at: episode.expiresAt ?? null,\n });\n\n return {\n id,\n scope: episode.scope,\n key: episode.key,\n value: episode.value,\n confidence,\n successCount: success ? 1 : 0,\n failureCount: success ? 0 : 1,\n lastUsedAt: now,\n source: 'context',\n };\n }\n\n /**\n * Compute the next confidence from the current value and an outcome.\n *\n * Success strengthens toward 1.0; failure blends toward `failureConfidence`.\n * Exposed as a pure step so callers/tests can reason about the curve.\n */\n nextConfidence(current: number, success: boolean): number {\n const r = this.config.reinforcement;\n if (success) {\n return clamp01(current + r * (1 - current));\n }\n return clamp01(current + r * (this.config.failureConfidence - current));\n }\n\n private async recallContexts(\n scope: string,\n opts: {\n key?: string;\n floor: number;\n now: Date;\n includeAncestors: boolean;\n },\n ): Promise<LearningMemoryRecord[]> {\n const scopes = opts.includeAncestors ? this.scopeChain(scope) : [scope];\n\n for (const candidateScope of scopes) {\n const rows = await this.selectContextRows(candidateScope, opts.key);\n const records = this.filterAndRank(rows, opts.floor, opts.now);\n if (records.length > 0) {\n return records;\n }\n }\n return [];\n }\n\n private async selectContextRows(\n scope: string,\n key?: string,\n ): Promise<Record<string, unknown>[]> {\n // Row identity is (owner_class, owner_id, scope, key, version); `capture()`\n // only ever writes version 1, so recall filters to it — otherwise a future\n // multi-version write would surface stale versions here.\n if (key !== undefined) {\n const { rows } = await this.db.query(\n `SELECT * FROM ${CONTEXTS_TABLE}\n WHERE owner_class = ? AND owner_id = ? AND scope = ? AND key = ?\n AND version = ?`,\n this.ownerClass,\n this.ownerId,\n scope,\n key,\n MEMORY_VERSION,\n );\n return rows;\n }\n const { rows } = await this.db.query(\n `SELECT * FROM ${CONTEXTS_TABLE}\n WHERE owner_class = ? AND owner_id = ? AND scope = ? AND version = ?`,\n this.ownerClass,\n this.ownerId,\n scope,\n MEMORY_VERSION,\n );\n return rows;\n }\n\n private filterAndRank(\n rows: Record<string, unknown>[],\n floor: number,\n now: Date,\n ): LearningMemoryRecord[] {\n const records: LearningMemoryRecord[] = [];\n\n for (const row of rows) {\n const expiresAt = toDate(row.expires_at);\n if (expiresAt && expiresAt.getTime() <= now.getTime()) {\n continue;\n }\n\n const lastUsedAt = toDate(row.last_used_at);\n const stored = Number(row.confidence ?? 1);\n const effective = this.applyTimeDecay(stored, lastUsedAt, now);\n if (effective < floor) {\n continue;\n }\n\n records.push({\n id: String(row.id),\n scope: String(row.scope),\n key: String(row.key),\n value: parseValue(row.value),\n confidence: effective,\n successCount: toSafeInteger(\n row.success_count ?? 0,\n 'Learning memory success count',\n ),\n failureCount: toSafeInteger(\n row.failure_count ?? 0,\n 'Learning memory failure count',\n ),\n lastUsedAt,\n source: 'context',\n });\n }\n\n // Highest effective confidence first.\n return records.sort((a, b) => b.confidence - a.confidence);\n }\n\n private applyTimeDecay(\n confidence: number,\n lastUsedAt: Date | null,\n now: Date,\n ): number {\n const halfLife = this.config.decayHalfLifeMs;\n if (!halfLife || halfLife <= 0 || !lastUsedAt) {\n return confidence;\n }\n const age = now.getTime() - lastUsedAt.getTime();\n if (age <= 0) return confidence;\n return clamp01(confidence * 0.5 ** (age / halfLife));\n }\n\n private async recallSemantic(\n query: string,\n opts: { floor: number; limit: number },\n ): Promise<LearningMemoryRecord[]> {\n if (!this.semanticSearch) return [];\n\n const where: Record<string, unknown> | undefined =\n this.tenantId != null ? { tenant_id: this.tenantId } : undefined;\n\n const hits = await this.semanticSearch(query, {\n limit: opts.limit,\n minSimilarity: opts.floor,\n where,\n });\n\n return hits.map((hit) => ({\n id: hit.id != null ? String(hit.id) : crypto.randomUUID(),\n scope: 'semantic',\n key: hit.id != null ? String(hit.id) : query,\n value: hit,\n confidence: hit._similarity,\n successCount: 0,\n failureCount: 0,\n lastUsedAt: null,\n source: 'semantic',\n similarity: hit._similarity,\n }));\n }\n\n private async touch(ids: string[], now: Date): Promise<void> {\n if (ids.length === 0) return;\n // Single batched UPDATE rather than one per row (avoids an N+1 on large\n // recalls). Raw parameterised queries don't coerce Date bind params the way\n // db.update() does, so serialise to ISO first.\n const placeholders = ids.map(() => '?').join(', ');\n await this.db.query(\n `UPDATE ${CONTEXTS_TABLE} SET last_used_at = ? WHERE id IN (${placeholders})`,\n now.toISOString(),\n ...ids,\n );\n }\n\n private scopeChain(scope: string): string[] {\n const chain: string[] = [scope];\n const parts = scope.split('/');\n while (parts.length > 0) {\n parts.pop();\n chain.push(parts.join('/') || 'global');\n }\n // De-dupe while preserving order (guards against a leading 'global').\n return [...new Set(chain)];\n }\n\n private parseMetadata(raw: unknown): Record<string, unknown> {\n if (typeof raw !== 'string' || raw.length === 0) return {};\n try {\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === 'object' ? parsed : {};\n } catch {\n return {};\n }\n }\n}\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ var staticManifest = {
3
3
  "version": "1.0.0",
4
4
  "timestamp": 0,
5
5
  "packageName": "@happyvertical/smrt-core",
6
- "packageVersion": "0.41.0",
6
+ "packageVersion": "0.42.0",
7
7
  "objects": {
8
8
  "@happyvertical/smrt-core:SmrtClass": {
9
9
  "name": "smrtclass",
@@ -1 +1 @@
1
- {"version":3,"file":"static-manifest.js","names":[],"sources":["../../src/manifest/static-manifest.ts"],"sourcesContent":["/**\n * Auto-generated static manifest\n * Generated at build time from SMRT object scanning\n * DO NOT EDIT - This file is automatically generated\n */\n\nimport type { SmartObjectManifest } from '../scanner/types.js';\n\nexport const staticManifest: SmartObjectManifest = {\n \"version\": \"1.0.0\",\n \"timestamp\": 0,\n \"packageName\": \"@happyvertical/smrt-core\",\n \"packageVersion\": \"0.41.0\",\n \"objects\": {\n \"@happyvertical/smrt-core:SmrtClass\": {\n \"name\": \"smrtclass\",\n \"className\": \"SmrtClass\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtClass\",\n \"collection\": \"smrtclasses\",\n \"filePath\": \"packages/core/src/class.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {},\n \"methods\": {\n \"getAiUsageSnapshot\": {\n \"name\": \"getAiUsageSnapshot\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"AiUsageSnapshot | undefined\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"resetAiUsage\": {\n \"name\": \"resetAiUsage\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"listAiUsage\": {\n \"name\": \"listAiUsage\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"AiUsageListOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<SmrtAiUsageRecord[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"summarizeAiUsage\": {\n \"name\": \"summarizeAiUsage\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"AiUsageSummaryOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Record<string, AiUsageStats>>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"destroy\": {\n \"name\": \"destroy\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"exportName\": \"SmrtClass\",\n \"collectionExportName\": \"SmrtClassCollection\",\n \"schema\": {\n \"tableName\": \"smrt_classes\",\n \"ddl\": \"CREATE TABLE IF NOT EXISTS \\\"smrt_classes\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\n \"columns\": {\n \"id\": {\n \"type\": \"UUID\",\n \"primaryKey\": true,\n \"referenceKind\": \"id\",\n \"notNull\": true\n },\n \"slug\": {\n \"type\": \"TEXT\",\n \"notNull\": true\n },\n \"context\": {\n \"type\": \"TEXT\",\n \"notNull\": true,\n \"default\": \"\"\n },\n \"created_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n },\n \"updated_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n }\n },\n \"indexes\": [\n {\n \"name\": \"smrt_classes_slug_context_idx\",\n \"columns\": [\n \"slug\",\n \"context\"\n ],\n \"unique\": true\n },\n {\n \"name\": \"smrt_classes_created_at_idx\",\n \"columns\": [\n \"created_at\"\n ]\n }\n ],\n \"version\": \"234a72b0\"\n }\n },\n \"@happyvertical/smrt-core:SmrtCollection\": {\n \"name\": \"smrtcollection\",\n \"className\": \"SmrtCollection\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtCollection\",\n \"collection\": \"smrtcollections\",\n \"filePath\": \"packages/core/src/collection.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {},\n \"methods\": {\n \"getItemClass\": {\n \"name\": \"getItemClass\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"SmrtCollectionItemClass<ModelType>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"validate\": {\n \"name\": \"validate\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": true,\n \"isPublic\": true\n },\n \"create\": {\n \"name\": \"create\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"SmrtCreateInput<ModelType>\",\n \"optional\": false\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"initialize\": {\n \"name\": \"initialize\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"ensureStorageReady\": {\n \"name\": \"ensureStorageReady\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findOne\": {\n \"name\": \"findOne\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<ModelType | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findById\": {\n \"name\": \"findById\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"id\",\n \"type\": \"string\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<ModelType | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findAll\": {\n \"name\": \"findAll\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<ModelType[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"listByIds\": {\n \"name\": \"listByIds\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"ids\",\n \"type\": \"string[]\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<ModelType[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"get\": {\n \"name\": \"get\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"filter\",\n \"type\": \"string | SmrtWhereClause<ModelType>\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<ModelType | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"list\": {\n \"name\": \"list\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"SmrtListOptions<ModelType>\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<ModelType[] | Record<string>[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getOrUpsert\": {\n \"name\": \"getOrUpsert\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"data\",\n \"type\": \"Record<string>\",\n \"optional\": false\n },\n {\n \"name\": \"defaults\",\n \"type\": \"Record<string>\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getDiff\": {\n \"name\": \"getDiff\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"existing\",\n \"type\": \"SmrtObject | Record<string>\",\n \"optional\": false\n },\n {\n \"name\": \"data\",\n \"type\": \"Record<string>\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<Record<string> | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getFields\": {\n \"name\": \"getFields\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<Record<string, CollectionFieldDefinition>>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getFieldsSync\": {\n \"name\": \"getFieldsSync\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"Record<string, CollectionFieldDefinition>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"generateSchema\": {\n \"name\": \"generateSchema\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"generateTableName\": {\n \"name\": \"generateTableName\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"delete\": {\n \"name\": \"delete\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"id\",\n \"type\": \"string\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<boolean>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"count\": {\n \"name\": \"count\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getStiChildMetaType\": {\n \"name\": \"getStiChildMetaType\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"string | null\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"query\": {\n \"name\": \"query\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"sql\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"params\",\n \"type\": \"any\",\n \"optional\": true\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<ModelType[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"remember\": {\n \"name\": \"remember\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"recall\": {\n \"name\": \"recall\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"recallAll\": {\n \"name\": \"recallAll\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Map<string>>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"forget\": {\n \"name\": \"forget\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"forgetScope\": {\n \"name\": \"forgetScope\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<number>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"semanticSearch\": {\n \"name\": \"semanticSearch\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Array>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findSimilar\": {\n \"name\": \"findSimilar\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"object\",\n \"type\": \"ModelType | string\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Array>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findSimilarToEmbedding\": {\n \"name\": \"findSimilarToEmbedding\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"embedding\",\n \"type\": \"number[]\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Array>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"generateMissingEmbeddings\": {\n \"name\": \"generateMissingEmbeddings\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<object>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtClass\",\n \"exportName\": \"SmrtCollection\",\n \"collectionExportName\": \"SmrtCollectionCollection\",\n \"schema\": {\n \"tableName\": \"smrt_collections\",\n \"ddl\": \"CREATE TABLE IF NOT EXISTS \\\"smrt_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\n \"columns\": {\n \"id\": {\n \"type\": \"UUID\",\n \"primaryKey\": true,\n \"referenceKind\": \"id\",\n \"notNull\": true\n },\n \"slug\": {\n \"type\": \"TEXT\",\n \"notNull\": true\n },\n \"context\": {\n \"type\": \"TEXT\",\n \"notNull\": true,\n \"default\": \"\"\n },\n \"created_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n },\n \"updated_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n }\n },\n \"indexes\": [\n {\n \"name\": \"smrt_collections_slug_context_idx\",\n \"columns\": [\n \"slug\",\n \"context\"\n ],\n \"unique\": true\n },\n {\n \"name\": \"smrt_collections_created_at_idx\",\n \"columns\": [\n \"created_at\"\n ]\n }\n ],\n \"version\": \"295b0a80\"\n }\n },\n \"@happyvertical/smrt-core:SmrtHierarchical\": {\n \"name\": \"smrthierarchical\",\n \"className\": \"SmrtHierarchical\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtHierarchical\",\n \"collection\": \"smrthierarchicals\",\n \"filePath\": \"packages/core/src/hierarchical.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {\n \"parentId\": {\n \"type\": \"text\",\n \"required\": false\n }\n },\n \"methods\": {\n \"getParent\": {\n \"name\": \"getParent\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getChildren\": {\n \"name\": \"getChildren\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getAncestors\": {\n \"name\": \"getAncestors\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getDescendants\": {\n \"name\": \"getDescendants\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getHierarchy\": {\n \"name\": \"getHierarchy\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<HierarchyView>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"moveTo\": {\n \"name\": \"moveTo\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"newParent\",\n \"type\": \"string | null\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtObject\",\n \"exportName\": \"SmrtHierarchical\",\n \"collectionExportName\": \"SmrtHierarchicalCollection\"\n },\n \"@happyvertical/smrt-core:SmrtJunction\": {\n \"name\": \"smrtjunction\",\n \"className\": \"SmrtJunction\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtJunction\",\n \"collection\": \"smrtjunctions\",\n \"filePath\": \"packages/core/src/junction.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {},\n \"methods\": {\n \"byLeft\": {\n \"name\": \"byLeft\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"leftId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionFilterOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<TItem[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"byRight\": {\n \"name\": \"byRight\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"rightId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionFilterOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<TItem[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"attach\": {\n \"name\": \"attach\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"leftId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"rightId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionAttachOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<TItem>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"detach\": {\n \"name\": \"detach\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"leftId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"rightId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionFilterOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"setLinks\": {\n \"name\": \"setLinks\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"leftId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"rightIds\",\n \"type\": \"string[]\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionAttachOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtCollection\",\n \"extendsTypeArg\": \"TItem\",\n \"exportName\": \"SmrtJunction\",\n \"collectionExportName\": \"SmrtJunctionCollection\"\n },\n \"@happyvertical/smrt-core:SmrtObject\": {\n \"name\": \"smrtobject\",\n \"className\": \"SmrtObject\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtObject\",\n \"collection\": \"smrtobjects\",\n \"filePath\": \"packages/core/src/object.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {\n \"created_at\": {\n \"type\": \"datetime\",\n \"required\": false\n },\n \"updated_at\": {\n \"type\": \"datetime\",\n \"required\": false\n }\n },\n \"methods\": {\n \"markAsPersisted\": {\n \"name\": \"markAsPersisted\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"requireInsertOnSave\": {\n \"name\": \"requireInsertOnSave\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"initialize\": {\n \"name\": \"initialize\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"loadDataFromDb\": {\n \"name\": \"loadDataFromDb\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"data\",\n \"type\": \"Record<string>\",\n \"optional\": false\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getFields\": {\n \"name\": \"getFields\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<any>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"toJSON\": {\n \"name\": \"toJSON\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"toPlainObject\": {\n \"name\": \"toPlainObject\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"Record<string>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"toPublicJSON\": {\n \"name\": \"toPublicJSON\",\n \"async\": false,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"PublicJsonOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Record<string>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getId\": {\n \"name\": \"getId\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getSlug\": {\n \"name\": \"getSlug\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getSavedId\": {\n \"name\": \"getSavedId\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"isSaved\": {\n \"name\": \"isSaved\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"save\": {\n \"name\": \"save\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"classifyConstraintError\": {\n \"name\": \"classifyConstraintError\",\n \"async\": false,\n \"parameters\": [\n {\n \"name\": \"message\",\n \"type\": \"string\",\n \"optional\": false\n }\n ],\n \"returnType\": \"'unique' | 'not_null' | null\",\n \"isStatic\": true,\n \"isPublic\": true\n },\n \"loadFromId\": {\n \"name\": \"loadFromId\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"loadFromSlug\": {\n \"name\": \"loadFromSlug\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"is\": {\n \"name\": \"is\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"criteria\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"AiOperationOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"do\": {\n \"name\": \"do\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"instructions\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"AiOperationOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"describe\": {\n \"name\": \"describe\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"AiOperationOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"delete\": {\n \"name\": \"delete\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"isRelatedLoaded\": {\n \"name\": \"isRelatedLoaded\",\n \"async\": false,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n }\n ],\n \"returnType\": \"boolean\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"_setLoadedRelationship\": {\n \"name\": \"_setLoadedRelationship\",\n \"async\": false,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"value\",\n \"type\": \"any\",\n \"optional\": false\n }\n ],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"loadRelated\": {\n \"name\": \"loadRelated\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"LoadRelatedOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<any>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"loadRelatedMany\": {\n \"name\": \"loadRelatedMany\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"LoadRelatedOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<any[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getRelated\": {\n \"name\": \"getRelated\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"LoadRelatedOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<any>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getAvailableTools\": {\n \"name\": \"getAvailableTools\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"AITool[]\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"executeToolCall\": {\n \"name\": \"executeToolCall\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"toolCall\",\n \"type\": \"ToolCall\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<ToolCallResult>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"remember\": {\n \"name\": \"remember\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"recall\": {\n \"name\": \"recall\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"recallAll\": {\n \"name\": \"recallAll\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Map<string>>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"forget\": {\n \"name\": \"forget\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"forgetScope\": {\n \"name\": \"forgetScope\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<number>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"generateEmbeddings\": {\n \"name\": \"generateEmbeddings\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"GenerateEmbeddingsOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getEmbedding\": {\n \"name\": \"getEmbedding\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"model\",\n \"type\": \"string\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<number[] | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"hasStaleEmbeddings\": {\n \"name\": \"hasStaleEmbeddings\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<boolean>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"clearEmbeddings\": {\n \"name\": \"clearEmbeddings\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtClass\",\n \"exportName\": \"SmrtObject\",\n \"collectionExportName\": \"SmrtObjectCollection\",\n \"schema\": {\n \"tableName\": \"smrt_objects\",\n \"ddl\": \"CREATE TABLE IF NOT EXISTS \\\"smrt_objects\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\n \"columns\": {\n \"id\": {\n \"type\": \"UUID\",\n \"primaryKey\": true,\n \"referenceKind\": \"id\",\n \"notNull\": true\n },\n \"slug\": {\n \"type\": \"TEXT\",\n \"notNull\": true\n },\n \"context\": {\n \"type\": \"TEXT\",\n \"notNull\": true,\n \"default\": \"\"\n },\n \"created_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n },\n \"updated_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n }\n },\n \"indexes\": [\n {\n \"name\": \"smrt_objects_slug_context_idx\",\n \"columns\": [\n \"slug\",\n \"context\"\n ],\n \"unique\": true\n },\n {\n \"name\": \"smrt_objects_created_at_idx\",\n \"columns\": [\n \"created_at\"\n ]\n }\n ],\n \"version\": \"204bf3c4\"\n }\n },\n \"@happyvertical/smrt-core:SmrtPolymorphicAssociation\": {\n \"name\": \"smrtpolymorphicassociation\",\n \"className\": \"SmrtPolymorphicAssociation\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtPolymorphicAssociation\",\n \"collection\": \"smrtpolymorphicassociations\",\n \"filePath\": \"packages/core/src/polymorphic-association.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {\n \"metaType\": {\n \"type\": \"text\",\n \"required\": true,\n \"_meta\": {\n \"required\": true\n }\n },\n \"metaId\": {\n \"type\": \"text\",\n \"required\": true,\n \"_meta\": {\n \"required\": true\n }\n },\n \"role\": {\n \"type\": \"text\",\n \"required\": true,\n \"_meta\": {\n \"required\": true\n }\n },\n \"sortOrder\": {\n \"type\": \"integer\",\n \"required\": false,\n \"default\": 0\n }\n },\n \"methods\": {\n \"hydrate\": {\n \"name\": \"hydrate\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<T | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtObject\",\n \"exportName\": \"SmrtPolymorphicAssociation\",\n \"collectionExportName\": \"SmrtPolymorphicAssociationCollection\",\n \"validationRules\": [\n {\n \"field\": \"metaType\",\n \"rule\": \"required\",\n \"fieldType\": \"text\"\n },\n {\n \"field\": \"metaId\",\n \"rule\": \"required\",\n \"fieldType\": \"text\"\n },\n {\n \"field\": \"role\",\n \"rule\": \"required\",\n \"fieldType\": \"text\"\n }\n ]\n }\n },\n \"moduleType\": \"smrt\"\n} as const;\n\nexport default staticManifest;\n"],"mappings":"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"}
1
+ {"version":3,"file":"static-manifest.js","names":[],"sources":["../../src/manifest/static-manifest.ts"],"sourcesContent":["/**\n * Auto-generated static manifest\n * Generated at build time from SMRT object scanning\n * DO NOT EDIT - This file is automatically generated\n */\n\nimport type { SmartObjectManifest } from '../scanner/types.js';\n\nexport const staticManifest: SmartObjectManifest = {\n \"version\": \"1.0.0\",\n \"timestamp\": 0,\n \"packageName\": \"@happyvertical/smrt-core\",\n \"packageVersion\": \"0.42.0\",\n \"objects\": {\n \"@happyvertical/smrt-core:SmrtClass\": {\n \"name\": \"smrtclass\",\n \"className\": \"SmrtClass\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtClass\",\n \"collection\": \"smrtclasses\",\n \"filePath\": \"packages/core/src/class.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {},\n \"methods\": {\n \"getAiUsageSnapshot\": {\n \"name\": \"getAiUsageSnapshot\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"AiUsageSnapshot | undefined\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"resetAiUsage\": {\n \"name\": \"resetAiUsage\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"listAiUsage\": {\n \"name\": \"listAiUsage\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"AiUsageListOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<SmrtAiUsageRecord[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"summarizeAiUsage\": {\n \"name\": \"summarizeAiUsage\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"AiUsageSummaryOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Record<string, AiUsageStats>>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"destroy\": {\n \"name\": \"destroy\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"exportName\": \"SmrtClass\",\n \"collectionExportName\": \"SmrtClassCollection\",\n \"schema\": {\n \"tableName\": \"smrt_classes\",\n \"ddl\": \"CREATE TABLE IF NOT EXISTS \\\"smrt_classes\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\n \"columns\": {\n \"id\": {\n \"type\": \"UUID\",\n \"primaryKey\": true,\n \"referenceKind\": \"id\",\n \"notNull\": true\n },\n \"slug\": {\n \"type\": \"TEXT\",\n \"notNull\": true\n },\n \"context\": {\n \"type\": \"TEXT\",\n \"notNull\": true,\n \"default\": \"\"\n },\n \"created_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n },\n \"updated_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n }\n },\n \"indexes\": [\n {\n \"name\": \"smrt_classes_slug_context_idx\",\n \"columns\": [\n \"slug\",\n \"context\"\n ],\n \"unique\": true\n },\n {\n \"name\": \"smrt_classes_created_at_idx\",\n \"columns\": [\n \"created_at\"\n ]\n }\n ],\n \"version\": \"234a72b0\"\n }\n },\n \"@happyvertical/smrt-core:SmrtCollection\": {\n \"name\": \"smrtcollection\",\n \"className\": \"SmrtCollection\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtCollection\",\n \"collection\": \"smrtcollections\",\n \"filePath\": \"packages/core/src/collection.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {},\n \"methods\": {\n \"getItemClass\": {\n \"name\": \"getItemClass\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"SmrtCollectionItemClass<ModelType>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"validate\": {\n \"name\": \"validate\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": true,\n \"isPublic\": true\n },\n \"create\": {\n \"name\": \"create\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"SmrtCreateInput<ModelType>\",\n \"optional\": false\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"initialize\": {\n \"name\": \"initialize\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"ensureStorageReady\": {\n \"name\": \"ensureStorageReady\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findOne\": {\n \"name\": \"findOne\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<ModelType | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findById\": {\n \"name\": \"findById\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"id\",\n \"type\": \"string\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<ModelType | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findAll\": {\n \"name\": \"findAll\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<ModelType[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"listByIds\": {\n \"name\": \"listByIds\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"ids\",\n \"type\": \"string[]\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<ModelType[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"get\": {\n \"name\": \"get\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"filter\",\n \"type\": \"string | SmrtWhereClause<ModelType>\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<ModelType | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"list\": {\n \"name\": \"list\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"SmrtListOptions<ModelType>\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<ModelType[] | Record<string>[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getOrUpsert\": {\n \"name\": \"getOrUpsert\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"data\",\n \"type\": \"Record<string>\",\n \"optional\": false\n },\n {\n \"name\": \"defaults\",\n \"type\": \"Record<string>\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getDiff\": {\n \"name\": \"getDiff\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"existing\",\n \"type\": \"SmrtObject | Record<string>\",\n \"optional\": false\n },\n {\n \"name\": \"data\",\n \"type\": \"Record<string>\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<Record<string> | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getFields\": {\n \"name\": \"getFields\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<Record<string, CollectionFieldDefinition>>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getFieldsSync\": {\n \"name\": \"getFieldsSync\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"Record<string, CollectionFieldDefinition>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"generateSchema\": {\n \"name\": \"generateSchema\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"generateTableName\": {\n \"name\": \"generateTableName\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"delete\": {\n \"name\": \"delete\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"id\",\n \"type\": \"string\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<boolean>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"count\": {\n \"name\": \"count\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getStiChildMetaType\": {\n \"name\": \"getStiChildMetaType\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"string | null\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"query\": {\n \"name\": \"query\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"sql\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"params\",\n \"type\": \"any\",\n \"optional\": true\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<ModelType[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"remember\": {\n \"name\": \"remember\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"recall\": {\n \"name\": \"recall\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"recallAll\": {\n \"name\": \"recallAll\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Map<string>>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"forget\": {\n \"name\": \"forget\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"forgetScope\": {\n \"name\": \"forgetScope\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<number>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"semanticSearch\": {\n \"name\": \"semanticSearch\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Array>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findSimilar\": {\n \"name\": \"findSimilar\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"object\",\n \"type\": \"ModelType | string\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Array>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"findSimilarToEmbedding\": {\n \"name\": \"findSimilarToEmbedding\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"embedding\",\n \"type\": \"number[]\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Array>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"generateMissingEmbeddings\": {\n \"name\": \"generateMissingEmbeddings\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<object>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtClass\",\n \"exportName\": \"SmrtCollection\",\n \"collectionExportName\": \"SmrtCollectionCollection\",\n \"schema\": {\n \"tableName\": \"smrt_collections\",\n \"ddl\": \"CREATE TABLE IF NOT EXISTS \\\"smrt_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\n \"columns\": {\n \"id\": {\n \"type\": \"UUID\",\n \"primaryKey\": true,\n \"referenceKind\": \"id\",\n \"notNull\": true\n },\n \"slug\": {\n \"type\": \"TEXT\",\n \"notNull\": true\n },\n \"context\": {\n \"type\": \"TEXT\",\n \"notNull\": true,\n \"default\": \"\"\n },\n \"created_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n },\n \"updated_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n }\n },\n \"indexes\": [\n {\n \"name\": \"smrt_collections_slug_context_idx\",\n \"columns\": [\n \"slug\",\n \"context\"\n ],\n \"unique\": true\n },\n {\n \"name\": \"smrt_collections_created_at_idx\",\n \"columns\": [\n \"created_at\"\n ]\n }\n ],\n \"version\": \"295b0a80\"\n }\n },\n \"@happyvertical/smrt-core:SmrtHierarchical\": {\n \"name\": \"smrthierarchical\",\n \"className\": \"SmrtHierarchical\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtHierarchical\",\n \"collection\": \"smrthierarchicals\",\n \"filePath\": \"packages/core/src/hierarchical.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {\n \"parentId\": {\n \"type\": \"text\",\n \"required\": false\n }\n },\n \"methods\": {\n \"getParent\": {\n \"name\": \"getParent\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getChildren\": {\n \"name\": \"getChildren\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getAncestors\": {\n \"name\": \"getAncestors\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getDescendants\": {\n \"name\": \"getDescendants\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getHierarchy\": {\n \"name\": \"getHierarchy\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<HierarchyView>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"moveTo\": {\n \"name\": \"moveTo\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"newParent\",\n \"type\": \"string | null\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtObject\",\n \"exportName\": \"SmrtHierarchical\",\n \"collectionExportName\": \"SmrtHierarchicalCollection\"\n },\n \"@happyvertical/smrt-core:SmrtJunction\": {\n \"name\": \"smrtjunction\",\n \"className\": \"SmrtJunction\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtJunction\",\n \"collection\": \"smrtjunctions\",\n \"filePath\": \"packages/core/src/junction.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {},\n \"methods\": {\n \"byLeft\": {\n \"name\": \"byLeft\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"leftId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionFilterOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<TItem[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"byRight\": {\n \"name\": \"byRight\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"rightId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionFilterOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<TItem[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"attach\": {\n \"name\": \"attach\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"leftId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"rightId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionAttachOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<TItem>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"detach\": {\n \"name\": \"detach\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"leftId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"rightId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionFilterOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"setLinks\": {\n \"name\": \"setLinks\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"leftId\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"rightIds\",\n \"type\": \"string[]\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"JunctionAttachOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtCollection\",\n \"extendsTypeArg\": \"TItem\",\n \"exportName\": \"SmrtJunction\",\n \"collectionExportName\": \"SmrtJunctionCollection\"\n },\n \"@happyvertical/smrt-core:SmrtObject\": {\n \"name\": \"smrtobject\",\n \"className\": \"SmrtObject\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtObject\",\n \"collection\": \"smrtobjects\",\n \"filePath\": \"packages/core/src/object.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {\n \"created_at\": {\n \"type\": \"datetime\",\n \"required\": false\n },\n \"updated_at\": {\n \"type\": \"datetime\",\n \"required\": false\n }\n },\n \"methods\": {\n \"markAsPersisted\": {\n \"name\": \"markAsPersisted\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"requireInsertOnSave\": {\n \"name\": \"requireInsertOnSave\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"initialize\": {\n \"name\": \"initialize\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"loadDataFromDb\": {\n \"name\": \"loadDataFromDb\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"data\",\n \"type\": \"Record<string>\",\n \"optional\": false\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getFields\": {\n \"name\": \"getFields\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<any>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"toJSON\": {\n \"name\": \"toJSON\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"toPlainObject\": {\n \"name\": \"toPlainObject\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"Record<string>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"toPublicJSON\": {\n \"name\": \"toPublicJSON\",\n \"async\": false,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"PublicJsonOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Record<string>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getId\": {\n \"name\": \"getId\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getSlug\": {\n \"name\": \"getSlug\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getSavedId\": {\n \"name\": \"getSavedId\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"isSaved\": {\n \"name\": \"isSaved\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"save\": {\n \"name\": \"save\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"classifyConstraintError\": {\n \"name\": \"classifyConstraintError\",\n \"async\": false,\n \"parameters\": [\n {\n \"name\": \"message\",\n \"type\": \"string\",\n \"optional\": false\n }\n ],\n \"returnType\": \"'unique' | 'not_null' | null\",\n \"isStatic\": true,\n \"isPublic\": true\n },\n \"loadFromId\": {\n \"name\": \"loadFromId\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"loadFromSlug\": {\n \"name\": \"loadFromSlug\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"is\": {\n \"name\": \"is\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"criteria\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"AiOperationOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"do\": {\n \"name\": \"do\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"instructions\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"options\",\n \"type\": \"AiOperationOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"describe\": {\n \"name\": \"describe\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"AiOperationOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"any\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"delete\": {\n \"name\": \"delete\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"isRelatedLoaded\": {\n \"name\": \"isRelatedLoaded\",\n \"async\": false,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n }\n ],\n \"returnType\": \"boolean\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"_setLoadedRelationship\": {\n \"name\": \"_setLoadedRelationship\",\n \"async\": false,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"value\",\n \"type\": \"any\",\n \"optional\": false\n }\n ],\n \"returnType\": \"void\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"loadRelated\": {\n \"name\": \"loadRelated\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"LoadRelatedOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<any>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"loadRelatedMany\": {\n \"name\": \"loadRelatedMany\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"LoadRelatedOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<any[]>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getRelated\": {\n \"name\": \"getRelated\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"opts\",\n \"type\": \"LoadRelatedOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<any>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getAvailableTools\": {\n \"name\": \"getAvailableTools\",\n \"async\": false,\n \"parameters\": [],\n \"returnType\": \"AITool[]\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"executeToolCall\": {\n \"name\": \"executeToolCall\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"toolCall\",\n \"type\": \"ToolCall\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<ToolCallResult>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"remember\": {\n \"name\": \"remember\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"recall\": {\n \"name\": \"recall\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"recallAll\": {\n \"name\": \"recallAll\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<Map<string>>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"forget\": {\n \"name\": \"forget\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"forgetScope\": {\n \"name\": \"forgetScope\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"object\",\n \"optional\": false\n }\n ],\n \"returnType\": \"Promise<number>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"generateEmbeddings\": {\n \"name\": \"generateEmbeddings\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"options\",\n \"type\": \"GenerateEmbeddingsOptions\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"getEmbedding\": {\n \"name\": \"getEmbedding\",\n \"async\": true,\n \"parameters\": [\n {\n \"name\": \"fieldName\",\n \"type\": \"string\",\n \"optional\": false\n },\n {\n \"name\": \"model\",\n \"type\": \"string\",\n \"optional\": true\n }\n ],\n \"returnType\": \"Promise<number[] | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"hasStaleEmbeddings\": {\n \"name\": \"hasStaleEmbeddings\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<boolean>\",\n \"isStatic\": false,\n \"isPublic\": true\n },\n \"clearEmbeddings\": {\n \"name\": \"clearEmbeddings\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<void>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtClass\",\n \"exportName\": \"SmrtObject\",\n \"collectionExportName\": \"SmrtObjectCollection\",\n \"schema\": {\n \"tableName\": \"smrt_objects\",\n \"ddl\": \"CREATE TABLE IF NOT EXISTS \\\"smrt_objects\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\n \"columns\": {\n \"id\": {\n \"type\": \"UUID\",\n \"primaryKey\": true,\n \"referenceKind\": \"id\",\n \"notNull\": true\n },\n \"slug\": {\n \"type\": \"TEXT\",\n \"notNull\": true\n },\n \"context\": {\n \"type\": \"TEXT\",\n \"notNull\": true,\n \"default\": \"\"\n },\n \"created_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n },\n \"updated_at\": {\n \"type\": \"TIMESTAMP\",\n \"notNull\": true,\n \"default\": \"current_timestamp\"\n }\n },\n \"indexes\": [\n {\n \"name\": \"smrt_objects_slug_context_idx\",\n \"columns\": [\n \"slug\",\n \"context\"\n ],\n \"unique\": true\n },\n {\n \"name\": \"smrt_objects_created_at_idx\",\n \"columns\": [\n \"created_at\"\n ]\n }\n ],\n \"version\": \"204bf3c4\"\n }\n },\n \"@happyvertical/smrt-core:SmrtPolymorphicAssociation\": {\n \"name\": \"smrtpolymorphicassociation\",\n \"className\": \"SmrtPolymorphicAssociation\",\n \"qualifiedName\": \"@happyvertical/smrt-core:SmrtPolymorphicAssociation\",\n \"collection\": \"smrtpolymorphicassociations\",\n \"filePath\": \"packages/core/src/polymorphic-association.ts\",\n \"packageName\": \"@happyvertical/smrt-core\",\n \"fields\": {\n \"metaType\": {\n \"type\": \"text\",\n \"required\": true,\n \"_meta\": {\n \"required\": true\n }\n },\n \"metaId\": {\n \"type\": \"text\",\n \"required\": true,\n \"_meta\": {\n \"required\": true\n }\n },\n \"role\": {\n \"type\": \"text\",\n \"required\": true,\n \"_meta\": {\n \"required\": true\n }\n },\n \"sortOrder\": {\n \"type\": \"integer\",\n \"required\": false,\n \"default\": 0\n }\n },\n \"methods\": {\n \"hydrate\": {\n \"name\": \"hydrate\",\n \"async\": true,\n \"parameters\": [],\n \"returnType\": \"Promise<T | null>\",\n \"isStatic\": false,\n \"isPublic\": true\n }\n },\n \"decoratorConfig\": {},\n \"extends\": \"SmrtObject\",\n \"exportName\": \"SmrtPolymorphicAssociation\",\n \"collectionExportName\": \"SmrtPolymorphicAssociationCollection\",\n \"validationRules\": [\n {\n \"field\": \"metaType\",\n \"rule\": \"required\",\n \"fieldType\": \"text\"\n },\n {\n \"field\": \"metaId\",\n \"rule\": \"required\",\n \"fieldType\": \"text\"\n },\n {\n \"field\": \"role\",\n \"rule\": \"required\",\n \"fieldType\": \"text\"\n }\n ]\n }\n },\n \"moduleType\": \"smrt\"\n} as const;\n\nexport default staticManifest;\n"],"mappings":"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"}