agor-live 0.8.1 → 0.8.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 (221) hide show
  1. package/dist/cli/commands/db/migrate.js +5 -4
  2. package/dist/cli/commands/db/status.js +19 -15
  3. package/dist/cli/commands/init.js +7 -6
  4. package/dist/cli/commands/repo/add-local.d.ts +18 -0
  5. package/dist/cli/commands/repo/add-local.js +216 -0
  6. package/dist/cli/commands/repo/add.js +12 -3
  7. package/dist/cli/commands/repo/list.js +10 -4
  8. package/dist/cli/commands/repo/rm.js +22 -4
  9. package/dist/cli/commands/session/load-claude.js +3 -9
  10. package/dist/cli/commands/user/create-admin.js +21 -4
  11. package/dist/cli/commands/user/list.js +19 -14
  12. package/dist/core/api/index.d.cts +11 -2
  13. package/dist/core/api/index.d.ts +11 -2
  14. package/dist/core/claude/index.cjs +616 -109
  15. package/dist/core/claude/index.js +647 -127
  16. package/dist/core/client-CtwJFT0H.d.ts +5807 -0
  17. package/dist/core/client-DfarSYxI.d.cts +5807 -0
  18. package/dist/core/config/browser.cjs +1 -1
  19. package/dist/core/config/browser.d.cts +57 -4
  20. package/dist/core/config/browser.d.ts +57 -4
  21. package/dist/core/config/browser.js +1 -1
  22. package/dist/core/config/index.cjs +729 -111
  23. package/dist/core/config/index.d.cts +18 -4
  24. package/dist/core/config/index.d.ts +18 -4
  25. package/dist/core/config/index.js +756 -128
  26. package/dist/core/db/index.cjs +1178 -373
  27. package/dist/core/db/index.d.cts +5688 -13
  28. package/dist/core/db/index.d.ts +5688 -13
  29. package/dist/core/db/index.js +1175 -375
  30. package/dist/core/drizzle/postgres/0000_loud_loki.sql +224 -0
  31. package/dist/core/drizzle/postgres/0001_smart_obadiah_stane.sql +1 -0
  32. package/dist/core/drizzle/postgres/meta/0000_snapshot.json +1888 -0
  33. package/dist/core/drizzle/postgres/meta/0001_snapshot.json +1895 -0
  34. package/dist/core/drizzle/postgres/meta/_journal.json +20 -0
  35. package/dist/core/drizzle/sqlite/0011_curious_felicia_hardy.sql +1 -0
  36. package/dist/core/drizzle/sqlite/meta/0011_snapshot.json +1438 -0
  37. package/dist/core/drizzle/{meta → sqlite/meta}/_journal.json +7 -0
  38. package/dist/core/environment/variable-resolver.d.cts +1 -1
  39. package/dist/core/environment/variable-resolver.d.ts +1 -1
  40. package/dist/core/git/index.cjs +30 -6
  41. package/dist/core/git/index.d.cts +13 -2
  42. package/dist/core/git/index.d.ts +13 -2
  43. package/dist/core/git/index.js +30 -7
  44. package/dist/core/index.cjs +1270 -408
  45. package/dist/core/index.d.cts +12 -10
  46. package/dist/core/index.d.ts +12 -10
  47. package/dist/core/index.js +1263 -410
  48. package/dist/core/{repo-B1M9axPS.d.ts → repo-BqbCoVbX.d.ts} +18 -6
  49. package/dist/core/{repo-D4EXWOuB.d.cts → repo-CnGt1AAP.d.cts} +18 -6
  50. package/dist/core/seed/index.cjs +1190 -490
  51. package/dist/core/seed/index.js +1186 -480
  52. package/dist/core/tools/index.cjs +891 -312
  53. package/dist/core/tools/index.d.cts +14 -23
  54. package/dist/core/tools/index.d.ts +14 -23
  55. package/dist/core/tools/index.js +921 -329
  56. package/dist/core/types/index.d.cts +1 -1
  57. package/dist/core/types/index.d.ts +1 -1
  58. package/dist/core/{worktrees-CabqdwJo.d.cts → worktrees-BQpUXSiu.d.cts} +3 -78
  59. package/dist/core/{worktrees-D8UEZ0Kd.d.ts → worktrees-DGQZ-4Cv.d.ts} +3 -78
  60. package/dist/daemon/declarations.d.ts +5 -0
  61. package/dist/daemon/index.js +266 -81
  62. package/dist/daemon/services/board-objects.js +13 -3
  63. package/dist/daemon/services/config.js +15 -0
  64. package/dist/daemon/services/leaderboard.js +26 -22
  65. package/dist/daemon/services/repos.d.ts +9 -1
  66. package/dist/daemon/services/repos.js +128 -8
  67. package/dist/daemon/services/sessions.js +0 -4
  68. package/dist/daemon/services/users.js +18 -14
  69. package/dist/ui/assets/{_basePickBy-IDayUuFl.js → _basePickBy-CWF4zzgB.js} +1 -1
  70. package/dist/ui/assets/_basePickBy-CWF4zzgB.js.gz +0 -0
  71. package/dist/ui/assets/{_baseUniq-pTRckWwv.js → _baseUniq-CM4NLon9.js} +1 -1
  72. package/dist/ui/assets/_baseUniq-CM4NLon9.js.gz +0 -0
  73. package/dist/ui/assets/{arc-CKAf5Yae.js → arc-CIjuwL0B.js} +1 -1
  74. package/dist/ui/assets/arc-CIjuwL0B.js.gz +0 -0
  75. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-DZ1BbzT5.js → architectureDiagram-VXUJARFQ-C0hof0OC.js} +1 -1
  76. package/dist/ui/assets/architectureDiagram-VXUJARFQ-C0hof0OC.js.gz +0 -0
  77. package/dist/ui/assets/{blockDiagram-VD42YOAC-DXz_vSoa.js → blockDiagram-VD42YOAC-C_DAxOxv.js} +1 -1
  78. package/dist/ui/assets/blockDiagram-VD42YOAC-C_DAxOxv.js.gz +0 -0
  79. package/dist/ui/assets/{c4Diagram-YG6GDRKO-CKzoM1Bs.js → c4Diagram-YG6GDRKO-CCdIE46B.js} +1 -1
  80. package/dist/ui/assets/c4Diagram-YG6GDRKO-CCdIE46B.js.gz +0 -0
  81. package/dist/ui/assets/channel-ywjLaoiM.js +1 -0
  82. package/dist/ui/assets/{chunk-4BX2VUAB-PFWyLOWD.js → chunk-4BX2VUAB-B6ym49qO.js} +1 -1
  83. package/dist/ui/assets/{chunk-55IACEB6-BSFhaugq.js → chunk-55IACEB6-BS-3qSF0.js} +1 -1
  84. package/dist/ui/assets/{chunk-B4BG7PRW-CAwQ2gOm.js → chunk-B4BG7PRW-CH9vAggf.js} +1 -1
  85. package/dist/ui/assets/chunk-B4BG7PRW-CH9vAggf.js.gz +0 -0
  86. package/dist/ui/assets/{chunk-DI55MBZ5-B04QVmg3.js → chunk-DI55MBZ5-DSoQkehV.js} +1 -1
  87. package/dist/ui/assets/chunk-DI55MBZ5-DSoQkehV.js.gz +0 -0
  88. package/dist/ui/assets/{chunk-FMBD7UC4-CYNthxFT.js → chunk-FMBD7UC4-CxtkUQIy.js} +1 -1
  89. package/dist/ui/assets/{chunk-QN33PNHL-D4Owua8X.js → chunk-QN33PNHL-CCCQIALa.js} +1 -1
  90. package/dist/ui/assets/{chunk-QZHKN3VN-CEZcqXSO.js → chunk-QZHKN3VN-CyLbYZoF.js} +1 -1
  91. package/dist/ui/assets/{chunk-TZMSLE5B-Bh2hJm-8.js → chunk-TZMSLE5B-dpQkWn_i.js} +1 -1
  92. package/dist/ui/assets/chunk-TZMSLE5B-dpQkWn_i.js.gz +0 -0
  93. package/dist/ui/assets/classDiagram-2ON5EDUG-D99C2VtW.js +1 -0
  94. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-D99C2VtW.js +1 -0
  95. package/dist/ui/assets/clone-CWbdf7Z5.js +1 -0
  96. package/dist/ui/assets/{cose-bilkent-S5V4N54A-At4gpvlq.js → cose-bilkent-S5V4N54A-Byg-yKL_.js} +1 -1
  97. package/dist/ui/assets/cose-bilkent-S5V4N54A-Byg-yKL_.js.gz +0 -0
  98. package/dist/ui/assets/{dagre-6UL2VRFP-CFMboGC2.js → dagre-6UL2VRFP-B5xXbHAH.js} +1 -1
  99. package/dist/ui/assets/dagre-6UL2VRFP-B5xXbHAH.js.gz +0 -0
  100. package/dist/ui/assets/{diagram-PSM6KHXK-ClNj_8iH.js → diagram-PSM6KHXK-DXnowg-u.js} +1 -1
  101. package/dist/ui/assets/diagram-PSM6KHXK-DXnowg-u.js.gz +0 -0
  102. package/dist/ui/assets/{diagram-QEK2KX5R-DmZAqpPs.js → diagram-QEK2KX5R-DOFOk8a_.js} +1 -1
  103. package/dist/ui/assets/diagram-QEK2KX5R-DOFOk8a_.js.gz +0 -0
  104. package/dist/ui/assets/{diagram-S2PKOQOG-ChtiwWJv.js → diagram-S2PKOQOG-7kGbu56L.js} +1 -1
  105. package/dist/ui/assets/diagram-S2PKOQOG-7kGbu56L.js.gz +0 -0
  106. package/dist/ui/assets/{erDiagram-Q2GNP2WA-BYoMyfdT.js → erDiagram-Q2GNP2WA-CMU8zeJ0.js} +1 -1
  107. package/dist/ui/assets/erDiagram-Q2GNP2WA-CMU8zeJ0.js.gz +0 -0
  108. package/dist/ui/assets/{flowDiagram-NV44I4VS-BfMHk5l4.js → flowDiagram-NV44I4VS-DaINI256.js} +1 -1
  109. package/dist/ui/assets/flowDiagram-NV44I4VS-DaINI256.js.gz +0 -0
  110. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-CWq9HKP-.js → ganttDiagram-LVOFAZNH-Be7NSitd.js} +1 -1
  111. package/dist/ui/assets/ganttDiagram-LVOFAZNH-Be7NSitd.js.gz +0 -0
  112. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CwtD0CGB.js → gitGraphDiagram-NY62KEGX-By34460V.js} +1 -1
  113. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-By34460V.js.gz +0 -0
  114. package/dist/ui/assets/{graph-Ds6pFyG9.js → graph-NyoK-Uig.js} +1 -1
  115. package/dist/ui/assets/graph-NyoK-Uig.js.gz +0 -0
  116. package/dist/ui/assets/index-CUlxsIiz.js +1402 -0
  117. package/dist/ui/assets/index-CUlxsIiz.js.gz +0 -0
  118. package/dist/ui/assets/index-Dv79Y6gF.css +1 -0
  119. package/dist/ui/assets/index-Dv79Y6gF.css.gz +0 -0
  120. package/dist/ui/assets/{infoDiagram-ER5ION4S-Cl8I1ZMS.js → infoDiagram-ER5ION4S-DZDf4Njw.js} +1 -1
  121. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-B9tYglzB.js → journeyDiagram-XKPGCS4Q-Cgr-Eqfh.js} +1 -1
  122. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-Cgr-Eqfh.js.gz +0 -0
  123. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-CnyPfKo4.js → kanban-definition-3W4ZIXB7-n_eTrGhM.js} +1 -1
  124. package/dist/ui/assets/kanban-definition-3W4ZIXB7-n_eTrGhM.js.gz +0 -0
  125. package/dist/ui/assets/katex-Br2y_YL1.css +1 -0
  126. package/dist/ui/assets/katex-Br2y_YL1.css.gz +0 -0
  127. package/dist/ui/assets/{layout-Dfhvjm8l.js → layout-D5v-gRFR.js} +1 -1
  128. package/dist/ui/assets/layout-D5v-gRFR.js.gz +0 -0
  129. package/dist/ui/assets/{linear-KhYTO2KP.js → linear-PC8DSbQR.js} +1 -1
  130. package/dist/ui/assets/linear-PC8DSbQR.js.gz +0 -0
  131. package/dist/ui/assets/{mermaid.core-CJyUOghc.js → mermaid.core-DKyW12SO.js} +5 -5
  132. package/dist/ui/assets/mermaid.core-DKyW12SO.js.gz +0 -0
  133. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-B1v2bs4i.js → mindmap-definition-VGOIOE7T-BouGsMFI.js} +1 -1
  134. package/dist/ui/assets/mindmap-definition-VGOIOE7T-BouGsMFI.js.gz +0 -0
  135. package/dist/ui/assets/{pieDiagram-ADFJNKIX-WGNTSHGw.js → pieDiagram-ADFJNKIX-CgOfJZ_D.js} +1 -1
  136. package/dist/ui/assets/pieDiagram-ADFJNKIX-CgOfJZ_D.js.gz +0 -0
  137. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-CDzsCcCj.js → quadrantDiagram-AYHSOK5B-CHnbgtoU.js} +1 -1
  138. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-CHnbgtoU.js.gz +0 -0
  139. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-BEdQl_c-.js → requirementDiagram-UZGBJVZJ-uas2IjRA.js} +1 -1
  140. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-uas2IjRA.js.gz +0 -0
  141. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-_Nn2MQsp.js → sankeyDiagram-TZEHDZUN-CrfbDu-2.js} +1 -1
  142. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-CrfbDu-2.js.gz +0 -0
  143. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-izzqfUoT.js → sequenceDiagram-WL72ISMW-BU9w1rcP.js} +1 -1
  144. package/dist/ui/assets/sequenceDiagram-WL72ISMW-BU9w1rcP.js.gz +0 -0
  145. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-Du1UnWS0.js → stateDiagram-FKZM4ZOC-DF1cvysV.js} +1 -1
  146. package/dist/ui/assets/stateDiagram-FKZM4ZOC-DF1cvysV.js.gz +0 -0
  147. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BeexfTpP.js +1 -0
  148. package/dist/ui/assets/{timeline-definition-IT6M3QCI-BGOCLsAy.js → timeline-definition-IT6M3QCI-BGJIUWlE.js} +1 -1
  149. package/dist/ui/assets/timeline-definition-IT6M3QCI-BGJIUWlE.js.gz +0 -0
  150. package/dist/ui/assets/{treemap-KMMF4GRG-CcSska5M.js → treemap-KMMF4GRG-DCjahiUv.js} +1 -1
  151. package/dist/ui/assets/treemap-KMMF4GRG-DCjahiUv.js.gz +0 -0
  152. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-sTQh2tQw.js → xychartDiagram-PRI3JC2R-BNZPPMd5.js} +1 -1
  153. package/dist/ui/assets/xychartDiagram-PRI3JC2R-BNZPPMd5.js.gz +0 -0
  154. package/dist/ui/index.html +2 -2
  155. package/package.json +19 -16
  156. package/dist/core/client-CcsvWV9k.d.cts +0 -2966
  157. package/dist/core/client-WnMz-S0s.d.ts +0 -2966
  158. package/dist/core/drizzle/0006_add_ready_for_prompt.sql.bak +0 -1
  159. package/dist/core/drizzle/0007_add_needs_attention.sql.bak +0 -1
  160. package/dist/ui/assets/_basePickBy-IDayUuFl.js.gz +0 -0
  161. package/dist/ui/assets/_baseUniq-pTRckWwv.js.gz +0 -0
  162. package/dist/ui/assets/arc-CKAf5Yae.js.gz +0 -0
  163. package/dist/ui/assets/architectureDiagram-VXUJARFQ-DZ1BbzT5.js.gz +0 -0
  164. package/dist/ui/assets/blockDiagram-VD42YOAC-DXz_vSoa.js.gz +0 -0
  165. package/dist/ui/assets/c4Diagram-YG6GDRKO-CKzoM1Bs.js.gz +0 -0
  166. package/dist/ui/assets/channel-DVJm-FMC.js +0 -1
  167. package/dist/ui/assets/chunk-B4BG7PRW-CAwQ2gOm.js.gz +0 -0
  168. package/dist/ui/assets/chunk-DI55MBZ5-B04QVmg3.js.gz +0 -0
  169. package/dist/ui/assets/chunk-TZMSLE5B-Bh2hJm-8.js.gz +0 -0
  170. package/dist/ui/assets/classDiagram-2ON5EDUG-g7OJc0Ig.js +0 -1
  171. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-g7OJc0Ig.js +0 -1
  172. package/dist/ui/assets/clone-DiT5ssX1.js +0 -1
  173. package/dist/ui/assets/cose-bilkent-S5V4N54A-At4gpvlq.js.gz +0 -0
  174. package/dist/ui/assets/dagre-6UL2VRFP-CFMboGC2.js.gz +0 -0
  175. package/dist/ui/assets/diagram-PSM6KHXK-ClNj_8iH.js.gz +0 -0
  176. package/dist/ui/assets/diagram-QEK2KX5R-DmZAqpPs.js.gz +0 -0
  177. package/dist/ui/assets/diagram-S2PKOQOG-ChtiwWJv.js.gz +0 -0
  178. package/dist/ui/assets/erDiagram-Q2GNP2WA-BYoMyfdT.js.gz +0 -0
  179. package/dist/ui/assets/flowDiagram-NV44I4VS-BfMHk5l4.js.gz +0 -0
  180. package/dist/ui/assets/ganttDiagram-LVOFAZNH-CWq9HKP-.js.gz +0 -0
  181. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CwtD0CGB.js.gz +0 -0
  182. package/dist/ui/assets/graph-Ds6pFyG9.js.gz +0 -0
  183. package/dist/ui/assets/index-BE42lQpK.css +0 -1
  184. package/dist/ui/assets/index-BE42lQpK.css.gz +0 -0
  185. package/dist/ui/assets/index-DeOq507f.js +0 -1372
  186. package/dist/ui/assets/index-DeOq507f.js.gz +0 -0
  187. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B9tYglzB.js.gz +0 -0
  188. package/dist/ui/assets/kanban-definition-3W4ZIXB7-CnyPfKo4.js.gz +0 -0
  189. package/dist/ui/assets/layout-Dfhvjm8l.js.gz +0 -0
  190. package/dist/ui/assets/linear-KhYTO2KP.js.gz +0 -0
  191. package/dist/ui/assets/mermaid.core-CJyUOghc.js.gz +0 -0
  192. package/dist/ui/assets/mindmap-definition-VGOIOE7T-B1v2bs4i.js.gz +0 -0
  193. package/dist/ui/assets/pieDiagram-ADFJNKIX-WGNTSHGw.js.gz +0 -0
  194. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-CDzsCcCj.js.gz +0 -0
  195. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-BEdQl_c-.js.gz +0 -0
  196. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-_Nn2MQsp.js.gz +0 -0
  197. package/dist/ui/assets/sequenceDiagram-WL72ISMW-izzqfUoT.js.gz +0 -0
  198. package/dist/ui/assets/stateDiagram-FKZM4ZOC-Du1UnWS0.js.gz +0 -0
  199. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BkR3bHYO.js +0 -1
  200. package/dist/ui/assets/timeline-definition-IT6M3QCI-BGOCLsAy.js.gz +0 -0
  201. package/dist/ui/assets/treemap-KMMF4GRG-CcSska5M.js.gz +0 -0
  202. package/dist/ui/assets/xychartDiagram-PRI3JC2R-sTQh2tQw.js.gz +0 -0
  203. /package/dist/core/drizzle/{0000_pretty_mac_gargan.sql → sqlite/0000_pretty_mac_gargan.sql} +0 -0
  204. /package/dist/core/drizzle/{0001_organic_stick.sql → sqlite/0001_organic_stick.sql} +0 -0
  205. /package/dist/core/drizzle/{0002_clammy_captain_flint.sql → sqlite/0002_clammy_captain_flint.sql} +0 -0
  206. /package/dist/core/drizzle/{0003_tough_iron_lad.sql → sqlite/0003_tough_iron_lad.sql} +0 -0
  207. /package/dist/core/drizzle/{0004_add_static_urls.sql → sqlite/0004_add_static_urls.sql} +0 -0
  208. /package/dist/core/drizzle/{0005_clammy_mole_man.sql → sqlite/0005_clammy_mole_man.sql} +0 -0
  209. /package/dist/core/drizzle/{0008_stale_marauders.sql → sqlite/0008_stale_marauders.sql} +0 -0
  210. /package/dist/core/drizzle/{0009_reconcile-missing-columns.sql → sqlite/0009_reconcile-missing-columns.sql} +0 -0
  211. /package/dist/core/drizzle/{0010_add_archive_columns.sql → sqlite/0010_add_archive_columns.sql} +0 -0
  212. /package/dist/core/drizzle/{meta → sqlite/meta}/0000_snapshot.json +0 -0
  213. /package/dist/core/drizzle/{meta → sqlite/meta}/0001_snapshot.json +0 -0
  214. /package/dist/core/drizzle/{meta → sqlite/meta}/0002_snapshot.json +0 -0
  215. /package/dist/core/drizzle/{meta → sqlite/meta}/0003_snapshot.json +0 -0
  216. /package/dist/core/drizzle/{meta → sqlite/meta}/0004_snapshot.json +0 -0
  217. /package/dist/core/drizzle/{meta → sqlite/meta}/0005_snapshot.json +0 -0
  218. /package/dist/core/drizzle/{meta → sqlite/meta}/0008_snapshot.json +0 -0
  219. /package/dist/core/drizzle/{meta → sqlite/meta}/0009_snapshot.json +0 -0
  220. /package/dist/core/drizzle/{meta → sqlite/meta}/0010_snapshot.json +0 -0
  221. /package/dist/core/drizzle/{meta → sqlite/meta}/_journal.json.backup +0 -0
@@ -3,16 +3,17 @@ import { checkMigrationStatus, createDatabase, runMigrations } from "@agor/core/
3
3
  import { expandPath, extractDbFilePath } from "@agor/core/utils/path";
4
4
  import { Command } from "@oclif/core";
5
5
  import chalk from "chalk";
6
- var DbMigrate = class extends Command {
6
+ var DbMigrate = class _DbMigrate extends Command {
7
7
  static description = "Run pending database migrations";
8
8
  static examples = ["<%= config.bin %> <%= command.id %>"];
9
9
  async run() {
10
+ await this.parse(_DbMigrate);
10
11
  try {
11
- const dbPath = expandPath(process.env.AGOR_DB_PATH || "file:~/.agor/agor.db");
12
- const dbFilePath = extractDbFilePath(dbPath);
12
+ const dbUrl = process.env.DATABASE_URL || expandPath(process.env.AGOR_DB_PATH || "file:~/.agor/agor.db");
13
+ const dbFilePath = extractDbFilePath(dbUrl);
13
14
  this.log(chalk.bold("\u{1F50D} Checking database migration status..."));
14
15
  this.log("");
15
- const db = createDatabase({ url: dbPath });
16
+ const db = createDatabase({ url: dbUrl });
16
17
  const status = await checkMigrationStatus(db);
17
18
  if (!status.hasPending) {
18
19
  this.log(`${chalk.green("\u2713")} Database is already up to date!`);
@@ -1,5 +1,5 @@
1
1
  // src/commands/db/status.ts
2
- import { createDatabase, sql } from "@agor/core/db";
2
+ import { createDatabase, isSQLiteDatabase, sql } from "@agor/core/db";
3
3
  import { expandPath } from "@agor/core/utils/path";
4
4
  import { Command } from "@oclif/core";
5
5
  import chalk from "chalk";
@@ -8,28 +8,32 @@ var DbStatus = class extends Command {
8
8
  static examples = ["<%= config.bin %> <%= command.id %>"];
9
9
  async run() {
10
10
  try {
11
- const dbPath = expandPath(process.env.AGOR_DB_PATH || "file:~/.agor/agor.db");
12
- const db = createDatabase({ url: dbPath });
13
- const tableCheck = await db.run(sql`
14
- SELECT name FROM sqlite_master
15
- WHERE type='table' AND name='__drizzle_migrations'
16
- `);
17
- if (tableCheck.rows.length === 0) {
11
+ const dbUrl = process.env.DATABASE_URL || expandPath(process.env.AGOR_DB_PATH || "file:~/.agor/agor.db");
12
+ const db = createDatabase({ url: dbUrl });
13
+ const tableCheck = isSQLiteDatabase(db) ? await db.run(
14
+ sql`SELECT name FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`
15
+ ) : await db.execute(
16
+ sql`SELECT table_name as name FROM information_schema.tables WHERE table_schema = 'drizzle' AND table_name = '__drizzle_migrations'`
17
+ );
18
+ const tableCheckResult = tableCheck;
19
+ if (tableCheckResult.rows.length === 0) {
18
20
  this.log(
19
21
  `${chalk.yellow("\u26A0")} No migrations table found. Run ${chalk.cyan("agor db migrate")} to initialize.`
20
22
  );
21
23
  return;
22
24
  }
23
- const result = await db.run(sql`
24
- SELECT hash, created_at FROM __drizzle_migrations
25
- ORDER BY created_at ASC
26
- `);
27
- if (result.rows.length === 0) {
25
+ const result = isSQLiteDatabase(db) ? await db.run(
26
+ sql`SELECT hash, created_at FROM __drizzle_migrations ORDER BY created_at ASC`
27
+ ) : await db.execute(
28
+ sql`SELECT hash, created_at FROM drizzle.__drizzle_migrations ORDER BY created_at ASC`
29
+ );
30
+ const queryResult = result;
31
+ if (queryResult.rows.length === 0) {
28
32
  this.log("No migrations applied yet");
29
33
  return;
30
34
  }
31
35
  this.log(chalk.bold("\nApplied migrations:\n"));
32
- result.rows.forEach((row) => {
36
+ queryResult.rows.forEach((row) => {
33
37
  const migration = row;
34
38
  const date = new Date(migration.created_at);
35
39
  const formattedDate = date.toLocaleString();
@@ -38,7 +42,7 @@ var DbStatus = class extends Command {
38
42
  );
39
43
  });
40
44
  this.log(`
41
- ${chalk.bold(`Total: ${result.rows.length} migration(s)`)}`);
45
+ ${chalk.bold(`Total: ${queryResult.rows.length} migration(s)`)}`);
42
46
  } catch (error) {
43
47
  this.error(
44
48
  `Failed to get migration status: ${error instanceof Error ? error.message : String(error)}`
@@ -62,12 +62,12 @@ var Init = class _Init extends Command {
62
62
  */
63
63
  async getDbStats(dbPath) {
64
64
  try {
65
- const { createDatabase: createDatabase2, sessions, tasks, messages, repos } = await import("@agor/core/db");
65
+ const { createDatabase: createDatabase2, select, sessions, tasks, messages, repos } = await import("@agor/core/db");
66
66
  const db = createDatabase2({ url: `file:${dbPath}` });
67
- const sessionRows = await db.select({ id: sessions.session_id }).from(sessions).all();
68
- const taskRows = await db.select({ id: tasks.task_id }).from(tasks).all();
69
- const messageRows = await db.select({ id: messages.message_id }).from(messages).all();
70
- const repoRows = await db.select({ id: repos.repo_id }).from(repos).all();
67
+ const sessionRows = await select(db).from(sessions).all();
68
+ const taskRows = await select(db).from(tasks).all();
69
+ const messageRows = await select(db).from(messages).all();
70
+ const repoRows = await select(db).from(repos).all();
71
71
  return {
72
72
  sessions: sessionRows.length,
73
73
  tasks: taskRows.length,
@@ -238,7 +238,8 @@ var Init = class _Init extends Command {
238
238
  join(baseDir, "repos"),
239
239
  join(baseDir, "worktrees"),
240
240
  join(baseDir, "concepts"),
241
- join(baseDir, "logs")
241
+ join(baseDir, "logs"),
242
+ join(baseDir, "codex")
242
243
  ];
243
244
  for (const dir of dirs) {
244
245
  await mkdir(dir, { recursive: true });
@@ -0,0 +1,18 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import '@agor/core/api';
4
+ import '@oclif/core';
5
+
6
+ declare class RepoAddLocal extends BaseCommand {
7
+ static description: string;
8
+ static examples: string[];
9
+ static args: {
10
+ path: _oclif_core_interfaces.Arg<string, Record<string, unknown>>;
11
+ };
12
+ static flags: {
13
+ slug: _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+
18
+ export { RepoAddLocal as default };
@@ -0,0 +1,216 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __esm = (fn, res) => function __init() {
4
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
5
+ };
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+
11
+ // src/lib/auth.ts
12
+ var auth_exports = {};
13
+ __export(auth_exports, {
14
+ clearToken: () => clearToken,
15
+ loadToken: () => loadToken,
16
+ saveToken: () => saveToken
17
+ });
18
+ import { mkdir, readFile, unlink, writeFile } from "fs/promises";
19
+ import { homedir } from "os";
20
+ import { join } from "path";
21
+ async function saveToken(auth) {
22
+ await mkdir(AGOR_DIR, { recursive: true });
23
+ await writeFile(TOKEN_FILE, JSON.stringify(auth, null, 2), {
24
+ mode: 384
25
+ // Owner read/write only
26
+ });
27
+ }
28
+ async function loadToken() {
29
+ try {
30
+ const data = await readFile(TOKEN_FILE, "utf-8");
31
+ const auth = JSON.parse(data);
32
+ if (auth.expiresAt && Date.now() > auth.expiresAt) {
33
+ await clearToken();
34
+ return null;
35
+ }
36
+ return auth;
37
+ } catch {
38
+ return null;
39
+ }
40
+ }
41
+ async function clearToken() {
42
+ try {
43
+ await unlink(TOKEN_FILE);
44
+ } catch {
45
+ }
46
+ }
47
+ var AGOR_DIR, TOKEN_FILE;
48
+ var init_auth = __esm({
49
+ "src/lib/auth.ts"() {
50
+ "use strict";
51
+ AGOR_DIR = join(homedir(), ".agor");
52
+ TOKEN_FILE = join(AGOR_DIR, "cli-token");
53
+ }
54
+ });
55
+
56
+ // src/commands/repo/add-local.ts
57
+ import { Args, Flags } from "@oclif/core";
58
+ import chalk2 from "chalk";
59
+
60
+ // src/base-command.ts
61
+ init_auth();
62
+ import { createRestClient, isDaemonRunning } from "@agor/core/api";
63
+ import { getDaemonUrl } from "@agor/core/config";
64
+ import { Command } from "@oclif/core";
65
+ import chalk from "chalk";
66
+ var BaseCommand = class extends Command {
67
+ daemonUrl = null;
68
+ /**
69
+ * Connect to daemon (checks if running first)
70
+ *
71
+ * @returns Feathers client instance
72
+ */
73
+ async connectToDaemon() {
74
+ this.daemonUrl = await getDaemonUrl();
75
+ const running = await isDaemonRunning(this.daemonUrl);
76
+ if (!running) {
77
+ this.log(
78
+ chalk.red("\u2717 Daemon not running") + "\n\n" + chalk.bold("To start the daemon:") + "\n " + chalk.cyan("cd apps/agor-daemon && pnpm dev") + "\n\n" + chalk.bold("To configure daemon URL:") + "\n " + chalk.cyan("agor config set daemon.url <url>") + "\n " + chalk.gray(`Current: ${this.daemonUrl}`)
79
+ );
80
+ this.exit(1);
81
+ }
82
+ const client = await createRestClient(this.daemonUrl);
83
+ const storedAuth = await loadToken();
84
+ if (storedAuth) {
85
+ try {
86
+ await client.authenticate({
87
+ strategy: "jwt",
88
+ accessToken: storedAuth.accessToken
89
+ });
90
+ } catch (_error) {
91
+ const { clearToken: clearToken2 } = await Promise.resolve().then(() => (init_auth(), auth_exports));
92
+ await clearToken2();
93
+ this.error(
94
+ chalk.red("\u2717 Authentication failed") + "\n\n" + chalk.dim("Your session has expired or is invalid.") + "\n" + chalk.dim("Please login again:") + "\n " + chalk.cyan("agor login")
95
+ );
96
+ }
97
+ } else {
98
+ try {
99
+ const response = await fetch(`${this.daemonUrl}/health`);
100
+ const health = await response.json();
101
+ if (health.auth?.requireAuth) {
102
+ this.error(
103
+ chalk.red("\u2717 Not authenticated") + "\n\n" + chalk.dim("This Agor instance requires authentication.") + "\n" + chalk.dim("Please login:") + "\n " + chalk.cyan("agor login")
104
+ );
105
+ }
106
+ try {
107
+ await client.authenticate({ strategy: "anonymous" });
108
+ } catch (_authError) {
109
+ this.error(
110
+ chalk.red("\u2717 Authentication failed") + "\n\n" + chalk.dim("Please login:") + "\n " + chalk.cyan("agor login")
111
+ );
112
+ }
113
+ } catch (_error) {
114
+ try {
115
+ await client.authenticate({ strategy: "anonymous" });
116
+ } catch {
117
+ this.error(
118
+ chalk.red("\u2717 Not authenticated") + "\n\n" + chalk.dim("Please login to use the Agor CLI:") + "\n " + chalk.cyan("agor login")
119
+ );
120
+ }
121
+ }
122
+ }
123
+ return client;
124
+ }
125
+ /**
126
+ * Cleanup client connection
127
+ *
128
+ * Ensures socket is properly closed to prevent hanging processes
129
+ */
130
+ async cleanupClient(client) {
131
+ client.io.io.opts.reconnection = false;
132
+ client.io.removeAllListeners();
133
+ client.io.close();
134
+ await new Promise((resolve) => setTimeout(resolve, 100));
135
+ }
136
+ };
137
+
138
+ // src/commands/repo/add-local.ts
139
+ var RepoAddLocal = class _RepoAddLocal extends BaseCommand {
140
+ static description = "Add an existing local git repository to Agor";
141
+ static examples = [
142
+ "# Auto-detect slug from git remote",
143
+ "<%= config.bin %> <%= command.id %> ~/code/myapp",
144
+ "",
145
+ "# Provide explicit slug",
146
+ "<%= config.bin %> <%= command.id %> ~/code/myapp --slug company/myapp"
147
+ ];
148
+ static args = {
149
+ path: Args.string({
150
+ description: "Absolute path to local git repository (supports ~ expansion)",
151
+ required: true
152
+ })
153
+ };
154
+ static flags = {
155
+ slug: Flags.string({
156
+ char: "s",
157
+ description: "Custom slug (org/name) for the repository"
158
+ })
159
+ };
160
+ async run() {
161
+ const { args, flags } = await this.parse(_RepoAddLocal);
162
+ const client = await this.connectToDaemon();
163
+ try {
164
+ const repoPath = args.path;
165
+ this.log("");
166
+ this.log(chalk2.bold(`Registering local repository: ${chalk2.cyan(repoPath)}`));
167
+ if (flags.slug) {
168
+ this.log(chalk2.dim(`Using slug: ${chalk2.cyan(flags.slug)}`));
169
+ } else {
170
+ this.log(chalk2.dim("Attempting to auto-detect slug from git remote (origin)..."));
171
+ }
172
+ this.log("");
173
+ const repo = await client.service("repos/local").create({
174
+ path: repoPath,
175
+ slug: flags.slug
176
+ });
177
+ this.log(`${chalk2.green("\u2713")} Local repository added`);
178
+ this.log(chalk2.dim(` Type: local`));
179
+ this.log(chalk2.dim(` Slug: ${repo.slug}`));
180
+ this.log(chalk2.dim(` Path: ${repo.local_path}`));
181
+ if (repo.remote_url) {
182
+ this.log(chalk2.dim(` Remote: ${repo.remote_url}`));
183
+ } else {
184
+ this.log(chalk2.dim(" Remote: (none detected)"));
185
+ }
186
+ this.log(chalk2.dim(` Default branch: ${repo.default_branch ?? "unknown"}`));
187
+ this.log("");
188
+ await this.cleanupClient(client);
189
+ } catch (error) {
190
+ await this.cleanupClient(client);
191
+ const message = error instanceof Error ? error.message : String(error);
192
+ this.log("");
193
+ if (/Not a valid git repository/i.test(message)) {
194
+ this.log(chalk2.red("\u2717 Not a valid git repository"));
195
+ this.log(chalk2.dim(message));
196
+ } else if (/already exists/i.test(message)) {
197
+ this.log(chalk2.red("\u2717 Repository already exists"));
198
+ this.log(chalk2.dim(message));
199
+ } else if (/Could not auto-detect slug/i.test(message)) {
200
+ this.log(chalk2.red("\u2717 Could not auto-detect slug"));
201
+ this.log(chalk2.dim(message));
202
+ } else if (/Path must be absolute/i.test(message)) {
203
+ this.log(chalk2.red("\u2717 Path must be absolute"));
204
+ this.log(chalk2.dim(message));
205
+ } else {
206
+ this.log(chalk2.red("\u2717 Failed to add local repository"));
207
+ this.log(chalk2.dim(message));
208
+ }
209
+ this.log("");
210
+ this.exit(1);
211
+ }
212
+ }
213
+ };
214
+ export {
215
+ RepoAddLocal as default
216
+ };
@@ -138,11 +138,19 @@ var BaseCommand = class extends Command {
138
138
 
139
139
  // src/commands/repo/add.ts
140
140
  var RepoAdd = class _RepoAdd extends BaseCommand {
141
- static description = "Clone and register a Git repository";
141
+ static description = "Clone a remote git repository and register it with Agor";
142
142
  static examples = [
143
+ "# Clone from GitHub (SSH)",
143
144
  "<%= config.bin %> <%= command.id %> git@github.com:apache/superset.git",
145
+ "",
146
+ "# Clone from GitHub (HTTPS)",
144
147
  "<%= config.bin %> <%= command.id %> https://github.com/facebook/react.git",
145
- "<%= config.bin %> <%= command.id %> https://github.com/apache/superset.git --slug my-org/custom-name"
148
+ "",
149
+ "# Custom slug",
150
+ "<%= config.bin %> <%= command.id %> https://github.com/apache/superset.git --slug my-org/custom-name",
151
+ "",
152
+ "# Already have the repo locally?",
153
+ "<%= config.bin %> repo add-local ~/code/myapp"
146
154
  ];
147
155
  static args = {
148
156
  url: Args.string({
@@ -193,7 +201,8 @@ Use --slug to specify a custom slug.`
193
201
  this.log("");
194
202
  const repo = await client.service("repos").clone({
195
203
  url: args.url,
196
- name: slug
204
+ name: slug,
205
+ slug
197
206
  });
198
207
  this.log(`${chalk2.green("\u2713")} Repository cloned and registered`);
199
208
  this.log(chalk2.dim(` Path: ${repo.local_path}`));
@@ -172,7 +172,11 @@ var RepoList = class _RepoList extends BaseCommand {
172
172
  if (!Array.isArray(repos) || repos.length === 0) {
173
173
  this.log(chalk2.dim("No repositories found."));
174
174
  this.log("");
175
- this.log(`Add one with: ${chalk2.cyan("agor repo add <git-url>")}`);
175
+ this.log(
176
+ `Add one with: ${chalk2.cyan("agor repo add <git-url>")} or ${chalk2.cyan(
177
+ "agor repo add-local <path>"
178
+ )}`
179
+ );
176
180
  this.log("");
177
181
  await this.cleanupClient(client);
178
182
  return;
@@ -181,6 +185,7 @@ var RepoList = class _RepoList extends BaseCommand {
181
185
  head: [
182
186
  chalk2.cyan("ID"),
183
187
  chalk2.cyan("Slug"),
188
+ chalk2.cyan("Type"),
184
189
  chalk2.cyan("Remote URL"),
185
190
  chalk2.cyan("Path"),
186
191
  chalk2.cyan("Default Branch")
@@ -189,15 +194,16 @@ var RepoList = class _RepoList extends BaseCommand {
189
194
  head: [],
190
195
  border: ["dim"]
191
196
  },
192
- colWidths: [10, 20, 45, 30, 15]
197
+ colWidths: [10, 22, 10, 38, 32, 15]
193
198
  });
194
199
  for (const repo of repos) {
195
200
  const shortId = formatShortId(repo.repo_id);
196
201
  table.push([
197
202
  chalk2.dim(shortId),
198
203
  repo.slug,
199
- this.truncate(repo.remote_url || "(no remote)", 42),
200
- chalk2.dim(this.truncate(repo.local_path, 27)),
204
+ repo.repo_type,
205
+ this.truncate(repo.remote_url || "(no remote)", 35),
206
+ chalk2.dim(this.truncate(repo.local_path, 30)),
201
207
  chalk2.dim(repo.default_branch || "-")
202
208
  ]);
203
209
  }
@@ -183,13 +183,23 @@ var RepoRm = class _RepoRm extends BaseCommand {
183
183
  this.log(chalk2.bold.red("\u26A0 Repository to be removed:"));
184
184
  this.log(` ${chalk2.cyan("ID")}: ${repo.repo_id}`);
185
185
  this.log(` ${chalk2.cyan("Slug")}: ${repo.slug}`);
186
+ this.log(` ${chalk2.cyan("Type")}: ${repo.repo_type}`);
186
187
  this.log(` ${chalk2.cyan("Path")}: ${repo.local_path}`);
187
188
  this.log("");
188
189
  if (flags["delete-files"]) {
189
- this.log(chalk2.yellow("\u26A0 WARNING: Local files will also be deleted:"));
190
- this.log(chalk2.yellow(` Main repo: ${repo.local_path}`));
191
- this.log(chalk2.yellow(` Note: Any associated worktrees will also be deleted`));
192
- this.log("");
190
+ if (repo.repo_type === "local") {
191
+ this.log(
192
+ chalk2.yellow(
193
+ "\u26A0 WARNING: --delete-files is ignored for local repositories to protect your working copy."
194
+ )
195
+ );
196
+ this.log("");
197
+ } else {
198
+ this.log(chalk2.yellow("\u26A0 WARNING: Local files will also be deleted:"));
199
+ this.log(chalk2.yellow(` Main repo: ${repo.local_path}`));
200
+ this.log(chalk2.yellow(` Note: Any associated worktrees will also be deleted`));
201
+ this.log("");
202
+ }
193
203
  } else {
194
204
  this.log(chalk2.dim("(Local files will NOT be deleted)"));
195
205
  this.log("");
@@ -223,6 +233,14 @@ var RepoRm = class _RepoRm extends BaseCommand {
223
233
  ]);
224
234
  deleteFiles = shouldDelete;
225
235
  }
236
+ if (deleteFiles && repo.repo_type === "local") {
237
+ this.log(
238
+ chalk2.yellow(
239
+ "Skipping filesystem deletion for local repository to avoid removing your original clone."
240
+ )
241
+ );
242
+ deleteFiles = false;
243
+ }
226
244
  if (deleteFiles) {
227
245
  const fs = await import("fs/promises");
228
246
  try {
@@ -191,15 +191,9 @@ ${chalk2.blue("\u25CF")} Loading Claude Code session: ${chalk2.cyan(sessionId)}
191
191
  } catch {
192
192
  }
193
193
  if (!repo) {
194
- const newRepo = await reposService.create({
195
- repo_id: generateId(),
196
- slug: `imported-${projectName}`,
197
- name: projectName,
198
- remote_url: "",
199
- // No remote for imported sessions
200
- local_path: absoluteProjectDir,
201
- created_at: (/* @__PURE__ */ new Date()).toISOString(),
202
- last_updated: (/* @__PURE__ */ new Date()).toISOString()
194
+ const newRepo = await client.service("repos/local").create({
195
+ path: absoluteProjectDir,
196
+ slug: `imported-${projectName}`
203
197
  });
204
198
  repo = { repo_id: newRepo.repo_id, slug: newRepo.slug };
205
199
  this.log(`${chalk2.green("\u2713")} Created repo: ${chalk2.cyan(repo.slug)}`);
@@ -15,10 +15,14 @@ var UserCreateAdmin = class extends Command {
15
15
  static examples = ["<%= config.bin %> <%= command.id %>"];
16
16
  async run() {
17
17
  try {
18
- const configPath = getConfigPath();
19
- const agorHome = join(configPath, "..");
20
- const dbPath = join(agorHome, "agor.db");
21
- const db = createDatabase({ url: `file:${dbPath}` });
18
+ let databaseUrl = process.env.DATABASE_URL;
19
+ if (!databaseUrl) {
20
+ const configPath = getConfigPath();
21
+ const agorHome = join(configPath, "..");
22
+ const dbPath = join(agorHome, "agor.db");
23
+ databaseUrl = `file:${dbPath}`;
24
+ }
25
+ const db = createDatabase({ url: databaseUrl });
22
26
  await runMigrations(db);
23
27
  const existingAdmin = await getUserByEmail(db, DEFAULT_ADMIN_USER.email);
24
28
  if (existingAdmin) {
@@ -57,6 +61,19 @@ var UserCreateAdmin = class extends Command {
57
61
  this.log(chalk.red("\u2717 Failed to create admin user"));
58
62
  if (error instanceof Error) {
59
63
  this.log(chalk.red(` ${error.message}`));
64
+ if (error.stack) {
65
+ this.log(chalk.gray(error.stack));
66
+ }
67
+ if ("cause" in error && error.cause) {
68
+ this.log(chalk.red(" Caused by:"));
69
+ if (error.cause instanceof Error) {
70
+ this.log(chalk.red(` ${error.cause.message}`));
71
+ } else {
72
+ this.log(chalk.red(` ${String(error.cause)}`));
73
+ }
74
+ }
75
+ } else {
76
+ this.log(chalk.red(` ${String(error)}`));
60
77
  }
61
78
  process.exit(1);
62
79
  }
@@ -1,7 +1,7 @@
1
1
  // src/commands/user/list.ts
2
2
  import { join } from "path";
3
3
  import { getConfigPath } from "@agor/core/config";
4
- import { createDatabase, users } from "@agor/core/db";
4
+ import { createDatabase, select, users } from "@agor/core/db";
5
5
  import { Command } from "@oclif/core";
6
6
  import chalk from "chalk";
7
7
  import Table from "cli-table3";
@@ -10,11 +10,15 @@ var UserList = class extends Command {
10
10
  static examples = ["<%= config.bin %> <%= command.id %>"];
11
11
  async run() {
12
12
  try {
13
- const configPath = getConfigPath();
14
- const agorHome = join(configPath, "..");
15
- const dbPath = join(agorHome, "agor.db");
16
- const db = createDatabase({ url: `file:${dbPath}` });
17
- const rows = await db.select().from(users).all();
13
+ let databaseUrl = process.env.DATABASE_URL;
14
+ if (!databaseUrl) {
15
+ const configPath = getConfigPath();
16
+ const agorHome = join(configPath, "..");
17
+ const dbPath = join(agorHome, "agor.db");
18
+ databaseUrl = `file:${dbPath}`;
19
+ }
20
+ const db = createDatabase({ url: databaseUrl });
21
+ const rows = await select(db).from(users).all();
18
22
  if (rows.length === 0) {
19
23
  this.log(chalk.yellow("No users found"));
20
24
  this.log("");
@@ -22,17 +26,18 @@ var UserList = class extends Command {
22
26
  process.exit(0);
23
27
  }
24
28
  const userList = rows.map((row) => {
25
- const data = row.data;
29
+ const userRow = row;
30
+ const data = userRow.data;
26
31
  return {
27
- user_id: row.user_id,
28
- email: row.email,
29
- name: row.name ?? void 0,
30
- role: row.role,
32
+ user_id: userRow.user_id,
33
+ email: userRow.email,
34
+ name: userRow.name ?? void 0,
35
+ role: userRow.role,
31
36
  avatar: data.avatar,
32
37
  preferences: data.preferences,
33
- onboarding_completed: !!row.onboarding_completed,
34
- created_at: row.created_at,
35
- updated_at: row.updated_at ?? void 0
38
+ onboarding_completed: !!userRow.onboarding_completed,
39
+ created_at: userRow.created_at,
40
+ updated_at: userRow.updated_at ?? void 0
36
41
  };
37
42
  });
38
43
  const table = new Table({
@@ -4,7 +4,7 @@ import { a as ContextFileListItem, b as ContextFileDetail } from '../context-Byx
4
4
  import { b as AuthenticationResult } from '../feathers-BzHEPnpl.cjs';
5
5
  import { h as MCPServer } from '../mcp-DpJnAKie.cjs';
6
6
  import { d as User } from '../user-tw6jnTBl.cjs';
7
- import { a as Repo, c as Worktree } from '../repo-D4EXWOuB.cjs';
7
+ import { b as Repo, d as Worktree } from '../repo-CnGt1AAP.cjs';
8
8
  import { a as Session } from '../session-iGZzVt8R.cjs';
9
9
  import { h as Task } from '../task-_5gT3HqF.cjs';
10
10
  import { Params, Paginated, Application } from '@feathersjs/feathers';
@@ -29,6 +29,7 @@ interface ServiceTypes {
29
29
  tasks: Task;
30
30
  boards: Board;
31
31
  repos: Repo;
32
+ 'repos/local': Repo;
32
33
  worktrees: Worktree;
33
34
  users: User;
34
35
  'mcp-servers': MCPServer;
@@ -116,6 +117,7 @@ interface ReposService extends AgorService<Repo> {
116
117
  clone(data: {
117
118
  url: string;
118
119
  name?: string;
120
+ slug?: string;
119
121
  }, params?: Params): Promise<Repo>;
120
122
  /**
121
123
  * Create a git worktree for a repository
@@ -132,6 +134,12 @@ interface ReposService extends AgorService<Repo> {
132
134
  */
133
135
  removeWorktree(id: string, name: string, params?: Params): Promise<Repo>;
134
136
  }
137
+ interface ReposLocalService extends AgorService<Repo> {
138
+ create(data: {
139
+ path: string;
140
+ slug?: string;
141
+ }, params?: Params): Promise<Repo>;
142
+ }
135
143
  /**
136
144
  * Worktrees service with environment management
137
145
  */
@@ -202,6 +210,7 @@ interface AgorClient extends Omit<Application<ServiceTypes>, 'service'> {
202
210
  service(path: 'tasks'): TasksService;
203
211
  service(path: 'messages'): MessagesService;
204
212
  service(path: 'repos'): ReposService;
213
+ service(path: 'repos/local'): ReposLocalService;
205
214
  service(path: 'worktrees'): WorktreesService;
206
215
  service(path: 'messages/bulk'): MessagesService;
207
216
  service(path: 'tasks/bulk'): TasksService;
@@ -249,4 +258,4 @@ declare function createClient(url?: string, autoConnect?: boolean, options?: {
249
258
  */
250
259
  declare function isDaemonRunning(url?: string): Promise<boolean>;
251
260
 
252
- export { type AgorClient, type AgorService, type MessagesService, type ReposService, type ServiceTypes, type SessionsService, type TasksService, type WorktreesService, createClient, createRestClient, isDaemonRunning };
261
+ export { type AgorClient, type AgorService, type MessagesService, type ReposLocalService, type ReposService, type ServiceTypes, type SessionsService, type TasksService, type WorktreesService, createClient, createRestClient, isDaemonRunning };