@happyvertical/smrt-prompts 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +36 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +49 -0
- package/dist/index.d.ts +169 -0
- package/dist/index.js +784 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.json +369 -0
- package/dist/smrt-knowledge.json +286 -0
- package/dist/types.d.ts +106 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/__smrt-register__.ts","../src/cache.ts","../src/utils.ts","../src/prompt-registry.ts","../src/models/PromptOverride.ts","../src/collections/PromptOverrideCollection.ts","../src/prompt-resolver.ts","../src/index.ts"],"sourcesContent":["/**\n * Self-registers this package's build-time manifest before any @smrt()\n * decorator in the package fires. Fixes issue #1132: in consumer runtimes\n * (tsx, SvelteKit SSR, plain `vite dev`) the decorator's synchronous manifest\n * lookup previously missed because no step populated the global manifest cache\n * — classes got registered with zero fields and `save()` / `toJSON()`\n * silently dropped every declared property.\n *\n * Import this module as the first statement in `src/index.ts` so its top-level\n * side effect runs ahead of any class module's @smrt() decorator.\n *\n * Silent no-op in dev/test, where the vitest plugin already populates\n * manifests via a different path. Only needs to succeed in the published dist\n * output.\n *\n * @see https://github.com/happyvertical/smrt/issues/1132\n */\nimport { ObjectRegistry } from '@happyvertical/smrt-core';\n\n// `new URL('./manifest.json', import.meta.url)` resolves at runtime to the\n// manifest sitting next to this module's compiled output. Vite warns at build\n// time that it cannot pre-resolve the URL; that is the intended behavior —\n// the URL must resolve to dist/manifest.json at runtime, not be inlined.\nObjectRegistry.registerPackageManifest(\n new URL('./manifest.json', import.meta.url),\n);\n","import type { DatabaseInterface } from '@happyvertical/sql';\nimport type { PromptCacheValue } from './types.js';\n\nconst PROMPT_CACHE_TTL_MS = 30_000;\n\ntype CacheEntry = {\n expiresAt: number;\n value: PromptCacheValue;\n};\n\nconst promptCache = new Map<string, CacheEntry>();\nconst dbInstanceIds = new WeakMap<object, string>();\nlet nextDbId = 1;\n\nfunction getDbNamespace(db: unknown): string {\n if (!db) {\n return 'no-db';\n }\n\n if (typeof db === 'string') {\n return `db:${db}`;\n }\n\n if (typeof db === 'object') {\n const dbObject = db as Record<string, unknown>;\n if (typeof dbObject.query === 'function') {\n if (!dbInstanceIds.has(dbObject)) {\n dbInstanceIds.set(dbObject, `db-instance:${nextDbId++}`);\n }\n const namespace = dbInstanceIds.get(dbObject);\n if (namespace) {\n return namespace;\n }\n\n return 'db-instance:unknown';\n }\n\n try {\n return `db-config:${JSON.stringify(dbObject)}`;\n } catch {\n return 'db-config:opaque';\n }\n }\n\n return 'db:unknown';\n}\n\nfunction buildCacheKey(\n key: string,\n tenantId: string | null | undefined,\n db: DatabaseInterface | unknown,\n): string {\n return `${getDbNamespace(db)}::${key}::${tenantId ?? 'app'}`;\n}\n\nexport function getPromptCacheTtlMs(): number {\n return PROMPT_CACHE_TTL_MS;\n}\n\nexport function getCachedPromptBase(\n key: string,\n tenantId: string | null | undefined,\n db: DatabaseInterface | unknown,\n): PromptCacheValue | null {\n const cacheKey = buildCacheKey(key, tenantId, db);\n const cached = promptCache.get(cacheKey);\n\n if (!cached) {\n return null;\n }\n\n if (cached.expiresAt <= Date.now()) {\n promptCache.delete(cacheKey);\n return null;\n }\n\n return cached.value;\n}\n\nexport function setCachedPromptBase(\n key: string,\n tenantId: string | null | undefined,\n db: DatabaseInterface | unknown,\n value: PromptCacheValue,\n): void {\n promptCache.set(buildCacheKey(key, tenantId, db), {\n expiresAt: Date.now() + PROMPT_CACHE_TTL_MS,\n value,\n });\n}\n\nexport function invalidatePromptCache(\n key: string,\n tenantId: string | null | undefined,\n db: DatabaseInterface | unknown,\n): void {\n const dbNamespace = getDbNamespace(db);\n\n if (tenantId !== null && tenantId !== undefined) {\n promptCache.delete(buildCacheKey(key, tenantId, db));\n return;\n }\n\n const keyPrefix = `${dbNamespace}::${key}::`;\n for (const cacheKey of promptCache.keys()) {\n if (cacheKey.startsWith(keyPrefix)) {\n promptCache.delete(cacheKey);\n }\n }\n}\n\nexport function clearPromptCache(): void {\n promptCache.clear();\n}\n","import type {\n NormalizedPromptAI,\n PromptAIInput,\n PromptConfigOverrideInput,\n PromptDefinitionInput,\n PromptEditableConfig,\n PromptLayer,\n PromptPackageConfig,\n PromptParams,\n PromptProfileConfig,\n ResolvedPromptAI,\n} from './types.js';\n\nconst DEFAULT_EDITABLE: PromptEditableConfig = {\n template: false,\n profile: false,\n model: false,\n params: false,\n};\n\nconst TOP_LEVEL_RESERVED_KEYS = new Set([\n 'key',\n 'editable',\n 'template',\n 'ai',\n 'profile',\n 'provider',\n 'model',\n 'params',\n 'temperature',\n 'maxTokens',\n]);\n\nconst AI_RESERVED_KEYS = new Set([\n 'profile',\n 'provider',\n 'model',\n 'params',\n 'temperature',\n 'maxTokens',\n]);\n\nconst AI_ROUTING_PARAM_KEYS = new Set([\n 'profile',\n 'provider',\n 'type',\n 'model',\n 'defaultModel',\n]);\n\nexport function isPlainObject(\n value: unknown,\n): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function normalizeEditableConfig(\n editable?: Partial<PromptEditableConfig>,\n): PromptEditableConfig {\n return {\n template: editable?.template ?? DEFAULT_EDITABLE.template,\n profile: editable?.profile ?? DEFAULT_EDITABLE.profile,\n model: editable?.model ?? DEFAULT_EDITABLE.model,\n params: editable?.params ?? DEFAULT_EDITABLE.params,\n };\n}\n\nfunction extractPromptParams(\n source: Record<string, unknown>,\n reservedKeys: Set<string>,\n): PromptParams {\n const params: PromptParams = {};\n\n if (isPlainObject(source.params)) {\n Object.assign(params, sanitizePromptParams(source.params));\n }\n\n if ('temperature' in source && source.temperature !== undefined) {\n params.temperature = source.temperature;\n }\n\n if ('maxTokens' in source && source.maxTokens !== undefined) {\n params.maxTokens = source.maxTokens;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (reservedKeys.has(key) || value === undefined) {\n continue;\n }\n assignPromptParam(params, key, value);\n }\n\n return params;\n}\n\nfunction assignPromptParam(\n params: PromptParams,\n key: string,\n value: unknown,\n): void {\n if (AI_ROUTING_PARAM_KEYS.has(key) || value === undefined) {\n return;\n }\n\n params[key] = value;\n}\n\nexport function sanitizePromptParams(\n params: PromptParams | null | undefined,\n): PromptParams {\n const sanitized: PromptParams = {};\n\n if (!params) {\n return sanitized;\n }\n\n for (const [key, value] of Object.entries(params)) {\n assignPromptParam(sanitized, key, value);\n }\n\n return sanitized;\n}\n\nexport function mergePromptParams(\n ...paramLayers: Array<PromptParams | null | undefined>\n): PromptParams {\n const merged: PromptParams = {};\n\n for (const layer of paramLayers) {\n if (!layer) {\n continue;\n }\n\n for (const [key, value] of Object.entries(layer)) {\n assignPromptParam(merged, key, value);\n }\n }\n\n return merged;\n}\n\nfunction normalizeAIInput(ai?: PromptAIInput | null): NormalizedPromptAI {\n if (!isPlainObject(ai)) {\n return { params: {} };\n }\n\n const profile =\n typeof ai.profile === 'string' || ai.profile === null\n ? ai.profile\n : undefined;\n const model =\n typeof ai.model === 'string' || ai.model === null ? ai.model : undefined;\n\n return {\n profile: profile ?? undefined,\n model: model ?? undefined,\n params: extractPromptParams(ai, AI_RESERVED_KEYS),\n };\n}\n\nexport function normalizePromptDefinitionInput(input: PromptDefinitionInput): {\n key: string;\n template: string;\n ai: NormalizedPromptAI;\n editable: PromptEditableConfig;\n} {\n return {\n key: input.key,\n template: input.template,\n ai: normalizeAIInput(input.ai),\n editable: normalizeEditableConfig(input.editable),\n };\n}\n\nexport function normalizePromptLayer(\n input?: PromptConfigOverrideInput | null,\n): PromptLayer {\n if (!isPlainObject(input)) {\n return {};\n }\n\n const nestedAi = isPlainObject(input.ai)\n ? normalizeAIInput(input.ai)\n : { params: {} };\n const topLevelParams = extractPromptParams(input, TOP_LEVEL_RESERVED_KEYS);\n\n return {\n template:\n input.template === undefined\n ? undefined\n : input.template === null\n ? null\n : String(input.template),\n profile:\n input.profile === undefined\n ? nestedAi.profile\n : input.profile === null\n ? null\n : String(input.profile),\n model:\n input.model === undefined\n ? nestedAi.model\n : input.model === null\n ? null\n : String(input.model),\n params: mergePromptParams(topLevelParams, nestedAi.params),\n };\n}\n\nexport function mergePromptLayers(\n ...layers: Array<PromptLayer | null | undefined>\n): {\n template: string;\n ai: NormalizedPromptAI;\n} {\n let template = '';\n let profile: string | undefined;\n let model: string | undefined;\n let params: PromptParams = {};\n\n for (const layer of layers) {\n if (!layer) {\n continue;\n }\n\n if (layer.template !== undefined && layer.template !== null) {\n template = layer.template;\n }\n\n if (layer.profile !== undefined && layer.profile !== null) {\n profile = layer.profile;\n }\n\n if (layer.model !== undefined && layer.model !== null) {\n model = layer.model;\n }\n\n if (layer.params !== undefined && layer.params !== null) {\n params = mergePromptParams(params, layer.params);\n }\n }\n\n return {\n template,\n ai: {\n profile,\n model,\n params,\n },\n };\n}\n\nexport function normalizeProfileConfig(profile: PromptProfileConfig): {\n provider: string;\n model: string;\n params: PromptParams;\n} {\n const source = isPlainObject(profile) ? profile : {};\n const params = extractPromptParams(source, new Set(['provider', 'model']));\n\n return {\n provider: String(profile.provider),\n model: String(profile.model),\n params,\n };\n}\n\nexport function validateProfileName(\n profileName: string,\n config: PromptPackageConfig,\n): void {\n if (profileName.trim() === '') {\n throw new Error('Prompt profile names cannot be empty');\n }\n\n const allowedProfileNames = config.allowedProfileNames;\n if (\n Array.isArray(allowedProfileNames) &&\n !allowedProfileNames.includes(profileName)\n ) {\n throw new Error(\n `Prompt profile \"${profileName}\" is not in the allowed profile list`,\n );\n }\n\n if (!config.profiles?.[profileName]) {\n throw new Error(`Prompt profile \"${profileName}\" is not configured`);\n }\n}\n\nexport function validateModelName(\n modelName: string,\n config: PromptPackageConfig,\n): void {\n if (modelName.trim() === '') {\n throw new Error('Prompt model overrides cannot be empty');\n }\n\n const allowedModels = config.allowedModels;\n if (Array.isArray(allowedModels) && !allowedModels.includes(modelName)) {\n throw new Error(\n `Prompt model \"${modelName}\" is not in the allowed model list`,\n );\n }\n}\n\nexport function buildResolvedAI(\n ai: NormalizedPromptAI,\n config: PromptPackageConfig,\n): ResolvedPromptAI {\n let provider: string | undefined;\n let model = ai.model;\n let params = ai.params;\n\n if (ai.profile) {\n validateProfileName(ai.profile, config);\n const configuredProfile = config.profiles?.[ai.profile];\n if (!configuredProfile) {\n throw new Error(`Prompt profile \"${ai.profile}\" is not configured`);\n }\n const profileConfig = normalizeProfileConfig(configuredProfile);\n provider = profileConfig.provider;\n model = model ?? profileConfig.model;\n params = mergePromptParams(profileConfig.params, params);\n }\n\n if (ai.model) {\n validateModelName(ai.model, config);\n }\n\n if (ai.model && !ai.profile) {\n throw new Error(\n 'Direct prompt model overrides require an effective prompt profile',\n );\n }\n\n if (model && !ai.model && config.allowedModels) {\n validateModelName(model, config);\n }\n\n const resolved: ResolvedPromptAI = {\n ...params,\n profile: ai.profile,\n provider,\n model,\n ...(config.allowedModels\n ? { allowedModels: [...config.allowedModels] }\n : {}),\n params,\n };\n\n if (typeof params.temperature === 'number') {\n resolved.temperature = params.temperature;\n }\n\n if (typeof params.maxTokens === 'number') {\n resolved.maxTokens = params.maxTokens;\n }\n\n return resolved;\n}\n\nexport function renderPromptTemplate(\n template: string,\n variables?: Record<string, unknown>,\n): string {\n if (!variables || Object.keys(variables).length === 0) {\n return template;\n }\n\n return template.replace(/\\{([^{}]+)\\}/g, (_match, rawKey: string) => {\n const key = rawKey.trim();\n const value = variables[key];\n\n if (value === undefined || value === null) {\n return '';\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (Array.isArray(value) || isPlainObject(value)) {\n try {\n return JSON.stringify(value);\n } catch {\n return '';\n }\n }\n\n return String(value);\n });\n}\n\nexport function parsePromptParams(\n raw: string | null | undefined,\n): PromptParams {\n if (!raw) {\n return {};\n }\n\n try {\n const parsed = JSON.parse(raw);\n return isPlainObject(parsed) ? sanitizePromptParams(parsed) : {};\n } catch {\n return {};\n }\n}\n\nexport function serializePromptParams(\n params: PromptParams | null | undefined,\n): string | null {\n if (params === null || params === undefined) {\n return null;\n }\n\n return JSON.stringify(sanitizePromptParams(params));\n}\n","import type { PromptDefinition, PromptDefinitionInput } from './types.js';\nimport { normalizePromptDefinitionInput } from './utils.js';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __smrtPromptRegistry: Map<string, PromptDefinition> | undefined;\n}\n\nfunction getRegistry(): Map<string, PromptDefinition> {\n if (!globalThis.__smrtPromptRegistry) {\n globalThis.__smrtPromptRegistry = new Map<string, PromptDefinition>();\n }\n\n return globalThis.__smrtPromptRegistry;\n}\n\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(',')}]`;\n }\n\n if (value && typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([left], [right]) => left.localeCompare(right),\n );\n return `{${entries\n .map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`)\n .join(',')}}`;\n }\n\n return JSON.stringify(value);\n}\n\nexport const PromptRegistry = {\n register(input: PromptDefinitionInput): PromptDefinition {\n if (!input.key || input.key.trim() === '') {\n throw new Error('Prompt definitions require a non-empty key');\n }\n\n const definition = normalizePromptDefinitionInput(input);\n const registry = getRegistry();\n const existing = registry.get(definition.key);\n\n if (existing) {\n const existingSignature = stableStringify(existing);\n const incomingSignature = stableStringify(definition);\n\n if (existingSignature !== incomingSignature) {\n throw new Error(\n `Prompt \"${definition.key}\" is already registered with a different definition`,\n );\n }\n\n return existing;\n }\n\n registry.set(definition.key, definition);\n return definition;\n },\n\n get(key: string): PromptDefinition | undefined {\n return getRegistry().get(key);\n },\n\n has(key: string): boolean {\n return getRegistry().has(key);\n },\n\n getAll(): PromptDefinition[] {\n return Array.from(getRegistry().values());\n },\n\n clear(): void {\n getRegistry().clear();\n },\n};\n\nexport function definePrompt(input: PromptDefinitionInput): PromptDefinition {\n return PromptRegistry.register(input);\n}\n","import { getPackageConfig } from '@happyvertical/smrt-config';\nimport {\n field,\n SmrtObject,\n type SmrtObjectOptions,\n smrt,\n} from '@happyvertical/smrt-core';\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport { invalidatePromptCache } from '../cache.js';\nimport { PromptRegistry } from '../prompt-registry.js';\nimport type {\n PromptLayer,\n PromptPackageConfig,\n PromptParams,\n} from '../types.js';\nimport {\n mergePromptLayers,\n normalizePromptLayer,\n parsePromptParams,\n serializePromptParams,\n validateModelName,\n validateProfileName,\n} from '../utils.js';\n\nexport interface PromptOverrideOptions extends SmrtObjectOptions {\n key?: string;\n tenantId?: string | null;\n template?: string | null;\n profile?: string | null;\n model?: string | null;\n params?: string | PromptParams | null;\n}\n\ntype PromptOverrideIdentity = {\n key: string;\n tenantId: string | null;\n};\n\ntype PromptTransactionHandle = DatabaseInterface & {\n commit: () => Promise<void>;\n rollback: () => Promise<void>;\n};\n\nfunction getPromptConfig(): PromptPackageConfig {\n return getPackageConfig<PromptPackageConfig>('prompts', {\n profiles: {},\n prompts: {},\n });\n}\n\n@smrt({\n tableName: '_smrt_prompt_overrides',\n conflictColumns: ['key', 'context'],\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n cli: {\n include: ['list', 'get', 'create', 'update', 'delete'],\n exclude: ['getParams', 'setParams', 'toPromptLayer'],\n },\n mcp: { include: [] },\n})\nexport class PromptOverride extends SmrtObject {\n @field({ required: true })\n key: string = '';\n\n @field({ type: 'text', nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', nullable: true })\n template: string | null = null;\n\n @field({ type: 'text', nullable: true })\n profile: string | null = null;\n\n @field({ type: 'text', nullable: true })\n model: string | null = null;\n\n @field({ type: 'text', nullable: true })\n params: string | null = null;\n\n constructor(options: PromptOverrideOptions = {}) {\n super(options);\n\n if (options.key !== undefined) this.key = options.key;\n if (options.tenantId !== undefined) this.tenantId = options.tenantId;\n if (options.template !== undefined) this.template = options.template;\n if (options.profile !== undefined) this.profile = options.profile;\n if (options.model !== undefined) this.model = options.model;\n if (options.params !== undefined) {\n if (typeof options.params === 'string' || options.params === null) {\n this.params = options.params;\n } else {\n this.params = serializePromptParams(options.params);\n }\n }\n }\n\n getParams(): PromptParams {\n return parsePromptParams(this.params);\n }\n\n setParams(params: PromptParams | null): void {\n this.params = serializePromptParams(params);\n }\n\n toPromptLayer(): PromptLayer {\n return {\n template: this.template,\n profile: this.profile,\n model: this.model,\n params: this.params === null ? null : this.getParams(),\n };\n }\n\n override async save(): Promise<this> {\n const previousIdentity = await this.getPersistedIdentity();\n this.normalizeParamsForPersistence();\n await this.validatePromptOverride();\n // Use context as the uniqueness scope so app-level rows remain unique even\n // though tenantId is nullable and would otherwise allow multiple NULL rows.\n this.context = this.tenantId ?? '__app__';\n const identityChanged =\n previousIdentity &&\n (previousIdentity.key !== this.key ||\n previousIdentity.tenantId !== this.tenantId);\n\n const result =\n identityChanged && previousIdentity\n ? await this.saveAfterIdentityChange()\n : await super.save();\n\n if (identityChanged && previousIdentity) {\n invalidatePromptCache(\n previousIdentity.key,\n previousIdentity.tenantId,\n this.db,\n );\n }\n invalidatePromptCache(this.key, this.tenantId, this.db);\n return result;\n }\n\n private async saveAfterIdentityChange(): Promise<this> {\n if (typeof this.db.beginTransaction === 'function') {\n return this.saveAfterIdentityChangeInTransaction();\n }\n\n return this.saveAfterIdentityChangeWithDeferredDelete();\n }\n\n private async saveAfterIdentityChangeInTransaction(): Promise<this> {\n const originalDb = this._db;\n const originalOptionsDb = this.options.db;\n const tx = (await this.db.beginTransaction?.()) as\n | PromptTransactionHandle\n | undefined;\n\n if (!tx) {\n return this.saveAfterIdentityChangeWithDeferredDelete();\n }\n\n try {\n this._db = tx;\n this.options.db = tx;\n await super.delete();\n const result = await super.save();\n await tx.commit();\n return result;\n } catch (error) {\n try {\n await tx.rollback();\n } catch {\n // Preserve the original save error; rollback failures are secondary.\n }\n throw error;\n } finally {\n this._db = originalDb;\n this.options.db = originalOptionsDb;\n }\n }\n\n private async saveAfterIdentityChangeWithDeferredDelete(): Promise<this> {\n const previousId = this.id;\n if (!previousId) {\n return super.save();\n }\n\n const replacementId = crypto.randomUUID();\n let replacementSaved = false;\n this.id = replacementId;\n\n try {\n const result = await super.save();\n replacementSaved = true;\n await this.db.delete(this.tableName, { id: previousId });\n return result;\n } catch (error) {\n if (replacementSaved) {\n try {\n await this.db.delete(this.tableName, { id: replacementId });\n } catch {\n // Best effort cleanup keeps the original row as the source of truth.\n }\n }\n\n this.id = previousId;\n throw error;\n }\n }\n\n override async delete(): Promise<void> {\n const key = this.key;\n const tenantId = this.tenantId;\n await super.delete();\n invalidatePromptCache(key, tenantId, this.db);\n }\n\n private async validatePromptOverride(): Promise<void> {\n if (!this.key || this.key.trim() === '') {\n throw new Error('PromptOverride.key is required');\n }\n\n const definition = PromptRegistry.get(this.key);\n if (!definition) {\n throw new Error(`Unknown prompt key \"${this.key}\"`);\n }\n\n const config = getPromptConfig();\n const editable = definition.editable;\n\n if (this.template !== null && !editable.template) {\n throw new Error(`Prompt \"${this.key}\" does not allow template overrides`);\n }\n\n if (this.profile !== null && !editable.profile) {\n throw new Error(`Prompt \"${this.key}\" does not allow profile overrides`);\n }\n\n if (this.model !== null && !editable.model) {\n throw new Error(`Prompt \"${this.key}\" does not allow model overrides`);\n }\n\n if (this.params !== null && !editable.params) {\n throw new Error(`Prompt \"${this.key}\" does not allow params overrides`);\n }\n\n if (this.params !== null) {\n try {\n const parsed = JSON.parse(this.params);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('Prompt params must be a JSON object');\n }\n } catch (error) {\n throw new Error(\n `Prompt \"${this.key}\" has invalid params JSON: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n if (this.profile !== null) {\n validateProfileName(this.profile, config);\n }\n\n if (this.model !== null) {\n validateModelName(this.model, config);\n }\n\n const lowerLayers = await this.getLowerPrecedenceLayers();\n const currentLayer = this.toPromptLayer();\n const merged = mergePromptLayers(...lowerLayers, currentLayer);\n\n if (currentLayer.model && !merged.ai.profile) {\n throw new Error(\n `Prompt \"${this.key}\" model overrides require an effective prompt profile`,\n );\n }\n }\n\n private async getLowerPrecedenceLayers(): Promise<PromptLayer[]> {\n const definition = PromptRegistry.get(this.key);\n const config = getPromptConfig();\n const layers: PromptLayer[] = [];\n\n if (definition) {\n layers.push({\n template: definition.template,\n profile: definition.ai.profile ?? null,\n model: definition.ai.model ?? null,\n params: definition.ai.params,\n });\n }\n\n layers.push(normalizePromptLayer(config.prompts?.[this.key]));\n\n const { PromptOverrideCollection } = await import(\n '../collections/PromptOverrideCollection.js'\n );\n const collection = await (PromptOverrideCollection as any).create({\n db: this.options.db ?? this.options.persistence,\n });\n\n if (this.tenantId) {\n const appOverride = await collection.getAppOverride(this.key, {\n excludeId: this.id,\n });\n if (appOverride) {\n layers.push(appOverride.toPromptLayer());\n }\n }\n\n return layers;\n }\n\n private normalizeParamsForPersistence(): void {\n const rawParams = this.params as unknown;\n\n if (rawParams === null || rawParams === undefined) {\n this.params = null;\n return;\n }\n\n if (typeof rawParams === 'string') {\n this.params = rawParams;\n return;\n }\n\n if (typeof rawParams === 'object' && !Array.isArray(rawParams)) {\n this.params = serializePromptParams(rawParams as PromptParams);\n return;\n }\n\n throw new Error(\n `Prompt \"${this.key}\" params must be a JSON object or JSON string`,\n );\n }\n\n private async getPersistedIdentity(): Promise<PromptOverrideIdentity | null> {\n if (!this.id) {\n return null;\n }\n\n const existing = await this.db.get(this.tableName, { id: this.id });\n if (!existing) {\n return null;\n }\n\n return {\n key: String((existing as Record<string, unknown>).key ?? this.key),\n tenantId:\n (existing as Record<string, unknown>).tenantId !== undefined\n ? ((existing as Record<string, unknown>).tenantId as string | null)\n : (((existing as Record<string, unknown>).tenant_id as\n | string\n | null\n | undefined) ?? null),\n };\n }\n}\n","import { SmrtCollection } from '@happyvertical/smrt-core';\nimport { PromptOverride } from '../models/PromptOverride.js';\n\nexport class PromptOverrideCollection extends SmrtCollection<PromptOverride> {\n static readonly _itemClass = PromptOverride;\n\n private excludeOverrideId(\n items: PromptOverride[],\n excludeId?: string,\n ): PromptOverride[] {\n return items.filter((item) => (excludeId ? item.id !== excludeId : true));\n }\n\n async getAppOverride(\n key: string,\n options: { excludeId?: string } = {},\n ): Promise<PromptOverride | null> {\n const items = await this.list({ where: { key, tenantId: null } });\n return this.excludeOverrideId(items, options.excludeId)[0] ?? null;\n }\n\n async getTenantOverride(\n key: string,\n tenantId: string,\n options: { excludeId?: string } = {},\n ): Promise<PromptOverride | null> {\n const items = await this.list({ where: { key, tenantId } });\n return this.excludeOverrideId(items, options.excludeId)[0] ?? null;\n }\n\n async getResolutionLayers(\n key: string,\n tenantId?: string | null,\n options: { excludeId?: string } = {},\n ): Promise<{ app: PromptOverride | null; tenant: PromptOverride | null }> {\n const [app, tenant] = await Promise.all([\n this.getAppOverride(key, options),\n tenantId != null\n ? this.getTenantOverride(key, tenantId, options)\n : Promise.resolve(null),\n ]);\n\n return {\n app,\n tenant,\n };\n }\n}\n","import { getPackageConfig } from '@happyvertical/smrt-config';\nimport { getTenantId } from '@happyvertical/smrt-tenancy';\nimport { getCachedPromptBase, setCachedPromptBase } from './cache.js';\nimport { PromptOverrideCollection } from './collections/PromptOverrideCollection.js';\nimport { PromptRegistry } from './prompt-registry.js';\nimport type {\n PromptCacheValue,\n PromptPackageConfig,\n ResolvedPrompt,\n ResolvePromptOptions,\n} from './types.js';\nimport {\n buildResolvedAI,\n mergePromptLayers,\n normalizePromptLayer,\n renderPromptTemplate,\n} from './utils.js';\n\nfunction getPromptConfig(): PromptPackageConfig {\n return getPackageConfig<PromptPackageConfig>('prompts', {\n profiles: {},\n prompts: {},\n });\n}\n\nasync function loadPromptBase(\n key: string,\n options: ResolvePromptOptions,\n): Promise<PromptCacheValue> {\n const definition = PromptRegistry.get(key);\n if (!definition) {\n throw new Error(`Unknown prompt key \"${key}\"`);\n }\n\n const tenantId =\n options.tenantId !== undefined ? options.tenantId : (getTenantId() ?? null);\n\n let collection: PromptOverrideCollection | null = null;\n let cacheDb: ResolvePromptOptions['db'] | undefined = options.db;\n if (options.db) {\n const initializedCollection = await (\n PromptOverrideCollection as any\n ).create({\n db: options.db,\n });\n collection = initializedCollection;\n cacheDb = initializedCollection.db as ResolvePromptOptions['db'];\n }\n\n const cached = getCachedPromptBase(key, tenantId, cacheDb);\n if (cached) {\n return cached;\n }\n\n const config = getPromptConfig();\n const layers = [\n {\n template: definition.template,\n profile: definition.ai.profile ?? null,\n model: definition.ai.model ?? null,\n params: definition.ai.params,\n },\n normalizePromptLayer(config.prompts?.[key]),\n ];\n\n if (collection) {\n const stored = await collection.getResolutionLayers(key, tenantId);\n\n if (stored.app) {\n layers.push(stored.app.toPromptLayer());\n }\n\n if (stored.tenant) {\n layers.push(stored.tenant.toPromptLayer());\n }\n }\n\n const merged = mergePromptLayers(...layers);\n const value: PromptCacheValue = {\n key,\n template: merged.template,\n ai: merged.ai,\n };\n\n setCachedPromptBase(key, tenantId, cacheDb, value);\n return value;\n}\n\nexport async function resolvePrompt(\n key: string,\n options: ResolvePromptOptions = {},\n): Promise<ResolvedPrompt> {\n const config = getPromptConfig();\n const base = await loadPromptBase(key, options);\n const runtimeOverride = normalizePromptLayer(options.override);\n const merged = mergePromptLayers(\n {\n template: base.template,\n profile: base.ai.profile ?? null,\n model: base.ai.model ?? null,\n params: base.ai.params,\n },\n runtimeOverride,\n );\n\n return {\n key,\n template: merged.template,\n text: renderPromptTemplate(merged.template, options.variables),\n ai: buildResolvedAI(merged.ai, config),\n };\n}\n","/**\n * @happyvertical/smrt-prompts\n *\n * Code-first prompts with config overrides, stored app/tenant overrides,\n * and runtime resolution helpers for SMRT applications.\n *\n * @packageDocumentation\n */\n\n// Self-register this package's manifest before any @smrt() decorator fires\n// downstream. Must come first so the side effect runs ahead of the class\n// module loads below. See __smrt-register__.ts for issue #1132 context.\nimport './__smrt-register__.js';\n\nexport { clearPromptCache, getPromptCacheTtlMs } from './cache.js';\nexport { PromptOverrideCollection } from './collections/PromptOverrideCollection.js';\nexport {\n PromptOverride,\n type PromptOverrideOptions,\n} from './models/PromptOverride.js';\nexport { definePrompt, PromptRegistry } from './prompt-registry.js';\nexport { resolvePrompt } from './prompt-resolver.js';\nexport type {\n NormalizedPromptAI,\n PromptAIInput,\n PromptConfigOverrideInput,\n PromptDefinition,\n PromptDefinitionInput,\n PromptEditableConfig,\n PromptLayer,\n PromptPackageConfig,\n PromptParams,\n PromptProfileConfig,\n ResolvedPrompt,\n ResolvedPromptAI,\n ResolvePromptOptions,\n} from './types.js';\n\n/** @internal */\nexport const PACKAGE_VERSION_INITIALIZED = true;\n"],"names":["getPromptConfig","PromptOverrideCollection"],"mappings":"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"}
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"timestamp": 1782177079118,
|
|
4
|
+
"packageName": "@happyvertical/smrt-prompts",
|
|
5
|
+
"packageVersion": "0.30.0",
|
|
6
|
+
"objects": {
|
|
7
|
+
"@happyvertical/smrt-prompts:PromptOverride": {
|
|
8
|
+
"name": "promptoverride",
|
|
9
|
+
"className": "PromptOverride",
|
|
10
|
+
"qualifiedName": "@happyvertical/smrt-prompts:PromptOverride",
|
|
11
|
+
"collection": "promptoverrides",
|
|
12
|
+
"filePath": "/home/runner/_work/smrt/smrt/packages/prompts/src/models/PromptOverride.ts",
|
|
13
|
+
"packageName": "@happyvertical/smrt-prompts",
|
|
14
|
+
"fields": {
|
|
15
|
+
"key": {
|
|
16
|
+
"type": "text",
|
|
17
|
+
"required": true,
|
|
18
|
+
"default": "",
|
|
19
|
+
"_meta": {
|
|
20
|
+
"required": true
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"tenantId": {
|
|
24
|
+
"type": "text",
|
|
25
|
+
"required": false,
|
|
26
|
+
"_meta": {
|
|
27
|
+
"nullable": true
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"template": {
|
|
31
|
+
"type": "text",
|
|
32
|
+
"required": false,
|
|
33
|
+
"_meta": {
|
|
34
|
+
"nullable": true
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"profile": {
|
|
38
|
+
"type": "text",
|
|
39
|
+
"required": false,
|
|
40
|
+
"_meta": {
|
|
41
|
+
"nullable": true
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"model": {
|
|
45
|
+
"type": "text",
|
|
46
|
+
"required": false,
|
|
47
|
+
"_meta": {
|
|
48
|
+
"nullable": true
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"params": {
|
|
52
|
+
"type": "text",
|
|
53
|
+
"required": false,
|
|
54
|
+
"_meta": {
|
|
55
|
+
"nullable": true
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"methods": {
|
|
60
|
+
"getParams": {
|
|
61
|
+
"name": "getParams",
|
|
62
|
+
"async": false,
|
|
63
|
+
"parameters": [],
|
|
64
|
+
"returnType": "PromptParams",
|
|
65
|
+
"isStatic": false,
|
|
66
|
+
"isPublic": true
|
|
67
|
+
},
|
|
68
|
+
"setParams": {
|
|
69
|
+
"name": "setParams",
|
|
70
|
+
"async": false,
|
|
71
|
+
"parameters": [
|
|
72
|
+
{
|
|
73
|
+
"name": "params",
|
|
74
|
+
"type": "PromptParams | null",
|
|
75
|
+
"optional": false
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"returnType": "void",
|
|
79
|
+
"isStatic": false,
|
|
80
|
+
"isPublic": true
|
|
81
|
+
},
|
|
82
|
+
"toPromptLayer": {
|
|
83
|
+
"name": "toPromptLayer",
|
|
84
|
+
"async": false,
|
|
85
|
+
"parameters": [],
|
|
86
|
+
"returnType": "PromptLayer",
|
|
87
|
+
"isStatic": false,
|
|
88
|
+
"isPublic": true
|
|
89
|
+
},
|
|
90
|
+
"save": {
|
|
91
|
+
"name": "save",
|
|
92
|
+
"async": true,
|
|
93
|
+
"parameters": [],
|
|
94
|
+
"returnType": "Promise",
|
|
95
|
+
"isStatic": false,
|
|
96
|
+
"isPublic": true
|
|
97
|
+
},
|
|
98
|
+
"delete": {
|
|
99
|
+
"name": "delete",
|
|
100
|
+
"async": true,
|
|
101
|
+
"parameters": [],
|
|
102
|
+
"returnType": "Promise<void>",
|
|
103
|
+
"isStatic": false,
|
|
104
|
+
"isPublic": true
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"decoratorConfig": {
|
|
108
|
+
"tableName": "_smrt_prompt_overrides",
|
|
109
|
+
"conflictColumns": [
|
|
110
|
+
"key",
|
|
111
|
+
"context"
|
|
112
|
+
],
|
|
113
|
+
"api": {
|
|
114
|
+
"include": [
|
|
115
|
+
"list",
|
|
116
|
+
"get",
|
|
117
|
+
"create",
|
|
118
|
+
"update",
|
|
119
|
+
"delete"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
"cli": {
|
|
123
|
+
"include": [
|
|
124
|
+
"list",
|
|
125
|
+
"get",
|
|
126
|
+
"create",
|
|
127
|
+
"update",
|
|
128
|
+
"delete"
|
|
129
|
+
],
|
|
130
|
+
"exclude": [
|
|
131
|
+
"getParams",
|
|
132
|
+
"setParams",
|
|
133
|
+
"toPromptLayer"
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
"mcp": {
|
|
137
|
+
"include": []
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"extends": "SmrtObject",
|
|
141
|
+
"exportName": "PromptOverride",
|
|
142
|
+
"collectionExportName": "PromptOverrideCollection",
|
|
143
|
+
"validationRules": [
|
|
144
|
+
{
|
|
145
|
+
"field": "key",
|
|
146
|
+
"rule": "required",
|
|
147
|
+
"fieldType": "text"
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"schema": {
|
|
151
|
+
"tableName": "_smrt_prompt_overrides",
|
|
152
|
+
"ddl": "CREATE TABLE IF NOT EXISTS \"_smrt_prompt_overrides\" (\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 \"key\" TEXT NOT NULL DEFAULT '',\n \"tenant_id\" TEXT,\n \"template\" TEXT,\n \"profile\" TEXT,\n \"model\" TEXT,\n \"params\" TEXT\n);",
|
|
153
|
+
"columns": {
|
|
154
|
+
"id": {
|
|
155
|
+
"type": "UUID",
|
|
156
|
+
"primaryKey": true,
|
|
157
|
+
"referenceKind": "id",
|
|
158
|
+
"notNull": true
|
|
159
|
+
},
|
|
160
|
+
"slug": {
|
|
161
|
+
"type": "TEXT",
|
|
162
|
+
"notNull": true
|
|
163
|
+
},
|
|
164
|
+
"context": {
|
|
165
|
+
"type": "TEXT",
|
|
166
|
+
"notNull": true,
|
|
167
|
+
"default": ""
|
|
168
|
+
},
|
|
169
|
+
"created_at": {
|
|
170
|
+
"type": "TIMESTAMP",
|
|
171
|
+
"notNull": true,
|
|
172
|
+
"default": "current_timestamp"
|
|
173
|
+
},
|
|
174
|
+
"updated_at": {
|
|
175
|
+
"type": "TIMESTAMP",
|
|
176
|
+
"notNull": true,
|
|
177
|
+
"default": "current_timestamp"
|
|
178
|
+
},
|
|
179
|
+
"key": {
|
|
180
|
+
"type": "TEXT",
|
|
181
|
+
"notNull": true,
|
|
182
|
+
"unique": false,
|
|
183
|
+
"default": ""
|
|
184
|
+
},
|
|
185
|
+
"tenant_id": {
|
|
186
|
+
"type": "TEXT",
|
|
187
|
+
"notNull": false,
|
|
188
|
+
"unique": false
|
|
189
|
+
},
|
|
190
|
+
"template": {
|
|
191
|
+
"type": "TEXT",
|
|
192
|
+
"notNull": false,
|
|
193
|
+
"unique": false
|
|
194
|
+
},
|
|
195
|
+
"profile": {
|
|
196
|
+
"type": "TEXT",
|
|
197
|
+
"notNull": false,
|
|
198
|
+
"unique": false
|
|
199
|
+
},
|
|
200
|
+
"model": {
|
|
201
|
+
"type": "TEXT",
|
|
202
|
+
"notNull": false,
|
|
203
|
+
"unique": false
|
|
204
|
+
},
|
|
205
|
+
"params": {
|
|
206
|
+
"type": "TEXT",
|
|
207
|
+
"notNull": false,
|
|
208
|
+
"unique": false
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"indexes": [
|
|
212
|
+
{
|
|
213
|
+
"name": "_smrt_prompt_overrides_id_idx",
|
|
214
|
+
"columns": [
|
|
215
|
+
"id"
|
|
216
|
+
]
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"name": "_smrt_prompt_overrides_key_context_idx",
|
|
220
|
+
"columns": [
|
|
221
|
+
"key",
|
|
222
|
+
"context"
|
|
223
|
+
],
|
|
224
|
+
"unique": true
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
"version": "6f475427"
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
"@happyvertical/smrt-prompts:PromptOverrideCollection": {
|
|
231
|
+
"name": "promptoverridecollection",
|
|
232
|
+
"className": "PromptOverrideCollection",
|
|
233
|
+
"qualifiedName": "@happyvertical/smrt-prompts:PromptOverrideCollection",
|
|
234
|
+
"collection": "promptoverrides",
|
|
235
|
+
"filePath": "/home/runner/_work/smrt/smrt/packages/prompts/src/collections/PromptOverrideCollection.ts",
|
|
236
|
+
"packageName": "@happyvertical/smrt-prompts",
|
|
237
|
+
"fields": {},
|
|
238
|
+
"methods": {
|
|
239
|
+
"getAppOverride": {
|
|
240
|
+
"name": "getAppOverride",
|
|
241
|
+
"async": true,
|
|
242
|
+
"parameters": [
|
|
243
|
+
{
|
|
244
|
+
"name": "key",
|
|
245
|
+
"type": "string",
|
|
246
|
+
"optional": false
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"name": "options",
|
|
250
|
+
"type": "object",
|
|
251
|
+
"optional": true
|
|
252
|
+
}
|
|
253
|
+
],
|
|
254
|
+
"returnType": "Promise<PromptOverride | null>",
|
|
255
|
+
"isStatic": false,
|
|
256
|
+
"isPublic": true
|
|
257
|
+
},
|
|
258
|
+
"getTenantOverride": {
|
|
259
|
+
"name": "getTenantOverride",
|
|
260
|
+
"async": true,
|
|
261
|
+
"parameters": [
|
|
262
|
+
{
|
|
263
|
+
"name": "key",
|
|
264
|
+
"type": "string",
|
|
265
|
+
"optional": false
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"name": "tenantId",
|
|
269
|
+
"type": "string",
|
|
270
|
+
"optional": false
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"name": "options",
|
|
274
|
+
"type": "object",
|
|
275
|
+
"optional": true
|
|
276
|
+
}
|
|
277
|
+
],
|
|
278
|
+
"returnType": "Promise<PromptOverride | null>",
|
|
279
|
+
"isStatic": false,
|
|
280
|
+
"isPublic": true
|
|
281
|
+
},
|
|
282
|
+
"getResolutionLayers": {
|
|
283
|
+
"name": "getResolutionLayers",
|
|
284
|
+
"async": true,
|
|
285
|
+
"parameters": [
|
|
286
|
+
{
|
|
287
|
+
"name": "key",
|
|
288
|
+
"type": "string",
|
|
289
|
+
"optional": false
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"name": "tenantId",
|
|
293
|
+
"type": "string | null",
|
|
294
|
+
"optional": true
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"name": "options",
|
|
298
|
+
"type": "object",
|
|
299
|
+
"optional": true
|
|
300
|
+
}
|
|
301
|
+
],
|
|
302
|
+
"returnType": "Promise<object>",
|
|
303
|
+
"isStatic": false,
|
|
304
|
+
"isPublic": true
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
"decoratorConfig": {
|
|
308
|
+
"tableName": "_smrt_prompt_overrides"
|
|
309
|
+
},
|
|
310
|
+
"extends": "SmrtCollection",
|
|
311
|
+
"extendsTypeArg": "PromptOverride",
|
|
312
|
+
"exportName": "PromptOverrideCollection",
|
|
313
|
+
"collectionExportName": "PromptOverrideCollectionCollection",
|
|
314
|
+
"schema": {
|
|
315
|
+
"tableName": "_smrt_prompt_overrides",
|
|
316
|
+
"ddl": "CREATE TABLE IF NOT EXISTS \"_smrt_prompt_overrides\" (\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);",
|
|
317
|
+
"columns": {
|
|
318
|
+
"id": {
|
|
319
|
+
"type": "UUID",
|
|
320
|
+
"primaryKey": true,
|
|
321
|
+
"referenceKind": "id",
|
|
322
|
+
"notNull": true
|
|
323
|
+
},
|
|
324
|
+
"slug": {
|
|
325
|
+
"type": "TEXT",
|
|
326
|
+
"notNull": true
|
|
327
|
+
},
|
|
328
|
+
"context": {
|
|
329
|
+
"type": "TEXT",
|
|
330
|
+
"notNull": true,
|
|
331
|
+
"default": ""
|
|
332
|
+
},
|
|
333
|
+
"created_at": {
|
|
334
|
+
"type": "TIMESTAMP",
|
|
335
|
+
"notNull": true,
|
|
336
|
+
"default": "current_timestamp"
|
|
337
|
+
},
|
|
338
|
+
"updated_at": {
|
|
339
|
+
"type": "TIMESTAMP",
|
|
340
|
+
"notNull": true,
|
|
341
|
+
"default": "current_timestamp"
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
"indexes": [
|
|
345
|
+
{
|
|
346
|
+
"name": "_smrt_prompt_overrides_id_idx",
|
|
347
|
+
"columns": [
|
|
348
|
+
"id"
|
|
349
|
+
]
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"name": "_smrt_prompt_overrides_slug_context_idx",
|
|
353
|
+
"columns": [
|
|
354
|
+
"slug",
|
|
355
|
+
"context"
|
|
356
|
+
],
|
|
357
|
+
"unique": true
|
|
358
|
+
}
|
|
359
|
+
],
|
|
360
|
+
"version": "67269c92"
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
"moduleType": "smrt",
|
|
365
|
+
"smrtDependencies": [
|
|
366
|
+
"@happyvertical/smrt-core",
|
|
367
|
+
"@happyvertical/smrt-tenancy"
|
|
368
|
+
]
|
|
369
|
+
}
|