@pcontext/api 0.0.1
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.
- package/README.md +151 -0
- package/dist/app.d.mts +44779 -0
- package/dist/app.d.mts.map +1 -0
- package/dist/app.mjs +37 -0
- package/dist/app.mjs.map +1 -0
- package/dist/client.d.mts +22428 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +15 -0
- package/dist/client.mjs.map +1 -0
- package/dist/dev.d.mts +11 -0
- package/dist/dev.d.mts.map +1 -0
- package/dist/dev.mjs +16 -0
- package/dist/dev.mjs.map +1 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/modules/doc/chat.route.d.mts +18 -0
- package/dist/modules/doc/chat.route.d.mts.map +1 -0
- package/dist/modules/doc/chat.route.mjs +20 -0
- package/dist/modules/doc/chat.route.mjs.map +1 -0
- package/dist/modules/doc/chat.service.d.mts +10 -0
- package/dist/modules/doc/chat.service.d.mts.map +1 -0
- package/dist/modules/doc/chat.service.mjs +29 -0
- package/dist/modules/doc/chat.service.mjs.map +1 -0
- package/dist/modules/doc/doc.dto.d.mts +67 -0
- package/dist/modules/doc/doc.dto.d.mts.map +1 -0
- package/dist/modules/doc/doc.dto.mjs +43 -0
- package/dist/modules/doc/doc.dto.mjs.map +1 -0
- package/dist/modules/doc/doc.entity.d.mts +19 -0
- package/dist/modules/doc/doc.entity.d.mts.map +1 -0
- package/dist/modules/doc/doc.entity.mjs +1 -0
- package/dist/modules/doc/doc.repo.interface.d.mts +28 -0
- package/dist/modules/doc/doc.repo.interface.d.mts.map +1 -0
- package/dist/modules/doc/doc.repo.interface.mjs +1 -0
- package/dist/modules/doc/doc.route.d.mts +14193 -0
- package/dist/modules/doc/doc.route.d.mts.map +1 -0
- package/dist/modules/doc/doc.route.mjs +100 -0
- package/dist/modules/doc/doc.route.mjs.map +1 -0
- package/dist/modules/doc/doc.service.d.mts +38 -0
- package/dist/modules/doc/doc.service.d.mts.map +1 -0
- package/dist/modules/doc/doc.service.mjs +134 -0
- package/dist/modules/doc/doc.service.mjs.map +1 -0
- package/dist/modules/doc/doc.vo.d.mts +17 -0
- package/dist/modules/doc/doc.vo.d.mts.map +1 -0
- package/dist/modules/doc/doc.vo.mjs +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/chat.d.mts +21 -0
- package/dist/modules/doc/infrastructure/agent/engine/chat.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/chat.mjs +36 -0
- package/dist/modules/doc/infrastructure/agent/engine/chat.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/generate.d.mts +28 -0
- package/dist/modules/doc/infrastructure/agent/engine/generate.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/generate.mjs +135 -0
- package/dist/modules/doc/infrastructure/agent/engine/generate.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/query-filter.d.mts +7 -0
- package/dist/modules/doc/infrastructure/agent/engine/query-filter.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/engine/query-filter.mjs +12 -0
- package/dist/modules/doc/infrastructure/agent/engine/query-filter.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.d.mts +54 -0
- package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.mjs +142 -0
- package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/loaders/index.d.mts +3 -0
- package/dist/modules/doc/infrastructure/agent/loaders/index.mjs +4 -0
- package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.d.mts +42 -0
- package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.mjs +104 -0
- package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/settings.d.mts +5 -0
- package/dist/modules/doc/infrastructure/agent/settings.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/settings.mjs +72 -0
- package/dist/modules/doc/infrastructure/agent/settings.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/storage/index.d.mts +7 -0
- package/dist/modules/doc/infrastructure/agent/storage/index.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/storage/index.mjs +12 -0
- package/dist/modules/doc/infrastructure/agent/storage/index.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/agent/storage/vector-store.d.mts +14 -0
- package/dist/modules/doc/infrastructure/agent/storage/vector-store.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/agent/storage/vector-store.mjs +35 -0
- package/dist/modules/doc/infrastructure/agent/storage/vector-store.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/doc.po.d.mts +570 -0
- package/dist/modules/doc/infrastructure/doc.po.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/doc.po.mjs +54 -0
- package/dist/modules/doc/infrastructure/doc.po.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/doc.repo.pg.d.mts +32 -0
- package/dist/modules/doc/infrastructure/doc.repo.pg.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/doc.repo.pg.mjs +157 -0
- package/dist/modules/doc/infrastructure/doc.repo.pg.mjs.map +1 -0
- package/dist/modules/doc/infrastructure/doc.repo.sqlite.d.mts +32 -0
- package/dist/modules/doc/infrastructure/doc.repo.sqlite.d.mts.map +1 -0
- package/dist/modules/doc/infrastructure/doc.repo.sqlite.mjs +153 -0
- package/dist/modules/doc/infrastructure/doc.repo.sqlite.mjs.map +1 -0
- package/dist/modules/doc/mcp.route.d.mts +18 -0
- package/dist/modules/doc/mcp.route.d.mts.map +1 -0
- package/dist/modules/doc/mcp.route.mjs +39 -0
- package/dist/modules/doc/mcp.route.mjs.map +1 -0
- package/dist/modules/doc/mcp.service.d.mts +22 -0
- package/dist/modules/doc/mcp.service.d.mts.map +1 -0
- package/dist/modules/doc/mcp.service.mjs +119 -0
- package/dist/modules/doc/mcp.service.mjs.map +1 -0
- package/dist/modules/rank/rank.dto.d.mts +10 -0
- package/dist/modules/rank/rank.dto.d.mts.map +1 -0
- package/dist/modules/rank/rank.dto.mjs +8 -0
- package/dist/modules/rank/rank.dto.mjs.map +1 -0
- package/dist/modules/rank/rank.route.d.mts +2033 -0
- package/dist/modules/rank/rank.route.d.mts.map +1 -0
- package/dist/modules/rank/rank.route.mjs +20 -0
- package/dist/modules/rank/rank.route.mjs.map +1 -0
- package/dist/modules/rank/rank.service.d.mts +32 -0
- package/dist/modules/rank/rank.service.d.mts.map +1 -0
- package/dist/modules/rank/rank.service.mjs +3 -0
- package/dist/modules/rank/rank.vo.d.mts +9 -0
- package/dist/modules/rank/rank.vo.d.mts.map +1 -0
- package/dist/modules/rank/rank.vo.mjs +1 -0
- package/dist/modules/task/infrastructure/mq/task-context.d.mts +29 -0
- package/dist/modules/task/infrastructure/mq/task-context.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-context.mjs +70 -0
- package/dist/modules/task/infrastructure/mq/task-context.mjs.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-queue.d.mts +10 -0
- package/dist/modules/task/infrastructure/mq/task-queue.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-queue.mjs +12 -0
- package/dist/modules/task/infrastructure/mq/task-queue.mjs.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-worker.d.mts +13 -0
- package/dist/modules/task/infrastructure/mq/task-worker.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/mq/task-worker.mjs +35 -0
- package/dist/modules/task/infrastructure/mq/task-worker.mjs.map +1 -0
- package/dist/modules/task/infrastructure/task.po.d.mts +1147 -0
- package/dist/modules/task/infrastructure/task.po.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/task.po.mjs +55 -0
- package/dist/modules/task/infrastructure/task.po.mjs.map +1 -0
- package/dist/modules/task/infrastructure/task.repo.pg.d.mts +21 -0
- package/dist/modules/task/infrastructure/task.repo.pg.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/task.repo.pg.mjs +86 -0
- package/dist/modules/task/infrastructure/task.repo.pg.mjs.map +1 -0
- package/dist/modules/task/infrastructure/task.repo.sqlite.d.mts +21 -0
- package/dist/modules/task/infrastructure/task.repo.sqlite.d.mts.map +1 -0
- package/dist/modules/task/infrastructure/task.repo.sqlite.mjs +89 -0
- package/dist/modules/task/infrastructure/task.repo.sqlite.mjs.map +1 -0
- package/dist/modules/task/task.dto.d.mts +26 -0
- package/dist/modules/task/task.dto.d.mts.map +1 -0
- package/dist/modules/task/task.dto.mjs +25 -0
- package/dist/modules/task/task.dto.mjs.map +1 -0
- package/dist/modules/task/task.entity.d.mts +43 -0
- package/dist/modules/task/task.entity.d.mts.map +1 -0
- package/dist/modules/task/task.entity.mjs +1 -0
- package/dist/modules/task/task.repo.interface.d.mts +17 -0
- package/dist/modules/task/task.repo.interface.d.mts.map +1 -0
- package/dist/modules/task/task.repo.interface.mjs +1 -0
- package/dist/modules/task/task.route.d.mts +4087 -0
- package/dist/modules/task/task.route.d.mts.map +1 -0
- package/dist/modules/task/task.route.mjs +63 -0
- package/dist/modules/task/task.route.mjs.map +1 -0
- package/dist/modules/task/task.service.d.mts +28 -0
- package/dist/modules/task/task.service.d.mts.map +1 -0
- package/dist/modules/task/task.service.mjs +202 -0
- package/dist/modules/task/task.service.mjs.map +1 -0
- package/dist/modules/task/task.vo.d.mts +18 -0
- package/dist/modules/task/task.vo.d.mts.map +1 -0
- package/dist/modules/task/task.vo.mjs +1 -0
- package/dist/modules/user/application/user.service.d.mts +24 -0
- package/dist/modules/user/application/user.service.d.mts.map +1 -0
- package/dist/modules/user/application/user.service.mjs +153 -0
- package/dist/modules/user/application/user.service.mjs.map +1 -0
- package/dist/modules/user/domain/user.entity.d.mts +24 -0
- package/dist/modules/user/domain/user.entity.d.mts.map +1 -0
- package/dist/modules/user/domain/user.entity.mjs +35 -0
- package/dist/modules/user/domain/user.entity.mjs.map +1 -0
- package/dist/modules/user/domain/user.repo.interface.d.mts +27 -0
- package/dist/modules/user/domain/user.repo.interface.d.mts.map +1 -0
- package/dist/modules/user/domain/user.repo.interface.mjs +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.d.mts +7 -0
- package/dist/modules/user/infrastructure/casbin/adapter.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.mjs +13 -0
- package/dist/modules/user/infrastructure/casbin/adapter.mjs.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.pg.d.mts +19 -0
- package/dist/modules/user/infrastructure/casbin/adapter.pg.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.pg.mjs +129 -0
- package/dist/modules/user/infrastructure/casbin/adapter.pg.mjs.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.sqlite.d.mts +19 -0
- package/dist/modules/user/infrastructure/casbin/adapter.sqlite.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin/adapter.sqlite.mjs +129 -0
- package/dist/modules/user/infrastructure/casbin/adapter.sqlite.mjs.map +1 -0
- package/dist/modules/user/infrastructure/casbin/enforcer.d.mts +9 -0
- package/dist/modules/user/infrastructure/casbin/enforcer.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin/enforcer.mjs +150 -0
- package/dist/modules/user/infrastructure/casbin/enforcer.mjs.map +1 -0
- package/dist/modules/user/infrastructure/casbin-rule.po.d.mts +643 -0
- package/dist/modules/user/infrastructure/casbin-rule.po.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/casbin-rule.po.mjs +30 -0
- package/dist/modules/user/infrastructure/casbin-rule.po.mjs.map +1 -0
- package/dist/modules/user/infrastructure/user.po.d.mts +392 -0
- package/dist/modules/user/infrastructure/user.po.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/user.po.mjs +34 -0
- package/dist/modules/user/infrastructure/user.po.mjs.map +1 -0
- package/dist/modules/user/infrastructure/user.repo.pg.d.mts +24 -0
- package/dist/modules/user/infrastructure/user.repo.pg.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/user.repo.pg.mjs +90 -0
- package/dist/modules/user/infrastructure/user.repo.pg.mjs.map +1 -0
- package/dist/modules/user/infrastructure/user.repo.sqlite.d.mts +24 -0
- package/dist/modules/user/infrastructure/user.repo.sqlite.d.mts.map +1 -0
- package/dist/modules/user/infrastructure/user.repo.sqlite.mjs +88 -0
- package/dist/modules/user/infrastructure/user.repo.sqlite.mjs.map +1 -0
- package/dist/modules/user/interfaces/admin.route.d.mts +8270 -0
- package/dist/modules/user/interfaces/admin.route.d.mts.map +1 -0
- package/dist/modules/user/interfaces/admin.route.mjs +74 -0
- package/dist/modules/user/interfaces/admin.route.mjs.map +1 -0
- package/dist/modules/user/interfaces/role.route.d.mts +102 -0
- package/dist/modules/user/interfaces/role.route.d.mts.map +1 -0
- package/dist/modules/user/interfaces/role.route.mjs +60 -0
- package/dist/modules/user/interfaces/role.route.mjs.map +1 -0
- package/dist/modules/user/interfaces/user.dto.d.mts +106 -0
- package/dist/modules/user/interfaces/user.dto.d.mts.map +1 -0
- package/dist/modules/user/interfaces/user.dto.mjs +32 -0
- package/dist/modules/user/interfaces/user.dto.mjs.map +1 -0
- package/dist/modules/user/interfaces/user.route.d.mts +2093 -0
- package/dist/modules/user/interfaces/user.route.d.mts.map +1 -0
- package/dist/modules/user/interfaces/user.route.mjs +69 -0
- package/dist/modules/user/interfaces/user.route.mjs.map +1 -0
- package/dist/modules/user/interfaces/user.vo.d.mts +28 -0
- package/dist/modules/user/interfaces/user.vo.d.mts.map +1 -0
- package/dist/modules/user/interfaces/user.vo.mjs +18 -0
- package/dist/modules/user/interfaces/user.vo.mjs.map +1 -0
- package/dist/rank.service-D2h-2iJA.mjs +109 -0
- package/dist/rank.service-D2h-2iJA.mjs.map +1 -0
- package/dist/settings.d.mts +12 -0
- package/dist/settings.d.mts.map +1 -0
- package/dist/settings.mjs +27 -0
- package/dist/settings.mjs.map +1 -0
- package/dist/shared/create-app.d.mts +13 -0
- package/dist/shared/create-app.d.mts.map +1 -0
- package/dist/shared/create-app.mjs +45 -0
- package/dist/shared/create-app.mjs.map +1 -0
- package/dist/shared/db/bootstrap.d.mts +5 -0
- package/dist/shared/db/bootstrap.d.mts.map +1 -0
- package/dist/shared/db/bootstrap.mjs +51 -0
- package/dist/shared/db/bootstrap.mjs.map +1 -0
- package/dist/shared/db/connection.d.mts +1567 -0
- package/dist/shared/db/connection.d.mts.map +1 -0
- package/dist/shared/db/connection.mjs +59 -0
- package/dist/shared/db/connection.mjs.map +1 -0
- package/dist/shared/db/migrations/pg/0000_init.sql +74 -0
- package/dist/shared/db/migrations/pg/0001_snippets & tokens.sql +6 -0
- package/dist/shared/db/migrations/pg/0002_change_task_id_to_uuid_v7.sql +3 -0
- package/dist/shared/db/migrations/pg/meta/0000_snapshot.json +498 -0
- package/dist/shared/db/migrations/pg/meta/0001_snapshot.json +513 -0
- package/dist/shared/db/migrations/pg/meta/0002_snapshot.json +514 -0
- package/dist/shared/db/migrations/pg/meta/_journal.json +27 -0
- package/dist/shared/db/migrations/sqlite/0000_init.sql +72 -0
- package/dist/shared/db/migrations/sqlite/0001_snippets & tokens.sql +2 -0
- package/dist/shared/db/migrations/sqlite/0002_change_task_id_to_uuid_v7.sql +35 -0
- package/dist/shared/db/migrations/sqlite/meta/0000_snapshot.json +493 -0
- package/dist/shared/db/migrations/sqlite/meta/0001_snapshot.json +509 -0
- package/dist/shared/db/migrations/sqlite/meta/0002_snapshot.json +509 -0
- package/dist/shared/db/migrations/sqlite/meta/_journal.json +27 -0
- package/dist/shared/db/seed.d.mts +5 -0
- package/dist/shared/db/seed.d.mts.map +1 -0
- package/dist/shared/db/seed.mjs +42 -0
- package/dist/shared/db/seed.mjs.map +1 -0
- package/dist/shared/deps.d.mts +28 -0
- package/dist/shared/deps.d.mts.map +1 -0
- package/dist/shared/deps.mjs +69 -0
- package/dist/shared/deps.mjs.map +1 -0
- package/dist/shared/dto/index.d.mts +11 -0
- package/dist/shared/dto/index.d.mts.map +1 -0
- package/dist/shared/dto/index.mjs +11 -0
- package/dist/shared/dto/index.mjs.map +1 -0
- package/dist/shared/logger.d.mts +14 -0
- package/dist/shared/logger.d.mts.map +1 -0
- package/dist/shared/logger.mjs +37 -0
- package/dist/shared/logger.mjs.map +1 -0
- package/dist/shared/mcp/createTool.d.mts +15 -0
- package/dist/shared/mcp/createTool.d.mts.map +1 -0
- package/dist/shared/mcp/createTool.mjs +8 -0
- package/dist/shared/mcp/createTool.mjs.map +1 -0
- package/dist/shared/middleware/authorization.d.mts +15 -0
- package/dist/shared/middleware/authorization.d.mts.map +1 -0
- package/dist/shared/middleware/authorization.mjs +46 -0
- package/dist/shared/middleware/authorization.mjs.map +1 -0
- package/dist/shared/middleware/http-logger.d.mts +7 -0
- package/dist/shared/middleware/http-logger.d.mts.map +1 -0
- package/dist/shared/middleware/http-logger.mjs +40 -0
- package/dist/shared/middleware/http-logger.mjs.map +1 -0
- package/dist/shared/middleware/jwt.d.mts +7 -0
- package/dist/shared/middleware/jwt.d.mts.map +1 -0
- package/dist/shared/middleware/jwt.mjs +34 -0
- package/dist/shared/middleware/jwt.mjs.map +1 -0
- package/dist/shared/middleware/limiter.d.mts +7 -0
- package/dist/shared/middleware/limiter.d.mts.map +1 -0
- package/dist/shared/middleware/limiter.mjs +10 -0
- package/dist/shared/middleware/limiter.mjs.map +1 -0
- package/dist/shared/middleware/services.d.mts +8 -0
- package/dist/shared/middleware/services.d.mts.map +1 -0
- package/dist/shared/middleware/services.mjs +19 -0
- package/dist/shared/middleware/services.mjs.map +1 -0
- package/dist/shared/redis/decorator.d.mts +113 -0
- package/dist/shared/redis/decorator.d.mts.map +1 -0
- package/dist/shared/redis/decorator.mjs +203 -0
- package/dist/shared/redis/decorator.mjs.map +1 -0
- package/dist/shared/redis/factory.d.mts +18 -0
- package/dist/shared/redis/factory.d.mts.map +1 -0
- package/dist/shared/redis/factory.mjs +41 -0
- package/dist/shared/redis/factory.mjs.map +1 -0
- package/dist/shared/redis/index.d.mts +12 -0
- package/dist/shared/redis/index.d.mts.map +1 -0
- package/dist/shared/redis/index.mjs +14 -0
- package/dist/shared/redis/index.mjs.map +1 -0
- package/dist/shared/types.d.mts +36 -0
- package/dist/shared/types.d.mts.map +1 -0
- package/dist/shared/types.mjs +1 -0
- package/dist/shared/utils/date.d.mts +1 -0
- package/dist/shared/utils/date.mjs +1 -0
- package/dist/shared/utils/error-handler.d.mts +7 -0
- package/dist/shared/utils/error-handler.d.mts.map +1 -0
- package/dist/shared/utils/error-handler.mjs +22 -0
- package/dist/shared/utils/error-handler.mjs.map +1 -0
- package/dist/shared/utils/format.d.mts +8 -0
- package/dist/shared/utils/format.d.mts.map +1 -0
- package/dist/shared/utils/format.mjs +24 -0
- package/dist/shared/utils/format.mjs.map +1 -0
- package/dist/shared/utils/pagination.d.mts +9 -0
- package/dist/shared/utils/pagination.d.mts.map +1 -0
- package/dist/shared/utils/pagination.mjs +12 -0
- package/dist/shared/utils/pagination.mjs.map +1 -0
- package/dist/shared/utils/response-template.d.mts +69 -0
- package/dist/shared/utils/response-template.d.mts.map +1 -0
- package/dist/shared/utils/response-template.mjs +96 -0
- package/dist/shared/utils/response-template.mjs.map +1 -0
- package/dist/shared/utils/url.d.mts +18 -0
- package/dist/shared/utils/url.d.mts.map +1 -0
- package/dist/shared/utils/url.mjs +39 -0
- package/dist/shared/utils/url.mjs.map +1 -0
- package/dist/shared/utils/user.d.mts +8 -0
- package/dist/shared/utils/user.d.mts.map +1 -0
- package/dist/shared/utils/user.mjs +11 -0
- package/dist/shared/utils/user.mjs.map +1 -0
- package/dist/shared/utils/validator.d.mts +5984 -0
- package/dist/shared/utils/validator.d.mts.map +1 -0
- package/dist/shared/utils/validator.mjs +34 -0
- package/dist/shared/utils/validator.mjs.map +1 -0
- package/dist/shared/vo/index.d.mts +11 -0
- package/dist/shared/vo/index.d.mts.map +1 -0
- package/dist/shared/vo/index.mjs +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/modules/doc/infrastructure/agent/engine/query-filter.ts
|
|
2
|
+
function generateFilters(documentIds) {
|
|
3
|
+
return { filters: [{
|
|
4
|
+
key: "biz_doc_id",
|
|
5
|
+
value: documentIds,
|
|
6
|
+
operator: "in"
|
|
7
|
+
}] };
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { generateFilters };
|
|
12
|
+
//# sourceMappingURL=query-filter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-filter.mjs","names":[],"sources":["../../../../../../src/modules/doc/infrastructure/agent/engine/query-filter.ts"],"sourcesContent":["import type { MetadataFilter, MetadataFilters } from 'llamaindex'\n\nexport function generateFilters(documentIds: string[]): MetadataFilters {\n const filter: MetadataFilter = {\n key: 'biz_doc_id',\n value: documentIds,\n operator: 'in',\n }\n\n return { filters: [filter] }\n}\n"],"mappings":";AAEA,SAAgB,gBAAgB,aAAwC;AAOtE,QAAO,EAAE,SAAS,CANa;EAC7B,KAAK;EACL,OAAO;EACP,UAAU;EACX,CAEyB,EAAE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Document } from "llamaindex";
|
|
2
|
+
|
|
3
|
+
//#region src/modules/doc/infrastructure/agent/loaders/git-repository-reader.d.ts
|
|
4
|
+
interface FilterDirectories {
|
|
5
|
+
includes?: string[];
|
|
6
|
+
excludes?: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* filter file extensions
|
|
10
|
+
*/
|
|
11
|
+
interface FilterFileExtensions {
|
|
12
|
+
includes?: string[];
|
|
13
|
+
excludes?: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* github repository reader options
|
|
17
|
+
*/
|
|
18
|
+
interface GitRepositoryReaderOptions {
|
|
19
|
+
repo: string;
|
|
20
|
+
branch?: string;
|
|
21
|
+
filterDirectories?: FilterDirectories;
|
|
22
|
+
filterFileExtensions?: FilterFileExtensions;
|
|
23
|
+
targetBaseDir?: string;
|
|
24
|
+
numWorkers?: number;
|
|
25
|
+
debug?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* github repository reader
|
|
29
|
+
*/
|
|
30
|
+
declare class GitRepositoryReader {
|
|
31
|
+
private readonly repo;
|
|
32
|
+
private readonly branch?;
|
|
33
|
+
private readonly filterDirectories;
|
|
34
|
+
private readonly filterFileExtensions;
|
|
35
|
+
private readonly targetBaseDir;
|
|
36
|
+
private readonly numWorkers;
|
|
37
|
+
private readonly debug;
|
|
38
|
+
constructor(options: GitRepositoryReaderOptions);
|
|
39
|
+
/**
|
|
40
|
+
* load data from github repository
|
|
41
|
+
*/
|
|
42
|
+
loadData(): Promise<Document[]>;
|
|
43
|
+
/**
|
|
44
|
+
* ensure repository is cloned
|
|
45
|
+
*/
|
|
46
|
+
private ensureRepository;
|
|
47
|
+
/**
|
|
48
|
+
* clear temporary repository directory
|
|
49
|
+
*/
|
|
50
|
+
clearTmpRepo(dir: string): Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { FilterDirectories, FilterFileExtensions, GitRepositoryReader, GitRepositoryReaderOptions };
|
|
54
|
+
//# sourceMappingURL=git-repository-reader.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-repository-reader.d.mts","names":[],"sources":["../../../../../../src/modules/doc/infrastructure/agent/loaders/git-repository-reader.ts"],"mappings":";;;UAYiB,iBAAA;EACf,QAAA;EACA,QAAA;AAAA;;;;UAMe,oBAAA;EACf,QAAA;EACA,QAAA;AAAA;;AAMF;;UAAiB,0BAAA;EACf,IAAA;EACA,MAAA;EACA,iBAAA,GAAoB,iBAAA;EACpB,oBAAA,GAAuB,oBAAA;EACvB,aAAA;EACA,UAAA;EACA,KAAA;AAAA;;;;cAMW,mBAAA;EAAA,iBACM,IAAA;EAAA,iBACA,MAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,oBAAA;EAAA,iBACA,aAAA;EAAA,iBACA,UAAA;EAAA,iBACA,KAAA;cAEL,OAAA,EAAS,0BAAA;EAqHmB;;;EAxGlC,QAAA,CAAA,GAAY,OAAA,CAAQ,QAAA;EAlBT;;;EAAA,QAkFH,gBAAA;;;;EAwCR,YAAA,CAAa,GAAA,WAAc,OAAA;AAAA"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { logger } from "../../../../../shared/logger.mjs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { TMP_GIT_REPOS_PATH } from "@pcontext/shared";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { exec } from "node:child_process";
|
|
6
|
+
import fs from "node:fs/promises";
|
|
7
|
+
import { promisify } from "node:util";
|
|
8
|
+
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
|
|
9
|
+
|
|
10
|
+
//#region src/modules/doc/infrastructure/agent/loaders/git-repository-reader.ts
|
|
11
|
+
const exec$1 = promisify(exec);
|
|
12
|
+
/**
|
|
13
|
+
* github repository reader
|
|
14
|
+
*/
|
|
15
|
+
var GitRepositoryReader = class {
|
|
16
|
+
repo;
|
|
17
|
+
branch;
|
|
18
|
+
filterDirectories;
|
|
19
|
+
filterFileExtensions;
|
|
20
|
+
targetBaseDir;
|
|
21
|
+
numWorkers;
|
|
22
|
+
debug;
|
|
23
|
+
constructor(options) {
|
|
24
|
+
this.repo = options.repo;
|
|
25
|
+
this.branch = options.branch;
|
|
26
|
+
this.filterDirectories = options.filterDirectories ?? {};
|
|
27
|
+
this.filterFileExtensions = options.filterFileExtensions ?? {};
|
|
28
|
+
this.targetBaseDir = options.targetBaseDir ?? TMP_GIT_REPOS_PATH;
|
|
29
|
+
this.numWorkers = options.numWorkers ?? 4;
|
|
30
|
+
this.debug = options.debug ?? false;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* load data from github repository
|
|
34
|
+
*/
|
|
35
|
+
async loadData() {
|
|
36
|
+
const repoDir = await this.ensureRepository();
|
|
37
|
+
const includes = (this.filterDirectories.includes ?? []).map((d) => normalizeDir(d));
|
|
38
|
+
const excludes = (this.filterDirectories.excludes ?? []).map((d) => normalizeDir(d));
|
|
39
|
+
const extIncludesSet = new Set((this.filterFileExtensions.includes ?? []).map((e) => normalizeExt(e)));
|
|
40
|
+
const extExcludesSet = new Set((this.filterFileExtensions.excludes ?? []).map((e) => normalizeExt(e)));
|
|
41
|
+
const observer = (category, name, status) => {
|
|
42
|
+
if (category === "file" && status === 0) {
|
|
43
|
+
const rel = path.relative(repoDir, name);
|
|
44
|
+
if (excludes.some((ex) => rel === ex || rel.startsWith(ex + path.sep))) return false;
|
|
45
|
+
if (!(includes.length === 0 ? true : includes.some((inc) => rel === inc || rel.startsWith(inc + path.sep)))) return false;
|
|
46
|
+
const ext = normalizeExt(path.extname(name));
|
|
47
|
+
if (extExcludesSet.has(ext)) return false;
|
|
48
|
+
if (extIncludesSet.size > 0 && !extIncludesSet.has(ext)) return false;
|
|
49
|
+
}
|
|
50
|
+
return true;
|
|
51
|
+
};
|
|
52
|
+
const reader = new SimpleDirectoryReader(observer);
|
|
53
|
+
const roots = includes.length > 0 ? includes.map((d) => path.join(repoDir, d)) : [repoDir];
|
|
54
|
+
const docs = [];
|
|
55
|
+
for (const root of roots) {
|
|
56
|
+
if (!await pathExists(root)) continue;
|
|
57
|
+
const part = await reader.loadData({
|
|
58
|
+
directoryPath: root,
|
|
59
|
+
numWorkers: this.numWorkers
|
|
60
|
+
});
|
|
61
|
+
docs.push(...part);
|
|
62
|
+
}
|
|
63
|
+
return docs;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* ensure repository is cloned
|
|
67
|
+
*/
|
|
68
|
+
async ensureRepository() {
|
|
69
|
+
const repoName = deriveRepoName(this.repo);
|
|
70
|
+
await fs.mkdir(this.targetBaseDir, { recursive: true });
|
|
71
|
+
logger.info(`[git info]: start to clone repository "${repoName}" to directory "${this.targetBaseDir}"`);
|
|
72
|
+
if (this.debug) {
|
|
73
|
+
const existing = await findExistingRepoDir(this.targetBaseDir, repoName);
|
|
74
|
+
if (existing) {
|
|
75
|
+
logger.info(`[git info]: repository "${repoName}" already cloned, use existing directory`);
|
|
76
|
+
return existing;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const uniqueDirName = `${repoName}-${randomUUID()}`;
|
|
80
|
+
const repoDir = path.join(this.targetBaseDir, uniqueDirName);
|
|
81
|
+
const branchArg = this.branch ? ` --branch ${shellEscape(this.branch)} --single-branch` : "";
|
|
82
|
+
try {
|
|
83
|
+
await exec$1(`git clone --depth 1${branchArg} ${shellEscape(this.repo)} ${shellEscape(repoDir)}`);
|
|
84
|
+
} catch {
|
|
85
|
+
logger.warn("[git error]: git clone (use http2) failed, try http1.1");
|
|
86
|
+
try {
|
|
87
|
+
await exec$1(`git clone -c http.version=HTTP/1.1 --depth 1${branchArg} ${shellEscape(this.repo)} ${shellEscape(repoDir)}`);
|
|
88
|
+
logger.info(`[git info]: repository "${repoName}" cloned successfully`);
|
|
89
|
+
} catch {
|
|
90
|
+
logger.error("[git error]: git clone (use http1.1) failed");
|
|
91
|
+
throw new Error(`git clone failed for repository "${this.repo}". please make sure the repository is public and accessible.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return repoDir;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* clear temporary repository directory
|
|
98
|
+
*/
|
|
99
|
+
async clearTmpRepo(dir) {
|
|
100
|
+
await fs.rm(dir, {
|
|
101
|
+
recursive: true,
|
|
102
|
+
force: true
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
function deriveRepoName(repoUrl) {
|
|
107
|
+
const segments = (repoUrl.endsWith(".git") ? repoUrl.slice(0, -4) : repoUrl).split("/");
|
|
108
|
+
return segments[segments.length - 1] || "repo";
|
|
109
|
+
}
|
|
110
|
+
function normalizeDir(d) {
|
|
111
|
+
return d.replace(/^\/+/, "").replace(/\\/g, path.sep);
|
|
112
|
+
}
|
|
113
|
+
function normalizeExt(extOrName) {
|
|
114
|
+
return (extOrName.startsWith(".") ? extOrName.slice(1) : extOrName).toLowerCase();
|
|
115
|
+
}
|
|
116
|
+
async function pathExists(p) {
|
|
117
|
+
try {
|
|
118
|
+
await fs.access(p);
|
|
119
|
+
return true;
|
|
120
|
+
} catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function findExistingRepoDir(baseDir, repoName) {
|
|
125
|
+
const entries = await fs.readdir(baseDir, { withFileTypes: true });
|
|
126
|
+
const candidates = [];
|
|
127
|
+
for (const e of entries) if (e.isDirectory() && (e.name === repoName || e.name.startsWith(`${repoName}-`))) candidates.push(path.join(baseDir, e.name));
|
|
128
|
+
if (candidates.length === 0) return null;
|
|
129
|
+
const stats = await Promise.all(candidates.map(async (p) => ({
|
|
130
|
+
p,
|
|
131
|
+
s: await fs.stat(p)
|
|
132
|
+
})));
|
|
133
|
+
stats.sort((a, b) => b.s.mtimeMs - a.s.mtimeMs);
|
|
134
|
+
return stats[0]?.p ?? null;
|
|
135
|
+
}
|
|
136
|
+
function shellEscape(s) {
|
|
137
|
+
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
//#endregion
|
|
141
|
+
export { GitRepositoryReader };
|
|
142
|
+
//# sourceMappingURL=git-repository-reader.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-repository-reader.mjs","names":["exec","execCb"],"sources":["../../../../../../src/modules/doc/infrastructure/agent/loaders/git-repository-reader.ts"],"sourcesContent":["import type { Document } from 'llamaindex'\nimport { exec as execCb } from 'node:child_process'\nimport { randomUUID } from 'node:crypto'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { promisify } from 'node:util'\nimport { SimpleDirectoryReader } from '@llamaindex/readers/directory'\nimport { TMP_GIT_REPOS_PATH } from '@pcontext/shared'\nimport { logger } from '@/shared/logger'\n\nconst exec = promisify(execCb)\n\nexport interface FilterDirectories {\n includes?: string[]\n excludes?: string[]\n}\n\n/**\n * filter file extensions\n */\nexport interface FilterFileExtensions {\n includes?: string[]\n excludes?: string[]\n}\n\n/**\n * github repository reader options\n */\nexport interface GitRepositoryReaderOptions {\n repo: string\n branch?: string\n filterDirectories?: FilterDirectories\n filterFileExtensions?: FilterFileExtensions\n targetBaseDir?: string\n numWorkers?: number\n debug?: boolean\n}\n\n/**\n * github repository reader\n */\nexport class GitRepositoryReader {\n private readonly repo: string\n private readonly branch?: string\n private readonly filterDirectories: FilterDirectories\n private readonly filterFileExtensions: FilterFileExtensions\n private readonly targetBaseDir: string\n private readonly numWorkers: number\n private readonly debug: boolean\n\n constructor(options: GitRepositoryReaderOptions) {\n this.repo = options.repo\n this.branch = options.branch\n this.filterDirectories = options.filterDirectories ?? {}\n this.filterFileExtensions = options.filterFileExtensions ?? {}\n this.targetBaseDir = options.targetBaseDir ?? TMP_GIT_REPOS_PATH\n this.numWorkers = options.numWorkers ?? 4\n this.debug = options.debug ?? false\n }\n\n /**\n * load data from github repository\n */\n async loadData(): Promise<Document[]> {\n const repoDir = await this.ensureRepository()\n\n const includes = (this.filterDirectories.includes ?? []).map(d => normalizeDir(d))\n const excludes = (this.filterDirectories.excludes ?? []).map(d => normalizeDir(d))\n\n const extIncludesSet = new Set(\n (this.filterFileExtensions.includes ?? []).map(e => normalizeExt(e)),\n )\n const extExcludesSet = new Set(\n (this.filterFileExtensions.excludes ?? []).map(e => normalizeExt(e)),\n )\n\n const observer = (\n category: 'file' | 'directory',\n name: string,\n status: number,\n ): boolean => {\n if (category === 'file' && status === 0) {\n const rel = path.relative(repoDir, name)\n const inExcludeDir = excludes.some(\n ex => rel === ex || rel.startsWith(ex + path.sep),\n )\n if (inExcludeDir)\n return false\n\n const inIncludeDir = includes.length === 0\n ? true\n : includes.some(inc => rel === inc || rel.startsWith(inc + path.sep))\n if (!inIncludeDir)\n return false\n\n const ext = normalizeExt(path.extname(name))\n if (extExcludesSet.has(ext))\n return false\n if (extIncludesSet.size > 0 && !extIncludesSet.has(ext))\n return false\n }\n return true\n }\n\n const reader = new SimpleDirectoryReader(observer)\n\n const roots: string[] = includes.length > 0\n ? includes.map(d => path.join(repoDir, d))\n : [repoDir]\n\n const docs: Document[] = []\n for (const root of roots) {\n const exists = await pathExists(root)\n if (!exists)\n continue\n const part = await reader.loadData({\n directoryPath: root,\n numWorkers: this.numWorkers,\n })\n docs.push(...part)\n }\n return docs\n }\n\n /**\n * ensure repository is cloned\n */\n private async ensureRepository(): Promise<string> {\n const repoName = deriveRepoName(this.repo)\n await fs.mkdir(this.targetBaseDir, { recursive: true })\n logger.info(`[git info]: start to clone repository \"${repoName}\" to directory \"${this.targetBaseDir}\"`)\n if (this.debug) {\n const existing = await findExistingRepoDir(this.targetBaseDir, repoName)\n if (existing) {\n logger.info(`[git info]: repository \"${repoName}\" already cloned, use existing directory`)\n return existing\n }\n }\n const uniqueDirName = `${repoName}-${randomUUID()}`\n const repoDir = path.join(this.targetBaseDir, uniqueDirName)\n const branchArg = this.branch\n ? ` --branch ${shellEscape(this.branch)} --single-branch`\n : ''\n try {\n await exec(\n `git clone --depth 1${branchArg} ${shellEscape(this.repo)} ${shellEscape(repoDir)}`,\n )\n }\n catch {\n logger.warn('[git error]: git clone (use http2) failed, try http1.1')\n try {\n await exec(\n `git clone -c http.version=HTTP/1.1 --depth 1${branchArg} ${shellEscape(this.repo)} ${shellEscape(repoDir)}`,\n )\n logger.info(`[git info]: repository \"${repoName}\" cloned successfully`)\n }\n catch {\n logger.error('[git error]: git clone (use http1.1) failed')\n throw new Error(`git clone failed for repository \"${this.repo}\". please make sure the repository is public and accessible.`)\n }\n }\n return repoDir\n }\n\n /**\n * clear temporary repository directory\n */\n async clearTmpRepo(dir: string): Promise<void> {\n await fs.rm(dir, { recursive: true, force: true })\n }\n}\n\nfunction deriveRepoName(repoUrl: string): string {\n const withoutSuffix = repoUrl.endsWith('.git')\n ? repoUrl.slice(0, -4)\n : repoUrl\n const segments = withoutSuffix.split('/')\n return segments[segments.length - 1] || 'repo'\n}\n\nfunction normalizeDir(d: string): string {\n const p = d.replace(/^\\/+/, '')\n return p.replace(/\\\\/g, path.sep)\n}\n\nfunction normalizeExt(extOrName: string): string {\n const ext = extOrName.startsWith('.') ? extOrName.slice(1) : extOrName\n return ext.toLowerCase()\n}\n\nasync function pathExists(p: string): Promise<boolean> {\n try {\n await fs.access(p)\n return true\n }\n catch {\n return false\n }\n}\n\nasync function findExistingRepoDir(baseDir: string, repoName: string): Promise<string | null> {\n const entries = await fs.readdir(baseDir, { withFileTypes: true })\n const candidates: string[] = []\n for (const e of entries) {\n if (e.isDirectory() && (e.name === repoName || e.name.startsWith(`${repoName}-`))) {\n candidates.push(path.join(baseDir, e.name))\n }\n }\n if (candidates.length === 0)\n return null\n const stats = await Promise.all(candidates.map(async p => ({ p, s: await fs.stat(p) })))\n stats.sort((a, b) => b.s.mtimeMs - a.s.mtimeMs)\n return stats[0]?.p ?? null\n}\n\nfunction shellEscape(s: string): string {\n return `'${s.replace(/'/g, '\\'\\\\\\'\\'')}'`\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAMA,SAAO,UAAUC,KAAO;;;;AA+B9B,IAAa,sBAAb,MAAiC;CAC/B,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAEjB,YAAY,SAAqC;AAC/C,OAAK,OAAO,QAAQ;AACpB,OAAK,SAAS,QAAQ;AACtB,OAAK,oBAAoB,QAAQ,qBAAqB,EAAE;AACxD,OAAK,uBAAuB,QAAQ,wBAAwB,EAAE;AAC9D,OAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,QAAQ,QAAQ,SAAS;;;;;CAMhC,MAAM,WAAgC;EACpC,MAAM,UAAU,MAAM,KAAK,kBAAkB;EAE7C,MAAM,YAAY,KAAK,kBAAkB,YAAY,EAAE,EAAE,KAAI,MAAK,aAAa,EAAE,CAAC;EAClF,MAAM,YAAY,KAAK,kBAAkB,YAAY,EAAE,EAAE,KAAI,MAAK,aAAa,EAAE,CAAC;EAElF,MAAM,iBAAiB,IAAI,KACxB,KAAK,qBAAqB,YAAY,EAAE,EAAE,KAAI,MAAK,aAAa,EAAE,CAAC,CACrE;EACD,MAAM,iBAAiB,IAAI,KACxB,KAAK,qBAAqB,YAAY,EAAE,EAAE,KAAI,MAAK,aAAa,EAAE,CAAC,CACrE;EAED,MAAM,YACJ,UACA,MACA,WACY;AACZ,OAAI,aAAa,UAAU,WAAW,GAAG;IACvC,MAAM,MAAM,KAAK,SAAS,SAAS,KAAK;AAIxC,QAHqB,SAAS,MAC5B,OAAM,QAAQ,MAAM,IAAI,WAAW,KAAK,KAAK,IAAI,CAClD,CAEC,QAAO;AAKT,QAAI,EAHiB,SAAS,WAAW,IACrC,OACA,SAAS,MAAK,QAAO,QAAQ,OAAO,IAAI,WAAW,MAAM,KAAK,IAAI,CAAC,EAErE,QAAO;IAET,MAAM,MAAM,aAAa,KAAK,QAAQ,KAAK,CAAC;AAC5C,QAAI,eAAe,IAAI,IAAI,CACzB,QAAO;AACT,QAAI,eAAe,OAAO,KAAK,CAAC,eAAe,IAAI,IAAI,CACrD,QAAO;;AAEX,UAAO;;EAGT,MAAM,SAAS,IAAI,sBAAsB,SAAS;EAElD,MAAM,QAAkB,SAAS,SAAS,IACtC,SAAS,KAAI,MAAK,KAAK,KAAK,SAAS,EAAE,CAAC,GACxC,CAAC,QAAQ;EAEb,MAAM,OAAmB,EAAE;AAC3B,OAAK,MAAM,QAAQ,OAAO;AAExB,OAAI,CADW,MAAM,WAAW,KAAK,CAEnC;GACF,MAAM,OAAO,MAAM,OAAO,SAAS;IACjC,eAAe;IACf,YAAY,KAAK;IAClB,CAAC;AACF,QAAK,KAAK,GAAG,KAAK;;AAEpB,SAAO;;;;;CAMT,MAAc,mBAAoC;EAChD,MAAM,WAAW,eAAe,KAAK,KAAK;AAC1C,QAAM,GAAG,MAAM,KAAK,eAAe,EAAE,WAAW,MAAM,CAAC;AACvD,SAAO,KAAK,0CAA0C,SAAS,kBAAkB,KAAK,cAAc,GAAG;AACvG,MAAI,KAAK,OAAO;GACd,MAAM,WAAW,MAAM,oBAAoB,KAAK,eAAe,SAAS;AACxE,OAAI,UAAU;AACZ,WAAO,KAAK,2BAA2B,SAAS,0CAA0C;AAC1F,WAAO;;;EAGX,MAAM,gBAAgB,GAAG,SAAS,GAAG,YAAY;EACjD,MAAM,UAAU,KAAK,KAAK,KAAK,eAAe,cAAc;EAC5D,MAAM,YAAY,KAAK,SACnB,aAAa,YAAY,KAAK,OAAO,CAAC,oBACtC;AACJ,MAAI;AACF,SAAMD,OACJ,sBAAsB,UAAU,GAAG,YAAY,KAAK,KAAK,CAAC,GAAG,YAAY,QAAQ,GAClF;UAEG;AACJ,UAAO,KAAK,yDAAyD;AACrE,OAAI;AACF,UAAMA,OACJ,+CAA+C,UAAU,GAAG,YAAY,KAAK,KAAK,CAAC,GAAG,YAAY,QAAQ,GAC3G;AACD,WAAO,KAAK,2BAA2B,SAAS,uBAAuB;WAEnE;AACJ,WAAO,MAAM,8CAA8C;AAC3D,UAAM,IAAI,MAAM,oCAAoC,KAAK,KAAK,8DAA8D;;;AAGhI,SAAO;;;;;CAMT,MAAM,aAAa,KAA4B;AAC7C,QAAM,GAAG,GAAG,KAAK;GAAE,WAAW;GAAM,OAAO;GAAM,CAAC;;;AAItD,SAAS,eAAe,SAAyB;CAI/C,MAAM,YAHgB,QAAQ,SAAS,OAAO,GAC1C,QAAQ,MAAM,GAAG,GAAG,GACpB,SAC2B,MAAM,IAAI;AACzC,QAAO,SAAS,SAAS,SAAS,MAAM;;AAG1C,SAAS,aAAa,GAAmB;AAEvC,QADU,EAAE,QAAQ,QAAQ,GAAG,CACtB,QAAQ,OAAO,KAAK,IAAI;;AAGnC,SAAS,aAAa,WAA2B;AAE/C,SADY,UAAU,WAAW,IAAI,GAAG,UAAU,MAAM,EAAE,GAAG,WAClD,aAAa;;AAG1B,eAAe,WAAW,GAA6B;AACrD,KAAI;AACF,QAAM,GAAG,OAAO,EAAE;AAClB,SAAO;SAEH;AACJ,SAAO;;;AAIX,eAAe,oBAAoB,SAAiB,UAA0C;CAC5F,MAAM,UAAU,MAAM,GAAG,QAAQ,SAAS,EAAE,eAAe,MAAM,CAAC;CAClE,MAAM,aAAuB,EAAE;AAC/B,MAAK,MAAM,KAAK,QACd,KAAI,EAAE,aAAa,KAAK,EAAE,SAAS,YAAY,EAAE,KAAK,WAAW,GAAG,SAAS,GAAG,EAC9E,YAAW,KAAK,KAAK,KAAK,SAAS,EAAE,KAAK,CAAC;AAG/C,KAAI,WAAW,WAAW,EACxB,QAAO;CACT,MAAM,QAAQ,MAAM,QAAQ,IAAI,WAAW,IAAI,OAAM,OAAM;EAAE;EAAG,GAAG,MAAM,GAAG,KAAK,EAAE;EAAE,EAAE,CAAC;AACxF,OAAM,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ;AAC/C,QAAO,MAAM,IAAI,KAAK;;AAGxB,SAAS,YAAY,GAAmB;AACtC,QAAO,IAAI,EAAE,QAAQ,MAAM,QAAW,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { FilterDirectories, FilterFileExtensions, GitRepositoryReader, GitRepositoryReaderOptions } from "./git-repository-reader.mjs";
|
|
2
|
+
import { CrawlDocumentData, CrawlDoneData, CrawlProgressCallback, CrawlStartData, WebsiteCrawlReader, WebsiteCrawlReaderOptions } from "./website-crawl-reader.mjs";
|
|
3
|
+
export { CrawlDocumentData, CrawlDoneData, CrawlProgressCallback, CrawlStartData, FilterDirectories, FilterFileExtensions, GitRepositoryReader, GitRepositoryReaderOptions, WebsiteCrawlReader, WebsiteCrawlReaderOptions };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Document } from "llamaindex";
|
|
2
|
+
|
|
3
|
+
//#region src/modules/doc/infrastructure/agent/loaders/website-crawl-reader.d.ts
|
|
4
|
+
interface WebsiteCrawlReaderOptions {
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
apiKey: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
excludeTags?: string[];
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
progress?: CrawlProgressCallback;
|
|
11
|
+
}
|
|
12
|
+
interface CrawlStartData {
|
|
13
|
+
baseUrl: string;
|
|
14
|
+
limit: number;
|
|
15
|
+
jobId?: string;
|
|
16
|
+
}
|
|
17
|
+
interface CrawlDocumentData {
|
|
18
|
+
url: string;
|
|
19
|
+
title: string;
|
|
20
|
+
count: number;
|
|
21
|
+
}
|
|
22
|
+
interface CrawlDoneData {
|
|
23
|
+
count: number;
|
|
24
|
+
}
|
|
25
|
+
interface CrawlProgressCallback {
|
|
26
|
+
(event: 'start', data: CrawlStartData): void;
|
|
27
|
+
(event: 'document', data: CrawlDocumentData): void;
|
|
28
|
+
(event: 'done', data: CrawlDoneData): void;
|
|
29
|
+
}
|
|
30
|
+
declare class WebsiteCrawlReader {
|
|
31
|
+
private readonly baseUrl;
|
|
32
|
+
private readonly apiKey;
|
|
33
|
+
private readonly limit;
|
|
34
|
+
private readonly excludeTags;
|
|
35
|
+
private readonly debug;
|
|
36
|
+
private readonly progress?;
|
|
37
|
+
constructor(options: WebsiteCrawlReaderOptions);
|
|
38
|
+
loadData(): Promise<Document[]>;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { CrawlDocumentData, CrawlDoneData, CrawlProgressCallback, CrawlStartData, WebsiteCrawlReader, WebsiteCrawlReaderOptions };
|
|
42
|
+
//# sourceMappingURL=website-crawl-reader.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"website-crawl-reader.d.mts","names":[],"sources":["../../../../../../src/modules/doc/infrastructure/agent/loaders/website-crawl-reader.ts"],"mappings":";;;UAKiB,yBAAA;EACf,OAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,KAAA;EACA,QAAA,GAAW,qBAAA;AAAA;AAAA,UAGI,cAAA;EAAiB,OAAA;EAAiB,KAAA;EAAe,KAAA;AAAA;AAAA,UACjD,iBAAA;EAAoB,GAAA;EAAa,KAAA;EAAe,KAAA;AAAA;AAAA,UAChD,aAAA;EAAgB,KAAA;AAAA;AAAA,UAEhB,qBAAA;EAAA,CACd,KAAA,WAAgB,IAAA,EAAM,cAAA;EAAA,CACtB,KAAA,cAAmB,IAAA,EAAM,iBAAA;EAAA,CACzB,KAAA,UAAe,IAAA,EAAM,aAAA;AAAA;AAAA,cAkBX,kBAAA;EAAA,iBACM,OAAA;EAAA,iBACA,MAAA;EAAA,iBACA,KAAA;EAAA,iBACA,WAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;cAEL,OAAA,EAAS,yBAAA;EASf,QAAA,CAAA,GAAY,OAAA,CAAQ,QAAA;AAAA"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { logger } from "../../../../../shared/logger.mjs";
|
|
2
|
+
import { Document } from "llamaindex";
|
|
3
|
+
import FirecrawlApp from "@mendable/firecrawl-js";
|
|
4
|
+
|
|
5
|
+
//#region src/modules/doc/infrastructure/agent/loaders/website-crawl-reader.ts
|
|
6
|
+
const DEFAULT_EXCLUDE_TAGS = [
|
|
7
|
+
"nav",
|
|
8
|
+
"header",
|
|
9
|
+
"footer",
|
|
10
|
+
"aside",
|
|
11
|
+
"script",
|
|
12
|
+
"style",
|
|
13
|
+
".cm-gutter",
|
|
14
|
+
".cm-lineNumbers",
|
|
15
|
+
".cm-gutterElement",
|
|
16
|
+
".sp-line-numbers",
|
|
17
|
+
".sp-pre-placeholder"
|
|
18
|
+
];
|
|
19
|
+
var WebsiteCrawlReader = class {
|
|
20
|
+
baseUrl;
|
|
21
|
+
apiKey;
|
|
22
|
+
limit;
|
|
23
|
+
excludeTags;
|
|
24
|
+
debug;
|
|
25
|
+
progress;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.baseUrl = options.baseUrl;
|
|
28
|
+
this.apiKey = options.apiKey;
|
|
29
|
+
this.limit = options.limit ?? 100;
|
|
30
|
+
this.excludeTags = options.excludeTags ?? DEFAULT_EXCLUDE_TAGS;
|
|
31
|
+
this.debug = options.debug ?? false;
|
|
32
|
+
this.progress = options.progress;
|
|
33
|
+
}
|
|
34
|
+
async loadData() {
|
|
35
|
+
const firecrawl = new FirecrawlApp({ apiKey: this.apiKey });
|
|
36
|
+
logger.info(`🚀 开始爬取网站: ${this.baseUrl},最多抓取 ${this.limit} 页...`);
|
|
37
|
+
this.progress?.("start", {
|
|
38
|
+
baseUrl: this.baseUrl,
|
|
39
|
+
limit: this.limit
|
|
40
|
+
});
|
|
41
|
+
try {
|
|
42
|
+
const crawlResponse = await firecrawl.startCrawl(this.baseUrl, {
|
|
43
|
+
limit: this.limit,
|
|
44
|
+
scrapeOptions: {
|
|
45
|
+
formats: ["markdown"],
|
|
46
|
+
onlyMainContent: true,
|
|
47
|
+
excludeTags: this.excludeTags
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
if (!crawlResponse.id) throw new Error(`Failed to start crawl: ${JSON.stringify(crawlResponse)}`);
|
|
51
|
+
const jobId = crawlResponse.id;
|
|
52
|
+
this.progress?.("start", {
|
|
53
|
+
baseUrl: this.baseUrl,
|
|
54
|
+
limit: this.limit,
|
|
55
|
+
jobId
|
|
56
|
+
});
|
|
57
|
+
const documents = [];
|
|
58
|
+
const watcher = firecrawl.watcher(jobId, {
|
|
59
|
+
kind: "crawl",
|
|
60
|
+
pollInterval: 2,
|
|
61
|
+
timeout: 120
|
|
62
|
+
});
|
|
63
|
+
return await new Promise((resolve, reject) => {
|
|
64
|
+
watcher.on("document", (doc) => {
|
|
65
|
+
const document = new Document({
|
|
66
|
+
text: doc.markdown || "",
|
|
67
|
+
metadata: {
|
|
68
|
+
source: doc.metadata?.sourceURL || doc.metadata?.url || this.baseUrl,
|
|
69
|
+
title: doc.metadata?.title || "未命名页面"
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
documents.push(document);
|
|
73
|
+
this.progress?.("document", {
|
|
74
|
+
url: document.metadata.source,
|
|
75
|
+
title: document.metadata.title,
|
|
76
|
+
count: documents.length
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
watcher.on("error", (err) => {
|
|
80
|
+
logger.error(err, "Watcher error");
|
|
81
|
+
reject(err);
|
|
82
|
+
});
|
|
83
|
+
watcher.on("done", (state) => {
|
|
84
|
+
if (state.status === "failed") {
|
|
85
|
+
logger.error(`爬取失败: ${state.status}`);
|
|
86
|
+
reject(/* @__PURE__ */ new Error(`爬取失败: ${state.status}`));
|
|
87
|
+
} else {
|
|
88
|
+
logger.info(`✅ 爬取完成!共成功获取并去噪了 ${documents.length} 个页面。`);
|
|
89
|
+
this.progress?.("done", { count: documents.length });
|
|
90
|
+
resolve(documents);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
watcher.start();
|
|
94
|
+
});
|
|
95
|
+
} catch (error) {
|
|
96
|
+
logger.error(error, "❌ 抓取过程中发生错误");
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
export { WebsiteCrawlReader };
|
|
104
|
+
//# sourceMappingURL=website-crawl-reader.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"website-crawl-reader.mjs","names":["LlamaDocument"],"sources":["../../../../../../src/modules/doc/infrastructure/agent/loaders/website-crawl-reader.ts"],"sourcesContent":["import type { Document } from 'llamaindex'\nimport FirecrawlApp from '@mendable/firecrawl-js'\nimport { Document as LlamaDocument } from 'llamaindex'\nimport { logger } from '@/shared/logger'\n\nexport interface WebsiteCrawlReaderOptions {\n baseUrl: string\n apiKey: string\n limit?: number\n excludeTags?: string[]\n debug?: boolean\n progress?: CrawlProgressCallback\n}\n\nexport interface CrawlStartData { baseUrl: string, limit: number, jobId?: string }\nexport interface CrawlDocumentData { url: string, title: string, count: number }\nexport interface CrawlDoneData { count: number }\n\nexport interface CrawlProgressCallback {\n (event: 'start', data: CrawlStartData): void\n (event: 'document', data: CrawlDocumentData): void\n (event: 'done', data: CrawlDoneData): void\n}\n\nconst DEFAULT_EXCLUDE_TAGS = [\n 'nav',\n 'header',\n 'footer',\n 'aside',\n 'script',\n 'style',\n // 把代码行号也屏蔽掉\n '.cm-gutter',\n '.cm-lineNumbers',\n '.cm-gutterElement',\n '.sp-line-numbers',\n '.sp-pre-placeholder',\n]\n\nexport class WebsiteCrawlReader {\n private readonly baseUrl: string\n private readonly apiKey: string\n private readonly limit: number\n private readonly excludeTags: string[]\n private readonly debug: boolean\n private readonly progress?: CrawlProgressCallback\n\n constructor(options: WebsiteCrawlReaderOptions) {\n this.baseUrl = options.baseUrl\n this.apiKey = options.apiKey\n this.limit = options.limit ?? 100\n this.excludeTags = options.excludeTags ?? DEFAULT_EXCLUDE_TAGS\n this.debug = options.debug ?? false\n this.progress = options.progress\n }\n\n async loadData(): Promise<Document[]> {\n const firecrawl = new FirecrawlApp({ apiKey: this.apiKey })\n\n logger.info(`🚀 开始爬取网站: ${this.baseUrl},最多抓取 ${this.limit} 页...`)\n this.progress?.('start', { baseUrl: this.baseUrl, limit: this.limit })\n\n try {\n const crawlResponse = await firecrawl.startCrawl(this.baseUrl, {\n limit: this.limit,\n scrapeOptions: {\n formats: ['markdown'],\n onlyMainContent: true,\n excludeTags: this.excludeTags,\n },\n })\n\n if (!crawlResponse.id) {\n throw new Error(`Failed to start crawl: ${JSON.stringify(crawlResponse)}`)\n }\n\n const jobId = crawlResponse.id\n this.progress?.('start', { baseUrl: this.baseUrl, limit: this.limit, jobId })\n\n const documents: Document[] = []\n const watcher = firecrawl.watcher(jobId, { kind: 'crawl', pollInterval: 2, timeout: 120 })\n\n return await new Promise<Document[]>((resolve, reject) => {\n watcher.on('document', (doc) => {\n const document = new LlamaDocument({\n text: doc.markdown || '',\n metadata: {\n source: doc.metadata?.sourceURL || doc.metadata?.url || this.baseUrl,\n title: doc.metadata?.title || '未命名页面',\n },\n })\n documents.push(document)\n // console.log(`已获取页面 ${document.metadata.source},标题: ${document.metadata.title}`)\n // console.log(doc.markdown)\n this.progress?.('document', {\n url: document.metadata.source,\n title: document.metadata.title,\n count: documents.length,\n })\n })\n\n watcher.on('error', (err: any) => {\n logger.error(err, 'Watcher error')\n reject(err)\n })\n\n watcher.on('done', (state) => {\n if (state.status === 'failed') {\n logger.error(`爬取失败: ${state.status}`)\n reject(new Error(`爬取失败: ${state.status}`))\n }\n else {\n logger.info(`✅ 爬取完成!共成功获取并去噪了 ${documents.length} 个页面。`)\n this.progress?.('done', { count: documents.length })\n resolve(documents)\n }\n })\n\n watcher.start()\n })\n }\n catch (error) {\n logger.error(error, '❌ 抓取过程中发生错误')\n throw error\n }\n }\n}\n"],"mappings":";;;;;AAwBA,MAAM,uBAAuB;CAC3B;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACD;AAED,IAAa,qBAAb,MAAgC;CAC9B,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAEjB,YAAY,SAAoC;AAC9C,OAAK,UAAU,QAAQ;AACvB,OAAK,SAAS,QAAQ;AACtB,OAAK,QAAQ,QAAQ,SAAS;AAC9B,OAAK,cAAc,QAAQ,eAAe;AAC1C,OAAK,QAAQ,QAAQ,SAAS;AAC9B,OAAK,WAAW,QAAQ;;CAG1B,MAAM,WAAgC;EACpC,MAAM,YAAY,IAAI,aAAa,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAE3D,SAAO,KAAK,cAAc,KAAK,QAAQ,QAAQ,KAAK,MAAM,OAAO;AACjE,OAAK,WAAW,SAAS;GAAE,SAAS,KAAK;GAAS,OAAO,KAAK;GAAO,CAAC;AAEtE,MAAI;GACF,MAAM,gBAAgB,MAAM,UAAU,WAAW,KAAK,SAAS;IAC7D,OAAO,KAAK;IACZ,eAAe;KACb,SAAS,CAAC,WAAW;KACrB,iBAAiB;KACjB,aAAa,KAAK;KACnB;IACF,CAAC;AAEF,OAAI,CAAC,cAAc,GACjB,OAAM,IAAI,MAAM,0BAA0B,KAAK,UAAU,cAAc,GAAG;GAG5E,MAAM,QAAQ,cAAc;AAC5B,QAAK,WAAW,SAAS;IAAE,SAAS,KAAK;IAAS,OAAO,KAAK;IAAO;IAAO,CAAC;GAE7E,MAAM,YAAwB,EAAE;GAChC,MAAM,UAAU,UAAU,QAAQ,OAAO;IAAE,MAAM;IAAS,cAAc;IAAG,SAAS;IAAK,CAAC;AAE1F,UAAO,MAAM,IAAI,SAAqB,SAAS,WAAW;AACxD,YAAQ,GAAG,aAAa,QAAQ;KAC9B,MAAM,WAAW,IAAIA,SAAc;MACjC,MAAM,IAAI,YAAY;MACtB,UAAU;OACR,QAAQ,IAAI,UAAU,aAAa,IAAI,UAAU,OAAO,KAAK;OAC7D,OAAO,IAAI,UAAU,SAAS;OAC/B;MACF,CAAC;AACF,eAAU,KAAK,SAAS;AAGxB,UAAK,WAAW,YAAY;MAC1B,KAAK,SAAS,SAAS;MACvB,OAAO,SAAS,SAAS;MACzB,OAAO,UAAU;MAClB,CAAC;MACF;AAEF,YAAQ,GAAG,UAAU,QAAa;AAChC,YAAO,MAAM,KAAK,gBAAgB;AAClC,YAAO,IAAI;MACX;AAEF,YAAQ,GAAG,SAAS,UAAU;AAC5B,SAAI,MAAM,WAAW,UAAU;AAC7B,aAAO,MAAM,SAAS,MAAM,SAAS;AACrC,6BAAO,IAAI,MAAM,SAAS,MAAM,SAAS,CAAC;YAEvC;AACH,aAAO,KAAK,oBAAoB,UAAU,OAAO,OAAO;AACxD,WAAK,WAAW,QAAQ,EAAE,OAAO,UAAU,QAAQ,CAAC;AACpD,cAAQ,UAAU;;MAEpB;AAEF,YAAQ,OAAO;KACf;WAEG,OAAO;AACZ,UAAO,MAAM,OAAO,cAAc;AAClC,SAAM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.mts","names":[],"sources":["../../../../../src/modules/doc/infrastructure/agent/settings.ts"],"mappings":";iBAQgB,YAAA,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import AppSettings from "../../../../settings.mjs";
|
|
2
|
+
import { logger } from "../../../../shared/logger.mjs";
|
|
3
|
+
import { VectorStoreProvider } from "./storage/vector-store.mjs";
|
|
4
|
+
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
|
|
5
|
+
import { CallbackManager, Settings } from "llamaindex";
|
|
6
|
+
|
|
7
|
+
//#region src/modules/doc/infrastructure/agent/settings.ts
|
|
8
|
+
const { config } = AppSettings;
|
|
9
|
+
function initSettings() {
|
|
10
|
+
logger.info("Start");
|
|
11
|
+
const agent = config.agent;
|
|
12
|
+
const client = agent.client;
|
|
13
|
+
const embedding = agent.embedding;
|
|
14
|
+
const milvus = agent.milvus;
|
|
15
|
+
const missing = [];
|
|
16
|
+
if (!client.api_key || client.api_key.trim().length === 0) missing.push("agent.client.api_key");
|
|
17
|
+
if (!client.base_url || client.base_url.trim().length === 0) missing.push("agent.client.base_url");
|
|
18
|
+
if (!agent.model || agent.model.trim().length === 0) missing.push("agent.model");
|
|
19
|
+
if (!embedding.model || embedding.model.trim().length === 0) missing.push("agent.embedding.model");
|
|
20
|
+
if (!embedding.dim || embedding.dim <= 0) missing.push("agent.embedding.dim");
|
|
21
|
+
if (!milvus || !milvus.address || milvus.address.trim().length === 0) missing.push("agent.milvus.address");
|
|
22
|
+
if (missing.length > 0) {
|
|
23
|
+
logger.error({ missing }, `Agent config missing fields: ${missing.join(", ")}`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
Settings.llm = new OpenAI({
|
|
27
|
+
model: agent.model,
|
|
28
|
+
temperature: client.temperature,
|
|
29
|
+
apiKey: client.api_key,
|
|
30
|
+
baseURL: client.base_url,
|
|
31
|
+
maxTokens: client.max_tokens
|
|
32
|
+
});
|
|
33
|
+
logger.info(`Settings.llm initialized with: ${agent.model}`);
|
|
34
|
+
Settings.embedModel = new OpenAIEmbedding({
|
|
35
|
+
model: embedding.model,
|
|
36
|
+
apiKey: client.api_key,
|
|
37
|
+
baseURL: client.base_url,
|
|
38
|
+
dimensions: embedding.dim,
|
|
39
|
+
timeout: 60 * 1e3
|
|
40
|
+
});
|
|
41
|
+
logger.info(`Settings.embedModel initialized with: ${embedding.model}`);
|
|
42
|
+
VectorStoreProvider.getVectorStore();
|
|
43
|
+
if (process.env.QUERY_ENGINE_LOG === "true") {
|
|
44
|
+
const callbackManager = new CallbackManager();
|
|
45
|
+
callbackManager.on("query-start", (event) => {
|
|
46
|
+
logger.info("[query-start]");
|
|
47
|
+
});
|
|
48
|
+
callbackManager.on("retrieve-start", (event) => {
|
|
49
|
+
logger.info("[retrieve-start]");
|
|
50
|
+
});
|
|
51
|
+
callbackManager.on("retrieve-end", (event) => {
|
|
52
|
+
logger.info("[retrieve-end]");
|
|
53
|
+
});
|
|
54
|
+
callbackManager.on("llm-start", (event) => {
|
|
55
|
+
logger.info("[llm-start]");
|
|
56
|
+
});
|
|
57
|
+
callbackManager.on("llm-stream", (event) => {
|
|
58
|
+
logger.info("[llm-stream]");
|
|
59
|
+
});
|
|
60
|
+
callbackManager.on("llm-end", (event) => {
|
|
61
|
+
logger.info("[llm-end]");
|
|
62
|
+
});
|
|
63
|
+
callbackManager.on("query-end", (event) => {
|
|
64
|
+
logger.info("[query-end]");
|
|
65
|
+
});
|
|
66
|
+
Settings.callbackManager = callbackManager;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//#endregion
|
|
71
|
+
export { initSettings };
|
|
72
|
+
//# sourceMappingURL=settings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.mjs","names":[],"sources":["../../../../../src/modules/doc/infrastructure/agent/settings.ts"],"sourcesContent":["import { OpenAI, OpenAIEmbedding } from '@llamaindex/openai'\nimport { CallbackManager, Settings } from 'llamaindex'\nimport AppSettings from '@/settings'\nimport { logger } from '@/shared/logger'\nimport { VectorStoreProvider } from './storage/vector-store'\n\nconst { config } = AppSettings\n\nexport function initSettings() {\n logger.info('Start')\n const agent = config.agent\n const client = agent.client\n const embedding = agent.embedding\n const milvus = agent.milvus\n\n const missing: string[] = []\n\n if (!client.api_key || client.api_key.trim().length === 0) {\n missing.push('agent.client.api_key')\n }\n if (!client.base_url || client.base_url.trim().length === 0) {\n missing.push('agent.client.base_url')\n }\n if (!agent.model || agent.model.trim().length === 0) {\n missing.push('agent.model')\n }\n if (!embedding.model || embedding.model.trim().length === 0) {\n missing.push('agent.embedding.model')\n }\n if (!embedding.dim || embedding.dim <= 0) {\n missing.push('agent.embedding.dim')\n }\n if (!milvus || !milvus.address || milvus.address.trim().length === 0) {\n missing.push('agent.milvus.address')\n }\n\n if (missing.length > 0) {\n logger.error({ missing }, `Agent config missing fields: ${missing.join(', ')}`)\n process.exit(1)\n }\n\n Settings.llm = new OpenAI({\n model: agent.model,\n temperature: client.temperature,\n apiKey: client.api_key,\n baseURL: client.base_url,\n maxTokens: client.max_tokens,\n })\n logger.info(`Settings.llm initialized with: ${agent.model}`)\n Settings.embedModel = new OpenAIEmbedding({\n model: embedding.model,\n apiKey: client.api_key,\n baseURL: client.base_url,\n dimensions: embedding.dim,\n timeout: 60 * 1000,\n })\n\n logger.info(`Settings.embedModel initialized with: ${embedding.model}`)\n\n // 初始化vectorStore\n VectorStoreProvider.getVectorStore()\n\n if (process.env.QUERY_ENGINE_LOG === 'true') {\n const callbackManager = new CallbackManager()\n callbackManager.on('query-start', (event) => {\n logger.info('[query-start]')\n })\n callbackManager.on('retrieve-start', (event) => {\n logger.info('[retrieve-start]')\n })\n callbackManager.on('retrieve-end', (event) => {\n logger.info('[retrieve-end]')\n })\n callbackManager.on('llm-start', (event) => {\n logger.info('[llm-start]')\n })\n callbackManager.on('llm-stream', (event) => {\n logger.info('[llm-stream]')\n })\n callbackManager.on('llm-end', (event) => {\n logger.info('[llm-end]')\n })\n callbackManager.on('query-end', (event) => {\n logger.info('[query-end]')\n })\n\n Settings.callbackManager = callbackManager\n }\n}\n"],"mappings":";;;;;;;AAMA,MAAM,EAAE,WAAW;AAEnB,SAAgB,eAAe;AAC7B,QAAO,KAAK,QAAQ;CACpB,MAAM,QAAQ,OAAO;CACrB,MAAM,SAAS,MAAM;CACrB,MAAM,YAAY,MAAM;CACxB,MAAM,SAAS,MAAM;CAErB,MAAM,UAAoB,EAAE;AAE5B,KAAI,CAAC,OAAO,WAAW,OAAO,QAAQ,MAAM,CAAC,WAAW,EACtD,SAAQ,KAAK,uBAAuB;AAEtC,KAAI,CAAC,OAAO,YAAY,OAAO,SAAS,MAAM,CAAC,WAAW,EACxD,SAAQ,KAAK,wBAAwB;AAEvC,KAAI,CAAC,MAAM,SAAS,MAAM,MAAM,MAAM,CAAC,WAAW,EAChD,SAAQ,KAAK,cAAc;AAE7B,KAAI,CAAC,UAAU,SAAS,UAAU,MAAM,MAAM,CAAC,WAAW,EACxD,SAAQ,KAAK,wBAAwB;AAEvC,KAAI,CAAC,UAAU,OAAO,UAAU,OAAO,EACrC,SAAQ,KAAK,sBAAsB;AAErC,KAAI,CAAC,UAAU,CAAC,OAAO,WAAW,OAAO,QAAQ,MAAM,CAAC,WAAW,EACjE,SAAQ,KAAK,uBAAuB;AAGtC,KAAI,QAAQ,SAAS,GAAG;AACtB,SAAO,MAAM,EAAE,SAAS,EAAE,gCAAgC,QAAQ,KAAK,KAAK,GAAG;AAC/E,UAAQ,KAAK,EAAE;;AAGjB,UAAS,MAAM,IAAI,OAAO;EACxB,OAAO,MAAM;EACb,aAAa,OAAO;EACpB,QAAQ,OAAO;EACf,SAAS,OAAO;EAChB,WAAW,OAAO;EACnB,CAAC;AACF,QAAO,KAAK,kCAAkC,MAAM,QAAQ;AAC5D,UAAS,aAAa,IAAI,gBAAgB;EACxC,OAAO,UAAU;EACjB,QAAQ,OAAO;EACf,SAAS,OAAO;EAChB,YAAY,UAAU;EACtB,SAAS,KAAK;EACf,CAAC;AAEF,QAAO,KAAK,yCAAyC,UAAU,QAAQ;AAGvE,qBAAoB,gBAAgB;AAEpC,KAAI,QAAQ,IAAI,qBAAqB,QAAQ;EAC3C,MAAM,kBAAkB,IAAI,iBAAiB;AAC7C,kBAAgB,GAAG,gBAAgB,UAAU;AAC3C,UAAO,KAAK,gBAAgB;IAC5B;AACF,kBAAgB,GAAG,mBAAmB,UAAU;AAC9C,UAAO,KAAK,mBAAmB;IAC/B;AACF,kBAAgB,GAAG,iBAAiB,UAAU;AAC5C,UAAO,KAAK,iBAAiB;IAC7B;AACF,kBAAgB,GAAG,cAAc,UAAU;AACzC,UAAO,KAAK,cAAc;IAC1B;AACF,kBAAgB,GAAG,eAAe,UAAU;AAC1C,UAAO,KAAK,eAAe;IAC3B;AACF,kBAAgB,GAAG,YAAY,UAAU;AACvC,UAAO,KAAK,YAAY;IACxB;AACF,kBAAgB,GAAG,cAAc,UAAU;AACzC,UAAO,KAAK,cAAc;IAC1B;AAEF,WAAS,kBAAkB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../../src/modules/doc/infrastructure/agent/storage/index.ts"],"mappings":";;;iBAMgB,QAAA,CAAA,GAAQ,OAAA,CAAA,gBAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { VectorStoreProvider } from "./vector-store.mjs";
|
|
2
|
+
import { VectorStoreIndex } from "llamaindex";
|
|
3
|
+
|
|
4
|
+
//#region src/modules/doc/infrastructure/agent/storage/index.ts
|
|
5
|
+
function getIndex() {
|
|
6
|
+
const vectorStore = VectorStoreProvider.getVectorStore();
|
|
7
|
+
return VectorStoreIndex.fromVectorStore(vectorStore);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { getIndex };
|
|
12
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/modules/doc/infrastructure/agent/storage/index.ts"],"sourcesContent":["// src/infrastructure/rag/storage/index-manager.ts\nimport {\n VectorStoreIndex,\n} from 'llamaindex'\nimport { VectorStoreProvider } from './vector-store'\n\nexport function getIndex() {\n const vectorStore = VectorStoreProvider.getVectorStore()\n return VectorStoreIndex.fromVectorStore(vectorStore)\n}\n"],"mappings":";;;;AAMA,SAAgB,WAAW;CACzB,MAAM,cAAc,oBAAoB,gBAAgB;AACxD,QAAO,iBAAiB,gBAAgB,YAAY"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MilvusVectorStore } from "@llamaindex/milvus";
|
|
2
|
+
|
|
3
|
+
//#region src/modules/doc/infrastructure/agent/storage/vector-store.d.ts
|
|
4
|
+
declare class VectorStoreProvider {
|
|
5
|
+
private static instance;
|
|
6
|
+
/**
|
|
7
|
+
* 获取全局唯一的 Milvus Vector Store 实例
|
|
8
|
+
* 单例模式:整个应用生命周期只保持一个连接
|
|
9
|
+
*/
|
|
10
|
+
static getVectorStore(): MilvusVectorStore;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { VectorStoreProvider };
|
|
14
|
+
//# sourceMappingURL=vector-store.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.d.mts","names":[],"sources":["../../../../../../src/modules/doc/infrastructure/agent/storage/vector-store.ts"],"mappings":";;;cAMa,mBAAA;EAAA,eACI,QAAA;EADJ;;;;EAAA,OAOJ,cAAA,CAAA,GAAkB,iBAAA;AAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import AppSettings from "../../../../../settings.mjs";
|
|
2
|
+
import { logger } from "../../../../../shared/logger.mjs";
|
|
3
|
+
import { MilvusVectorStore } from "@llamaindex/milvus";
|
|
4
|
+
|
|
5
|
+
//#region src/modules/doc/infrastructure/agent/storage/vector-store.ts
|
|
6
|
+
const { config } = AppSettings;
|
|
7
|
+
var VectorStoreProvider = class {
|
|
8
|
+
static instance = null;
|
|
9
|
+
/**
|
|
10
|
+
* 获取全局唯一的 Milvus Vector Store 实例
|
|
11
|
+
* 单例模式:整个应用生命周期只保持一个连接
|
|
12
|
+
*/
|
|
13
|
+
static getVectorStore() {
|
|
14
|
+
if (this.instance) return this.instance;
|
|
15
|
+
const milvus = config.agent.milvus;
|
|
16
|
+
if (!milvus || !milvus.address) {
|
|
17
|
+
logger.error("Agent config missing fields: milvus.address. exiting process");
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
this.instance = new MilvusVectorStore({
|
|
21
|
+
params: {
|
|
22
|
+
configOrAddress: milvus.address,
|
|
23
|
+
username: milvus.username,
|
|
24
|
+
password: milvus.password,
|
|
25
|
+
ssl: false
|
|
26
|
+
},
|
|
27
|
+
collection: milvus.collection_name
|
|
28
|
+
});
|
|
29
|
+
return this.instance;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
export { VectorStoreProvider };
|
|
35
|
+
//# sourceMappingURL=vector-store.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.mjs","names":[],"sources":["../../../../../../src/modules/doc/infrastructure/agent/storage/vector-store.ts"],"sourcesContent":["import { MilvusVectorStore } from '@llamaindex/milvus'\nimport AppSettings from '@/settings'\nimport { logger } from '@/shared/logger'\n\nconst { config } = AppSettings\n\nexport class VectorStoreProvider {\n private static instance: MilvusVectorStore | null = null\n\n /**\n * 获取全局唯一的 Milvus Vector Store 实例\n * 单例模式:整个应用生命周期只保持一个连接\n */\n static getVectorStore(): MilvusVectorStore {\n if (this.instance) {\n return this.instance\n }\n\n const milvus = config.agent.milvus\n\n if (!milvus || !milvus.address) {\n logger.error('Agent config missing fields: milvus.address. exiting process')\n process.exit(1)\n }\n\n this.instance = new MilvusVectorStore({\n params: {\n configOrAddress: milvus.address,\n username: milvus.username,\n password: milvus.password,\n ssl: false, // TODO: 增加配置\n },\n collection: milvus.collection_name,\n })\n return this.instance\n }\n}\n"],"mappings":";;;;;AAIA,MAAM,EAAE,WAAW;AAEnB,IAAa,sBAAb,MAAiC;CAC/B,OAAe,WAAqC;;;;;CAMpD,OAAO,iBAAoC;AACzC,MAAI,KAAK,SACP,QAAO,KAAK;EAGd,MAAM,SAAS,OAAO,MAAM;AAE5B,MAAI,CAAC,UAAU,CAAC,OAAO,SAAS;AAC9B,UAAO,MAAM,+DAA+D;AAC5E,WAAQ,KAAK,EAAE;;AAGjB,OAAK,WAAW,IAAI,kBAAkB;GACpC,QAAQ;IACN,iBAAiB,OAAO;IACxB,UAAU,OAAO;IACjB,UAAU,OAAO;IACjB,KAAK;IACN;GACD,YAAY,OAAO;GACpB,CAAC;AACF,SAAO,KAAK"}
|