diff --git a/cspell.config.yaml b/cspell.config.yaml index 37de4c07a..295a225ae 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -32,6 +32,10 @@ words: - demi - dotenvx - dtype + - duckdb + - DuckDBWASM + - DuckDBWASMQuery + - DuckDBWASMQ - elevenlabs - formkit - gcornut @@ -82,6 +86,7 @@ words: - pixi - pixiv - pretrained + - pthread - rehype - rushstack - Shadcn diff --git a/eslint.config.js b/eslint.config.js index ea47a7da8..d217920e3 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -9,6 +9,7 @@ export default antfu( '**/assets/js/**', '**/assets/live2d/models/**', 'packages/stage-tamagotchi/out/**', + '**/drizzle/**', ], }, ) diff --git a/package.json b/package.json index f11a5ff9b..1bb55f01d 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,10 @@ "vitest": "^3.0.4" }, "workspaces": [ - "packages/*", - "docs" + "packages/**", + "services/**", + "examples/**", + "docs/**" ], "simple-git-hooks": { "pre-commit": "pnpm lint-staged && pnpm typecheck" diff --git a/packages/memory-driver/README.md b/packages/memory-driver-duckdb/README.md similarity index 100% rename from packages/memory-driver/README.md rename to packages/memory-driver-duckdb/README.md diff --git a/packages/memory-driver-duckdb/drizzle.config.ts b/packages/memory-driver-duckdb/drizzle.config.ts new file mode 100644 index 000000000..ff63453eb --- /dev/null +++ b/packages/memory-driver-duckdb/drizzle.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'drizzle-kit' + +export default defineConfig({ + dialect: 'postgresql', + schema: './playground/db/schema.ts', + out: './playground/drizzle', +}) diff --git a/packages/memory-driver-duckdb/package.json b/packages/memory-driver-duckdb/package.json new file mode 100644 index 000000000..6b7cbb9c8 --- /dev/null +++ b/packages/memory-driver-duckdb/package.json @@ -0,0 +1,69 @@ +{ + "name": "@proj-airi/memory-driver-duckdb", + "type": "module", + "version": "1.0.0", + "private": true, + "description": "", + "author": { + "name": "Neko Ayaka", + "email": "neko@ayaka.moe", + "url": "https://github.com/nekomeowww" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/moeru-ai/airi.git", + "directory": "packages/memory-driver-duckdb" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.cjs" + }, + "./drizzle-orm": { + "types": "./dist/drizzle-orm/index.d.ts", + "import": "./dist/drizzle-orm/index.mjs", + "node": "./dist/drizzle-orm/index.cjs" + }, + "./drizzle-orm/vite": { + "types": "./dist/drizzle-orm/vite.d.ts", + "import": "./dist/drizzle-orm/vite.mjs", + "node": "./dist/drizzle-orm/vite.cjs" + } + }, + "main": "./dist/index.cjs", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "files": [ + "README.md", + "dist", + "package.json" + ], + "scripts": { + "playground:dev": "vite", + "dev": "pnpm run stub && vite", + "stub": "unbuild --stub", + "build": "unbuild", + "typecheck": "tsc --noEmit", + "db:generate": "drizzle-kit generate" + }, + "dependencies": { + "@date-fns/tz": "^1.2.0", + "@duckdb/duckdb-wasm": "^1.29.0", + "apache-arrow": "^19.0.0", + "date-fns": "^4.1.0", + "defu": "^6.1.4", + "drizzle-orm": "^0.39.1", + "es-toolkit": "^1.32.0" + }, + "devDependencies": { + "@unocss/reset": "^65.4.3", + "@vitejs/plugin-vue": "^5.2.1", + "@vueuse/core": "^12.5.0", + "drizzle-kit": "^0.30.4", + "vite": "^6.0.11", + "vue": "^3.5.13", + "vue-tsc": "^2.2.0" + } +} diff --git a/packages/memory-driver-duckdb/playground/db/schema.ts b/packages/memory-driver-duckdb/playground/db/schema.ts new file mode 100644 index 000000000..eb17af9af --- /dev/null +++ b/packages/memory-driver-duckdb/playground/db/schema.ts @@ -0,0 +1,8 @@ +import { sql } from 'drizzle-orm' +import { bigint, pgTable } from 'drizzle-orm/pg-core' + +export const users = pgTable('users', () => { + return { + id: bigint({ mode: 'number' }).primaryKey().unique().default(sql`0`), + } +}) diff --git a/packages/memory-driver-duckdb/playground/drizzle/0000_blue_selene.sql b/packages/memory-driver-duckdb/playground/drizzle/0000_blue_selene.sql new file mode 100644 index 000000000..039a4e8b5 --- /dev/null +++ b/packages/memory-driver-duckdb/playground/drizzle/0000_blue_selene.sql @@ -0,0 +1,4 @@ +CREATE TABLE "users" ( + "id" bigint PRIMARY KEY DEFAULT 0 NOT NULL, + CONSTRAINT "users_id_unique" UNIQUE("id") +); diff --git a/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json b/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json new file mode 100644 index 000000000..071ef7702 --- /dev/null +++ b/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json @@ -0,0 +1,47 @@ +{ + "id": "243b9794-66eb-484e-8359-cc3354344cf6", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigint", + "primaryKey": true, + "notNull": true, + "default": "0" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_id_unique": { + "name": "users_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json b/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json new file mode 100644 index 000000000..96aa778fc --- /dev/null +++ b/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1739028279439, + "tag": "0000_blue_selene", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/packages/memory-driver-duckdb/playground/index.html b/packages/memory-driver-duckdb/playground/index.html new file mode 100644 index 000000000..88a9df4f1 --- /dev/null +++ b/packages/memory-driver-duckdb/playground/index.html @@ -0,0 +1,23 @@ + + + + + Project AIRI Memory Driver @duckdb/duckdb-wasm Playground + + + + + + +
+ + + + diff --git a/packages/memory-driver-duckdb/playground/public/favicon-96x96.png b/packages/memory-driver-duckdb/playground/public/favicon-96x96.png new file mode 100644 index 000000000..a70eda1af Binary files /dev/null and b/packages/memory-driver-duckdb/playground/public/favicon-96x96.png differ diff --git a/packages/memory-driver-duckdb/playground/public/favicon.svg b/packages/memory-driver-duckdb/playground/public/favicon.svg new file mode 100644 index 000000000..17940af47 --- /dev/null +++ b/packages/memory-driver-duckdb/playground/public/favicon.svg @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/packages/memory-driver-duckdb/playground/src/App.vue b/packages/memory-driver-duckdb/playground/src/App.vue new file mode 100644 index 000000000..a54148c4f --- /dev/null +++ b/packages/memory-driver-duckdb/playground/src/App.vue @@ -0,0 +1,70 @@ + + +