@cc-monitoring/proxy-core 0.3.1 → 0.4.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/dist/cli/__tests__/commands.test.js +20 -1
- package/dist/cli/commands/exec.js +31 -42
- package/dist/cli/commands/repair.d.ts +1 -0
- package/dist/cli/commands/repair.js +15 -0
- package/dist/cli/index.js +30 -0
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.B9A39uFv.js → app.g7N9jkzn.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.IHxQqfJH.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DdhC696L.js → VPLocalSearchBox.BHwI475_.js} +1 -1
- package/dist/docs/assets/chunks/{theme.CfB2tOFi.js → theme.FhAJSNDh.js} +2 -2
- package/dist/docs/assets/{proxy-cli_data-hooks.md.w9Oe1OD3.js → proxy-cli_data-hooks.md.Bz8CVbxO.js} +1 -1
- package/dist/docs/assets/{proxy-core_ui-routes.md.Dyqkeoiv.js → proxy-core_ui-routes.md.B21t1p7R.js} +1 -1
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/index.html +3 -3
- package/dist/docs/overview.html +3 -3
- package/dist/docs/packages-utils.html +3 -3
- package/dist/docs/proxy-admin/env-and-build.html +3 -3
- package/dist/docs/proxy-admin/index.html +3 -3
- package/dist/docs/proxy-admin/layout-and-menu.html +3 -3
- package/dist/docs/proxy-admin/pages.html +3 -3
- package/dist/docs/proxy-admin/routing-and-auth.html +3 -3
- package/dist/docs/proxy-admin/services-and-mock.html +3 -3
- package/dist/docs/proxy-cli/api-layer.html +3 -3
- package/dist/docs/proxy-cli/app-shell.html +3 -3
- package/dist/docs/proxy-cli/components-common.html +3 -3
- package/dist/docs/proxy-cli/components-config.html +3 -3
- package/dist/docs/proxy-cli/components-requests.html +3 -3
- package/dist/docs/proxy-cli/components-stats.html +3 -3
- package/dist/docs/proxy-cli/components-status.html +3 -3
- package/dist/docs/proxy-cli/data-hooks.html +5 -5
- package/dist/docs/proxy-cli/index.html +3 -3
- package/dist/docs/proxy-cli/utils-and-i18n.html +3 -3
- package/dist/docs/proxy-core/chat-api.html +3 -3
- package/dist/docs/proxy-core/cli.html +3 -3
- package/dist/docs/proxy-core/config.html +3 -3
- package/dist/docs/proxy-core/data-layer.html +3 -3
- package/dist/docs/proxy-core/entry.html +3 -3
- package/dist/docs/proxy-core/index.html +3 -3
- package/dist/docs/proxy-core/pm2.html +3 -3
- package/dist/docs/proxy-core/providers.html +3 -3
- package/dist/docs/proxy-core/proxy.html +3 -3
- package/dist/docs/proxy-core/stats.html +3 -3
- package/dist/docs/proxy-core/tool.html +3 -3
- package/dist/docs/proxy-core/ui-routes.html +5 -5
- package/dist/docs/proxy-core/utilities.html +3 -3
- package/dist/docs/quickstart.html +3 -3
- package/dist/docs/request-flow.html +3 -3
- package/dist/logger/index.d.ts +0 -3
- package/dist/logger/index.js +0 -1
- package/dist/mcp-server/tools.js +8 -9
- package/dist/server/__tests__/data-push.test.js +44 -0
- package/dist/server/__tests__/providers-route.test.js +1 -0
- package/dist/server/__tests__/proxy.test.js +281 -2
- package/dist/server/__tests__/server.test.js +15 -10
- package/dist/server/__tests__/ui-route.test.js +43 -0
- package/dist/server/auth.d.ts +0 -1
- package/dist/server/auth.js +1 -1
- package/dist/server/chat-route.js +48 -162
- package/dist/server/data-push.d.ts +2 -1
- package/dist/server/data-push.js +22 -7
- package/dist/server/index.js +4 -3
- package/dist/server/proxy.js +193 -229
- package/dist/server/ui-route.js +84 -60
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry.d.ts +0 -4
- package/dist/tools/registry.js +0 -8
- package/dist/types/config.d.ts +0 -13
- package/dist/types/pm2.d.ts +1 -2
- package/dist/ui/assets/{1c-DAu68mP4.js → 1c-CaPSZBmB.js} +1 -1
- package/dist/ui/assets/{abnf-Cu8RHCHK.js → abnf-DBDOsmne.js} +1 -1
- package/dist/ui/assets/{abnfDiagram-VRR7QNED-BUBToPXF.js → abnfDiagram-VRR7QNED-D8zK__Mj.js} +1 -1
- package/dist/ui/assets/{accesslog-BG-34XOy.js → accesslog-BOLs2Kig.js} +1 -1
- package/dist/ui/assets/{actionscript-iw0HHMGM.js → actionscript-BZYKhS1B.js} +1 -1
- package/dist/ui/assets/{ada-qRqj6VGQ.js → ada-DyacnMpg.js} +1 -1
- package/dist/ui/assets/{angelscript-BeaXyx_P.js → angelscript-CAN6j0H3.js} +1 -1
- package/dist/ui/assets/{apache-CU8d-z9X.js → apache-BE4vouiQ.js} +1 -1
- package/dist/ui/assets/{applescript-d1Wxkqz1.js → applescript-CS88I1yz.js} +1 -1
- package/dist/ui/assets/{arc-BMsPIm3j.js → arc-CTMmdrSV.js} +1 -1
- package/dist/ui/assets/{arcade-CtbgrWTM.js → arcade-B0f0f5SD.js} +1 -1
- package/dist/ui/assets/{architectureDiagram-ZJ3FMSHR-CVjC5TrS.js → architectureDiagram-ZJ3FMSHR-Dtvpnopp.js} +1 -1
- package/dist/ui/assets/{arduino-Bc9L39Hr.js → arduino-Bhm-OSb2.js} +1 -1
- package/dist/ui/assets/{armasm-DuWmpjWR.js → armasm-CEy-mDHc.js} +1 -1
- package/dist/ui/assets/{asciidoc-CDIhFTnx.js → asciidoc-CrZqQBTj.js} +1 -1
- package/dist/ui/assets/{aspectj-SYj-57Es.js → aspectj-B4IlFyyJ.js} +1 -1
- package/dist/ui/assets/{autohotkey-hBi5dq37.js → autohotkey-Cihy-FjA.js} +1 -1
- package/dist/ui/assets/{autoit-BSawXzhg.js → autoit-Dis_JVJq.js} +1 -1
- package/dist/ui/assets/{avrasm-CwYom8Np.js → avrasm-CVhMycHj.js} +1 -1
- package/dist/ui/assets/{awk-BvBRfGo2.js → awk-BCViwLf5.js} +1 -1
- package/dist/ui/assets/{axapta-CqUavA8k.js → axapta-pWB4JVB_.js} +1 -1
- package/dist/ui/assets/{bash-BS_ZnmEu.js → bash-B6Giryub.js} +1 -1
- package/dist/ui/assets/{basic-xbP4IXrN.js → basic-DcrjcHB0.js} +1 -1
- package/dist/ui/assets/{blockDiagram-677ZJIJ3-CmpI3f5p.js → blockDiagram-677ZJIJ3-DfhtgI1r.js} +1 -1
- package/dist/ui/assets/{bnf-BECwu6uW.js → bnf-cpKU0967.js} +1 -1
- package/dist/ui/assets/{brainfuck-QQgu4j4N.js → brainfuck-CFFdk4cM.js} +1 -1
- package/dist/ui/assets/{coq-IDMIFfem.js → c-CW6KPMeI.js} +1 -1
- package/dist/ui/assets/{c-like-DYrFOtXy.js → c-like-CWn59vrg.js} +1 -1
- package/dist/ui/assets/{c4Diagram-LMCZKHZV-B6Hgngz9.js → c4Diagram-LMCZKHZV-D1Oh6k37.js} +1 -1
- package/dist/ui/assets/{cal-CNMrJ6v5.js → cal-8i26_L39.js} +1 -1
- package/dist/ui/assets/{capnproto-DYCKl6oY.js → capnproto-CviwnFBf.js} +1 -1
- package/dist/ui/assets/{ceylon-mb8tRPl0.js → ceylon-CQyc4rWs.js} +1 -1
- package/dist/ui/assets/channel-Da2MvpNG.js +1 -0
- package/dist/ui/assets/{chunk-2Q5K7J3B-LxvQ-G67.js → chunk-2Q5K7J3B-oswPBwIn.js} +1 -1
- package/dist/ui/assets/{chunk-32BRIVSS-DxzKK6Aw.js → chunk-32BRIVSS-B5pU_9b9.js} +1 -1
- package/dist/ui/assets/{chunk-5VM5RSS4-CZEoYJ2W.js → chunk-5VM5RSS4-gvtfMc4w.js} +1 -1
- package/dist/ui/assets/{chunk-EX3LRPZG-DS2PytrN.js → chunk-EX3LRPZG-BkBaDMy4.js} +1 -1
- package/dist/ui/assets/{chunk-JWPE2WC7-UX0Sr1Ie.js → chunk-JWPE2WC7-Ch-C75ar.js} +1 -1
- package/dist/ui/assets/{chunk-MOJQB5TN-YbJgT9t4.js → chunk-MOJQB5TN-BfYhj1jN.js} +1 -1
- package/dist/ui/assets/{chunk-RYQCIY6F-DS2VH_U9.js → chunk-RYQCIY6F-D8izfruP.js} +1 -1
- package/dist/ui/assets/{chunk-V7JOEXUC-CZr0pkI1.js → chunk-V7JOEXUC-CbzHnW90.js} +1 -1
- package/dist/ui/assets/{chunk-VR4S4FIN-50opPAD3.js → chunk-VR4S4FIN-Dr4M5qZA.js} +1 -1
- package/dist/ui/assets/{chunk-XXDRQBXY-DAAX9l7U.js → chunk-XXDRQBXY-QE-R8dRe.js} +1 -1
- package/dist/ui/assets/classDiagram-OUVF2IWQ-mHUiWjcC.js +1 -0
- package/dist/ui/assets/classDiagram-v2-EOCWNBFH-mHUiWjcC.js +1 -0
- package/dist/ui/assets/{clean-C4X7dSkh.js → clean-DZeAtQ7H.js} +1 -1
- package/dist/ui/assets/{clojure-DSg9gUa7.js → clojure-U4ebZ7NQ.js} +1 -1
- package/dist/ui/assets/{clojure-repl-CagRYx7h.js → clojure-repl-B4QSIzUI.js} +1 -1
- package/dist/ui/assets/{cmake-CFdBn53c.js → cmake-UHexZySb.js} +1 -1
- package/dist/ui/assets/{coffeescript-CJZtMOPx.js → coffeescript-Dg56H9Mr.js} +1 -1
- package/dist/ui/assets/{c-BRJEPYra.js → coq-C1g3mm0X.js} +1 -1
- package/dist/ui/assets/{cos-Bx2VJuzG.js → cos-BL4DdyGh.js} +1 -1
- package/dist/ui/assets/{cose-bilkent-JH36ORCC-zWRLsZpZ.js → cose-bilkent-JH36ORCC-BHQslHP3.js} +1 -1
- package/dist/ui/assets/{cpp-CsG6DlC4.js → cpp-keZI-XAd.js} +1 -1
- package/dist/ui/assets/{crmsh-DTy9MnmJ.js → crmsh-DdXYVeeA.js} +1 -1
- package/dist/ui/assets/{crystal-BwgrLrZ1.js → crystal-C4AN0m0I.js} +1 -1
- package/dist/ui/assets/{csharp-B2VeTPAF.js → csharp-COUyKsNR.js} +1 -1
- package/dist/ui/assets/{csp-CTpydNhH.js → csp-DBc-rgSJ.js} +1 -1
- package/dist/ui/assets/{css-B0mMUbpY.js → css-B8m6O_Pw.js} +1 -1
- package/dist/ui/assets/{cynefin-VYW2F7L2-BmjQEj6q.js → cynefin-VYW2F7L2-B3L-WcKn.js} +1 -1
- package/dist/ui/assets/{cynefinDiagram-TSTJHNR4-Dr0Zrke0.js → cynefinDiagram-TSTJHNR4-fzaM4qcZ.js} +1 -1
- package/dist/ui/assets/{d-DjuDZnbI.js → d-dgQN4Rko.js} +1 -1
- package/dist/ui/assets/{dagre-VKFMJZFB-xoTPT2Uu.js → dagre-VKFMJZFB-DJHj16mR.js} +1 -1
- package/dist/ui/assets/{dart-xR3GU9TJ.js → dart-D2Y7LOq-.js} +1 -1
- package/dist/ui/assets/{delphi-bJas5QnG.js → delphi-DaGcSk5A.js} +1 -1
- package/dist/ui/assets/{diagram-FQU43EPY-rL_IU7gU.js → diagram-FQU43EPY-iZEZ1f-R.js} +1 -1
- package/dist/ui/assets/{diagram-G47NLZAW-EcDiCVGj.js → diagram-G47NLZAW-rkQb3r-C.js} +1 -1
- package/dist/ui/assets/{diagram-NH7WQ7WH-CGGXOjev.js → diagram-NH7WQ7WH-B4Fy72tP.js} +1 -1
- package/dist/ui/assets/{diagram-OA4YK3LP-DnE7hDjD.js → diagram-OA4YK3LP-BndmuIBq.js} +1 -1
- package/dist/ui/assets/{diagram-WEI45ONY-CTJH5eD8.js → diagram-WEI45ONY-CwlAiqOe.js} +1 -1
- package/dist/ui/assets/{diff-doJFF3fv.js → diff-prcRV1Y3.js} +1 -1
- package/dist/ui/assets/{django-D3b-owa_.js → django-B1zIoGSx.js} +1 -1
- package/dist/ui/assets/{dns-C42KYV-Z.js → dns-ZxI_aTwc.js} +1 -1
- package/dist/ui/assets/{dockerfile-9KUINc2j.js → dockerfile-Dp_fT6E-.js} +1 -1
- package/dist/ui/assets/{dos-CxnlJ6qp.js → dos-Cuu5c8vv.js} +1 -1
- package/dist/ui/assets/{dsconfig-6CMMCwmY.js → dsconfig-DcGTOhbS.js} +1 -1
- package/dist/ui/assets/{dts-D78rdUIB.js → dts-DCF8VaRk.js} +1 -1
- package/dist/ui/assets/{dust-Dv1uTfJU.js → dust-DeCmZWMK.js} +1 -1
- package/dist/ui/assets/{ebnf-BGbG1cFK.js → ebnf-BHQQcuF_.js} +1 -1
- package/dist/ui/assets/{ebnfDiagram-CCIWWBDH-z2VgRSUV.js → ebnfDiagram-CCIWWBDH-DJ_RuhTm.js} +1 -1
- package/dist/ui/assets/{elixir-ZgAQVY1J.js → elixir-BHmweJ4d.js} +1 -1
- package/dist/ui/assets/{elm-CudiFuNu.js → elm-v76Hd2B3.js} +1 -1
- package/dist/ui/assets/{erDiagram-Q63AITRT-X1TODuRv.js → erDiagram-Q63AITRT-DVZkY5RZ.js} +1 -1
- package/dist/ui/assets/{erb-Bz_NZh6W.js → erb-xvWF5bfx.js} +1 -1
- package/dist/ui/assets/{erlang-DNuj1nb2.js → erlang-CKBMURym.js} +1 -1
- package/dist/ui/assets/{erlang-repl-SP1Gan9W.js → erlang-repl-BjcfXt3Z.js} +1 -1
- package/dist/ui/assets/{excel-0K77uECF.js → excel-Cdrtxhml.js} +1 -1
- package/dist/ui/assets/{fix-CalJq7JD.js → fix-CB-So5So.js} +1 -1
- package/dist/ui/assets/{flix-BlIs11_w.js → flix-VM9AOrq6.js} +1 -1
- package/dist/ui/assets/{flowDiagram-23GEKE2U-DA2dnmc0.js → flowDiagram-23GEKE2U-vyGW67Xm.js} +1 -1
- package/dist/ui/assets/{fortran-ZCobXY2R.js → fortran-CcwJVO8H.js} +1 -1
- package/dist/ui/assets/{fsharp-Be8rwUtc.js → fsharp-DiATpw1u.js} +1 -1
- package/dist/ui/assets/{gams-DUat8frQ.js → gams-Csg9YNPz.js} +1 -1
- package/dist/ui/assets/{ganttDiagram-NO4QXBWP-DdFwaIGZ.js → ganttDiagram-NO4QXBWP-C2TRbwLw.js} +1 -1
- package/dist/ui/assets/{gauss-BB4U88dy.js → gauss-Bc4TC8Wh.js} +1 -1
- package/dist/ui/assets/{gcode-DzeUZuZg.js → gcode-Rig_2OoA.js} +1 -1
- package/dist/ui/assets/{gherkin-B_8vW_BO.js → gherkin-ByBU06QB.js} +1 -1
- package/dist/ui/assets/{gitGraphDiagram-IHSO6WYX-B-Dn8x6I.js → gitGraphDiagram-IHSO6WYX-CEiqfFIF.js} +1 -1
- package/dist/ui/assets/{glsl-DGHGjPC1.js → glsl-C8D6y2Tn.js} +1 -1
- package/dist/ui/assets/{gml-BYEku8Yh.js → gml-PHpGPHbT.js} +1 -1
- package/dist/ui/assets/{go-D8aSgQMc.js → go-BL_o_3ez.js} +1 -1
- package/dist/ui/assets/{golo-CDjCU_jh.js → golo-CWQ6dTUz.js} +1 -1
- package/dist/ui/assets/{gradle-BeUw7tl_.js → gradle-Y_I2KN2z.js} +1 -1
- package/dist/ui/assets/{groovy-5iCQOtR3.js → groovy-JnIv8p2l.js} +1 -1
- package/dist/ui/assets/{haml-BEdL8FJi.js → haml-B8W_h6mZ.js} +1 -1
- package/dist/ui/assets/{handlebars-BuYQNzoK.js → handlebars-DVm8mJuD.js} +1 -1
- package/dist/ui/assets/{haskell-I4FCBcW0.js → haskell-DlDi2Ty7.js} +1 -1
- package/dist/ui/assets/{haxe-yigyKfFr.js → haxe-CftFNVE-.js} +1 -1
- package/dist/ui/assets/{hsp-ZUk4j7d1.js → hsp-C67xnq9C.js} +1 -1
- package/dist/ui/assets/{htmlbars-QYP3lT3u.js → htmlbars-CmJCm67U.js} +1 -1
- package/dist/ui/assets/{http-BJpD1O71.js → http-b-FPEcHP.js} +1 -1
- package/dist/ui/assets/{hy-CIJ1bP6S.js → hy-BWD3ncpN.js} +1 -1
- package/dist/ui/assets/{index-COAgrx1J.js → index-C7s1zgJb.js} +242 -242
- package/dist/ui/assets/{index-BDXWttnT.js → index-D2UBwfSG.js} +3 -3
- package/dist/ui/assets/index-DlsVXaHT.css +10 -0
- package/dist/ui/assets/{infoDiagram-FWYZ7A6U-fTg9eLNt.js → infoDiagram-FWYZ7A6U-C0Px17IN.js} +1 -1
- package/dist/ui/assets/{inform7-DAsu-lC2.js → inform7-C-OYaMO5.js} +1 -1
- package/dist/ui/assets/{ini-Bhz-zHCg.js → ini-CVyYmykw.js} +1 -1
- package/dist/ui/assets/{irpf90-BunhbwBl.js → irpf90-BcpjWXIz.js} +1 -1
- package/dist/ui/assets/{isbl-q9L6hOhP.js → isbl-ZraBBeEr.js} +1 -1
- package/dist/ui/assets/{ishikawaDiagram-FXEZZL3T-B8G0sdgd.js → ishikawaDiagram-FXEZZL3T-BjmTMgpO.js} +1 -1
- package/dist/ui/assets/{java-Iks5Pkau.js → java-D_mE2DT6.js} +1 -1
- package/dist/ui/assets/{javascript-C4vltXPw.js → javascript-akXESsox.js} +1 -1
- package/dist/ui/assets/{jboss-cli-BQBvd2X2.js → jboss-cli-CFe3gTDt.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-5HDEW3XC-Crbzgrum.js → journeyDiagram-5HDEW3XC-BpgJUvs6.js} +1 -1
- package/dist/ui/assets/{json-DXK0_jUK.js → json-sjN7AzRC.js} +1 -1
- package/dist/ui/assets/{julia-CCYoBiYK.js → julia-BJJYbUMV.js} +1 -1
- package/dist/ui/assets/{julia-repl-y8v2Oorl.js → julia-repl-BwruD8Ix.js} +1 -1
- package/dist/ui/assets/{kanban-definition-HUTT4EX6-C8sCOsBX.js → kanban-definition-HUTT4EX6-DFlE9edA.js} +1 -1
- package/dist/ui/assets/{kotlin-Bnjk7_fw.js → kotlin-CAIQsLCF.js} +1 -1
- package/dist/ui/assets/{lasso-B-al6x63.js → lasso-sU67h-5u.js} +1 -1
- package/dist/ui/assets/{latex-BUmqlb9r.js → latex-CVX-jP88.js} +1 -1
- package/dist/ui/assets/{ldif-D42RWj6Q.js → ldif-DGM9xbFZ.js} +1 -1
- package/dist/ui/assets/{leaf-CrH4BZ0m.js → leaf-AlB_zmwz.js} +1 -1
- package/dist/ui/assets/{less-upmRlQQW.js → less-CKwfEdZQ.js} +1 -1
- package/dist/ui/assets/{lisp-DHYS22SA.js → lisp-CXYLaAPw.js} +1 -1
- package/dist/ui/assets/{livecodeserver-CeQNmFP3.js → livecodeserver-C02fGGTS.js} +1 -1
- package/dist/ui/assets/{livescript-PJWpY1JI.js → livescript-CBMa8QF_.js} +1 -1
- package/dist/ui/assets/{llvm-BKtKWwCt.js → llvm-WXTIohTC.js} +1 -1
- package/dist/ui/assets/{lsl-RWRLRjk7.js → lsl-4obd2U_I.js} +1 -1
- package/dist/ui/assets/{lua-BFUDiPGm.js → lua-DTSy-TjF.js} +1 -1
- package/dist/ui/assets/{makefile-CUDyOz5D.js → makefile-Bf2UEO0i.js} +1 -1
- package/dist/ui/assets/{markdown-zZCLypc6.js → markdown-BgoGmFfJ.js} +1 -1
- package/dist/ui/assets/{mathematica-BHbxKxnq.js → mathematica-CSiA8KQh.js} +1 -1
- package/dist/ui/assets/{matlab-DlGtg--p.js → matlab-DoMvLsGB.js} +1 -1
- package/dist/ui/assets/{maxima-BBBeS3Ra.js → maxima-BFO4dfZO.js} +1 -1
- package/dist/ui/assets/{mel-nh8j7W_6.js → mel-DyBpmDxt.js} +1 -1
- package/dist/ui/assets/{mercury-DyyD-pqr.js → mercury-OL5G5uU6.js} +1 -1
- package/dist/ui/assets/{mindmap-definition-LN4V7U3C-CJlhDHqM.js → mindmap-definition-LN4V7U3C-s-nUZuCs.js} +1 -1
- package/dist/ui/assets/{mipsasm-hiEhRRiq.js → mipsasm-KQwdm39j.js} +1 -1
- package/dist/ui/assets/{mizar-BZa3iAAL.js → mizar-BqndJ30I.js} +1 -1
- package/dist/ui/assets/{mojolicious-BCIm2V_y.js → mojolicious-Bvc1uJd-.js} +1 -1
- package/dist/ui/assets/{monkey-zmK-7N8b.js → monkey-Dl_gLm7-.js} +1 -1
- package/dist/ui/assets/{moonscript-BsS_Mn3D.js → moonscript-BL6R6eAz.js} +1 -1
- package/dist/ui/assets/{n1ql-D7xVgDP0.js → n1ql-C09iOJfQ.js} +1 -1
- package/dist/ui/assets/{nginx-ct2q4dtd.js → nginx-C7W01nBr.js} +1 -1
- package/dist/ui/assets/{nim-RO0UOmW3.js → nim-Dj78szvD.js} +1 -1
- package/dist/ui/assets/{nix-BcRJxPKH.js → nix-BOtGyPmd.js} +1 -1
- package/dist/ui/assets/{node-repl-DgIefwxW.js → node-repl-19nZvZ4A.js} +1 -1
- package/dist/ui/assets/{nsis-DqHs9QhB.js → nsis-ByCl1zIm.js} +1 -1
- package/dist/ui/assets/{objectivec-BBcWqc7Y.js → objectivec-BhdaT_Jr.js} +1 -1
- package/dist/ui/assets/{ocaml-BExfw7D6.js → ocaml-D_NXvSO7.js} +1 -1
- package/dist/ui/assets/{openscad-CHPRELQb.js → openscad-DOhagvnA.js} +1 -1
- package/dist/ui/assets/{oxygene-DpS9uMJW.js → oxygene-5BnkqMRH.js} +1 -1
- package/dist/ui/assets/{parser3-CjJ_QdBp.js → parser3-jSWlxi8m.js} +1 -1
- package/dist/ui/assets/{pegDiagram-2B236MQR-GM70woGy.js → pegDiagram-2B236MQR-CideH-XT.js} +1 -1
- package/dist/ui/assets/{perl-BSNM2Kt8.js → perl-CfsqjZ4b.js} +1 -1
- package/dist/ui/assets/{pf-Z-hKf_88.js → pf-kOewxO29.js} +1 -1
- package/dist/ui/assets/{pgsql-DDgznxBg.js → pgsql-CXm2Xd-Z.js} +1 -1
- package/dist/ui/assets/{php-BzAhxF-l.js → php-CRiA_dH8.js} +1 -1
- package/dist/ui/assets/{php-template-DkgcKHRc.js → php-template-ByMrxqSd.js} +1 -1
- package/dist/ui/assets/{pieDiagram-ENE6RG2P-Bst7mPyz.js → pieDiagram-ENE6RG2P-CJkCdB38.js} +1 -1
- package/dist/ui/assets/{plaintext-BYEppD0R.js → plaintext-BJx0R6A5.js} +1 -1
- package/dist/ui/assets/{pony-BT_kQd1K.js → pony-CozCHtz4.js} +1 -1
- package/dist/ui/assets/{powershell-BfRsuSsf.js → powershell-BT7gMMgn.js} +1 -1
- package/dist/ui/assets/{processing-DpzWe5Iu.js → processing-FOIxn_W_.js} +1 -1
- package/dist/ui/assets/{profile-BCOhS5cM.js → profile-BsoUuD9w.js} +1 -1
- package/dist/ui/assets/{prolog-OxaCCaW8.js → prolog-Bd3gvQ2N.js} +1 -1
- package/dist/ui/assets/{properties-DMFlA2Ca.js → properties-BWGFdny9.js} +1 -1
- package/dist/ui/assets/{protobuf-CRDFkXvZ.js → protobuf-pQSKoOOY.js} +1 -1
- package/dist/ui/assets/{puppet-DnrVyLzx.js → puppet-DnEN_mgS.js} +1 -1
- package/dist/ui/assets/{purebasic-Dht4Hniv.js → purebasic-BqoOGoRw.js} +1 -1
- package/dist/ui/assets/{python-B0aMirWu.js → python-TeVYomkE.js} +1 -1
- package/dist/ui/assets/{python-repl-BlYDBGa7.js → python-repl-zqu5igFS.js} +1 -1
- package/dist/ui/assets/{q-DzrtW9kT.js → q-CZC9Dltd.js} +1 -1
- package/dist/ui/assets/{qml-DnfQsR3i.js → qml-ZNInP45Q.js} +1 -1
- package/dist/ui/assets/{quadrantDiagram-ABIIQ3AL-DNRYurBT.js → quadrantDiagram-ABIIQ3AL-Dd7PwxsF.js} +1 -1
- package/dist/ui/assets/{r-DGI_ZuTD.js → r-B39DAmkC.js} +1 -1
- package/dist/ui/assets/{railroadDiagram-RFXS5EU6-CmbC3Vz4.js → railroadDiagram-RFXS5EU6-DtO5PVFZ.js} +1 -1
- package/dist/ui/assets/{reasonml-3SohMgh2.js → reasonml-B-ZWFJt_.js} +1 -1
- package/dist/ui/assets/{requirementDiagram-TGXJPOKE-8CxrXHco.js → requirementDiagram-TGXJPOKE-DihF4OTj.js} +1 -1
- package/dist/ui/assets/{rib-DfRSd4Qa.js → rib-CnGG0qMF.js} +1 -1
- package/dist/ui/assets/{roboconf-CQczGdGW.js → roboconf-Ewtfps4u.js} +1 -1
- package/dist/ui/assets/{routeros-DCka-T2i.js → routeros-CPcmP1c7.js} +1 -1
- package/dist/ui/assets/{rsl-Dr8MOwMo.js → rsl-NbjWFbPH.js} +1 -1
- package/dist/ui/assets/{ruby-C2zFSkh_.js → ruby-DWDdy5yE.js} +1 -1
- package/dist/ui/assets/{ruleslanguage-C97YsgQq.js → ruleslanguage-Cv_DZe2r.js} +1 -1
- package/dist/ui/assets/{rust-H3h8kd9A.js → rust-NZnsfER5.js} +1 -1
- package/dist/ui/assets/{sankeyDiagram-HTMAVEWB-DBXLWjEq.js → sankeyDiagram-HTMAVEWB-D6i-Mzte.js} +1 -1
- package/dist/ui/assets/{sas-04z0Xu8P.js → sas-C4wv0P6G.js} +1 -1
- package/dist/ui/assets/{scala-DyB9Aoiv.js → scala-DUdTOIgx.js} +1 -1
- package/dist/ui/assets/{scheme-DBj6nxUi.js → scheme-DEdFa14t.js} +1 -1
- package/dist/ui/assets/{scilab-Btj7AD9s.js → scilab-xY51J2bR.js} +1 -1
- package/dist/ui/assets/{scss-BXZJyXt7.js → scss-BEYp1sXc.js} +1 -1
- package/dist/ui/assets/{sequenceDiagram-DBY2YBRQ-DXIkBFKC.js → sequenceDiagram-DBY2YBRQ-njQlqy_J.js} +1 -1
- package/dist/ui/assets/{shell-BsreQR1Z.js → shell-fq6bkhOw.js} +1 -1
- package/dist/ui/assets/{sizeCapture-X5ZJPWSS-ocS9jxAQ.js → sizeCapture-X5ZJPWSS-tLn70-Fb.js} +1 -1
- package/dist/ui/assets/{smali-D9wQw9zm.js → smali-CsSAuSYg.js} +1 -1
- package/dist/ui/assets/{smalltalk-Dku6G_H3.js → smalltalk-DJ7zrd87.js} +1 -1
- package/dist/ui/assets/{sml-BknyU6ya.js → sml-CnDwl0nH.js} +1 -1
- package/dist/ui/assets/{sqf-DRYMaOg8.js → sqf-Cc2SX4Zy.js} +1 -1
- package/dist/ui/assets/{sql-Cw3Ax4KA.js → sql-DUQA_V_4.js} +1 -1
- package/dist/ui/assets/{sql_more-vWdslLE0.js → sql_more-BHoH-8oO.js} +1 -1
- package/dist/ui/assets/{stan-8XH5bDS6.js → stan-D-7F5jH6.js} +1 -1
- package/dist/ui/assets/{stata-4e77wgfe.js → stata-xKD_DnDE.js} +1 -1
- package/dist/ui/assets/{stateDiagram-2N3HPSRC-RMmL9jMG.js → stateDiagram-2N3HPSRC-B4O8weor.js} +1 -1
- package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-CO881_ht.js +1 -0
- package/dist/ui/assets/{step21-ByIeDMY3.js → step21-obc_kzQY.js} +1 -1
- package/dist/ui/assets/{stylus-ZAhJyWsw.js → stylus-CkAUSRd-.js} +1 -1
- package/dist/ui/assets/{subunit-pPW2UGkj.js → subunit-BDv8PGo1.js} +1 -1
- package/dist/ui/assets/{swift-CX3BB5az.js → swift-CHsYyW-p.js} +1 -1
- package/dist/ui/assets/{swimlanes-5IMT3BWC-C2zAuJ56.js → swimlanes-5IMT3BWC-DSr9Ty4A.js} +2 -2
- package/dist/ui/assets/swimlanesDiagram-G3AALYLV-DFMCDs8b.js +8 -0
- package/dist/ui/assets/{taggerscript-BHcjbWIC.js → taggerscript-C_2JQgO9.js} +1 -1
- package/dist/ui/assets/{tap-BOl1lBlS.js → tap-Bi497Z2c.js} +1 -1
- package/dist/ui/assets/{tcl-DZjeOBDh.js → tcl-B1XMvLaD.js} +1 -1
- package/dist/ui/assets/{thrift-BxboWg4x.js → thrift-D9X0Hmmc.js} +1 -1
- package/dist/ui/assets/{timeline-definition-FHXFAJF6-BOxsxyq_.js → timeline-definition-FHXFAJF6-C4_gj50B.js} +1 -1
- package/dist/ui/assets/{tp-BNM6ql3J.js → tp-CJG4Odbx.js} +1 -1
- package/dist/ui/assets/{twig-Dj9ZiXD4.js → twig-flj72_wc.js} +1 -1
- package/dist/ui/assets/{typescript-7MEJlu_6.js → typescript-CWPwVoLd.js} +1 -1
- package/dist/ui/assets/{vala-DNqOAgHJ.js → vala-LuCNWNuU.js} +1 -1
- package/dist/ui/assets/{vbnet-T0mNKVc_.js → vbnet-CGUT6ss0.js} +1 -1
- package/dist/ui/assets/{vbscript-CeuwVMAI.js → vbscript-CNiUBJhn.js} +1 -1
- package/dist/ui/assets/{vbscript-html-BbJSt2w6.js → vbscript-html-CJGgjjbc.js} +1 -1
- package/dist/ui/assets/{vennDiagram-L72KCM5P-BX9mWeiT.js → vennDiagram-L72KCM5P-BxcAUnYo.js} +1 -1
- package/dist/ui/assets/{verilog-DYuhYfkX.js → verilog-C4f9ZBTK.js} +1 -1
- package/dist/ui/assets/{vhdl-Cf9aT-t7.js → vhdl-CyDQIZve.js} +1 -1
- package/dist/ui/assets/{vim-DciP44K1.js → vim-XAUBqa0M.js} +1 -1
- package/dist/ui/assets/{wardleyDiagram-EHGQE667-CDj2rOzu.js → wardleyDiagram-EHGQE667-DlwSH77q.js} +1 -1
- package/dist/ui/assets/{x86asm-E-AN_LXO.js → x86asm-Cp6vHuUx.js} +1 -1
- package/dist/ui/assets/{xl-CxYLJelN.js → xl-BHgDofIM.js} +1 -1
- package/dist/ui/assets/{xml-yz1SRLuU.js → xml-QloVn4s_.js} +1 -1
- package/dist/ui/assets/{xquery-BLzBF3tV.js → xquery-spJZLmyM.js} +1 -1
- package/dist/ui/assets/{xychartDiagram-FW5EYKEG-Czapk9-Z.js → xychartDiagram-FW5EYKEG-BxGVZcnb.js} +1 -1
- package/dist/ui/assets/{yaml-Cv4Y7iN_.js → yaml-CUju4iq0.js} +1 -1
- package/dist/ui/assets/{zephir-KRcdQfEX.js → zephir-ChVpmD0Y.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/dist/utils/__tests__/abort-signals.test.js +67 -0
- package/dist/utils/__tests__/db-maintenance.test.js +55 -0
- package/dist/utils/__tests__/db-migration.test.js +79 -1
- package/dist/utils/__tests__/inject-loop.test.js +1 -53
- package/dist/utils/__tests__/learn-tasks-db.test.js +82 -0
- package/dist/utils/__tests__/openai-converter.test.js +25 -0
- package/dist/utils/__tests__/pi-crawl-tools.test.js +15 -4
- package/dist/utils/__tests__/pi-dedup-reconcile.test.js +11 -9
- package/dist/utils/__tests__/pi-events.test.d.ts +1 -0
- package/dist/utils/__tests__/pi-events.test.js +172 -0
- package/dist/utils/__tests__/pi-learn-orchestrator.test.js +216 -6
- package/dist/utils/__tests__/pi-runtime-json.test.js +38 -3
- package/dist/utils/__tests__/providers-db.test.js +40 -2
- package/dist/utils/__tests__/request-writer.test.js +532 -39
- package/dist/utils/__tests__/sse-protocol.test.d.ts +1 -0
- package/dist/utils/__tests__/sse-protocol.test.js +115 -0
- package/dist/utils/__tests__/stats-aggregator.test.d.ts +1 -0
- package/dist/utils/__tests__/stats-aggregator.test.js +114 -0
- package/dist/utils/__tests__/vault.test.d.ts +1 -0
- package/dist/utils/__tests__/{knowledge-store.test.js → vault.test.js} +16 -16
- package/dist/utils/abort-signals.d.ts +13 -0
- package/dist/utils/abort-signals.js +33 -0
- package/dist/utils/db-maintenance.d.ts +8 -0
- package/dist/utils/db-maintenance.js +18 -0
- package/dist/utils/db.d.ts +2 -0
- package/dist/utils/db.js +86 -0
- package/dist/utils/esm-dirname.d.ts +0 -15
- package/dist/utils/esm-dirname.js +0 -4
- package/dist/utils/inject-loop.d.ts +0 -27
- package/dist/utils/inject-loop.js +2 -56
- package/dist/utils/learn-tasks-db.d.ts +15 -0
- package/dist/utils/learn-tasks-db.js +35 -0
- package/dist/utils/openai-converter.js +88 -78
- package/dist/utils/pi-browser-tools.d.ts +0 -2
- package/dist/utils/pi-browser-tools.js +0 -174
- package/dist/utils/pi-crawl-tools.d.ts +2 -1
- package/dist/utils/pi-crawl-tools.js +16 -11
- package/dist/utils/pi-dedup.d.ts +8 -30
- package/dist/utils/pi-dedup.js +32 -67
- package/dist/utils/pi-events.d.ts +65 -0
- package/dist/utils/pi-events.js +98 -0
- package/dist/utils/pi-learn-orchestrator.d.ts +6 -5
- package/dist/utils/pi-learn-orchestrator.js +71 -106
- package/dist/utils/pi-runtime.d.ts +5 -6
- package/dist/utils/pi-runtime.js +38 -42
- package/dist/utils/pi-sandbox-ops.d.ts +0 -36
- package/dist/utils/pi-sandbox-ops.js +5 -190
- package/dist/utils/providers-db.d.ts +3 -0
- package/dist/utils/providers-db.js +21 -7
- package/dist/utils/request-writer.d.ts +77 -26
- package/dist/utils/request-writer.js +362 -56
- package/dist/utils/sse-protocol.d.ts +34 -0
- package/dist/utils/sse-protocol.js +121 -0
- package/dist/utils/sse-stream-processor.d.ts +4 -9
- package/dist/utils/sse-stream-processor.js +13 -104
- package/dist/utils/sse-writer.d.ts +1 -1
- package/dist/utils/sse-writer.js +3 -2
- package/dist/utils/stats-aggregator.d.ts +1 -1
- package/dist/utils/stats-aggregator.js +44 -24
- package/dist/utils/tool-injector.js +7 -0
- package/dist/utils/vault.d.ts +111 -0
- package/dist/utils/vault.js +434 -0
- package/ecosystem.config.cjs +2 -1
- package/package.json +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.B6Qfxe6W.js +0 -1
- package/dist/server/middleware/__tests__/request-id.test.js +0 -28
- package/dist/server/middleware/request-id.d.ts +0 -2
- package/dist/server/middleware/request-id.js +0 -12
- package/dist/types/api.d.ts +0 -20
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.js +0 -4
- package/dist/types/log.d.ts +0 -13
- package/dist/ui/assets/channel-Bc4Td8eZ.js +0 -1
- package/dist/ui/assets/classDiagram-OUVF2IWQ-BicxhZFq.js +0 -1
- package/dist/ui/assets/classDiagram-v2-EOCWNBFH-BicxhZFq.js +0 -1
- package/dist/ui/assets/index-C0fxlU9d.css +0 -10
- package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-QvaEO5U6.js +0 -1
- package/dist/ui/assets/swimlanesDiagram-G3AALYLV-DPgCOY0D.js +0 -8
- package/dist/utils/__tests__/sse-accumulator.test.js +0 -83
- package/dist/utils/knowledge-store.d.ts +0 -51
- package/dist/utils/knowledge-store.js +0 -241
- package/dist/utils/migrate-files-to-db.d.ts +0 -1
- package/dist/utils/migrate-files-to-db.js +0 -138
- package/dist/utils/sse-accumulator.d.ts +0 -9
- package/dist/utils/sse-accumulator.js +0 -59
- /package/dist/docs/assets/{proxy-cli_data-hooks.md.w9Oe1OD3.lean.js → proxy-cli_data-hooks.md.Bz8CVbxO.lean.js} +0 -0
- /package/dist/docs/assets/{proxy-core_ui-routes.md.Dyqkeoiv.lean.js → proxy-core_ui-routes.md.B21t1p7R.lean.js} +0 -0
- /package/dist/server/{middleware/__tests__/request-id.test.d.ts → __tests__/data-push.test.d.ts} +0 -0
- /package/dist/{types/api.js → utils/__tests__/abort-signals.test.d.ts} +0 -0
- /package/dist/{types/log.js → utils/__tests__/db-maintenance.test.d.ts} +0 -0
- /package/dist/utils/__tests__/{knowledge-store.test.d.ts → learn-tasks-db.test.d.ts} +0 -0
- /package/dist/utils/__tests__/{sse-accumulator.test.d.ts → openai-converter.test.d.ts} +0 -0
package/dist/utils/pi-dedup.d.ts
CHANGED
|
@@ -1,33 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
slug: string;
|
|
3
|
-
title: string;
|
|
4
|
-
summary: string;
|
|
5
|
-
tags: string[];
|
|
6
|
-
}
|
|
7
|
-
export declare function normalizeText(s: string): string;
|
|
1
|
+
import { type TopicSummary, type TopicIndex, type OutlineItem, type ChunkRef } from './vault.js';
|
|
8
2
|
export declare function findCandidates(cand: {
|
|
9
3
|
title: string;
|
|
10
4
|
tags: string[];
|
|
11
5
|
}, topics: TopicSummary[]): TopicSummary[];
|
|
12
|
-
|
|
13
|
-
id: string;
|
|
14
|
-
title: string;
|
|
15
|
-
oneLine: string;
|
|
16
|
-
}
|
|
17
|
-
export interface ChunkRefLike {
|
|
18
|
-
id: string;
|
|
19
|
-
title: string;
|
|
20
|
-
summary: string;
|
|
21
|
-
tags: string[];
|
|
22
|
-
}
|
|
23
|
-
export interface TopicIndexLike {
|
|
24
|
-
slug: string;
|
|
25
|
-
title: string;
|
|
26
|
-
summary: string;
|
|
27
|
-
tags: string[];
|
|
28
|
-
chunks: ChunkRefLike[];
|
|
29
|
-
}
|
|
30
|
-
export interface ReconcileResult {
|
|
6
|
+
interface ReconcileResult {
|
|
31
7
|
match: boolean;
|
|
32
8
|
targetSlug?: string;
|
|
33
9
|
confidence?: number;
|
|
@@ -35,9 +11,8 @@ export interface ReconcileResult {
|
|
|
35
11
|
mergedSummary?: string;
|
|
36
12
|
itemsToAdd?: OutlineItem[];
|
|
37
13
|
}
|
|
38
|
-
export declare const LLM_FULL_SCAN_MAX = 20;
|
|
39
14
|
export declare function readAllTopics(docsDir: string): Promise<TopicSummary[]>;
|
|
40
|
-
export declare function readTopicDetail(docsDir: string, slug: string): Promise<
|
|
15
|
+
export declare function readTopicDetail(docsDir: string, slug: string): Promise<TopicIndex | null>;
|
|
41
16
|
export declare function reconcileTopics(opts: {
|
|
42
17
|
port: number;
|
|
43
18
|
docsDir: string;
|
|
@@ -48,15 +23,18 @@ export declare function reconcileTopics(opts: {
|
|
|
48
23
|
items?: OutlineItem[];
|
|
49
24
|
};
|
|
50
25
|
targets?: Array<TopicSummary & {
|
|
51
|
-
chunks?:
|
|
26
|
+
chunks?: ChunkRef[];
|
|
52
27
|
}>;
|
|
53
28
|
wantItems: boolean;
|
|
29
|
+
signal: AbortSignal;
|
|
54
30
|
}): Promise<ReconcileResult>;
|
|
55
31
|
export declare function mergeTopics(docsDir: string, srcSlug: string, dstSlug: string): number;
|
|
56
|
-
export declare function readSidecarDetail(docsDir: string, slug: string): Promise<
|
|
32
|
+
export declare function readSidecarDetail(docsDir: string, slug: string): Promise<TopicIndex | null>;
|
|
57
33
|
export declare function mintSlug(opts: {
|
|
58
34
|
port: number;
|
|
59
35
|
title: string;
|
|
60
36
|
existing: string[];
|
|
37
|
+
signal: AbortSignal;
|
|
61
38
|
}): Promise<string>;
|
|
62
39
|
export declare function assertNoOldDirs(docsDir: string): void;
|
|
40
|
+
export {};
|
package/dist/utils/pi-dedup.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
// learn 主题去重:纯字符串确定性预筛(不调 LLM
|
|
2
|
-
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import path from 'path';
|
|
1
|
+
// learn 主题去重:纯字符串确定性预筛(不调 LLM)+ LLM 兜底裁定 + 物理迁移。
|
|
2
|
+
// 文件读写、路径、类型统一经 vault(接收 docsDir,按需 createVault,刻意不导入单例)。
|
|
5
3
|
import { runJsonPrompt } from './pi-runtime.js';
|
|
6
4
|
import { slugFromLabel } from './web-crawler.js';
|
|
7
|
-
|
|
8
|
-
const SLUG_RE = /^[a-z0-9][a-z0-9-]*$/;
|
|
5
|
+
import { createVault, isValidSlug } from './vault.js';
|
|
9
6
|
// 归一化:小写;非字母数字字符(含 -、_、! 等标点)统一替换为空格;trim 并压缩连续空白
|
|
10
7
|
// 标点替换为空格而非删除,使 state-management 与 State Management 归一后一致
|
|
11
|
-
|
|
8
|
+
function normalizeText(s) {
|
|
12
9
|
return s.toLowerCase().replace(/[^\p{L}\p{N}]+/gu, ' ').trim();
|
|
13
10
|
}
|
|
14
11
|
// 命中信号强度:归一 title 相等(0) > 任一归一 tag 相等(1) > title 互为子串(2)
|
|
@@ -39,33 +36,20 @@ export function findCandidates(cand, topics) {
|
|
|
39
36
|
return [...hits.values()].sort((a, b) => a.rank - b.rank).map(h => h.topic);
|
|
40
37
|
}
|
|
41
38
|
// 预筛无命中时允许全量送 LLM 的目标上限;超过则安全放弃
|
|
42
|
-
|
|
39
|
+
const LLM_FULL_SCAN_MAX = 20;
|
|
43
40
|
// 读全部 topic 摘要;index.json 缺失/损坏等任何异常一律返回 []
|
|
44
41
|
export async function readAllTopics(docsDir) {
|
|
45
|
-
|
|
46
|
-
const raw = await readFile(path.join(docsDir, 'index.json'), 'utf8');
|
|
47
|
-
const data = JSON.parse(raw);
|
|
48
|
-
return Array.isArray(data.topics) ? data.topics : [];
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
return [];
|
|
52
|
-
}
|
|
42
|
+
return createVault(docsDir).listTopics();
|
|
53
43
|
}
|
|
54
44
|
// 读单个 topic 详情;缺失/异常返回 null
|
|
55
45
|
export async function readTopicDetail(docsDir, slug) {
|
|
56
|
-
|
|
57
|
-
const raw = await readFile(path.join(docsDir, slug, 'index.json'), 'utf8');
|
|
58
|
-
return JSON.parse(raw);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
46
|
+
return createVault(docsDir).readTopicIndex(slug);
|
|
63
47
|
}
|
|
64
48
|
// LLM 兜底:在确定性预筛无法排除重复时,请模型裁定候选是否应并入某已有 topic。
|
|
65
49
|
// 任何失败(IO、坏 JSON、超限)均安全降级为 { match: false }
|
|
66
50
|
export async function reconcileTopics(opts) {
|
|
67
|
-
const
|
|
68
|
-
|
|
51
|
+
const vault = createVault(opts.docsDir);
|
|
52
|
+
const targets = opts.targets ?? (await vault.listTopics()).filter(t => t.slug !== opts.candidate.slug);
|
|
69
53
|
// 先走确定性预筛;无命中且目标数在上限内才全量送 LLM,超限直接放弃
|
|
70
54
|
const hits = findCandidates({ title: opts.candidate.title, tags: opts.candidate.tags }, targets);
|
|
71
55
|
let chosen;
|
|
@@ -93,7 +77,7 @@ export async function reconcileTopics(opts) {
|
|
|
93
77
|
].join('\n');
|
|
94
78
|
const prompt = `新主题:\n${JSON.stringify(opts.candidate)}\n\n候选已有主题:\n${JSON.stringify(chosen)}`;
|
|
95
79
|
try {
|
|
96
|
-
const result = await runJsonPrompt({ port: opts.port, instructions, prompt });
|
|
80
|
+
const result = await runJsonPrompt({ port: opts.port, instructions, prompt, signal: opts.signal });
|
|
97
81
|
// 正载荷必须完整,且 targetSlug 必须在实际提供的 chosen 之中,否则安全降级
|
|
98
82
|
// (同时挡住候选自身 slug 回显、../ 路径穿越及任何未提供的目标)
|
|
99
83
|
const chosenSlugs = chosen.map(t => t.slug);
|
|
@@ -115,15 +99,6 @@ export async function reconcileTopics(opts) {
|
|
|
115
99
|
function pad3(n) {
|
|
116
100
|
return String(n).padStart(3, '0');
|
|
117
101
|
}
|
|
118
|
-
// 列出 dir 下的 .md 文件名(排序);目录缺失视为空
|
|
119
|
-
function listMd(dir) {
|
|
120
|
-
try {
|
|
121
|
-
return fs.readdirSync(dir).filter(f => f.endsWith('.md')).sort();
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
124
|
-
return [];
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
102
|
// 将 src 主题物理并入 dst:sources 续号拷贝、chunks 按 dst 现有数偏移重编号,
|
|
128
103
|
// 同步更新 dst index 与根 index,最后删除整个 src 目录。返回迁移后 dst 的 chunk 总数。
|
|
129
104
|
// srcSlug 可能是 x.old 旁挂目录(含点,路径直接拼接)。
|
|
@@ -131,57 +106,49 @@ export function mergeTopics(docsDir, srcSlug, dstSlug) {
|
|
|
131
106
|
// 防护自合并:LLM 可能回显候选自身 slug;自合并会重复 refs、移除自身根注册并删目录(数据丢失)
|
|
132
107
|
if (srcSlug === dstSlug)
|
|
133
108
|
throw new Error('mergeTopics: src 与 dst 相同');
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
const srcIndex = JSON.parse(fs.readFileSync(path.join(srcDir, 'index.json'), 'utf8'));
|
|
109
|
+
const vault = createVault(docsDir);
|
|
110
|
+
// dst index 必须存在,缺失直接抛错;src index 同样读取(entry 直接拼,支持 x.old)
|
|
111
|
+
const dstIndex = vault.readEntryIndexSync(dstSlug);
|
|
112
|
+
const srcIndex = vault.readEntryIndexSync(srcSlug);
|
|
139
113
|
// sources:按 dst 现有数量续号,逐个读→写 dst→删 src 原件(copy→unlink,避免跨设备 rename 失败)
|
|
140
|
-
const srcSources =
|
|
141
|
-
const s0 =
|
|
142
|
-
|
|
114
|
+
const srcSources = vault.listEntryMd(srcSlug, 'sources');
|
|
115
|
+
const s0 = vault.listEntryMd(dstSlug, 'sources').length;
|
|
116
|
+
vault.mkdirEntrySubdir(dstSlug, 'sources');
|
|
143
117
|
srcSources.forEach((file, i) => {
|
|
144
|
-
const body =
|
|
145
|
-
|
|
146
|
-
|
|
118
|
+
const body = vault.readEntryFile(srcSlug, 'sources', file);
|
|
119
|
+
vault.writeEntryFile(dstSlug, 'sources', `source-${pad3(s0 + i + 1)}.md`, body);
|
|
120
|
+
vault.unlinkEntryFile(srcSlug, 'sources', file);
|
|
147
121
|
});
|
|
148
122
|
// chunks:src refs 按 id 排序,按 dst 现有 chunk 数偏移重编号;正文逐字拷贝不改
|
|
149
123
|
const srcRefs = [...srcIndex.chunks].sort((a, b) => a.id.localeCompare(b.id));
|
|
150
124
|
const k = dstIndex.chunks.length;
|
|
151
|
-
|
|
125
|
+
vault.mkdirEntrySubdir(dstSlug, 'chunks');
|
|
152
126
|
srcRefs.forEach((ref, i) => {
|
|
153
127
|
const newId = `chunk-${pad3(k + i + 1)}`;
|
|
154
|
-
const body =
|
|
155
|
-
|
|
156
|
-
|
|
128
|
+
const body = vault.readEntryFile(srcSlug, 'chunks', `${ref.id}.md`);
|
|
129
|
+
vault.writeEntryFile(dstSlug, 'chunks', `${newId}.md`, body);
|
|
130
|
+
vault.unlinkEntryFile(srcSlug, 'chunks', `${ref.id}.md`);
|
|
157
131
|
dstIndex.chunks.push({ ...ref, id: newId });
|
|
158
132
|
});
|
|
159
133
|
// 根 index:移除 slug===srcSlug 的条目(srcSlug 为 x.old 时不命中即 no-op)
|
|
160
134
|
try {
|
|
161
|
-
const
|
|
162
|
-
const root = JSON.parse(fs.readFileSync(rootPath, 'utf8'));
|
|
135
|
+
const root = vault.readRootIndexSync();
|
|
163
136
|
if (Array.isArray(root.topics)) {
|
|
164
137
|
root.topics = root.topics.filter(t => t.slug !== srcSlug);
|
|
165
|
-
|
|
138
|
+
vault.writeRootIndexSync(root);
|
|
166
139
|
}
|
|
167
140
|
}
|
|
168
141
|
catch {
|
|
169
142
|
// 根 index 缺失/损坏:无条目可移除,跳过
|
|
170
143
|
}
|
|
171
144
|
// 删除整个 src 目录,写回 dst index
|
|
172
|
-
|
|
173
|
-
|
|
145
|
+
vault.removeEntry(srcSlug);
|
|
146
|
+
vault.writeEntryIndexSync(dstSlug, dstIndex);
|
|
174
147
|
return dstIndex.chunks.length;
|
|
175
148
|
}
|
|
176
149
|
// 读旁挂目录 <slug>.old 的 index.json;缺失/坏 → null
|
|
177
150
|
export async function readSidecarDetail(docsDir, slug) {
|
|
178
|
-
|
|
179
|
-
const raw = await readFile(path.join(docsDir, `${slug}.old`, 'index.json'), 'utf8');
|
|
180
|
-
return JSON.parse(raw);
|
|
181
|
-
}
|
|
182
|
-
catch {
|
|
183
|
-
return null;
|
|
184
|
-
}
|
|
151
|
+
return createVault(docsDir).readSidecarIndex(slug);
|
|
185
152
|
}
|
|
186
153
|
// 据 title 让 LLM 铸一个小写连字符 slug。失败/非法/已占 → 降级 slugFromLabel(title),
|
|
187
154
|
// 仍被占则追加 -2/-3…。返回保证合法且不落在 existing 内的 slug(除非编号也耗尽,实践不会)。
|
|
@@ -191,8 +158,9 @@ export async function mintSlug(opts) {
|
|
|
191
158
|
port: opts.port,
|
|
192
159
|
instructions: 'Return ONLY JSON {"slug":"<lowercase-hyphen-slug>"} derived faithfully from the title.',
|
|
193
160
|
prompt: `Title: ${opts.title}`,
|
|
161
|
+
signal: opts.signal,
|
|
194
162
|
});
|
|
195
|
-
if (typeof result.slug === 'string' &&
|
|
163
|
+
if (typeof result.slug === 'string' && isValidSlug(result.slug) && !opts.existing.includes(result.slug)) {
|
|
196
164
|
return result.slug;
|
|
197
165
|
}
|
|
198
166
|
}
|
|
@@ -211,8 +179,5 @@ export async function mintSlug(opts) {
|
|
|
211
179
|
// 阻断:docsDir 下存在任何 .old 旁挂目录时抛错,要求人工先处理。
|
|
212
180
|
// docsDir 本身缺失时直接让 readdirSync 抛错(调用方本就应在已初始化的库上学习)。
|
|
213
181
|
export function assertNoOldDirs(docsDir) {
|
|
214
|
-
|
|
215
|
-
if (oldDir) {
|
|
216
|
-
throw new Error(`检测到未清理的旁挂目录 ${oldDir},请手工处理后再学习`);
|
|
217
|
-
}
|
|
182
|
+
createVault(docsDir).assertNoOldSidecars();
|
|
218
183
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** 会话领域事件:与 SSE data 帧 payload 同形(type 字符串固定) */
|
|
2
|
+
export type PiSessionEvent = {
|
|
3
|
+
type: 'round_start';
|
|
4
|
+
roundIndex: number;
|
|
5
|
+
} | {
|
|
6
|
+
type: 'round_end';
|
|
7
|
+
roundIndex: number;
|
|
8
|
+
} | {
|
|
9
|
+
type: 'text_delta';
|
|
10
|
+
content: string;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'thinking_delta';
|
|
13
|
+
content: string;
|
|
14
|
+
} | {
|
|
15
|
+
type: 'tool_start';
|
|
16
|
+
toolCallId: string;
|
|
17
|
+
toolName: string;
|
|
18
|
+
args: unknown;
|
|
19
|
+
} | {
|
|
20
|
+
type: 'tool_end';
|
|
21
|
+
toolCallId: string;
|
|
22
|
+
toolName: string;
|
|
23
|
+
isError: boolean;
|
|
24
|
+
durationMs: number;
|
|
25
|
+
result: string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* 是否 assistant 消息边界(message_start / message_end 分支内调用)。
|
|
29
|
+
* message_start 对 user / assistant / toolResult 三种消息都会触发,
|
|
30
|
+
* 只有 assistant 对应一次 LLM 回复轮次。
|
|
31
|
+
*/
|
|
32
|
+
export declare function isAssistantMessage(ev: any): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* 从 message_update 事件解包 assistant 流 delta:
|
|
35
|
+
* ae.type 为 text_delta / thinking_delta 且 delta 为 string 时返回,否则 null。
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractAssistantDelta(ev: any): {
|
|
38
|
+
kind: 'text' | 'thinking';
|
|
39
|
+
delta: string;
|
|
40
|
+
} | null;
|
|
41
|
+
/**
|
|
42
|
+
* 提取工具结果文本:result.content 为数组时,各项 type === 'text' 取 text
|
|
43
|
+
* (非 text 项以空串占位),以 '\n' 拼接;否则 ''。
|
|
44
|
+
*/
|
|
45
|
+
export declare function extractToolResultText(result: any): string;
|
|
46
|
+
export interface PiEventWriter {
|
|
47
|
+
/** 喂入一条 pi SDK 原始事件;映射/回调异常不外泄 */
|
|
48
|
+
write(rawEvent: unknown): void;
|
|
49
|
+
}
|
|
50
|
+
export interface PiEventEmitterOptions {
|
|
51
|
+
/** 初始轮次计数(复用 session 时传入上次累计值),默认 0 */
|
|
52
|
+
initialIndex?: number;
|
|
53
|
+
/** 计数递增时回调,供调用方持久化到 session */
|
|
54
|
+
onIndexChange?: (roundIndex: number) => void;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 有状态映射器:内部维护 1-based 轮次计数(assistant message_start 先自增再发
|
|
58
|
+
* round_start,message_end 带当前值),把原始事件映射为 PiSessionEvent 交给 emit。
|
|
59
|
+
* agent_end 等终态事件不在这里处理(由调用方自行监听)。
|
|
60
|
+
*
|
|
61
|
+
* 跨连接复用语义:同一 pi session 可能被多个 SSE 连接先后复用(多次追问),
|
|
62
|
+
* 调用方应通过 initialIndex 传入上次累计的轮次、并在 onIndexChange 中持久化新值,
|
|
63
|
+
* 否则每个连接的 roundIndex 都会从 1 重来,导致前端按 roundIndex 去重时串轮。
|
|
64
|
+
*/
|
|
65
|
+
export declare function createPiEventEmitter(emit: (ev: PiSessionEvent) => void, options?: PiEventEmitterOptions): PiEventWriter;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// pi-events: pi SDK 原始事件 → 会话领域事件的映射原语。
|
|
2
|
+
// learn orchestrator / chat SSE / runJsonPrompt 三处订阅共用同一套映射规则。
|
|
3
|
+
//
|
|
4
|
+
// "轮次" = 一次 assistant 交互(assistant message_start → message_end),
|
|
5
|
+
// 轮次索引 1-based。
|
|
6
|
+
/**
|
|
7
|
+
* 是否 assistant 消息边界(message_start / message_end 分支内调用)。
|
|
8
|
+
* message_start 对 user / assistant / toolResult 三种消息都会触发,
|
|
9
|
+
* 只有 assistant 对应一次 LLM 回复轮次。
|
|
10
|
+
*/
|
|
11
|
+
export function isAssistantMessage(ev) {
|
|
12
|
+
return ev?.message?.role === 'assistant';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 从 message_update 事件解包 assistant 流 delta:
|
|
16
|
+
* ae.type 为 text_delta / thinking_delta 且 delta 为 string 时返回,否则 null。
|
|
17
|
+
*/
|
|
18
|
+
export function extractAssistantDelta(ev) {
|
|
19
|
+
if (ev?.type !== 'message_update')
|
|
20
|
+
return null;
|
|
21
|
+
const ae = ev.assistantMessageEvent;
|
|
22
|
+
if ((ae?.type === 'text_delta' || ae?.type === 'thinking_delta') && typeof ae.delta === 'string') {
|
|
23
|
+
return { kind: ae.type === 'text_delta' ? 'text' : 'thinking', delta: ae.delta };
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 提取工具结果文本:result.content 为数组时,各项 type === 'text' 取 text
|
|
29
|
+
* (非 text 项以空串占位),以 '\n' 拼接;否则 ''。
|
|
30
|
+
*/
|
|
31
|
+
export function extractToolResultText(result) {
|
|
32
|
+
if (!Array.isArray(result?.content))
|
|
33
|
+
return '';
|
|
34
|
+
return result.content
|
|
35
|
+
.map((c) => (c?.type === 'text' ? c.text : ''))
|
|
36
|
+
.join('\n');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 有状态映射器:内部维护 1-based 轮次计数(assistant message_start 先自增再发
|
|
40
|
+
* round_start,message_end 带当前值),把原始事件映射为 PiSessionEvent 交给 emit。
|
|
41
|
+
* agent_end 等终态事件不在这里处理(由调用方自行监听)。
|
|
42
|
+
*
|
|
43
|
+
* 跨连接复用语义:同一 pi session 可能被多个 SSE 连接先后复用(多次追问),
|
|
44
|
+
* 调用方应通过 initialIndex 传入上次累计的轮次、并在 onIndexChange 中持久化新值,
|
|
45
|
+
* 否则每个连接的 roundIndex 都会从 1 重来,导致前端按 roundIndex 去重时串轮。
|
|
46
|
+
*/
|
|
47
|
+
export function createPiEventEmitter(emit, options) {
|
|
48
|
+
let roundIndex = options?.initialIndex ?? 0;
|
|
49
|
+
return {
|
|
50
|
+
write(rawEvent) {
|
|
51
|
+
try {
|
|
52
|
+
const ev = rawEvent;
|
|
53
|
+
if (ev.type === 'message_start') {
|
|
54
|
+
if (isAssistantMessage(ev)) {
|
|
55
|
+
roundIndex += 1;
|
|
56
|
+
options?.onIndexChange?.(roundIndex);
|
|
57
|
+
emit({ type: 'round_start', roundIndex });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (ev.type === 'message_end') {
|
|
61
|
+
if (isAssistantMessage(ev)) {
|
|
62
|
+
emit({ type: 'round_end', roundIndex });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (ev.type === 'message_update') {
|
|
66
|
+
const d = extractAssistantDelta(ev);
|
|
67
|
+
if (d) {
|
|
68
|
+
emit(d.kind === 'text'
|
|
69
|
+
? { type: 'text_delta', content: d.delta }
|
|
70
|
+
: { type: 'thinking_delta', content: d.delta });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (ev.type === 'tool_execution_start') {
|
|
74
|
+
emit({
|
|
75
|
+
type: 'tool_start',
|
|
76
|
+
toolCallId: ev.toolCallId,
|
|
77
|
+
toolName: ev.toolName,
|
|
78
|
+
args: ev.args,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else if (ev.type === 'tool_execution_end') {
|
|
82
|
+
emit({
|
|
83
|
+
type: 'tool_end',
|
|
84
|
+
toolCallId: ev.toolCallId,
|
|
85
|
+
toolName: ev.toolName,
|
|
86
|
+
isError: !!ev.isError,
|
|
87
|
+
durationMs: ev.durationMs ?? 0,
|
|
88
|
+
result: extractToolResultText(ev.result),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// 其他事件(agent_end / 未知类型)忽略
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// 映射或 emit 抛错不影响 SDK 事件分发(参照 orchestrator 既有约定)
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
title: string;
|
|
4
|
-
oneLine: string;
|
|
5
|
-
}
|
|
1
|
+
import type { OutlineItem } from './vault.js';
|
|
2
|
+
export type { OutlineItem };
|
|
6
3
|
export interface LearnPipelineEvents {
|
|
7
4
|
stageStart(stage: 'outline' | 'refine' | 'tag', totalItems?: number): void;
|
|
8
5
|
stageItemStart(index: number, total: number, title: string): void;
|
|
@@ -34,8 +31,12 @@ export interface RunLearnPipelineOptions {
|
|
|
34
31
|
label?: string;
|
|
35
32
|
port: number;
|
|
36
33
|
events: LearnPipelineEvents;
|
|
34
|
+
/** 外部取消信号:客户端断开(关窗)时 abort,流水线各阶段随之中止 */
|
|
35
|
+
signal: AbortSignal;
|
|
37
36
|
/** 注入式 docsDir(测试用);默认 ~/.cc-monitoring/docs */
|
|
38
37
|
docsDir?: string;
|
|
38
|
+
/** slug 算出后、任何文件改动前同步调用(落 running 行用);抛错直接传播 */
|
|
39
|
+
onStart?: (slug: string) => void;
|
|
39
40
|
}
|
|
40
41
|
export declare function runLearnPipeline(opts: RunLearnPipelineOptions): Promise<{
|
|
41
42
|
slug: string;
|