chore: prepare for deployment
Publish Docker Images / Smoke test (api) (push) Canceled after 0s
Publish Docker Images / Smoke test (dashboard) (push) Canceled after 0s
Publish Docker Images / Smoke test (jobs) (push) Canceled after 0s
Publish Docker Images / build-and-push (./docker/Dockerfile.api, api, api) (push) Canceled after 0s
Publish Docker Images / build-and-push (./docker/Dockerfile.dashboard, dashboard, dashboard) (push) Canceled after 0s
Publish Docker Images / build-and-push (./docker/Dockerfile.jobs, jobs, jobs) (push) Canceled after 0s
MCP package build check / build (push) Canceled after 0s
Package build check / build (push) Canceled after 0s
Upload OpenAPI Spec to R2 / generate-and-upload-openapi (push) Canceled after 0s

This commit is contained in:
Ulises Vargas
2026-08-24 08:56:48 -07:00
parent 3f90249562
commit 4348e89860
46 changed files with 560 additions and 182 deletions
+1 -1
View File
@@ -1 +1 @@
v20.19.3 v24.18.0
+2 -2
View File
@@ -29,7 +29,7 @@ The `prototypes/` directory holds standalone HTML/CSS design mocks for explorati
Before committing or opening/updating a PR, run the build checks that match the areas you changed. Use Node 20 (the repo's `.nvmrc` version): Before committing or opening/updating a PR, run the build checks that match the areas you changed. Use Node 20 (the repo's `.nvmrc` version):
```bash ```bash
export PATH="$HOME/.nvm/versions/node/v20.19.3/bin:$PATH" export PATH="$HOME/.nvm/versions/node/v24.18.0/bin:$PATH"
``` ```
- **Dashboard changes** (`apps/dashboard/**`, or shared packages consumed by the dashboard): - **Dashboard changes** (`apps/dashboard/**`, or shared packages consumed by the dashboard):
@@ -654,7 +654,7 @@ The full setup/run flow lives in `README.md` and `DEV_SETUP_NOTES.md`. The notes
The sandbox injects `/exec-daemon/node` (Node 22) at the front of `PATH`, so a bare `node`/`pnpm` runs under Node 22 even though the repo requires Node `^20.19.3` (`.nvmrc`). Node 20.19.3 is installed via nvm and set as the nvm default. Before running any `pnpm`/dev command, prepend the repo Node to `PATH`: The sandbox injects `/exec-daemon/node` (Node 22) at the front of `PATH`, so a bare `node`/`pnpm` runs under Node 22 even though the repo requires Node `^20.19.3` (`.nvmrc`). Node 20.19.3 is installed via nvm and set as the nvm default. Before running any `pnpm`/dev command, prepend the repo Node to `PATH`:
```bash ```bash
export PATH="$HOME/.nvm/versions/node/v20.19.3/bin:$PATH" export PATH="$HOME/.nvm/versions/node/v24.18.0/bin:$PATH"
``` ```
`pnpm install` itself succeeds under either version (there is no `engine-strict`), but run the dev servers and DB scripts on Node 20. `pnpm install` itself succeeds under either version (there is no `engine-strict`), but run the dev servers and DB scripts on Node 20.
+1
View File
@@ -83,6 +83,7 @@ OPENAI_API_KEY=""
GOOGLE_API_KEY="" GOOGLE_API_KEY=""
ANTHROPIC_API_KEY="" ANTHROPIC_API_KEY=""
MOONSHOT_API_KEY="" MOONSHOT_API_KEY=""
DEEPSEEK_API_KEY=""
# Jina Reader — optional Bearer for higher rate limits when using fetch_documentation_url # Jina Reader — optional Bearer for higher rate limits when using fetch_documentation_url
# JINA_API_KEY="" # JINA_API_KEY=""
@@ -5,7 +5,8 @@ const TEXT_GEN_MODELS: Record<AIProvider, string> = {
[AIProvider.OPENAI]: 'gpt-4o-mini', [AIProvider.OPENAI]: 'gpt-4o-mini',
[AIProvider.ANTHROPIC]: 'claude-haiku-4-5-20251001', [AIProvider.ANTHROPIC]: 'claude-haiku-4-5-20251001',
[AIProvider.GOOGLE]: 'gemini-3.1-flash-lite', [AIProvider.GOOGLE]: 'gemini-3.1-flash-lite',
[AIProvider.MOONSHOT]: 'kimi-k2.6' [AIProvider.MOONSHOT]: 'kimi-k2.6',
[AIProvider.DEEPSEEK]: 'deepseek-chat'
}; };
export interface GenerateFieldTextResult { export interface GenerateFieldTextResult {
@@ -9,7 +9,8 @@ const TITLE_MODELS: Record<AIProvider, string> = {
[AIProvider.OPENAI]: 'gpt-4o-mini', [AIProvider.OPENAI]: 'gpt-4o-mini',
[AIProvider.ANTHROPIC]: 'claude-haiku-4-5-20251001', [AIProvider.ANTHROPIC]: 'claude-haiku-4-5-20251001',
[AIProvider.GOOGLE]: 'gemini-3.1-flash-lite', [AIProvider.GOOGLE]: 'gemini-3.1-flash-lite',
[AIProvider.MOONSHOT]: 'kimi-k2.6' [AIProvider.MOONSHOT]: 'kimi-k2.6',
[AIProvider.DEEPSEEK]: 'deepseek-chat'
}; };
function createTitleModel(config: AIProviderConfig) { function createTitleModel(config: AIProviderConfig) {
+1 -1
View File
@@ -1 +1 @@
v20.19.3 v24.18.0
+1 -1
View File
@@ -1 +1 @@
v20.19.3 v24.18.0
+1 -1
View File
@@ -133,7 +133,7 @@
}, },
"type": "module", "type": "module",
"engines": { "engines": {
"node": "^20.19.3" "node": "^24.0.0"
}, },
"browser": { "browser": {
"crypto": false "crypto": false
+70
View File
@@ -40,6 +40,76 @@
U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
/* ── ITC Avant Garde Std — fuente institucional Municipio de Tijuana ── */
@font-face {
font-family: 'ITC Avant Garde Std';
src:
local('ITC Avant Garde Gothic Std Extra Light'),
local('ITCAvantGardeStd-XLt'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-XLt.woff2') format('woff2'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-XLt.woff') format('woff'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-XLt.ttf') format('truetype');
font-weight: 200;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'ITC Avant Garde Std';
src:
local('ITC Avant Garde Gothic Std Book'),
local('ITCAvantGardeStd-Bk'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Bk.woff2') format('woff2'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Bk.woff') format('woff'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Bk.ttf') format('truetype');
font-weight: 300;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'ITC Avant Garde Std';
src:
local('ITC Avant Garde Gothic Std Medium'),
local('ITCAvantGardeStd-Md'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Md.woff2') format('woff2'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Md.woff') format('woff'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Md.ttf') format('truetype');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'ITC Avant Garde Std';
src:
local('ITC Avant Garde Gothic Std Demi'),
local('ITCAvantGardeStd-Demi'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Demi.woff2') format('woff2'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Demi.woff') format('woff'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Demi.ttf') format('truetype');
font-weight: 600;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'ITC Avant Garde Std';
src:
local('ITC Avant Garde Gothic Std Bold'),
local('ITCAvantGardeStd-Bold'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Bold.woff2') format('woff2'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Bold.woff') format('woff'),
url('/fonts/oficios-fonts/ITCAvantGardeStd-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
font-display: swap;
}
@theme inline {
--font-cio: 'ITC Avant Garde Std', var(--font-sans);
}
/** Global scrollbar styles */ /** Global scrollbar styles */
html { html {
--scrollbarBG: #fff; --scrollbarBG: #fff;
+1 -1
View File
@@ -1 +1 @@
v20.19.3 v24.18.0
+1 -1
View File
@@ -29,7 +29,7 @@
}, },
"type": "module", "type": "module",
"engines": { "engines": {
"node": "^20.19.3" "node": "^24.0.0"
}, },
"dependencies": { "dependencies": {
"@cio/certificates": "workspace:*", "@cio/certificates": "workspace:*",
+3
View File
@@ -216,6 +216,9 @@ services:
SMTP_SENDER: ${SMTP_SENDER:-} SMTP_SENDER: ${SMTP_SENDER:-}
# Transcription + OpenAI-backed agent runs. # Transcription + OpenAI-backed agent runs.
OPENAI_API_KEY: ${OPENAI_API_KEY:-} OPENAI_API_KEY: ${OPENAI_API_KEY:-}
DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
GOOGLE_API_KEY: ${GOOGLE_API_KEY:-}
restart: unless-stopped restart: unless-stopped
volumes: volumes:
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:20.19.3-slim FROM node:24.18.0-slim
WORKDIR /app WORKDIR /app
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:20.19.3-slim FROM node:24.18.0-slim
WORKDIR /app WORKDIR /app
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:20-bookworm-slim FROM node:24-bookworm-slim
# ffmpeg is needed for media probe / thumbnail / audio-extract / transcode tasks. # ffmpeg is needed for media probe / thumbnail / audio-extract / transcode tasks.
RUN apt-get update \ RUN apt-get update \
+1 -1
View File
@@ -49,7 +49,7 @@
"typescript": "^5.1.6" "typescript": "^5.1.6"
}, },
"engines": { "engines": {
"node": "^20.19.3" "node": "^24.0.0"
}, },
"pnpm": { "pnpm": {
"onlyBuiltDependencies": [ "onlyBuiltDependencies": [
+1
View File
@@ -36,6 +36,7 @@
}, },
"dependencies": { "dependencies": {
"@ai-sdk/anthropic": "^3.0.69", "@ai-sdk/anthropic": "^3.0.69",
"@ai-sdk/deepseek": "^3.0.29",
"@ai-sdk/google": "^3.0.0", "@ai-sdk/google": "^3.0.0",
"@ai-sdk/moonshotai": "^2.0.21", "@ai-sdk/moonshotai": "^2.0.21",
"@ai-sdk/openai": "^3.0.52", "@ai-sdk/openai": "^3.0.52",
+10 -3
View File
@@ -2,6 +2,7 @@ import { createOpenAI } from '@ai-sdk/openai';
import { createAnthropic } from '@ai-sdk/anthropic'; import { createAnthropic } from '@ai-sdk/anthropic';
import { createGoogleGenerativeAI } from '@ai-sdk/google'; import { createGoogleGenerativeAI } from '@ai-sdk/google';
import { createMoonshotAI } from '@ai-sdk/moonshotai'; import { createMoonshotAI } from '@ai-sdk/moonshotai';
import { createDeepSeek } from '@ai-sdk/deepseek';
import type { LanguageModel } from 'ai'; import type { LanguageModel } from 'ai';
import { AIProvider, type AIProviderConfig } from '../types'; import { AIProvider, type AIProviderConfig } from '../types';
@@ -9,14 +10,16 @@ const DEFAULT_MODELS: Record<AIProvider, string> = {
[AIProvider.OPENAI]: 'gpt-5.4-mini', [AIProvider.OPENAI]: 'gpt-5.4-mini',
[AIProvider.ANTHROPIC]: 'claude-sonnet-4-20250514', [AIProvider.ANTHROPIC]: 'claude-sonnet-4-20250514',
[AIProvider.GOOGLE]: 'gemini-3.1-flash-lite', [AIProvider.GOOGLE]: 'gemini-3.1-flash-lite',
[AIProvider.MOONSHOT]: 'kimi-k2.6' [AIProvider.MOONSHOT]: 'kimi-k2.6',
[AIProvider.DEEPSEEK]: 'deepseek-chat'
}; };
const PROVIDER_API_KEY_ENV: Record<AIProvider, string> = { const PROVIDER_API_KEY_ENV: Record<AIProvider, string> = {
[AIProvider.OPENAI]: 'OPENAI_API_KEY', [AIProvider.OPENAI]: 'OPENAI_API_KEY',
[AIProvider.ANTHROPIC]: 'ANTHROPIC_API_KEY', [AIProvider.ANTHROPIC]: 'ANTHROPIC_API_KEY',
[AIProvider.GOOGLE]: 'GOOGLE_API_KEY', [AIProvider.GOOGLE]: 'GOOGLE_API_KEY',
[AIProvider.MOONSHOT]: 'MOONSHOT_API_KEY' [AIProvider.MOONSHOT]: 'MOONSHOT_API_KEY',
[AIProvider.DEEPSEEK]: 'DEEPSEEK_API_KEY'
}; };
/** /**
@@ -43,6 +46,10 @@ export function createModel(config: AIProviderConfig): LanguageModel {
const moonshot = createMoonshotAI({ apiKey: config.apiKey }); const moonshot = createMoonshotAI({ apiKey: config.apiKey });
return moonshot(modelName); return moonshot(modelName);
} }
case AIProvider.DEEPSEEK: {
const deepseek = createDeepSeek({ apiKey: config.apiKey });
return deepseek(modelName);
}
default: default:
throw new Error(`Unsupported AI provider: ${config.provider}`); throw new Error(`Unsupported AI provider: ${config.provider}`);
} }
@@ -64,7 +71,7 @@ export function getProviderConfigForProvider(provider: AIProvider): AIProviderCo
* Used by routes that don't take an explicit model (status check, title generation). * Used by routes that don't take an explicit model (status check, title generation).
*/ */
export function pickAnyConfiguredProvider(): AIProviderConfig | null { export function pickAnyConfiguredProvider(): AIProviderConfig | null {
const order: AIProvider[] = [AIProvider.GOOGLE, AIProvider.OPENAI, AIProvider.ANTHROPIC]; const order: AIProvider[] = [AIProvider.DEEPSEEK, AIProvider.GOOGLE, AIProvider.OPENAI, AIProvider.ANTHROPIC];
for (const provider of order) { for (const provider of order) {
const config = getProviderConfigForProvider(provider); const config = getProviderConfigForProvider(provider);
+2 -1
View File
@@ -15,7 +15,8 @@ export const AIProvider = {
OPENAI: 'openai', OPENAI: 'openai',
ANTHROPIC: 'anthropic', ANTHROPIC: 'anthropic',
GOOGLE: 'google', GOOGLE: 'google',
MOONSHOT: 'moonshot' MOONSHOT: 'moonshot',
DEEPSEEK: 'deepseek'
} as const; } as const;
export type AIProvider = (typeof AIProvider)[keyof typeof AIProvider]; export type AIProvider = (typeof AIProvider)[keyof typeof AIProvider];
+35
View File
@@ -0,0 +1,35 @@
const fs = require('fs');
let seedTs = fs.readFileSync('src/scripts/seed.ts', 'utf8');
const constants = `
const TUTOR_USER_ID = '01676a50-bb56-4c5e-8a61-fb9e9190fb10';
const TUTOR2_USER_ID = '8f3a5b2c-1d4e-4f6f-a8b9-0c1d2e3f4a5b';
const PROF2_GROUP_ID = '11112222-3333-4444-5555-666677778888';
const PROF2_COURSE_ID = 'aaaabbbb-cccc-dddd-eeee-ffff00001111';
`;
seedTs = seedTs.replace("const TUTOR_USER_ID = '01676a50-bb56-4c5e-8a61-fb9e9190fb10';", constants);
seedTs = seedTs.replace(
'tutorUserId: TUTOR_USER_ID,',
'tutorUserId: TUTOR_USER_ID,\n tutor2UserId: TUTOR2_USER_ID,'
);
seedTs = seedTs.replace('testOrgId: TEST_ORG_ID,', 'testOrgId: TEST_ORG_ID,\n prof2GroupId: PROF2_GROUP_ID,');
seedTs = seedTs.replace(
'adminUserId: ADMIN_USER_ID,',
'adminUserId: ADMIN_USER_ID,\n prof2GroupId: PROF2_GROUP_ID,'
);
seedTs = seedTs.replace(
'pandasGroupId: PANDAS_GROUP_ID,',
'pandasGroupId: PANDAS_GROUP_ID,\n prof2GroupId: PROF2_GROUP_ID,'
);
seedTs = seedTs.replace(
'earlyAdopterGroupId: EARLY_ADOPTER_GROUP_ID',
'earlyAdopterGroupId: EARLY_ADOPTER_GROUP_ID,\n prof2CourseId: PROF2_COURSE_ID'
);
fs.writeFileSync('src/scripts/seed.ts', seedTs);
+32
View File
@@ -0,0 +1,32 @@
const fs = require('fs');
const path = './users.json';
const users = JSON.parse(fs.readFileSync(path, 'utf8'));
users.forEach((u) => {
if (u.email === 'admin@test.com') {
u.email = 'ulises.vargas@agenciadigitaltj.gob.mx';
u.profile_fullname = 'Ulises Vargas Flores';
if (u.identities && u.identities[0]) {
u.identities[0].email = 'ulises.vargas@agenciadigitaltj.gob.mx';
u.identities[0].identity_data.email = 'ulises.vargas@agenciadigitaltj.gob.mx';
}
}
if (u.email === 'test@test.com') {
u.email = 'gehernandez@tijuana.gob.mx';
u.profile_fullname = 'Eloy Gustavo Hernandez Ramirez';
if (u.identities && u.identities[0]) {
u.identities[0].email = 'gehernandez@tijuana.gob.mx';
u.identities[0].identity_data.email = 'gehernandez@tijuana.gob.mx';
}
}
if (u.email === 'student@test.com') {
u.email = 'mavuelvas@tijuana.gob.mx';
u.profile_fullname = 'Marco Antonio Vuelvas Diaz';
if (u.identities && u.identities[0]) {
u.identities[0].email = 'mavuelvas@tijuana.gob.mx';
u.identities[0].identity_data.email = 'mavuelvas@tijuana.gob.mx';
}
}
});
fs.writeFileSync(path, JSON.stringify(users, null, 2));
+32
View File
@@ -0,0 +1,32 @@
import 'dotenv/config';
import { db } from '../drizzle';
import { isCourseTeamMemberOrOrgAdmin } from '../queries/group/group';
import postgres from 'postgres';
async function main() {
const courseId = 'd5309f67-e881-45c9-9d72-acc380889fef';
const sql = postgres(process.env.DATABASE_URL!);
const [profile] = await sql`SELECT id FROM profile WHERE email = 'ulises.vargas@agenciadigitaltj.gob.mx'`;
if (profile) {
const isTeam = await isCourseTeamMemberOrOrgAdmin(courseId, profile.id);
console.log('isTeam:', isTeam);
// Check groupmember and organizationmember explicitly
const data = await sql`
SELECT
gm.role_id as gm_role,
om.role_id as om_role,
g.organization_id,
c.group_id
FROM course c
JOIN "group" g ON c.group_id = g.id
LEFT JOIN groupmember gm ON gm.group_id = g.id AND gm.profile_id = ${profile.id}
LEFT JOIN organizationmember om ON om.organization_id = g.organization_id AND om.profile_id = ${profile.id}
WHERE c.id = ${courseId}
`;
console.log('data:', data);
}
process.exit(0);
}
main().catch(console.error);
+27 -9
View File
@@ -21,7 +21,7 @@ import { seedUsers } from '@db/utils/seed/users';
import usersData from '../../users.json'; import usersData from '../../users.json';
// Constants for IDs used across multiple seed functions // Constants for IDs used across multiple seed functions
const TEST_ORG_ID = '1a1dcddd-1abc-4f72-b644-0bd18191a289'; const ENTERPRISE_ORG_ID = '1a1dcddd-1abc-4f72-b644-0bd18191a289';
const ADMIN_USER_ID = '7ac00503-8519-43c8-a5ea-b79aeca900b1'; const ADMIN_USER_ID = '7ac00503-8519-43c8-a5ea-b79aeca900b1';
const MVC_GROUP_ID = 'c6b022fd-fff3-4f09-8960-c9cb06819761'; const MVC_GROUP_ID = 'c6b022fd-fff3-4f09-8960-c9cb06819761';
const REACT_GROUP_ID = '04a250f1-bcb9-4e0d-a3d4-a01096e7a105'; const REACT_GROUP_ID = '04a250f1-bcb9-4e0d-a3d4-a01096e7a105';
@@ -29,11 +29,17 @@ const PANDAS_GROUP_ID = '0789ced2-b8f3-472c-97ff-bdde1e80dddf';
const MVC_COURSE_ID = '98e6e798-f0bd-4f9d-a6f5-ce0816a4f97e'; const MVC_COURSE_ID = '98e6e798-f0bd-4f9d-a6f5-ce0816a4f97e';
const REACT_COURSE_ID = '16e3bc8d-5d1b-4708-988e-93abae288ccf'; const REACT_COURSE_ID = '16e3bc8d-5d1b-4708-988e-93abae288ccf';
const PANDAS_COURSE_ID = 'f0a85d18-aff4-412f-b8e6-3b34ef098dce'; const PANDAS_COURSE_ID = 'f0a85d18-aff4-412f-b8e6-3b34ef098dce';
const TUTOR_USER_ID = '01676a50-bb56-4c5e-8a61-fb9e9190fb10';
const TUTOR2_USER_ID = '8f3a5b2c-1d4e-4f6f-a8b9-0c1d2e3f4a5b';
const PROF2_GROUP_ID = '11112222-3333-4444-5555-666677778888';
const PROF2_COURSE_ID = 'aaaabbbb-cccc-dddd-eeee-ffff00001111';
const STUDENT_USER_ID = '0c256e75-aa40-4f62-8d30-0217ca1c60d9'; const STUDENT_USER_ID = '0c256e75-aa40-4f62-8d30-0217ca1c60d9';
const ENTERPRISE_ORG_ID = '2b8f4a1c-6d3e-4b2a-9f7e-1c4d8a6e9b0f'; const ENTERPRISE_ORG_ID = '2b8f4a1c-6d3e-4b2a-9f7e-1c4d8a6e9b0f';
const ENTERPRISE_ADMIN_USER_ID = '3c9052de-7e4f-4c3a-8d8e-2d5e9b7f1a3c'; const ENTERPRISE_ADMIN_USER_ID = '3c9052de-7e4f-4c3a-8d8e-2d5e9b7f1a3c';
const ENTERPRISE_STUDENT_USER_ID = '4da163ef-8050-4d4b-9c9f-3e6fac802b4d'; const ENTERPRISE_STUDENT_USER_ID = '4da163ef-8050-4d4b-9c9f-3e6fac802b4d';
const EARLY_ADOPTER_ORG_ID = '5c7d4b2e-8f5a-4c3b-ae8f-2d6e9c1b0f5a'; const ENTERPRISE_ORG_ID = '5c7d4b2e-8f5a-4c3b-ae8f-2d6e9c1b0f5a';
const EARLY_ADOPTER_ADMIN_USER_ID = '6e0163ff-9161-4d4b-be9f-3e7fbd913c5e'; const EARLY_ADOPTER_ADMIN_USER_ID = '6e0163ff-9161-4d4b-be9f-3e7fbd913c5e';
const EARLY_ADOPTER_STUDENT_USER_ID = '7fb274aa-a272-4e5c-cf0a-4f8cce024d6f'; const EARLY_ADOPTER_STUDENT_USER_ID = '7fb274aa-a272-4e5c-cf0a-4f8cce024d6f';
const EARLY_ADOPTER_GROUP_ID = '8ac385bb-b383-4f6d-d01b-5a9ddf135e7a'; const EARLY_ADOPTER_GROUP_ID = '8ac385bb-b383-4f6d-d01b-5a9ddf135e7a';
@@ -120,21 +126,27 @@ const seedFunctions = {
organizations: async () => { organizations: async () => {
console.log('📝 Seeding organizations...'); console.log('📝 Seeding organizations...');
await seedOrganization({ await seedOrganization({
testOrgId: TEST_ORG_ID, testOrgId: ENTERPRISE_ORG_ID,
prof2GroupId: PROF2_GROUP_ID,
enterpriseOrgId: ENTERPRISE_ORG_ID, enterpriseOrgId: ENTERPRISE_ORG_ID,
earlyAdopterOrgId: EARLY_ADOPTER_ORG_ID earlyAdopterOrgId: ENTERPRISE_ORG_ID,
prof2GroupId: PROF2_GROUP_ID
}); });
}, },
'organization-members': async () => { 'organization-members': async () => {
console.log('📝 Seeding organization members...'); console.log('📝 Seeding organization members...');
await seedOrganizationMember({ await seedOrganizationMember({
testOrgId: TEST_ORG_ID, testOrgId: ENTERPRISE_ORG_ID,
adminUserId: ADMIN_USER_ID, adminUserId: ADMIN_USER_ID,
prof2GroupId: PROF2_GROUP_ID,
tutorUserId: TUTOR_USER_ID,
tutor2UserId: TUTOR2_USER_ID,
tutor2UserId: TUTOR2_USER_ID,
studentUserId: STUDENT_USER_ID, studentUserId: STUDENT_USER_ID,
enterpriseOrgId: ENTERPRISE_ORG_ID, enterpriseOrgId: ENTERPRISE_ORG_ID,
enterpriseAdminUserId: ENTERPRISE_ADMIN_USER_ID, enterpriseAdminUserId: ENTERPRISE_ADMIN_USER_ID,
enterpriseStudentUserId: ENTERPRISE_STUDENT_USER_ID, enterpriseStudentUserId: ENTERPRISE_STUDENT_USER_ID,
earlyAdopterOrgId: EARLY_ADOPTER_ORG_ID, earlyAdopterOrgId: ENTERPRISE_ORG_ID,
earlyAdopterAdminUserId: EARLY_ADOPTER_ADMIN_USER_ID, earlyAdopterAdminUserId: EARLY_ADOPTER_ADMIN_USER_ID,
earlyAdopterStudentUserId: EARLY_ADOPTER_STUDENT_USER_ID earlyAdopterStudentUserId: EARLY_ADOPTER_STUDENT_USER_ID
}); });
@@ -143,7 +155,7 @@ const seedFunctions = {
console.log('📝 Seeding enterprise organization plan...'); console.log('📝 Seeding enterprise organization plan...');
await seedEnterpriseOrganizationPlan({ enterpriseOrgId: ENTERPRISE_ORG_ID }); await seedEnterpriseOrganizationPlan({ enterpriseOrgId: ENTERPRISE_ORG_ID });
console.log('📝 Seeding early adopter organization plan...'); console.log('📝 Seeding early adopter organization plan...');
await seedEarlyAdopterOrganizationPlan({ earlyAdopterOrgId: EARLY_ADOPTER_ORG_ID }); await seedEarlyAdopterOrganizationPlan({ earlyAdopterOrgId: ENTERPRISE_ORG_ID });
}, },
groups: async () => { groups: async () => {
console.log('📝 Seeding groups...'); console.log('📝 Seeding groups...');
@@ -151,9 +163,11 @@ const seedFunctions = {
mvcGroupId: MVC_GROUP_ID, mvcGroupId: MVC_GROUP_ID,
reactGroupId: REACT_GROUP_ID, reactGroupId: REACT_GROUP_ID,
pandasGroupId: PANDAS_GROUP_ID, pandasGroupId: PANDAS_GROUP_ID,
testOrgId: TEST_ORG_ID, prof2GroupId: PROF2_GROUP_ID,
testOrgId: ENTERPRISE_ORG_ID,
earlyAdopterGroupId: EARLY_ADOPTER_GROUP_ID, earlyAdopterGroupId: EARLY_ADOPTER_GROUP_ID,
earlyAdopterOrgId: EARLY_ADOPTER_ORG_ID prof2CourseId: PROF2_COURSE_ID,
earlyAdopterOrgId: ENTERPRISE_ORG_ID
}); });
}, },
'group-members': async () => { 'group-members': async () => {
@@ -162,7 +176,10 @@ const seedFunctions = {
mvcGroupId: MVC_GROUP_ID, mvcGroupId: MVC_GROUP_ID,
reactGroupId: REACT_GROUP_ID, reactGroupId: REACT_GROUP_ID,
pandasGroupId: PANDAS_GROUP_ID, pandasGroupId: PANDAS_GROUP_ID,
prof2GroupId: PROF2_GROUP_ID,
adminUserId: ADMIN_USER_ID, adminUserId: ADMIN_USER_ID,
tutorUserId: TUTOR_USER_ID,
tutor2UserId: TUTOR2_USER_ID,
studentUserId: STUDENT_USER_ID, studentUserId: STUDENT_USER_ID,
earlyAdopterGroupId: EARLY_ADOPTER_GROUP_ID, earlyAdopterGroupId: EARLY_ADOPTER_GROUP_ID,
earlyAdopterAdminUserId: EARLY_ADOPTER_ADMIN_USER_ID, earlyAdopterAdminUserId: EARLY_ADOPTER_ADMIN_USER_ID,
@@ -175,6 +192,7 @@ const seedFunctions = {
mvcGroupId: MVC_GROUP_ID, mvcGroupId: MVC_GROUP_ID,
reactGroupId: REACT_GROUP_ID, reactGroupId: REACT_GROUP_ID,
pandasGroupId: PANDAS_GROUP_ID, pandasGroupId: PANDAS_GROUP_ID,
prof2GroupId: PROF2_GROUP_ID,
earlyAdopterGroupId: EARLY_ADOPTER_GROUP_ID earlyAdopterGroupId: EARLY_ADOPTER_GROUP_ID
}); });
}, },
+43 -8
View File
@@ -6,10 +6,17 @@ interface SeedCourse {
mvcGroupId: string; mvcGroupId: string;
reactGroupId: string; reactGroupId: string;
pandasGroupId: string; pandasGroupId: string;
prof2GroupId: string;
earlyAdopterGroupId: string; earlyAdopterGroupId: string;
} }
export async function seedCourses({ mvcGroupId, reactGroupId, pandasGroupId, earlyAdopterGroupId }: SeedCourse) { export async function seedCourses({
mvcGroupId,
reactGroupId,
pandasGroupId,
prof2GroupId,
earlyAdopterGroupId
}: SeedCourse) {
const existingCourses = await db.select().from(course); const existingCourses = await db.select().from(course);
const existingCourseIds = existingCourses.map((c) => c.id); const existingCourseIds = existingCourses.map((c) => c.id);
@@ -17,13 +24,41 @@ export async function seedCourses({ mvcGroupId, reactGroupId, pandasGroupId, ear
const reactCourseId = '16e3bc8d-5d1b-4708-988e-93abae288ccf'; const reactCourseId = '16e3bc8d-5d1b-4708-988e-93abae288ccf';
const pandasCourseId = 'f0a85d18-aff4-412f-b8e6-3b34ef098dce'; const pandasCourseId = 'f0a85d18-aff4-412f-b8e6-3b34ef098dce';
const earlyAdopterCourseId = '9bd496cc-c494-4a7e-e12c-6baeef246f8b'; const earlyAdopterCourseId = '9bd496cc-c494-4a7e-e12c-6baeef246f8b';
const prof2CourseId = 'aaaabbbb-cccc-dddd-eeee-ffff00001111';
const coursesToInsert: TNewCourse[] = [ const coursesToInsert: TNewCourse[] = [
{ {
id: mvcCourseId, id: prof2CourseId,
title: 'Getting started with MVC', title: 'Introducción a la Administración Pública',
description: description:
"Embark on a comprehensive journey into the world of Model-View-Controller (MVC) architecture with our course, 'Getting Started with MVC.' Designed for beginners and aspiring developers, this course provides a solid foundation for understanding the principles and practices behind MVC, a widely adopted design pattern in software development.", 'Curso impartido por la profesora Laura Perez Garcia sobre los fundamentos de la administración pública y su aplicación práctica en el Ayuntamiento.',
overview: 'Welcome to this amazing course 🚀 ',
groupId: prof2GroupId,
isTemplate: false,
logo: '',
slug: 'introduccion-administracion-publica',
metadata: {
goals: '',
grading: false,
description: '',
requirements: '',
lessonDownload: false,
allowNewStudent: true
},
cost: 0,
currency: 'NGN',
isPublished: true,
certificate: {
isDownloadable: false,
theme: 'professional'
},
status: 'ACTIVE'
},
{
id: mvcCourseId,
title: 'Inducción al H. Ayuntamiento de Tijuana',
description:
'Conoce la estructura, misión y visión del gobierno municipal. Este curso es obligatorio para todos los nuevos servidores públicos de Tijuana.',
overview: overview:
'<p>"Getting Started with MVC. is designed for beginners and aspiring developers, this course provides a solid foundation for understanding the principles and practices behind MVC, a widely adopted design pattern in software development.</p>', '<p>"Getting Started with MVC. is designed for beginners and aspiring developers, this course provides a solid foundation for understanding the principles and practices behind MVC, a widely adopted design pattern in software development.</p>',
groupId: mvcGroupId, groupId: mvcGroupId,
@@ -49,9 +84,9 @@ export async function seedCourses({ mvcGroupId, reactGroupId, pandasGroupId, ear
}, },
{ {
id: reactCourseId, id: reactCourseId,
title: 'Modern Web Development with React', title: 'Transparencia y Acceso a la Información',
description: description:
"By the end of this course, you'll be equipped to build interactive and responsive web applications, making you a proficient React developer ready for the demands of today's web development landscape.", 'Capacitación sobre la Ley General de Transparencia, el manejo de datos personales y la respuesta a solicitudes ciudadanas.',
overview: 'Welcome to this amazing course 🚀 ', overview: 'Welcome to this amazing course 🚀 ',
groupId: reactGroupId, groupId: reactGroupId,
isTemplate: true, isTemplate: true,
@@ -76,7 +111,7 @@ export async function seedCourses({ mvcGroupId, reactGroupId, pandasGroupId, ear
}, },
{ {
id: pandasCourseId, id: pandasCourseId,
title: 'Data Science with Python and Pandas', title: 'Atención Ciudadana y Calidad en el Servicio',
description: description:
'Unlock the power of data with our "Data Science with Python and Pandas" course. Dive into Python programming fundamentals and then journey into the world of Pandas for efficient data manipulation and analysis. Learn essential data cleaning and preprocessing techniques before venturing into statistical analysis using Pandas. Cap off your exploration with data visualization using Matplotlib and Seaborn.', 'Unlock the power of data with our "Data Science with Python and Pandas" course. Dive into Python programming fundamentals and then journey into the world of Pandas for efficient data manipulation and analysis. Learn essential data cleaning and preprocessing techniques before venturing into statistical analysis using Pandas. Cap off your exploration with data visualization using Matplotlib and Seaborn.',
overview: 'Welcome to this amazing course 🚀 ', overview: 'Welcome to this amazing course 🚀 ',
@@ -103,7 +138,7 @@ export async function seedCourses({ mvcGroupId, reactGroupId, pandasGroupId, ear
}, },
{ {
id: earlyAdopterCourseId, id: earlyAdopterCourseId,
title: 'Product Management Fundamentals', title: 'Procedimientos Administrativos Locales',
description: description:
'A practical introduction to product management covering roadmaps, prioritization frameworks, user research, and cross-functional collaboration skills needed to ship great products.', 'A practical introduction to product management covering roadmaps, prioritization frameworks, user research, and cross-functional collaboration skills needed to ship great products.',
overview: 'Welcome to Product Management Fundamentals 🚀', overview: 'Welcome to Product Management Fundamentals 🚀',
+9
View File
@@ -4,6 +4,7 @@ interface SeedGroup {
mvcGroupId: string; mvcGroupId: string;
reactGroupId: string; reactGroupId: string;
pandasGroupId: string; pandasGroupId: string;
prof2GroupId: string;
testOrgId: string; testOrgId: string;
earlyAdopterGroupId: string; earlyAdopterGroupId: string;
earlyAdopterOrgId: string; earlyAdopterOrgId: string;
@@ -13,6 +14,7 @@ export async function seedGroup({
mvcGroupId, mvcGroupId,
reactGroupId, reactGroupId,
pandasGroupId, pandasGroupId,
prof2GroupId,
testOrgId, testOrgId,
earlyAdopterGroupId, earlyAdopterGroupId,
earlyAdopterOrgId earlyAdopterOrgId
@@ -42,6 +44,13 @@ export async function seedGroup({
'Unlock the power of data with our "Data Science with Python and Pandas" course. Dive into Python programming fundamentals and then journey into the world of Pandas for efficient data manipulation and analysis.', 'Unlock the power of data with our "Data Science with Python and Pandas" course. Dive into Python programming fundamentals and then journey into the world of Pandas for efficient data manipulation and analysis.',
organizationId: testOrgId organizationId: testOrgId
}, },
{
id: prof2GroupId,
name: 'Introducción a la Administración Pública',
description:
'Curso impartido por la profesora Laura Perez Garcia sobre los fundamentos de la administración pública y su aplicación práctica en el Ayuntamiento.',
organizationId: testOrgId
},
{ {
id: earlyAdopterGroupId, id: earlyAdopterGroupId,
name: 'Product Management Fundamentals', name: 'Product Management Fundamentals',
+18 -6
View File
@@ -4,7 +4,10 @@ interface SeedGroupmember {
mvcGroupId: string; mvcGroupId: string;
reactGroupId: string; reactGroupId: string;
pandasGroupId: string; pandasGroupId: string;
prof2GroupId: string;
adminUserId: string; adminUserId: string;
tutorUserId: string;
tutor2UserId: string;
studentUserId: string; studentUserId: string;
earlyAdopterGroupId: string; earlyAdopterGroupId: string;
earlyAdopterAdminUserId: string; earlyAdopterAdminUserId: string;
@@ -15,7 +18,10 @@ export async function seedGroupmembers({
mvcGroupId, mvcGroupId,
reactGroupId, reactGroupId,
pandasGroupId, pandasGroupId,
prof2GroupId,
adminUserId, adminUserId,
tutorUserId,
tutor2UserId,
studentUserId, studentUserId,
earlyAdopterGroupId, earlyAdopterGroupId,
earlyAdopterAdminUserId, earlyAdopterAdminUserId,
@@ -28,20 +34,26 @@ export async function seedGroupmembers({
{ {
groupId: mvcGroupId, groupId: mvcGroupId,
roleId: 2, // TUTOR roleId: 2, // TUTOR
profileId: adminUserId, profileId: tutorUserId,
email: 'admin@test.com' email: 'gehernandez@tijuana.gob.mx'
}, },
{ {
groupId: reactGroupId, groupId: reactGroupId,
roleId: 2, // TUTOR roleId: 2, // TUTOR
profileId: adminUserId, profileId: tutorUserId,
email: 'admin@test.com' email: 'gehernandez@tijuana.gob.mx'
}, },
{ {
groupId: pandasGroupId, groupId: pandasGroupId,
roleId: 2, // TUTOR roleId: 2, // TUTOR
profileId: adminUserId, profileId: tutorUserId,
email: 'admin@test.com' email: 'gehernandez@tijuana.gob.mx'
},
{
groupId: prof2GroupId,
roleId: 2, // TUTOR
profileId: tutor2UserId,
email: 'profesor2@tijuana.gob.mx'
}, },
{ {
groupId: pandasGroupId, groupId: pandasGroupId,
+3 -31
View File
@@ -1,9 +1,7 @@
import { db, organization } from '@db/drizzle'; import { db, organization } from '@db/drizzle';
export async function seedOrganization({ export async function seedOrganization({
testOrgId, enterpriseOrgId
enterpriseOrgId,
earlyAdopterOrgId
}: { }: {
testOrgId: string; testOrgId: string;
enterpriseOrgId: string; enterpriseOrgId: string;
@@ -13,36 +11,10 @@ export async function seedOrganization({
const existingOrgIds = existingOrgs.map((o) => o.id); const existingOrgIds = existingOrgs.map((o) => o.id);
const organizationsToInsert = [ const organizationsToInsert = [
{
id: testOrgId,
name: 'Udemy Test',
siteName: 'udemy-test',
settings: {},
landingpage: {},
theme: '',
customization: {
apps: { poll: true, comments: true },
course: { grading: true, newsfeed: true },
dashboard: { exercise: true, community: true, bannerText: '', bannerImage: '' }
}
},
{ {
id: enterpriseOrgId, id: enterpriseOrgId,
name: 'Coursera Test', name: 'H. Ayuntamiento de Tijuana',
siteName: 'coursera-test', siteName: 'ayuntamiento-tijuana',
settings: {},
landingpage: {},
theme: '',
customization: {
apps: { poll: true, comments: true },
course: { grading: true, newsfeed: true },
dashboard: { exercise: true, community: true, bannerText: '', bannerImage: '' }
}
},
{
id: earlyAdopterOrgId,
name: 'Skillshare Test',
siteName: 'skillshare-test',
settings: {}, settings: {},
landingpage: {}, landingpage: {},
theme: '', theme: '',
@@ -3,6 +3,8 @@ import { db, organizationmember } from '@db/drizzle';
interface SeedOrganizationMember { interface SeedOrganizationMember {
testOrgId: string; testOrgId: string;
adminUserId: string; adminUserId: string;
tutorUserId: string;
tutor2UserId: string;
studentUserId: string; studentUserId: string;
enterpriseOrgId: string; enterpriseOrgId: string;
enterpriseAdminUserId: string; enterpriseAdminUserId: string;
@@ -13,55 +15,39 @@ interface SeedOrganizationMember {
} }
export async function seedOrganizationMember({ export async function seedOrganizationMember({
testOrgId,
adminUserId, adminUserId,
tutorUserId,
tutor2UserId,
studentUserId, studentUserId,
enterpriseOrgId, enterpriseOrgId
enterpriseAdminUserId,
enterpriseStudentUserId,
earlyAdopterOrgId,
earlyAdopterAdminUserId,
earlyAdopterStudentUserId
}: SeedOrganizationMember) { }: SeedOrganizationMember) {
const existingOrgMembers = await db.select().from(organizationmember); const existingOrgMembers = await db.select().from(organizationmember);
const existingOrgMemberKeys = existingOrgMembers.map((om) => `${om.organizationId}-${om.profileId}`); const existingOrgMemberKeys = existingOrgMembers.map((om) => `${om.organizationId}-${om.profileId}`);
const orgMembersToInsert = [ const orgMembersToInsert = [
{ {
organizationId: testOrgId, organizationId: enterpriseOrgId,
roleId: 1, // ADMIN roleId: 1, // ADMIN
profileId: adminUserId, profileId: adminUserId,
verified: false verified: false
}, },
{ {
organizationId: testOrgId, organizationId: enterpriseOrgId,
roleId: 2, // TUTOR
profileId: tutorUserId,
verified: false
},
{
organizationId: enterpriseOrgId,
roleId: 2, // TUTOR
profileId: tutor2UserId,
verified: false
},
{
organizationId: enterpriseOrgId,
roleId: 3, // STUDENT roleId: 3, // STUDENT
profileId: studentUserId, profileId: studentUserId,
verified: false verified: false
},
{
organizationId: enterpriseOrgId,
roleId: 1, // ADMIN
profileId: enterpriseAdminUserId,
verified: false
},
{
organizationId: enterpriseOrgId,
roleId: 3, // STUDENT
profileId: enterpriseStudentUserId,
verified: false
},
{
organizationId: earlyAdopterOrgId,
roleId: 1, // ADMIN
profileId: earlyAdopterAdminUserId,
verified: false
},
{
organizationId: earlyAdopterOrgId,
roleId: 3, // STUDENT
profileId: earlyAdopterStudentUserId,
verified: false
} }
].filter((om) => !existingOrgMemberKeys.includes(`${om.organizationId}-${om.profileId}`)); ].filter((om) => !existingOrgMemberKeys.includes(`${om.organizationId}-${om.profileId}`));
+124 -25
View File
@@ -4,8 +4,8 @@
"id": "01676a50-bb56-4c5e-8a61-fb9e9190fb10", "id": "01676a50-bb56-4c5e-8a61-fb9e9190fb10",
"aud": "authenticated", "aud": "authenticated",
"role": "authenticated", "role": "authenticated",
"email": "test@test.com", "email": "gehernandez@tijuana.gob.mx",
"encrypted_password": "$2a$10$WmfPO84h.8SbkZWSzXAygead77QQQXdeO5XIMd8iXk8SFQKB3Udy2", "encrypted_password": "$2a$10$n8vBI6.pyE0W/RO9DcJDseLKF/CRwsU4X4Lc2MaQogt8pQgnJavTa",
"email_confirmed_at": "2023-11-22T10:09:32.250Z", "email_confirmed_at": "2023-11-22T10:09:32.250Z",
"invited_at": null, "invited_at": null,
"confirmation_token": "", "confirmation_token": "",
@@ -16,7 +16,10 @@
"email_change": "", "email_change": "",
"email_change_sent_at": null, "email_change_sent_at": null,
"last_sign_in_at": "2023-12-04T12:57:34.337Z", "last_sign_in_at": "2023-12-04T12:57:34.337Z",
"raw_app_meta_data": { "provider": "email", "providers": ["email"] }, "raw_app_meta_data": {
"provider": "email",
"providers": ["email"]
},
"raw_user_meta_data": {}, "raw_user_meta_data": {},
"is_super_admin": null, "is_super_admin": null,
"created_at": "2023-11-22T10:09:32.171Z", "created_at": "2023-11-22T10:09:32.171Z",
@@ -39,24 +42,27 @@
{ {
"provider_id": "01676a50-bb56-4c5e-8a61-fb9e9190fb10", "provider_id": "01676a50-bb56-4c5e-8a61-fb9e9190fb10",
"user_id": "01676a50-bb56-4c5e-8a61-fb9e9190fb10", "user_id": "01676a50-bb56-4c5e-8a61-fb9e9190fb10",
"identity_data": { "sub": "01676a50-bb56-4c5e-8a61-fb9e9190fb10", "email": "test@test.com" }, "identity_data": {
"sub": "01676a50-bb56-4c5e-8a61-fb9e9190fb10",
"email": "gehernandez@tijuana.gob.mx"
},
"provider": "email", "provider": "email",
"last_sign_in_at": "2023-11-22T10:09:32.225444+00:00", "last_sign_in_at": "2023-11-22T10:09:32.225444+00:00",
"created_at": "2023-11-22T10:09:32.225521+00:00", "created_at": "2023-11-22T10:09:32.225521+00:00",
"updated_at": "2023-11-22T10:09:32.225521+00:00", "updated_at": "2023-11-22T10:09:32.225521+00:00",
"email": "test@test.com", "email": "gehernandez@tijuana.gob.mx",
"id": "a8961fe8-d51f-4b58-b8bb-a77d6a3c0cbd" "id": "a8961fe8-d51f-4b58-b8bb-a77d6a3c0cbd"
} }
], ],
"profile_fullname": "Alice" "profile_fullname": "Eloy Gustavo Hernandez Ramirez"
}, },
{ {
"instance_id": "00000000-0000-0000-0000-000000000000", "instance_id": "00000000-0000-0000-0000-000000000000",
"id": "0c256e75-aa40-4f62-8d30-0217ca1c60d9", "id": "0c256e75-aa40-4f62-8d30-0217ca1c60d9",
"aud": "authenticated", "aud": "authenticated",
"role": "authenticated", "role": "authenticated",
"email": "student@test.com", "email": "mavuelvas@tijuana.gob.mx",
"encrypted_password": "$2a$10$dgxySj.k12gDKhLx7X4x6./J.Nzhz7WQrwh5lkjLKwIwWW4o5GJcW", "encrypted_password": "$2a$10$n8vBI6.pyE0W/RO9DcJDseLKF/CRwsU4X4Lc2MaQogt8pQgnJavTa",
"email_confirmed_at": "2023-12-18T17:08:57.413Z", "email_confirmed_at": "2023-12-18T17:08:57.413Z",
"invited_at": null, "invited_at": null,
"confirmation_token": "", "confirmation_token": "",
@@ -67,7 +73,10 @@
"email_change": "", "email_change": "",
"email_change_sent_at": null, "email_change_sent_at": null,
"last_sign_in_at": "2023-12-19T18:22:55.359Z", "last_sign_in_at": "2023-12-19T18:22:55.359Z",
"raw_app_meta_data": { "provider": "email", "providers": ["email"] }, "raw_app_meta_data": {
"provider": "email",
"providers": ["email"]
},
"raw_user_meta_data": {}, "raw_user_meta_data": {},
"is_super_admin": null, "is_super_admin": null,
"created_at": "2023-12-18T17:08:57.399Z", "created_at": "2023-12-18T17:08:57.399Z",
@@ -90,23 +99,26 @@
{ {
"provider_id": "0c256e75-aa40-4f62-8d30-0217ca1c60d9", "provider_id": "0c256e75-aa40-4f62-8d30-0217ca1c60d9",
"user_id": "0c256e75-aa40-4f62-8d30-0217ca1c60d9", "user_id": "0c256e75-aa40-4f62-8d30-0217ca1c60d9",
"identity_data": { "sub": "0c256e75-aa40-4f62-8d30-0217ca1c60d9", "email": "student@test.com" }, "identity_data": {
"sub": "0c256e75-aa40-4f62-8d30-0217ca1c60d9",
"email": "mavuelvas@tijuana.gob.mx"
},
"provider": "email", "provider": "email",
"last_sign_in_at": "2023-12-18T17:08:57.410285+00:00", "last_sign_in_at": "2023-12-18T17:08:57.410285+00:00",
"created_at": "2023-12-18T17:08:57.410344+00:00", "created_at": "2023-12-18T17:08:57.410344+00:00",
"updated_at": "2023-12-18T17:08:57.410344+00:00", "updated_at": "2023-12-18T17:08:57.410344+00:00",
"email": "student@test.com", "email": "mavuelvas@tijuana.gob.mx",
"id": "65fa8bad-ca49-4676-8b17-ead4cd37fed6" "id": "65fa8bad-ca49-4676-8b17-ead4cd37fed6"
} }
], ],
"profile_fullname": "John Doe" "profile_fullname": "Marco Antonio Vuelvas Diaz"
}, },
{ {
"instance_id": "00000000-0000-0000-0000-000000000000", "instance_id": "00000000-0000-0000-0000-000000000000",
"id": "7ac00503-8519-43c8-a5ea-b79aeca900b1", "id": "7ac00503-8519-43c8-a5ea-b79aeca900b1",
"aud": "authenticated", "aud": "authenticated",
"role": "authenticated", "role": "authenticated",
"email": "admin@test.com", "email": "ulises.vargas@agenciadigitaltj.gob.mx",
"encrypted_password": "$2a$10$n8vBI6.pyE0W/RO9DcJDseLKF/CRwsU4X4Lc2MaQogt8pQgnJavTa", "encrypted_password": "$2a$10$n8vBI6.pyE0W/RO9DcJDseLKF/CRwsU4X4Lc2MaQogt8pQgnJavTa",
"email_confirmed_at": "2023-12-16T14:04:38.311Z", "email_confirmed_at": "2023-12-16T14:04:38.311Z",
"invited_at": null, "invited_at": null,
@@ -118,7 +130,10 @@
"email_change": "", "email_change": "",
"email_change_sent_at": null, "email_change_sent_at": null,
"last_sign_in_at": "2025-10-12T19:35:13.256Z", "last_sign_in_at": "2025-10-12T19:35:13.256Z",
"raw_app_meta_data": { "provider": "email", "providers": ["email"] }, "raw_app_meta_data": {
"provider": "email",
"providers": ["email"]
},
"raw_user_meta_data": {}, "raw_user_meta_data": {},
"is_super_admin": null, "is_super_admin": null,
"created_at": "2023-12-16T14:04:38.281Z", "created_at": "2023-12-16T14:04:38.281Z",
@@ -141,16 +156,19 @@
{ {
"provider_id": "7ac00503-8519-43c8-a5ea-b79aeca900b1", "provider_id": "7ac00503-8519-43c8-a5ea-b79aeca900b1",
"user_id": "7ac00503-8519-43c8-a5ea-b79aeca900b1", "user_id": "7ac00503-8519-43c8-a5ea-b79aeca900b1",
"identity_data": { "sub": "7ac00503-8519-43c8-a5ea-b79aeca900b1", "email": "admin@test.com" }, "identity_data": {
"sub": "7ac00503-8519-43c8-a5ea-b79aeca900b1",
"email": "ulises.vargas@agenciadigitaltj.gob.mx"
},
"provider": "email", "provider": "email",
"last_sign_in_at": "2023-12-16T14:04:38.302264+00:00", "last_sign_in_at": "2023-12-16T14:04:38.302264+00:00",
"created_at": "2023-12-16T14:04:38.302326+00:00", "created_at": "2023-12-16T14:04:38.302326+00:00",
"updated_at": "2023-12-16T14:04:38.302326+00:00", "updated_at": "2023-12-16T14:04:38.302326+00:00",
"email": "admin@test.com", "email": "ulises.vargas@agenciadigitaltj.gob.mx",
"id": "e790ab09-9c5c-4fb4-aa6b-78a5abe8cd56" "id": "e790ab09-9c5c-4fb4-aa6b-78a5abe8cd56"
} }
], ],
"profile_fullname": "Elon Gates" "profile_fullname": "Ulises Vargas Flores"
}, },
{ {
"instance_id": "00000000-0000-0000-0000-000000000000", "instance_id": "00000000-0000-0000-0000-000000000000",
@@ -169,7 +187,10 @@
"email_change": "", "email_change": "",
"email_change_sent_at": null, "email_change_sent_at": null,
"last_sign_in_at": null, "last_sign_in_at": null,
"raw_app_meta_data": { "provider": "email", "providers": ["email"] }, "raw_app_meta_data": {
"provider": "email",
"providers": ["email"]
},
"raw_user_meta_data": {}, "raw_user_meta_data": {},
"is_super_admin": null, "is_super_admin": null,
"created_at": "2025-03-23T12:00:00.000Z", "created_at": "2025-03-23T12:00:00.000Z",
@@ -192,7 +213,10 @@
{ {
"provider_id": "3c9052de-7e4f-4c3a-8d8e-2d5e9b7f1a3c", "provider_id": "3c9052de-7e4f-4c3a-8d8e-2d5e9b7f1a3c",
"user_id": "3c9052de-7e4f-4c3a-8d8e-2d5e9b7f1a3c", "user_id": "3c9052de-7e4f-4c3a-8d8e-2d5e9b7f1a3c",
"identity_data": { "sub": "3c9052de-7e4f-4c3a-8d8e-2d5e9b7f1a3c", "email": "enterprise@test.com" }, "identity_data": {
"sub": "3c9052de-7e4f-4c3a-8d8e-2d5e9b7f1a3c",
"email": "enterprise@test.com"
},
"provider": "email", "provider": "email",
"last_sign_in_at": "2025-03-23T12:00:00.000Z", "last_sign_in_at": "2025-03-23T12:00:00.000Z",
"created_at": "2025-03-23T12:00:00.000Z", "created_at": "2025-03-23T12:00:00.000Z",
@@ -220,7 +244,10 @@
"email_change": "", "email_change": "",
"email_change_sent_at": null, "email_change_sent_at": null,
"last_sign_in_at": null, "last_sign_in_at": null,
"raw_app_meta_data": { "provider": "email", "providers": ["email"] }, "raw_app_meta_data": {
"provider": "email",
"providers": ["email"]
},
"raw_user_meta_data": {}, "raw_user_meta_data": {},
"is_super_admin": null, "is_super_admin": null,
"created_at": "2025-03-23T12:00:00.000Z", "created_at": "2025-03-23T12:00:00.000Z",
@@ -243,7 +270,10 @@
{ {
"provider_id": "4da163ef-8050-4d4b-9c9f-3e6fac802b4d", "provider_id": "4da163ef-8050-4d4b-9c9f-3e6fac802b4d",
"user_id": "4da163ef-8050-4d4b-9c9f-3e6fac802b4d", "user_id": "4da163ef-8050-4d4b-9c9f-3e6fac802b4d",
"identity_data": { "sub": "4da163ef-8050-4d4b-9c9f-3e6fac802b4d", "email": "enterprise-student@test.com" }, "identity_data": {
"sub": "4da163ef-8050-4d4b-9c9f-3e6fac802b4d",
"email": "enterprise-student@test.com"
},
"provider": "email", "provider": "email",
"last_sign_in_at": "2025-03-23T12:00:00.000Z", "last_sign_in_at": "2025-03-23T12:00:00.000Z",
"created_at": "2025-03-23T12:00:00.000Z", "created_at": "2025-03-23T12:00:00.000Z",
@@ -271,7 +301,10 @@
"email_change": "", "email_change": "",
"email_change_sent_at": null, "email_change_sent_at": null,
"last_sign_in_at": null, "last_sign_in_at": null,
"raw_app_meta_data": { "provider": "email", "providers": ["email"] }, "raw_app_meta_data": {
"provider": "email",
"providers": ["email"]
},
"raw_user_meta_data": {}, "raw_user_meta_data": {},
"is_super_admin": null, "is_super_admin": null,
"created_at": "2025-03-23T12:00:00.000Z", "created_at": "2025-03-23T12:00:00.000Z",
@@ -294,7 +327,10 @@
{ {
"provider_id": "6e0163ff-9161-4d4b-be9f-3e7fbd913c5e", "provider_id": "6e0163ff-9161-4d4b-be9f-3e7fbd913c5e",
"user_id": "6e0163ff-9161-4d4b-be9f-3e7fbd913c5e", "user_id": "6e0163ff-9161-4d4b-be9f-3e7fbd913c5e",
"identity_data": { "sub": "6e0163ff-9161-4d4b-be9f-3e7fbd913c5e", "email": "early-adopter@test.com" }, "identity_data": {
"sub": "6e0163ff-9161-4d4b-be9f-3e7fbd913c5e",
"email": "early-adopter@test.com"
},
"provider": "email", "provider": "email",
"last_sign_in_at": "2025-03-23T12:00:00.000Z", "last_sign_in_at": "2025-03-23T12:00:00.000Z",
"created_at": "2025-03-23T12:00:00.000Z", "created_at": "2025-03-23T12:00:00.000Z",
@@ -322,7 +358,10 @@
"email_change": "", "email_change": "",
"email_change_sent_at": null, "email_change_sent_at": null,
"last_sign_in_at": null, "last_sign_in_at": null,
"raw_app_meta_data": { "provider": "email", "providers": ["email"] }, "raw_app_meta_data": {
"provider": "email",
"providers": ["email"]
},
"raw_user_meta_data": {}, "raw_user_meta_data": {},
"is_super_admin": null, "is_super_admin": null,
"created_at": "2025-03-23T12:00:00.000Z", "created_at": "2025-03-23T12:00:00.000Z",
@@ -345,7 +384,10 @@
{ {
"provider_id": "7fb274aa-a272-4e5c-cf0a-4f8cce024d6f", "provider_id": "7fb274aa-a272-4e5c-cf0a-4f8cce024d6f",
"user_id": "7fb274aa-a272-4e5c-cf0a-4f8cce024d6f", "user_id": "7fb274aa-a272-4e5c-cf0a-4f8cce024d6f",
"identity_data": { "sub": "7fb274aa-a272-4e5c-cf0a-4f8cce024d6f", "email": "early-adopter-student@test.com" }, "identity_data": {
"sub": "7fb274aa-a272-4e5c-cf0a-4f8cce024d6f",
"email": "early-adopter-student@test.com"
},
"provider": "email", "provider": "email",
"last_sign_in_at": "2025-03-23T12:00:00.000Z", "last_sign_in_at": "2025-03-23T12:00:00.000Z",
"created_at": "2025-03-23T12:00:00.000Z", "created_at": "2025-03-23T12:00:00.000Z",
@@ -355,5 +397,62 @@
} }
], ],
"profile_fullname": "Early Adopter Student" "profile_fullname": "Early Adopter Student"
},
{
"instance_id": "00000000-0000-0000-0000-000000000000",
"id": "8f3a5b2c-1d4e-4f6f-a8b9-0c1d2e3f4a5b",
"aud": "authenticated",
"role": "authenticated",
"email": "profesor2@tijuana.gob.mx",
"encrypted_password": "$2a$10$n8vBI6.pyE0W/RO9DcJDseLKF/CRwsU4X4Lc2MaQogt8pQgnJavTa",
"email_confirmed_at": "2023-11-22T10:09:32.250Z",
"invited_at": null,
"confirmation_token": "",
"confirmation_sent_at": null,
"recovery_token": "",
"recovery_sent_at": null,
"email_change_token_new": "",
"email_change": "",
"email_change_sent_at": null,
"last_sign_in_at": "2023-12-04T12:57:34.337Z",
"raw_app_meta_data": {
"provider": "email",
"providers": ["email"]
},
"raw_user_meta_data": {},
"is_super_admin": null,
"created_at": "2023-11-22T10:09:32.171Z",
"updated_at": "2023-12-16T14:00:35.986Z",
"phone": null,
"phone_confirmed_at": null,
"phone_change": "",
"phone_change_token": "",
"phone_change_sent_at": null,
"confirmed_at": "2023-11-22T10:09:32.250Z",
"email_change_token_current": "",
"email_change_confirm_status": 0,
"banned_until": null,
"reauthentication_token": "",
"reauthentication_sent_at": null,
"is_sso_user": false,
"deleted_at": null,
"is_anonymous": false,
"identities": [
{
"provider_id": "8f3a5b2c-1d4e-4f6f-a8b9-0c1d2e3f4a5b",
"user_id": "8f3a5b2c-1d4e-4f6f-a8b9-0c1d2e3f4a5b",
"identity_data": {
"sub": "8f3a5b2c-1d4e-4f6f-a8b9-0c1d2e3f4a5b",
"email": "profesor2@tijuana.gob.mx"
},
"provider": "email",
"last_sign_in_at": "2023-11-22T10:09:32.225444+00:00",
"created_at": "2023-11-22T10:09:32.225521+00:00",
"updated_at": "2023-11-22T10:09:32.225521+00:00",
"email": "profesor2@tijuana.gob.mx",
"id": "12345678-abcd-ef01-2345-6789abcdef01"
}
],
"profile_fullname": "Laura Perez Garcia"
} }
] ]
+18 -3
View File
@@ -7,10 +7,16 @@
* even though it isn't currently exposed to users. * even though it isn't currently exposed to users.
*/ */
export const AGENT_MODEL_IDS = ['gemini-3.1-flash-lite', 'gpt-5.4-mini', 'claude-sonnet-3-5', 'kimi-k2.6'] as const; export const AGENT_MODEL_IDS = [
'gemini-3.1-flash-lite',
'gpt-5.4-mini',
'claude-sonnet-3-5',
'kimi-k2.6',
'deepseek-chat'
] as const;
export type AgentModelId = (typeof AGENT_MODEL_IDS)[number]; export type AgentModelId = (typeof AGENT_MODEL_IDS)[number];
export type AgentModelProvider = 'google' | 'openai' | 'anthropic' | 'moonshot'; export type AgentModelProvider = 'google' | 'openai' | 'anthropic' | 'moonshot' | 'deepseek';
export type AgentModelCostTier = 'low' | 'high'; export type AgentModelCostTier = 'low' | 'high';
export interface AgentModelDescriptor { export interface AgentModelDescriptor {
@@ -58,14 +64,23 @@ export const AGENT_MODELS: Record<AgentModelId, AgentModelDescriptor> = {
isFree: true, isFree: true,
costTier: 'low', costTier: 'low',
contextWindow: 262_144 contextWindow: 262_144
},
'deepseek-chat': {
provider: 'deepseek',
label: 'DeepSeek Chat',
backendModelId: 'deepseek-chat',
isFree: true,
costTier: 'low',
contextWindow: 64000
} }
}; };
export const UI_PICKER_MODEL_IDS = [ export const UI_PICKER_MODEL_IDS = [
'deepseek-chat',
'kimi-k2.6', 'kimi-k2.6',
'gemini-3.1-flash-lite', 'gemini-3.1-flash-lite',
'gpt-5.4-mini', 'gpt-5.4-mini',
'claude-sonnet-3-5' 'claude-sonnet-3-5'
] as const satisfies readonly AgentModelId[]; ] as const satisfies readonly AgentModelId[];
export const DEFAULT_PICKER_MODEL_ID: AgentModelId = 'gemini-3.1-flash-lite'; export const DEFAULT_PICKER_MODEL_ID: AgentModelId = 'deepseek-chat';
+97 -49
View File
@@ -619,7 +619,7 @@ importers:
version: 0.4.9(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) version: 0.4.9(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
'@shikijs/twoslash': '@shikijs/twoslash':
specifier: 4.3.1 specifier: 4.3.1
version: 4.3.1(typescript@6.0.3) version: 4.3.1(typescript@5.9.3)
'@tailwindcss/typography': '@tailwindcss/typography':
specifier: 0.5.19 specifier: 0.5.19
version: 0.5.19(tailwindcss@4.1.18) version: 0.5.19(tailwindcss@4.1.18)
@@ -631,7 +631,7 @@ importers:
version: 7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0) version: 7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)
blume: blume:
specifier: 1.2.0 specifier: 1.2.0
version: 1.2.0(864af55737aed5e342af6da019f32ece) version: 1.2.0(4833f745f9fd8f626b4a7791f185a353)
mermaid: mermaid:
specifier: ^11.16.0 specifier: ^11.16.0
version: 11.16.0 version: 11.16.0
@@ -846,6 +846,9 @@ importers:
'@ai-sdk/anthropic': '@ai-sdk/anthropic':
specifier: ^3.0.69 specifier: ^3.0.69
version: 3.0.69(zod@4.2.1) version: 3.0.69(zod@4.2.1)
'@ai-sdk/deepseek':
specifier: ^3.0.29
version: 3.0.29(zod@4.2.1)
'@ai-sdk/google': '@ai-sdk/google':
specifier: ^3.0.0 specifier: ^3.0.0
version: 3.0.64(zod@4.2.1) version: 3.0.64(zod@4.2.1)
@@ -1346,7 +1349,7 @@ importers:
version: 10.1.10(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(esbuild@0.25.12)(rollup@4.54.0)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) version: 10.1.10(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(esbuild@0.25.12)(rollup@4.54.0)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
'@storybook/sveltekit': '@storybook/sveltekit':
specifier: ^8.4.2 specifier: ^8.4.2
version: 8.6.15(@babel/core@7.29.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3)))(postcss@8.5.19)(sass@1.97.1)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) version: 8.6.15(@babel/core@7.29.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@5.9.3)))(postcss@8.5.19)(sass@1.97.1)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
'@storybook/test': '@storybook/test':
specifier: ^8.4.2 specifier: ^8.4.2
version: 8.6.14(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6)) version: 8.6.14(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))
@@ -1385,7 +1388,7 @@ importers:
version: 4.21.0 version: 4.21.0
typescript-svelte-plugin: typescript-svelte-plugin:
specifier: ^0.3.50 specifier: ^0.3.50
version: 0.3.50(svelte@5.46.0)(typescript@6.0.3) version: 0.3.50(svelte@5.46.0)(typescript@5.9.3)
vite: vite:
specifier: ^7.1.4 specifier: ^7.1.4
version: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0) version: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)
@@ -1633,6 +1636,12 @@ packages:
peerDependencies: peerDependencies:
zod: 4.2.1 zod: 4.2.1
'@ai-sdk/deepseek@3.0.29':
resolution: {integrity: sha512-MgcBrpQ+zfDUfzNBbMtylzCE7xBlqZtshtBtYFhQbMxpcMSPvkQsI3RBR3bNG1LWqWU4tsIe4Qzc/enriYdY2A==}
engines: {node: '>=22'}
peerDependencies:
zod: 4.2.1
'@ai-sdk/gateway@2.0.111': '@ai-sdk/gateway@2.0.111':
resolution: {integrity: sha512-pZR4Is/0IGH1tDY6XgJltoH3hxVqZ+2StQMhWkBtCWWaa4JYKP8gAiNPDxy585HenQfcAqr1qsO9FgSYkHxo5w==} resolution: {integrity: sha512-pZR4Is/0IGH1tDY6XgJltoH3hxVqZ+2StQMhWkBtCWWaa4JYKP8gAiNPDxy585HenQfcAqr1qsO9FgSYkHxo5w==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -1687,6 +1696,12 @@ packages:
peerDependencies: peerDependencies:
zod: 4.2.1 zod: 4.2.1
'@ai-sdk/provider-utils@5.0.28':
resolution: {integrity: sha512-TnHUyd/rCYQqHg5RuiOaz/hUql6U+kbUaBW0Rp+0N5UhnAInA9CzzV0HXvuAAPwppDsK6fAx9Rd+tRawpJ/3pg==}
engines: {node: '>=22'}
peerDependencies:
zod: 4.2.1
'@ai-sdk/provider@2.0.3': '@ai-sdk/provider@2.0.3':
resolution: {integrity: sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww==} resolution: {integrity: sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -1699,6 +1714,10 @@ packages:
resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==} resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
'@ai-sdk/provider@4.0.7':
resolution: {integrity: sha512-6or44XprPzKbr8zkmzosowSE0pxkvJcoojBL+mCZvPUt3kvXp3XSNqeVun9golb1acEfSo6yaEBRT18h2VU+1Q==}
engines: {node: '>=22'}
'@ai-sdk/svelte@4.0.158': '@ai-sdk/svelte@4.0.158':
resolution: {integrity: sha512-SJl8YWjDRxHy6m9UDxNLYqUiyQ9nZbJL8P3gBn5g9zFU5fjX+MXN6aFiAs4B9vSXoB8Nv1J9ckZbv56glOUnHA==} resolution: {integrity: sha512-SJl8YWjDRxHy6m9UDxNLYqUiyQ9nZbJL8P3gBn5g9zFU5fjX+MXN6aFiAs4B9vSXoB8Nv1J9ckZbv56glOUnHA==}
peerDependencies: peerDependencies:
@@ -8361,6 +8380,9 @@ packages:
'@vue/shared@3.5.26': '@vue/shared@3.5.26':
resolution: {integrity: sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==} resolution: {integrity: sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==}
'@workflow/serde@4.1.0':
resolution: {integrity: sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==}
'@xmldom/is-dom-node@1.0.1': '@xmldom/is-dom-node@1.0.1':
resolution: {integrity: sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q==} resolution: {integrity: sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
@@ -10255,6 +10277,7 @@ packages:
eslint@9.39.2: eslint@9.39.2:
resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true hasBin: true
peerDependencies: peerDependencies:
jiti: '*' jiti: '*'
@@ -14845,6 +14868,10 @@ packages:
resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==} resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==}
engines: {node: '>=20.18.1'} engines: {node: '>=20.18.1'}
undici@7.29.0:
resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==}
engines: {node: '>=20.18.1'}
undici@8.7.0: undici@8.7.0:
resolution: {integrity: sha512-N7iQtfyLhIMOFgQubvmLV26svHpO0bqKnAiWotTQCVKCmWrcGbBotPuW1x+xwYZ2VHdSTVUfPQQnlEt1/LouTQ==} resolution: {integrity: sha512-N7iQtfyLhIMOFgQubvmLV26svHpO0bqKnAiWotTQCVKCmWrcGbBotPuW1x+xwYZ2VHdSTVUfPQQnlEt1/LouTQ==}
engines: {node: '>=22.19.0'} engines: {node: '>=22.19.0'}
@@ -15802,6 +15829,12 @@ snapshots:
'@ai-sdk/provider-utils': 4.0.23(zod@4.2.1) '@ai-sdk/provider-utils': 4.0.23(zod@4.2.1)
zod: 4.2.1 zod: 4.2.1
'@ai-sdk/deepseek@3.0.29(zod@4.2.1)':
dependencies:
'@ai-sdk/provider': 4.0.7
'@ai-sdk/provider-utils': 5.0.28(zod@4.2.1)
zod: 4.2.1
'@ai-sdk/gateway@2.0.111(zod@3.25.76)': '@ai-sdk/gateway@2.0.111(zod@3.25.76)':
dependencies: dependencies:
'@ai-sdk/provider': 2.0.3 '@ai-sdk/provider': 2.0.3
@@ -15862,6 +15895,15 @@ snapshots:
eventsource-parser: 3.0.8 eventsource-parser: 3.0.8
zod: 4.2.1 zod: 4.2.1
'@ai-sdk/provider-utils@5.0.28(zod@4.2.1)':
dependencies:
'@ai-sdk/provider': 4.0.7
'@standard-schema/spec': 1.1.0
'@workflow/serde': 4.1.0
eventsource-parser: 3.0.8
undici: 7.29.0
zod: 4.2.1
'@ai-sdk/provider@2.0.3': '@ai-sdk/provider@2.0.3':
dependencies: dependencies:
json-schema: 0.4.0 json-schema: 0.4.0
@@ -15874,6 +15916,10 @@ snapshots:
dependencies: dependencies:
json-schema: 0.4.0 json-schema: 0.4.0
'@ai-sdk/provider@4.0.7':
dependencies:
json-schema: 0.4.0
'@ai-sdk/svelte@4.0.158(svelte@5.46.0)(zod@4.2.1)': '@ai-sdk/svelte@4.0.158(svelte@5.46.0)(zod@4.2.1)':
dependencies: dependencies:
'@ai-sdk/provider-utils': 4.0.23(zod@4.2.1) '@ai-sdk/provider-utils': 4.0.23(zod@4.2.1)
@@ -16121,10 +16167,10 @@ snapshots:
is-docker: 4.0.0 is-docker: 4.0.0
package-manager-detector: 1.7.0 package-manager-detector: 1.7.0
'@astrojs/vercel@11.0.3(@aws-sdk/credential-provider-web-identity@3.958.0)(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))(encoding@0.1.13)(react@19.2.3)(rollup@4.54.0)(svelte@5.46.0)(vue@3.5.26(typescript@6.0.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))': '@astrojs/vercel@11.0.3(@aws-sdk/credential-provider-web-identity@3.958.0)(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))(encoding@0.1.13)(react@19.2.3)(rollup@4.54.0)(svelte@5.46.0)(vue@3.5.26(typescript@5.9.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
dependencies: dependencies:
'@astrojs/internal-helpers': 0.10.1 '@astrojs/internal-helpers': 0.10.1
'@vercel/analytics': 1.6.1(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.3)(svelte@5.46.0)(vue@3.5.26(typescript@6.0.3)) '@vercel/analytics': 1.6.1(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.3)(svelte@5.46.0)(vue@3.5.26(typescript@5.9.3))
'@vercel/functions': 3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@vercel/functions': 3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))
'@vercel/nft': 1.10.2(encoding@0.1.13)(rollup@4.54.0) '@vercel/nft': 1.10.2(encoding@0.1.13)(rollup@4.54.0)
'@vercel/routing-utils': 5.3.3 '@vercel/routing-utils': 5.3.3
@@ -20678,6 +20724,15 @@ snapshots:
'@shikijs/core': 4.3.1 '@shikijs/core': 4.3.1
'@shikijs/types': 4.3.1 '@shikijs/types': 4.3.1
'@shikijs/twoslash@4.3.1(typescript@5.9.3)':
dependencies:
'@shikijs/core': 4.3.1
'@shikijs/types': 4.3.1
twoslash: 0.3.9(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
'@shikijs/twoslash@4.3.1(typescript@6.0.3)': '@shikijs/twoslash@4.3.1(typescript@6.0.3)':
dependencies: dependencies:
'@shikijs/core': 4.3.1 '@shikijs/core': 4.3.1
@@ -21337,7 +21392,7 @@ snapshots:
- rollup - rollup
- webpack - webpack
'@storybook/svelte-vite@8.6.15(@babel/core@7.29.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3)))(postcss@8.5.19)(sass@1.97.1)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))': '@storybook/svelte-vite@8.6.15(@babel/core@7.29.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@5.9.3)))(postcss@8.5.19)(sass@1.97.1)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))':
dependencies: dependencies:
'@storybook/builder-vite': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) '@storybook/builder-vite': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
'@storybook/svelte': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0) '@storybook/svelte': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)
@@ -21345,7 +21400,7 @@ snapshots:
magic-string: 0.30.21 magic-string: 0.30.21
storybook: 8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6) storybook: 8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6)
svelte: 5.46.0 svelte: 5.46.0
svelte-preprocess: 5.1.4(@babel/core@7.29.0)(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3)))(postcss@8.5.19)(sass@1.97.1)(svelte@5.46.0)(typescript@5.9.3) svelte-preprocess: 5.1.4(@babel/core@7.29.0)(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@5.9.3)))(postcss@8.5.19)(sass@1.97.1)(svelte@5.46.0)(typescript@5.9.3)
svelte2tsx: 0.7.46(svelte@5.46.0)(typescript@5.9.3) svelte2tsx: 0.7.46(svelte@5.46.0)(typescript@5.9.3)
sveltedoc-parser: 4.2.1 sveltedoc-parser: 4.2.1
ts-dedent: 2.2.0 ts-dedent: 2.2.0
@@ -21386,12 +21441,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@storybook/sveltekit@8.6.15(@babel/core@7.29.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3)))(postcss@8.5.19)(sass@1.97.1)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))': '@storybook/sveltekit@8.6.15(@babel/core@7.29.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@5.9.3)))(postcss@8.5.19)(sass@1.97.1)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))':
dependencies: dependencies:
'@storybook/addon-actions': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6)) '@storybook/addon-actions': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))
'@storybook/builder-vite': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) '@storybook/builder-vite': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
'@storybook/svelte': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0) '@storybook/svelte': 8.6.15(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)
'@storybook/svelte-vite': 8.6.15(@babel/core@7.29.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3)))(postcss@8.5.19)(sass@1.97.1)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) '@storybook/svelte-vite': 8.6.15(@babel/core@7.29.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@5.9.3)))(postcss@8.5.19)(sass@1.97.1)(storybook@8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6))(svelte@5.46.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
storybook: 8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6) storybook: 8.6.15(bufferutil@4.1.0)(prettier@3.8.2)(utf-8-validate@6.0.6)
svelte: 5.46.0 svelte: 5.46.0
vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0) vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)
@@ -23248,6 +23303,13 @@ snapshots:
'@typescript-eslint/types': 8.50.1 '@typescript-eslint/types': 8.50.1
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
'@typescript/vfs@1.6.4(typescript@5.9.3)':
dependencies:
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
'@typescript/vfs@1.6.4(typescript@6.0.3)': '@typescript/vfs@1.6.4(typescript@6.0.3)':
dependencies: dependencies:
debug: 4.4.3 debug: 4.4.3
@@ -23262,19 +23324,19 @@ snapshots:
d3-selection: 3.0.0 d3-selection: 3.0.0
d3-transition: 3.0.1(d3-selection@3.0.0) d3-transition: 3.0.1(d3-selection@3.0.0)
'@vercel/analytics@1.6.1(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.3)(svelte@5.46.0)(vue@3.5.26(typescript@6.0.3))': '@vercel/analytics@1.6.1(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.3)(svelte@5.46.0)(vue@3.5.26(typescript@5.9.3))':
optionalDependencies: optionalDependencies:
'@sveltejs/kit': 2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) '@sveltejs/kit': 2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
react: 19.2.3 react: 19.2.3
svelte: 5.46.0 svelte: 5.46.0
vue: 3.5.26(typescript@6.0.3) vue: 3.5.26(typescript@5.9.3)
'@vercel/analytics@2.0.1(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.3)(svelte@5.46.0)(vue@3.5.26(typescript@6.0.3))': '@vercel/analytics@2.0.1(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.3)(svelte@5.46.0)(vue@3.5.26(typescript@5.9.3))':
optionalDependencies: optionalDependencies:
'@sveltejs/kit': 2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) '@sveltejs/kit': 2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
react: 19.2.3 react: 19.2.3
svelte: 5.46.0 svelte: 5.46.0
vue: 3.5.26(typescript@6.0.3) vue: 3.5.26(typescript@5.9.3)
'@vercel/cli-config@0.2.0': '@vercel/cli-config@0.2.0':
dependencies: dependencies:
@@ -23615,6 +23677,8 @@ snapshots:
'@vue/shared@3.5.26': '@vue/shared@3.5.26':
optional: true optional: true
'@workflow/serde@4.1.0': {}
'@xmldom/is-dom-node@1.0.1': {} '@xmldom/is-dom-node@1.0.1': {}
'@xmldom/xmldom@0.8.11': {} '@xmldom/xmldom@0.8.11': {}
@@ -24233,14 +24297,14 @@ snapshots:
bluebird@3.4.7: {} bluebird@3.4.7: {}
blume@1.2.0(864af55737aed5e342af6da019f32ece): blume@1.2.0(4833f745f9fd8f626b4a7791f185a353):
dependencies: dependencies:
'@astrojs/check': 0.9.9(prettier@3.8.2)(typescript@6.0.3) '@astrojs/check': 0.9.9(prettier@3.8.2)(typescript@6.0.3)
'@astrojs/markdown-satteri': 0.3.4 '@astrojs/markdown-satteri': 0.3.4
'@astrojs/mdx': 7.0.3(@astrojs/markdown-satteri@0.3.4)(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) '@astrojs/mdx': 7.0.3(@astrojs/markdown-satteri@0.3.4)(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
'@astrojs/node': 11.0.2(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) '@astrojs/node': 11.0.2(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
'@astrojs/react': 6.0.1(@types/node@24.10.4)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(jiti@2.6.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0) '@astrojs/react': 6.0.1(@types/node@24.10.4)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(jiti@2.6.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)
'@astrojs/vercel': 11.0.3(@aws-sdk/credential-provider-web-identity@3.958.0)(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))(encoding@0.1.13)(react@19.2.3)(rollup@4.54.0)(svelte@5.46.0)(vue@3.5.26(typescript@6.0.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@astrojs/vercel': 11.0.3(@aws-sdk/credential-provider-web-identity@3.958.0)(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(astro@7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))(encoding@0.1.13)(react@19.2.3)(rollup@4.54.0)(svelte@5.46.0)(vue@3.5.26(typescript@5.9.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))
'@clack/prompts': 1.7.0 '@clack/prompts': 1.7.0
'@iconify-json/lucide': 1.2.117 '@iconify-json/lucide': 1.2.117
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
@@ -24255,7 +24319,7 @@ snapshots:
'@shikijs/twoslash': 4.3.1(typescript@6.0.3) '@shikijs/twoslash': 4.3.1(typescript@6.0.3)
'@tailwindcss/typography': 0.5.20(tailwindcss@4.2.2) '@tailwindcss/typography': 0.5.20(tailwindcss@4.2.2)
'@tailwindcss/vite': 4.1.18(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)) '@tailwindcss/vite': 4.1.18(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0))
'@vercel/analytics': 2.0.1(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.3)(svelte@5.46.0)(vue@3.5.26(typescript@6.0.3)) '@vercel/analytics': 2.0.1(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.46.0)(vite@8.1.4(@types/node@24.10.4)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.3)(svelte@5.46.0)(vue@3.5.26(typescript@5.9.3))
ai: 5.0.212(zod@3.25.76) ai: 5.0.212(zod@3.25.76)
astro: 7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0) astro: 7.0.9(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.10.4)(@vercel/functions@3.7.5(@aws-sdk/credential-provider-web-identity@3.958.0)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(ioredis@5.10.1)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(tsx@4.21.0)(yaml@2.9.0)
babel-plugin-react-compiler: 1.0.0 babel-plugin-react-compiler: 1.0.0
@@ -29328,13 +29392,13 @@ snapshots:
postcss: 8.5.6 postcss: 8.5.6
ts-node: 10.9.2(@types/node@20.19.27)(typescript@5.9.3) ts-node: 10.9.2(@types/node@20.19.27)(typescript@5.9.3)
postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3)): postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@5.9.3)):
dependencies: dependencies:
lilconfig: 3.1.3 lilconfig: 3.1.3
yaml: 2.8.2 yaml: 2.8.2
optionalDependencies: optionalDependencies:
postcss: 8.5.19 postcss: 8.5.19
ts-node: 10.9.2(@types/node@24.10.4)(typescript@6.0.3) ts-node: 10.9.2(@types/node@24.10.4)(typescript@5.9.3)
optional: true optional: true
postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@20.19.27)(typescript@5.9.3)): postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@20.19.27)(typescript@5.9.3)):
@@ -30812,7 +30876,7 @@ snapshots:
svelte: 5.46.0 svelte: 5.46.0
tslib: 2.8.1 tslib: 2.8.1
svelte-preprocess@5.1.4(@babel/core@7.29.0)(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3)))(postcss@8.5.19)(sass@1.97.1)(svelte@5.46.0)(typescript@5.9.3): svelte-preprocess@5.1.4(@babel/core@7.29.0)(postcss-load-config@4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@5.9.3)))(postcss@8.5.19)(sass@1.97.1)(svelte@5.46.0)(typescript@5.9.3):
dependencies: dependencies:
'@types/pug': 2.0.10 '@types/pug': 2.0.10
detect-indent: 6.1.0 detect-indent: 6.1.0
@@ -30823,7 +30887,7 @@ snapshots:
optionalDependencies: optionalDependencies:
'@babel/core': 7.29.0 '@babel/core': 7.29.0
postcss: 8.5.19 postcss: 8.5.19
postcss-load-config: 4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3)) postcss-load-config: 4.0.2(postcss@8.5.19)(ts-node@10.9.2(@types/node@24.10.4)(typescript@5.9.3))
sass: 1.97.1 sass: 1.97.1
typescript: 5.9.3 typescript: 5.9.3
@@ -30899,13 +30963,6 @@ snapshots:
svelte: 5.46.0 svelte: 5.46.0
typescript: 5.9.3 typescript: 5.9.3
svelte2tsx@0.7.46(svelte@5.46.0)(typescript@6.0.3):
dependencies:
dedent-js: 1.0.1
scule: 1.3.0
svelte: 5.46.0
typescript: 6.0.3
svelte@5.46.0: svelte@5.46.0:
dependencies: dependencies:
'@jridgewell/remapping': 2.3.5 '@jridgewell/remapping': 2.3.5
@@ -31271,25 +31328,6 @@ snapshots:
yn: 3.1.1 yn: 3.1.1
optional: true optional: true
ts-node@10.9.2(@types/node@24.10.4)(typescript@6.0.3):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.12
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 24.10.4
acorn: 8.15.0
acorn-walk: 8.3.4
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 6.0.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optional: true
tsc-alias@1.8.16: tsc-alias@1.8.16:
dependencies: dependencies:
chokidar: 3.6.0 chokidar: 3.6.0
@@ -31342,6 +31380,14 @@ snapshots:
twoslash-protocol@0.3.9: {} twoslash-protocol@0.3.9: {}
twoslash@0.3.9(typescript@5.9.3):
dependencies:
'@typescript/vfs': 1.6.4(typescript@5.9.3)
twoslash-protocol: 0.3.9
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
twoslash@0.3.9(typescript@6.0.3): twoslash@0.3.9(typescript@6.0.3):
dependencies: dependencies:
'@typescript/vfs': 1.6.4(typescript@6.0.3) '@typescript/vfs': 1.6.4(typescript@6.0.3)
@@ -31410,10 +31456,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
typescript-svelte-plugin@0.3.50(svelte@5.46.0)(typescript@6.0.3): typescript-svelte-plugin@0.3.50(svelte@5.46.0)(typescript@5.9.3):
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/sourcemap-codec': 1.5.5
svelte2tsx: 0.7.46(svelte@5.46.0)(typescript@6.0.3) svelte2tsx: 0.7.46(svelte@5.46.0)(typescript@5.9.3)
transitivePeerDependencies: transitivePeerDependencies:
- svelte - svelte
- typescript - typescript
@@ -31460,6 +31506,8 @@ snapshots:
undici@7.24.8: {} undici@7.24.8: {}
undici@7.29.0: {}
undici@8.7.0: {} undici@8.7.0: {}
unenv@2.0.0-rc.17: unenv@2.0.0-rc.17: