@lovelybunch/api 1.0.76-alpha.1 → 1.0.76-alpha.11
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/lib/auth/auth-manager.js +1 -1
- package/dist/lib/git.d.ts +3 -0
- package/dist/lib/git.js +35 -0
- package/dist/lib/mcp-client.d.ts +39 -0
- package/dist/lib/mcp-client.js +131 -0
- package/dist/lib/terminal/terminal-manager.js +31 -0
- package/dist/routes/api/v1/ai/route.js +136 -1
- package/dist/routes/api/v1/ai/tools.js +49 -232
- package/dist/routes/api/v1/config/route.js +13 -9
- package/dist/routes/api/v1/context/agents/route.d.ts +3 -0
- package/dist/routes/api/v1/context/agents/route.js +159 -0
- package/dist/routes/api/v1/context/index.js +6 -0
- package/dist/routes/api/v1/context/memory/route.d.ts +3 -0
- package/dist/routes/api/v1/context/memory/route.js +163 -0
- package/dist/routes/api/v1/context/team/route.d.ts +3 -0
- package/dist/routes/api/v1/context/team/route.js +159 -0
- package/dist/routes/api/v1/git/index.js +27 -1
- package/dist/routes/api/v1/knowledge/route.js +26 -32
- package/dist/routes/api/v1/mail/route.d.ts +3 -3
- package/dist/routes/api/v1/mcp/index.js +170 -4
- package/dist/routes/api/v1/proposals/[id]/route.d.ts +10 -24
- package/dist/routes/api/v1/proposals/[id]/route.js +10 -1
- package/dist/routes/api/v1/proposals/route.d.ts +2 -16
- package/dist/routes/api/v1/proposals/route.js +11 -8
- package/dist/routes/api/v1/resources/generate/route.js +10 -3
- package/dist/routes/api/v1/tasks/route.d.ts +18 -38
- package/dist/routes/api/v1/tasks/route.js +94 -16
- package/dist/routes/api/v1/terminal/[proposalId]/create/route.js +2 -2
- package/dist/routes/api/v1/terminal/code/index.d.ts +3 -0
- package/dist/routes/api/v1/terminal/code/index.js +5 -0
- package/dist/routes/api/v1/terminal/code/route.d.ts +14 -0
- package/dist/routes/api/v1/terminal/code/route.js +159 -0
- package/dist/server-with-static.js +2 -0
- package/dist/server.js +2 -0
- package/package.json +6 -7
- package/static/assets/ActivityPage-CUPUsmhW.js +1 -0
- package/static/assets/ActivityPage-DGW0f70r.js +1 -0
- package/static/assets/AgentsContextEditPage-CBZaG033.js +9 -0
- package/static/assets/AgentsContextEditPage-CJbx9qwA.js +9 -0
- package/static/assets/AgentsContextPage-BWzSvM5V.js +1 -0
- package/static/assets/AgentsContextPage-C1wcPVUs.js +1 -0
- package/static/assets/{ApiKeysSettingsPage-DbXgxh7i.js → ApiKeysSettingsPage-CauZEPsx.js} +2 -2
- package/static/assets/ApiKeysSettingsPage-Ceww_YUR.js +2 -0
- package/static/assets/ArchitectureEditPage-DZhYQihz.js +15 -0
- package/static/assets/ArchitectureEditPage-Dk8NNc4k.js +15 -0
- package/static/assets/ArchitecturePage-Cvj4j0Mo.js +1 -0
- package/static/assets/ArchitecturePage-D0gLaPg5.js +1 -0
- package/static/assets/{AuthSettingsPage-nIgM05Yw.js → AuthSettingsPage-22eaC7la.js} +2 -2
- package/static/assets/AuthSettingsPage-BHPV0uSB.js +11 -0
- package/static/assets/{CallbackPage-NNbLun2S.js → CallbackPage-DCf0WTl0.js} +1 -1
- package/static/assets/CallbackPage-buKCnkYC.js +1 -0
- package/static/assets/CodePage-CuyF2xDA.js +2 -0
- package/static/assets/CodePage-x32C4yuN.js +2 -0
- package/static/assets/{CollapsibleSection-DbKW4cyU.js → CollapsibleSection-CUHXgJIe.js} +1 -1
- package/static/assets/CollapsibleSection-DMf0wWjc.js +1 -0
- package/static/assets/DashboardPage-DIU-4dPO.js +41 -0
- package/static/assets/DashboardPage-Dr4S3wVm.js +41 -0
- package/static/assets/{GitPage-Hi0mdDOi.js → GitPage-BGHRNljT.js} +4 -4
- package/static/assets/GitPage-DpCcZosR.js +16 -0
- package/static/assets/{GitSettingsPage-2vuCM-U-.js → GitSettingsPage-A4ty6ftB.js} +2 -2
- package/static/assets/GitSettingsPage-BRuP4Ihk.js +6 -0
- package/static/assets/{IdentityPage-2BzLc2EI.js → IdentityPage-4xn0DPW8.js} +2 -2
- package/static/assets/IdentityPage-Bps9Zjk3.js +6 -0
- package/static/assets/{ImplementationStepsEditor-BlmI5YuN.js → ImplementationStepsEditor-CaMsbJPb.js} +2 -2
- package/static/assets/ImplementationStepsEditor-KJkRc2Jn.js +6 -0
- package/static/assets/IntegrationsSettingsPage-B1sX003q.js +1 -0
- package/static/assets/IntegrationsSettingsPage-CpTuAA-H.js +1 -0
- package/static/assets/{JobDetailPage-CLEY1Z5e.js → JobDetailPage-BdYlGn4G.js} +1 -1
- package/static/assets/JobDetailPage-C5N3IyX3.js +1 -0
- package/static/assets/KnowledgeDetailPage-Dvk-QAJJ.js +1 -0
- package/static/assets/KnowledgeDetailPage-Dy0M4FgC.js +1 -0
- package/static/assets/KnowledgeEditPage-CN0wPWMV.js +1 -0
- package/static/assets/KnowledgeEditPage-DEP0bweP.js +1 -0
- package/static/assets/KnowledgePage-BLe2lXja.js +3 -0
- package/static/assets/{KnowledgePage-D-ahboFK.js → KnowledgePage-_bvnWXPU.js} +2 -2
- package/static/assets/{LoginPage-DQ2rJliF.js → LoginPage-BkZt_pMw.js} +1 -1
- package/static/assets/LoginPage-VfOnXGad.js +1 -0
- package/static/assets/{MailInboxPage-Bfh0_pBU.js → MailInboxPage-DklkHMyO.js} +1 -1
- package/static/assets/MailInboxPage-UF82OTOE.js +1 -0
- package/static/assets/{MailProcessingModal-NF9kjdgr.js → MailProcessingModal-BHFYVTQc.js} +2 -2
- package/static/assets/MailProcessingModal-rKHRB-wC.js +6 -0
- package/static/assets/{MailReadPage-C0QhDa1x.js → MailReadPage-B-vLDq-6.js} +1 -1
- package/static/assets/MailReadPage-mg3Wqvqh.js +1 -0
- package/static/assets/{MailSentPage-Ctgcp1RB.js → MailSentPage-DIJJ8I5v.js} +1 -1
- package/static/assets/MailSentPage-OJeb1vU9.js +1 -0
- package/static/assets/{McpSettingsPage-CFgpw5_r.js → McpSettingsPage-CgOnXuHZ.js} +1 -1
- package/static/assets/McpSettingsPage-Mi2-nB-i.js +1 -0
- package/static/assets/MemoryEditPage-CR6SmDXU.js +13 -0
- package/static/assets/MemoryEditPage-D8i7XQ5l.js +13 -0
- package/static/assets/MemoryPage-BcWVGuiS.js +1 -0
- package/static/assets/MemoryPage-vbCtMG4L.js +1 -0
- package/static/assets/NewKnowledgePage-BE4X0pSc.js +1 -0
- package/static/assets/NewKnowledgePage-CL3dpMwb.js +1 -0
- package/static/assets/{NewSkillPage-CvBSXZFE.js → NewSkillPage-B3prwJ_n.js} +1 -1
- package/static/assets/NewSkillPage-BCJ68pFK.js +1 -0
- package/static/assets/{NewTaskPage-DRL-pyjV.js → NewTaskPage-DszXfHrv.js} +2 -2
- package/static/assets/NewTaskPage-vj0LvAb_.js +91 -0
- package/static/assets/{NotFoundPage-DW0gfvNA.js → NotFoundPage-D3K7UoeF.js} +1 -1
- package/static/assets/NotFoundPage-DqwQiMc8.js +6 -0
- package/static/assets/NotificationsSettingsPage-BSuXKPiG.js +1 -0
- package/static/assets/NotificationsSettingsPage-C4Gthita.js +1 -0
- package/static/assets/ProjectEditPage-DTdhZKQg.js +11 -0
- package/static/assets/ProjectEditPage-ia6zDqUf.js +11 -0
- package/static/assets/{ProjectPage-78a-iVFG.js → ProjectPage-BIk487-h.js} +1 -1
- package/static/assets/ProjectPage-DJ5wGekX.js +1 -0
- package/static/assets/PromptsSettingsPage-4iJoggN0.js +1 -0
- package/static/assets/PromptsSettingsPage-COjiXPsT.js +1 -0
- package/static/assets/{ResourceDetailPage-CLcuo4yw.js → ResourceDetailPage-DJN3Rax4.js} +1 -1
- package/static/assets/ResourceDetailPage-DKs83OyV.js +1 -0
- package/static/assets/ResourcesPage-CO45MzEx.js +41 -0
- package/static/assets/ResourcesPage-DF8x1i_a.js +41 -0
- package/static/assets/RoleEditPage-B0pm5rVn.js +13 -0
- package/static/assets/RoleEditPage-CBl-M2s3.js +13 -0
- package/static/assets/{RolePage-haUf186q.js → RolePage-B7JswOZC.js} +1 -1
- package/static/assets/RolePage-IVBtcgCf.js +1 -0
- package/static/assets/{RulesSettingsPage-Cc8rvAvm.js → RulesSettingsPage-CB6YdyhI.js} +2 -2
- package/static/assets/RulesSettingsPage-CKUt1JkO.js +16 -0
- package/static/assets/SchedulePage-TCeGDlnw.js +4 -0
- package/static/assets/SchedulePage-_NAbasKs.js +4 -0
- package/static/assets/{SkillDetailPage-BqhoNNkM.js → SkillDetailPage-7EzSwjPh.js} +1 -1
- package/static/assets/SkillDetailPage-jTeSohec.js +1 -0
- package/static/assets/{SkillEditPage-cpSdv9D4.js → SkillEditPage-CpouyjFV.js} +1 -1
- package/static/assets/SkillEditPage-D_e69AQk.js +1 -0
- package/static/assets/{SkillsPage-Cxkm5ymf.js → SkillsPage-DP8zSnPo.js} +2 -2
- package/static/assets/SkillsPage-xfv43oJ4.js +8 -0
- package/static/assets/{SkillsSettingsPage-DrmRher8.js → SkillsSettingsPage-CktzJBa7.js} +1 -1
- package/static/assets/SkillsSettingsPage-jhNVgVSA.js +1 -0
- package/static/assets/{SourceInput-C0WkiXS6.js → SourceInput-CQnyDxzl.js} +1 -1
- package/static/assets/SourceInput-KeAQ1PMl.js +1 -0
- package/static/assets/{TagInput-raThOrbG.js → TagInput-DoO2Dwj6.js} +1 -1
- package/static/assets/TagInput-ZyP8Rq8B.js +1 -0
- package/static/assets/{TaskDetailPage-BMzce3uJ.js → TaskDetailPage-C6xKC_IM.js} +2 -2
- package/static/assets/TaskDetailPage-z557zwfE.js +16 -0
- package/static/assets/TaskEditPage-DPLOeh7K.js +1 -0
- package/static/assets/TaskEditPage-XuWzVm-k.js +1 -0
- package/static/assets/{TasksPage-CxKJQJ1_.js → TasksPage-C-toKZIZ.js} +3 -3
- package/static/assets/TasksPage-CwfLwTAV.js +17 -0
- package/static/assets/TeamEditPage-B8qk6fWu.js +9 -0
- package/static/assets/TeamEditPage-Dk7Yxh1i.js +9 -0
- package/static/assets/TeamPage-CQ4EE1rP.js +1 -0
- package/static/assets/TeamPage-Dmrjf_RA.js +1 -0
- package/static/assets/{TerminalPage-BWdNoEM5.js → TerminalPage-C0CSp8st.js} +1 -1
- package/static/assets/TerminalPage-Y59DZGfZ.js +1 -0
- package/static/assets/TerminalSessionPage-BQOMLYPX.js +3 -0
- package/static/assets/TerminalSessionPage-HvnYJEpU.js +3 -0
- package/static/assets/UserPreferencesPage-1l5T8TaE.js +1 -0
- package/static/assets/UserPreferencesPage-BSIvW5UI.js +1 -0
- package/static/assets/{UserSettingsPage-CqooRxDi.js → UserSettingsPage-CS7BrEZJ.js} +1 -1
- package/static/assets/UserSettingsPage-o4ikmR9k.js +1 -0
- package/static/assets/UtilitiesPage-D1YCA1eC.js +1 -0
- package/static/assets/UtilitiesPage-O5kjW0V2.js +1 -0
- package/static/assets/{alert-BGFBZOrZ.js → alert-DOfUEE4H.js} +1 -1
- package/static/assets/alert-u79hLEuY.js +1 -0
- package/static/assets/apl-B4CMkyY2.js +1 -0
- package/static/assets/{arrow-down-DXhs3vvo.js → arrow-down-DumN-Nal.js} +1 -1
- package/static/assets/arrow-down-Y539lEoZ.js +6 -0
- package/static/assets/{arrow-left-PEX5RePT.js → arrow-left-B_QwfLPP.js} +1 -1
- package/static/assets/arrow-left-DmNgC0xD.js +6 -0
- package/static/assets/{arrow-up-D7z0QZsQ.js → arrow-up-B3Oj7MxZ.js} +1 -1
- package/static/assets/arrow-up-BbDrY9nh.js +6 -0
- package/static/assets/{arrow-up-down-OTrzDHIL.js → arrow-up-down-D8T0kR2Q.js} +1 -1
- package/static/assets/arrow-up-down-DDTTwJEF.js +6 -0
- package/static/assets/asciiarmor-Df11BRmG.js +1 -0
- package/static/assets/asn1-EdZsLKOL.js +1 -0
- package/static/assets/asterisk-B-8jnY81.js +1 -0
- package/static/assets/{badge-rki-Xf0E.js → badge-BmHXIBBB.js} +1 -1
- package/static/assets/badge-BzEwwrAP.js +1 -0
- package/static/assets/brainfuck-C4LP7Hcl.js +1 -0
- package/static/assets/{browser-modal-BKnqJnf5.js → browser-modal-4AfJ98X7.js} +2 -2
- package/static/assets/browser-modal-CY4F-Mm8.js +6 -0
- package/static/assets/{card-_Grh-Otl.js → card-BpqK1BMM.js} +1 -1
- package/static/assets/card-Btt3HmXT.js +1 -0
- package/static/assets/{chevron-left-LQtIDk73.js → chevron-left-CSCdB-iz.js} +1 -1
- package/static/assets/chevron-left-DztJMlwc.js +6 -0
- package/static/assets/{chevron-up-BM1GKhAV.js → chevron-up-DaWWwb87.js} +1 -1
- package/static/assets/chevron-up-gnoSEbf_.js +6 -0
- package/static/assets/{chevrons-up-Ccej0FyZ.js → chevrons-up-B2GdB4F7.js} +1 -1
- package/static/assets/chevrons-up-D7gsSI9g.js +11 -0
- package/static/assets/{circle-alert-C5k9mZfC.js → circle-alert-CQ-Ir4mS.js} +1 -1
- package/static/assets/circle-alert-Coa2ulVd.js +6 -0
- package/static/assets/{circle-check-fwIZxHsK.js → circle-check-01UufaGN.js} +1 -1
- package/static/assets/circle-check-C9wy7OAO.js +6 -0
- package/static/assets/{circle-check-big-BaFefwt0.js → circle-check-big-CVbQ_zpj.js} +1 -1
- package/static/assets/circle-check-big-DqKKs8fZ.js +6 -0
- package/static/assets/{circle-play-C1R46Kry.js → circle-play-COMPwZ00.js} +1 -1
- package/static/assets/circle-play-DoomwgYb.js +6 -0
- package/static/assets/{circle-x-CKuM1691.js → circle-x-Cs5S3HID.js} +1 -1
- package/static/assets/circle-x-Du7Cp5MD.js +6 -0
- package/static/assets/clike-B9uivgTg.js +1 -0
- package/static/assets/{clipboard-DWJnnRi8.js → clipboard-C-VV2jbC.js} +1 -1
- package/static/assets/clipboard-CqRqQoij.js +11 -0
- package/static/assets/{clock-Diqm3Csm.js → clock-BKOkXNLP.js} +1 -1
- package/static/assets/clock-ehUSUqcI.js +6 -0
- package/static/assets/clojure-BMjYHr_A.js +1 -0
- package/static/assets/cmake-BQqOBYOt.js +1 -0
- package/static/assets/cobol-CWcv1MsR.js +1 -0
- package/static/assets/{code-Ao0cA5nW.js → code-CmFlYUo3.js} +1 -1
- package/static/assets/code-kQPD6ttp.js +6 -0
- package/static/assets/coffeescript-S37ZYGWr.js +1 -0
- package/static/assets/commonlisp-DBKNyK5s.js +1 -0
- package/static/assets/crystal-SjHAIU92.js +1 -0
- package/static/assets/css-BnMrqG3P.js +1 -0
- package/static/assets/cypher-C_CwsFkJ.js +1 -0
- package/static/assets/d-pRatUO7H.js +1 -0
- package/static/assets/diff-DbItnlRl.js +1 -0
- package/static/assets/dockerfile-BKs6k2Af.js +1 -0
- package/static/assets/{download-5iQDQeY0.js → download-Cg0a1Yh4.js} +1 -1
- package/static/assets/download-D8TKj0Hc.js +6 -0
- package/static/assets/dtd-DF_7sFjM.js +1 -0
- package/static/assets/dylan-DwRh75JA.js +1 -0
- package/static/assets/ebnf-CDyGwa7X.js +1 -0
- package/static/assets/ecl-Cabwm37j.js +1 -0
- package/static/assets/eiffel-CnydiIhH.js +1 -0
- package/static/assets/elm-vLlmbW-K.js +1 -0
- package/static/assets/erlang-BNw1qcRV.js +1 -0
- package/static/assets/{external-link-B6dkiWgP.js → external-link-BSAlwNHq.js} +1 -1
- package/static/assets/external-link-BVrPPG_7.js +6 -0
- package/static/assets/{eye-DQUzAWBY.js → eye-AP4j25wH.js} +1 -1
- package/static/assets/eye-DWC_Vybx.js +6 -0
- package/static/assets/factor-kuTfRLto.js +1 -0
- package/static/assets/fcl-Kvtd6kyn.js +1 -0
- package/static/assets/{folder-git-2-CQUj8P5W.js → folder-git-2-CMtTePKY.js} +1 -1
- package/static/assets/folder-git-2-Ds9p-D0Q.js +6 -0
- package/static/assets/forth-Ffai-XNe.js +1 -0
- package/static/assets/fortran-DYz_wnZ1.js +1 -0
- package/static/assets/gas-Bneqetm1.js +1 -0
- package/static/assets/gherkin-heZmZLOM.js +1 -0
- package/static/assets/globe-CJrZCIc6.js +6 -0
- package/static/assets/globe-DwQuaM7_.js +6 -0
- package/static/assets/groovy-D9Dt4D0W.js +1 -0
- package/static/assets/haskell-Cw1EW3IL.js +1 -0
- package/static/assets/haxe-H-WmDvRZ.js +1 -0
- package/static/assets/http-DBlCnlav.js +1 -0
- package/static/assets/idl-BEugSyMb.js +1 -0
- package/static/assets/index-0sq0wwbr.js +1 -0
- package/static/assets/index-B0Cea36W.js +1 -0
- package/static/assets/index-B0g-CMWG.js +1 -0
- package/static/assets/index-BFEMYO_w.js +1 -0
- package/static/assets/index-BFevJCwl.js +1 -0
- package/static/assets/index-BK1-hIKa.js +1 -0
- package/static/assets/index-BMie63_b.js +1 -0
- package/static/assets/index-BZvWD4ai.js +1 -0
- package/static/assets/index-BlyysfDZ.js +7 -0
- package/static/assets/index-BpQ9T8mu.js +3 -0
- package/static/assets/index-Bpm_mSd3.js +2 -0
- package/static/assets/index-Brkkhgwq.js +1 -0
- package/static/assets/index-Bvj_HZmE.js +1 -0
- package/static/assets/index-CE8kBKLn.js +1 -0
- package/static/assets/index-CL_XsRD7.js +1 -0
- package/static/assets/{index-CIFIEidO.js → index-C_KCaLlP.js} +117 -102
- package/static/assets/index-CfcUrE_I.js +1 -0
- package/static/assets/index-CisT9m8F.js +3 -0
- package/static/assets/index-CiyjdZHh.js +1 -0
- package/static/assets/index-CtnO1D9D.js +1 -0
- package/static/assets/index-D3hMbDtK.js +1 -0
- package/static/assets/index-DBS4Ya9k.js +1 -0
- package/static/assets/index-DEmcF6vO.js +1 -0
- package/static/assets/index-DYBGl9Zy.js +1 -0
- package/static/assets/index-DgeHIphZ.js +1 -0
- package/static/assets/index-Digxc7bT.js +1 -0
- package/static/assets/index-Dih0CGHs.js +1 -0
- package/static/assets/index-DoDazQp9.js +1 -0
- package/static/assets/index-DvviZzdo.js +1 -0
- package/static/assets/index-Dz52SxOy.js +2 -0
- package/static/assets/index-J8MrpD0P.js +1 -0
- package/static/assets/index-NgkIT4SV.js +1 -0
- package/static/assets/index-PBkZiuRI.js +1 -0
- package/static/assets/index-ZJ8xZq44.js +1 -0
- package/static/assets/index-oKV7MVo_.js +1 -0
- package/static/assets/index-oRAlpULD.css +1 -0
- package/static/assets/index-opozMhku.js +502 -0
- package/static/assets/index-vk3KOxHi.js +7 -0
- package/static/assets/index-wmWBSeOM.js +1 -0
- package/static/assets/{info-BvzdeJ30.js → info-D-7cQBbP.js} +1 -1
- package/static/assets/info-NEnL4zqX.js +6 -0
- package/static/assets/javascript-iXu5QeM3.js +1 -0
- package/static/assets/julia-DuME0IfC.js +1 -0
- package/static/assets/{label-B1lgxULu.js → label-bMzKAcdZ.js} +1 -1
- package/static/assets/label-wtSCiOqT.js +1 -0
- package/static/assets/livescript-BwQOo05w.js +1 -0
- package/static/assets/lua-BgMRiT3U.js +1 -0
- package/static/assets/markdown-editor-B3gIcmI2.js +111 -0
- package/static/assets/markdown-editor-B6HEtSkH.css +1 -0
- package/static/assets/markdown-editor-D_er7zWv.js +111 -0
- package/static/assets/mathematica-DTrFuWx2.js +1 -0
- package/static/assets/mbox-CNhZ1qSd.js +1 -0
- package/static/assets/{message-square-LKqx0LRr.js → message-square-Ca07XC8m.js} +1 -1
- package/static/assets/message-square-CvZFZAL0.js +6 -0
- package/static/assets/mirc-CjQqDB4T.js +1 -0
- package/static/assets/mllike-CXdrOF99.js +1 -0
- package/static/assets/modelica-Dc1JOy9r.js +1 -0
- package/static/assets/mscgen-BA5vi2Kp.js +1 -0
- package/static/assets/mumps-BT43cFF4.js +1 -0
- package/static/assets/nginx-DdIZxoE0.js +1 -0
- package/static/assets/nsis-LdVXkNf5.js +1 -0
- package/static/assets/ntriples-BfvgReVJ.js +1 -0
- package/static/assets/octave-Ck1zUtKM.js +1 -0
- package/static/assets/oz-BzwKVEFT.js +1 -0
- package/static/assets/{paperclip-Cvcr3t6l.js → paperclip-BICwD8BW.js} +1 -1
- package/static/assets/paperclip-D9bkHCO9.js +6 -0
- package/static/assets/pascal--L3eBynH.js +1 -0
- package/static/assets/{pause-TaMz44vG.js → pause-CZwBxJjx.js} +1 -1
- package/static/assets/pause-DrtOMeDr.js +6 -0
- package/static/assets/perl-CdXCOZ3F.js +1 -0
- package/static/assets/pig-CevX1Tat.js +1 -0
- package/static/assets/pipeline-builders-Bkf0wt_O.js +17 -0
- package/static/assets/{play-C4YxfQOO.js → play-BjDbhEcg.js} +1 -1
- package/static/assets/play-CQk31OJN.js +6 -0
- package/static/assets/powershell-CFHJl5sT.js +1 -0
- package/static/assets/properties-C78fOPTZ.js +1 -0
- package/static/assets/protobuf-ChK-085T.js +1 -0
- package/static/assets/pug-DeIclll2.js +1 -0
- package/static/assets/puppet-DMA9R1ak.js +1 -0
- package/static/assets/python-BuPzkPfP.js +1 -0
- package/static/assets/q-pXgVlZs6.js +1 -0
- package/static/assets/r-B6wPVr8A.js +1 -0
- package/static/assets/{radio-group-D7Rt-k1F.js → radio-group-BpmJzTM1.js} +1 -1
- package/static/assets/radio-group-DqCmfTij.js +1 -0
- package/static/assets/{refresh-cw-C9ZWZi2c.js → refresh-cw-CZLHY6zD.js} +1 -1
- package/static/assets/refresh-cw-yMcSYdEF.js +6 -0
- package/static/assets/rpm-CTu-6PCP.js +1 -0
- package/static/assets/ruby-B2Rjki9n.js +1 -0
- package/static/assets/sas-B4kiWyti.js +1 -0
- package/static/assets/scheme-C41bIUwD.js +1 -0
- package/static/assets/{search-C1RuN2pO.js → search-Cz2_2BkO.js} +1 -1
- package/static/assets/search-_5ueAoCg.js +6 -0
- package/static/assets/select-9YyUa5YH.js +1 -0
- package/static/assets/select-BKdFrV6O.js +1 -0
- package/static/assets/shell-CjFT_Tl9.js +1 -0
- package/static/assets/sieve-C3Gn_uJK.js +1 -0
- package/static/assets/simple-mode-GW_nhZxv.js +1 -0
- package/static/assets/smalltalk-CnHTOXQT.js +1 -0
- package/static/assets/solr-DehyRSwq.js +1 -0
- package/static/assets/sparql-DkYu6x3z.js +1 -0
- package/static/assets/spreadsheet-BCZA_wO0.js +1 -0
- package/static/assets/sql-D0XecflT.js +1 -0
- package/static/assets/stex-C3f8Ysf7.js +1 -0
- package/static/assets/stylus-B533Al4x.js +1 -0
- package/static/assets/swift-BzpIVaGY.js +1 -0
- package/static/assets/{switch-LSkE6hx8.js → switch-Bhm5em7I.js} +1 -1
- package/static/assets/switch-D7e1drXt.js +1 -0
- package/static/assets/tabs-oeAz0IIg.js +1 -0
- package/static/assets/tabs-qMSIjEoX.js +1 -0
- package/static/assets/{tag-B2iP7vv_.js → tag-D5LBbacJ.js} +1 -1
- package/static/assets/tag-dBrNwRvH.js +6 -0
- package/static/assets/tcl-DVfN8rqt.js +1 -0
- package/static/assets/{terminal-preview-PyMHLXJ3.js → terminal-preview-BZXyNaM9.js} +1 -1
- package/static/assets/terminal-preview-C3WCC5tV.js +1 -0
- package/static/assets/textile-CnDTJFAw.js +1 -0
- package/static/assets/tiddlywiki-DO-Gjzrf.js +1 -0
- package/static/assets/tiki-DGYXhP31.js +1 -0
- package/static/assets/toml-Bm5Em-hy.js +1 -0
- package/static/assets/troff-wAsdV37c.js +1 -0
- package/static/assets/ttcn-CfJYG6tj.js +1 -0
- package/static/assets/ttcn-cfg-B9xdYoR4.js +1 -0
- package/static/assets/turtle-B1tBg_DP.js +1 -0
- package/static/assets/{use-terminal-Blvh8GLp.js → use-terminal-CSttRkql.js} +1 -1
- package/static/assets/use-terminal-FzuSKCnc.js +1 -0
- package/static/assets/vb-CmGdzxic.js +1 -0
- package/static/assets/vbscript-BuJXcnF6.js +1 -0
- package/static/assets/velocity-D8B20fx6.js +1 -0
- package/static/assets/verilog-C6RDOZhf.js +1 -0
- package/static/assets/vhdl-lSbBsy5d.js +1 -0
- package/static/assets/{video-A2wzYKal.js → video-D7SzAtAp.js} +1 -1
- package/static/assets/video-DKqt_ev6.js +36 -0
- package/static/assets/webidl-ZXfAyPTL.js +1 -0
- package/static/assets/xquery-DzFWVndE.js +1 -0
- package/static/assets/yacas-BJ4BC0dw.js +1 -0
- package/static/assets/z80-Hz9HOZM7.js +1 -0
- package/static/index.html +2 -2
- package/dist/lib/auth/auth-manager.d.ts.map +0 -1
- package/dist/lib/auth/auth-manager.js.map +0 -1
- package/dist/lib/gait-path.d.ts.map +0 -1
- package/dist/lib/gait-path.js.map +0 -1
- package/dist/lib/git-settings.d.ts.map +0 -1
- package/dist/lib/git-settings.js.map +0 -1
- package/dist/lib/git.d.ts.map +0 -1
- package/dist/lib/git.js.map +0 -1
- package/dist/lib/jobs/global-job-scheduler.d.ts.map +0 -1
- package/dist/lib/jobs/global-job-scheduler.js.map +0 -1
- package/dist/lib/jobs/job-runner.d.ts.map +0 -1
- package/dist/lib/jobs/job-runner.js.map +0 -1
- package/dist/lib/jobs/job-scheduler.d.ts.map +0 -1
- package/dist/lib/jobs/job-scheduler.js.map +0 -1
- package/dist/lib/jobs/job-store.d.ts.map +0 -1
- package/dist/lib/jobs/job-store.js.map +0 -1
- package/dist/lib/project-paths.d.ts.map +0 -1
- package/dist/lib/project-paths.js.map +0 -1
- package/dist/lib/storage/file-storage.d.ts.map +0 -1
- package/dist/lib/storage/file-storage.js.map +0 -1
- package/dist/lib/symlinks/symlink-manager.d.ts.map +0 -1
- package/dist/lib/symlinks/symlink-manager.js.map +0 -1
- package/dist/lib/symlinks/types.d.ts.map +0 -1
- package/dist/lib/symlinks/types.js.map +0 -1
- package/dist/lib/terminal/context-helper.d.ts.map +0 -1
- package/dist/lib/terminal/context-helper.js.map +0 -1
- package/dist/lib/terminal/global-manager.d.ts.map +0 -1
- package/dist/lib/terminal/global-manager.js.map +0 -1
- package/dist/lib/terminal/shell-utils.d.ts.map +0 -1
- package/dist/lib/terminal/shell-utils.js.map +0 -1
- package/dist/lib/terminal/terminal-manager.d.ts.map +0 -1
- package/dist/lib/terminal/terminal-manager.js.map +0 -1
- package/dist/lib/user-preferences.d.ts.map +0 -1
- package/dist/lib/user-preferences.js.map +0 -1
- package/dist/middleware/auth.d.ts.map +0 -1
- package/dist/middleware/auth.js.map +0 -1
- package/dist/routes/api/v1/agents/[id]/index.d.ts.map +0 -1
- package/dist/routes/api/v1/agents/[id]/index.js.map +0 -1
- package/dist/routes/api/v1/agents/[id]/route.d.ts.map +0 -1
- package/dist/routes/api/v1/agents/[id]/route.js.map +0 -1
- package/dist/routes/api/v1/agents/index.d.ts.map +0 -1
- package/dist/routes/api/v1/agents/index.js.map +0 -1
- package/dist/routes/api/v1/agents/route.d.ts.map +0 -1
- package/dist/routes/api/v1/agents/route.js.map +0 -1
- package/dist/routes/api/v1/ai/index.d.ts.map +0 -1
- package/dist/routes/api/v1/ai/index.js.map +0 -1
- package/dist/routes/api/v1/ai/route.d.ts.map +0 -1
- package/dist/routes/api/v1/ai/route.js.map +0 -1
- package/dist/routes/api/v1/api-keys/index.d.ts.map +0 -1
- package/dist/routes/api/v1/api-keys/index.js.map +0 -1
- package/dist/routes/api/v1/api-keys/route.d.ts.map +0 -1
- package/dist/routes/api/v1/api-keys/route.js.map +0 -1
- package/dist/routes/api/v1/auth/index.d.ts.map +0 -1
- package/dist/routes/api/v1/auth/index.js.map +0 -1
- package/dist/routes/api/v1/auth/route.d.ts.map +0 -1
- package/dist/routes/api/v1/auth/route.js.map +0 -1
- package/dist/routes/api/v1/auth-settings/index.d.ts.map +0 -1
- package/dist/routes/api/v1/auth-settings/index.js.map +0 -1
- package/dist/routes/api/v1/auth-settings/route.d.ts.map +0 -1
- package/dist/routes/api/v1/auth-settings/route.js.map +0 -1
- package/dist/routes/api/v1/chats/[id]/index.d.ts.map +0 -1
- package/dist/routes/api/v1/chats/[id]/index.js.map +0 -1
- package/dist/routes/api/v1/chats/[id]/route.d.ts.map +0 -1
- package/dist/routes/api/v1/chats/[id]/route.js.map +0 -1
- package/dist/routes/api/v1/chats/index.d.ts.map +0 -1
- package/dist/routes/api/v1/chats/index.js.map +0 -1
- package/dist/routes/api/v1/chats/route.d.ts.map +0 -1
- package/dist/routes/api/v1/chats/route.js.map +0 -1
- package/dist/routes/api/v1/config/index.d.ts.map +0 -1
- package/dist/routes/api/v1/config/index.js.map +0 -1
- package/dist/routes/api/v1/config/route.d.ts.map +0 -1
- package/dist/routes/api/v1/config/route.js.map +0 -1
- package/dist/routes/api/v1/context/architecture/route.d.ts.map +0 -1
- package/dist/routes/api/v1/context/architecture/route.js.map +0 -1
- package/dist/routes/api/v1/context/index.d.ts.map +0 -1
- package/dist/routes/api/v1/context/index.js.map +0 -1
- package/dist/routes/api/v1/context/knowledge/[filename]/index.d.ts.map +0 -1
- package/dist/routes/api/v1/context/knowledge/[filename]/index.js.map +0 -1
- package/dist/routes/api/v1/context/knowledge/[filename]/route.d.ts.map +0 -1
- package/dist/routes/api/v1/context/knowledge/[filename]/route.js.map +0 -1
- package/dist/routes/api/v1/context/knowledge/index.d.ts.map +0 -1
- package/dist/routes/api/v1/context/knowledge/index.js.map +0 -1
- package/dist/routes/api/v1/context/knowledge/route.d.ts.map +0 -1
- package/dist/routes/api/v1/context/knowledge/route.js.map +0 -1
- package/dist/routes/api/v1/context/project/route.d.ts.map +0 -1
- package/dist/routes/api/v1/context/project/route.js.map +0 -1
- package/dist/routes/api/v1/git/index.d.ts.map +0 -1
- package/dist/routes/api/v1/git/index.js.map +0 -1
- package/dist/routes/api/v1/jobs/[id]/route.d.ts.map +0 -1
- package/dist/routes/api/v1/jobs/[id]/route.js.map +0 -1
- package/dist/routes/api/v1/jobs/[id]/run/route.d.ts.map +0 -1
- package/dist/routes/api/v1/jobs/[id]/run/route.js.map +0 -1
- package/dist/routes/api/v1/jobs/index.d.ts.map +0 -1
- package/dist/routes/api/v1/jobs/index.js.map +0 -1
- package/dist/routes/api/v1/jobs/route.d.ts.map +0 -1
- package/dist/routes/api/v1/jobs/route.js.map +0 -1
- package/dist/routes/api/v1/jobs/status/route.d.ts.map +0 -1
- package/dist/routes/api/v1/jobs/status/route.js.map +0 -1
- package/dist/routes/api/v1/mcp/index.d.ts.map +0 -1
- package/dist/routes/api/v1/mcp/index.js.map +0 -1
- package/dist/routes/api/v1/mcp/route.d.ts.map +0 -1
- package/dist/routes/api/v1/mcp/route.js.map +0 -1
- package/dist/routes/api/v1/proposals/[id]/route.d.ts.map +0 -1
- package/dist/routes/api/v1/proposals/[id]/route.js.map +0 -1
- package/dist/routes/api/v1/proposals/index.d.ts.map +0 -1
- package/dist/routes/api/v1/proposals/index.js.map +0 -1
- package/dist/routes/api/v1/proposals/route.d.ts.map +0 -1
- package/dist/routes/api/v1/proposals/route.js.map +0 -1
- package/dist/routes/api/v1/resources/[id]/index.d.ts.map +0 -1
- package/dist/routes/api/v1/resources/[id]/index.js.map +0 -1
- package/dist/routes/api/v1/resources/[id]/route.js.map +0 -1
- package/dist/routes/api/v1/resources/[id]/thumbnail/index.d.ts.map +0 -1
- package/dist/routes/api/v1/resources/[id]/thumbnail/index.js.map +0 -1
- package/dist/routes/api/v1/resources/[id]/thumbnail/route.js.map +0 -1
- package/dist/routes/api/v1/resources/index.d.ts.map +0 -1
- package/dist/routes/api/v1/resources/index.js.map +0 -1
- package/dist/routes/api/v1/resources/route.d.ts.map +0 -1
- package/dist/routes/api/v1/resources/route.js.map +0 -1
- package/dist/routes/api/v1/symlinks/index.d.ts.map +0 -1
- package/dist/routes/api/v1/symlinks/index.js.map +0 -1
- package/dist/routes/api/v1/symlinks/route.d.ts.map +0 -1
- package/dist/routes/api/v1/symlinks/route.js.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/create/index.d.ts.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/create/index.js.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/create/route.d.ts.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/create/route.js.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/destroy/index.d.ts.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/destroy/index.js.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/destroy/route.d.ts.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/destroy/route.js.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/resize/index.d.ts.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/resize/index.js.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/resize/route.d.ts.map +0 -1
- package/dist/routes/api/v1/terminal/[proposalId]/resize/route.js.map +0 -1
- package/dist/routes/api/v1/terminal/sessions/index.d.ts.map +0 -1
- package/dist/routes/api/v1/terminal/sessions/index.js.map +0 -1
- package/dist/routes/api/v1/terminal/sessions/route.d.ts.map +0 -1
- package/dist/routes/api/v1/terminal/sessions/route.js.map +0 -1
- package/dist/routes/api/v1/user/index.d.ts.map +0 -1
- package/dist/routes/api/v1/user/index.js.map +0 -1
- package/dist/routes/api/v1/user/settings/index.d.ts.map +0 -1
- package/dist/routes/api/v1/user/settings/index.js.map +0 -1
- package/dist/routes/api/v1/user/settings/route.d.ts.map +0 -1
- package/dist/routes/api/v1/user/settings/route.js.map +0 -1
- package/dist/server-with-static.d.ts.map +0 -1
- package/dist/server-with-static.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/static/assets/ActivityPage-DC2t-Kyv.js +0 -1
- package/static/assets/ArchitectureEditPage-B5dNFxvL.js +0 -21
- package/static/assets/ArchitecturePage-D796d-Je.js +0 -1
- package/static/assets/CodePage-xbYipiBR.js +0 -2
- package/static/assets/DashboardPage-Aw1xWH4M.js +0 -51
- package/static/assets/IntegrationsSettingsPage-Ds16sLG2.js +0 -1
- package/static/assets/KnowledgeDetailPage-D94ukozt.js +0 -1
- package/static/assets/KnowledgeEditPage-DpjdauND.js +0 -1
- package/static/assets/NewKnowledgePage-EqWKQ4lU.js +0 -9
- package/static/assets/NotificationsSettingsPage-BzVS1D5M.js +0 -1
- package/static/assets/ProjectEditPage-BlQk50Xs.js +0 -11
- package/static/assets/PromptsSettingsPage-DWEKgvMD.js +0 -1
- package/static/assets/ResourcesPage-C0TGRawd.js +0 -41
- package/static/assets/RoleEditPage-m6lOchyA.js +0 -13
- package/static/assets/SchedulePage-DUSxe93C.js +0 -4
- package/static/assets/TaskEditPage-Dpsi2Rcp.js +0 -1
- package/static/assets/TerminalSessionPage-B6_ssmNM.js +0 -8
- package/static/assets/UserPreferencesPage-CY_0CoMe.js +0 -1
- package/static/assets/UtilitiesPage-e4IaR2YV.js +0 -1
- package/static/assets/index-CHdBxVyk.css +0 -2
- package/static/assets/kiro-CGoI3Dqh.js +0 -17
- package/static/assets/markdown-editor-C-DC0mFI.js +0 -62
- package/static/assets/markdown-editor-DUEthZ0y.css +0 -1
- package/static/assets/select-Dp3J_OE9.js +0 -1
- package/static/assets/tabs-etlvrbtm.js +0 -1
package/dist/lib/git.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { InstructionFileKind, InstructionFiles } from '@lovelybunch/types';
|
|
1
2
|
export declare function getRepoRoot(): Promise<string>;
|
|
2
3
|
export declare function getWorktreesBase(): Promise<string>;
|
|
3
4
|
export declare function sanitizeBranchName(name: string): string;
|
|
@@ -9,6 +10,8 @@ export declare function runGit(args: string[], opts?: {
|
|
|
9
10
|
stdout: string;
|
|
10
11
|
stderr: string;
|
|
11
12
|
}>;
|
|
13
|
+
export declare function lsTree(ref?: string): Promise<string[]>;
|
|
14
|
+
export declare function getInstructionFiles(filter?: InstructionFileKind | 'all'): Promise<InstructionFiles>;
|
|
12
15
|
export declare function getRepoStatus(): Promise<{
|
|
13
16
|
branch: string;
|
|
14
17
|
ahead: number;
|
package/dist/lib/git.js
CHANGED
|
@@ -5,6 +5,7 @@ import { promises as fs } from 'fs';
|
|
|
5
5
|
import { readGithubToken, isGithubTokenValid } from './github-token.js';
|
|
6
6
|
import { findGaitDirectory } from './gait-path.js';
|
|
7
7
|
import { loadGitSettings } from './git-settings.js';
|
|
8
|
+
import { INSTRUCTION_FILE_KINDS } from '@lovelybunch/types';
|
|
8
9
|
const execFile = promisify(_execFile);
|
|
9
10
|
// Base directory for worktrees under the repository root
|
|
10
11
|
export async function getRepoRoot() {
|
|
@@ -52,6 +53,40 @@ export async function runGit(args, opts) {
|
|
|
52
53
|
};
|
|
53
54
|
return execFile('git', args, { cwd, maxBuffer: 10 * 1024 * 1024, timeout, env });
|
|
54
55
|
}
|
|
56
|
+
// --- ls-tree ---
|
|
57
|
+
export async function lsTree(ref = 'HEAD') {
|
|
58
|
+
const { stdout } = await runGit(['ls-tree', '-r', '--name-only', ref]);
|
|
59
|
+
return stdout.trim().split('\n').filter(l => l && !l.startsWith('.nut/'));
|
|
60
|
+
}
|
|
61
|
+
// --- Instruction files ---
|
|
62
|
+
const FILENAME_TO_KIND = new Map(INSTRUCTION_FILE_KINDS.map(k => [`${k}.md`, k]));
|
|
63
|
+
const KIND_TO_FILENAME = new Map(INSTRUCTION_FILE_KINDS.map(k => [k, `${k}.md`]));
|
|
64
|
+
export async function getInstructionFiles(filter) {
|
|
65
|
+
const filterFilename = filter && filter !== 'all' ? KIND_TO_FILENAME.get(filter) : undefined;
|
|
66
|
+
const allPaths = await lsTree();
|
|
67
|
+
const wanted = allPaths.filter(p => {
|
|
68
|
+
const name = path.basename(p);
|
|
69
|
+
if (!FILENAME_TO_KIND.has(name))
|
|
70
|
+
return false;
|
|
71
|
+
if (filterFilename)
|
|
72
|
+
return name === filterFilename;
|
|
73
|
+
return true;
|
|
74
|
+
});
|
|
75
|
+
const entries = await Promise.all(wanted.map(async (filePath) => {
|
|
76
|
+
const { stdout } = await runGit(['show', `HEAD:${filePath}`]);
|
|
77
|
+
return { filePath, content: stdout };
|
|
78
|
+
}));
|
|
79
|
+
const result = {};
|
|
80
|
+
for (const { filePath, content } of entries) {
|
|
81
|
+
const dir = path.dirname(filePath);
|
|
82
|
+
const key = dir === '.' ? '.' : dir;
|
|
83
|
+
const kind = FILENAME_TO_KIND.get(path.basename(filePath));
|
|
84
|
+
if (!result[key])
|
|
85
|
+
result[key] = {};
|
|
86
|
+
result[key][kind] = content;
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
55
90
|
// --- Status ---
|
|
56
91
|
export async function getRepoStatus() {
|
|
57
92
|
const { stdout } = await runGit(['status', '--porcelain=v1', '-b']);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Client helper for connecting to HTTP/SSE MCP servers
|
|
3
|
+
* Provides tool discovery and execution proxying
|
|
4
|
+
*/
|
|
5
|
+
export interface McpServerConfig {
|
|
6
|
+
name?: string;
|
|
7
|
+
type?: 'http' | 'sse' | 'stdio';
|
|
8
|
+
url?: string;
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
env?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface DiscoveredTool {
|
|
13
|
+
name: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
inputSchema?: object;
|
|
16
|
+
serverName: string;
|
|
17
|
+
serverUrl: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ToolCallResult {
|
|
20
|
+
content: Array<{
|
|
21
|
+
type: string;
|
|
22
|
+
text?: string;
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}>;
|
|
25
|
+
isError?: boolean;
|
|
26
|
+
structuredContent?: unknown;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Connect to an HTTP/SSE MCP server and discover its available tools
|
|
30
|
+
*/
|
|
31
|
+
export declare function discoverToolsFromServer(serverName: string, config: McpServerConfig): Promise<DiscoveredTool[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Execute a tool on an HTTP/SSE MCP server
|
|
34
|
+
*/
|
|
35
|
+
export declare function executeToolOnServer(serverName: string, config: McpServerConfig, toolName: string, args: Record<string, unknown>): Promise<ToolCallResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Close all cached client connections (for cleanup)
|
|
38
|
+
*/
|
|
39
|
+
export declare function closeAllConnections(): void;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Client helper for connecting to HTTP/SSE MCP servers
|
|
3
|
+
* Provides tool discovery and execution proxying
|
|
4
|
+
*/
|
|
5
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
6
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
7
|
+
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
8
|
+
// Cache for active client connections
|
|
9
|
+
const clientCache = new Map();
|
|
10
|
+
// Clean up stale connections after 5 minutes
|
|
11
|
+
const CONNECTION_TTL_MS = 5 * 60 * 1000;
|
|
12
|
+
/**
|
|
13
|
+
* Get or create a client connection to an MCP server
|
|
14
|
+
*/
|
|
15
|
+
async function getOrCreateClient(serverName, config) {
|
|
16
|
+
const cacheKey = `${serverName}:${config.url}`;
|
|
17
|
+
const cached = clientCache.get(cacheKey);
|
|
18
|
+
if (cached) {
|
|
19
|
+
cached.lastUsed = Date.now();
|
|
20
|
+
return cached.client;
|
|
21
|
+
}
|
|
22
|
+
const client = new Client({
|
|
23
|
+
name: 'coconut-api',
|
|
24
|
+
version: '1.0.0'
|
|
25
|
+
});
|
|
26
|
+
const url = new URL(config.url);
|
|
27
|
+
// Try StreamableHTTP first (newer), fall back to SSE (legacy)
|
|
28
|
+
let transport;
|
|
29
|
+
if (config.type === 'sse') {
|
|
30
|
+
// Explicitly SSE
|
|
31
|
+
transport = new SSEClientTransport(url);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Default to StreamableHTTP for 'http' type or unspecified
|
|
35
|
+
transport = new StreamableHTTPClientTransport(url);
|
|
36
|
+
}
|
|
37
|
+
await client.connect(transport);
|
|
38
|
+
clientCache.set(cacheKey, { client, lastUsed: Date.now() });
|
|
39
|
+
// Schedule cleanup
|
|
40
|
+
scheduleCleanup();
|
|
41
|
+
return client;
|
|
42
|
+
}
|
|
43
|
+
let cleanupScheduled = false;
|
|
44
|
+
function scheduleCleanup() {
|
|
45
|
+
if (cleanupScheduled)
|
|
46
|
+
return;
|
|
47
|
+
cleanupScheduled = true;
|
|
48
|
+
setTimeout(() => {
|
|
49
|
+
cleanupScheduled = false;
|
|
50
|
+
const now = Date.now();
|
|
51
|
+
for (const [key, entry] of clientCache.entries()) {
|
|
52
|
+
if (now - entry.lastUsed > CONNECTION_TTL_MS) {
|
|
53
|
+
try {
|
|
54
|
+
entry.client.close();
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
// Ignore close errors
|
|
58
|
+
}
|
|
59
|
+
clientCache.delete(key);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Reschedule if there are still cached connections
|
|
63
|
+
if (clientCache.size > 0) {
|
|
64
|
+
scheduleCleanup();
|
|
65
|
+
}
|
|
66
|
+
}, CONNECTION_TTL_MS);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Connect to an HTTP/SSE MCP server and discover its available tools
|
|
70
|
+
*/
|
|
71
|
+
export async function discoverToolsFromServer(serverName, config) {
|
|
72
|
+
if (!config.url) {
|
|
73
|
+
throw new Error(`Server ${serverName} has no URL configured`);
|
|
74
|
+
}
|
|
75
|
+
if (config.enabled === false) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const client = await getOrCreateClient(serverName, config);
|
|
80
|
+
const toolsResult = await client.listTools();
|
|
81
|
+
return toolsResult.tools.map(tool => ({
|
|
82
|
+
name: tool.name,
|
|
83
|
+
description: tool.description,
|
|
84
|
+
inputSchema: tool.inputSchema,
|
|
85
|
+
serverName,
|
|
86
|
+
serverUrl: config.url
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error(`Failed to discover tools from ${serverName}:`, error);
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Execute a tool on an HTTP/SSE MCP server
|
|
96
|
+
*/
|
|
97
|
+
export async function executeToolOnServer(serverName, config, toolName, args) {
|
|
98
|
+
if (!config.url) {
|
|
99
|
+
throw new Error(`Server ${serverName} has no URL configured`);
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const client = await getOrCreateClient(serverName, config);
|
|
103
|
+
const result = await client.callTool({
|
|
104
|
+
name: toolName,
|
|
105
|
+
arguments: args
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
content: result.content,
|
|
109
|
+
isError: result.isError,
|
|
110
|
+
structuredContent: result.structuredContent
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.error(`Failed to execute tool ${toolName} on ${serverName}:`, error);
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Close all cached client connections (for cleanup)
|
|
120
|
+
*/
|
|
121
|
+
export function closeAllConnections() {
|
|
122
|
+
for (const [key, entry] of clientCache.entries()) {
|
|
123
|
+
try {
|
|
124
|
+
entry.client.close();
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
// Ignore close errors
|
|
128
|
+
}
|
|
129
|
+
clientCache.delete(key);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -2,10 +2,37 @@ import * as pty from 'node-pty';
|
|
|
2
2
|
import { WebSocket } from 'ws';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import fs from 'fs';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
5
6
|
import { createInitScript } from './context-helper.js';
|
|
6
7
|
import { getShellPath, getShellArgs, prepareShellInit } from './shell-utils.js';
|
|
7
8
|
import { getLogger, AgentKinds } from '@lovelybunch/core/logging';
|
|
8
9
|
import { getInjectedEnv } from '../env-injection.js';
|
|
10
|
+
/**
|
|
11
|
+
* Workaround for node-pty#850: macOS prebuilds (v1.1.0+) ship spawn-helper
|
|
12
|
+
* without the execute bit, causing posix_spawnp to fail.
|
|
13
|
+
* https://github.com/microsoft/node-pty/issues/850
|
|
14
|
+
*/
|
|
15
|
+
function ensureSpawnHelperPermissions() {
|
|
16
|
+
if (process.platform !== 'darwin')
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
const nodePtyEntry = import.meta.resolve('node-pty');
|
|
20
|
+
const nodePtyDir = path.resolve(fileURLToPath(nodePtyEntry), '..', '..');
|
|
21
|
+
for (const arch of ['darwin-arm64', 'darwin-x64']) {
|
|
22
|
+
const helperPath = path.join(nodePtyDir, 'prebuilds', arch, 'spawn-helper');
|
|
23
|
+
if (fs.existsSync(helperPath)) {
|
|
24
|
+
const stats = fs.statSync(helperPath);
|
|
25
|
+
if (!(stats.mode & 0o111)) {
|
|
26
|
+
fs.chmodSync(helperPath, 0o755);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Best-effort; node-pty 1.0.0 has no prebuilds dir and this is a no-op
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
let spawnHelperFixed = false;
|
|
9
36
|
export class TerminalManager {
|
|
10
37
|
sessions = new Map();
|
|
11
38
|
cleanupInterval;
|
|
@@ -17,6 +44,10 @@ export class TerminalManager {
|
|
|
17
44
|
}, 5 * 60 * 1000);
|
|
18
45
|
}
|
|
19
46
|
async createSession(taskId, shellPreference = 'bash', startupCommand) {
|
|
47
|
+
if (!spawnHelperFixed) {
|
|
48
|
+
ensureSpawnHelperPermissions();
|
|
49
|
+
spawnHelperFixed = true;
|
|
50
|
+
}
|
|
20
51
|
const sessionId = `${taskId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
21
52
|
// Get the project root directory
|
|
22
53
|
let projectRoot;
|
|
@@ -7,7 +7,7 @@ import { ZodError } from 'zod';
|
|
|
7
7
|
import { streamText, tool, jsonSchema, stepCountIs } from 'ai';
|
|
8
8
|
import { createAnthropic } from '@ai-sdk/anthropic';
|
|
9
9
|
import { getLogsDir, listTasks, getTask, createTask, updateTask, deleteTask, } from '@lovelybunch/core';
|
|
10
|
-
import { tasksFullTool, knowledgeTool, normalizeKnowledgeMetadata, eventsTool, projectContextTool, architectureContextTool, roleContextTool, resourcesTool } from '@lovelybunch/mcp';
|
|
10
|
+
import { tasksFullTool, knowledgeTool, normalizeKnowledgeMetadata, eventsTool, projectContextTool, architectureContextTool, roleContextTool, resourcesTool, listConnectorsTool, connectorRequestTool, resolveConnectorUrl } from '@lovelybunch/mcp';
|
|
11
11
|
import matter from 'gray-matter';
|
|
12
12
|
import Fuse from 'fuse.js';
|
|
13
13
|
import { FileStorageAdapter } from '../../../../lib/storage/file-storage.js';
|
|
@@ -152,6 +152,22 @@ export async function POST(c) {
|
|
|
152
152
|
return JSON.stringify(result);
|
|
153
153
|
},
|
|
154
154
|
}),
|
|
155
|
+
list_connectors: tool({
|
|
156
|
+
description: listConnectorsTool.description,
|
|
157
|
+
inputSchema: jsonSchema(listConnectorsTool.parameters),
|
|
158
|
+
execute: async () => {
|
|
159
|
+
const result = await executeListConnectorsToolDirect();
|
|
160
|
+
return JSON.stringify(result);
|
|
161
|
+
},
|
|
162
|
+
}),
|
|
163
|
+
connector_request: tool({
|
|
164
|
+
description: connectorRequestTool.description,
|
|
165
|
+
inputSchema: jsonSchema(connectorRequestTool.parameters),
|
|
166
|
+
execute: async (args) => {
|
|
167
|
+
const result = await executeConnectorRequestToolDirect(args);
|
|
168
|
+
return JSON.stringify(result);
|
|
169
|
+
},
|
|
170
|
+
}),
|
|
155
171
|
};
|
|
156
172
|
// Debug logging
|
|
157
173
|
console.log('AI Request Debug:', {
|
|
@@ -1362,3 +1378,122 @@ function getSystemPrompt() {
|
|
|
1362
1378
|
}
|
|
1363
1379
|
return basePrompt;
|
|
1364
1380
|
}
|
|
1381
|
+
const COCONUT_HOST = 'https://app.coconut.dev';
|
|
1382
|
+
async function executeListConnectorsToolDirect() {
|
|
1383
|
+
const token = getGlobalApiKey('callbackToken');
|
|
1384
|
+
if (!token) {
|
|
1385
|
+
return {
|
|
1386
|
+
success: false,
|
|
1387
|
+
error: 'Callback token not configured. Set it via Settings > API Keys or PUT /api/v1/config?type=global with { "apiKeys": { "callbackToken": "cpt_xxx" } }'
|
|
1388
|
+
};
|
|
1389
|
+
}
|
|
1390
|
+
try {
|
|
1391
|
+
const res = await fetch(`${COCONUT_HOST}/api/connectors/accounts`, {
|
|
1392
|
+
headers: { 'X-Callback-Token': token }
|
|
1393
|
+
});
|
|
1394
|
+
if (!res.ok) {
|
|
1395
|
+
const body = await res.text().catch(() => '');
|
|
1396
|
+
return { success: false, error: `Control plane returned ${res.status}: ${body || res.statusText}` };
|
|
1397
|
+
}
|
|
1398
|
+
const data = await res.json();
|
|
1399
|
+
const accounts = Array.isArray(data) ? data : (data.accounts ?? data.data ?? []);
|
|
1400
|
+
return {
|
|
1401
|
+
success: true,
|
|
1402
|
+
data: accounts,
|
|
1403
|
+
count: accounts.length,
|
|
1404
|
+
message: `Found ${accounts.length} connected service${accounts.length === 1 ? '' : 's'}`
|
|
1405
|
+
};
|
|
1406
|
+
}
|
|
1407
|
+
catch (error) {
|
|
1408
|
+
return { success: false, error: error.message || 'Failed to list connectors' };
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
async function executeConnectorRequestToolDirect(args) {
|
|
1412
|
+
const { app: appSlug, method, path: apiPath, body, headers: extraHeaders } = args;
|
|
1413
|
+
if (!appSlug || !method || !apiPath) {
|
|
1414
|
+
return { success: false, error: 'app, method, and path are required' };
|
|
1415
|
+
}
|
|
1416
|
+
const token = getGlobalApiKey('callbackToken');
|
|
1417
|
+
if (!token) {
|
|
1418
|
+
return {
|
|
1419
|
+
success: false,
|
|
1420
|
+
error: 'Callback token not configured. Set it via Settings > API Keys or PUT /api/v1/config?type=global with { "apiKeys": { "callbackToken": "cpt_xxx" } }'
|
|
1421
|
+
};
|
|
1422
|
+
}
|
|
1423
|
+
try {
|
|
1424
|
+
const accountsRes = await fetch(`${COCONUT_HOST}/api/connectors/accounts`, {
|
|
1425
|
+
headers: { 'X-Callback-Token': token }
|
|
1426
|
+
});
|
|
1427
|
+
if (!accountsRes.ok) {
|
|
1428
|
+
const errBody = await accountsRes.text().catch(() => '');
|
|
1429
|
+
return { success: false, error: `Failed to fetch accounts (${accountsRes.status}): ${errBody || accountsRes.statusText}` };
|
|
1430
|
+
}
|
|
1431
|
+
const accountsData = await accountsRes.json();
|
|
1432
|
+
const accounts = Array.isArray(accountsData) ? accountsData : (accountsData.accounts ?? accountsData.data ?? []);
|
|
1433
|
+
const account = accounts.find((a) => a.appSlug === appSlug || a.appName?.toLowerCase() === appSlug.toLowerCase());
|
|
1434
|
+
if (!account) {
|
|
1435
|
+
return {
|
|
1436
|
+
success: false,
|
|
1437
|
+
error: `No connected account found for "${appSlug}"`,
|
|
1438
|
+
available: accounts.map((a) => a.appSlug || a.appName)
|
|
1439
|
+
};
|
|
1440
|
+
}
|
|
1441
|
+
const url = resolveConnectorUrl(appSlug, apiPath);
|
|
1442
|
+
if (!url) {
|
|
1443
|
+
return {
|
|
1444
|
+
success: false,
|
|
1445
|
+
error: `Unknown app "${appSlug}" and path is not a full URL. Use a full URL (https://...) or a known app slug.`
|
|
1446
|
+
};
|
|
1447
|
+
}
|
|
1448
|
+
let parsedBody = undefined;
|
|
1449
|
+
if (body) {
|
|
1450
|
+
try {
|
|
1451
|
+
parsedBody = typeof body === 'string' ? JSON.parse(body) : body;
|
|
1452
|
+
}
|
|
1453
|
+
catch {
|
|
1454
|
+
return { success: false, error: 'Invalid JSON in body parameter' };
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
let parsedHeaders = {};
|
|
1458
|
+
if (extraHeaders) {
|
|
1459
|
+
try {
|
|
1460
|
+
parsedHeaders = typeof extraHeaders === 'string' ? JSON.parse(extraHeaders) : extraHeaders;
|
|
1461
|
+
}
|
|
1462
|
+
catch {
|
|
1463
|
+
return { success: false, error: 'Invalid JSON in headers parameter' };
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1466
|
+
const proxyPayload = {
|
|
1467
|
+
accountId: account.accountId,
|
|
1468
|
+
url,
|
|
1469
|
+
method: method.toUpperCase()
|
|
1470
|
+
};
|
|
1471
|
+
if (parsedBody !== undefined)
|
|
1472
|
+
proxyPayload.body = parsedBody;
|
|
1473
|
+
if (Object.keys(parsedHeaders).length > 0)
|
|
1474
|
+
proxyPayload.headers = parsedHeaders;
|
|
1475
|
+
const proxyRes = await fetch(`${COCONUT_HOST}/api/connectors/proxy`, {
|
|
1476
|
+
method: 'POST',
|
|
1477
|
+
headers: {
|
|
1478
|
+
'Content-Type': 'application/json',
|
|
1479
|
+
'X-Callback-Token': token
|
|
1480
|
+
},
|
|
1481
|
+
body: JSON.stringify(proxyPayload)
|
|
1482
|
+
});
|
|
1483
|
+
if (!proxyRes.ok) {
|
|
1484
|
+
const errBody = await proxyRes.text().catch(() => '');
|
|
1485
|
+
return { success: false, error: `Proxy request failed (${proxyRes.status}): ${errBody || proxyRes.statusText}` };
|
|
1486
|
+
}
|
|
1487
|
+
const responseData = await proxyRes.json().catch(async () => {
|
|
1488
|
+
return await proxyRes.text().catch(() => null);
|
|
1489
|
+
});
|
|
1490
|
+
return {
|
|
1491
|
+
success: true,
|
|
1492
|
+
data: responseData,
|
|
1493
|
+
message: `${method.toUpperCase()} ${apiPath} via ${appSlug}`
|
|
1494
|
+
};
|
|
1495
|
+
}
|
|
1496
|
+
catch (error) {
|
|
1497
|
+
return { success: false, error: error.message || 'Connector request failed' };
|
|
1498
|
+
}
|
|
1499
|
+
}
|