@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
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import matter from 'gray-matter';
|
|
5
|
+
import { findGaitDirectory } from '../../../../../lib/gait-path.js';
|
|
6
|
+
import { getLogger, ContextKinds } from '@lovelybunch/core/logging';
|
|
7
|
+
import { requireAuth } from '../../../../../middleware/auth.js';
|
|
8
|
+
function generateSummary(content, maxLines = 3, maxChars = 200) {
|
|
9
|
+
const cleanContent = content
|
|
10
|
+
.replace(/^#+\s+/gm, '')
|
|
11
|
+
.replace(/[*_`]/g, '')
|
|
12
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
|
|
13
|
+
.trim();
|
|
14
|
+
const lines = cleanContent.split('\n').filter(line => line.trim().length > 0);
|
|
15
|
+
const summary = lines.slice(0, maxLines).join(' ');
|
|
16
|
+
return summary.length > maxChars
|
|
17
|
+
? summary.substring(0, maxChars) + '...'
|
|
18
|
+
: summary;
|
|
19
|
+
}
|
|
20
|
+
const app = new Hono();
|
|
21
|
+
async function getMemoryPath() {
|
|
22
|
+
const gaitDir = await findGaitDirectory();
|
|
23
|
+
if (!gaitDir)
|
|
24
|
+
return null;
|
|
25
|
+
return path.join(gaitDir, 'context');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* GET /api/v1/context/memory
|
|
29
|
+
*/
|
|
30
|
+
app.get('/', async (c) => {
|
|
31
|
+
try {
|
|
32
|
+
const memoryPath = await getMemoryPath();
|
|
33
|
+
if (!memoryPath) {
|
|
34
|
+
return c.json({ success: false, error: 'GAIT directory not found' }, 404);
|
|
35
|
+
}
|
|
36
|
+
await fs.mkdir(memoryPath, { recursive: true });
|
|
37
|
+
const filePath = path.join(memoryPath, 'memory.md');
|
|
38
|
+
try {
|
|
39
|
+
const fileContent = await fs.readFile(filePath, 'utf-8');
|
|
40
|
+
const { data, content } = matter(fileContent);
|
|
41
|
+
const title = content.match(/^#\s+(.+)$/m)?.[1] || 'Memory';
|
|
42
|
+
const document = {
|
|
43
|
+
filename: 'memory.md',
|
|
44
|
+
metadata: {
|
|
45
|
+
...data,
|
|
46
|
+
updated: data.updated || new Date().toISOString().split('T')[0],
|
|
47
|
+
type: 'memory',
|
|
48
|
+
category: 'context',
|
|
49
|
+
tags: data.tags || []
|
|
50
|
+
},
|
|
51
|
+
content,
|
|
52
|
+
title
|
|
53
|
+
};
|
|
54
|
+
return c.json({ success: true, document });
|
|
55
|
+
}
|
|
56
|
+
catch (fileError) {
|
|
57
|
+
const defaultContent = `# Memory
|
|
58
|
+
|
|
59
|
+
This document stores persistent memory and learned context.
|
|
60
|
+
|
|
61
|
+
## Key Decisions
|
|
62
|
+
|
|
63
|
+
Important decisions made during the project.
|
|
64
|
+
|
|
65
|
+
## Lessons Learned
|
|
66
|
+
|
|
67
|
+
Insights and patterns discovered over time.
|
|
68
|
+
|
|
69
|
+
## Preferences
|
|
70
|
+
|
|
71
|
+
Remembered preferences and conventions.
|
|
72
|
+
`;
|
|
73
|
+
const document = {
|
|
74
|
+
filename: 'memory.md',
|
|
75
|
+
metadata: {
|
|
76
|
+
version: '1.0',
|
|
77
|
+
updated: new Date().toISOString().split('T')[0],
|
|
78
|
+
type: 'memory',
|
|
79
|
+
category: 'context',
|
|
80
|
+
tags: []
|
|
81
|
+
},
|
|
82
|
+
content: defaultContent,
|
|
83
|
+
title: 'Memory'
|
|
84
|
+
};
|
|
85
|
+
return c.json({ success: true, document });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
console.error('Error loading memory document:', error);
|
|
90
|
+
return c.json({ success: false, error: 'Failed to load memory document' }, 500);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
/**
|
|
94
|
+
* PUT /api/v1/context/memory
|
|
95
|
+
*/
|
|
96
|
+
app.put('/', async (c) => {
|
|
97
|
+
try {
|
|
98
|
+
const body = await c.req.json();
|
|
99
|
+
if (!body.content) {
|
|
100
|
+
return c.json({ success: false, error: 'Content is required' }, 400);
|
|
101
|
+
}
|
|
102
|
+
const memoryPath = await getMemoryPath();
|
|
103
|
+
if (!memoryPath) {
|
|
104
|
+
return c.json({ success: false, error: 'GAIT directory not found' }, 404);
|
|
105
|
+
}
|
|
106
|
+
await fs.mkdir(memoryPath, { recursive: true });
|
|
107
|
+
const filePath = path.join(memoryPath, 'memory.md');
|
|
108
|
+
let currentData = {};
|
|
109
|
+
try {
|
|
110
|
+
const currentContent = await fs.readFile(filePath, 'utf-8');
|
|
111
|
+
const { data } = matter(currentContent);
|
|
112
|
+
currentData = data;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// File doesn't exist, use defaults
|
|
116
|
+
}
|
|
117
|
+
const updatedMetadata = {
|
|
118
|
+
...currentData,
|
|
119
|
+
...body.metadata,
|
|
120
|
+
updated: new Date().toISOString().split('T')[0],
|
|
121
|
+
type: 'memory',
|
|
122
|
+
category: 'context',
|
|
123
|
+
version: currentData.version || '1.0'
|
|
124
|
+
};
|
|
125
|
+
const fileContent = matter.stringify(body.content, updatedMetadata);
|
|
126
|
+
await fs.writeFile(filePath, fileContent, 'utf-8');
|
|
127
|
+
const title = body.title ||
|
|
128
|
+
body.content.match(/^#\s+(.+)$/m)?.[1] ||
|
|
129
|
+
'Memory';
|
|
130
|
+
try {
|
|
131
|
+
const session = await requireAuth(c);
|
|
132
|
+
const actor = session ? `human:${session.email}` : "human:unknown";
|
|
133
|
+
const logger = getLogger();
|
|
134
|
+
logger.log({
|
|
135
|
+
kind: ContextKinds.MEMORY_UPDATE,
|
|
136
|
+
actor,
|
|
137
|
+
subject: `context:memory.md`,
|
|
138
|
+
tags: ["context", "memory"],
|
|
139
|
+
payload: {
|
|
140
|
+
title,
|
|
141
|
+
summary: generateSummary(body.content),
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (logError) {
|
|
146
|
+
console.error('Error logging memory update:', logError);
|
|
147
|
+
}
|
|
148
|
+
return c.json({
|
|
149
|
+
success: true,
|
|
150
|
+
document: {
|
|
151
|
+
filename: 'memory.md',
|
|
152
|
+
title,
|
|
153
|
+
metadata: updatedMetadata,
|
|
154
|
+
content: body.content
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.error('Error updating memory document:', error);
|
|
160
|
+
return c.json({ success: false, error: 'Failed to update memory document' }, 500);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
export default app;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import matter from 'gray-matter';
|
|
5
|
+
import { findGaitDirectory } from '../../../../../lib/gait-path.js';
|
|
6
|
+
import { getLogger, ContextKinds } from '@lovelybunch/core/logging';
|
|
7
|
+
import { requireAuth } from '../../../../../middleware/auth.js';
|
|
8
|
+
function generateSummary(content, maxLines = 3, maxChars = 200) {
|
|
9
|
+
const cleanContent = content
|
|
10
|
+
.replace(/^#+\s+/gm, '')
|
|
11
|
+
.replace(/[*_`]/g, '')
|
|
12
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
|
|
13
|
+
.trim();
|
|
14
|
+
const lines = cleanContent.split('\n').filter(line => line.trim().length > 0);
|
|
15
|
+
const summary = lines.slice(0, maxLines).join(' ');
|
|
16
|
+
return summary.length > maxChars
|
|
17
|
+
? summary.substring(0, maxChars) + '...'
|
|
18
|
+
: summary;
|
|
19
|
+
}
|
|
20
|
+
const app = new Hono();
|
|
21
|
+
async function getTeamPath() {
|
|
22
|
+
const gaitDir = await findGaitDirectory();
|
|
23
|
+
if (!gaitDir)
|
|
24
|
+
return null;
|
|
25
|
+
return path.join(gaitDir, 'context');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* GET /api/v1/context/team
|
|
29
|
+
*/
|
|
30
|
+
app.get('/', async (c) => {
|
|
31
|
+
try {
|
|
32
|
+
const teamPath = await getTeamPath();
|
|
33
|
+
if (!teamPath) {
|
|
34
|
+
return c.json({ success: false, error: 'GAIT directory not found' }, 404);
|
|
35
|
+
}
|
|
36
|
+
await fs.mkdir(teamPath, { recursive: true });
|
|
37
|
+
const filePath = path.join(teamPath, 'team.md');
|
|
38
|
+
try {
|
|
39
|
+
const fileContent = await fs.readFile(filePath, 'utf-8');
|
|
40
|
+
const { data, content } = matter(fileContent);
|
|
41
|
+
const title = content.match(/^#\s+(.+)$/m)?.[1] || 'Team';
|
|
42
|
+
const document = {
|
|
43
|
+
filename: 'team.md',
|
|
44
|
+
metadata: {
|
|
45
|
+
...data,
|
|
46
|
+
updated: data.updated || new Date().toISOString().split('T')[0],
|
|
47
|
+
type: 'team',
|
|
48
|
+
category: 'context',
|
|
49
|
+
tags: data.tags || []
|
|
50
|
+
},
|
|
51
|
+
content,
|
|
52
|
+
title
|
|
53
|
+
};
|
|
54
|
+
return c.json({ success: true, document });
|
|
55
|
+
}
|
|
56
|
+
catch (fileError) {
|
|
57
|
+
const defaultContent = `# Team
|
|
58
|
+
|
|
59
|
+
This document describes the team structure and members.
|
|
60
|
+
|
|
61
|
+
## Team Members
|
|
62
|
+
|
|
63
|
+
List team members, their roles, and responsibilities.
|
|
64
|
+
|
|
65
|
+
## Communication
|
|
66
|
+
|
|
67
|
+
Team communication channels and conventions.
|
|
68
|
+
`;
|
|
69
|
+
const document = {
|
|
70
|
+
filename: 'team.md',
|
|
71
|
+
metadata: {
|
|
72
|
+
version: '1.0',
|
|
73
|
+
updated: new Date().toISOString().split('T')[0],
|
|
74
|
+
type: 'team',
|
|
75
|
+
category: 'context',
|
|
76
|
+
tags: []
|
|
77
|
+
},
|
|
78
|
+
content: defaultContent,
|
|
79
|
+
title: 'Team'
|
|
80
|
+
};
|
|
81
|
+
return c.json({ success: true, document });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error('Error loading team document:', error);
|
|
86
|
+
return c.json({ success: false, error: 'Failed to load team document' }, 500);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
/**
|
|
90
|
+
* PUT /api/v1/context/team
|
|
91
|
+
*/
|
|
92
|
+
app.put('/', async (c) => {
|
|
93
|
+
try {
|
|
94
|
+
const body = await c.req.json();
|
|
95
|
+
if (!body.content) {
|
|
96
|
+
return c.json({ success: false, error: 'Content is required' }, 400);
|
|
97
|
+
}
|
|
98
|
+
const teamPath = await getTeamPath();
|
|
99
|
+
if (!teamPath) {
|
|
100
|
+
return c.json({ success: false, error: 'GAIT directory not found' }, 404);
|
|
101
|
+
}
|
|
102
|
+
await fs.mkdir(teamPath, { recursive: true });
|
|
103
|
+
const filePath = path.join(teamPath, 'team.md');
|
|
104
|
+
let currentData = {};
|
|
105
|
+
try {
|
|
106
|
+
const currentContent = await fs.readFile(filePath, 'utf-8');
|
|
107
|
+
const { data } = matter(currentContent);
|
|
108
|
+
currentData = data;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// File doesn't exist, use defaults
|
|
112
|
+
}
|
|
113
|
+
const updatedMetadata = {
|
|
114
|
+
...currentData,
|
|
115
|
+
...body.metadata,
|
|
116
|
+
updated: new Date().toISOString().split('T')[0],
|
|
117
|
+
type: 'team',
|
|
118
|
+
category: 'context',
|
|
119
|
+
version: currentData.version || '1.0'
|
|
120
|
+
};
|
|
121
|
+
const fileContent = matter.stringify(body.content, updatedMetadata);
|
|
122
|
+
await fs.writeFile(filePath, fileContent, 'utf-8');
|
|
123
|
+
const title = body.title ||
|
|
124
|
+
body.content.match(/^#\s+(.+)$/m)?.[1] ||
|
|
125
|
+
'Team';
|
|
126
|
+
try {
|
|
127
|
+
const session = await requireAuth(c);
|
|
128
|
+
const actor = session ? `human:${session.email}` : "human:unknown";
|
|
129
|
+
const logger = getLogger();
|
|
130
|
+
logger.log({
|
|
131
|
+
kind: ContextKinds.TEAM_UPDATE,
|
|
132
|
+
actor,
|
|
133
|
+
subject: `context:team.md`,
|
|
134
|
+
tags: ["context", "team"],
|
|
135
|
+
payload: {
|
|
136
|
+
title,
|
|
137
|
+
summary: generateSummary(body.content),
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (logError) {
|
|
142
|
+
console.error('Error logging team update:', logError);
|
|
143
|
+
}
|
|
144
|
+
return c.json({
|
|
145
|
+
success: true,
|
|
146
|
+
document: {
|
|
147
|
+
filename: 'team.md',
|
|
148
|
+
title,
|
|
149
|
+
metadata: updatedMetadata,
|
|
150
|
+
content: body.content
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
console.error('Error updating team document:', error);
|
|
156
|
+
return c.json({ success: false, error: 'Failed to update team document' }, 500);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
export default app;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import crypto from 'crypto';
|
|
3
|
-
import { getRepoStatus, listBranches, createBranch, deleteBranch, switchBranch, mergeBranch, pushCurrent, pullCurrent, listWorktrees, addWorktree, removeWorktree, commitInWorktree, pushWorktree, pullWorktree, checkRemoteAuth, getCredentialConfig, storeCredentials, getCommitDetails, getFileDiff, setRemoteUrl, } from '../../../../lib/git.js';
|
|
3
|
+
import { getRepoStatus, listBranches, createBranch, deleteBranch, switchBranch, mergeBranch, pushCurrent, pullCurrent, listWorktrees, addWorktree, removeWorktree, commitInWorktree, pushWorktree, pullWorktree, checkRemoteAuth, getCredentialConfig, storeCredentials, getCommitDetails, getFileDiff, setRemoteUrl, lsTree, getInstructionFiles, } from '../../../../lib/git.js';
|
|
4
|
+
import { INSTRUCTION_FILE_KINDS } from '@lovelybunch/types';
|
|
4
5
|
import { saveGithubToken, clearGithubToken, readGithubToken, isGithubTokenValid } from '../../../../lib/github-token.js';
|
|
5
6
|
import { createGithubAuthState, consumeGithubAuthState } from '../../../../lib/github-auth-state.js';
|
|
6
7
|
import { resolveCoconutId, resolveControlPlaneUrl } from '../../../../lib/coconut-context.js';
|
|
@@ -674,4 +675,29 @@ app.get('/commits/:sha/files/:filepath{.+}', async (c) => {
|
|
|
674
675
|
return c.json({ success: false, error: { message: e.message || 'Failed to get file diff' } }, 500);
|
|
675
676
|
}
|
|
676
677
|
});
|
|
678
|
+
// ls-tree
|
|
679
|
+
app.get('/ls-tree', async (c) => {
|
|
680
|
+
try {
|
|
681
|
+
const files = await lsTree();
|
|
682
|
+
return c.json({ success: true, data: files });
|
|
683
|
+
}
|
|
684
|
+
catch (e) {
|
|
685
|
+
return c.json({ success: false, error: { message: e.message || 'Failed to list tree' } }, 500);
|
|
686
|
+
}
|
|
687
|
+
});
|
|
688
|
+
// instruction-files
|
|
689
|
+
const VALID_FILTERS = new Set([...INSTRUCTION_FILE_KINDS, 'all']);
|
|
690
|
+
app.get('/instruction-files', async (c) => {
|
|
691
|
+
try {
|
|
692
|
+
const kind = (c.req.query('kind') || 'all');
|
|
693
|
+
if (!VALID_FILTERS.has(kind)) {
|
|
694
|
+
return c.json({ success: false, error: { message: `Invalid kind. Must be one of: ${[...VALID_FILTERS].join(', ')}` } }, 400);
|
|
695
|
+
}
|
|
696
|
+
const data = await getInstructionFiles(kind);
|
|
697
|
+
return c.json({ success: true, data });
|
|
698
|
+
}
|
|
699
|
+
catch (e) {
|
|
700
|
+
return c.json({ success: false, error: { message: e.message || 'Failed to retrieve instruction files' } }, 500);
|
|
701
|
+
}
|
|
702
|
+
});
|
|
677
703
|
export default app;
|
|
@@ -3,6 +3,7 @@ import { promises as fs } from 'fs';
|
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import matter from 'gray-matter';
|
|
5
5
|
import filenameRoute from './[filename]/index.js';
|
|
6
|
+
import { listKnowledge } from '@lovelybunch/core';
|
|
6
7
|
import { getLogger, KnowledgeKinds } from '@lovelybunch/core/logging';
|
|
7
8
|
import { requireAuth } from '../../../../middleware/auth.js';
|
|
8
9
|
// Helper function to generate a simple summary from content
|
|
@@ -50,43 +51,36 @@ function generateFilename(title) {
|
|
|
50
51
|
}
|
|
51
52
|
/**
|
|
52
53
|
* GET /api/v1/knowledge
|
|
53
|
-
* Load all knowledge documents
|
|
54
|
+
* Load all knowledge documents.
|
|
55
|
+
*
|
|
56
|
+
* Query params:
|
|
57
|
+
* q - search/filter query (fuzzy match on title, content, tags, category)
|
|
58
|
+
* full - set to "true" to include the full markdown content (default: summary only)
|
|
59
|
+
* limit - max results per page (1-100)
|
|
60
|
+
* offset - number of results to skip (for pagination, default: 0)
|
|
54
61
|
*/
|
|
55
62
|
app.get('/', async (c) => {
|
|
56
63
|
try {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
]);
|
|
69
|
-
const { data, content } = matter(fileContent);
|
|
70
|
-
// Extract title from metadata, first heading, or use filename
|
|
71
|
-
const title = data.title ||
|
|
72
|
-
content.match(/^#\s+(.+)$/m)?.[1] ||
|
|
73
|
-
file.replace('.md', '').replace(/[_-]/g, ' ').replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());
|
|
74
|
-
return {
|
|
75
|
-
filename: file,
|
|
76
|
-
metadata: {
|
|
77
|
-
...data,
|
|
78
|
-
title, // Include title in metadata
|
|
79
|
-
updated: stats.mtime.toISOString(),
|
|
80
|
-
tags: data.tags || [],
|
|
81
|
-
sources: data.sources || []
|
|
82
|
-
},
|
|
83
|
-
content,
|
|
84
|
-
title
|
|
85
|
-
};
|
|
86
|
-
}));
|
|
64
|
+
const query = c.req.query('q') || undefined;
|
|
65
|
+
const full = c.req.query('full') === 'true';
|
|
66
|
+
const limitParam = c.req.query('limit');
|
|
67
|
+
const limit = limitParam ? Math.min(Math.max(1, parseInt(limitParam, 10) || 20), 100) : undefined;
|
|
68
|
+
const offsetParam = c.req.query('offset');
|
|
69
|
+
const offset = offsetParam ? Math.max(0, parseInt(offsetParam, 10) || 0) : 0;
|
|
70
|
+
let documents = await listKnowledge({ query, full });
|
|
71
|
+
const totalCount = documents.length;
|
|
72
|
+
if (limit !== undefined || offset > 0) {
|
|
73
|
+
documents = documents.slice(offset, limit !== undefined ? offset + limit : undefined);
|
|
74
|
+
}
|
|
87
75
|
return c.json({
|
|
88
76
|
success: true,
|
|
89
|
-
|
|
77
|
+
query,
|
|
78
|
+
full,
|
|
79
|
+
totalCount,
|
|
80
|
+
count: documents.length,
|
|
81
|
+
...(limit !== undefined && { limit }),
|
|
82
|
+
offset,
|
|
83
|
+
documents,
|
|
90
84
|
});
|
|
91
85
|
}
|
|
92
86
|
catch (error) {
|
|
@@ -116,7 +116,7 @@ export declare function setMailStatusHandler(c: Context): Promise<(Response & im
|
|
|
116
116
|
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
117
117
|
success: false;
|
|
118
118
|
error: any;
|
|
119
|
-
},
|
|
119
|
+
}, 404 | 500, "json">)>;
|
|
120
120
|
/**
|
|
121
121
|
* POST /api/v1/mail/:id/reply
|
|
122
122
|
* Reply to an email
|
|
@@ -154,7 +154,7 @@ export declare function replyMailHandler(c: Context): Promise<(Response & import
|
|
|
154
154
|
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
155
155
|
success: false;
|
|
156
156
|
error: any;
|
|
157
|
-
},
|
|
157
|
+
}, 404 | 500, "json">)>;
|
|
158
158
|
/**
|
|
159
159
|
* POST /api/v1/mail/send
|
|
160
160
|
* Send an email (coming soon)
|
|
@@ -217,7 +217,7 @@ export declare function setMailActionHandler(c: Context): Promise<(Response & im
|
|
|
217
217
|
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
218
218
|
success: false;
|
|
219
219
|
error: any;
|
|
220
|
-
},
|
|
220
|
+
}, 404 | 500, "json">)>;
|
|
221
221
|
/**
|
|
222
222
|
* GET /api/v1/mail/:id/processing
|
|
223
223
|
* Get processing status and log tail for an email
|