@loicngr/kobo 1.6.0 → 1.6.2

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 (211) hide show
  1. package/AGENTS.md +6 -1
  2. package/README.md +43 -29
  3. package/dist/server/db/index.js +17 -0
  4. package/dist/server/db/migrations.js +10 -0
  5. package/dist/server/db/schema.js +2 -1
  6. package/dist/server/index.js +26 -5
  7. package/dist/server/middleware/migration-guard.js +15 -0
  8. package/dist/server/routes/dev-server.js +3 -2
  9. package/dist/server/routes/documents.js +113 -0
  10. package/dist/server/routes/engines.js +9 -0
  11. package/dist/server/routes/migration.js +5 -0
  12. package/dist/server/routes/workspaces.js +35 -11
  13. package/dist/server/services/agent/engines/claude-code/args-builder.js +22 -0
  14. package/dist/server/services/agent/engines/claude-code/capabilities.js +17 -0
  15. package/dist/server/services/agent/engines/claude-code/engine.js +163 -0
  16. package/dist/server/services/agent/engines/claude-code/mcp-config.js +23 -0
  17. package/dist/server/services/agent/engines/claude-code/stream-parser.js +224 -0
  18. package/dist/server/services/agent/engines/registry.js +21 -0
  19. package/dist/server/services/agent/engines/types.js +18 -0
  20. package/dist/server/services/agent/event-router.js +4 -0
  21. package/dist/server/services/agent/orchestrator.js +582 -0
  22. package/dist/server/services/agent/session-controller.js +79 -0
  23. package/dist/server/services/content-migration-service.js +155 -0
  24. package/dist/server/services/db-backup-service.js +15 -0
  25. package/dist/server/services/websocket-service.js +81 -50
  26. package/dist/server/services/workspace-service.js +11 -5
  27. package/dist/server/utils/paths.js +1 -1
  28. package/dist/shared/models.js +50 -0
  29. package/package.json +1 -1
  30. package/src/client/dist/spa/assets/ActivityFeed-CFuT6H5u.js +7 -0
  31. package/src/client/dist/spa/assets/ActivityFeed-DXYafbn4.css +1 -0
  32. package/src/client/dist/spa/assets/ClosePopup-DhM1C4Zw.js +1 -0
  33. package/src/client/dist/spa/assets/CreatePage-sGrkfyOm.js +2 -0
  34. package/src/client/dist/spa/assets/CreatePage-yu2IH7GW.css +1 -0
  35. package/src/client/dist/spa/assets/DiffViewer-BVU58ujc.css +1 -0
  36. package/src/client/dist/spa/assets/DiffViewer-BwSRtVRI.js +2 -0
  37. package/src/client/dist/spa/assets/HealthPage-BO-bMpEu.js +1 -0
  38. package/src/client/dist/spa/assets/MainLayout-BiBJtDTk.css +1 -0
  39. package/src/client/dist/spa/assets/{MainLayout-_oPM07ln.js → MainLayout-BpqOChIX.js} +17 -17
  40. package/src/client/dist/spa/assets/QBadge-DqtcDv8D.js +1 -0
  41. package/src/client/dist/spa/assets/QBtn-CyzfM9-_.js +1 -0
  42. package/src/client/dist/spa/assets/QChip-KJoHYE6F.js +1 -0
  43. package/src/client/dist/spa/assets/QDialog-DQeAxY3-.js +1 -0
  44. package/src/client/dist/spa/assets/QExpansionItem-DCRks-Ra.js +1 -0
  45. package/src/client/dist/spa/assets/{QSpinner-CliSLjf8.js → QIcon-B0-pH3Qs.js} +1 -1
  46. package/src/client/dist/spa/assets/QItemLabel-Codqjisk.js +1 -0
  47. package/src/client/dist/spa/assets/QItemSection-CGpX7GcL.js +1 -0
  48. package/src/client/dist/spa/assets/QList-B-MkPF7n.js +1 -0
  49. package/src/client/dist/spa/assets/QPage-yqdKDG7-.js +1 -0
  50. package/src/client/dist/spa/assets/QScrollArea-e5qTqwcb.js +1 -0
  51. package/src/client/dist/spa/assets/QSeparator-rkjCbX2M.js +1 -0
  52. package/src/client/dist/spa/assets/QSlideTransition-BQxI8l5r.js +1 -0
  53. package/src/client/dist/spa/assets/QSpace-BNr0AftG.js +1 -0
  54. package/src/client/dist/spa/assets/QSpinnerDots-DEiRooBD.js +1 -0
  55. package/src/client/dist/spa/assets/QTabPanels--6cYe2US.js +1 -0
  56. package/src/client/dist/spa/assets/QTooltip-C4CPesBX.js +1 -0
  57. package/src/client/dist/spa/assets/SearchPage-BrUbbtgI.js +1 -0
  58. package/src/client/dist/spa/assets/SettingsPage-B3elO1PX.js +1 -0
  59. package/src/client/dist/spa/assets/TouchPan-BT6phK1f.js +1 -0
  60. package/src/client/dist/spa/assets/WorkspacePage-BHl17_tY.js +4 -0
  61. package/src/client/dist/spa/assets/WorkspacePage-DPGiH02q.css +1 -0
  62. package/src/client/dist/spa/assets/build-path-tree-Bgl2q74t.js +1 -0
  63. package/src/client/dist/spa/assets/{cssMode-DMX8jq8u.js → cssMode-B1wQ-79R.js} +1 -1
  64. package/src/client/dist/spa/assets/documents-CHc8t22V.js +60 -0
  65. package/src/client/dist/spa/assets/{editor.api-DirOkGGg.js → editor.api-CRb_5Zw6.js} +1 -1
  66. package/src/client/dist/spa/assets/{editor.main-DC4ezIu0.js → editor.main-C5sdCvGW.js} +3 -3
  67. package/src/client/dist/spa/assets/format-Bttc9ToS.js +1 -0
  68. package/src/client/dist/spa/assets/{formatters-BzaS4w0I.js → formatters-BDadphwz.js} +1 -1
  69. package/src/client/dist/spa/assets/{freemarker2-DI9xJfj0.js → freemarker2-CVSnsZk-.js} +1 -1
  70. package/src/client/dist/spa/assets/{handlebars-B9F-pScn.js → handlebars-uL_pucGI.js} +1 -1
  71. package/src/client/dist/spa/assets/{html-DTe2v8Q8.js → html-CatZVwWp.js} +1 -1
  72. package/src/client/dist/spa/assets/{htmlMode-F_XLjWfJ.js → htmlMode-DTDzEngo.js} +1 -1
  73. package/src/client/dist/spa/assets/i18n-D-VdPLEh.js +1 -0
  74. package/src/client/dist/spa/assets/index-CUI-zN26.js +2 -0
  75. package/src/client/dist/spa/assets/{javascript-B9xJRPC6.js → javascript-DeHBpolA.js} +1 -1
  76. package/src/client/dist/spa/assets/{jsonMode-DTZ6j6UO.js → jsonMode-Bma_YGGm.js} +1 -1
  77. package/src/client/dist/spa/assets/{liquid-BjU5MtW6.js → liquid-CW7xQEG_.js} +1 -1
  78. package/src/client/dist/spa/assets/{mdx-BMUpG7Be.js → mdx-BsYUhMzF.js} +1 -1
  79. package/src/client/dist/spa/assets/models-BbSRHL9b.js +1 -0
  80. package/src/client/dist/spa/assets/{monaco.contribution-D7JUf8DP.js → monaco.contribution-Du0atePv.js} +2 -2
  81. package/src/client/dist/spa/assets/private.use-form-D1RuEt2P.js +1 -0
  82. package/src/client/dist/spa/assets/{python-Dz0D4uSk.js → python-D7DQWXZm.js} +1 -1
  83. package/src/client/dist/spa/assets/{razor-D7CFxuwR.js → razor-B2ZxF301.js} +1 -1
  84. package/src/client/dist/spa/assets/scroll-JVVkg2Ng.js +1 -0
  85. package/src/client/dist/spa/assets/touch-CBLrR6_z.js +1 -0
  86. package/src/client/dist/spa/assets/{tsMode-DjscaxpS.js → tsMode-B4Xul5xA.js} +1 -1
  87. package/src/client/dist/spa/assets/{typescript-DozCWZl2.js → typescript-CdsKQuLT.js} +1 -1
  88. package/src/client/dist/spa/assets/use-checkbox-DYiZQsbF.js +1 -0
  89. package/src/client/dist/spa/assets/use-id-CeduaJbU.js +1 -0
  90. package/src/client/dist/spa/assets/use-portal-DBe4lcC2.js +1 -0
  91. package/src/client/dist/spa/assets/use-quasar-Ch82z8H5.js +1 -0
  92. package/src/client/dist/spa/assets/{xml-DFOJMT39.js → xml-Wap00dMv.js} +1 -1
  93. package/src/client/dist/spa/assets/{yaml-yEefnsXm.js → yaml-BxRDHC24.js} +1 -1
  94. package/src/client/dist/spa/index.html +12 -14
  95. package/src/mcp-server/README.md +1 -1
  96. package/dist/server/routes/plans.js +0 -89
  97. package/dist/server/services/agent-manager.js +0 -621
  98. package/src/client/dist/spa/assets/ActivityFeed-0GR1zPoc.js +0 -10
  99. package/src/client/dist/spa/assets/ActivityFeed-CfsKExt9.css +0 -1
  100. package/src/client/dist/spa/assets/ClosePopup-CdSn7HO8.js +0 -1
  101. package/src/client/dist/spa/assets/CreatePage-dMi4xVYN.css +0 -1
  102. package/src/client/dist/spa/assets/CreatePage-je_7dC5I.js +0 -2
  103. package/src/client/dist/spa/assets/DiffViewer-DREYX-8k.js +0 -2
  104. package/src/client/dist/spa/assets/DiffViewer-DiHFLSk4.css +0 -1
  105. package/src/client/dist/spa/assets/HealthPage-Do8QZdxw.js +0 -1
  106. package/src/client/dist/spa/assets/MainLayout-B5poKEy_.css +0 -1
  107. package/src/client/dist/spa/assets/QBadge-Bvh-hQ8K.js +0 -1
  108. package/src/client/dist/spa/assets/QBtn-BsD8vrWq.js +0 -1
  109. package/src/client/dist/spa/assets/QDialog-CkbLS1If.js +0 -1
  110. package/src/client/dist/spa/assets/QExpansionItem-UgkE560c.js +0 -1
  111. package/src/client/dist/spa/assets/QList-D80ms7bw.js +0 -1
  112. package/src/client/dist/spa/assets/QMenu-DU-wiY_A.js +0 -1
  113. package/src/client/dist/spa/assets/QPage-BKY2-sf-.js +0 -1
  114. package/src/client/dist/spa/assets/QSpace-C5Ebr0vq.js +0 -1
  115. package/src/client/dist/spa/assets/QSpinnerDots-Dp12eHrB.js +0 -1
  116. package/src/client/dist/spa/assets/QTabPanels-C7lWp1yU.js +0 -1
  117. package/src/client/dist/spa/assets/QToggle-B0HvuNEg.js +0 -1
  118. package/src/client/dist/spa/assets/QTooltip-kLXuUa_m.js +0 -1
  119. package/src/client/dist/spa/assets/SearchPage-CCfyqBKh.js +0 -1
  120. package/src/client/dist/spa/assets/SettingsPage-CmyIsV-S.js +0 -1
  121. package/src/client/dist/spa/assets/TouchPan-CVMnGs0y.js +0 -1
  122. package/src/client/dist/spa/assets/WorkspacePage-CWRMLYs-.css +0 -1
  123. package/src/client/dist/spa/assets/WorkspacePage-Cl7YrG51.js +0 -4
  124. package/src/client/dist/spa/assets/focus-manager-DYbz9jFW.js +0 -1
  125. package/src/client/dist/spa/assets/format-Cyg8IgRi.js +0 -1
  126. package/src/client/dist/spa/assets/i18n-B13zBh1H.js +0 -1
  127. package/src/client/dist/spa/assets/i18n-CCWLBc0p.js +0 -1
  128. package/src/client/dist/spa/assets/index-DoNZ_5QK.js +0 -5
  129. package/src/client/dist/spa/assets/marked.esm-DCmk6NO8.js +0 -60
  130. package/src/client/dist/spa/assets/models-B8fzv7K4.js +0 -1
  131. package/src/client/dist/spa/assets/pinia-C3JsrLkB.js +0 -1
  132. package/src/client/dist/spa/assets/private.use-form-BhKyDtO7.js +0 -1
  133. package/src/client/dist/spa/assets/scroll-CLibRGI-.js +0 -1
  134. package/src/client/dist/spa/assets/settings-B69lIVX0.js +0 -1
  135. package/src/client/dist/spa/assets/touch-ChrvzrnI.js +0 -1
  136. package/src/client/dist/spa/assets/use-dark-DnuCB6tC.js +0 -1
  137. package/src/client/dist/spa/assets/use-quasar-DBoizHBW.js +0 -1
  138. /package/src/client/dist/spa/assets/{_plugin-vue_export-helper-Cxt1D8wE.js → _plugin-vue_export-helper-r4mAJOHR.js} +0 -0
  139. /package/src/client/dist/spa/assets/{abap-CFuyUYKP.js → abap-Bgec7Keq.js} +0 -0
  140. /package/src/client/dist/spa/assets/{apex-Ctq_xcrv.js → apex-VBlPwEoQ.js} +0 -0
  141. /package/src/client/dist/spa/assets/{azcli-BBQSVn-C.js → azcli-DKqrEFBx.js} +0 -0
  142. /package/src/client/dist/spa/assets/{bat-DbnqAfvr.js → bat-DdgQWy_0.js} +0 -0
  143. /package/src/client/dist/spa/assets/{bicep-BtDlIXop.js → bicep-CRMM43EB.js} +0 -0
  144. /package/src/client/dist/spa/assets/{cameligo-BLeJgKTj.js → cameligo-UatALtML.js} +0 -0
  145. /package/src/client/dist/spa/assets/{clojure-aZUQIUKP.js → clojure-D8JU08RA.js} +0 -0
  146. /package/src/client/dist/spa/assets/{coffee-Secadq9U.js → coffee-C56wu358.js} +0 -0
  147. /package/src/client/dist/spa/assets/{cpp-JicRPTRv.js → cpp-CyZLvhJG.js} +0 -0
  148. /package/src/client/dist/spa/assets/{csharp-C7NSOZyj.js → csharp-BJl3ixva.js} +0 -0
  149. /package/src/client/dist/spa/assets/{csp-CIje7830.js → csp-CxEKxmO-.js} +0 -0
  150. /package/src/client/dist/spa/assets/{css-G0bm1q_M.js → css-B0t_muXd.js} +0 -0
  151. /package/src/client/dist/spa/assets/{cypher-CldD5D0u.js → cypher-D1hqiMFD.js} +0 -0
  152. /package/src/client/dist/spa/assets/{dart-DIK3l8YT.js → dart-Bz550Pyv.js} +0 -0
  153. /package/src/client/dist/spa/assets/{dockerfile-czxaGh2L.js → dockerfile-CIXgVAuA.js} +0 -0
  154. /package/src/client/dist/spa/assets/{ecl-BqdYhwmw.js → ecl-D9qbvZoA.js} +0 -0
  155. /package/src/client/dist/spa/assets/{elixir-m52LePTW.js → elixir-b2M38fAy.js} +0 -0
  156. /package/src/client/dist/spa/assets/{flow9-B5QJ9GvZ.js → flow9-Dq1UYMkt.js} +0 -0
  157. /package/src/client/dist/spa/assets/{fsharp-B15czHsH.js → fsharp-CFNadkg7.js} +0 -0
  158. /package/src/client/dist/spa/assets/{go-BkoQxDo1.js → go-dSur1iB2.js} +0 -0
  159. /package/src/client/dist/spa/assets/{graphql-BnI6uRa_.js → graphql-qyhAo11d.js} +0 -0
  160. /package/src/client/dist/spa/assets/{hcl-CAwwENT7.js → hcl-DFzjMyzm.js} +0 -0
  161. /package/src/client/dist/spa/assets/{ini-BHM5zh1H.js → ini-TdzA8TIl.js} +0 -0
  162. /package/src/client/dist/spa/assets/{java-B5i95QvQ.js → java-CSGA9pkE.js} +0 -0
  163. /package/src/client/dist/spa/assets/{julia-DPDm885q.js → julia-9izz5OsY.js} +0 -0
  164. /package/src/client/dist/spa/assets/{kotlin-qoccd5BP.js → kotlin-DuPK7AtF.js} +0 -0
  165. /package/src/client/dist/spa/assets/{less-B6RU166D.js → less-B8d93iCg.js} +0 -0
  166. /package/src/client/dist/spa/assets/{lexon-YfUeoL1V.js → lexon-DWtEIyu7.js} +0 -0
  167. /package/src/client/dist/spa/assets/{lua-BIUI5y9b.js → lua-Ciq0OGgt.js} +0 -0
  168. /package/src/client/dist/spa/assets/{m3-D5SAbSdU.js → m3-Cki6JWj_.js} +0 -0
  169. /package/src/client/dist/spa/assets/{markdown-CVJLwHzJ.js → markdown-Cu47xwU0.js} +0 -0
  170. /package/src/client/dist/spa/assets/{mips-R-FZ3zOR.js → mips-BM8ui995.js} +0 -0
  171. /package/src/client/dist/spa/assets/{msdax-Blveyl9r.js → msdax-DqLio0_c.js} +0 -0
  172. /package/src/client/dist/spa/assets/{mysql-D4mY1AFx.js → mysql-v1wbjJOq.js} +0 -0
  173. /package/src/client/dist/spa/assets/{objective-c-BmXrLr4h.js → objective-c-CQl3PGSB.js} +0 -0
  174. /package/src/client/dist/spa/assets/{pascal-yxckoyvV.js → pascal-D4iW0ZtD.js} +0 -0
  175. /package/src/client/dist/spa/assets/{pascaligo-Q5JCwXMI.js → pascaligo-BdC9CZdj.js} +0 -0
  176. /package/src/client/dist/spa/assets/{perl-BF1Rrs5h.js → perl-BL10m4XD.js} +0 -0
  177. /package/src/client/dist/spa/assets/{pgsql-CnYB97wm.js → pgsql-Be_oqVo3.js} +0 -0
  178. /package/src/client/dist/spa/assets/{php-CdDfQfSg.js → php-BtvXSFRI.js} +0 -0
  179. /package/src/client/dist/spa/assets/{pla-whj-d71F.js → pla-B2vUy15C.js} +0 -0
  180. /package/src/client/dist/spa/assets/{postiats-ClfLr4I-.js → postiats-CbmTTfXr.js} +0 -0
  181. /package/src/client/dist/spa/assets/{powerquery-iRaBhuuk.js → powerquery-DszLhJGx.js} +0 -0
  182. /package/src/client/dist/spa/assets/{powershell-DjiEt5xK.js → powershell-B0dYktF6.js} +0 -0
  183. /package/src/client/dist/spa/assets/{protobuf-B6dcIEUr.js → protobuf-CZvaj1VX.js} +0 -0
  184. /package/src/client/dist/spa/assets/{pug-DtmHnjM9.js → pug-CPDx1B3S.js} +0 -0
  185. /package/src/client/dist/spa/assets/{qsharp-CELCyd79.js → qsharp-CDP9TFLl.js} +0 -0
  186. /package/src/client/dist/spa/assets/{r-ZpJXWV-o.js → r-8DbbFX2l.js} +0 -0
  187. /package/src/client/dist/spa/assets/{rate-limit-labels-dCPVjS61.js → rate-limit-labels-BoDORKFj.js} +0 -0
  188. /package/src/client/dist/spa/assets/{redis-BiHSNkAl.js → redis-DRWj9MtJ.js} +0 -0
  189. /package/src/client/dist/spa/assets/{redshift-DzuwYCHP.js → redshift-C6cElE_5.js} +0 -0
  190. /package/src/client/dist/spa/assets/{restructuredtext-YOT94bbS.js → restructuredtext-W9pS9n3m.js} +0 -0
  191. /package/src/client/dist/spa/assets/{ruby-BfiHr6Uu.js → ruby-BKnzWnk-.js} +0 -0
  192. /package/src/client/dist/spa/assets/{rust-JZ-uOoYM.js → rust-YPCclWwe.js} +0 -0
  193. /package/src/client/dist/spa/assets/{sb-CBglP1-t.js → sb-BgM4DTFb.js} +0 -0
  194. /package/src/client/dist/spa/assets/{scala-C9l41paw.js → scala-fz1OPLMl.js} +0 -0
  195. /package/src/client/dist/spa/assets/{scheme-B-InQ6hy.js → scheme-8Uz1RIbu.js} +0 -0
  196. /package/src/client/dist/spa/assets/{scss-v6OmJRN9.js → scss-Djo3IYXr.js} +0 -0
  197. /package/src/client/dist/spa/assets/{shell-Dyp6iwB6.js → shell-CINF5Tx_.js} +0 -0
  198. /package/src/client/dist/spa/assets/{solidity-D5epNWue.js → solidity-GgiNEuUm.js} +0 -0
  199. /package/src/client/dist/spa/assets/{sophia-Eva-79sB.js → sophia-Culj97P9.js} +0 -0
  200. /package/src/client/dist/spa/assets/{sparql-gvALLO1w.js → sparql-C2ZlpxOY.js} +0 -0
  201. /package/src/client/dist/spa/assets/{sql-COdamZYI.js → sql-BEf5Pg7Y.js} +0 -0
  202. /package/src/client/dist/spa/assets/{st-eMoImIwE.js → st-CT6UUoeH.js} +0 -0
  203. /package/src/client/dist/spa/assets/{swift-7R_T9RYH.js → swift-B5g0xTG3.js} +0 -0
  204. /package/src/client/dist/spa/assets/{symbols-CAg-nBkV.js → symbols-DCYodwb2.js} +0 -0
  205. /package/src/client/dist/spa/assets/{systemverilog-1pCEfaHU.js → systemverilog-CEgQz9DR.js} +0 -0
  206. /package/src/client/dist/spa/assets/{tcl-B_KgnhfE.js → tcl-D0qL2L0I.js} +0 -0
  207. /package/src/client/dist/spa/assets/{twig-CFZUJxb9.js → twig-BFUAVf1E.js} +0 -0
  208. /package/src/client/dist/spa/assets/{typespec-B1ZgHlud.js → typespec-CjVVcNKm.js} +0 -0
  209. /package/src/client/dist/spa/assets/{vb-DKdun5tL.js → vb-CZJr-DQz.js} +0 -0
  210. /package/src/client/dist/spa/assets/{vue-i18n-eUDnMrPl.js → vue-i18n-CeG0hR0Z.js} +0 -0
  211. /package/src/client/dist/spa/assets/{wgsl-CzNaxTrn.js → wgsl-ivoXUo2e.js} +0 -0
@@ -1,17 +1,15 @@
1
- <!DOCTYPE html><html><head><title>Kōbō</title><link rel=icon type=image/svg+xml href=/favicon.svg><meta charset=utf-8><meta name=description content="Kōbō — multi-workspace agent manager for Claude Code"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width,height=device-height"> <script type="module" crossorigin src="/assets/index-DoNZ_5QK.js"></script>
1
+ <!DOCTYPE html><html><head><title>Kōbō</title><link rel=icon type=image/svg+xml href=/favicon.svg><meta charset=utf-8><meta name=description content="Kōbō — multi-workspace agent manager for Claude Code"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width,height=device-height"> <script type="module" crossorigin src="/assets/index-CUI-zN26.js"></script>
2
2
  <link rel="modulepreload" crossorigin href="/assets/runtime-core.esm-bundler-C3IgBgY5.js">
3
- <link rel="modulepreload" crossorigin href="/assets/QSpinner-CliSLjf8.js">
4
- <link rel="modulepreload" crossorigin href="/assets/pinia-C3JsrLkB.js">
5
- <link rel="modulepreload" crossorigin href="/assets/QBtn-BsD8vrWq.js">
6
- <link rel="modulepreload" crossorigin href="/assets/use-dark-DnuCB6tC.js">
7
- <link rel="modulepreload" crossorigin href="/assets/private.use-form-BhKyDtO7.js">
8
- <link rel="modulepreload" crossorigin href="/assets/QToggle-B0HvuNEg.js">
9
- <link rel="modulepreload" crossorigin href="/assets/focus-manager-DYbz9jFW.js">
10
- <link rel="modulepreload" crossorigin href="/assets/scroll-CLibRGI-.js">
11
- <link rel="modulepreload" crossorigin href="/assets/QDialog-CkbLS1If.js">
12
- <link rel="modulepreload" crossorigin href="/assets/symbols-CAg-nBkV.js">
13
- <link rel="modulepreload" crossorigin href="/assets/vue-i18n-eUDnMrPl.js">
14
- <link rel="modulepreload" crossorigin href="/assets/i18n-B13zBh1H.js">
15
- <link rel="modulepreload" crossorigin href="/assets/settings-B69lIVX0.js">
3
+ <link rel="modulepreload" crossorigin href="/assets/vue-i18n-CeG0hR0Z.js">
4
+ <link rel="modulepreload" crossorigin href="/assets/QIcon-B0-pH3Qs.js">
5
+ <link rel="modulepreload" crossorigin href="/assets/QSeparator-rkjCbX2M.js">
6
+ <link rel="modulepreload" crossorigin href="/assets/use-id-CeduaJbU.js">
7
+ <link rel="modulepreload" crossorigin href="/assets/QBtn-CyzfM9-_.js">
8
+ <link rel="modulepreload" crossorigin href="/assets/private.use-form-D1RuEt2P.js">
9
+ <link rel="modulepreload" crossorigin href="/assets/use-checkbox-DYiZQsbF.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/scroll-JVVkg2Ng.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/use-portal-DBe4lcC2.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/QDialog-DQeAxY3-.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/symbols-DCYodwb2.js">
16
14
  <link rel="stylesheet" crossorigin href="/assets/index-eX_lKHSg.css">
17
15
  </head><body><div id=q-app></div></body></html>
@@ -4,7 +4,7 @@ Standalone MCP (Model Context Protocol) server spawned by Kōbō for each Claude
4
4
 
5
5
  ## How it runs
6
6
 
7
- Kōbō's `agent-manager.ts` writes a `.mcp.json` file into each worktree and passes it to Claude Code via `--mcp-config`. Claude spawns this server as a child process with stdio transport and injects these environment variables:
7
+ Kōbō's Claude Code engine (under `src/server/services/agent/engines/claude-code/`) writes a `.mcp.json` file into each worktree and passes it to Claude Code via `--mcp-config`. Claude spawns this server as a child process with stdio transport and injects these environment variables:
8
8
 
9
9
  | Env var | Purpose |
10
10
  |---|---|
@@ -1,89 +0,0 @@
1
- import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
2
- import path from 'node:path';
3
- import { Hono } from 'hono';
4
- import * as workspaceService from '../services/workspace-service.js';
5
- /** Hono sub-router for workspace plan file browsing (read-only). */
6
- const app = new Hono();
7
- /** Directories inside the worktree where plan / design doc files may live. */
8
- const PLAN_DIRS = ['docs/plans', 'docs/superpowers/plans', 'docs/superpowers/specs'];
9
- /** Only .md files are listed. */
10
- const MD_EXT = '.md';
11
- // GET /:id/plans — list plan files in the workspace worktree
12
- app.get('/:id/plans', (c) => {
13
- try {
14
- const id = c.req.param('id');
15
- const workspace = workspaceService.getWorkspace(id);
16
- if (!workspace) {
17
- return c.json({ error: `Workspace '${id}' not found` }, 404);
18
- }
19
- const worktreePath = path.join(workspace.projectPath, '.worktrees', workspace.workingBranch);
20
- const plans = [];
21
- for (const dir of PLAN_DIRS) {
22
- const absDir = path.join(worktreePath, dir);
23
- if (!existsSync(absDir))
24
- continue;
25
- try {
26
- const entries = readdirSync(absDir);
27
- for (const entry of entries) {
28
- if (!entry.endsWith(MD_EXT))
29
- continue;
30
- try {
31
- const absFile = path.join(absDir, entry);
32
- const stat = statSync(absFile);
33
- if (!stat.isFile())
34
- continue;
35
- plans.push({
36
- path: `${dir}/${entry}`,
37
- name: entry,
38
- modifiedAt: stat.mtime.toISOString(),
39
- });
40
- }
41
- catch {
42
- // Skip files we can't stat
43
- }
44
- }
45
- }
46
- catch {
47
- // Skip directories we can't read
48
- }
49
- }
50
- // Sort by modifiedAt descending (most recent first)
51
- plans.sort((a, b) => new Date(b.modifiedAt).getTime() - new Date(a.modifiedAt).getTime());
52
- return c.json({ plans });
53
- }
54
- catch (err) {
55
- const message = err instanceof Error ? err.message : String(err);
56
- return c.json({ error: message }, 500);
57
- }
58
- });
59
- // GET /:id/plan-file?path=<relative> — read a single plan file
60
- app.get('/:id/plan-file', (c) => {
61
- try {
62
- const id = c.req.param('id');
63
- const filePath = c.req.query('path');
64
- if (!filePath) {
65
- return c.json({ error: 'Missing path query parameter' }, 400);
66
- }
67
- const workspace = workspaceService.getWorkspace(id);
68
- if (!workspace) {
69
- return c.json({ error: `Workspace '${id}' not found` }, 404);
70
- }
71
- // Security: normalize the path and verify it stays within allowed directories
72
- const normalized = path.normalize(filePath);
73
- if (normalized.includes('..') || !PLAN_DIRS.some((dir) => normalized.startsWith(dir))) {
74
- return c.json({ error: 'Invalid path: must be under docs/plans/, docs/superpowers/plans/, or docs/superpowers/specs/' }, 400);
75
- }
76
- const worktreePath = path.join(workspace.projectPath, '.worktrees', workspace.workingBranch);
77
- const absPath = path.join(worktreePath, normalized);
78
- if (!existsSync(absPath)) {
79
- return c.json({ error: `Plan file not found: ${normalized}` }, 404);
80
- }
81
- const content = readFileSync(absPath, 'utf-8');
82
- return c.json({ content, path: normalized });
83
- }
84
- catch (err) {
85
- const message = err instanceof Error ? err.message : String(err);
86
- return c.json({ error: message }, 500);
87
- }
88
- });
89
- export default app;