@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.
Files changed (409) hide show
  1. package/dist/cli/__tests__/commands.test.js +20 -1
  2. package/dist/cli/commands/exec.js +31 -42
  3. package/dist/cli/commands/repair.d.ts +1 -0
  4. package/dist/cli/commands/repair.js +15 -0
  5. package/dist/cli/index.js +30 -0
  6. package/dist/docs/404.html +2 -2
  7. package/dist/docs/assets/{app.B9A39uFv.js → app.g7N9jkzn.js} +1 -1
  8. package/dist/docs/assets/chunks/@localSearchIndexroot.IHxQqfJH.js +1 -0
  9. package/dist/docs/assets/chunks/{VPLocalSearchBox.DdhC696L.js → VPLocalSearchBox.BHwI475_.js} +1 -1
  10. package/dist/docs/assets/chunks/{theme.CfB2tOFi.js → theme.FhAJSNDh.js} +2 -2
  11. package/dist/docs/assets/{proxy-cli_data-hooks.md.w9Oe1OD3.js → proxy-cli_data-hooks.md.Bz8CVbxO.js} +1 -1
  12. package/dist/docs/assets/{proxy-core_ui-routes.md.Dyqkeoiv.js → proxy-core_ui-routes.md.B21t1p7R.js} +1 -1
  13. package/dist/docs/hashmap.json +1 -1
  14. package/dist/docs/index.html +3 -3
  15. package/dist/docs/overview.html +3 -3
  16. package/dist/docs/packages-utils.html +3 -3
  17. package/dist/docs/proxy-admin/env-and-build.html +3 -3
  18. package/dist/docs/proxy-admin/index.html +3 -3
  19. package/dist/docs/proxy-admin/layout-and-menu.html +3 -3
  20. package/dist/docs/proxy-admin/pages.html +3 -3
  21. package/dist/docs/proxy-admin/routing-and-auth.html +3 -3
  22. package/dist/docs/proxy-admin/services-and-mock.html +3 -3
  23. package/dist/docs/proxy-cli/api-layer.html +3 -3
  24. package/dist/docs/proxy-cli/app-shell.html +3 -3
  25. package/dist/docs/proxy-cli/components-common.html +3 -3
  26. package/dist/docs/proxy-cli/components-config.html +3 -3
  27. package/dist/docs/proxy-cli/components-requests.html +3 -3
  28. package/dist/docs/proxy-cli/components-stats.html +3 -3
  29. package/dist/docs/proxy-cli/components-status.html +3 -3
  30. package/dist/docs/proxy-cli/data-hooks.html +5 -5
  31. package/dist/docs/proxy-cli/index.html +3 -3
  32. package/dist/docs/proxy-cli/utils-and-i18n.html +3 -3
  33. package/dist/docs/proxy-core/chat-api.html +3 -3
  34. package/dist/docs/proxy-core/cli.html +3 -3
  35. package/dist/docs/proxy-core/config.html +3 -3
  36. package/dist/docs/proxy-core/data-layer.html +3 -3
  37. package/dist/docs/proxy-core/entry.html +3 -3
  38. package/dist/docs/proxy-core/index.html +3 -3
  39. package/dist/docs/proxy-core/pm2.html +3 -3
  40. package/dist/docs/proxy-core/providers.html +3 -3
  41. package/dist/docs/proxy-core/proxy.html +3 -3
  42. package/dist/docs/proxy-core/stats.html +3 -3
  43. package/dist/docs/proxy-core/tool.html +3 -3
  44. package/dist/docs/proxy-core/ui-routes.html +5 -5
  45. package/dist/docs/proxy-core/utilities.html +3 -3
  46. package/dist/docs/quickstart.html +3 -3
  47. package/dist/docs/request-flow.html +3 -3
  48. package/dist/logger/index.d.ts +0 -3
  49. package/dist/logger/index.js +0 -1
  50. package/dist/mcp-server/tools.js +8 -9
  51. package/dist/server/__tests__/data-push.test.js +44 -0
  52. package/dist/server/__tests__/providers-route.test.js +1 -0
  53. package/dist/server/__tests__/proxy.test.js +281 -2
  54. package/dist/server/__tests__/server.test.js +15 -10
  55. package/dist/server/__tests__/ui-route.test.js +43 -0
  56. package/dist/server/auth.d.ts +0 -1
  57. package/dist/server/auth.js +1 -1
  58. package/dist/server/chat-route.js +48 -162
  59. package/dist/server/data-push.d.ts +2 -1
  60. package/dist/server/data-push.js +22 -7
  61. package/dist/server/index.js +4 -3
  62. package/dist/server/proxy.js +193 -229
  63. package/dist/server/ui-route.js +84 -60
  64. package/dist/tools/index.d.ts +1 -1
  65. package/dist/tools/index.js +1 -1
  66. package/dist/tools/registry.d.ts +0 -4
  67. package/dist/tools/registry.js +0 -8
  68. package/dist/types/config.d.ts +0 -13
  69. package/dist/types/pm2.d.ts +1 -2
  70. package/dist/ui/assets/{1c-DAu68mP4.js → 1c-CaPSZBmB.js} +1 -1
  71. package/dist/ui/assets/{abnf-Cu8RHCHK.js → abnf-DBDOsmne.js} +1 -1
  72. package/dist/ui/assets/{abnfDiagram-VRR7QNED-BUBToPXF.js → abnfDiagram-VRR7QNED-D8zK__Mj.js} +1 -1
  73. package/dist/ui/assets/{accesslog-BG-34XOy.js → accesslog-BOLs2Kig.js} +1 -1
  74. package/dist/ui/assets/{actionscript-iw0HHMGM.js → actionscript-BZYKhS1B.js} +1 -1
  75. package/dist/ui/assets/{ada-qRqj6VGQ.js → ada-DyacnMpg.js} +1 -1
  76. package/dist/ui/assets/{angelscript-BeaXyx_P.js → angelscript-CAN6j0H3.js} +1 -1
  77. package/dist/ui/assets/{apache-CU8d-z9X.js → apache-BE4vouiQ.js} +1 -1
  78. package/dist/ui/assets/{applescript-d1Wxkqz1.js → applescript-CS88I1yz.js} +1 -1
  79. package/dist/ui/assets/{arc-BMsPIm3j.js → arc-CTMmdrSV.js} +1 -1
  80. package/dist/ui/assets/{arcade-CtbgrWTM.js → arcade-B0f0f5SD.js} +1 -1
  81. package/dist/ui/assets/{architectureDiagram-ZJ3FMSHR-CVjC5TrS.js → architectureDiagram-ZJ3FMSHR-Dtvpnopp.js} +1 -1
  82. package/dist/ui/assets/{arduino-Bc9L39Hr.js → arduino-Bhm-OSb2.js} +1 -1
  83. package/dist/ui/assets/{armasm-DuWmpjWR.js → armasm-CEy-mDHc.js} +1 -1
  84. package/dist/ui/assets/{asciidoc-CDIhFTnx.js → asciidoc-CrZqQBTj.js} +1 -1
  85. package/dist/ui/assets/{aspectj-SYj-57Es.js → aspectj-B4IlFyyJ.js} +1 -1
  86. package/dist/ui/assets/{autohotkey-hBi5dq37.js → autohotkey-Cihy-FjA.js} +1 -1
  87. package/dist/ui/assets/{autoit-BSawXzhg.js → autoit-Dis_JVJq.js} +1 -1
  88. package/dist/ui/assets/{avrasm-CwYom8Np.js → avrasm-CVhMycHj.js} +1 -1
  89. package/dist/ui/assets/{awk-BvBRfGo2.js → awk-BCViwLf5.js} +1 -1
  90. package/dist/ui/assets/{axapta-CqUavA8k.js → axapta-pWB4JVB_.js} +1 -1
  91. package/dist/ui/assets/{bash-BS_ZnmEu.js → bash-B6Giryub.js} +1 -1
  92. package/dist/ui/assets/{basic-xbP4IXrN.js → basic-DcrjcHB0.js} +1 -1
  93. package/dist/ui/assets/{blockDiagram-677ZJIJ3-CmpI3f5p.js → blockDiagram-677ZJIJ3-DfhtgI1r.js} +1 -1
  94. package/dist/ui/assets/{bnf-BECwu6uW.js → bnf-cpKU0967.js} +1 -1
  95. package/dist/ui/assets/{brainfuck-QQgu4j4N.js → brainfuck-CFFdk4cM.js} +1 -1
  96. package/dist/ui/assets/{coq-IDMIFfem.js → c-CW6KPMeI.js} +1 -1
  97. package/dist/ui/assets/{c-like-DYrFOtXy.js → c-like-CWn59vrg.js} +1 -1
  98. package/dist/ui/assets/{c4Diagram-LMCZKHZV-B6Hgngz9.js → c4Diagram-LMCZKHZV-D1Oh6k37.js} +1 -1
  99. package/dist/ui/assets/{cal-CNMrJ6v5.js → cal-8i26_L39.js} +1 -1
  100. package/dist/ui/assets/{capnproto-DYCKl6oY.js → capnproto-CviwnFBf.js} +1 -1
  101. package/dist/ui/assets/{ceylon-mb8tRPl0.js → ceylon-CQyc4rWs.js} +1 -1
  102. package/dist/ui/assets/channel-Da2MvpNG.js +1 -0
  103. package/dist/ui/assets/{chunk-2Q5K7J3B-LxvQ-G67.js → chunk-2Q5K7J3B-oswPBwIn.js} +1 -1
  104. package/dist/ui/assets/{chunk-32BRIVSS-DxzKK6Aw.js → chunk-32BRIVSS-B5pU_9b9.js} +1 -1
  105. package/dist/ui/assets/{chunk-5VM5RSS4-CZEoYJ2W.js → chunk-5VM5RSS4-gvtfMc4w.js} +1 -1
  106. package/dist/ui/assets/{chunk-EX3LRPZG-DS2PytrN.js → chunk-EX3LRPZG-BkBaDMy4.js} +1 -1
  107. package/dist/ui/assets/{chunk-JWPE2WC7-UX0Sr1Ie.js → chunk-JWPE2WC7-Ch-C75ar.js} +1 -1
  108. package/dist/ui/assets/{chunk-MOJQB5TN-YbJgT9t4.js → chunk-MOJQB5TN-BfYhj1jN.js} +1 -1
  109. package/dist/ui/assets/{chunk-RYQCIY6F-DS2VH_U9.js → chunk-RYQCIY6F-D8izfruP.js} +1 -1
  110. package/dist/ui/assets/{chunk-V7JOEXUC-CZr0pkI1.js → chunk-V7JOEXUC-CbzHnW90.js} +1 -1
  111. package/dist/ui/assets/{chunk-VR4S4FIN-50opPAD3.js → chunk-VR4S4FIN-Dr4M5qZA.js} +1 -1
  112. package/dist/ui/assets/{chunk-XXDRQBXY-DAAX9l7U.js → chunk-XXDRQBXY-QE-R8dRe.js} +1 -1
  113. package/dist/ui/assets/classDiagram-OUVF2IWQ-mHUiWjcC.js +1 -0
  114. package/dist/ui/assets/classDiagram-v2-EOCWNBFH-mHUiWjcC.js +1 -0
  115. package/dist/ui/assets/{clean-C4X7dSkh.js → clean-DZeAtQ7H.js} +1 -1
  116. package/dist/ui/assets/{clojure-DSg9gUa7.js → clojure-U4ebZ7NQ.js} +1 -1
  117. package/dist/ui/assets/{clojure-repl-CagRYx7h.js → clojure-repl-B4QSIzUI.js} +1 -1
  118. package/dist/ui/assets/{cmake-CFdBn53c.js → cmake-UHexZySb.js} +1 -1
  119. package/dist/ui/assets/{coffeescript-CJZtMOPx.js → coffeescript-Dg56H9Mr.js} +1 -1
  120. package/dist/ui/assets/{c-BRJEPYra.js → coq-C1g3mm0X.js} +1 -1
  121. package/dist/ui/assets/{cos-Bx2VJuzG.js → cos-BL4DdyGh.js} +1 -1
  122. package/dist/ui/assets/{cose-bilkent-JH36ORCC-zWRLsZpZ.js → cose-bilkent-JH36ORCC-BHQslHP3.js} +1 -1
  123. package/dist/ui/assets/{cpp-CsG6DlC4.js → cpp-keZI-XAd.js} +1 -1
  124. package/dist/ui/assets/{crmsh-DTy9MnmJ.js → crmsh-DdXYVeeA.js} +1 -1
  125. package/dist/ui/assets/{crystal-BwgrLrZ1.js → crystal-C4AN0m0I.js} +1 -1
  126. package/dist/ui/assets/{csharp-B2VeTPAF.js → csharp-COUyKsNR.js} +1 -1
  127. package/dist/ui/assets/{csp-CTpydNhH.js → csp-DBc-rgSJ.js} +1 -1
  128. package/dist/ui/assets/{css-B0mMUbpY.js → css-B8m6O_Pw.js} +1 -1
  129. package/dist/ui/assets/{cynefin-VYW2F7L2-BmjQEj6q.js → cynefin-VYW2F7L2-B3L-WcKn.js} +1 -1
  130. package/dist/ui/assets/{cynefinDiagram-TSTJHNR4-Dr0Zrke0.js → cynefinDiagram-TSTJHNR4-fzaM4qcZ.js} +1 -1
  131. package/dist/ui/assets/{d-DjuDZnbI.js → d-dgQN4Rko.js} +1 -1
  132. package/dist/ui/assets/{dagre-VKFMJZFB-xoTPT2Uu.js → dagre-VKFMJZFB-DJHj16mR.js} +1 -1
  133. package/dist/ui/assets/{dart-xR3GU9TJ.js → dart-D2Y7LOq-.js} +1 -1
  134. package/dist/ui/assets/{delphi-bJas5QnG.js → delphi-DaGcSk5A.js} +1 -1
  135. package/dist/ui/assets/{diagram-FQU43EPY-rL_IU7gU.js → diagram-FQU43EPY-iZEZ1f-R.js} +1 -1
  136. package/dist/ui/assets/{diagram-G47NLZAW-EcDiCVGj.js → diagram-G47NLZAW-rkQb3r-C.js} +1 -1
  137. package/dist/ui/assets/{diagram-NH7WQ7WH-CGGXOjev.js → diagram-NH7WQ7WH-B4Fy72tP.js} +1 -1
  138. package/dist/ui/assets/{diagram-OA4YK3LP-DnE7hDjD.js → diagram-OA4YK3LP-BndmuIBq.js} +1 -1
  139. package/dist/ui/assets/{diagram-WEI45ONY-CTJH5eD8.js → diagram-WEI45ONY-CwlAiqOe.js} +1 -1
  140. package/dist/ui/assets/{diff-doJFF3fv.js → diff-prcRV1Y3.js} +1 -1
  141. package/dist/ui/assets/{django-D3b-owa_.js → django-B1zIoGSx.js} +1 -1
  142. package/dist/ui/assets/{dns-C42KYV-Z.js → dns-ZxI_aTwc.js} +1 -1
  143. package/dist/ui/assets/{dockerfile-9KUINc2j.js → dockerfile-Dp_fT6E-.js} +1 -1
  144. package/dist/ui/assets/{dos-CxnlJ6qp.js → dos-Cuu5c8vv.js} +1 -1
  145. package/dist/ui/assets/{dsconfig-6CMMCwmY.js → dsconfig-DcGTOhbS.js} +1 -1
  146. package/dist/ui/assets/{dts-D78rdUIB.js → dts-DCF8VaRk.js} +1 -1
  147. package/dist/ui/assets/{dust-Dv1uTfJU.js → dust-DeCmZWMK.js} +1 -1
  148. package/dist/ui/assets/{ebnf-BGbG1cFK.js → ebnf-BHQQcuF_.js} +1 -1
  149. package/dist/ui/assets/{ebnfDiagram-CCIWWBDH-z2VgRSUV.js → ebnfDiagram-CCIWWBDH-DJ_RuhTm.js} +1 -1
  150. package/dist/ui/assets/{elixir-ZgAQVY1J.js → elixir-BHmweJ4d.js} +1 -1
  151. package/dist/ui/assets/{elm-CudiFuNu.js → elm-v76Hd2B3.js} +1 -1
  152. package/dist/ui/assets/{erDiagram-Q63AITRT-X1TODuRv.js → erDiagram-Q63AITRT-DVZkY5RZ.js} +1 -1
  153. package/dist/ui/assets/{erb-Bz_NZh6W.js → erb-xvWF5bfx.js} +1 -1
  154. package/dist/ui/assets/{erlang-DNuj1nb2.js → erlang-CKBMURym.js} +1 -1
  155. package/dist/ui/assets/{erlang-repl-SP1Gan9W.js → erlang-repl-BjcfXt3Z.js} +1 -1
  156. package/dist/ui/assets/{excel-0K77uECF.js → excel-Cdrtxhml.js} +1 -1
  157. package/dist/ui/assets/{fix-CalJq7JD.js → fix-CB-So5So.js} +1 -1
  158. package/dist/ui/assets/{flix-BlIs11_w.js → flix-VM9AOrq6.js} +1 -1
  159. package/dist/ui/assets/{flowDiagram-23GEKE2U-DA2dnmc0.js → flowDiagram-23GEKE2U-vyGW67Xm.js} +1 -1
  160. package/dist/ui/assets/{fortran-ZCobXY2R.js → fortran-CcwJVO8H.js} +1 -1
  161. package/dist/ui/assets/{fsharp-Be8rwUtc.js → fsharp-DiATpw1u.js} +1 -1
  162. package/dist/ui/assets/{gams-DUat8frQ.js → gams-Csg9YNPz.js} +1 -1
  163. package/dist/ui/assets/{ganttDiagram-NO4QXBWP-DdFwaIGZ.js → ganttDiagram-NO4QXBWP-C2TRbwLw.js} +1 -1
  164. package/dist/ui/assets/{gauss-BB4U88dy.js → gauss-Bc4TC8Wh.js} +1 -1
  165. package/dist/ui/assets/{gcode-DzeUZuZg.js → gcode-Rig_2OoA.js} +1 -1
  166. package/dist/ui/assets/{gherkin-B_8vW_BO.js → gherkin-ByBU06QB.js} +1 -1
  167. package/dist/ui/assets/{gitGraphDiagram-IHSO6WYX-B-Dn8x6I.js → gitGraphDiagram-IHSO6WYX-CEiqfFIF.js} +1 -1
  168. package/dist/ui/assets/{glsl-DGHGjPC1.js → glsl-C8D6y2Tn.js} +1 -1
  169. package/dist/ui/assets/{gml-BYEku8Yh.js → gml-PHpGPHbT.js} +1 -1
  170. package/dist/ui/assets/{go-D8aSgQMc.js → go-BL_o_3ez.js} +1 -1
  171. package/dist/ui/assets/{golo-CDjCU_jh.js → golo-CWQ6dTUz.js} +1 -1
  172. package/dist/ui/assets/{gradle-BeUw7tl_.js → gradle-Y_I2KN2z.js} +1 -1
  173. package/dist/ui/assets/{groovy-5iCQOtR3.js → groovy-JnIv8p2l.js} +1 -1
  174. package/dist/ui/assets/{haml-BEdL8FJi.js → haml-B8W_h6mZ.js} +1 -1
  175. package/dist/ui/assets/{handlebars-BuYQNzoK.js → handlebars-DVm8mJuD.js} +1 -1
  176. package/dist/ui/assets/{haskell-I4FCBcW0.js → haskell-DlDi2Ty7.js} +1 -1
  177. package/dist/ui/assets/{haxe-yigyKfFr.js → haxe-CftFNVE-.js} +1 -1
  178. package/dist/ui/assets/{hsp-ZUk4j7d1.js → hsp-C67xnq9C.js} +1 -1
  179. package/dist/ui/assets/{htmlbars-QYP3lT3u.js → htmlbars-CmJCm67U.js} +1 -1
  180. package/dist/ui/assets/{http-BJpD1O71.js → http-b-FPEcHP.js} +1 -1
  181. package/dist/ui/assets/{hy-CIJ1bP6S.js → hy-BWD3ncpN.js} +1 -1
  182. package/dist/ui/assets/{index-COAgrx1J.js → index-C7s1zgJb.js} +242 -242
  183. package/dist/ui/assets/{index-BDXWttnT.js → index-D2UBwfSG.js} +3 -3
  184. package/dist/ui/assets/index-DlsVXaHT.css +10 -0
  185. package/dist/ui/assets/{infoDiagram-FWYZ7A6U-fTg9eLNt.js → infoDiagram-FWYZ7A6U-C0Px17IN.js} +1 -1
  186. package/dist/ui/assets/{inform7-DAsu-lC2.js → inform7-C-OYaMO5.js} +1 -1
  187. package/dist/ui/assets/{ini-Bhz-zHCg.js → ini-CVyYmykw.js} +1 -1
  188. package/dist/ui/assets/{irpf90-BunhbwBl.js → irpf90-BcpjWXIz.js} +1 -1
  189. package/dist/ui/assets/{isbl-q9L6hOhP.js → isbl-ZraBBeEr.js} +1 -1
  190. package/dist/ui/assets/{ishikawaDiagram-FXEZZL3T-B8G0sdgd.js → ishikawaDiagram-FXEZZL3T-BjmTMgpO.js} +1 -1
  191. package/dist/ui/assets/{java-Iks5Pkau.js → java-D_mE2DT6.js} +1 -1
  192. package/dist/ui/assets/{javascript-C4vltXPw.js → javascript-akXESsox.js} +1 -1
  193. package/dist/ui/assets/{jboss-cli-BQBvd2X2.js → jboss-cli-CFe3gTDt.js} +1 -1
  194. package/dist/ui/assets/{journeyDiagram-5HDEW3XC-Crbzgrum.js → journeyDiagram-5HDEW3XC-BpgJUvs6.js} +1 -1
  195. package/dist/ui/assets/{json-DXK0_jUK.js → json-sjN7AzRC.js} +1 -1
  196. package/dist/ui/assets/{julia-CCYoBiYK.js → julia-BJJYbUMV.js} +1 -1
  197. package/dist/ui/assets/{julia-repl-y8v2Oorl.js → julia-repl-BwruD8Ix.js} +1 -1
  198. package/dist/ui/assets/{kanban-definition-HUTT4EX6-C8sCOsBX.js → kanban-definition-HUTT4EX6-DFlE9edA.js} +1 -1
  199. package/dist/ui/assets/{kotlin-Bnjk7_fw.js → kotlin-CAIQsLCF.js} +1 -1
  200. package/dist/ui/assets/{lasso-B-al6x63.js → lasso-sU67h-5u.js} +1 -1
  201. package/dist/ui/assets/{latex-BUmqlb9r.js → latex-CVX-jP88.js} +1 -1
  202. package/dist/ui/assets/{ldif-D42RWj6Q.js → ldif-DGM9xbFZ.js} +1 -1
  203. package/dist/ui/assets/{leaf-CrH4BZ0m.js → leaf-AlB_zmwz.js} +1 -1
  204. package/dist/ui/assets/{less-upmRlQQW.js → less-CKwfEdZQ.js} +1 -1
  205. package/dist/ui/assets/{lisp-DHYS22SA.js → lisp-CXYLaAPw.js} +1 -1
  206. package/dist/ui/assets/{livecodeserver-CeQNmFP3.js → livecodeserver-C02fGGTS.js} +1 -1
  207. package/dist/ui/assets/{livescript-PJWpY1JI.js → livescript-CBMa8QF_.js} +1 -1
  208. package/dist/ui/assets/{llvm-BKtKWwCt.js → llvm-WXTIohTC.js} +1 -1
  209. package/dist/ui/assets/{lsl-RWRLRjk7.js → lsl-4obd2U_I.js} +1 -1
  210. package/dist/ui/assets/{lua-BFUDiPGm.js → lua-DTSy-TjF.js} +1 -1
  211. package/dist/ui/assets/{makefile-CUDyOz5D.js → makefile-Bf2UEO0i.js} +1 -1
  212. package/dist/ui/assets/{markdown-zZCLypc6.js → markdown-BgoGmFfJ.js} +1 -1
  213. package/dist/ui/assets/{mathematica-BHbxKxnq.js → mathematica-CSiA8KQh.js} +1 -1
  214. package/dist/ui/assets/{matlab-DlGtg--p.js → matlab-DoMvLsGB.js} +1 -1
  215. package/dist/ui/assets/{maxima-BBBeS3Ra.js → maxima-BFO4dfZO.js} +1 -1
  216. package/dist/ui/assets/{mel-nh8j7W_6.js → mel-DyBpmDxt.js} +1 -1
  217. package/dist/ui/assets/{mercury-DyyD-pqr.js → mercury-OL5G5uU6.js} +1 -1
  218. package/dist/ui/assets/{mindmap-definition-LN4V7U3C-CJlhDHqM.js → mindmap-definition-LN4V7U3C-s-nUZuCs.js} +1 -1
  219. package/dist/ui/assets/{mipsasm-hiEhRRiq.js → mipsasm-KQwdm39j.js} +1 -1
  220. package/dist/ui/assets/{mizar-BZa3iAAL.js → mizar-BqndJ30I.js} +1 -1
  221. package/dist/ui/assets/{mojolicious-BCIm2V_y.js → mojolicious-Bvc1uJd-.js} +1 -1
  222. package/dist/ui/assets/{monkey-zmK-7N8b.js → monkey-Dl_gLm7-.js} +1 -1
  223. package/dist/ui/assets/{moonscript-BsS_Mn3D.js → moonscript-BL6R6eAz.js} +1 -1
  224. package/dist/ui/assets/{n1ql-D7xVgDP0.js → n1ql-C09iOJfQ.js} +1 -1
  225. package/dist/ui/assets/{nginx-ct2q4dtd.js → nginx-C7W01nBr.js} +1 -1
  226. package/dist/ui/assets/{nim-RO0UOmW3.js → nim-Dj78szvD.js} +1 -1
  227. package/dist/ui/assets/{nix-BcRJxPKH.js → nix-BOtGyPmd.js} +1 -1
  228. package/dist/ui/assets/{node-repl-DgIefwxW.js → node-repl-19nZvZ4A.js} +1 -1
  229. package/dist/ui/assets/{nsis-DqHs9QhB.js → nsis-ByCl1zIm.js} +1 -1
  230. package/dist/ui/assets/{objectivec-BBcWqc7Y.js → objectivec-BhdaT_Jr.js} +1 -1
  231. package/dist/ui/assets/{ocaml-BExfw7D6.js → ocaml-D_NXvSO7.js} +1 -1
  232. package/dist/ui/assets/{openscad-CHPRELQb.js → openscad-DOhagvnA.js} +1 -1
  233. package/dist/ui/assets/{oxygene-DpS9uMJW.js → oxygene-5BnkqMRH.js} +1 -1
  234. package/dist/ui/assets/{parser3-CjJ_QdBp.js → parser3-jSWlxi8m.js} +1 -1
  235. package/dist/ui/assets/{pegDiagram-2B236MQR-GM70woGy.js → pegDiagram-2B236MQR-CideH-XT.js} +1 -1
  236. package/dist/ui/assets/{perl-BSNM2Kt8.js → perl-CfsqjZ4b.js} +1 -1
  237. package/dist/ui/assets/{pf-Z-hKf_88.js → pf-kOewxO29.js} +1 -1
  238. package/dist/ui/assets/{pgsql-DDgznxBg.js → pgsql-CXm2Xd-Z.js} +1 -1
  239. package/dist/ui/assets/{php-BzAhxF-l.js → php-CRiA_dH8.js} +1 -1
  240. package/dist/ui/assets/{php-template-DkgcKHRc.js → php-template-ByMrxqSd.js} +1 -1
  241. package/dist/ui/assets/{pieDiagram-ENE6RG2P-Bst7mPyz.js → pieDiagram-ENE6RG2P-CJkCdB38.js} +1 -1
  242. package/dist/ui/assets/{plaintext-BYEppD0R.js → plaintext-BJx0R6A5.js} +1 -1
  243. package/dist/ui/assets/{pony-BT_kQd1K.js → pony-CozCHtz4.js} +1 -1
  244. package/dist/ui/assets/{powershell-BfRsuSsf.js → powershell-BT7gMMgn.js} +1 -1
  245. package/dist/ui/assets/{processing-DpzWe5Iu.js → processing-FOIxn_W_.js} +1 -1
  246. package/dist/ui/assets/{profile-BCOhS5cM.js → profile-BsoUuD9w.js} +1 -1
  247. package/dist/ui/assets/{prolog-OxaCCaW8.js → prolog-Bd3gvQ2N.js} +1 -1
  248. package/dist/ui/assets/{properties-DMFlA2Ca.js → properties-BWGFdny9.js} +1 -1
  249. package/dist/ui/assets/{protobuf-CRDFkXvZ.js → protobuf-pQSKoOOY.js} +1 -1
  250. package/dist/ui/assets/{puppet-DnrVyLzx.js → puppet-DnEN_mgS.js} +1 -1
  251. package/dist/ui/assets/{purebasic-Dht4Hniv.js → purebasic-BqoOGoRw.js} +1 -1
  252. package/dist/ui/assets/{python-B0aMirWu.js → python-TeVYomkE.js} +1 -1
  253. package/dist/ui/assets/{python-repl-BlYDBGa7.js → python-repl-zqu5igFS.js} +1 -1
  254. package/dist/ui/assets/{q-DzrtW9kT.js → q-CZC9Dltd.js} +1 -1
  255. package/dist/ui/assets/{qml-DnfQsR3i.js → qml-ZNInP45Q.js} +1 -1
  256. package/dist/ui/assets/{quadrantDiagram-ABIIQ3AL-DNRYurBT.js → quadrantDiagram-ABIIQ3AL-Dd7PwxsF.js} +1 -1
  257. package/dist/ui/assets/{r-DGI_ZuTD.js → r-B39DAmkC.js} +1 -1
  258. package/dist/ui/assets/{railroadDiagram-RFXS5EU6-CmbC3Vz4.js → railroadDiagram-RFXS5EU6-DtO5PVFZ.js} +1 -1
  259. package/dist/ui/assets/{reasonml-3SohMgh2.js → reasonml-B-ZWFJt_.js} +1 -1
  260. package/dist/ui/assets/{requirementDiagram-TGXJPOKE-8CxrXHco.js → requirementDiagram-TGXJPOKE-DihF4OTj.js} +1 -1
  261. package/dist/ui/assets/{rib-DfRSd4Qa.js → rib-CnGG0qMF.js} +1 -1
  262. package/dist/ui/assets/{roboconf-CQczGdGW.js → roboconf-Ewtfps4u.js} +1 -1
  263. package/dist/ui/assets/{routeros-DCka-T2i.js → routeros-CPcmP1c7.js} +1 -1
  264. package/dist/ui/assets/{rsl-Dr8MOwMo.js → rsl-NbjWFbPH.js} +1 -1
  265. package/dist/ui/assets/{ruby-C2zFSkh_.js → ruby-DWDdy5yE.js} +1 -1
  266. package/dist/ui/assets/{ruleslanguage-C97YsgQq.js → ruleslanguage-Cv_DZe2r.js} +1 -1
  267. package/dist/ui/assets/{rust-H3h8kd9A.js → rust-NZnsfER5.js} +1 -1
  268. package/dist/ui/assets/{sankeyDiagram-HTMAVEWB-DBXLWjEq.js → sankeyDiagram-HTMAVEWB-D6i-Mzte.js} +1 -1
  269. package/dist/ui/assets/{sas-04z0Xu8P.js → sas-C4wv0P6G.js} +1 -1
  270. package/dist/ui/assets/{scala-DyB9Aoiv.js → scala-DUdTOIgx.js} +1 -1
  271. package/dist/ui/assets/{scheme-DBj6nxUi.js → scheme-DEdFa14t.js} +1 -1
  272. package/dist/ui/assets/{scilab-Btj7AD9s.js → scilab-xY51J2bR.js} +1 -1
  273. package/dist/ui/assets/{scss-BXZJyXt7.js → scss-BEYp1sXc.js} +1 -1
  274. package/dist/ui/assets/{sequenceDiagram-DBY2YBRQ-DXIkBFKC.js → sequenceDiagram-DBY2YBRQ-njQlqy_J.js} +1 -1
  275. package/dist/ui/assets/{shell-BsreQR1Z.js → shell-fq6bkhOw.js} +1 -1
  276. package/dist/ui/assets/{sizeCapture-X5ZJPWSS-ocS9jxAQ.js → sizeCapture-X5ZJPWSS-tLn70-Fb.js} +1 -1
  277. package/dist/ui/assets/{smali-D9wQw9zm.js → smali-CsSAuSYg.js} +1 -1
  278. package/dist/ui/assets/{smalltalk-Dku6G_H3.js → smalltalk-DJ7zrd87.js} +1 -1
  279. package/dist/ui/assets/{sml-BknyU6ya.js → sml-CnDwl0nH.js} +1 -1
  280. package/dist/ui/assets/{sqf-DRYMaOg8.js → sqf-Cc2SX4Zy.js} +1 -1
  281. package/dist/ui/assets/{sql-Cw3Ax4KA.js → sql-DUQA_V_4.js} +1 -1
  282. package/dist/ui/assets/{sql_more-vWdslLE0.js → sql_more-BHoH-8oO.js} +1 -1
  283. package/dist/ui/assets/{stan-8XH5bDS6.js → stan-D-7F5jH6.js} +1 -1
  284. package/dist/ui/assets/{stata-4e77wgfe.js → stata-xKD_DnDE.js} +1 -1
  285. package/dist/ui/assets/{stateDiagram-2N3HPSRC-RMmL9jMG.js → stateDiagram-2N3HPSRC-B4O8weor.js} +1 -1
  286. package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-CO881_ht.js +1 -0
  287. package/dist/ui/assets/{step21-ByIeDMY3.js → step21-obc_kzQY.js} +1 -1
  288. package/dist/ui/assets/{stylus-ZAhJyWsw.js → stylus-CkAUSRd-.js} +1 -1
  289. package/dist/ui/assets/{subunit-pPW2UGkj.js → subunit-BDv8PGo1.js} +1 -1
  290. package/dist/ui/assets/{swift-CX3BB5az.js → swift-CHsYyW-p.js} +1 -1
  291. package/dist/ui/assets/{swimlanes-5IMT3BWC-C2zAuJ56.js → swimlanes-5IMT3BWC-DSr9Ty4A.js} +2 -2
  292. package/dist/ui/assets/swimlanesDiagram-G3AALYLV-DFMCDs8b.js +8 -0
  293. package/dist/ui/assets/{taggerscript-BHcjbWIC.js → taggerscript-C_2JQgO9.js} +1 -1
  294. package/dist/ui/assets/{tap-BOl1lBlS.js → tap-Bi497Z2c.js} +1 -1
  295. package/dist/ui/assets/{tcl-DZjeOBDh.js → tcl-B1XMvLaD.js} +1 -1
  296. package/dist/ui/assets/{thrift-BxboWg4x.js → thrift-D9X0Hmmc.js} +1 -1
  297. package/dist/ui/assets/{timeline-definition-FHXFAJF6-BOxsxyq_.js → timeline-definition-FHXFAJF6-C4_gj50B.js} +1 -1
  298. package/dist/ui/assets/{tp-BNM6ql3J.js → tp-CJG4Odbx.js} +1 -1
  299. package/dist/ui/assets/{twig-Dj9ZiXD4.js → twig-flj72_wc.js} +1 -1
  300. package/dist/ui/assets/{typescript-7MEJlu_6.js → typescript-CWPwVoLd.js} +1 -1
  301. package/dist/ui/assets/{vala-DNqOAgHJ.js → vala-LuCNWNuU.js} +1 -1
  302. package/dist/ui/assets/{vbnet-T0mNKVc_.js → vbnet-CGUT6ss0.js} +1 -1
  303. package/dist/ui/assets/{vbscript-CeuwVMAI.js → vbscript-CNiUBJhn.js} +1 -1
  304. package/dist/ui/assets/{vbscript-html-BbJSt2w6.js → vbscript-html-CJGgjjbc.js} +1 -1
  305. package/dist/ui/assets/{vennDiagram-L72KCM5P-BX9mWeiT.js → vennDiagram-L72KCM5P-BxcAUnYo.js} +1 -1
  306. package/dist/ui/assets/{verilog-DYuhYfkX.js → verilog-C4f9ZBTK.js} +1 -1
  307. package/dist/ui/assets/{vhdl-Cf9aT-t7.js → vhdl-CyDQIZve.js} +1 -1
  308. package/dist/ui/assets/{vim-DciP44K1.js → vim-XAUBqa0M.js} +1 -1
  309. package/dist/ui/assets/{wardleyDiagram-EHGQE667-CDj2rOzu.js → wardleyDiagram-EHGQE667-DlwSH77q.js} +1 -1
  310. package/dist/ui/assets/{x86asm-E-AN_LXO.js → x86asm-Cp6vHuUx.js} +1 -1
  311. package/dist/ui/assets/{xl-CxYLJelN.js → xl-BHgDofIM.js} +1 -1
  312. package/dist/ui/assets/{xml-yz1SRLuU.js → xml-QloVn4s_.js} +1 -1
  313. package/dist/ui/assets/{xquery-BLzBF3tV.js → xquery-spJZLmyM.js} +1 -1
  314. package/dist/ui/assets/{xychartDiagram-FW5EYKEG-Czapk9-Z.js → xychartDiagram-FW5EYKEG-BxGVZcnb.js} +1 -1
  315. package/dist/ui/assets/{yaml-Cv4Y7iN_.js → yaml-CUju4iq0.js} +1 -1
  316. package/dist/ui/assets/{zephir-KRcdQfEX.js → zephir-ChVpmD0Y.js} +1 -1
  317. package/dist/ui/index.html +2 -2
  318. package/dist/utils/__tests__/abort-signals.test.js +67 -0
  319. package/dist/utils/__tests__/db-maintenance.test.js +55 -0
  320. package/dist/utils/__tests__/db-migration.test.js +79 -1
  321. package/dist/utils/__tests__/inject-loop.test.js +1 -53
  322. package/dist/utils/__tests__/learn-tasks-db.test.js +82 -0
  323. package/dist/utils/__tests__/openai-converter.test.js +25 -0
  324. package/dist/utils/__tests__/pi-crawl-tools.test.js +15 -4
  325. package/dist/utils/__tests__/pi-dedup-reconcile.test.js +11 -9
  326. package/dist/utils/__tests__/pi-events.test.d.ts +1 -0
  327. package/dist/utils/__tests__/pi-events.test.js +172 -0
  328. package/dist/utils/__tests__/pi-learn-orchestrator.test.js +216 -6
  329. package/dist/utils/__tests__/pi-runtime-json.test.js +38 -3
  330. package/dist/utils/__tests__/providers-db.test.js +40 -2
  331. package/dist/utils/__tests__/request-writer.test.js +532 -39
  332. package/dist/utils/__tests__/sse-protocol.test.d.ts +1 -0
  333. package/dist/utils/__tests__/sse-protocol.test.js +115 -0
  334. package/dist/utils/__tests__/stats-aggregator.test.d.ts +1 -0
  335. package/dist/utils/__tests__/stats-aggregator.test.js +114 -0
  336. package/dist/utils/__tests__/vault.test.d.ts +1 -0
  337. package/dist/utils/__tests__/{knowledge-store.test.js → vault.test.js} +16 -16
  338. package/dist/utils/abort-signals.d.ts +13 -0
  339. package/dist/utils/abort-signals.js +33 -0
  340. package/dist/utils/db-maintenance.d.ts +8 -0
  341. package/dist/utils/db-maintenance.js +18 -0
  342. package/dist/utils/db.d.ts +2 -0
  343. package/dist/utils/db.js +86 -0
  344. package/dist/utils/esm-dirname.d.ts +0 -15
  345. package/dist/utils/esm-dirname.js +0 -4
  346. package/dist/utils/inject-loop.d.ts +0 -27
  347. package/dist/utils/inject-loop.js +2 -56
  348. package/dist/utils/learn-tasks-db.d.ts +15 -0
  349. package/dist/utils/learn-tasks-db.js +35 -0
  350. package/dist/utils/openai-converter.js +88 -78
  351. package/dist/utils/pi-browser-tools.d.ts +0 -2
  352. package/dist/utils/pi-browser-tools.js +0 -174
  353. package/dist/utils/pi-crawl-tools.d.ts +2 -1
  354. package/dist/utils/pi-crawl-tools.js +16 -11
  355. package/dist/utils/pi-dedup.d.ts +8 -30
  356. package/dist/utils/pi-dedup.js +32 -67
  357. package/dist/utils/pi-events.d.ts +65 -0
  358. package/dist/utils/pi-events.js +98 -0
  359. package/dist/utils/pi-learn-orchestrator.d.ts +6 -5
  360. package/dist/utils/pi-learn-orchestrator.js +71 -106
  361. package/dist/utils/pi-runtime.d.ts +5 -6
  362. package/dist/utils/pi-runtime.js +38 -42
  363. package/dist/utils/pi-sandbox-ops.d.ts +0 -36
  364. package/dist/utils/pi-sandbox-ops.js +5 -190
  365. package/dist/utils/providers-db.d.ts +3 -0
  366. package/dist/utils/providers-db.js +21 -7
  367. package/dist/utils/request-writer.d.ts +77 -26
  368. package/dist/utils/request-writer.js +362 -56
  369. package/dist/utils/sse-protocol.d.ts +34 -0
  370. package/dist/utils/sse-protocol.js +121 -0
  371. package/dist/utils/sse-stream-processor.d.ts +4 -9
  372. package/dist/utils/sse-stream-processor.js +13 -104
  373. package/dist/utils/sse-writer.d.ts +1 -1
  374. package/dist/utils/sse-writer.js +3 -2
  375. package/dist/utils/stats-aggregator.d.ts +1 -1
  376. package/dist/utils/stats-aggregator.js +44 -24
  377. package/dist/utils/tool-injector.js +7 -0
  378. package/dist/utils/vault.d.ts +111 -0
  379. package/dist/utils/vault.js +434 -0
  380. package/ecosystem.config.cjs +2 -1
  381. package/package.json +1 -1
  382. package/dist/docs/assets/chunks/@localSearchIndexroot.B6Qfxe6W.js +0 -1
  383. package/dist/server/middleware/__tests__/request-id.test.js +0 -28
  384. package/dist/server/middleware/request-id.d.ts +0 -2
  385. package/dist/server/middleware/request-id.js +0 -12
  386. package/dist/types/api.d.ts +0 -20
  387. package/dist/types/index.d.ts +0 -4
  388. package/dist/types/index.js +0 -4
  389. package/dist/types/log.d.ts +0 -13
  390. package/dist/ui/assets/channel-Bc4Td8eZ.js +0 -1
  391. package/dist/ui/assets/classDiagram-OUVF2IWQ-BicxhZFq.js +0 -1
  392. package/dist/ui/assets/classDiagram-v2-EOCWNBFH-BicxhZFq.js +0 -1
  393. package/dist/ui/assets/index-C0fxlU9d.css +0 -10
  394. package/dist/ui/assets/stateDiagram-v2-6OUMAXLB-QvaEO5U6.js +0 -1
  395. package/dist/ui/assets/swimlanesDiagram-G3AALYLV-DPgCOY0D.js +0 -8
  396. package/dist/utils/__tests__/sse-accumulator.test.js +0 -83
  397. package/dist/utils/knowledge-store.d.ts +0 -51
  398. package/dist/utils/knowledge-store.js +0 -241
  399. package/dist/utils/migrate-files-to-db.d.ts +0 -1
  400. package/dist/utils/migrate-files-to-db.js +0 -138
  401. package/dist/utils/sse-accumulator.d.ts +0 -9
  402. package/dist/utils/sse-accumulator.js +0 -59
  403. /package/dist/docs/assets/{proxy-cli_data-hooks.md.w9Oe1OD3.lean.js → proxy-cli_data-hooks.md.Bz8CVbxO.lean.js} +0 -0
  404. /package/dist/docs/assets/{proxy-core_ui-routes.md.Dyqkeoiv.lean.js → proxy-core_ui-routes.md.B21t1p7R.lean.js} +0 -0
  405. /package/dist/server/{middleware/__tests__/request-id.test.d.ts → __tests__/data-push.test.d.ts} +0 -0
  406. /package/dist/{types/api.js → utils/__tests__/abort-signals.test.d.ts} +0 -0
  407. /package/dist/{types/log.js → utils/__tests__/db-maintenance.test.d.ts} +0 -0
  408. /package/dist/utils/__tests__/{knowledge-store.test.d.ts → learn-tasks-db.test.d.ts} +0 -0
  409. /package/dist/utils/__tests__/{sse-accumulator.test.d.ts → openai-converter.test.d.ts} +0 -0
@@ -8,12 +8,13 @@ import path from 'node:path';
8
8
  import os from 'node:os';
9
9
  import { Type } from 'typebox';
10
10
  import { createAgentSession, DefaultResourceLoader, ModelRuntime, createWriteToolDefinition, } from '@earendil-works/pi-coding-agent';
11
- import { dataDir } from './paths.js';
12
11
  import { sandboxWriteOps } from './pi-sandbox-ops.js';
13
- import { knowledgeStore } from './knowledge-store.js';
12
+ import { vault } from './vault.js';
14
13
  import { createCrawlTools } from './pi-crawl-tools.js';
14
+ import { createTimeoutSignal, bindAbort } from './abort-signals.js';
15
+ import { extractAssistantDelta } from './pi-events.js';
15
16
  // 知识文档目录:所有文件工具的 cwd 和沙箱白名单根
16
- const docsDir = path.join(dataDir, 'docs');
17
+ const docsDir = vault.root;
17
18
  // pi agent 目录(auth / models / system.md)
18
19
  const agentDir = path.join(os.homedir(), '.cc-monitoring', 'pi');
19
20
  let runtimePromise = null;
@@ -67,7 +68,7 @@ STRUCTURE (all paths below are RELATIVE TO the knowledge root ~/.cc-monitoring/d
67
68
  - Bodies live in <topic-slug>/chunks/chunk-NNN.md
68
69
  - Root index.json lists all topics as JSON
69
70
  - Fetched source pages for a topic are already prepared in <slug>/sources/ — you only READ them, never write or modify them`;
70
- export const CHAT_SYSTEM_PROMPT = `You are a knowledge management AI operating inside a sandbox.
71
+ const CHAT_SYSTEM_PROMPT = `You are a knowledge management AI operating inside a sandbox.
71
72
  ${KB_STRUCTURE}
72
73
 
73
74
  ANSWERING QUESTIONS:
@@ -77,7 +78,7 @@ ANSWERING QUESTIONS:
77
78
  4. Call read_chunk(topic, chunk_id) for relevant chunks — only read chunks you need
78
79
  5. Prefer answering from knowledge base chunks when relevant content exists; cite which chunks you used
79
80
  6. If no relevant chunk exists, answer from your general knowledge; if you truly don't know, say so`;
80
- export const OUTLINE_SYSTEM_PROMPT = `You are an outline-phase worker. The relevant web pages have ALREADY been fetched and saved to sources/ for your assigned topic. Your job: read them and propose an outline of dictionary entries. Do NOT write chunks.
81
+ const OUTLINE_SYSTEM_PROMPT = `You are an outline-phase worker. The relevant web pages have ALREADY been fetched and saved to sources/ for your assigned topic. Your job: read them and propose an outline of dictionary entries. Do NOT write chunks.
81
82
 
82
83
  ${KB_STRUCTURE}
83
84
 
@@ -95,7 +96,7 @@ HARD RULES:
95
96
  - Do NOT write chunk files, source files, or index.json.
96
97
  - Do NOT summarize prematurely — outline only; distillation happens later.
97
98
  - After add_outline succeeds, print the returned slug and item count. Stop.`;
98
- export const CRAWL_SYSTEM_PROMPT = `You are a crawl-phase worker. You drive the browser YOURSELF to incrementally fetch web pages for your assigned topic and save every useful page into sources/. Do NOT outline or write chunks.
99
+ const CRAWL_SYSTEM_PROMPT = `You are a crawl-phase worker. You drive the browser YOURSELF to incrementally fetch web pages for your assigned topic and save every useful page into sources/. Do NOT outline or write chunks.
99
100
 
100
101
  WORKFLOW:
101
102
  1. Call crawl_open to open the entry URL given in your task.
@@ -109,7 +110,7 @@ HARD RULES:
109
110
  - If a tool returns an error, do NOT retry the same URL; pick another link or finish.
110
111
  - At most ~20 pages. Prefer a few dense pages over many thin ones.
111
112
  - After crawl_finish succeeds, stop.`;
112
- export const REFINE_SYSTEM_PROMPT = `You are a refine-phase worker. For ONE item from the topic's outline, produce a single dictionary chunk.
113
+ const REFINE_SYSTEM_PROMPT = `You are a refine-phase worker. For ONE item from the topic's outline, produce a single dictionary chunk.
113
114
 
114
115
  ${KB_STRUCTURE}
115
116
 
@@ -141,7 +142,7 @@ HARD RULES:
141
142
  - One concept per chunk.
142
143
  - If the material is thin on a concept, write what exists; do NOT invent content. Omit empty sections.
143
144
  - Do NOT call add_topic. Do NOT write index.json.`;
144
- export const TAG_SYSTEM_PROMPT = `You are a tag-phase worker. Enrich an existing topic with rich, retrieval-friendly tags.
145
+ const TAG_SYSTEM_PROMPT = `You are a tag-phase worker. Enrich an existing topic with rich, retrieval-friendly tags.
145
146
 
146
147
  ${KB_STRUCTURE}
147
148
 
@@ -189,13 +190,6 @@ function systemPromptForMode(mode) {
189
190
  // 工具构造
190
191
  const ok = (text) => ({ content: [{ type: 'text', text }], details: undefined });
191
192
  const err = (e) => ({ content: [{ type: 'text', text: `error: ${e instanceof Error ? e.message : String(e)}` }], details: undefined });
192
- // 与 knowledge-store TOPIC_RE 保持一致:防路径穿越(../、绝对路径、反斜杠等)
193
- const SLUG_RE = /^[a-z0-9][a-z0-9-]*$/;
194
- function assertSlug(slug, field) {
195
- if (!SLUG_RE.test(slug)) {
196
- throw new Error(`invalid ${field}: ${slug}`);
197
- }
198
- }
199
193
  /** add_outline:对已存在的 slug 目录登记大纲(写 outline.json + seed topic) */
200
194
  function buildAddOutlineTool() {
201
195
  return {
@@ -212,14 +206,8 @@ function buildAddOutlineTool() {
212
206
  })),
213
207
  }),
214
208
  async execute(_id, params) {
215
- assertSlug(params.slug, 'slug');
216
- const topicDir = path.join(docsDir, params.slug);
217
- if (!fs.existsSync(topicDir))
218
- throw new Error(`topic dir not prepared: ${params.slug}`);
219
- if (!fs.existsSync(path.join(topicDir, 'sources')))
220
- throw new Error(`sources missing for topic: ${params.slug}`);
221
- fs.writeFileSync(path.join(topicDir, 'outline.json'), JSON.stringify({ slug: params.slug, source: 'sources/', items: params.items }, null, 2));
222
- await knowledgeStore.upsertTopic({
209
+ vault.writeOutline(params.slug, params.items);
210
+ await vault.upsertTopic({
223
211
  slug: params.slug,
224
212
  title: params.title,
225
213
  summary: '(refining)',
@@ -237,12 +225,11 @@ function buildReadSourceTool() {
237
225
  description: '读取该主题 sources/ 目录下全部已抓取网页(按文件名排序、--- 分隔)。',
238
226
  parameters: Type.Object({ topic: Type.String({ description: '主题 slug' }) }),
239
227
  async execute(_id, params) {
240
- assertSlug(params.topic, 'topic');
241
- const dir = path.join(docsDir, params.topic, 'sources');
242
- const files = fs.readdirSync(dir).filter((f) => f.endsWith('.md')).sort();
243
- if (files.length === 0)
228
+ vault.assertSlug(params.topic, 'topic');
229
+ const bodies = vault.readSourceBodies(params.topic);
230
+ if (bodies.length === 0)
244
231
  throw new Error(`no sources for topic: ${params.topic}`);
245
- const merged = files.map((f) => fs.readFileSync(path.join(dir, f), 'utf8')).join('\n\n---\n\n');
232
+ const merged = bodies.join('\n\n---\n\n');
246
233
  return ok(merged);
247
234
  },
248
235
  };
@@ -257,7 +244,7 @@ function buildKnowledgeTools() {
257
244
  parameters: Type.Object({}),
258
245
  async execute() {
259
246
  try {
260
- return ok(JSON.stringify(await knowledgeStore.listTopics(), null, 2));
247
+ return ok(JSON.stringify(await vault.listTopics(), null, 2));
261
248
  }
262
249
  catch (e) {
263
250
  return err(e);
@@ -271,7 +258,7 @@ function buildKnowledgeTools() {
271
258
  parameters: Type.Object({ topic: Type.String({ description: '主题 slug,如 react-hooks' }) }),
272
259
  async execute(_id, params) {
273
260
  try {
274
- return ok(JSON.stringify(await knowledgeStore.getTopic(params.topic), null, 2));
261
+ return ok(JSON.stringify(await vault.getTopic(params.topic), null, 2));
275
262
  }
276
263
  catch (e) {
277
264
  return err(e);
@@ -285,7 +272,7 @@ function buildKnowledgeTools() {
285
272
  parameters: Type.Object({ query: Type.String({ description: '搜索关键词' }) }),
286
273
  async execute(_id, params) {
287
274
  try {
288
- return ok(JSON.stringify(await knowledgeStore.searchChunks(params.query), null, 2));
275
+ return ok(JSON.stringify(await vault.searchChunks(params.query), null, 2));
289
276
  }
290
277
  catch (e) {
291
278
  return err(e);
@@ -302,7 +289,7 @@ function buildKnowledgeTools() {
302
289
  }),
303
290
  async execute(_id, params) {
304
291
  try {
305
- return ok(await knowledgeStore.readChunk(params.topic, params.chunk_id));
292
+ return ok(await vault.readChunk(params.topic, params.chunk_id));
306
293
  }
307
294
  catch (e) {
308
295
  return err(e);
@@ -321,7 +308,7 @@ function buildKnowledgeTools() {
321
308
  }),
322
309
  async execute(_id, params) {
323
310
  try {
324
- await knowledgeStore.upsertTopic(params);
311
+ await vault.upsertTopic(params);
325
312
  return ok('topic added');
326
313
  }
327
314
  catch (e) {
@@ -342,7 +329,7 @@ function buildKnowledgeTools() {
342
329
  }),
343
330
  async execute(_id, params) {
344
331
  try {
345
- await knowledgeStore.upsertChunkRef({
332
+ await vault.upsertChunkRef({
346
333
  topic: params.topic,
347
334
  chunkId: params.chunk_id,
348
335
  title: params.title,
@@ -362,7 +349,7 @@ const KNOWLEDGE_TOOLS = buildKnowledgeTools();
362
349
  const KT = (name) => KNOWLEDGE_TOOLS.find((t) => t.name === name);
363
350
  const WRITE_TOOL = createWriteToolDefinition(docsDir, { operations: sandboxWriteOps });
364
351
  /** 按模式构建工具集(ToolDefinition 数组,用于 customTools) */
365
- function buildModeTools(mode, crawlGuard) {
352
+ function buildModeTools(mode, crawlGuard, signal) {
366
353
  switch (mode) {
367
354
  case 'chat':
368
355
  return [KT('list_topics'), KT('get_topic'), KT('search_chunks'), KT('read_chunk')];
@@ -371,7 +358,9 @@ function buildModeTools(mode, crawlGuard) {
371
358
  case 'crawl':
372
359
  if (!crawlGuard)
373
360
  throw new Error('crawl 模式必须传入 crawlGuard');
374
- return createCrawlTools(crawlGuard);
361
+ if (!signal)
362
+ throw new Error('crawl 模式必须传入 signal');
363
+ return createCrawlTools(crawlGuard, signal);
375
364
  case 'refine':
376
365
  return [buildReadSourceTool(), WRITE_TOOL, KT('add_chunk')];
377
366
  case 'tag':
@@ -411,7 +400,7 @@ export async function createPiSession(options) {
411
400
  // 所以先放一个可变变量,返回 session 后再填值。
412
401
  let currentSessionId = '';
413
402
  const systemPrompt = systemPromptForMode(options.mode);
414
- const modeTools = buildModeTools(options.mode, options.crawlGuard);
403
+ const modeTools = buildModeTools(options.mode, options.crawlGuard, options.signal);
415
404
  const toolAllowlist = buildToolAllowlist(options.mode);
416
405
  const resourceLoader = new DefaultResourceLoader({
417
406
  cwd,
@@ -448,6 +437,8 @@ export async function createPiSession(options) {
448
437
  }
449
438
  // ============================================================
450
439
  // 无工具 JSON 调用(reconcile 模式)
440
+ // 单次 JSON 调用超时:5 分钟
441
+ const STAGE_TIMEOUT_MS = 5 * 60 * 1000;
451
442
  /**
452
443
  * 从任意文本截取第一个 `{` 到最后一个 `}` 之间的子串并解析为 JSON 对象。
453
444
  * 容忍 prose / 代码围栏包裹。无 `{` 或解析失败时抛错。
@@ -471,14 +462,16 @@ export function extractJsonObject(raw) {
471
462
  */
472
463
  export async function runJsonPrompt(opts) {
473
464
  const session = await createPiSession({ port: opts.port, mode: 'reconcile' });
465
+ // 5 分钟超时 + 外部取消:任一触发都调 session.abort();SDK abort 后 prompt/waitForIdle
466
+ // 会正常 resolve(不 reject),故 await(经 finally)后需检查 combined.aborted 主动抛错
467
+ const combined = createTimeoutSignal(STAGE_TIMEOUT_MS, opts.signal);
468
+ bindAbort(combined, () => session.abort());
474
469
  // 订阅累积 assistant 文本 chunk
475
470
  let accumulated = '';
476
471
  const unsub = session.subscribe((ev) => {
477
- if (ev.type === 'message_update') {
478
- const ae = ev.assistantMessageEvent;
479
- if (ae?.type === 'text_delta' && typeof ae.delta === 'string') {
480
- accumulated += ae.delta;
481
- }
472
+ const d = extractAssistantDelta(ev);
473
+ if (d?.kind === 'text') {
474
+ accumulated += d.delta;
482
475
  }
483
476
  });
484
477
  try {
@@ -488,5 +481,8 @@ export async function runJsonPrompt(opts) {
488
481
  finally {
489
482
  unsub();
490
483
  }
484
+ if (combined.aborted) {
485
+ throw new Error('json prompt 已中止');
486
+ }
491
487
  return extractJsonObject(accumulated);
492
488
  }
@@ -1,40 +1,4 @@
1
- /**
2
- * 校验传入路径必须在 docsDir 内,并返回归一化后的绝对路径。
3
- * 越界则抛错,阻断 fs 调用。
4
- */
5
- export declare function assertInside(absPath: string): string;
6
- declare function access(absolutePath: string): Promise<void>;
7
- export declare const sandboxReadOps: {
8
- readFile(absolutePath: string): Promise<Buffer>;
9
- access: typeof access;
10
- detectImageMimeType: () => Promise<string | null | undefined>;
11
- };
12
1
  export declare const sandboxWriteOps: {
13
2
  writeFile(absolutePath: string, content: string): Promise<void>;
14
3
  mkdir(dir: string): Promise<void>;
15
4
  };
16
- export declare const sandboxEditOps: {
17
- readFile(absolutePath: string): Promise<Buffer>;
18
- writeFile(absolutePath: string, content: string): Promise<void>;
19
- access: typeof access;
20
- };
21
- export declare const sandboxGrepOps: {
22
- isDirectory(absolutePath: string): Promise<boolean>;
23
- readFile(absolutePath: string): Promise<string>;
24
- };
25
- export declare const sandboxFindOps: {
26
- exists(absolutePath: string): Promise<boolean>;
27
- glob(pattern: string, cwd: string, options: {
28
- ignore: string[];
29
- limit: number;
30
- }): Promise<string[]>;
31
- };
32
- export declare function globMatch(relPosixPath: string, pattern: string): boolean;
33
- export declare const sandboxLsOps: {
34
- exists(absolutePath: string): Promise<boolean>;
35
- stat(absolutePath: string): Promise<{
36
- isDirectory: () => boolean;
37
- }>;
38
- readdir(absolutePath: string): Promise<string[]>;
39
- };
40
- export {};
@@ -1,45 +1,22 @@
1
1
  // 为 pi-coding-agent 的文件工具提供沙箱白名单 operations,
2
2
  // 把所有 fs 访问限定在 ~/.cc-monitoring/docs/ 目录内。
3
+ // 边界判定(docsDir 内 / 受管 index.json)委托 vault。
3
4
  import { promises as fs } from 'node:fs';
4
- import path from 'node:path';
5
- import { dataDir } from './paths.js';
6
- // 知识文档目录:所有读写都必须落在它下面
7
- const docsDir = path.join(dataDir, 'docs');
5
+ import { vault } from './vault.js';
8
6
  /**
9
7
  * 校验传入路径必须在 docsDir 内,并返回归一化后的绝对路径。
10
8
  * 越界则抛错,阻断 fs 调用。
11
9
  */
12
- export function assertInside(absPath) {
13
- const resolved = path.resolve(absPath);
14
- if (resolved !== docsDir && !resolved.startsWith(docsDir + path.sep)) {
15
- throw new Error(`Access denied: ${absPath} is outside the knowledge directory ${docsDir}`);
16
- }
17
- return resolved;
10
+ function assertInside(absPath) {
11
+ return vault.assertInside(absPath);
18
12
  }
19
13
  /**
20
14
  * 守卫:index.json 由 add_topic/add_chunk 工具原子维护,
21
15
  * 禁止 LLM 通过 write/edit 直接改写。
22
16
  */
23
17
  function assertNotManagedIndexJson(absPath) {
24
- if (path.basename(absPath) === 'index.json') {
25
- throw new Error('index.json is managed by add_topic/add_chunk tools, do not write directly');
26
- }
18
+ vault.assertNotManagedIndexJson(absPath);
27
19
  }
28
- // 统一 access:校验可读性
29
- async function access(absolutePath) {
30
- const p = assertInside(absolutePath);
31
- await fs.access(p);
32
- }
33
- // ============== read ==============
34
- export const sandboxReadOps = {
35
- async readFile(absolutePath) {
36
- const p = assertInside(absolutePath);
37
- return fs.readFile(p);
38
- },
39
- access,
40
- // 沙箱内不做图片 MIME 检测(pi 会按非图片处理,足够用)
41
- detectImageMimeType: async () => undefined,
42
- };
43
20
  // ============== write ==============
44
21
  export const sandboxWriteOps = {
45
22
  async writeFile(absolutePath, content) {
@@ -52,165 +29,3 @@ export const sandboxWriteOps = {
52
29
  await fs.mkdir(p, { recursive: true });
53
30
  },
54
31
  };
55
- // ============== edit ==============
56
- export const sandboxEditOps = {
57
- async readFile(absolutePath) {
58
- const p = assertInside(absolutePath);
59
- return fs.readFile(p);
60
- },
61
- async writeFile(absolutePath, content) {
62
- const p = assertInside(absolutePath);
63
- assertNotManagedIndexJson(p);
64
- await fs.writeFile(p, content, 'utf8');
65
- },
66
- access,
67
- };
68
- // ============== grep ==============
69
- // GrepOperations.readFile 签名是 Promise<string> | string(用于返回上下文行)
70
- export const sandboxGrepOps = {
71
- async isDirectory(absolutePath) {
72
- // 越界直接 throw,让 pi 在 spawn rg 之前就 reject
73
- const p = assertInside(absolutePath);
74
- const st = await fs.stat(p);
75
- return st.isDirectory();
76
- },
77
- async readFile(absolutePath) {
78
- const p = assertInside(absolutePath);
79
- return fs.readFile(p, 'utf8');
80
- },
81
- };
82
- // ============== find ==============
83
- export const sandboxFindOps = {
84
- async exists(absolutePath) {
85
- const p = assertInside(absolutePath);
86
- try {
87
- await fs.access(p);
88
- return true;
89
- }
90
- catch {
91
- return false;
92
- }
93
- },
94
- async glob(pattern, cwd, options) {
95
- // cwd 必须落在 docsDir 内
96
- const root = assertInside(cwd);
97
- // 递归收集 root 下所有文件的相对 posix 路径,再按 pattern + ignore 过滤
98
- const all = [];
99
- async function walk(dir) {
100
- if (all.length >= options.limit * 4)
101
- return;
102
- let entries;
103
- try {
104
- entries = await fs.readdir(dir, { withFileTypes: true });
105
- }
106
- catch {
107
- return;
108
- }
109
- for (const ent of entries) {
110
- const full = path.join(dir, ent.name);
111
- const rel = path.relative(root, full).split(path.sep).join('/');
112
- if (options.ignore.some((ig) => globMatch(rel, ig)))
113
- continue;
114
- if (ent.isDirectory()) {
115
- await walk(full);
116
- }
117
- else if (ent.isFile()) {
118
- all.push(rel);
119
- }
120
- }
121
- }
122
- await walk(root);
123
- // 按 pattern 过滤,截断到 limit
124
- // 语义对齐 fd:pattern 不含 '/' 时按 basename 匹配任意深度;
125
- // 含 '/' 时按完整相对路径匹配(等价 '**/<pattern>')
126
- const hasSlash = pattern.includes('/');
127
- const out = all
128
- .filter((r) => hasSlash ? globMatch(r, pattern) : matchSegment(pattern, path.posix.basename(r)))
129
- .slice(0, options.limit);
130
- return out;
131
- },
132
- };
133
- // 极简 glob:支持 *、**、?,与 minimatch 在常见文档搜索场景下等价
134
- // - '*.md' 匹配顶层 md 文件
135
- // - '**/*.md' 匹配任意层级 md
136
- // - 'docs/**' 匹配 docs 子树下所有文件
137
- // - 'src/foo.ts' 字面路径
138
- export function globMatch(relPosixPath, pattern) {
139
- // 显式 '**' 段处理
140
- const patternSegs = pattern.split('/');
141
- const pathSegs = relPosixPath.split('/');
142
- return matchSegs(patternSegs, pathSegs, 0, 0);
143
- }
144
- function matchSegs(pats, paths, pi, qi) {
145
- if (pi === pats.length) {
146
- return qi === paths.length;
147
- }
148
- const p = pats[pi];
149
- if (p === '**') {
150
- // '**' 匹配 0..n 段(含跨目录)
151
- // 试:消耗 0 段;以及让 '**' 吃掉 q 到末尾任意段
152
- if (matchSegs(pats, paths, pi + 1, qi))
153
- return true;
154
- for (let k = qi; k < paths.length; k++) {
155
- if (matchSegs(pats, paths, pi + 1, k + 1))
156
- return true;
157
- }
158
- return false;
159
- }
160
- if (qi === paths.length)
161
- return false;
162
- if (!matchSegment(p, paths[qi]))
163
- return false;
164
- return matchSegs(pats, paths, pi + 1, qi + 1);
165
- }
166
- function matchSegment(pattern, segment) {
167
- if (pattern === '*')
168
- return true;
169
- // 把 *、? 转成正则,其余字符转义
170
- let re = '^';
171
- for (let i = 0; i < pattern.length; i++) {
172
- const ch = pattern[i];
173
- if (ch === '*') {
174
- re += '[^/]*';
175
- }
176
- else if (ch === '?') {
177
- re += '[^/]';
178
- }
179
- else if ('.+^${}()|\\'.includes(ch)) {
180
- re += '\\' + ch;
181
- }
182
- else {
183
- re += ch;
184
- }
185
- }
186
- re += '$';
187
- try {
188
- return new RegExp(re).test(segment);
189
- }
190
- catch {
191
- return false;
192
- }
193
- }
194
- // ============== ls ==============
195
- export const sandboxLsOps = {
196
- async exists(absolutePath) {
197
- const p = assertInside(absolutePath);
198
- try {
199
- await fs.access(p);
200
- return true;
201
- }
202
- catch {
203
- return false;
204
- }
205
- },
206
- async stat(absolutePath) {
207
- const p = assertInside(absolutePath);
208
- const st = await fs.stat(p);
209
- // fs.Stats 自带 isDirectory(),形状已满足 LsOperations
210
- return st;
211
- },
212
- async readdir(absolutePath) {
213
- const p = assertInside(absolutePath);
214
- return fs.readdir(p);
215
- },
216
- };
@@ -12,6 +12,7 @@ export interface Provider {
12
12
  provider: string;
13
13
  default: boolean;
14
14
  is_openai_compatible: boolean;
15
+ auth_style: 'bearer' | 'x-api-key';
15
16
  created_at: string;
16
17
  updated_at: string;
17
18
  }
@@ -27,6 +28,7 @@ export interface ProviderInput {
27
28
  provider: string;
28
29
  default?: boolean;
29
30
  is_openai_compatible?: boolean;
31
+ auth_style?: 'bearer' | 'x-api-key';
30
32
  }
31
33
  export interface ProviderValidationError {
32
34
  index?: number;
@@ -34,6 +36,7 @@ export interface ProviderValidationError {
34
36
  message: string;
35
37
  }
36
38
  export declare function listProviders(db: Database.Database): Provider[];
39
+ export declare function getActiveProvider(db: Database.Database): Provider | null;
37
40
  /**
38
41
  * Destructive full replacement: deletes ALL existing providers then inserts the given list.
39
42
  * Passing an empty array will wipe all provider data with no replacement.
@@ -1,7 +1,6 @@
1
1
  const REQUIRED_FIELDS = ['name', 'provider'];
2
- export function listProviders(db) {
3
- const rows = db.prepare('SELECT * FROM providers ORDER BY created_at DESC').all();
4
- return rows.map(r => ({
2
+ function mapRow(r) {
3
+ return {
5
4
  id: r.id,
6
5
  name: r.name,
7
6
  base_url: r.base_url,
@@ -14,9 +13,24 @@ export function listProviders(db) {
14
13
  provider: r.provider,
15
14
  default: !!r.is_default,
16
15
  is_openai_compatible: !!r.is_openai_compatible,
16
+ auth_style: r.auth_style === 'x-api-key' ? 'x-api-key' : 'bearer',
17
17
  created_at: r.created_at,
18
18
  updated_at: r.updated_at,
19
- }));
19
+ };
20
+ }
21
+ export function listProviders(db) {
22
+ const rows = db.prepare('SELECT * FROM providers ORDER BY created_at DESC').all();
23
+ return rows.map(mapRow);
24
+ }
25
+ const activeProviderStmtCache = new WeakMap();
26
+ export function getActiveProvider(db) {
27
+ let stmt = activeProviderStmtCache.get(db);
28
+ if (!stmt) {
29
+ stmt = db.prepare('SELECT * FROM providers WHERE is_default = 1 LIMIT 1');
30
+ activeProviderStmtCache.set(db, stmt);
31
+ }
32
+ const row = stmt.get();
33
+ return row ? mapRow(row) : null;
20
34
  }
21
35
  /**
22
36
  * Destructive full replacement: deletes ALL existing providers then inserts the given list.
@@ -28,13 +42,13 @@ export function listProviders(db) {
28
42
  export function saveProviders(db, providers) {
29
43
  const deleteAll = db.prepare('DELETE FROM providers');
30
44
  const insertOne = db.prepare(`
31
- INSERT INTO providers (name, base_url, api_key, model, haiku_model, sonnet_model, opus_model, subagent_model, provider, is_default, is_openai_compatible)
32
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
45
+ INSERT INTO providers (name, base_url, api_key, model, haiku_model, sonnet_model, opus_model, subagent_model, provider, is_default, is_openai_compatible, auth_style)
46
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
33
47
  `);
34
48
  const transaction = db.transaction(() => {
35
49
  deleteAll.run();
36
50
  for (const p of providers) {
37
- insertOne.run(p.name, p.base_url && p.base_url.trim() !== '' ? p.base_url : null, p.api_key && p.api_key.trim() !== '' ? p.api_key : null, p.model && p.model.trim() !== '' ? p.model : null, p.haiku_model && p.haiku_model.trim() !== '' ? p.haiku_model : null, p.sonnet_model && p.sonnet_model.trim() !== '' ? p.sonnet_model : null, p.opus_model && p.opus_model.trim() !== '' ? p.opus_model : null, p.subagent_model && p.subagent_model.trim() !== '' ? p.subagent_model : null, p.provider, p.default ? 1 : 0, p.is_openai_compatible ? 1 : 0);
51
+ insertOne.run(p.name, p.base_url && p.base_url.trim() !== '' ? p.base_url : null, p.api_key && p.api_key.trim() !== '' ? p.api_key : null, p.model && p.model.trim() !== '' ? p.model : null, p.haiku_model && p.haiku_model.trim() !== '' ? p.haiku_model : null, p.sonnet_model && p.sonnet_model.trim() !== '' ? p.sonnet_model : null, p.opus_model && p.opus_model.trim() !== '' ? p.opus_model : null, p.subagent_model && p.subagent_model.trim() !== '' ? p.subagent_model : null, p.provider, p.default ? 1 : 0, p.is_openai_compatible ? 1 : 0, p.auth_style === 'x-api-key' ? 'x-api-key' : 'bearer');
38
52
  }
39
53
  });
40
54
  transaction();