feat(palace): add @bytelyst/palace dep, palace types, 6 cosmos containers, config vars

This commit is contained in:
saravanakumardb1 2026-04-10 01:14:00 -07:00
parent 69a3706615
commit 38006af1a3
5 changed files with 103 additions and 5 deletions

View File

@ -29,6 +29,7 @@
"@bytelyst/fastify-core": "^0.1.0",
"@bytelyst/field-encrypt": "^0.1.0",
"@bytelyst/llm": "file:../../learning_ai_common_plat/packages/llm",
"@bytelyst/palace": "file:../../learning_ai_common_plat/packages/palace",
"@bytelyst/logger": "^0.1.0",
"fastify": "5.7.4",
"jose": "^6.0.8",

View File

@ -25,6 +25,12 @@ const envSchema = baseBackendConfigSchema.extend({
FIELD_ENCRYPT_KEY: z.string().default(''),
FIELD_ENCRYPT_MEK_NAME: z.string().default('notelett-mek'),
AZURE_KEYVAULT_URL: z.string().default(''),
// ── Palace (MemPalace) ──
PALACE_ENABLED: z.coerce.boolean().default(true),
PALACE_EXTRACTION_ENABLED: z.coerce.boolean().default(true),
PALACE_WAKE_UP_BUDGET: z.coerce.number().int().min(100).default(600),
PALACE_RELEVANCE_HALF_LIFE_DAYS: z.coerce.number().int().min(1).default(90),
PALACE_DEDUP_THRESHOLD: z.coerce.number().min(0).max(1).default(0.90),
});
export const config = envSchema.parse(process.env);

View File

@ -18,6 +18,13 @@ const CONTAINER_DEFS: Record<string, ContainerConfig> = {
note_intake_rules: { partitionKeyPath: '/userId' },
note_intake_jobs: { partitionKeyPath: '/userId' },
note_collaborators: { partitionKeyPath: '/sharedWithUserId' },
// ── Palace (MemPalace) ──
palace_wings: { partitionKeyPath: '/userId' },
palace_rooms: { partitionKeyPath: '/userId' },
palace_memories: { partitionKeyPath: '/userId' },
palace_tunnels: { partitionKeyPath: '/userId' },
palace_kg: { partitionKeyPath: '/userId' },
palace_diaries: { partitionKeyPath: '/userId' },
};
export async function initCosmosIfNeeded(): Promise<void> {

View File

@ -0,0 +1,74 @@
import { z } from 'zod';
import type { BasePalaceWingDoc, BasePalaceRoomDoc, BasePalaceMemoryDoc, BasePalaceTunnelDoc, BasePalaceKGTripleDoc, BasePalaceDiaryDoc } from '@bytelyst/palace';
// ── Hall Types (NoteLett preset) ────────────────────────────────────
export const HALL_TYPES = ['decisions', 'events', 'discoveries', 'preferences', 'advice', 'insights'] as const;
export type HallType = (typeof HALL_TYPES)[number];
// ── NoteLett-specific palace document types ─────────────────────────
export interface PalaceWingDoc extends BasePalaceWingDoc {
sourceWorkspaceId: string;
techStack?: string;
}
export interface PalaceRoomDoc extends BasePalaceRoomDoc {}
export interface PalaceMemoryDoc extends BasePalaceMemoryDoc {
hall: HallType;
sourceNoteId?: string;
sourceTaskId?: string;
}
export interface PalaceTunnelDoc extends BasePalaceTunnelDoc {
roomA: string;
roomB: string;
reason: string;
}
export interface PalaceKGTripleDoc extends BasePalaceKGTripleDoc {
sourceTaskId?: string;
}
export interface PalaceDiaryDoc extends BasePalaceDiaryDoc {}
// ── Zod Schemas ─────────────────────────────────────────────────────
export const PalaceSearchQuerySchema = z.object({
q: z.string().min(1).max(500),
wingId: z.string().max(128).optional(),
roomId: z.string().max(128).optional(),
hall: z.enum(HALL_TYPES).optional(),
limit: z.coerce.number().int().min(1).max(50).default(10),
});
export const StoreMemorySchema = z.object({
wingId: z.string().min(1).max(128),
roomId: z.string().min(1).max(128),
hall: z.enum(HALL_TYPES),
content: z.string().min(1).max(5000),
sourceNoteId: z.string().max(128).optional(),
});
export const PruneRequestSchema = z.object({
wingId: z.string().min(1).max(128).optional(),
olderThanDays: z.coerce.number().int().min(1).default(180),
minRelevance: z.coerce.number().min(0).max(1).default(0.1),
});
export const KGEntityQuerySchema = z.object({
entity: z.string().min(1).max(256),
wingId: z.string().max(128).optional(),
asOf: z.string().max(30).optional(),
});
export const WakeUpQuerySchema = z.object({
task: z.string().max(500).optional(),
});
export type PalaceSearchQuery = z.infer<typeof PalaceSearchQuerySchema>;
export type StoreMemoryInput = z.infer<typeof StoreMemorySchema>;
export type PruneRequest = z.infer<typeof PruneRequestSchema>;
export type KGEntityQuery = z.infer<typeof KGEntityQuerySchema>;
export type WakeUpQuery = z.infer<typeof WakeUpQuerySchema>;

20
pnpm-lock.yaml generated
View File

@ -59,6 +59,9 @@ importers:
'@bytelyst/logger':
specifier: ^0.1.0
version: 0.1.0
'@bytelyst/palace':
specifier: file:../../learning_ai_common_plat/packages/palace
version: file:../learning_ai_common_plat/packages/palace(zod@3.25.76)
fastify:
specifier: 5.7.4
version: 5.7.4
@ -1039,6 +1042,11 @@ packages:
'@bytelyst/offline-queue@0.1.0':
resolution: {integrity: sha512-JOW9B1mQ6hp29qAsRcCzSa9KWyzds01K2KnP7J3QtgFErdrkPGUJa2WajVeyrG31dSHC3awQPKglddxUJ6IFGw==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Foffline-queue/-/0.1.0/offline-queue-0.1.0.tgz}
'@bytelyst/palace@file:../learning_ai_common_plat/packages/palace':
resolution: {directory: ../learning_ai_common_plat/packages/palace, type: directory}
peerDependencies:
zod: ^3.0.0
'@bytelyst/platform-client@0.1.0':
resolution: {integrity: sha512-KmlxcYp4mFuhdTCj8QT+1QGXtk1ViM1hGqGrO7qMhy+IEnjFHsqMxboArUpR/ZTqWNXa1SrH4w7ws29xtjUO1w==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fplatform-client/-/0.1.0/platform-client-0.1.0.tgz}
@ -7229,6 +7237,10 @@ snapshots:
'@bytelyst/offline-queue@0.1.0': {}
'@bytelyst/palace@file:../learning_ai_common_plat/packages/palace(zod@3.25.76)':
dependencies:
zod: 3.25.76
'@bytelyst/platform-client@0.1.0': {}
'@bytelyst/queue@0.1.0': {}
@ -8513,9 +8525,7 @@ snapshots:
metro-runtime: 0.83.5
transitivePeerDependencies:
- '@babel/core'
- bufferutil
- supports-color
- utf-8-validate
'@react-native/normalize-colors@0.83.2': {}
@ -10136,7 +10146,7 @@ snapshots:
eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-react-hooks: 7.0.1(eslint@9.39.4(jiti@2.6.1))
@ -10169,7 +10179,7 @@ snapshots:
tinyglobby: 0.2.15
unrs-resolver: 1.11.1
optionalDependencies:
eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
@ -10247,7 +10257,7 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
eslint-plugin-import@2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
eslint-plugin-import@2.32.0(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9