@dolusoft/hirebase-mcp 1.1.14 → 1.1.16

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 (138) hide show
  1. package/README.md +1 -20
  2. package/dist/application/use-cases/bulk-add-cvs.d.ts +14 -0
  3. package/dist/application/use-cases/bulk-add-cvs.js +32 -0
  4. package/dist/application/use-cases/bulk-add-cvs.js.map +1 -0
  5. package/dist/infrastructure/config/app-config.d.ts +0 -2
  6. package/dist/infrastructure/config/app-config.js +0 -2
  7. package/dist/infrastructure/config/app-config.js.map +1 -1
  8. package/dist/interface/dashboard/html.d.ts +1 -0
  9. package/dist/interface/dashboard/html.js +1007 -0
  10. package/dist/interface/dashboard/html.js.map +1 -0
  11. package/dist/interface/dashboard/public/200.html +1 -1
  12. package/dist/interface/dashboard/public/404.html +1 -1
  13. package/dist/interface/dashboard/public/_nuxt/{0AdCNZ2r.js → BTmld7lv.js} +1 -1
  14. package/dist/interface/dashboard/public/_nuxt/BtFgTcXQ.js +30 -0
  15. package/dist/interface/dashboard/public/_nuxt/{BLxpBE0v.js → BwTYWIW-.js} +1 -1
  16. package/dist/interface/dashboard/public/_nuxt/{CWPXgICh.js → CdJZeyak.js} +3 -3
  17. package/dist/interface/dashboard/public/_nuxt/{BTjyj6yg.js → D9vxbU2B.js} +1 -1
  18. package/dist/interface/dashboard/public/_nuxt/{QW9Ku0B8.js → DHg6ig_T.js} +1 -1
  19. package/dist/interface/dashboard/public/_nuxt/DhFk2_Al.js +1 -0
  20. package/dist/interface/dashboard/public/_nuxt/{DGNE26xE.js → DtX-aPBA.js} +1 -1
  21. package/dist/interface/dashboard/public/_nuxt/{Bq8olVvK.js → DvCMYK3d.js} +1 -1
  22. package/dist/interface/dashboard/public/_nuxt/{BgeIs7YY.js → FR49ZCl_.js} +3 -3
  23. package/dist/interface/dashboard/public/_nuxt/builds/latest.json +1 -1
  24. package/dist/interface/dashboard/public/_nuxt/builds/meta/027020ec-4e7d-4fc7-8447-19800f7d0bac.json +1 -0
  25. package/dist/interface/dashboard/public/_nuxt/builds/meta/149e5d62-f8be-402c-b0cc-2efe0560d9d2.json +1 -0
  26. package/dist/interface/dashboard/public/_nuxt/builds/meta/18e19101-a96b-41dc-b602-f9a8f013a036.json +1 -0
  27. package/dist/interface/dashboard/public/_nuxt/builds/meta/2fd3d0d3-6004-4659-9055-d27aa6656fd3.json +1 -0
  28. package/dist/interface/dashboard/public/_nuxt/builds/meta/32cf8bd4-f9b8-477d-bcff-75df710335e1.json +1 -0
  29. package/dist/interface/dashboard/public/_nuxt/builds/meta/4d9b8de6-1292-42ca-8f07-c47ba5f61768.json +1 -0
  30. package/dist/interface/dashboard/public/_nuxt/builds/meta/54792d4b-ca55-4b5d-b0dd-1d7dc34de344.json +1 -0
  31. package/dist/interface/dashboard/public/_nuxt/builds/meta/5959a14b-2494-4e0d-be28-fef9adfd889d.json +1 -0
  32. package/dist/interface/dashboard/public/_nuxt/builds/meta/60cda583-d704-4d4e-b37e-7ab337e3b6cc.json +1 -0
  33. package/dist/interface/dashboard/public/_nuxt/builds/meta/64d05a43-99ec-4c22-934e-071b310b968f.json +1 -0
  34. package/dist/interface/dashboard/public/_nuxt/builds/meta/6c1632a5-f0af-41e3-9d88-12294e03a0b9.json +1 -0
  35. package/dist/interface/dashboard/public/_nuxt/builds/meta/6c80982c-5e2c-446c-aaf6-7000a976e493.json +1 -0
  36. package/dist/interface/dashboard/public/_nuxt/builds/meta/79161adb-748c-4d36-a031-a71899a56ecd.json +1 -0
  37. package/dist/interface/dashboard/public/_nuxt/builds/meta/84e5a87d-4ae5-48dd-8d5e-5b1fe89f7243.json +1 -0
  38. package/dist/interface/dashboard/public/_nuxt/builds/meta/86082677-a11d-4acf-ab04-c3c067a71622.json +1 -0
  39. package/dist/interface/dashboard/public/_nuxt/builds/meta/8892e611-c2b4-425b-a6a5-988314d8da4d.json +1 -0
  40. package/dist/interface/dashboard/public/_nuxt/builds/meta/9bfe6b22-73f8-4584-b13d-ed1df5600e12.json +1 -0
  41. package/dist/interface/dashboard/public/_nuxt/builds/meta/a39bf957-ddae-41a6-a183-08292363098b.json +1 -0
  42. package/dist/interface/dashboard/public/_nuxt/builds/meta/aba3eed8-dd4e-4a25-a13d-7dd320288af5.json +1 -0
  43. package/dist/interface/dashboard/public/_nuxt/builds/meta/b0bf7fc4-02c1-46fd-acca-f4458feed978.json +1 -0
  44. package/dist/interface/dashboard/public/_nuxt/builds/meta/b2847d83-b695-45d4-9dca-d7498158a501.json +1 -0
  45. package/dist/interface/dashboard/public/_nuxt/builds/meta/c73136b0-98f2-4b13-bce6-b2c2bffada81.json +1 -0
  46. package/dist/interface/dashboard/public/_nuxt/builds/meta/c8382eda-1354-4f92-b6d0-5b5b9f43354a.json +1 -0
  47. package/dist/interface/dashboard/public/_nuxt/builds/meta/e707aa44-7202-413d-bcd5-1538b5b56570.json +1 -0
  48. package/dist/interface/dashboard/public/_nuxt/builds/meta/ea661002-05ab-4bfb-b02f-c91bb721c5e9.json +1 -0
  49. package/dist/interface/dashboard/public/_nuxt/builds/meta/ec2a9f02-6137-4473-bc4f-0e48df1e085b.json +1 -0
  50. package/dist/interface/dashboard/public/_nuxt/builds/meta/f2f23a12-a792-480e-922a-ee8b73dc0310.json +1 -0
  51. package/dist/interface/dashboard/public/_nuxt/builds/meta/f4e23d88-bf4b-4110-976f-4e7a2c538e98.json +1 -0
  52. package/dist/interface/dashboard/public/_nuxt/builds/meta/f6503b83-d731-40f8-9110-c1599663b3ba.json +1 -0
  53. package/dist/interface/dashboard/public/_nuxt/builds/meta/fb00efc4-219c-4174-8827-fe876fe21945.json +1 -0
  54. package/dist/interface/dashboard/public/_nuxt/builds/meta/feac6d04-6bc5-4fa4-a241-79e897d7f8c1.json +1 -0
  55. package/dist/interface/dashboard/public/_nuxt/entry.BSUaoqsu.css +1 -0
  56. package/dist/interface/dashboard/public/_nuxt/entry.Cjj6Q9Tz.css +1 -0
  57. package/dist/interface/dashboard/public/_nuxt/index.BH5Gbe6q.css +1 -0
  58. package/dist/interface/dashboard/public/_nuxt/index.CEZKOBlO.css +1 -0
  59. package/dist/interface/dashboard/public/_nuxt/index.TQmbXYdV.css +1 -0
  60. package/dist/interface/dashboard/public/_nuxt/iov8YEuI.js +1 -0
  61. package/dist/interface/dashboard/public/_nuxt/{CMEleUsa.js → qq1iUjth.js} +1 -1
  62. package/dist/interface/dashboard/public/index.html +1 -1
  63. package/dist/interface/mcp/server.js +0 -12
  64. package/dist/interface/mcp/server.js.map +1 -1
  65. package/dist/interface/mcp/tools/{add-contact.d.ts → bulk-add-cvs.d.ts} +1 -1
  66. package/dist/interface/mcp/tools/bulk-add-cvs.js +28 -0
  67. package/dist/interface/mcp/tools/bulk-add-cvs.js.map +1 -0
  68. package/dist/interface/mcp/types.d.ts +0 -2
  69. package/package.json +72 -72
  70. package/dist/application/ports/calendar-service.d.ts +0 -42
  71. package/dist/application/ports/calendar-service.js +0 -2
  72. package/dist/application/ports/calendar-service.js.map +0 -1
  73. package/dist/infrastructure/calendar/google-calendar.service.d.ts +0 -24
  74. package/dist/infrastructure/calendar/google-calendar.service.js +0 -353
  75. package/dist/infrastructure/calendar/google-calendar.service.js.map +0 -1
  76. package/dist/infrastructure/calendar/index.d.ts +0 -1
  77. package/dist/infrastructure/calendar/index.js +0 -2
  78. package/dist/infrastructure/calendar/index.js.map +0 -1
  79. package/dist/interface/dashboard/public/_nuxt/-_rMc6Se.js +0 -401
  80. package/dist/interface/dashboard/public/_nuxt/B4WYmHkq.js +0 -1
  81. package/dist/interface/dashboard/public/_nuxt/BeosaLTc.js +0 -1
  82. package/dist/interface/dashboard/public/_nuxt/Br9ERNIk.js +0 -401
  83. package/dist/interface/dashboard/public/_nuxt/CVllyrh5.js +0 -1
  84. package/dist/interface/dashboard/public/_nuxt/CXsAVqtn.js +0 -1
  85. package/dist/interface/dashboard/public/_nuxt/D0GfmhnA.js +0 -412
  86. package/dist/interface/dashboard/public/_nuxt/D6QLZU2u.js +0 -1
  87. package/dist/interface/dashboard/public/_nuxt/DP7mgmwO.js +0 -1
  88. package/dist/interface/dashboard/public/_nuxt/DPvkvsJV.js +0 -1
  89. package/dist/interface/dashboard/public/_nuxt/DxJl84Er.js +0 -1
  90. package/dist/interface/dashboard/public/_nuxt/JwuJcHj8.js +0 -1
  91. package/dist/interface/dashboard/public/_nuxt/XEtfQxBf.js +0 -1
  92. package/dist/interface/dashboard/public/_nuxt/bQmPafrB.js +0 -1
  93. package/dist/interface/dashboard/public/_nuxt/builds/meta/055843bb-5e41-4bc3-b42b-417d89074bec.json +0 -1
  94. package/dist/interface/dashboard/public/_nuxt/builds/meta/0887dec6-b9e4-4d5c-aa20-c4d3743164d1.json +0 -1
  95. package/dist/interface/dashboard/public/_nuxt/builds/meta/131e7c46-6af5-4dbc-a481-1e187b75e916.json +0 -1
  96. package/dist/interface/dashboard/public/_nuxt/builds/meta/20776565-55f5-45a5-9256-34c44a89cabb.json +0 -1
  97. package/dist/interface/dashboard/public/_nuxt/builds/meta/270f5a83-1457-4ae7-9cc9-e677a3d11f3f.json +0 -1
  98. package/dist/interface/dashboard/public/_nuxt/builds/meta/359e6b85-6a49-4c04-9d61-55b27d691ee2.json +0 -1
  99. package/dist/interface/dashboard/public/_nuxt/builds/meta/3d499c69-a6ad-40af-aa0f-3de728bce182.json +0 -1
  100. package/dist/interface/dashboard/public/_nuxt/builds/meta/4a4130b0-8c3a-45a8-b0ec-75fb365382a4.json +0 -1
  101. package/dist/interface/dashboard/public/_nuxt/builds/meta/5b1398f2-12db-4829-bd27-8f6bea84da51.json +0 -1
  102. package/dist/interface/dashboard/public/_nuxt/builds/meta/5f5dc585-4404-4cc1-aed7-f41e599fa82b.json +0 -1
  103. package/dist/interface/dashboard/public/_nuxt/builds/meta/6288f3fe-6fd0-4910-840f-965365a82bbe.json +0 -1
  104. package/dist/interface/dashboard/public/_nuxt/builds/meta/7d22d81c-6f64-4bbf-95cc-7bfaaa0a4e40.json +0 -1
  105. package/dist/interface/dashboard/public/_nuxt/builds/meta/88c871e1-0450-4184-8097-9b16d5055c91.json +0 -1
  106. package/dist/interface/dashboard/public/_nuxt/builds/meta/8d4cac7e-e9ef-4e89-9b6e-f688d6c878c0.json +0 -1
  107. package/dist/interface/dashboard/public/_nuxt/builds/meta/a6dffe72-f4cc-4c31-aa18-893d6b1f925a.json +0 -1
  108. package/dist/interface/dashboard/public/_nuxt/builds/meta/ac99623a-06e9-4b63-975f-d2bdc89c09c0.json +0 -1
  109. package/dist/interface/dashboard/public/_nuxt/builds/meta/ae588cf0-9aba-4273-90ff-7dba058efdbb.json +0 -1
  110. package/dist/interface/dashboard/public/_nuxt/builds/meta/b2c71ec3-fe3e-4002-8e4c-c70c755ffa47.json +0 -1
  111. package/dist/interface/dashboard/public/_nuxt/builds/meta/b5e2b874-04ff-45e9-812e-19ff99dedd2b.json +0 -1
  112. package/dist/interface/dashboard/public/_nuxt/builds/meta/bb377d8b-070b-490b-89de-8b16bf942832.json +0 -1
  113. package/dist/interface/dashboard/public/_nuxt/builds/meta/c0c615e1-5140-47a4-b69b-45cd18b1bd53.json +0 -1
  114. package/dist/interface/dashboard/public/_nuxt/builds/meta/c8f77a43-342e-4c12-b54f-a5a303d0bfc1.json +0 -1
  115. package/dist/interface/dashboard/public/_nuxt/builds/meta/dcd6fa82-0beb-4b20-a2e0-bc4e6105f567.json +0 -1
  116. package/dist/interface/dashboard/public/_nuxt/builds/meta/dd11345e-76cc-4eda-8846-6955403f11f4.json +0 -1
  117. package/dist/interface/dashboard/public/_nuxt/builds/meta/e0401d8c-cb34-406e-b220-bbb78db509ed.json +0 -1
  118. package/dist/interface/dashboard/public/_nuxt/builds/meta/e3b88d80-27cc-46a4-aa8c-5eb9f2b1afe4.json +0 -1
  119. package/dist/interface/dashboard/public/_nuxt/builds/meta/edf56071-c990-47a9-adea-2c94846f4652.json +0 -1
  120. package/dist/interface/dashboard/public/_nuxt/builds/meta/f2781c1c-3867-4fd2-a6bb-b35695221f0d.json +0 -1
  121. package/dist/interface/dashboard/public/_nuxt/builds/meta/f2cd9466-7680-4df3-88a7-7b7428a61966.json +0 -1
  122. package/dist/interface/dashboard/public/_nuxt/entry.BdLSmlNR.css +0 -1
  123. package/dist/interface/dashboard/public/_nuxt/entry.CCPYWN-f.css +0 -1
  124. package/dist/interface/dashboard/public/_nuxt/entry.u_d2fXHa.css +0 -1
  125. package/dist/interface/dashboard/public/_nuxt/iHi62RBH.js +0 -412
  126. package/dist/interface/dashboard/public/_nuxt/index.B4sfIgIL.css +0 -1
  127. package/dist/interface/dashboard/public/_nuxt/index.C1uHm-Vo.css +0 -1
  128. package/dist/interface/dashboard/public/_nuxt/index.DCAZalej.css +0 -1
  129. package/dist/interface/dashboard/public/_nuxt/index.Dj1j62L8.css +0 -1
  130. package/dist/interface/dashboard/public/_nuxt/index.xroKz4Z7.css +0 -1
  131. package/dist/interface/mcp/tools/add-contact.js +0 -43
  132. package/dist/interface/mcp/tools/add-contact.js.map +0 -1
  133. package/dist/interface/mcp/tools/authorize-calendar.d.ts +0 -3
  134. package/dist/interface/mcp/tools/authorize-calendar.js +0 -20
  135. package/dist/interface/mcp/tools/authorize-calendar.js.map +0 -1
  136. package/dist/interface/mcp/tools/create-calendar-event.d.ts +0 -3
  137. package/dist/interface/mcp/tools/create-calendar-event.js +0 -46
  138. package/dist/interface/mcp/tools/create-calendar-event.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod/v4';
2
+ import { AddCvUseCase } from '../../../application/use-cases/add-cv.js';
3
+ import { BulkAddCvsUseCase } from '../../../application/use-cases/bulk-add-cvs.js';
4
+ export function registerBulkAddCvsTool(server, deps) {
5
+ const addCvUseCase = new AddCvUseCase(deps.candidateRepo, deps.chunkRepo, deps.parsers, deps.embeddingService, deps.extractor);
6
+ const useCase = new BulkAddCvsUseCase(addCvUseCase);
7
+ server.tool('bulk_add_cvs', 'Process all CV files (PDF and DOCX) in a directory and add them to the database.', { directory_path: z.string().describe('Absolute path to the directory containing CV files') }, async ({ directory_path }) => {
8
+ try {
9
+ const result = await useCase.execute(directory_path);
10
+ const summary = {
11
+ succeeded: result.succeeded.length,
12
+ failed: result.failed.length,
13
+ succeededCandidates: result.succeeded.map((c) => ({ id: c.id, name: c.name })),
14
+ failedFiles: result.failed,
15
+ };
16
+ return {
17
+ content: [{ type: 'text', text: JSON.stringify(summary, null, 2) }],
18
+ };
19
+ }
20
+ catch (error) {
21
+ return {
22
+ content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
23
+ isError: true,
24
+ };
25
+ }
26
+ });
27
+ }
28
+ //# sourceMappingURL=bulk-add-cvs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-add-cvs.js","sourceRoot":"","sources":["../../../../src/interface/mcp/tools/bulk-add-cvs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAGnF,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,IAAkB;IAC1E,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,SAAS,CACf,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEpD,MAAM,CAAC,IAAI,CACT,cAAc,EACd,kFAAkF,EAClF,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC,EAAE,EAC7F,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;gBAClC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;gBAC5B,mBAAmB,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9E,WAAW,EAAE,MAAM,CAAC,MAAM;aAC3B,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -5,7 +5,6 @@ import type { IDocumentParser } from '../../application/ports/document-parser.js
5
5
  import type { IEmbeddingService } from '../../application/ports/embedding-service.js';
6
6
  import type { IStructuredExtractor } from '../../application/ports/structured-extractor.js';
7
7
  import type { IExportService } from '../../application/ports/export-service.js';
8
- import type { ICalendarService } from '../../application/ports/calendar-service.js';
9
8
  import type { IJobPostingRepository } from '../../domain/repositories/job-posting-repository.js';
10
9
  import type { IApplicationRepository } from '../../domain/repositories/application-repository.js';
11
10
  import type { IApplicationEventRepository } from '../../domain/repositories/application-event-repository.js';
@@ -23,6 +22,5 @@ export interface Dependencies {
23
22
  embeddingService: IEmbeddingService;
24
23
  extractor: IStructuredExtractor;
25
24
  exportService: IExportService;
26
- calendarService?: ICalendarService;
27
25
  }
28
26
  export {};
package/package.json CHANGED
@@ -1,72 +1,72 @@
1
- {
2
- "name": "@dolusoft/hirebase-mcp",
3
- "version": "1.1.14",
4
- "description": "HireBase - AI-powered CV search engine with LanceDB and MCP",
5
- "type": "module",
6
- "main": "dist/interface/cli/index.js",
7
- "bin": {
8
- "hirebase-mcp": "dist/interface/cli/index.js"
9
- },
10
- "files": [
11
- "dist/**/*",
12
- "README.md",
13
- "LICENSE"
14
- ],
15
- "scripts": {
16
- "build": "tsc && cd dashboard && pnpm generate && cd .. && node scripts/copy-dashboard.mjs",
17
- "build:server": "tsc",
18
- "start": "node --env-file=.env dist/interface/cli/index.js",
19
- "dev": "tsc --watch",
20
- "prepublishOnly": "npm run build"
21
- },
22
- "engines": {
23
- "node": ">=22.0.0"
24
- },
25
- "keywords": [
26
- "mcp",
27
- "mcp-server",
28
- "rag",
29
- "lancedb",
30
- "cv",
31
- "resume",
32
- "recruitment",
33
- "hiring",
34
- "ai",
35
- "vector-search",
36
- "semantic-search",
37
- "openai",
38
- "embeddings",
39
- "ocr",
40
- "tesseract"
41
- ],
42
- "repository": {
43
- "type": "git",
44
- "url": "https://github.com/dolusoft/hirebase.git"
45
- },
46
- "homepage": "https://github.com/dolusoft/hirebase#readme",
47
- "author": "Dolusoft",
48
- "license": "MIT",
49
- "publishConfig": {
50
- "access": "public"
51
- },
52
- "dependencies": {
53
- "@lancedb/lancedb": "^0.26.2",
54
- "@modelcontextprotocol/sdk": "^1.26.0",
55
- "@napi-rs/canvas": "^0.1.94",
56
- "mammoth": "^1.11.0",
57
- "nanoid": "^5.1.6",
58
- "openai": "^6.22.0",
59
- "papaparse": "^5.5.3",
60
- "tesseract.js": "^7.0.0",
61
- "unpdf": "^1.4.0",
62
- "ws": "^8.19.0",
63
- "zod": "^4.3.6",
64
- "zod-to-json-schema": "^3.25.1"
65
- },
66
- "devDependencies": {
67
- "@types/node": "^25.3.0",
68
- "@types/papaparse": "^5.5.2",
69
- "@types/ws": "^8.18.1",
70
- "typescript": "^5.9.3"
71
- }
72
- }
1
+ {
2
+ "name": "@dolusoft/hirebase-mcp",
3
+ "version": "1.1.16",
4
+ "description": "HireBase - AI-powered CV search engine with LanceDB and MCP",
5
+ "type": "module",
6
+ "main": "dist/interface/cli/index.js",
7
+ "bin": {
8
+ "hirebase-mcp": "dist/interface/cli/index.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc && cd dashboard && pnpm generate && cd .. && node scripts/copy-dashboard.mjs",
17
+ "build:server": "tsc",
18
+ "start": "node --env-file=.env dist/interface/cli/index.js",
19
+ "dev": "tsc --watch",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "engines": {
23
+ "node": ">=22.0.0"
24
+ },
25
+ "keywords": [
26
+ "mcp",
27
+ "mcp-server",
28
+ "rag",
29
+ "lancedb",
30
+ "cv",
31
+ "resume",
32
+ "recruitment",
33
+ "hiring",
34
+ "ai",
35
+ "vector-search",
36
+ "semantic-search",
37
+ "openai",
38
+ "embeddings",
39
+ "ocr",
40
+ "tesseract"
41
+ ],
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/dolusoft/hirebase.git"
45
+ },
46
+ "homepage": "https://github.com/dolusoft/hirebase#readme",
47
+ "author": "Dolusoft",
48
+ "license": "MIT",
49
+ "publishConfig": {
50
+ "access": "public"
51
+ },
52
+ "dependencies": {
53
+ "@lancedb/lancedb": "^0.26.2",
54
+ "@modelcontextprotocol/sdk": "^1.26.0",
55
+ "@napi-rs/canvas": "^0.1.94",
56
+ "mammoth": "^1.11.0",
57
+ "nanoid": "^5.1.6",
58
+ "openai": "^6.22.0",
59
+ "papaparse": "^5.5.3",
60
+ "tesseract.js": "^7.0.0",
61
+ "unpdf": "^1.4.0",
62
+ "ws": "^8.19.0",
63
+ "zod": "^4.3.6",
64
+ "zod-to-json-schema": "^3.25.1"
65
+ },
66
+ "devDependencies": {
67
+ "@types/node": "^25.3.0",
68
+ "@types/papaparse": "^5.5.2",
69
+ "@types/ws": "^8.18.1",
70
+ "typescript": "^5.9.3"
71
+ }
72
+ }
@@ -1,42 +0,0 @@
1
- export interface CalendarEventInput {
2
- title: string;
3
- description?: string;
4
- location?: string;
5
- startTime: string;
6
- endTime: string;
7
- attendees?: string[];
8
- }
9
- export interface CalendarEventResult {
10
- id: string;
11
- title: string;
12
- htmlLink: string;
13
- startTime: string;
14
- endTime: string;
15
- }
16
- export interface ContactInput {
17
- firstName: string;
18
- lastName?: string;
19
- phone?: string;
20
- email?: string;
21
- company?: string;
22
- title?: string;
23
- notes?: string;
24
- groupName?: string;
25
- }
26
- export interface ContactResult {
27
- resourceName: string;
28
- name: string;
29
- phone?: string;
30
- email?: string;
31
- groupName?: string;
32
- }
33
- export interface ICalendarService {
34
- isAuthorized(): Promise<boolean>;
35
- authorize(): Promise<{
36
- success: boolean;
37
- message: string;
38
- }>;
39
- createEvent(event: CalendarEventInput): Promise<CalendarEventResult>;
40
- deleteEvent(eventId: string): Promise<void>;
41
- createContact(contact: ContactInput): Promise<ContactResult>;
42
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=calendar-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calendar-service.js","sourceRoot":"","sources":["../../../src/application/ports/calendar-service.ts"],"names":[],"mappings":""}
@@ -1,24 +0,0 @@
1
- import type { ICalendarService, CalendarEventInput, CalendarEventResult, ContactInput, ContactResult } from '../../application/ports/calendar-service.js';
2
- export declare class GoogleCalendarService implements ICalendarService {
3
- private clientId;
4
- private clientSecret;
5
- private tokenPath;
6
- private tokens;
7
- private tokensLoaded;
8
- constructor(clientId: string, clientSecret: string, dataPath: string);
9
- isAuthorized(): Promise<boolean>;
10
- authorize(): Promise<{
11
- success: boolean;
12
- message: string;
13
- }>;
14
- createEvent(event: CalendarEventInput): Promise<CalendarEventResult>;
15
- deleteEvent(eventId: string): Promise<void>;
16
- createContact(contact: ContactInput): Promise<ContactResult>;
17
- private hasRequiredScopes;
18
- private clearTokens;
19
- private ensureTokensLoaded;
20
- private saveTokens;
21
- private getAccessToken;
22
- private exchangeCodeForTokens;
23
- private findOrCreateContactGroup;
24
- }
@@ -1,353 +0,0 @@
1
- import { createServer as createHttpServer } from 'node:http';
2
- import { exec } from 'node:child_process';
3
- import { readFile, writeFile, mkdir, unlink } from 'node:fs/promises';
4
- import { existsSync } from 'node:fs';
5
- import { join, dirname } from 'node:path';
6
- const AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth';
7
- const TOKEN_URL = 'https://oauth2.googleapis.com/token';
8
- const CALENDAR_API = 'https://www.googleapis.com/calendar/v3';
9
- const PEOPLE_API = 'https://people.googleapis.com/v1';
10
- const SCOPES = [
11
- 'https://www.googleapis.com/auth/calendar.events',
12
- 'https://www.googleapis.com/auth/contacts',
13
- ];
14
- const AUTH_TIMEOUT_MS = 120_000;
15
- const TOKEN_BUFFER_MS = 300_000; // Refresh 5 min before expiry
16
- export class GoogleCalendarService {
17
- clientId;
18
- clientSecret;
19
- tokenPath;
20
- tokens = null;
21
- tokensLoaded = false;
22
- constructor(clientId, clientSecret, dataPath) {
23
- this.clientId = clientId;
24
- this.clientSecret = clientSecret;
25
- this.tokenPath = join(dirname(dataPath), 'google-token.json');
26
- }
27
- async isAuthorized() {
28
- await this.ensureTokensLoaded();
29
- return this.tokens !== null && !!this.tokens.refresh_token && this.hasRequiredScopes();
30
- }
31
- async authorize() {
32
- await this.ensureTokensLoaded();
33
- // If already authorized with all required scopes, skip
34
- if (this.tokens?.refresh_token && this.hasRequiredScopes()) {
35
- return { success: true, message: 'Already authorized with Google (Calendar + Contacts).' };
36
- }
37
- // If scopes changed, clear old token to force re-auth
38
- if (this.tokens?.refresh_token && !this.hasRequiredScopes()) {
39
- await this.clearTokens();
40
- }
41
- return new Promise((resolve) => {
42
- let resolved = false;
43
- const httpServer = createHttpServer(async (req, res) => {
44
- if (resolved)
45
- return;
46
- const url = new URL(req.url, 'http://localhost');
47
- const code = url.searchParams.get('code');
48
- const error = url.searchParams.get('error');
49
- if (error) {
50
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
51
- res.end(htmlPage('Yetkilendirme Başarısız', 'Erişim reddedildi. Bu pencereyi kapatabilirsiniz.'));
52
- resolved = true;
53
- httpServer.close();
54
- resolve({ success: false, message: `Authorization denied: ${error}` });
55
- return;
56
- }
57
- if (code) {
58
- const port = httpServer.address().port;
59
- try {
60
- await this.exchangeCodeForTokens(code, `http://localhost:${port}`);
61
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
62
- res.end(htmlPage('HireBase Yetkilendirildi!', 'Google Calendar + Contacts bağlantısı başarılı. Bu pencereyi kapatabilirsiniz.'));
63
- resolved = true;
64
- httpServer.close();
65
- resolve({ success: true, message: 'Google (Calendar + Contacts) successfully authorized. Token saved.' });
66
- }
67
- catch (err) {
68
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
69
- res.end(htmlPage('Hata', 'Token alınamadı. Lütfen tekrar deneyin.'));
70
- resolved = true;
71
- httpServer.close();
72
- resolve({ success: false, message: `Token exchange failed: ${err.message}` });
73
- }
74
- return;
75
- }
76
- res.writeHead(404);
77
- res.end();
78
- });
79
- httpServer.listen(0, () => {
80
- const port = httpServer.address().port;
81
- const redirectUri = `http://localhost:${port}`;
82
- const authUrl = new URL(AUTH_URL);
83
- authUrl.searchParams.set('client_id', this.clientId);
84
- authUrl.searchParams.set('redirect_uri', redirectUri);
85
- authUrl.searchParams.set('response_type', 'code');
86
- authUrl.searchParams.set('scope', SCOPES.join(' '));
87
- authUrl.searchParams.set('access_type', 'offline');
88
- authUrl.searchParams.set('prompt', 'consent');
89
- openBrowser(authUrl.toString());
90
- setTimeout(() => {
91
- if (!resolved) {
92
- resolved = true;
93
- httpServer.close();
94
- resolve({ success: false, message: 'Authorization timed out after 120 seconds.' });
95
- }
96
- }, AUTH_TIMEOUT_MS);
97
- });
98
- });
99
- }
100
- // ── Calendar ─────────────────────────────────────────────────────
101
- async createEvent(event) {
102
- const accessToken = await this.getAccessToken();
103
- const body = {
104
- summary: event.title,
105
- description: event.description,
106
- location: event.location,
107
- start: {
108
- dateTime: event.startTime,
109
- timeZone: 'Europe/Istanbul',
110
- },
111
- end: {
112
- dateTime: event.endTime,
113
- timeZone: 'Europe/Istanbul',
114
- },
115
- attendees: event.attendees?.map((email) => ({ email })),
116
- reminders: {
117
- useDefault: false,
118
- overrides: [
119
- { method: 'popup', minutes: 30 },
120
- { method: 'popup', minutes: 10 },
121
- ],
122
- },
123
- };
124
- const response = await fetch(`${CALENDAR_API}/calendars/primary/events`, {
125
- method: 'POST',
126
- headers: {
127
- Authorization: `Bearer ${accessToken}`,
128
- 'Content-Type': 'application/json',
129
- },
130
- body: JSON.stringify(body),
131
- });
132
- if (!response.ok) {
133
- const error = await response.text();
134
- throw new Error(`Failed to create calendar event: ${error}`);
135
- }
136
- const data = (await response.json());
137
- return {
138
- id: data.id,
139
- title: data.summary,
140
- htmlLink: data.htmlLink,
141
- startTime: data.start.dateTime,
142
- endTime: data.end.dateTime,
143
- };
144
- }
145
- async deleteEvent(eventId) {
146
- const accessToken = await this.getAccessToken();
147
- const response = await fetch(`${CALENDAR_API}/calendars/primary/events/${eventId}`, {
148
- method: 'DELETE',
149
- headers: { Authorization: `Bearer ${accessToken}` },
150
- });
151
- if (!response.ok && response.status !== 404) {
152
- const error = await response.text();
153
- throw new Error(`Failed to delete calendar event: ${error}`);
154
- }
155
- }
156
- // ── Contacts ─────────────────────────────────────────────────────
157
- async createContact(contact) {
158
- const accessToken = await this.getAccessToken();
159
- // Build People API person resource
160
- const person = {
161
- names: [{ givenName: contact.firstName, familyName: contact.lastName ?? '' }],
162
- };
163
- if (contact.phone) {
164
- person.phoneNumbers = [{ value: contact.phone, type: 'mobile' }];
165
- }
166
- if (contact.email) {
167
- person.emailAddresses = [{ value: contact.email, type: 'work' }];
168
- }
169
- if (contact.company || contact.title) {
170
- person.organizations = [{ name: contact.company ?? '', title: contact.title ?? '' }];
171
- }
172
- if (contact.notes) {
173
- person.biographies = [{ value: contact.notes, contentType: 'TEXT_PLAIN' }];
174
- }
175
- // If group requested, find or create it
176
- let groupResourceName;
177
- if (contact.groupName) {
178
- groupResourceName = await this.findOrCreateContactGroup(accessToken, contact.groupName);
179
- if (groupResourceName) {
180
- person.memberships = [
181
- { contactGroupMembership: { contactGroupResourceName: groupResourceName } },
182
- ];
183
- }
184
- }
185
- const response = await fetch(`${PEOPLE_API}/people:createContact`, {
186
- method: 'POST',
187
- headers: {
188
- Authorization: `Bearer ${accessToken}`,
189
- 'Content-Type': 'application/json',
190
- },
191
- body: JSON.stringify(person),
192
- });
193
- if (!response.ok) {
194
- const error = await response.text();
195
- throw new Error(`Failed to create contact: ${error}`);
196
- }
197
- const data = (await response.json());
198
- return {
199
- resourceName: data.resourceName,
200
- name: data.names?.[0]?.displayName ?? `${contact.firstName} ${contact.lastName ?? ''}`.trim(),
201
- phone: data.phoneNumbers?.[0]?.value,
202
- email: data.emailAddresses?.[0]?.value,
203
- groupName: contact.groupName,
204
- };
205
- }
206
- // ── Private helpers ──────────────────────────────────────────────
207
- hasRequiredScopes() {
208
- if (!this.tokens?.scopes)
209
- return false;
210
- return SCOPES.every((s) => this.tokens.scopes.includes(s));
211
- }
212
- async clearTokens() {
213
- this.tokens = null;
214
- this.tokensLoaded = true;
215
- if (existsSync(this.tokenPath)) {
216
- await unlink(this.tokenPath);
217
- }
218
- // Also clean up old token file name
219
- const oldPath = join(dirname(this.tokenPath), 'google-calendar-token.json');
220
- if (existsSync(oldPath)) {
221
- await unlink(oldPath);
222
- }
223
- }
224
- async ensureTokensLoaded() {
225
- if (this.tokensLoaded)
226
- return;
227
- try {
228
- if (existsSync(this.tokenPath)) {
229
- const data = await readFile(this.tokenPath, 'utf-8');
230
- this.tokens = JSON.parse(data);
231
- }
232
- else {
233
- // Migrate from old token file name
234
- const oldPath = join(dirname(this.tokenPath), 'google-calendar-token.json');
235
- if (existsSync(oldPath)) {
236
- const data = await readFile(oldPath, 'utf-8');
237
- this.tokens = JSON.parse(data);
238
- }
239
- }
240
- }
241
- catch {
242
- this.tokens = null;
243
- }
244
- this.tokensLoaded = true;
245
- }
246
- async saveTokens(tokens) {
247
- this.tokens = tokens;
248
- const dir = dirname(this.tokenPath);
249
- if (!existsSync(dir)) {
250
- await mkdir(dir, { recursive: true });
251
- }
252
- await writeFile(this.tokenPath, JSON.stringify(tokens, null, 2));
253
- }
254
- async getAccessToken() {
255
- await this.ensureTokensLoaded();
256
- if (!this.tokens?.refresh_token) {
257
- throw new Error('Not authorized. Call authorize_google first.');
258
- }
259
- // Return current token if still valid
260
- if (this.tokens.expires_at && Date.now() < this.tokens.expires_at - TOKEN_BUFFER_MS) {
261
- return this.tokens.access_token;
262
- }
263
- // Refresh the token
264
- const response = await fetch(TOKEN_URL, {
265
- method: 'POST',
266
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
267
- body: new URLSearchParams({
268
- client_id: this.clientId,
269
- client_secret: this.clientSecret,
270
- refresh_token: this.tokens.refresh_token,
271
- grant_type: 'refresh_token',
272
- }),
273
- });
274
- if (!response.ok) {
275
- const error = await response.text();
276
- throw new Error(`Token refresh failed: ${error}`);
277
- }
278
- const data = (await response.json());
279
- this.tokens.access_token = data.access_token;
280
- this.tokens.expires_at = Date.now() + data.expires_in * 1000;
281
- await this.saveTokens(this.tokens);
282
- return data.access_token;
283
- }
284
- async exchangeCodeForTokens(code, redirectUri) {
285
- const response = await fetch(TOKEN_URL, {
286
- method: 'POST',
287
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
288
- body: new URLSearchParams({
289
- code,
290
- client_id: this.clientId,
291
- client_secret: this.clientSecret,
292
- redirect_uri: redirectUri,
293
- grant_type: 'authorization_code',
294
- }),
295
- });
296
- if (!response.ok) {
297
- const error = await response.text();
298
- throw new Error(error);
299
- }
300
- const data = (await response.json());
301
- await this.saveTokens({
302
- access_token: data.access_token,
303
- refresh_token: data.refresh_token,
304
- token_type: data.token_type,
305
- expires_at: Date.now() + data.expires_in * 1000,
306
- scopes: data.scope.split(' '),
307
- });
308
- }
309
- async findOrCreateContactGroup(accessToken, groupName) {
310
- // List existing groups
311
- const listResponse = await fetch(`${PEOPLE_API}/contactGroups`, {
312
- headers: { Authorization: `Bearer ${accessToken}` },
313
- });
314
- if (listResponse.ok) {
315
- const groups = (await listResponse.json());
316
- const existing = groups.contactGroups?.find((g) => g.name === groupName && g.groupType === 'USER_CONTACT_GROUP');
317
- if (existing)
318
- return existing.resourceName;
319
- }
320
- // Create new group
321
- const createResponse = await fetch(`${PEOPLE_API}/contactGroups`, {
322
- method: 'POST',
323
- headers: {
324
- Authorization: `Bearer ${accessToken}`,
325
- 'Content-Type': 'application/json',
326
- },
327
- body: JSON.stringify({ contactGroup: { name: groupName } }),
328
- });
329
- if (createResponse.ok) {
330
- const created = (await createResponse.json());
331
- return created.resourceName;
332
- }
333
- return undefined;
334
- }
335
- }
336
- // ── Utilities ──────────────────────────────────────────────────────
337
- function openBrowser(url) {
338
- const cmd = process.platform === 'win32'
339
- ? `start "" "${url}"`
340
- : process.platform === 'darwin'
341
- ? `open "${url}"`
342
- : `xdg-open "${url}"`;
343
- exec(cmd);
344
- }
345
- function htmlPage(title, message) {
346
- return `<!DOCTYPE html>
347
- <html><head><meta charset="utf-8"><title>HireBase</title>
348
- <style>body{font-family:system-ui;display:flex;justify-content:center;align-items:center;min-height:100vh;margin:0;background:#f8fafc}
349
- .card{text-align:center;padding:3rem;border-radius:1rem;background:white;box-shadow:0 4px 24px rgba(0,0,0,.08)}
350
- h1{color:#0f172a;margin-bottom:.5rem}p{color:#64748b}</style>
351
- </head><body><div class="card"><h1>${title}</h1><p>${message}</p></div></body></html>`;
352
- }
353
- //# sourceMappingURL=google-calendar.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-calendar.service.js","sourceRoot":"","sources":["../../../src/infrastructure/calendar/google-calendar.service.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export { GoogleCalendarService } from './google-calendar.service.js';
@@ -1,2 +0,0 @@
1
- export { GoogleCalendarService } from './google-calendar.service.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/calendar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}