@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.
Files changed (543) hide show
  1. package/dist/lib/auth/auth-manager.js +1 -1
  2. package/dist/lib/git.d.ts +3 -0
  3. package/dist/lib/git.js +35 -0
  4. package/dist/lib/mcp-client.d.ts +39 -0
  5. package/dist/lib/mcp-client.js +131 -0
  6. package/dist/lib/terminal/terminal-manager.js +31 -0
  7. package/dist/routes/api/v1/ai/route.js +136 -1
  8. package/dist/routes/api/v1/ai/tools.js +49 -232
  9. package/dist/routes/api/v1/config/route.js +13 -9
  10. package/dist/routes/api/v1/context/agents/route.d.ts +3 -0
  11. package/dist/routes/api/v1/context/agents/route.js +159 -0
  12. package/dist/routes/api/v1/context/index.js +6 -0
  13. package/dist/routes/api/v1/context/memory/route.d.ts +3 -0
  14. package/dist/routes/api/v1/context/memory/route.js +163 -0
  15. package/dist/routes/api/v1/context/team/route.d.ts +3 -0
  16. package/dist/routes/api/v1/context/team/route.js +159 -0
  17. package/dist/routes/api/v1/git/index.js +27 -1
  18. package/dist/routes/api/v1/knowledge/route.js +26 -32
  19. package/dist/routes/api/v1/mail/route.d.ts +3 -3
  20. package/dist/routes/api/v1/mcp/index.js +170 -4
  21. package/dist/routes/api/v1/proposals/[id]/route.d.ts +10 -24
  22. package/dist/routes/api/v1/proposals/[id]/route.js +10 -1
  23. package/dist/routes/api/v1/proposals/route.d.ts +2 -16
  24. package/dist/routes/api/v1/proposals/route.js +11 -8
  25. package/dist/routes/api/v1/resources/generate/route.js +10 -3
  26. package/dist/routes/api/v1/tasks/route.d.ts +18 -38
  27. package/dist/routes/api/v1/tasks/route.js +94 -16
  28. package/dist/routes/api/v1/terminal/[proposalId]/create/route.js +2 -2
  29. package/dist/routes/api/v1/terminal/code/index.d.ts +3 -0
  30. package/dist/routes/api/v1/terminal/code/index.js +5 -0
  31. package/dist/routes/api/v1/terminal/code/route.d.ts +14 -0
  32. package/dist/routes/api/v1/terminal/code/route.js +159 -0
  33. package/dist/server-with-static.js +2 -0
  34. package/dist/server.js +2 -0
  35. package/package.json +6 -7
  36. package/static/assets/ActivityPage-CUPUsmhW.js +1 -0
  37. package/static/assets/ActivityPage-DGW0f70r.js +1 -0
  38. package/static/assets/AgentsContextEditPage-CBZaG033.js +9 -0
  39. package/static/assets/AgentsContextEditPage-CJbx9qwA.js +9 -0
  40. package/static/assets/AgentsContextPage-BWzSvM5V.js +1 -0
  41. package/static/assets/AgentsContextPage-C1wcPVUs.js +1 -0
  42. package/static/assets/{ApiKeysSettingsPage-DbXgxh7i.js → ApiKeysSettingsPage-CauZEPsx.js} +2 -2
  43. package/static/assets/ApiKeysSettingsPage-Ceww_YUR.js +2 -0
  44. package/static/assets/ArchitectureEditPage-DZhYQihz.js +15 -0
  45. package/static/assets/ArchitectureEditPage-Dk8NNc4k.js +15 -0
  46. package/static/assets/ArchitecturePage-Cvj4j0Mo.js +1 -0
  47. package/static/assets/ArchitecturePage-D0gLaPg5.js +1 -0
  48. package/static/assets/{AuthSettingsPage-nIgM05Yw.js → AuthSettingsPage-22eaC7la.js} +2 -2
  49. package/static/assets/AuthSettingsPage-BHPV0uSB.js +11 -0
  50. package/static/assets/{CallbackPage-NNbLun2S.js → CallbackPage-DCf0WTl0.js} +1 -1
  51. package/static/assets/CallbackPage-buKCnkYC.js +1 -0
  52. package/static/assets/CodePage-CuyF2xDA.js +2 -0
  53. package/static/assets/CodePage-x32C4yuN.js +2 -0
  54. package/static/assets/{CollapsibleSection-DbKW4cyU.js → CollapsibleSection-CUHXgJIe.js} +1 -1
  55. package/static/assets/CollapsibleSection-DMf0wWjc.js +1 -0
  56. package/static/assets/DashboardPage-DIU-4dPO.js +41 -0
  57. package/static/assets/DashboardPage-Dr4S3wVm.js +41 -0
  58. package/static/assets/{GitPage-Hi0mdDOi.js → GitPage-BGHRNljT.js} +4 -4
  59. package/static/assets/GitPage-DpCcZosR.js +16 -0
  60. package/static/assets/{GitSettingsPage-2vuCM-U-.js → GitSettingsPage-A4ty6ftB.js} +2 -2
  61. package/static/assets/GitSettingsPage-BRuP4Ihk.js +6 -0
  62. package/static/assets/{IdentityPage-2BzLc2EI.js → IdentityPage-4xn0DPW8.js} +2 -2
  63. package/static/assets/IdentityPage-Bps9Zjk3.js +6 -0
  64. package/static/assets/{ImplementationStepsEditor-BlmI5YuN.js → ImplementationStepsEditor-CaMsbJPb.js} +2 -2
  65. package/static/assets/ImplementationStepsEditor-KJkRc2Jn.js +6 -0
  66. package/static/assets/IntegrationsSettingsPage-B1sX003q.js +1 -0
  67. package/static/assets/IntegrationsSettingsPage-CpTuAA-H.js +1 -0
  68. package/static/assets/{JobDetailPage-CLEY1Z5e.js → JobDetailPage-BdYlGn4G.js} +1 -1
  69. package/static/assets/JobDetailPage-C5N3IyX3.js +1 -0
  70. package/static/assets/KnowledgeDetailPage-Dvk-QAJJ.js +1 -0
  71. package/static/assets/KnowledgeDetailPage-Dy0M4FgC.js +1 -0
  72. package/static/assets/KnowledgeEditPage-CN0wPWMV.js +1 -0
  73. package/static/assets/KnowledgeEditPage-DEP0bweP.js +1 -0
  74. package/static/assets/KnowledgePage-BLe2lXja.js +3 -0
  75. package/static/assets/{KnowledgePage-D-ahboFK.js → KnowledgePage-_bvnWXPU.js} +2 -2
  76. package/static/assets/{LoginPage-DQ2rJliF.js → LoginPage-BkZt_pMw.js} +1 -1
  77. package/static/assets/LoginPage-VfOnXGad.js +1 -0
  78. package/static/assets/{MailInboxPage-Bfh0_pBU.js → MailInboxPage-DklkHMyO.js} +1 -1
  79. package/static/assets/MailInboxPage-UF82OTOE.js +1 -0
  80. package/static/assets/{MailProcessingModal-NF9kjdgr.js → MailProcessingModal-BHFYVTQc.js} +2 -2
  81. package/static/assets/MailProcessingModal-rKHRB-wC.js +6 -0
  82. package/static/assets/{MailReadPage-C0QhDa1x.js → MailReadPage-B-vLDq-6.js} +1 -1
  83. package/static/assets/MailReadPage-mg3Wqvqh.js +1 -0
  84. package/static/assets/{MailSentPage-Ctgcp1RB.js → MailSentPage-DIJJ8I5v.js} +1 -1
  85. package/static/assets/MailSentPage-OJeb1vU9.js +1 -0
  86. package/static/assets/{McpSettingsPage-CFgpw5_r.js → McpSettingsPage-CgOnXuHZ.js} +1 -1
  87. package/static/assets/McpSettingsPage-Mi2-nB-i.js +1 -0
  88. package/static/assets/MemoryEditPage-CR6SmDXU.js +13 -0
  89. package/static/assets/MemoryEditPage-D8i7XQ5l.js +13 -0
  90. package/static/assets/MemoryPage-BcWVGuiS.js +1 -0
  91. package/static/assets/MemoryPage-vbCtMG4L.js +1 -0
  92. package/static/assets/NewKnowledgePage-BE4X0pSc.js +1 -0
  93. package/static/assets/NewKnowledgePage-CL3dpMwb.js +1 -0
  94. package/static/assets/{NewSkillPage-CvBSXZFE.js → NewSkillPage-B3prwJ_n.js} +1 -1
  95. package/static/assets/NewSkillPage-BCJ68pFK.js +1 -0
  96. package/static/assets/{NewTaskPage-DRL-pyjV.js → NewTaskPage-DszXfHrv.js} +2 -2
  97. package/static/assets/NewTaskPage-vj0LvAb_.js +91 -0
  98. package/static/assets/{NotFoundPage-DW0gfvNA.js → NotFoundPage-D3K7UoeF.js} +1 -1
  99. package/static/assets/NotFoundPage-DqwQiMc8.js +6 -0
  100. package/static/assets/NotificationsSettingsPage-BSuXKPiG.js +1 -0
  101. package/static/assets/NotificationsSettingsPage-C4Gthita.js +1 -0
  102. package/static/assets/ProjectEditPage-DTdhZKQg.js +11 -0
  103. package/static/assets/ProjectEditPage-ia6zDqUf.js +11 -0
  104. package/static/assets/{ProjectPage-78a-iVFG.js → ProjectPage-BIk487-h.js} +1 -1
  105. package/static/assets/ProjectPage-DJ5wGekX.js +1 -0
  106. package/static/assets/PromptsSettingsPage-4iJoggN0.js +1 -0
  107. package/static/assets/PromptsSettingsPage-COjiXPsT.js +1 -0
  108. package/static/assets/{ResourceDetailPage-CLcuo4yw.js → ResourceDetailPage-DJN3Rax4.js} +1 -1
  109. package/static/assets/ResourceDetailPage-DKs83OyV.js +1 -0
  110. package/static/assets/ResourcesPage-CO45MzEx.js +41 -0
  111. package/static/assets/ResourcesPage-DF8x1i_a.js +41 -0
  112. package/static/assets/RoleEditPage-B0pm5rVn.js +13 -0
  113. package/static/assets/RoleEditPage-CBl-M2s3.js +13 -0
  114. package/static/assets/{RolePage-haUf186q.js → RolePage-B7JswOZC.js} +1 -1
  115. package/static/assets/RolePage-IVBtcgCf.js +1 -0
  116. package/static/assets/{RulesSettingsPage-Cc8rvAvm.js → RulesSettingsPage-CB6YdyhI.js} +2 -2
  117. package/static/assets/RulesSettingsPage-CKUt1JkO.js +16 -0
  118. package/static/assets/SchedulePage-TCeGDlnw.js +4 -0
  119. package/static/assets/SchedulePage-_NAbasKs.js +4 -0
  120. package/static/assets/{SkillDetailPage-BqhoNNkM.js → SkillDetailPage-7EzSwjPh.js} +1 -1
  121. package/static/assets/SkillDetailPage-jTeSohec.js +1 -0
  122. package/static/assets/{SkillEditPage-cpSdv9D4.js → SkillEditPage-CpouyjFV.js} +1 -1
  123. package/static/assets/SkillEditPage-D_e69AQk.js +1 -0
  124. package/static/assets/{SkillsPage-Cxkm5ymf.js → SkillsPage-DP8zSnPo.js} +2 -2
  125. package/static/assets/SkillsPage-xfv43oJ4.js +8 -0
  126. package/static/assets/{SkillsSettingsPage-DrmRher8.js → SkillsSettingsPage-CktzJBa7.js} +1 -1
  127. package/static/assets/SkillsSettingsPage-jhNVgVSA.js +1 -0
  128. package/static/assets/{SourceInput-C0WkiXS6.js → SourceInput-CQnyDxzl.js} +1 -1
  129. package/static/assets/SourceInput-KeAQ1PMl.js +1 -0
  130. package/static/assets/{TagInput-raThOrbG.js → TagInput-DoO2Dwj6.js} +1 -1
  131. package/static/assets/TagInput-ZyP8Rq8B.js +1 -0
  132. package/static/assets/{TaskDetailPage-BMzce3uJ.js → TaskDetailPage-C6xKC_IM.js} +2 -2
  133. package/static/assets/TaskDetailPage-z557zwfE.js +16 -0
  134. package/static/assets/TaskEditPage-DPLOeh7K.js +1 -0
  135. package/static/assets/TaskEditPage-XuWzVm-k.js +1 -0
  136. package/static/assets/{TasksPage-CxKJQJ1_.js → TasksPage-C-toKZIZ.js} +3 -3
  137. package/static/assets/TasksPage-CwfLwTAV.js +17 -0
  138. package/static/assets/TeamEditPage-B8qk6fWu.js +9 -0
  139. package/static/assets/TeamEditPage-Dk7Yxh1i.js +9 -0
  140. package/static/assets/TeamPage-CQ4EE1rP.js +1 -0
  141. package/static/assets/TeamPage-Dmrjf_RA.js +1 -0
  142. package/static/assets/{TerminalPage-BWdNoEM5.js → TerminalPage-C0CSp8st.js} +1 -1
  143. package/static/assets/TerminalPage-Y59DZGfZ.js +1 -0
  144. package/static/assets/TerminalSessionPage-BQOMLYPX.js +3 -0
  145. package/static/assets/TerminalSessionPage-HvnYJEpU.js +3 -0
  146. package/static/assets/UserPreferencesPage-1l5T8TaE.js +1 -0
  147. package/static/assets/UserPreferencesPage-BSIvW5UI.js +1 -0
  148. package/static/assets/{UserSettingsPage-CqooRxDi.js → UserSettingsPage-CS7BrEZJ.js} +1 -1
  149. package/static/assets/UserSettingsPage-o4ikmR9k.js +1 -0
  150. package/static/assets/UtilitiesPage-D1YCA1eC.js +1 -0
  151. package/static/assets/UtilitiesPage-O5kjW0V2.js +1 -0
  152. package/static/assets/{alert-BGFBZOrZ.js → alert-DOfUEE4H.js} +1 -1
  153. package/static/assets/alert-u79hLEuY.js +1 -0
  154. package/static/assets/apl-B4CMkyY2.js +1 -0
  155. package/static/assets/{arrow-down-DXhs3vvo.js → arrow-down-DumN-Nal.js} +1 -1
  156. package/static/assets/arrow-down-Y539lEoZ.js +6 -0
  157. package/static/assets/{arrow-left-PEX5RePT.js → arrow-left-B_QwfLPP.js} +1 -1
  158. package/static/assets/arrow-left-DmNgC0xD.js +6 -0
  159. package/static/assets/{arrow-up-D7z0QZsQ.js → arrow-up-B3Oj7MxZ.js} +1 -1
  160. package/static/assets/arrow-up-BbDrY9nh.js +6 -0
  161. package/static/assets/{arrow-up-down-OTrzDHIL.js → arrow-up-down-D8T0kR2Q.js} +1 -1
  162. package/static/assets/arrow-up-down-DDTTwJEF.js +6 -0
  163. package/static/assets/asciiarmor-Df11BRmG.js +1 -0
  164. package/static/assets/asn1-EdZsLKOL.js +1 -0
  165. package/static/assets/asterisk-B-8jnY81.js +1 -0
  166. package/static/assets/{badge-rki-Xf0E.js → badge-BmHXIBBB.js} +1 -1
  167. package/static/assets/badge-BzEwwrAP.js +1 -0
  168. package/static/assets/brainfuck-C4LP7Hcl.js +1 -0
  169. package/static/assets/{browser-modal-BKnqJnf5.js → browser-modal-4AfJ98X7.js} +2 -2
  170. package/static/assets/browser-modal-CY4F-Mm8.js +6 -0
  171. package/static/assets/{card-_Grh-Otl.js → card-BpqK1BMM.js} +1 -1
  172. package/static/assets/card-Btt3HmXT.js +1 -0
  173. package/static/assets/{chevron-left-LQtIDk73.js → chevron-left-CSCdB-iz.js} +1 -1
  174. package/static/assets/chevron-left-DztJMlwc.js +6 -0
  175. package/static/assets/{chevron-up-BM1GKhAV.js → chevron-up-DaWWwb87.js} +1 -1
  176. package/static/assets/chevron-up-gnoSEbf_.js +6 -0
  177. package/static/assets/{chevrons-up-Ccej0FyZ.js → chevrons-up-B2GdB4F7.js} +1 -1
  178. package/static/assets/chevrons-up-D7gsSI9g.js +11 -0
  179. package/static/assets/{circle-alert-C5k9mZfC.js → circle-alert-CQ-Ir4mS.js} +1 -1
  180. package/static/assets/circle-alert-Coa2ulVd.js +6 -0
  181. package/static/assets/{circle-check-fwIZxHsK.js → circle-check-01UufaGN.js} +1 -1
  182. package/static/assets/circle-check-C9wy7OAO.js +6 -0
  183. package/static/assets/{circle-check-big-BaFefwt0.js → circle-check-big-CVbQ_zpj.js} +1 -1
  184. package/static/assets/circle-check-big-DqKKs8fZ.js +6 -0
  185. package/static/assets/{circle-play-C1R46Kry.js → circle-play-COMPwZ00.js} +1 -1
  186. package/static/assets/circle-play-DoomwgYb.js +6 -0
  187. package/static/assets/{circle-x-CKuM1691.js → circle-x-Cs5S3HID.js} +1 -1
  188. package/static/assets/circle-x-Du7Cp5MD.js +6 -0
  189. package/static/assets/clike-B9uivgTg.js +1 -0
  190. package/static/assets/{clipboard-DWJnnRi8.js → clipboard-C-VV2jbC.js} +1 -1
  191. package/static/assets/clipboard-CqRqQoij.js +11 -0
  192. package/static/assets/{clock-Diqm3Csm.js → clock-BKOkXNLP.js} +1 -1
  193. package/static/assets/clock-ehUSUqcI.js +6 -0
  194. package/static/assets/clojure-BMjYHr_A.js +1 -0
  195. package/static/assets/cmake-BQqOBYOt.js +1 -0
  196. package/static/assets/cobol-CWcv1MsR.js +1 -0
  197. package/static/assets/{code-Ao0cA5nW.js → code-CmFlYUo3.js} +1 -1
  198. package/static/assets/code-kQPD6ttp.js +6 -0
  199. package/static/assets/coffeescript-S37ZYGWr.js +1 -0
  200. package/static/assets/commonlisp-DBKNyK5s.js +1 -0
  201. package/static/assets/crystal-SjHAIU92.js +1 -0
  202. package/static/assets/css-BnMrqG3P.js +1 -0
  203. package/static/assets/cypher-C_CwsFkJ.js +1 -0
  204. package/static/assets/d-pRatUO7H.js +1 -0
  205. package/static/assets/diff-DbItnlRl.js +1 -0
  206. package/static/assets/dockerfile-BKs6k2Af.js +1 -0
  207. package/static/assets/{download-5iQDQeY0.js → download-Cg0a1Yh4.js} +1 -1
  208. package/static/assets/download-D8TKj0Hc.js +6 -0
  209. package/static/assets/dtd-DF_7sFjM.js +1 -0
  210. package/static/assets/dylan-DwRh75JA.js +1 -0
  211. package/static/assets/ebnf-CDyGwa7X.js +1 -0
  212. package/static/assets/ecl-Cabwm37j.js +1 -0
  213. package/static/assets/eiffel-CnydiIhH.js +1 -0
  214. package/static/assets/elm-vLlmbW-K.js +1 -0
  215. package/static/assets/erlang-BNw1qcRV.js +1 -0
  216. package/static/assets/{external-link-B6dkiWgP.js → external-link-BSAlwNHq.js} +1 -1
  217. package/static/assets/external-link-BVrPPG_7.js +6 -0
  218. package/static/assets/{eye-DQUzAWBY.js → eye-AP4j25wH.js} +1 -1
  219. package/static/assets/eye-DWC_Vybx.js +6 -0
  220. package/static/assets/factor-kuTfRLto.js +1 -0
  221. package/static/assets/fcl-Kvtd6kyn.js +1 -0
  222. package/static/assets/{folder-git-2-CQUj8P5W.js → folder-git-2-CMtTePKY.js} +1 -1
  223. package/static/assets/folder-git-2-Ds9p-D0Q.js +6 -0
  224. package/static/assets/forth-Ffai-XNe.js +1 -0
  225. package/static/assets/fortran-DYz_wnZ1.js +1 -0
  226. package/static/assets/gas-Bneqetm1.js +1 -0
  227. package/static/assets/gherkin-heZmZLOM.js +1 -0
  228. package/static/assets/globe-CJrZCIc6.js +6 -0
  229. package/static/assets/globe-DwQuaM7_.js +6 -0
  230. package/static/assets/groovy-D9Dt4D0W.js +1 -0
  231. package/static/assets/haskell-Cw1EW3IL.js +1 -0
  232. package/static/assets/haxe-H-WmDvRZ.js +1 -0
  233. package/static/assets/http-DBlCnlav.js +1 -0
  234. package/static/assets/idl-BEugSyMb.js +1 -0
  235. package/static/assets/index-0sq0wwbr.js +1 -0
  236. package/static/assets/index-B0Cea36W.js +1 -0
  237. package/static/assets/index-B0g-CMWG.js +1 -0
  238. package/static/assets/index-BFEMYO_w.js +1 -0
  239. package/static/assets/index-BFevJCwl.js +1 -0
  240. package/static/assets/index-BK1-hIKa.js +1 -0
  241. package/static/assets/index-BMie63_b.js +1 -0
  242. package/static/assets/index-BZvWD4ai.js +1 -0
  243. package/static/assets/index-BlyysfDZ.js +7 -0
  244. package/static/assets/index-BpQ9T8mu.js +3 -0
  245. package/static/assets/index-Bpm_mSd3.js +2 -0
  246. package/static/assets/index-Brkkhgwq.js +1 -0
  247. package/static/assets/index-Bvj_HZmE.js +1 -0
  248. package/static/assets/index-CE8kBKLn.js +1 -0
  249. package/static/assets/index-CL_XsRD7.js +1 -0
  250. package/static/assets/{index-CIFIEidO.js → index-C_KCaLlP.js} +117 -102
  251. package/static/assets/index-CfcUrE_I.js +1 -0
  252. package/static/assets/index-CisT9m8F.js +3 -0
  253. package/static/assets/index-CiyjdZHh.js +1 -0
  254. package/static/assets/index-CtnO1D9D.js +1 -0
  255. package/static/assets/index-D3hMbDtK.js +1 -0
  256. package/static/assets/index-DBS4Ya9k.js +1 -0
  257. package/static/assets/index-DEmcF6vO.js +1 -0
  258. package/static/assets/index-DYBGl9Zy.js +1 -0
  259. package/static/assets/index-DgeHIphZ.js +1 -0
  260. package/static/assets/index-Digxc7bT.js +1 -0
  261. package/static/assets/index-Dih0CGHs.js +1 -0
  262. package/static/assets/index-DoDazQp9.js +1 -0
  263. package/static/assets/index-DvviZzdo.js +1 -0
  264. package/static/assets/index-Dz52SxOy.js +2 -0
  265. package/static/assets/index-J8MrpD0P.js +1 -0
  266. package/static/assets/index-NgkIT4SV.js +1 -0
  267. package/static/assets/index-PBkZiuRI.js +1 -0
  268. package/static/assets/index-ZJ8xZq44.js +1 -0
  269. package/static/assets/index-oKV7MVo_.js +1 -0
  270. package/static/assets/index-oRAlpULD.css +1 -0
  271. package/static/assets/index-opozMhku.js +502 -0
  272. package/static/assets/index-vk3KOxHi.js +7 -0
  273. package/static/assets/index-wmWBSeOM.js +1 -0
  274. package/static/assets/{info-BvzdeJ30.js → info-D-7cQBbP.js} +1 -1
  275. package/static/assets/info-NEnL4zqX.js +6 -0
  276. package/static/assets/javascript-iXu5QeM3.js +1 -0
  277. package/static/assets/julia-DuME0IfC.js +1 -0
  278. package/static/assets/{label-B1lgxULu.js → label-bMzKAcdZ.js} +1 -1
  279. package/static/assets/label-wtSCiOqT.js +1 -0
  280. package/static/assets/livescript-BwQOo05w.js +1 -0
  281. package/static/assets/lua-BgMRiT3U.js +1 -0
  282. package/static/assets/markdown-editor-B3gIcmI2.js +111 -0
  283. package/static/assets/markdown-editor-B6HEtSkH.css +1 -0
  284. package/static/assets/markdown-editor-D_er7zWv.js +111 -0
  285. package/static/assets/mathematica-DTrFuWx2.js +1 -0
  286. package/static/assets/mbox-CNhZ1qSd.js +1 -0
  287. package/static/assets/{message-square-LKqx0LRr.js → message-square-Ca07XC8m.js} +1 -1
  288. package/static/assets/message-square-CvZFZAL0.js +6 -0
  289. package/static/assets/mirc-CjQqDB4T.js +1 -0
  290. package/static/assets/mllike-CXdrOF99.js +1 -0
  291. package/static/assets/modelica-Dc1JOy9r.js +1 -0
  292. package/static/assets/mscgen-BA5vi2Kp.js +1 -0
  293. package/static/assets/mumps-BT43cFF4.js +1 -0
  294. package/static/assets/nginx-DdIZxoE0.js +1 -0
  295. package/static/assets/nsis-LdVXkNf5.js +1 -0
  296. package/static/assets/ntriples-BfvgReVJ.js +1 -0
  297. package/static/assets/octave-Ck1zUtKM.js +1 -0
  298. package/static/assets/oz-BzwKVEFT.js +1 -0
  299. package/static/assets/{paperclip-Cvcr3t6l.js → paperclip-BICwD8BW.js} +1 -1
  300. package/static/assets/paperclip-D9bkHCO9.js +6 -0
  301. package/static/assets/pascal--L3eBynH.js +1 -0
  302. package/static/assets/{pause-TaMz44vG.js → pause-CZwBxJjx.js} +1 -1
  303. package/static/assets/pause-DrtOMeDr.js +6 -0
  304. package/static/assets/perl-CdXCOZ3F.js +1 -0
  305. package/static/assets/pig-CevX1Tat.js +1 -0
  306. package/static/assets/pipeline-builders-Bkf0wt_O.js +17 -0
  307. package/static/assets/{play-C4YxfQOO.js → play-BjDbhEcg.js} +1 -1
  308. package/static/assets/play-CQk31OJN.js +6 -0
  309. package/static/assets/powershell-CFHJl5sT.js +1 -0
  310. package/static/assets/properties-C78fOPTZ.js +1 -0
  311. package/static/assets/protobuf-ChK-085T.js +1 -0
  312. package/static/assets/pug-DeIclll2.js +1 -0
  313. package/static/assets/puppet-DMA9R1ak.js +1 -0
  314. package/static/assets/python-BuPzkPfP.js +1 -0
  315. package/static/assets/q-pXgVlZs6.js +1 -0
  316. package/static/assets/r-B6wPVr8A.js +1 -0
  317. package/static/assets/{radio-group-D7Rt-k1F.js → radio-group-BpmJzTM1.js} +1 -1
  318. package/static/assets/radio-group-DqCmfTij.js +1 -0
  319. package/static/assets/{refresh-cw-C9ZWZi2c.js → refresh-cw-CZLHY6zD.js} +1 -1
  320. package/static/assets/refresh-cw-yMcSYdEF.js +6 -0
  321. package/static/assets/rpm-CTu-6PCP.js +1 -0
  322. package/static/assets/ruby-B2Rjki9n.js +1 -0
  323. package/static/assets/sas-B4kiWyti.js +1 -0
  324. package/static/assets/scheme-C41bIUwD.js +1 -0
  325. package/static/assets/{search-C1RuN2pO.js → search-Cz2_2BkO.js} +1 -1
  326. package/static/assets/search-_5ueAoCg.js +6 -0
  327. package/static/assets/select-9YyUa5YH.js +1 -0
  328. package/static/assets/select-BKdFrV6O.js +1 -0
  329. package/static/assets/shell-CjFT_Tl9.js +1 -0
  330. package/static/assets/sieve-C3Gn_uJK.js +1 -0
  331. package/static/assets/simple-mode-GW_nhZxv.js +1 -0
  332. package/static/assets/smalltalk-CnHTOXQT.js +1 -0
  333. package/static/assets/solr-DehyRSwq.js +1 -0
  334. package/static/assets/sparql-DkYu6x3z.js +1 -0
  335. package/static/assets/spreadsheet-BCZA_wO0.js +1 -0
  336. package/static/assets/sql-D0XecflT.js +1 -0
  337. package/static/assets/stex-C3f8Ysf7.js +1 -0
  338. package/static/assets/stylus-B533Al4x.js +1 -0
  339. package/static/assets/swift-BzpIVaGY.js +1 -0
  340. package/static/assets/{switch-LSkE6hx8.js → switch-Bhm5em7I.js} +1 -1
  341. package/static/assets/switch-D7e1drXt.js +1 -0
  342. package/static/assets/tabs-oeAz0IIg.js +1 -0
  343. package/static/assets/tabs-qMSIjEoX.js +1 -0
  344. package/static/assets/{tag-B2iP7vv_.js → tag-D5LBbacJ.js} +1 -1
  345. package/static/assets/tag-dBrNwRvH.js +6 -0
  346. package/static/assets/tcl-DVfN8rqt.js +1 -0
  347. package/static/assets/{terminal-preview-PyMHLXJ3.js → terminal-preview-BZXyNaM9.js} +1 -1
  348. package/static/assets/terminal-preview-C3WCC5tV.js +1 -0
  349. package/static/assets/textile-CnDTJFAw.js +1 -0
  350. package/static/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  351. package/static/assets/tiki-DGYXhP31.js +1 -0
  352. package/static/assets/toml-Bm5Em-hy.js +1 -0
  353. package/static/assets/troff-wAsdV37c.js +1 -0
  354. package/static/assets/ttcn-CfJYG6tj.js +1 -0
  355. package/static/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  356. package/static/assets/turtle-B1tBg_DP.js +1 -0
  357. package/static/assets/{use-terminal-Blvh8GLp.js → use-terminal-CSttRkql.js} +1 -1
  358. package/static/assets/use-terminal-FzuSKCnc.js +1 -0
  359. package/static/assets/vb-CmGdzxic.js +1 -0
  360. package/static/assets/vbscript-BuJXcnF6.js +1 -0
  361. package/static/assets/velocity-D8B20fx6.js +1 -0
  362. package/static/assets/verilog-C6RDOZhf.js +1 -0
  363. package/static/assets/vhdl-lSbBsy5d.js +1 -0
  364. package/static/assets/{video-A2wzYKal.js → video-D7SzAtAp.js} +1 -1
  365. package/static/assets/video-DKqt_ev6.js +36 -0
  366. package/static/assets/webidl-ZXfAyPTL.js +1 -0
  367. package/static/assets/xquery-DzFWVndE.js +1 -0
  368. package/static/assets/yacas-BJ4BC0dw.js +1 -0
  369. package/static/assets/z80-Hz9HOZM7.js +1 -0
  370. package/static/index.html +2 -2
  371. package/dist/lib/auth/auth-manager.d.ts.map +0 -1
  372. package/dist/lib/auth/auth-manager.js.map +0 -1
  373. package/dist/lib/gait-path.d.ts.map +0 -1
  374. package/dist/lib/gait-path.js.map +0 -1
  375. package/dist/lib/git-settings.d.ts.map +0 -1
  376. package/dist/lib/git-settings.js.map +0 -1
  377. package/dist/lib/git.d.ts.map +0 -1
  378. package/dist/lib/git.js.map +0 -1
  379. package/dist/lib/jobs/global-job-scheduler.d.ts.map +0 -1
  380. package/dist/lib/jobs/global-job-scheduler.js.map +0 -1
  381. package/dist/lib/jobs/job-runner.d.ts.map +0 -1
  382. package/dist/lib/jobs/job-runner.js.map +0 -1
  383. package/dist/lib/jobs/job-scheduler.d.ts.map +0 -1
  384. package/dist/lib/jobs/job-scheduler.js.map +0 -1
  385. package/dist/lib/jobs/job-store.d.ts.map +0 -1
  386. package/dist/lib/jobs/job-store.js.map +0 -1
  387. package/dist/lib/project-paths.d.ts.map +0 -1
  388. package/dist/lib/project-paths.js.map +0 -1
  389. package/dist/lib/storage/file-storage.d.ts.map +0 -1
  390. package/dist/lib/storage/file-storage.js.map +0 -1
  391. package/dist/lib/symlinks/symlink-manager.d.ts.map +0 -1
  392. package/dist/lib/symlinks/symlink-manager.js.map +0 -1
  393. package/dist/lib/symlinks/types.d.ts.map +0 -1
  394. package/dist/lib/symlinks/types.js.map +0 -1
  395. package/dist/lib/terminal/context-helper.d.ts.map +0 -1
  396. package/dist/lib/terminal/context-helper.js.map +0 -1
  397. package/dist/lib/terminal/global-manager.d.ts.map +0 -1
  398. package/dist/lib/terminal/global-manager.js.map +0 -1
  399. package/dist/lib/terminal/shell-utils.d.ts.map +0 -1
  400. package/dist/lib/terminal/shell-utils.js.map +0 -1
  401. package/dist/lib/terminal/terminal-manager.d.ts.map +0 -1
  402. package/dist/lib/terminal/terminal-manager.js.map +0 -1
  403. package/dist/lib/user-preferences.d.ts.map +0 -1
  404. package/dist/lib/user-preferences.js.map +0 -1
  405. package/dist/middleware/auth.d.ts.map +0 -1
  406. package/dist/middleware/auth.js.map +0 -1
  407. package/dist/routes/api/v1/agents/[id]/index.d.ts.map +0 -1
  408. package/dist/routes/api/v1/agents/[id]/index.js.map +0 -1
  409. package/dist/routes/api/v1/agents/[id]/route.d.ts.map +0 -1
  410. package/dist/routes/api/v1/agents/[id]/route.js.map +0 -1
  411. package/dist/routes/api/v1/agents/index.d.ts.map +0 -1
  412. package/dist/routes/api/v1/agents/index.js.map +0 -1
  413. package/dist/routes/api/v1/agents/route.d.ts.map +0 -1
  414. package/dist/routes/api/v1/agents/route.js.map +0 -1
  415. package/dist/routes/api/v1/ai/index.d.ts.map +0 -1
  416. package/dist/routes/api/v1/ai/index.js.map +0 -1
  417. package/dist/routes/api/v1/ai/route.d.ts.map +0 -1
  418. package/dist/routes/api/v1/ai/route.js.map +0 -1
  419. package/dist/routes/api/v1/api-keys/index.d.ts.map +0 -1
  420. package/dist/routes/api/v1/api-keys/index.js.map +0 -1
  421. package/dist/routes/api/v1/api-keys/route.d.ts.map +0 -1
  422. package/dist/routes/api/v1/api-keys/route.js.map +0 -1
  423. package/dist/routes/api/v1/auth/index.d.ts.map +0 -1
  424. package/dist/routes/api/v1/auth/index.js.map +0 -1
  425. package/dist/routes/api/v1/auth/route.d.ts.map +0 -1
  426. package/dist/routes/api/v1/auth/route.js.map +0 -1
  427. package/dist/routes/api/v1/auth-settings/index.d.ts.map +0 -1
  428. package/dist/routes/api/v1/auth-settings/index.js.map +0 -1
  429. package/dist/routes/api/v1/auth-settings/route.d.ts.map +0 -1
  430. package/dist/routes/api/v1/auth-settings/route.js.map +0 -1
  431. package/dist/routes/api/v1/chats/[id]/index.d.ts.map +0 -1
  432. package/dist/routes/api/v1/chats/[id]/index.js.map +0 -1
  433. package/dist/routes/api/v1/chats/[id]/route.d.ts.map +0 -1
  434. package/dist/routes/api/v1/chats/[id]/route.js.map +0 -1
  435. package/dist/routes/api/v1/chats/index.d.ts.map +0 -1
  436. package/dist/routes/api/v1/chats/index.js.map +0 -1
  437. package/dist/routes/api/v1/chats/route.d.ts.map +0 -1
  438. package/dist/routes/api/v1/chats/route.js.map +0 -1
  439. package/dist/routes/api/v1/config/index.d.ts.map +0 -1
  440. package/dist/routes/api/v1/config/index.js.map +0 -1
  441. package/dist/routes/api/v1/config/route.d.ts.map +0 -1
  442. package/dist/routes/api/v1/config/route.js.map +0 -1
  443. package/dist/routes/api/v1/context/architecture/route.d.ts.map +0 -1
  444. package/dist/routes/api/v1/context/architecture/route.js.map +0 -1
  445. package/dist/routes/api/v1/context/index.d.ts.map +0 -1
  446. package/dist/routes/api/v1/context/index.js.map +0 -1
  447. package/dist/routes/api/v1/context/knowledge/[filename]/index.d.ts.map +0 -1
  448. package/dist/routes/api/v1/context/knowledge/[filename]/index.js.map +0 -1
  449. package/dist/routes/api/v1/context/knowledge/[filename]/route.d.ts.map +0 -1
  450. package/dist/routes/api/v1/context/knowledge/[filename]/route.js.map +0 -1
  451. package/dist/routes/api/v1/context/knowledge/index.d.ts.map +0 -1
  452. package/dist/routes/api/v1/context/knowledge/index.js.map +0 -1
  453. package/dist/routes/api/v1/context/knowledge/route.d.ts.map +0 -1
  454. package/dist/routes/api/v1/context/knowledge/route.js.map +0 -1
  455. package/dist/routes/api/v1/context/project/route.d.ts.map +0 -1
  456. package/dist/routes/api/v1/context/project/route.js.map +0 -1
  457. package/dist/routes/api/v1/git/index.d.ts.map +0 -1
  458. package/dist/routes/api/v1/git/index.js.map +0 -1
  459. package/dist/routes/api/v1/jobs/[id]/route.d.ts.map +0 -1
  460. package/dist/routes/api/v1/jobs/[id]/route.js.map +0 -1
  461. package/dist/routes/api/v1/jobs/[id]/run/route.d.ts.map +0 -1
  462. package/dist/routes/api/v1/jobs/[id]/run/route.js.map +0 -1
  463. package/dist/routes/api/v1/jobs/index.d.ts.map +0 -1
  464. package/dist/routes/api/v1/jobs/index.js.map +0 -1
  465. package/dist/routes/api/v1/jobs/route.d.ts.map +0 -1
  466. package/dist/routes/api/v1/jobs/route.js.map +0 -1
  467. package/dist/routes/api/v1/jobs/status/route.d.ts.map +0 -1
  468. package/dist/routes/api/v1/jobs/status/route.js.map +0 -1
  469. package/dist/routes/api/v1/mcp/index.d.ts.map +0 -1
  470. package/dist/routes/api/v1/mcp/index.js.map +0 -1
  471. package/dist/routes/api/v1/mcp/route.d.ts.map +0 -1
  472. package/dist/routes/api/v1/mcp/route.js.map +0 -1
  473. package/dist/routes/api/v1/proposals/[id]/route.d.ts.map +0 -1
  474. package/dist/routes/api/v1/proposals/[id]/route.js.map +0 -1
  475. package/dist/routes/api/v1/proposals/index.d.ts.map +0 -1
  476. package/dist/routes/api/v1/proposals/index.js.map +0 -1
  477. package/dist/routes/api/v1/proposals/route.d.ts.map +0 -1
  478. package/dist/routes/api/v1/proposals/route.js.map +0 -1
  479. package/dist/routes/api/v1/resources/[id]/index.d.ts.map +0 -1
  480. package/dist/routes/api/v1/resources/[id]/index.js.map +0 -1
  481. package/dist/routes/api/v1/resources/[id]/route.js.map +0 -1
  482. package/dist/routes/api/v1/resources/[id]/thumbnail/index.d.ts.map +0 -1
  483. package/dist/routes/api/v1/resources/[id]/thumbnail/index.js.map +0 -1
  484. package/dist/routes/api/v1/resources/[id]/thumbnail/route.js.map +0 -1
  485. package/dist/routes/api/v1/resources/index.d.ts.map +0 -1
  486. package/dist/routes/api/v1/resources/index.js.map +0 -1
  487. package/dist/routes/api/v1/resources/route.d.ts.map +0 -1
  488. package/dist/routes/api/v1/resources/route.js.map +0 -1
  489. package/dist/routes/api/v1/symlinks/index.d.ts.map +0 -1
  490. package/dist/routes/api/v1/symlinks/index.js.map +0 -1
  491. package/dist/routes/api/v1/symlinks/route.d.ts.map +0 -1
  492. package/dist/routes/api/v1/symlinks/route.js.map +0 -1
  493. package/dist/routes/api/v1/terminal/[proposalId]/create/index.d.ts.map +0 -1
  494. package/dist/routes/api/v1/terminal/[proposalId]/create/index.js.map +0 -1
  495. package/dist/routes/api/v1/terminal/[proposalId]/create/route.d.ts.map +0 -1
  496. package/dist/routes/api/v1/terminal/[proposalId]/create/route.js.map +0 -1
  497. package/dist/routes/api/v1/terminal/[proposalId]/destroy/index.d.ts.map +0 -1
  498. package/dist/routes/api/v1/terminal/[proposalId]/destroy/index.js.map +0 -1
  499. package/dist/routes/api/v1/terminal/[proposalId]/destroy/route.d.ts.map +0 -1
  500. package/dist/routes/api/v1/terminal/[proposalId]/destroy/route.js.map +0 -1
  501. package/dist/routes/api/v1/terminal/[proposalId]/resize/index.d.ts.map +0 -1
  502. package/dist/routes/api/v1/terminal/[proposalId]/resize/index.js.map +0 -1
  503. package/dist/routes/api/v1/terminal/[proposalId]/resize/route.d.ts.map +0 -1
  504. package/dist/routes/api/v1/terminal/[proposalId]/resize/route.js.map +0 -1
  505. package/dist/routes/api/v1/terminal/sessions/index.d.ts.map +0 -1
  506. package/dist/routes/api/v1/terminal/sessions/index.js.map +0 -1
  507. package/dist/routes/api/v1/terminal/sessions/route.d.ts.map +0 -1
  508. package/dist/routes/api/v1/terminal/sessions/route.js.map +0 -1
  509. package/dist/routes/api/v1/user/index.d.ts.map +0 -1
  510. package/dist/routes/api/v1/user/index.js.map +0 -1
  511. package/dist/routes/api/v1/user/settings/index.d.ts.map +0 -1
  512. package/dist/routes/api/v1/user/settings/index.js.map +0 -1
  513. package/dist/routes/api/v1/user/settings/route.d.ts.map +0 -1
  514. package/dist/routes/api/v1/user/settings/route.js.map +0 -1
  515. package/dist/server-with-static.d.ts.map +0 -1
  516. package/dist/server-with-static.js.map +0 -1
  517. package/dist/server.d.ts.map +0 -1
  518. package/dist/server.js.map +0 -1
  519. package/static/assets/ActivityPage-DC2t-Kyv.js +0 -1
  520. package/static/assets/ArchitectureEditPage-B5dNFxvL.js +0 -21
  521. package/static/assets/ArchitecturePage-D796d-Je.js +0 -1
  522. package/static/assets/CodePage-xbYipiBR.js +0 -2
  523. package/static/assets/DashboardPage-Aw1xWH4M.js +0 -51
  524. package/static/assets/IntegrationsSettingsPage-Ds16sLG2.js +0 -1
  525. package/static/assets/KnowledgeDetailPage-D94ukozt.js +0 -1
  526. package/static/assets/KnowledgeEditPage-DpjdauND.js +0 -1
  527. package/static/assets/NewKnowledgePage-EqWKQ4lU.js +0 -9
  528. package/static/assets/NotificationsSettingsPage-BzVS1D5M.js +0 -1
  529. package/static/assets/ProjectEditPage-BlQk50Xs.js +0 -11
  530. package/static/assets/PromptsSettingsPage-DWEKgvMD.js +0 -1
  531. package/static/assets/ResourcesPage-C0TGRawd.js +0 -41
  532. package/static/assets/RoleEditPage-m6lOchyA.js +0 -13
  533. package/static/assets/SchedulePage-DUSxe93C.js +0 -4
  534. package/static/assets/TaskEditPage-Dpsi2Rcp.js +0 -1
  535. package/static/assets/TerminalSessionPage-B6_ssmNM.js +0 -8
  536. package/static/assets/UserPreferencesPage-CY_0CoMe.js +0 -1
  537. package/static/assets/UtilitiesPage-e4IaR2YV.js +0 -1
  538. package/static/assets/index-CHdBxVyk.css +0 -2
  539. package/static/assets/kiro-CGoI3Dqh.js +0 -17
  540. package/static/assets/markdown-editor-C-DC0mFI.js +0 -62
  541. package/static/assets/markdown-editor-DUEthZ0y.css +0 -1
  542. package/static/assets/select-Dp3J_OE9.js +0 -1
  543. 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,3 @@
1
+ import { Hono } from 'hono';
2
+ declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
3
+ 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 knowledgePath = getKnowledgePath();
58
- // Ensure directory exists
59
- await fs.mkdir(knowledgePath, { recursive: true });
60
- const files = await fs.readdir(knowledgePath);
61
- const documents = await Promise.all(files
62
- .filter(file => file.endsWith('.md'))
63
- .map(async (file) => {
64
- const filePath = path.join(knowledgePath, file);
65
- const [fileContent, stats] = await Promise.all([
66
- fs.readFile(filePath, 'utf-8'),
67
- fs.stat(filePath)
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
- documents: documents.sort((a, b) => a.filename.localeCompare(b.filename))
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
- }, 500 | 404, "json">)>;
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
- }, 500 | 404, "json">)>;
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
- }, 500 | 404, "json">)>;
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