@jingyi0605/codingns 0.8.5 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/codingns.mjs +7 -156
- package/dist/public/assets/AdaptiveButlerPage-B17QiMyT.js +2 -0
- package/dist/public/assets/{App-BOHBGFOd.js → App-CFBwDUNA.js} +6 -6
- package/dist/public/assets/{BootstrapPage-BxHQT4nA.js → BootstrapPage-W5wU3BPh.js} +1 -1
- package/dist/public/assets/{ConversationPage-DWFsF6BB.js → ConversationPage-DQLX1bUh.js} +6 -6
- package/dist/public/assets/{DesktopDetachPreviewPage-DOgEjYEf.js → DesktopDetachPreviewPage-DTPeuAW-.js} +1 -1
- package/dist/public/assets/DesktopModal-6ii53_Y9.js +1 -0
- package/dist/public/assets/DesktopWindowPage-D0blSuKd.js +2 -0
- package/dist/public/assets/FileContextPanel-BrKO8Xt6.js +1 -0
- package/dist/public/assets/GitSidebar-BdwiDtOr.js +6 -0
- package/dist/public/assets/MobileCreateSessionSheet-Cx_dBiBb.js +1 -0
- package/dist/public/assets/MobileSheet-opTWyRe1.js +1 -0
- package/dist/public/assets/{MobileTopHeaderFrame-lcp2GscV.js → MobileTopHeaderFrame-BbNON3Y4.js} +1 -1
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-BZEzPeMj.js +1 -0
- package/dist/public/assets/{PluginAccessOverview-DGcKAMQl.js → PluginAccessOverview-mQDmAljp.js} +1 -1
- package/dist/public/assets/PluginContainerPage-CcxUJpM4.js +1 -0
- package/dist/public/assets/{PluginDetailPage-CAJ7LFpD.js → PluginDetailPage-D5--ACIt.js} +1 -1
- package/dist/public/assets/{PluginsListPage-BxZG1NyT.js → PluginsListPage-D_oJxYXT.js} +1 -1
- package/dist/public/assets/{RelayConnectEntryPage-CfNO_TIl.js → RelayConnectEntryPage-DROxpnkv.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-by36Z_5k.js → ServerSettingsModal-CUUOPqSe.js} +1 -1
- package/dist/public/assets/SessionIndexPage-C2Jxh6Gp.js +1 -0
- package/dist/public/assets/SettingsPage-BlAZCHsy.js +2 -0
- package/dist/public/assets/{TerminalManagerPanel-NVZRxxmH.js → TerminalManagerPanel-CjzbiWjl.js} +1 -1
- package/dist/public/assets/{TerminalPage-C4LNoPBp.js → TerminalPage-CwWyFDj8.js} +2 -2
- package/dist/public/assets/TerminalRuntimeFallbackModal-CSVVbO8r.js +1 -0
- package/dist/public/assets/{ToolFilesPage-47zbdgTW.js → ToolFilesPage-QBEY8oCf.js} +1 -1
- package/dist/public/assets/{ToolGitPage-Fuk_b_jg.js → ToolGitPage-BKoZ2l9v.js} +1 -1
- package/dist/public/assets/{ToolProcessesPage-sWSMWD-9.js → ToolProcessesPage-BOH0ib4G.js} +1 -1
- package/dist/public/assets/{ToolsHomePage-R1mZlbZi.js → ToolsHomePage-BcMZ3BCQ.js} +1 -1
- package/dist/public/assets/{WorkbenchLandingPage-CqmiFH2u.js → WorkbenchLandingPage-B5zoppEl.js} +1 -1
- package/dist/public/assets/WorkbenchLayout-BksVkkFF.css +1 -0
- package/dist/public/assets/WorkbenchLayout-CikJBS62.js +1019 -0
- package/dist/public/assets/{WorkbenchModal-C7qoQElW.js → WorkbenchModal-NGmPgqaE.js} +1 -1
- package/dist/public/assets/WorkbenchShellRoute-BbbSOiZw.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-DT3VMjWD.css +1 -0
- package/dist/public/assets/WorkspaceDebugDetailPage-CVivdPx5.js +1 -0
- package/dist/public/assets/{WorkspaceDetailPage-BPsrFffw.js → WorkspaceDetailPage-DgOSjscR.js} +1 -1
- package/dist/public/assets/{WorkspaceHomePage-KAtqZOAb.js → WorkspaceHomePage-HPa7M_Vh.js} +1 -1
- package/dist/public/assets/{client-runtime-manager-wmCJZKYd.js → client-runtime-manager-DXbI9K1K.js} +1 -1
- package/dist/public/assets/index-BxJPQpFM.css +1 -0
- package/dist/public/assets/index-CeXGOT_T.js +50 -0
- package/dist/public/assets/{login-direct-candidate-resolver-BOAgTuUf.js → login-direct-candidate-resolver-DkKyFtQJ.js} +1 -1
- package/dist/public/assets/{plugin-permission-copy-Cq99cnzV.js → plugin-permission-copy-CzN269Bk.js} +1 -1
- package/dist/public/assets/{plugins-api-BQTV5DOp.js → plugins-api-Bv9DHpLF.js} +1 -1
- package/dist/public/assets/{preferences-service-DJxbEEeg.js → preferences-service-D2ISL2Zz.js} +1 -1
- package/dist/public/assets/{relay-entry-D-LfvdiX.js → relay-entry-Bg0OisQy.js} +1 -1
- package/dist/public/assets/{terminal-runtime-meta-BJmy8dyK.js → terminal-runtime-meta-C8t-CIDF.js} +1 -1
- package/dist/public/assets/{useRegisteredDebugTemplates-DQAWVdCo.js → useRegisteredDebugTemplates-Bol3NVfN.js} +1 -1
- package/dist/public/assets/{workbench-navigation-MEzCSmsK.js → workbench-navigation-B7IjRQd8.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/server/middlewares/auth-guard.js +10 -5
- package/dist/server/middlewares/auth-guard.js.map +1 -1
- package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.d.ts +11 -0
- package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.js +22 -0
- package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.js.map +1 -0
- package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.d.ts +23 -0
- package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.js +23 -0
- package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.js.map +1 -0
- package/dist/server/modules/affairs-indexer/contracts/src/index.d.ts +4 -0
- package/dist/server/modules/affairs-indexer/contracts/src/index.js +5 -0
- package/dist/server/modules/affairs-indexer/contracts/src/index.js.map +1 -0
- package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.d.ts +7 -0
- package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.js +2 -0
- package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.js.map +1 -0
- package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.d.ts +16 -0
- package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.js +2 -0
- package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.d.ts +10 -0
- package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.js +215 -0
- package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/index.d.ts +31 -0
- package/dist/server/modules/affairs-indexer/core/src/index.js +32 -0
- package/dist/server/modules/affairs-indexer/core/src/index.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.d.ts +20 -0
- package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.js +47 -0
- package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.d.ts +17 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.js +63 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.d.ts +12 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.js +42 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.d.ts +7 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.js +107 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.d.ts +19 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.js +37 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.d.ts +7 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.js +123 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.d.ts +8 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.js +111 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.d.ts +42 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.js +2 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.d.ts +18 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.js +91 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.d.ts +18 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.js +59 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.d.ts +48 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.js +193 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.d.ts +7 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.js +371 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.d.ts +10 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.js +55 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.d.ts +9 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.js +2 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.d.ts +7 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.js +130 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.d.ts +7 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.js +228 -0
- package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.d.ts +205 -0
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js +1471 -0
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.d.ts +161 -0
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.js +1350 -0
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.d.ts +32 -0
- package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.js +208 -0
- package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.d.ts +30 -0
- package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js +66 -0
- package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.d.ts +33 -0
- package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js +705 -0
- package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.d.ts +80 -0
- package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.js +193 -0
- package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.d.ts +77 -0
- package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.js +467 -0
- package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.d.ts +17 -0
- package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.js +264 -0
- package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.d.ts +11 -0
- package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.js +76 -0
- package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.d.ts +26 -0
- package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js +305 -0
- package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.d.ts +53 -0
- package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.js +566 -0
- package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.d.ts +47 -0
- package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.js +227 -0
- package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.d.ts +5 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.js +245 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.d.ts +14 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.js +87 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.d.ts +13 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.js +16 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.d.ts +22 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.js +430 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.d.ts +9 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.js +19 -0
- package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.d.ts +21 -0
- package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.js +94 -0
- package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/abort.d.ts +2 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/abort.js +13 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/abort.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.d.ts +9 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.js +64 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.d.ts +10 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.js +230 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.js.map +1 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.d.ts +2 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.js +19 -0
- package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.js.map +1 -0
- package/dist/server/modules/affairs-indexer/internal-command-runner.d.ts +31 -0
- package/dist/server/modules/affairs-indexer/internal-command-runner.js +643 -0
- package/dist/server/modules/affairs-indexer/internal-command-runner.js.map +1 -0
- package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +0 -49
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js +10 -56
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +2 -46
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +15 -158
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.d.ts +4 -2
- package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.js +62 -21
- package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +3 -4
- package/dist/server/modules/butler/butler-control-session-service.js +39 -62
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-controller.d.ts +11 -3
- package/dist/server/modules/butler/butler-controller.js +19 -4
- package/dist/server/modules/butler/butler-controller.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
- package/dist/server/modules/butler/butler-profile-service.d.ts +1 -1
- package/dist/server/modules/butler/butler-profile-service.js +34 -63
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
- package/dist/server/modules/butler/butler-project-service.d.ts +1 -3
- package/dist/server/modules/butler/butler-project-service.js +1 -7
- package/dist/server/modules/butler/butler-project-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.d.ts +1 -0
- package/dist/server/modules/butler/butler-session-service.js +109 -0
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-summary-service.js +0 -2
- package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
- package/dist/server/modules/butler/butler-workspace-context.d.ts +5 -1
- package/dist/server/modules/butler/butler-workspace-context.js +21 -12
- package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
- package/dist/server/modules/file/file-content-service.d.ts +11 -0
- package/dist/server/modules/file/file-content-service.js +55 -0
- package/dist/server/modules/file/file-content-service.js.map +1 -1
- package/dist/server/modules/file/file-controller.d.ts +26 -1
- package/dist/server/modules/file/file-controller.js +59 -4
- package/dist/server/modules/file/file-controller.js.map +1 -1
- package/dist/server/modules/file/file-preview-link-service.d.ts +1 -0
- package/dist/server/modules/file/file-preview-link-service.js +25 -0
- package/dist/server/modules/file/file-preview-link-service.js.map +1 -1
- package/dist/server/modules/file/file-preview-service.js +15 -4
- package/dist/server/modules/file/file-preview-service.js.map +1 -1
- package/dist/server/modules/file/file-preview-types.d.ts +9 -1
- package/dist/server/modules/file/file-preview-types.js +8 -1
- package/dist/server/modules/file/file-preview-types.js.map +1 -1
- package/dist/server/modules/file/recent-modified-file-service.d.ts +15 -0
- package/dist/server/modules/file/recent-modified-file-service.js +102 -0
- package/dist/server/modules/file/recent-modified-file-service.js.map +1 -0
- package/dist/server/modules/file/runtime/codingns-workspace-bridge.js +6 -0
- package/dist/server/modules/file/workspace-file-bridge-service.d.ts +11 -0
- package/dist/server/modules/file/workspace-file-bridge-service.js +19 -0
- package/dist/server/modules/file/workspace-file-bridge-service.js.map +1 -1
- package/dist/server/modules/file/workspace-index-apply-service.d.ts +25 -0
- package/dist/server/modules/file/workspace-index-apply-service.js +42 -0
- package/dist/server/modules/file/workspace-index-apply-service.js.map +1 -0
- package/dist/server/modules/office/office-controller.d.ts +15 -1
- package/dist/server/modules/office/office-controller.js +26 -1
- package/dist/server/modules/office/office-controller.js.map +1 -1
- package/dist/server/modules/office/onlyoffice-integration-service.d.ts +78 -0
- package/dist/server/modules/office/onlyoffice-integration-service.js +610 -0
- package/dist/server/modules/office/onlyoffice-integration-service.js.map +1 -0
- package/dist/server/modules/plugins/plugin-file-gateway-service.d.ts +12 -0
- package/dist/server/modules/plugins/plugin-file-gateway-service.js +13 -0
- package/dist/server/modules/plugins/plugin-file-gateway-service.js.map +1 -1
- package/dist/server/modules/preferences/profile-service.d.ts +1 -0
- package/dist/server/modules/preferences/profile-service.js +27 -3
- package/dist/server/modules/preferences/profile-service.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +0 -8
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.d.ts +1 -0
- package/dist/server/modules/sessions/session-controller.js +3 -0
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +2 -0
- package/dist/server/modules/sessions/session-history-service.js +78 -3
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-live-runtime-service.js +4 -0
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.js +0 -4
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/workspace-session-instruction-watch-service.d.ts +23 -0
- package/dist/server/modules/sessions/workspace-session-instruction-watch-service.js +122 -0
- package/dist/server/modules/sessions/workspace-session-instruction-watch-service.js.map +1 -0
- package/dist/server/modules/sessions/workspace-session-runtime-context-service.d.ts +15 -0
- package/dist/server/modules/sessions/workspace-session-runtime-context-service.js +93 -10
- package/dist/server/modules/sessions/workspace-session-runtime-context-service.js.map +1 -1
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/SKILL.md +6 -7
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/references/cli-workflow.md +2 -3
- package/dist/server/modules/system/host-resource-controller.d.ts +7 -0
- package/dist/server/modules/system/host-resource-controller.js +12 -0
- package/dist/server/modules/system/host-resource-controller.js.map +1 -0
- package/dist/server/modules/system/host-resource-service.d.ts +54 -0
- package/dist/server/modules/system/host-resource-service.js +162 -0
- package/dist/server/modules/system/host-resource-service.js.map +1 -0
- package/dist/server/modules/tasks/observability-service.d.ts +12 -2
- package/dist/server/modules/tasks/observability-service.js +13 -1
- package/dist/server/modules/tasks/observability-service.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-client.d.ts +36 -2
- package/dist/server/modules/tasks/task-helper-client.js +201 -19
- package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-pool.d.ts +37 -0
- package/dist/server/modules/tasks/task-helper-pool.js +173 -0
- package/dist/server/modules/tasks/task-helper-pool.js.map +1 -0
- package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +27 -0
- package/dist/server/modules/tasks/task-helper-process-handlers.js +25 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process.js +75 -26
- package/dist/server/modules/tasks/task-helper-process.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-scheduling.d.ts +11 -0
- package/dist/server/modules/tasks/task-helper-scheduling.js +43 -0
- package/dist/server/modules/tasks/task-helper-scheduling.js.map +1 -0
- package/dist/server/modules/tasks/task-lane-executors.js +19 -3
- package/dist/server/modules/tasks/task-lane-executors.js.map +1 -1
- package/dist/server/modules/tasks/task-manager.d.ts +1 -0
- package/dist/server/modules/tasks/task-manager.js +3 -0
- package/dist/server/modules/tasks/task-manager.js.map +1 -1
- package/dist/server/modules/tasks/task-registry.d.ts +1 -0
- package/dist/server/modules/tasks/task-registry.js +3 -0
- package/dist/server/modules/tasks/task-registry.js.map +1 -1
- package/dist/server/modules/tasks/task-scheduler.d.ts +6 -0
- package/dist/server/modules/tasks/task-scheduler.js +162 -7
- package/dist/server/modules/tasks/task-scheduler.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +28 -3
- package/dist/server/modules/tasks/task-types.js +14 -2
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.d.ts +68 -0
- package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.js +286 -0
- package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.js.map +1 -0
- package/dist/server/modules/workbench/workbench-controller.js +11 -1
- package/dist/server/modules/workbench/workbench-controller.js.map +1 -1
- package/dist/server/modules/workbench/workbench-service.d.ts +9 -2
- package/dist/server/modules/workbench/workbench-service.js +58 -18
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/modules/workspace/affairs-library-controller.d.ts +117 -0
- package/dist/server/modules/workspace/affairs-library-controller.js +164 -0
- package/dist/server/modules/workspace/affairs-library-controller.js.map +1 -0
- package/dist/server/modules/workspace/affairs-library-debug-log.d.ts +23 -0
- package/dist/server/modules/workspace/affairs-library-debug-log.js +107 -0
- package/dist/server/modules/workspace/affairs-library-debug-log.js.map +1 -0
- package/dist/server/modules/workspace/affairs-library-dirty-watch-service.d.ts +52 -0
- package/dist/server/modules/workspace/affairs-library-dirty-watch-service.js +555 -0
- package/dist/server/modules/workspace/affairs-library-dirty-watch-service.js.map +1 -0
- package/dist/server/modules/workspace/affairs-library-preview-link-service.d.ts +24 -0
- package/dist/server/modules/workspace/affairs-library-preview-link-service.js +157 -0
- package/dist/server/modules/workspace/affairs-library-preview-link-service.js.map +1 -0
- package/dist/server/modules/workspace/affairs-library-refresh-contract.d.ts +56 -0
- package/dist/server/modules/workspace/affairs-library-refresh-contract.js +48 -0
- package/dist/server/modules/workspace/affairs-library-refresh-contract.js.map +1 -0
- package/dist/server/modules/workspace/affairs-library-service.d.ts +344 -0
- package/dist/server/modules/workspace/affairs-library-service.js +3755 -0
- package/dist/server/modules/workspace/affairs-library-service.js.map +1 -0
- package/dist/server/modules/workspace/affairs-lightweight-session-controller.d.ts +78 -0
- package/dist/server/modules/workspace/affairs-lightweight-session-controller.js +146 -0
- package/dist/server/modules/workspace/affairs-lightweight-session-controller.js.map +1 -0
- package/dist/server/modules/workspace/affairs-lightweight-session-service.d.ts +133 -0
- package/dist/server/modules/workspace/affairs-lightweight-session-service.js +1447 -0
- package/dist/server/modules/workspace/affairs-lightweight-session-service.js.map +1 -0
- package/dist/server/modules/workspace/affairs-tag-controller.d.ts +107 -0
- package/dist/server/modules/workspace/affairs-tag-controller.js +97 -0
- package/dist/server/modules/workspace/affairs-tag-controller.js.map +1 -0
- package/dist/server/modules/workspace/affairs-tag-service.d.ts +153 -0
- package/dist/server/modules/workspace/affairs-tag-service.js +680 -0
- package/dist/server/modules/workspace/affairs-tag-service.js.map +1 -0
- package/dist/server/modules/workspace/workspace-controller.d.ts +2 -1
- package/dist/server/modules/workspace/workspace-controller.js +8 -2
- package/dist/server/modules/workspace/workspace-controller.js.map +1 -1
- package/dist/server/modules/workspace/workspace-service.js +60 -9
- package/dist/server/modules/workspace/workspace-service.js.map +1 -1
- package/dist/server/routes/affairs.d.ts +3 -0
- package/dist/server/routes/affairs.js +7 -0
- package/dist/server/routes/affairs.js.map +1 -0
- package/dist/server/routes/assistant.js +0 -5
- package/dist/server/routes/assistant.js.map +1 -1
- package/dist/server/routes/files.js +5 -0
- package/dist/server/routes/files.js.map +1 -1
- package/dist/server/routes/office.js +4 -0
- package/dist/server/routes/office.js.map +1 -1
- package/dist/server/routes/system.d.ts +2 -1
- package/dist/server/routes/system.js +2 -1
- package/dist/server/routes/system.js.map +1 -1
- package/dist/server/routes/workspaces.d.ts +4 -1
- package/dist/server/routes/workspaces.js +46 -1
- package/dist/server/routes/workspaces.js.map +1 -1
- package/dist/server/server/create-server.d.ts +6 -2
- package/dist/server/server/create-server.js +113 -32
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/http/error-handler.js +10 -0
- package/dist/server/shared/http/error-handler.js.map +1 -1
- package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.d.ts +10 -0
- package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.js +47 -0
- package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-profile-repository.js +7 -3
- package/dist/server/storage/repositories/butler-profile-repository.js.map +1 -1
- package/dist/server/storage/repositories/office-onlyoffice-setting-repository.d.ts +19 -0
- package/dist/server/storage/repositories/office-onlyoffice-setting-repository.js +55 -0
- package/dist/server/storage/repositories/office-onlyoffice-setting-repository.js.map +1 -0
- package/dist/server/storage/repositories/session-index-repository.js +9 -2
- package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
- package/dist/server/storage/repositories/user-affairs-library-setting-repository.d.ts +10 -0
- package/dist/server/storage/repositories/user-affairs-library-setting-repository.js +69 -0
- package/dist/server/storage/repositories/user-affairs-library-setting-repository.js.map +1 -0
- package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
- package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
- package/dist/server/storage/repositories/workspace-navigation-state-repository.d.ts +3 -0
- package/dist/server/storage/repositories/workspace-navigation-state-repository.js +47 -4
- package/dist/server/storage/repositories/workspace-navigation-state-repository.js.map +1 -1
- package/dist/server/storage/sqlite/client.js +230 -123
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +48 -25
- package/dist/server/types/domain.d.ts +27 -20
- package/dist/server/ws/workbench-ws-hub.js +2 -2
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js +0 -2
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +0 -6
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/AdaptiveButlerPage-B153lk5H.css +0 -1
- package/dist/public/assets/AdaptiveButlerPage-CJw8Ae62.js +0 -3
- package/dist/public/assets/DesktopModal-D_A8sgQU.js +0 -1
- package/dist/public/assets/DesktopWindowPage-DK7L7osV.js +0 -2
- package/dist/public/assets/FileContextPanel-BdCoubcJ.js +0 -1
- package/dist/public/assets/GitSidebar-BeZ0hj7A.js +0 -6
- package/dist/public/assets/MobileCreateSessionSheet-DfLMVu8q.js +0 -1
- package/dist/public/assets/MobileSheet-5kZ-w-gU.js +0 -1
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-C6JMiOq_.js +0 -1
- package/dist/public/assets/PluginContainerPage-BlY-xJDh.js +0 -1
- package/dist/public/assets/SessionIndexPage-DkBp9Mqz.js +0 -1
- package/dist/public/assets/SettingsPage-C-ASmJAG.js +0 -2
- package/dist/public/assets/TerminalRuntimeFallbackModal-Bzum5nZ0.js +0 -1
- package/dist/public/assets/WorkbenchLayout-OFi6CWgH.js +0 -244
- package/dist/public/assets/WorkbenchShellRoute-B4XB8SwG.css +0 -1
- package/dist/public/assets/WorkbenchShellRoute-BAQe_E0O.js +0 -1
- package/dist/public/assets/WorkspaceDebugDetailPage-DhKa6e9y.js +0 -1
- package/dist/public/assets/file-tree-icon-Mg1DiBRX.js +0 -590
- package/dist/public/assets/index-C4t-vvqk.css +0 -1
- package/dist/public/assets/index-CL97fwWB.js +0 -42
- package/dist/public/assets/realtime-client-CLafKzzJ.js +0 -1
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.d.ts +0 -32
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js +0 -93
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js.map +0 -1
- package/dist/server/modules/butler/assistant-sandbox-service.d.ts +0 -69
- package/dist/server/modules/butler/assistant-sandbox-service.js +0 -399
- package/dist/server/modules/butler/assistant-sandbox-service.js.map +0 -1
- package/dist/server/modules/channels/wechat-claw-client.d.ts +0 -51
- package/dist/server/modules/channels/wechat-claw-client.js +0 -245
- package/dist/server/modules/channels/wechat-claw-client.js.map +0 -1
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.d.ts +0 -18
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js +0 -191
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RuntimeConfig } from "../../../contracts/src/index.js";
|
|
2
|
+
import type { ParsedDocument as ParsedDocumentResult } from "./plain-text-parser.js";
|
|
3
|
+
import type { ParseSkip } from "./parser-adapter.js";
|
|
4
|
+
import { ParserRouter } from "./parser-router.js";
|
|
5
|
+
import type { ParserAdapter } from "./parser-adapter.js";
|
|
6
|
+
/**
|
|
7
|
+
* 统一解析入口。
|
|
8
|
+
* 第二阶段改为依赖 ParserRouter,避免解析策略继续散在索引流程里。
|
|
9
|
+
*/
|
|
10
|
+
export declare class DocumentParser {
|
|
11
|
+
private readonly router;
|
|
12
|
+
constructor(options: {
|
|
13
|
+
config: RuntimeConfig;
|
|
14
|
+
router?: ParserRouter;
|
|
15
|
+
adapters?: ParserAdapter[];
|
|
16
|
+
});
|
|
17
|
+
parse(filePath: string, signal?: AbortSignal): Promise<ParsedDocumentResult>;
|
|
18
|
+
parseWithOutcome(filePath: string, signal?: AbortSignal): Promise<ParsedDocumentResult | ParseSkip>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ParserRouter, createDefaultParserAdapters } from "./parser-router.js";
|
|
2
|
+
import { throwIfAborted } from "../utils/abort.js";
|
|
3
|
+
/**
|
|
4
|
+
* 统一解析入口。
|
|
5
|
+
* 第二阶段改为依赖 ParserRouter,避免解析策略继续散在索引流程里。
|
|
6
|
+
*/
|
|
7
|
+
export class DocumentParser {
|
|
8
|
+
router;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.router = options.router ?? new ParserRouter(options.adapters ?? createDefaultParserAdapters(), {
|
|
11
|
+
disabledExtensions: options.config.disabledParserExtensions,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async parse(filePath, signal) {
|
|
15
|
+
throwIfAborted(signal, "事务文档库解析已取消");
|
|
16
|
+
const { adapter, extension } = await this.router.resolveForFile(filePath);
|
|
17
|
+
throwIfAborted(signal, "事务文档库解析已取消");
|
|
18
|
+
const result = await adapter.parse({
|
|
19
|
+
filePath,
|
|
20
|
+
extension,
|
|
21
|
+
});
|
|
22
|
+
if ("kind" in result && result.kind === "skip") {
|
|
23
|
+
throw new Error("parse() 不支持 skip 结果,请改用 parseWithOutcome()");
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
async parseWithOutcome(filePath, signal) {
|
|
28
|
+
throwIfAborted(signal, "事务文档库解析已取消");
|
|
29
|
+
const { adapter, extension } = await this.router.resolveForFile(filePath);
|
|
30
|
+
throwIfAborted(signal, "事务文档库解析已取消");
|
|
31
|
+
return await adapter.parse({
|
|
32
|
+
filePath,
|
|
33
|
+
extension,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=document-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-parser.js","sourceRoot":"","sources":["../../../../../../../src/modules/affairs-indexer/core/src/parser/document-parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;GAGG;AACH,MAAM,OAAO,cAAc;IACR,MAAM,CAAe;IAEtC,YAAY,OAAqF;QAC/F,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,QAAQ,IAAI,2BAA2B,EAAE,EAAE;YAClG,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,wBAAwB;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,MAAoB;QAChD,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACrC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1E,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;YACjC,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;QACH,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,MAA8B,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,MAAoB;QAC3D,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACrC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1E,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACrC,OAAO,MAAM,OAAO,CAAC,KAAK,CAAC;YACzB,QAAQ;YACR,SAAS;SACV,CAAqC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseComplexParserAdapter } from "./base-complex-parser-adapter.js";
|
|
2
|
+
import type { ParseInput, ParsedDocumentPayload } from "./parser-adapter.js";
|
|
3
|
+
export declare class DocxParserAdapter extends BaseComplexParserAdapter {
|
|
4
|
+
readonly name = "docx_parser";
|
|
5
|
+
supports(ext: string): boolean;
|
|
6
|
+
protected parseComplex(input: ParseInput): Promise<ParsedDocumentPayload>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { AppError, APP_ERROR_CODES } from "../../../contracts/src/index.js";
|
|
4
|
+
import { BaseComplexParserAdapter } from "./base-complex-parser-adapter.js";
|
|
5
|
+
import { decodeXmlEntities, extractXmlAttributes, readZipEntries, readZipText, shortSummary, } from "./openxml-utils.js";
|
|
6
|
+
const SUPPORTED_DOCX_EXTENSIONS = new Set([".docx"]);
|
|
7
|
+
function stripXmlTags(raw) {
|
|
8
|
+
return raw.replace(/<[^>]+>/g, "");
|
|
9
|
+
}
|
|
10
|
+
function parseParagraphText(paragraphXml) {
|
|
11
|
+
const parts = [];
|
|
12
|
+
const textPattern = /<w:t\b[^>]*>([\s\S]*?)<\/w:t>/g;
|
|
13
|
+
for (const match of paragraphXml.matchAll(textPattern)) {
|
|
14
|
+
parts.push(decodeXmlEntities(match[1]));
|
|
15
|
+
}
|
|
16
|
+
const tabCount = [...paragraphXml.matchAll(/<w:tab\b[^>]*\/>/g)].length;
|
|
17
|
+
for (let index = 0; index < tabCount; index += 1) {
|
|
18
|
+
parts.push("\t");
|
|
19
|
+
}
|
|
20
|
+
const breakCount = [...paragraphXml.matchAll(/<w:br\b[^>]*\/>/g)].length;
|
|
21
|
+
for (let index = 0; index < breakCount; index += 1) {
|
|
22
|
+
parts.push("\n");
|
|
23
|
+
}
|
|
24
|
+
return parts.join("").replace(/\s+\n/g, "\n").replace(/\n\s+/g, "\n").trim();
|
|
25
|
+
}
|
|
26
|
+
function parseParagraphStyle(paragraphXml) {
|
|
27
|
+
const match = paragraphXml.match(/<w:pStyle\b([^>]*)\/>/);
|
|
28
|
+
if (!match) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const attributes = extractXmlAttributes(match[1]);
|
|
32
|
+
return attributes["w:val"] ?? null;
|
|
33
|
+
}
|
|
34
|
+
function isHeadingStyle(style) {
|
|
35
|
+
return Boolean(style && /^Heading[1-6]$/i.test(style));
|
|
36
|
+
}
|
|
37
|
+
function parseDocumentBlocks(documentXml) {
|
|
38
|
+
const blocks = [];
|
|
39
|
+
const paragraphPattern = /<w:p\b[^>]*>([\s\S]*?)<\/w:p>/g;
|
|
40
|
+
for (const match of documentXml.matchAll(paragraphPattern)) {
|
|
41
|
+
const rawParagraphXml = match[0];
|
|
42
|
+
const text = parseParagraphText(rawParagraphXml);
|
|
43
|
+
if (!text) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const style = parseParagraphStyle(rawParagraphXml);
|
|
47
|
+
const kind = isHeadingStyle(style) ? "heading" : "paragraph";
|
|
48
|
+
blocks.push({
|
|
49
|
+
kind,
|
|
50
|
+
text,
|
|
51
|
+
metadata: style
|
|
52
|
+
? {
|
|
53
|
+
style,
|
|
54
|
+
}
|
|
55
|
+
: undefined,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return blocks;
|
|
59
|
+
}
|
|
60
|
+
function parseCoreTitle(coreXml) {
|
|
61
|
+
if (!coreXml) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const match = coreXml.match(/<dc:title\b[^>]*>([\s\S]*?)<\/dc:title>/);
|
|
65
|
+
if (!match) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const title = decodeXmlEntities(stripXmlTags(match[1])).trim();
|
|
69
|
+
return title || null;
|
|
70
|
+
}
|
|
71
|
+
export class DocxParserAdapter extends BaseComplexParserAdapter {
|
|
72
|
+
name = "docx_parser";
|
|
73
|
+
supports(ext) {
|
|
74
|
+
return SUPPORTED_DOCX_EXTENSIONS.has(ext.toLowerCase());
|
|
75
|
+
}
|
|
76
|
+
async parseComplex(input) {
|
|
77
|
+
let fileBuffer;
|
|
78
|
+
try {
|
|
79
|
+
fileBuffer = fs.readFileSync(input.filePath);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new AppError(`DOCX 文件读取失败:${path.basename(input.filePath)}`, APP_ERROR_CODES.PARSER_COMPLEX_CONTENT_UNREADABLE, { cause: error });
|
|
83
|
+
}
|
|
84
|
+
const entries = readZipEntries(fileBuffer, "DOCX");
|
|
85
|
+
const documentXml = readZipText(entries, "word/document.xml", "DOCX");
|
|
86
|
+
const coreXml = readZipText(entries, "docProps/core.xml", "DOCX", false);
|
|
87
|
+
const blocks = parseDocumentBlocks(documentXml);
|
|
88
|
+
if (blocks.length === 0) {
|
|
89
|
+
throw new AppError("DOCX 中没有可读取的正文段落", APP_ERROR_CODES.PARSER_COMPLEX_CONTENT_UNREADABLE);
|
|
90
|
+
}
|
|
91
|
+
const text = blocks.map(block => block.text).join("\n\n").trim();
|
|
92
|
+
if (!text) {
|
|
93
|
+
throw new AppError("DOCX 文本内容为空", APP_ERROR_CODES.PARSER_COMPLEX_CONTENT_UNREADABLE);
|
|
94
|
+
}
|
|
95
|
+
const headingCount = blocks.filter(block => block.kind === "heading").length;
|
|
96
|
+
const structuredBlocks = blocks.map(block => ({
|
|
97
|
+
kind: block.kind,
|
|
98
|
+
text: block.text,
|
|
99
|
+
metadata: block.metadata,
|
|
100
|
+
}));
|
|
101
|
+
const title = parseCoreTitle(coreXml) ?? blocks.find(block => block.kind === "heading")?.text
|
|
102
|
+
?? path.basename(input.filePath, input.extension);
|
|
103
|
+
return {
|
|
104
|
+
title,
|
|
105
|
+
text,
|
|
106
|
+
summary: shortSummary(text),
|
|
107
|
+
parser: "docx",
|
|
108
|
+
metadata: {
|
|
109
|
+
adapter: this.name,
|
|
110
|
+
paragraphCount: blocks.length,
|
|
111
|
+
headingCount,
|
|
112
|
+
},
|
|
113
|
+
structured: {
|
|
114
|
+
blocks: structuredBlocks,
|
|
115
|
+
stats: {
|
|
116
|
+
paragraphCount: blocks.length,
|
|
117
|
+
headingCount,
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=docx-parser-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docx-parser-adapter.js","sourceRoot":"","sources":["../../../../../../../src/modules/affairs-indexer/core/src/parser/docx-parser-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function normalizeWhitespace(text: string): string;
|
|
2
|
+
export declare function shortSummary(text: string, limit?: number): string;
|
|
3
|
+
export declare function decodeXmlEntities(text: string): string;
|
|
4
|
+
export declare function extractXmlAttributes(raw: string): Record<string, string>;
|
|
5
|
+
export declare function readZipEntries(buffer: Buffer, formatLabel: string): Map<string, Buffer>;
|
|
6
|
+
export declare function readZipText(entries: Map<string, Buffer>, entryPath: string, formatLabel: string): string;
|
|
7
|
+
export declare function readZipText(entries: Map<string, Buffer>, entryPath: string, formatLabel: string, required: true): string;
|
|
8
|
+
export declare function readZipText(entries: Map<string, Buffer>, entryPath: string, formatLabel: string, required: false): string | null;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { inflateRawSync } from "node:zlib";
|
|
2
|
+
import { AppError, APP_ERROR_CODES } from "../../../contracts/src/index.js";
|
|
3
|
+
const EOCD_SIGNATURE = 0x06054b50;
|
|
4
|
+
const CENTRAL_DIRECTORY_SIGNATURE = 0x02014b50;
|
|
5
|
+
const LOCAL_FILE_SIGNATURE = 0x04034b50;
|
|
6
|
+
const ZIP_METHOD_STORED = 0;
|
|
7
|
+
const ZIP_METHOD_DEFLATE = 8;
|
|
8
|
+
export function normalizeWhitespace(text) {
|
|
9
|
+
return text.replace(/\s+/g, " ").trim();
|
|
10
|
+
}
|
|
11
|
+
export function shortSummary(text, limit = 180) {
|
|
12
|
+
const normalized = normalizeWhitespace(text);
|
|
13
|
+
if (normalized.length <= limit) {
|
|
14
|
+
return normalized;
|
|
15
|
+
}
|
|
16
|
+
return `${normalized.slice(0, limit - 1)}…`;
|
|
17
|
+
}
|
|
18
|
+
export function decodeXmlEntities(text) {
|
|
19
|
+
return text
|
|
20
|
+
.replace(/</g, "<")
|
|
21
|
+
.replace(/>/g, ">")
|
|
22
|
+
.replace(/"/g, "\"")
|
|
23
|
+
.replace(/'/g, "'")
|
|
24
|
+
.replace(/&/g, "&");
|
|
25
|
+
}
|
|
26
|
+
export function extractXmlAttributes(raw) {
|
|
27
|
+
const attributes = {};
|
|
28
|
+
const pattern = /([A-Za-z_][\w:.-]*)="([^"]*)"/g;
|
|
29
|
+
for (const match of raw.matchAll(pattern)) {
|
|
30
|
+
attributes[match[1]] = decodeXmlEntities(match[2]);
|
|
31
|
+
}
|
|
32
|
+
return attributes;
|
|
33
|
+
}
|
|
34
|
+
function findEndOfCentralDirectory(buffer, formatLabel) {
|
|
35
|
+
const minimumOffset = Math.max(0, buffer.length - 65557);
|
|
36
|
+
for (let offset = buffer.length - 22; offset >= minimumOffset; offset -= 1) {
|
|
37
|
+
if (buffer.readUInt32LE(offset) === EOCD_SIGNATURE) {
|
|
38
|
+
return offset;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw new AppError(`${formatLabel} 文件不是合法的 ZIP 容器`, APP_ERROR_CODES.PARSER_COMPLEX_CONTENT_UNREADABLE);
|
|
42
|
+
}
|
|
43
|
+
function readZipRecords(buffer, formatLabel) {
|
|
44
|
+
const eocdOffset = findEndOfCentralDirectory(buffer, formatLabel);
|
|
45
|
+
const entryCount = buffer.readUInt16LE(eocdOffset + 10);
|
|
46
|
+
const centralDirectoryOffset = buffer.readUInt32LE(eocdOffset + 16);
|
|
47
|
+
const records = [];
|
|
48
|
+
let cursor = centralDirectoryOffset;
|
|
49
|
+
for (let index = 0; index < entryCount; index += 1) {
|
|
50
|
+
if (cursor + 46 > buffer.length || buffer.readUInt32LE(cursor) !== CENTRAL_DIRECTORY_SIGNATURE) {
|
|
51
|
+
throw new AppError(`${formatLabel} ZIP 中央目录损坏`, APP_ERROR_CODES.PARSER_COMPLEX_CONTENT_UNREADABLE);
|
|
52
|
+
}
|
|
53
|
+
const compressionMethod = buffer.readUInt16LE(cursor + 10);
|
|
54
|
+
const compressedSize = buffer.readUInt32LE(cursor + 20);
|
|
55
|
+
const fileNameLength = buffer.readUInt16LE(cursor + 28);
|
|
56
|
+
const extraFieldLength = buffer.readUInt16LE(cursor + 30);
|
|
57
|
+
const commentLength = buffer.readUInt16LE(cursor + 32);
|
|
58
|
+
const localHeaderOffset = buffer.readUInt32LE(cursor + 42);
|
|
59
|
+
const fileNameStart = cursor + 46;
|
|
60
|
+
const fileNameEnd = fileNameStart + fileNameLength;
|
|
61
|
+
const entryPath = buffer.subarray(fileNameStart, fileNameEnd).toString("utf-8");
|
|
62
|
+
records.push({
|
|
63
|
+
path: entryPath,
|
|
64
|
+
compressionMethod,
|
|
65
|
+
compressedSize,
|
|
66
|
+
localHeaderOffset,
|
|
67
|
+
});
|
|
68
|
+
cursor = fileNameEnd + extraFieldLength + commentLength;
|
|
69
|
+
}
|
|
70
|
+
return records;
|
|
71
|
+
}
|
|
72
|
+
function extractZipEntry(buffer, record, formatLabel) {
|
|
73
|
+
const offset = record.localHeaderOffset;
|
|
74
|
+
if (offset + 30 > buffer.length || buffer.readUInt32LE(offset) !== LOCAL_FILE_SIGNATURE) {
|
|
75
|
+
throw new AppError(`${formatLabel} ZIP 本地头损坏:${record.path}`, APP_ERROR_CODES.PARSER_COMPLEX_CONTENT_UNREADABLE);
|
|
76
|
+
}
|
|
77
|
+
const fileNameLength = buffer.readUInt16LE(offset + 26);
|
|
78
|
+
const extraFieldLength = buffer.readUInt16LE(offset + 28);
|
|
79
|
+
const dataStart = offset + 30 + fileNameLength + extraFieldLength;
|
|
80
|
+
const dataEnd = dataStart + record.compressedSize;
|
|
81
|
+
if (dataEnd > buffer.length) {
|
|
82
|
+
throw new AppError(`${formatLabel} ZIP 条目越界:${record.path}`, APP_ERROR_CODES.PARSER_COMPLEX_CONTENT_UNREADABLE);
|
|
83
|
+
}
|
|
84
|
+
const compressed = buffer.subarray(dataStart, dataEnd);
|
|
85
|
+
if (record.compressionMethod === ZIP_METHOD_STORED) {
|
|
86
|
+
return Buffer.from(compressed);
|
|
87
|
+
}
|
|
88
|
+
if (record.compressionMethod === ZIP_METHOD_DEFLATE) {
|
|
89
|
+
return inflateRawSync(compressed);
|
|
90
|
+
}
|
|
91
|
+
throw new AppError(`${formatLabel} 使用了当前未支持的 ZIP 压缩方法:${record.compressionMethod}`, APP_ERROR_CODES.PARSER_COMPLEX_FORMAT_UNSUPPORTED);
|
|
92
|
+
}
|
|
93
|
+
export function readZipEntries(buffer, formatLabel) {
|
|
94
|
+
const records = readZipRecords(buffer, formatLabel);
|
|
95
|
+
const entries = new Map();
|
|
96
|
+
for (const record of records) {
|
|
97
|
+
entries.set(record.path, extractZipEntry(buffer, record, formatLabel));
|
|
98
|
+
}
|
|
99
|
+
return entries;
|
|
100
|
+
}
|
|
101
|
+
export function readZipText(entries, entryPath, formatLabel, required = true) {
|
|
102
|
+
const content = entries.get(entryPath);
|
|
103
|
+
if (!content) {
|
|
104
|
+
if (!required) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
throw new AppError(`${formatLabel} 缺少必需条目:${entryPath}`, APP_ERROR_CODES.PARSER_COMPLEX_CONTENT_UNREADABLE);
|
|
108
|
+
}
|
|
109
|
+
return content.toString("utf-8");
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=openxml-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openxml-utils.js","sourceRoot":"","sources":["../../../../../../../src/modules/affairs-indexer/core/src/parser/openxml-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type ParserAvailability = "available" | "degraded" | "unavailable";
|
|
2
|
+
export interface ParseInput {
|
|
3
|
+
filePath: string;
|
|
4
|
+
extension: string;
|
|
5
|
+
}
|
|
6
|
+
export type StructuredBlockKind = "paragraph" | "table" | "page" | "sheet" | "slide" | "heading";
|
|
7
|
+
export interface StructuredBlock {
|
|
8
|
+
kind: StructuredBlockKind;
|
|
9
|
+
text?: string;
|
|
10
|
+
page?: number;
|
|
11
|
+
sheetName?: string;
|
|
12
|
+
slideIndex?: number;
|
|
13
|
+
cells?: string[][];
|
|
14
|
+
metadata?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
export interface StructuredDocument {
|
|
17
|
+
blocks: StructuredBlock[];
|
|
18
|
+
stats?: Record<string, number>;
|
|
19
|
+
}
|
|
20
|
+
export interface ParseSkip {
|
|
21
|
+
kind: "skip";
|
|
22
|
+
adapter: string;
|
|
23
|
+
reasonCode: string;
|
|
24
|
+
extension: string;
|
|
25
|
+
message: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ParsedDocumentPayload {
|
|
28
|
+
title: string;
|
|
29
|
+
text: string;
|
|
30
|
+
summary: string;
|
|
31
|
+
parser: string;
|
|
32
|
+
metadata?: Record<string, unknown>;
|
|
33
|
+
structured?: StructuredDocument;
|
|
34
|
+
}
|
|
35
|
+
export type ParserRouteKind = "primary" | "fallback";
|
|
36
|
+
export interface ParserAdapter {
|
|
37
|
+
name: string;
|
|
38
|
+
routeKind?: ParserRouteKind;
|
|
39
|
+
supports(ext: string): boolean;
|
|
40
|
+
availability(): Promise<ParserAvailability>;
|
|
41
|
+
parse(input: ParseInput): Promise<ParsedDocumentPayload | ParseSkip>;
|
|
42
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-adapter.js","sourceRoot":"","sources":["../../../../../../../src/modules/affairs-indexer/core/src/parser/parser-adapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RuntimeConfig } from "../../../contracts/src/index.js";
|
|
2
|
+
import type { ParserAdapter, ParserAvailability, ParserRouteKind } from "./parser-adapter.js";
|
|
3
|
+
export type ParserCapabilityStatus = "primary" | "fallback" | "disabled";
|
|
4
|
+
export interface ParserCapabilityRecord {
|
|
5
|
+
extension: string;
|
|
6
|
+
adapterName: string;
|
|
7
|
+
routeKind: ParserRouteKind;
|
|
8
|
+
availability: ParserAvailability;
|
|
9
|
+
status: ParserCapabilityStatus;
|
|
10
|
+
}
|
|
11
|
+
export declare class ParserCapabilityRegistry {
|
|
12
|
+
private readonly adapters;
|
|
13
|
+
private readonly extensions;
|
|
14
|
+
private readonly disabledExtensions;
|
|
15
|
+
constructor(adapters: ParserAdapter[], extensions: string[], disabledExtensions?: Set<string>);
|
|
16
|
+
static createDefault(config?: Pick<RuntimeConfig, "disabledParserExtensions">): ParserCapabilityRegistry;
|
|
17
|
+
list(): Promise<ParserCapabilityRecord[]>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createDefaultParserAdapters } from "./parser-router.js";
|
|
2
|
+
function normalizeRouteKind(adapter) {
|
|
3
|
+
return adapter.routeKind ?? "primary";
|
|
4
|
+
}
|
|
5
|
+
function normalizeExtension(value) {
|
|
6
|
+
const normalized = value.trim().toLowerCase();
|
|
7
|
+
return normalized.startsWith(".") ? normalized : `.${normalized}`;
|
|
8
|
+
}
|
|
9
|
+
function statusFrom(routeKind, availability) {
|
|
10
|
+
if (availability === "unavailable") {
|
|
11
|
+
return "disabled";
|
|
12
|
+
}
|
|
13
|
+
return routeKind === "fallback" ? "fallback" : "primary";
|
|
14
|
+
}
|
|
15
|
+
export class ParserCapabilityRegistry {
|
|
16
|
+
adapters;
|
|
17
|
+
extensions;
|
|
18
|
+
disabledExtensions;
|
|
19
|
+
constructor(adapters, extensions, disabledExtensions = new Set()) {
|
|
20
|
+
this.adapters = adapters;
|
|
21
|
+
this.extensions = extensions;
|
|
22
|
+
this.disabledExtensions = disabledExtensions;
|
|
23
|
+
}
|
|
24
|
+
static createDefault(config) {
|
|
25
|
+
return new ParserCapabilityRegistry(createDefaultParserAdapters(), [
|
|
26
|
+
".md",
|
|
27
|
+
".mdx",
|
|
28
|
+
".txt",
|
|
29
|
+
".rtf",
|
|
30
|
+
".html",
|
|
31
|
+
".htm",
|
|
32
|
+
".xml",
|
|
33
|
+
".json",
|
|
34
|
+
".yaml",
|
|
35
|
+
".yml",
|
|
36
|
+
".tsv",
|
|
37
|
+
".csv",
|
|
38
|
+
".xlsx",
|
|
39
|
+
".ods",
|
|
40
|
+
".et",
|
|
41
|
+
".numbers",
|
|
42
|
+
".doc",
|
|
43
|
+
".docx",
|
|
44
|
+
".odt",
|
|
45
|
+
".wps",
|
|
46
|
+
".pdf",
|
|
47
|
+
".ppt",
|
|
48
|
+
".pptx",
|
|
49
|
+
".odp",
|
|
50
|
+
".key",
|
|
51
|
+
".xls",
|
|
52
|
+
], new Set((config?.disabledParserExtensions ?? []).map(normalizeExtension)));
|
|
53
|
+
}
|
|
54
|
+
async list() {
|
|
55
|
+
const records = [];
|
|
56
|
+
for (const extension of this.extensions) {
|
|
57
|
+
const supportingAdapters = this.adapters.filter(adapter => adapter.supports(extension));
|
|
58
|
+
const isDisabled = this.disabledExtensions.has(extension);
|
|
59
|
+
if (supportingAdapters.length === 0) {
|
|
60
|
+
records.push({
|
|
61
|
+
extension,
|
|
62
|
+
adapterName: "none",
|
|
63
|
+
routeKind: "fallback",
|
|
64
|
+
availability: "unavailable",
|
|
65
|
+
status: "disabled",
|
|
66
|
+
});
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const primaryCandidate = supportingAdapters.find(adapter => normalizeRouteKind(adapter) === "primary");
|
|
70
|
+
const fallbackCandidate = supportingAdapters.find(adapter => normalizeRouteKind(adapter) === "fallback");
|
|
71
|
+
const preferred = isDisabled
|
|
72
|
+
? (fallbackCandidate ?? primaryCandidate ?? supportingAdapters[0])
|
|
73
|
+
: (primaryCandidate ?? fallbackCandidate ?? supportingAdapters[0]);
|
|
74
|
+
const preferredAvailability = await preferred.availability();
|
|
75
|
+
const preferredRouteKind = normalizeRouteKind(preferred);
|
|
76
|
+
const availability = isDisabled ? "unavailable" : preferredAvailability;
|
|
77
|
+
const routeKind = isDisabled && fallbackCandidate
|
|
78
|
+
? normalizeRouteKind(fallbackCandidate)
|
|
79
|
+
: preferredRouteKind;
|
|
80
|
+
records.push({
|
|
81
|
+
extension,
|
|
82
|
+
adapterName: preferred.name,
|
|
83
|
+
routeKind,
|
|
84
|
+
availability,
|
|
85
|
+
status: isDisabled ? "disabled" : statusFrom(routeKind, availability),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return records;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=parser-capability-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-capability-registry.js","sourceRoot":"","sources":["../../../../../../../src/modules/affairs-indexer/core/src/parser/parser-capability-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ParserAdapter } from "./parser-adapter.js";
|
|
2
|
+
export declare function createDefaultParserAdapters(): ParserAdapter[];
|
|
3
|
+
/**
|
|
4
|
+
* 解析器路由器。
|
|
5
|
+
* 第二阶段把适配器选择逻辑从 DocumentParser 中拆出来,避免索引流程继续硬编码解析策略。
|
|
6
|
+
*/
|
|
7
|
+
export declare class ParserRouter {
|
|
8
|
+
private readonly adapters;
|
|
9
|
+
private readonly disabledExtensions;
|
|
10
|
+
constructor(adapters: ParserAdapter[], options?: {
|
|
11
|
+
disabledExtensions?: string[];
|
|
12
|
+
});
|
|
13
|
+
listAdapters(): ParserAdapter[];
|
|
14
|
+
resolveForFile(filePath: string): Promise<{
|
|
15
|
+
adapter: ParserAdapter;
|
|
16
|
+
extension: string;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { AppError, APP_ERROR_CODES } from "../../../contracts/src/index.js";
|
|
3
|
+
import { ComplexDocumentSkipAdapter } from "./complex-document-skip-adapter.js";
|
|
4
|
+
import { CsvParserAdapter } from "./csv-parser-adapter.js";
|
|
5
|
+
import { DocxParserAdapter } from "./docx-parser-adapter.js";
|
|
6
|
+
import { PdfParserAdapter } from "./pdf-parser-adapter.js";
|
|
7
|
+
import { PlainTextParserAdapter } from "./plain-text-parser-adapter.js";
|
|
8
|
+
import { PptxParserAdapter } from "./pptx-parser-adapter.js";
|
|
9
|
+
import { XlsxParserAdapter } from "./xlsx-parser-adapter.js";
|
|
10
|
+
function isFallbackAdapter(adapter) {
|
|
11
|
+
return adapter.routeKind === "fallback";
|
|
12
|
+
}
|
|
13
|
+
export function createDefaultParserAdapters() {
|
|
14
|
+
return [
|
|
15
|
+
new PlainTextParserAdapter(),
|
|
16
|
+
new CsvParserAdapter(),
|
|
17
|
+
new XlsxParserAdapter(),
|
|
18
|
+
new DocxParserAdapter(),
|
|
19
|
+
new PdfParserAdapter(),
|
|
20
|
+
new PptxParserAdapter(),
|
|
21
|
+
new ComplexDocumentSkipAdapter(),
|
|
22
|
+
];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 解析器路由器。
|
|
26
|
+
* 第二阶段把适配器选择逻辑从 DocumentParser 中拆出来,避免索引流程继续硬编码解析策略。
|
|
27
|
+
*/
|
|
28
|
+
export class ParserRouter {
|
|
29
|
+
adapters;
|
|
30
|
+
disabledExtensions;
|
|
31
|
+
constructor(adapters, options = {}) {
|
|
32
|
+
this.adapters = adapters;
|
|
33
|
+
this.disabledExtensions = new Set((options.disabledExtensions ?? []).map(item => item.toLowerCase()));
|
|
34
|
+
}
|
|
35
|
+
listAdapters() {
|
|
36
|
+
return [...this.adapters];
|
|
37
|
+
}
|
|
38
|
+
async resolveForFile(filePath) {
|
|
39
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
40
|
+
const primaryAdapter = this.disabledExtensions.has(extension)
|
|
41
|
+
? undefined
|
|
42
|
+
: this.adapters.find(item => !isFallbackAdapter(item) && item.supports(extension));
|
|
43
|
+
const fallbackAdapter = this.adapters.find(item => isFallbackAdapter(item) && item.supports(extension));
|
|
44
|
+
const adapter = primaryAdapter ?? fallbackAdapter;
|
|
45
|
+
if (!adapter) {
|
|
46
|
+
throw new AppError(`当前没有可用解析器支持扩展名:${extension || "(无扩展名)"}`, APP_ERROR_CODES.PARSER_ROUTE_UNSUPPORTED, {
|
|
47
|
+
details: {
|
|
48
|
+
filePath,
|
|
49
|
+
extension,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
adapter,
|
|
55
|
+
extension,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=parser-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-router.js","sourceRoot":"","sources":["../../../../../../../src/modules/affairs-indexer/core/src/parser/parser-router.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAE5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,SAAS,iBAAiB,CAAC,OAAsB;IAC/C,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,IAAI,sBAAsB,EAAE;QAC5B,IAAI,gBAAgB,EAAE;QACtB,IAAI,iBAAiB,EAAE;QACvB,IAAI,iBAAiB,EAAE;QACvB,IAAI,gBAAgB,EAAE;QACtB,IAAI,iBAAiB,EAAE;QACvB,IAAI,0BAA0B,EAAE;KACjC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,YAAY;IAIJ;IAHF,kBAAkB,CAAc;IAEjD,YACmB,QAAyB,EAC1C,UAEI,EAAE;QAHW,aAAQ,GAAR,QAAQ,CAAiB;QAK1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;YAC3D,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACrF,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACxG,MAAM,OAAO,GAAG,cAAc,IAAI,eAAe,CAAC;QAElD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAChB,kBAAkB,SAAS,IAAI,QAAQ,EAAE,EACzC,eAAe,CAAC,wBAAwB,EACxC;gBACE,OAAO,EAAE;oBACP,QAAQ;oBACR,SAAS;iBACV;aACF,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO;YACP,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export interface ParserSkipRecordInput {
|
|
2
|
+
adapter: string;
|
|
3
|
+
reasonCode: string;
|
|
4
|
+
extension: string;
|
|
5
|
+
path: string;
|
|
6
|
+
message: string;
|
|
7
|
+
observedAt: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ParserSkipCatalogRecord {
|
|
10
|
+
skipKey: string;
|
|
11
|
+
adapter: string;
|
|
12
|
+
reasonCode: string;
|
|
13
|
+
extension: string;
|
|
14
|
+
samplePaths: string[];
|
|
15
|
+
sampleCount: number;
|
|
16
|
+
totalCount: number;
|
|
17
|
+
lastMessage: string | null;
|
|
18
|
+
firstSeenAt: string;
|
|
19
|
+
lastSeenAt: string;
|
|
20
|
+
lastRunAt: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 复杂文档 skip 聚合目录。
|
|
24
|
+
* 只保存聚合信息,不为每个复杂文档重复生成重失败记录。
|
|
25
|
+
*/
|
|
26
|
+
export declare class ParserSkipRepository {
|
|
27
|
+
private readonly dbPath;
|
|
28
|
+
private activeDb;
|
|
29
|
+
private selectStatement;
|
|
30
|
+
private upsertStatement;
|
|
31
|
+
constructor(dbPath: string);
|
|
32
|
+
beginSession(): void;
|
|
33
|
+
endSession(): void;
|
|
34
|
+
private withDatabase;
|
|
35
|
+
record(input: ParserSkipRecordInput): ParserSkipCatalogRecord;
|
|
36
|
+
listRecent(limit?: number): ParserSkipCatalogRecord[];
|
|
37
|
+
summarize(): {
|
|
38
|
+
totalKinds: number;
|
|
39
|
+
totalSkipped: number;
|
|
40
|
+
byReason: Array<{
|
|
41
|
+
adapter: string;
|
|
42
|
+
reasonCode: string;
|
|
43
|
+
extension: string;
|
|
44
|
+
totalCount: number;
|
|
45
|
+
lastSeenAt: string;
|
|
46
|
+
}>;
|
|
47
|
+
};
|
|
48
|
+
}
|