paper-manager 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -0
  3. package/dist/ai/embed.d.ts +3 -0
  4. package/dist/ai/embed.js +13 -0
  5. package/dist/ai/embed.js.map +1 -0
  6. package/dist/ai/index.d.ts +2 -0
  7. package/dist/ai/index.js +3 -0
  8. package/dist/ai/index.js.map +1 -0
  9. package/dist/ai/provider.d.ts +3 -0
  10. package/dist/ai/provider.js +9 -0
  11. package/dist/ai/provider.js.map +1 -0
  12. package/dist/commands/config.d.ts +2 -0
  13. package/dist/commands/config.js +57 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/knowledge-base.d.ts +2 -0
  16. package/dist/commands/knowledge-base.js +152 -0
  17. package/dist/commands/knowledge-base.js.map +1 -0
  18. package/dist/commands/literature.d.ts +2 -0
  19. package/dist/commands/literature.js +302 -0
  20. package/dist/commands/literature.js.map +1 -0
  21. package/dist/config/index.d.ts +38 -0
  22. package/dist/config/index.js +107 -0
  23. package/dist/config/index.js.map +1 -0
  24. package/dist/db/index.d.ts +9 -0
  25. package/dist/db/index.js +76 -0
  26. package/dist/db/index.js.map +1 -0
  27. package/dist/db/operations/knowledge-bases.d.ts +10 -0
  28. package/dist/db/operations/knowledge-bases.js +25 -0
  29. package/dist/db/operations/knowledge-bases.js.map +1 -0
  30. package/dist/db/operations/literatures.d.ts +9 -0
  31. package/dist/db/operations/literatures.js +87 -0
  32. package/dist/db/operations/literatures.js.map +1 -0
  33. package/dist/db/project/knowledge-bases.d.ts +9 -0
  34. package/dist/db/project/knowledge-bases.js +15 -0
  35. package/dist/db/project/knowledge-bases.js.map +1 -0
  36. package/dist/db/project/literatures.d.ts +8 -0
  37. package/dist/db/project/literatures.js +24 -0
  38. package/dist/db/project/literatures.js.map +1 -0
  39. package/dist/db/schema.d.ts +2 -0
  40. package/dist/db/schema.js +26 -0
  41. package/dist/db/schema.js.map +1 -0
  42. package/dist/db/user/knowledge-bases.d.ts +9 -0
  43. package/dist/db/user/knowledge-bases.js +15 -0
  44. package/dist/db/user/knowledge-bases.js.map +1 -0
  45. package/dist/db/user/literatures.d.ts +8 -0
  46. package/dist/db/user/literatures.js +24 -0
  47. package/dist/db/user/literatures.js.map +1 -0
  48. package/dist/index.d.ts +2 -0
  49. package/dist/index.js +12 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/pdf/extractor.d.ts +2 -0
  52. package/dist/pdf/extractor.js +6 -0
  53. package/dist/pdf/extractor.js.map +1 -0
  54. package/dist/types/index.d.ts +74 -0
  55. package/dist/types/index.js +45 -0
  56. package/dist/types/index.js.map +1 -0
  57. package/dist/vector-store/embeddings.d.ts +8 -0
  58. package/dist/vector-store/embeddings.js +16 -0
  59. package/dist/vector-store/embeddings.js.map +1 -0
  60. package/dist/vector-store/index.d.ts +6 -0
  61. package/dist/vector-store/index.js +17 -0
  62. package/dist/vector-store/index.js.map +1 -0
  63. package/package.json +51 -0
@@ -0,0 +1,2 @@
1
+ import type { Document } from "@langchain/core/documents";
2
+ export declare function extractPdfContent(pdfPath: string): Promise<Document[]>;
@@ -0,0 +1,6 @@
1
+ import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf";
2
+ export async function extractPdfContent(pdfPath) {
3
+ const loader = new PDFLoader(pdfPath, { splitPages: true });
4
+ return loader.load();
5
+ }
6
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/pdf/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAGzE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,74 @@
1
+ import * as z from "zod";
2
+ export declare const EmbeddingModelConfigSchema: z.ZodObject<{
3
+ provider: z.ZodEnum<{
4
+ openai: "openai";
5
+ }>;
6
+ model: z.ZodString;
7
+ baseUrl: z.ZodOptional<z.ZodURL>;
8
+ apiKey: z.ZodString;
9
+ dimensions: z.ZodNumber;
10
+ }, z.core.$strip>;
11
+ export type EmbeddingModelConfig = z.infer<typeof EmbeddingModelConfigSchema> & {
12
+ id: string;
13
+ };
14
+ export declare const KnowledgeBaseMetadataSchema: z.ZodObject<{
15
+ id: z.ZodUUID;
16
+ name: z.ZodString;
17
+ description: z.ZodString;
18
+ embeddingModelId: z.ZodString;
19
+ createdAt: z.ZodDate;
20
+ updatedAt: z.ZodDate;
21
+ }, z.core.$strip>;
22
+ export type KnowledgeBaseMetadata = z.infer<typeof KnowledgeBaseMetadataSchema>;
23
+ export declare const LiteratureMetadataSchema: z.ZodObject<{
24
+ id: z.ZodUUID;
25
+ title: z.ZodString;
26
+ titleTranslation: z.ZodNullable<z.ZodString>;
27
+ author: z.ZodNullable<z.ZodString>;
28
+ abstract: z.ZodNullable<z.ZodString>;
29
+ summary: z.ZodNullable<z.ZodString>;
30
+ keywords: z.ZodDefault<z.ZodArray<z.ZodString>>;
31
+ url: z.ZodNullable<z.ZodURL>;
32
+ notes: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
33
+ knowledgeBaseId: z.ZodUUID;
34
+ createdAt: z.ZodDate;
35
+ updatedAt: z.ZodDate;
36
+ }, z.core.$strip>;
37
+ export type LiteratureMetadata = z.infer<typeof LiteratureMetadataSchema>;
38
+ export declare const CreateLiteratureSchema: z.ZodObject<{
39
+ url: z.ZodNullable<z.ZodURL>;
40
+ title: z.ZodString;
41
+ titleTranslation: z.ZodNullable<z.ZodString>;
42
+ author: z.ZodNullable<z.ZodString>;
43
+ abstract: z.ZodNullable<z.ZodString>;
44
+ summary: z.ZodNullable<z.ZodString>;
45
+ keywords: z.ZodDefault<z.ZodArray<z.ZodString>>;
46
+ notes: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
47
+ knowledgeBaseId: z.ZodUUID;
48
+ }, z.core.$strip>;
49
+ export type CreateLiteratureInput = z.infer<typeof CreateLiteratureSchema>;
50
+ export declare const UpdateLiteratureSchema: z.ZodObject<{
51
+ url: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
52
+ title: z.ZodOptional<z.ZodString>;
53
+ titleTranslation: z.ZodOptional<z.ZodNullable<z.ZodString>>;
54
+ author: z.ZodOptional<z.ZodNullable<z.ZodString>>;
55
+ abstract: z.ZodOptional<z.ZodNullable<z.ZodString>>;
56
+ summary: z.ZodOptional<z.ZodNullable<z.ZodString>>;
57
+ keywords: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
58
+ notes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>>;
59
+ knowledgeBaseId: z.ZodOptional<z.ZodUUID>;
60
+ }, z.core.$strip>;
61
+ export type UpdateLiteratureInput = z.infer<typeof UpdateLiteratureSchema>;
62
+ export declare const ConfigSchema: z.ZodObject<{
63
+ embeddingModels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
64
+ provider: z.ZodEnum<{
65
+ openai: "openai";
66
+ }>;
67
+ model: z.ZodString;
68
+ baseUrl: z.ZodOptional<z.ZodURL>;
69
+ apiKey: z.ZodString;
70
+ dimensions: z.ZodNumber;
71
+ }, z.core.$strip>>>;
72
+ defaultEmbeddingModelId: z.ZodOptional<z.ZodString>;
73
+ }, z.core.$strip>;
74
+ export type Config = z.infer<typeof ConfigSchema>;
@@ -0,0 +1,45 @@
1
+ import * as z from "zod";
2
+ // ─── Embedding Model Config ─────────────────────────────────
3
+ export const EmbeddingModelConfigSchema = z.object({
4
+ provider: z.enum(["openai"]),
5
+ model: z.string(),
6
+ baseUrl: z.url().optional(),
7
+ apiKey: z.string(),
8
+ dimensions: z.number().int().positive(),
9
+ });
10
+ // ─── Knowledge Base ─────────────────────────────────────────
11
+ export const KnowledgeBaseMetadataSchema = z.object({
12
+ id: z.uuid(),
13
+ name: z.string().min(1),
14
+ description: z.string(),
15
+ embeddingModelId: z.string().min(1),
16
+ createdAt: z.date(),
17
+ updatedAt: z.date(),
18
+ });
19
+ // ─── Literature ─────────────────────────────────────────────
20
+ export const LiteratureMetadataSchema = z.object({
21
+ id: z.uuid(),
22
+ title: z.string().min(1),
23
+ titleTranslation: z.string().nullable(),
24
+ author: z.string().nullable(),
25
+ abstract: z.string().nullable(),
26
+ summary: z.string().nullable(),
27
+ keywords: z.array(z.string()).default([]),
28
+ url: z.url().nullable(),
29
+ notes: z.record(z.string(), z.string()).default({}),
30
+ knowledgeBaseId: z.uuid(),
31
+ createdAt: z.date(),
32
+ updatedAt: z.date(),
33
+ });
34
+ export const CreateLiteratureSchema = LiteratureMetadataSchema.omit({
35
+ id: true,
36
+ createdAt: true,
37
+ updatedAt: true,
38
+ });
39
+ export const UpdateLiteratureSchema = CreateLiteratureSchema.partial();
40
+ // ─── Config ─────────────────────────────────────────────────
41
+ export const ConfigSchema = z.object({
42
+ embeddingModels: z.record(z.string().min(1), EmbeddingModelConfigSchema).default({}),
43
+ defaultEmbeddingModelId: z.string().min(1).optional(),
44
+ });
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,+DAA+D;AAE/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAMH,+DAA+D;AAE/D,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;IACZ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;CACpB,CAAC,CAAC;AAIH,+DAA+D;AAE/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;IACZ,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE;IACzB,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;CACpB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC,IAAI,CAAC;IAClE,EAAE,EAAE,IAAI;IACR,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,OAAO,EAAE,CAAC;AAIvE,+DAA+D;AAE/D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpF,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Embeddings } from "@langchain/core/embeddings";
2
+ import type { EmbeddingModelConfig } from "../types/index.js";
3
+ export declare class AiSdkEmbeddings extends Embeddings {
4
+ private readonly config;
5
+ constructor(config: EmbeddingModelConfig);
6
+ embedQuery(document: string): Promise<number[]>;
7
+ embedDocuments(documents: string[]): Promise<number[][]>;
8
+ }
@@ -0,0 +1,16 @@
1
+ import { Embeddings } from "@langchain/core/embeddings";
2
+ import { embed, embedMany } from "../ai/embed.js";
3
+ export class AiSdkEmbeddings extends Embeddings {
4
+ config;
5
+ constructor(config) {
6
+ super({});
7
+ this.config = config;
8
+ }
9
+ async embedQuery(document) {
10
+ return embed(this.config, document);
11
+ }
12
+ async embedDocuments(documents) {
13
+ return embedMany(this.config, documents);
14
+ }
15
+ }
16
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/vector-store/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGlD,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC5B,MAAM,CAAuB;IAE9C,YAAY,MAA4B;QACtC,KAAK,CAAC,EAAE,CAAC,CAAC;QACV,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAmB;QACtC,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { FaissStore } from "@langchain/community/vectorstores/faiss";
2
+ import type { Document } from "@langchain/core/documents";
3
+ import type { EmbeddingModelConfig } from "../types/index.js";
4
+ export declare function createVectorStore(docs: Document[], config: EmbeddingModelConfig, directory: string): Promise<FaissStore>;
5
+ export declare function loadVectorStore(config: EmbeddingModelConfig, directory: string): Promise<FaissStore>;
6
+ export declare function queryVectorStore(config: EmbeddingModelConfig, directory: string, query: string, k?: number): Promise<Document[]>;
@@ -0,0 +1,17 @@
1
+ import { FaissStore } from "@langchain/community/vectorstores/faiss";
2
+ import { AiSdkEmbeddings } from "./embeddings.js";
3
+ export async function createVectorStore(docs, config, directory) {
4
+ const embeddings = new AiSdkEmbeddings(config);
5
+ const vectorStore = await FaissStore.fromDocuments(docs, embeddings);
6
+ await vectorStore.save(directory);
7
+ return vectorStore;
8
+ }
9
+ export async function loadVectorStore(config, directory) {
10
+ const embeddings = new AiSdkEmbeddings(config);
11
+ return FaissStore.load(directory, embeddings);
12
+ }
13
+ export async function queryVectorStore(config, directory, query, k = 5) {
14
+ const store = await loadVectorStore(config, directory);
15
+ return store.similaritySearch(query, k);
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vector-store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAIrE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAgB,EAChB,MAA4B,EAC5B,SAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA4B,EAC5B,SAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA4B,EAC5B,SAAiB,EACjB,KAAa,EACb,CAAC,GAAG,CAAC;IAEL,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "paper-manager",
3
+ "version": "0.1.0",
4
+ "description": "A paper management system.",
5
+ "keywords": [],
6
+ "license": "MIT",
7
+ "author": "EurFelux",
8
+ "bin": {
9
+ "paper": "dist/index.js"
10
+ },
11
+ "type": "module",
12
+ "main": "dist/index.js",
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "dependencies": {
17
+ "@ai-sdk/openai": "^3.0.37",
18
+ "@ai-sdk/provider": "^3.0.8",
19
+ "@langchain/community": "^1.1.20",
20
+ "@langchain/core": "^1.1.29",
21
+ "@langchain/textsplitters": "^1.0.1",
22
+ "ai": "^6.0.105",
23
+ "better-sqlite3": "^12.6.2",
24
+ "cli-progress": "^3.12.0",
25
+ "commander": "^14.0.3",
26
+ "faiss-node": "^0.5.1",
27
+ "langchain": "^1.2.28",
28
+ "zod": "^4.3.6"
29
+ },
30
+ "devDependencies": {
31
+ "@types/better-sqlite3": "^7.6.13",
32
+ "@types/cli-progress": "^3.11.6",
33
+ "eslint-plugin-simple-import-sort": "^12.1.1",
34
+ "oxfmt": "^0.35.0",
35
+ "oxlint": "^1.50.0",
36
+ "oxlint-tsgolint": "^0.15.0",
37
+ "typescript": "^5.9.3"
38
+ },
39
+ "engines": {
40
+ "node": ">=24"
41
+ },
42
+ "scripts": {
43
+ "build": "tsc",
44
+ "test": "echo \"Error: no test specified\" && exit 1",
45
+ "typecheck": "tsc --noEmit",
46
+ "lint": "oxlint --type-aware",
47
+ "lint:fix": "oxlint --type-aware --fix",
48
+ "fmt": "oxfmt",
49
+ "fmt:check": "oxfmt --check"
50
+ }
51
+ }