agor-live 0.16.2 → 0.16.3

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 (186) hide show
  1. package/dist/cli/commands/board/add-session.js +4 -8
  2. package/dist/cli/commands/board/list.js +2 -4
  3. package/dist/cli/commands/mcp/list.js +1 -2
  4. package/dist/cli/commands/mcp/remove.js +1 -2
  5. package/dist/cli/commands/mcp/show.js +1 -2
  6. package/dist/cli/commands/repo/rm.js +1 -2
  7. package/dist/cli/commands/session/load-claude.js +1 -2
  8. package/dist/cli/commands/user/delete.js +1 -2
  9. package/dist/cli/commands/user/update.js +1 -2
  10. package/dist/cli/commands/worktree/add.js +1 -2
  11. package/dist/cli/commands/worktree/archive.js +1 -2
  12. package/dist/cli/commands/worktree/list.js +3 -6
  13. package/dist/cli/commands/worktree/rm.js +1 -2
  14. package/dist/cli/commands/worktree/show.js +1 -2
  15. package/dist/cli/commands/worktree/unarchive.js +1 -2
  16. package/dist/core/api/index.cjs +87 -2
  17. package/dist/core/api/index.d.cts +53 -10
  18. package/dist/core/api/index.d.ts +53 -10
  19. package/dist/core/api/index.js +85 -1
  20. package/dist/core/{feathers-CzuSOZgY.d.ts → feathers-CKfl55ut.d.ts} +10 -2
  21. package/dist/core/{feathers-CYAHFZ05.d.cts → feathers-NY8lH6YZ.d.cts} +10 -2
  22. package/dist/core/index.cjs +85 -0
  23. package/dist/core/index.d.cts +2 -2
  24. package/dist/core/index.d.ts +2 -2
  25. package/dist/core/index.js +84 -0
  26. package/dist/core/types/index.d.cts +1 -1
  27. package/dist/core/types/index.d.ts +1 -1
  28. package/dist/daemon/index.js +18 -1
  29. package/dist/daemon/register-routes.js +15 -0
  30. package/dist/daemon/register-services.js +3 -1
  31. package/dist/daemon/services/mcp-servers.d.ts +7 -2
  32. package/dist/executor/db/feathers-repositories.d.ts +1 -0
  33. package/dist/executor/db/feathers-repositories.d.ts.map +1 -1
  34. package/dist/executor/db/feathers-repositories.js +1 -0
  35. package/dist/executor/handlers/sdk/claude.d.ts.map +1 -1
  36. package/dist/executor/handlers/sdk/claude.js +1 -1
  37. package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
  38. package/dist/executor/handlers/sdk/codex.js +1 -1
  39. package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts +4 -1
  40. package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts.map +1 -1
  41. package/dist/executor/sdk-handlers/base/diff-enrichment.js +97 -24
  42. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +9 -1
  43. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  44. package/dist/executor/sdk-handlers/claude/claude-tool.js +17 -7
  45. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +5 -2
  46. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  47. package/dist/executor/sdk-handlers/codex/codex-tool.js +122 -24
  48. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +7 -1
  49. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  50. package/dist/executor/sdk-handlers/codex/prompt-service.js +111 -17
  51. package/dist/ui/assets/{_basePickBy-By_woBZB.js → _basePickBy-CM6p9_3C.js} +1 -1
  52. package/dist/ui/assets/_basePickBy-CM6p9_3C.js.gz +0 -0
  53. package/dist/ui/assets/{_baseUniq-C2jLj-Al.js → _baseUniq-CHMdQkaA.js} +1 -1
  54. package/dist/ui/assets/_baseUniq-CHMdQkaA.js.gz +0 -0
  55. package/dist/ui/assets/{arc-DADMFVbt.js → arc-Czp_Gn_m.js} +1 -1
  56. package/dist/ui/assets/arc-Czp_Gn_m.js.gz +0 -0
  57. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-rNJ5lYJQ.js → architectureDiagram-VXUJARFQ-Cz-z2R4z.js} +1 -1
  58. package/dist/ui/assets/architectureDiagram-VXUJARFQ-Cz-z2R4z.js.gz +0 -0
  59. package/dist/ui/assets/{base-80a1f760-BVsv_T1S.js → base-80a1f760-DL2sFXEh.js} +1 -1
  60. package/dist/ui/assets/{blockDiagram-VD42YOAC-CezN66iB.js → blockDiagram-VD42YOAC-C62DfRc6.js} +1 -1
  61. package/dist/ui/assets/blockDiagram-VD42YOAC-C62DfRc6.js.gz +0 -0
  62. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dze59YuK.js → c4Diagram-YG6GDRKO-DGSWKqxL.js} +1 -1
  63. package/dist/ui/assets/c4Diagram-YG6GDRKO-DGSWKqxL.js.gz +0 -0
  64. package/dist/ui/assets/channel-CmfC29hp.js +1 -0
  65. package/dist/ui/assets/{chunk-4BX2VUAB-CXL-V_XA.js → chunk-4BX2VUAB-CuJEBfIh.js} +1 -1
  66. package/dist/ui/assets/{chunk-55IACEB6-CI3h0xTl.js → chunk-55IACEB6-DYgjRl-z.js} +1 -1
  67. package/dist/ui/assets/{chunk-B4BG7PRW-CFohiEqO.js → chunk-B4BG7PRW-rqPu7wjt.js} +1 -1
  68. package/dist/ui/assets/chunk-B4BG7PRW-rqPu7wjt.js.gz +0 -0
  69. package/dist/ui/assets/{chunk-DI55MBZ5-BbF4fGKj.js → chunk-DI55MBZ5-D7PtpA49.js} +1 -1
  70. package/dist/ui/assets/chunk-DI55MBZ5-D7PtpA49.js.gz +0 -0
  71. package/dist/ui/assets/{chunk-FMBD7UC4-C5x6cpDg.js → chunk-FMBD7UC4-1R4kh4IH.js} +1 -1
  72. package/dist/ui/assets/{chunk-QN33PNHL-CEDiC29y.js → chunk-QN33PNHL-qNBgj7JQ.js} +1 -1
  73. package/dist/ui/assets/{chunk-QZHKN3VN-DPo28cCF.js → chunk-QZHKN3VN-JUwZqL5s.js} +1 -1
  74. package/dist/ui/assets/{chunk-TZMSLE5B-C94jSlIG.js → chunk-TZMSLE5B-Bk4l2qq1.js} +1 -1
  75. package/dist/ui/assets/chunk-TZMSLE5B-Bk4l2qq1.js.gz +0 -0
  76. package/dist/ui/assets/classDiagram-2ON5EDUG-LD317OSr.js +1 -0
  77. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-LD317OSr.js +1 -0
  78. package/dist/ui/assets/clone-iT69LzXk.js +1 -0
  79. package/dist/ui/assets/{consoleHook-59e792cb-cpS6JVM4.js → consoleHook-59e792cb-BjB_4eqO.js} +1 -1
  80. package/dist/ui/assets/consoleHook-59e792cb-BjB_4eqO.js.gz +0 -0
  81. package/dist/ui/assets/{cose-bilkent-S5V4N54A-CcoEg_Ct.js → cose-bilkent-S5V4N54A-Db3GpSRP.js} +1 -1
  82. package/dist/ui/assets/cose-bilkent-S5V4N54A-Db3GpSRP.js.gz +0 -0
  83. package/dist/ui/assets/{dagre-6UL2VRFP-DWAyqs2B.js → dagre-6UL2VRFP-D9RUH_36.js} +1 -1
  84. package/dist/ui/assets/dagre-6UL2VRFP-D9RUH_36.js.gz +0 -0
  85. package/dist/ui/assets/{diagram-PSM6KHXK-C7J2MNfc.js → diagram-PSM6KHXK-C51S0t1m.js} +1 -1
  86. package/dist/ui/assets/diagram-PSM6KHXK-C51S0t1m.js.gz +0 -0
  87. package/dist/ui/assets/{diagram-QEK2KX5R-6KZjqziN.js → diagram-QEK2KX5R-Bl99kj4s.js} +1 -1
  88. package/dist/ui/assets/diagram-QEK2KX5R-Bl99kj4s.js.gz +0 -0
  89. package/dist/ui/assets/{diagram-S2PKOQOG-DIL01325.js → diagram-S2PKOQOG-Dm52PeWx.js} +1 -1
  90. package/dist/ui/assets/diagram-S2PKOQOG-Dm52PeWx.js.gz +0 -0
  91. package/dist/ui/assets/{erDiagram-Q2GNP2WA-D5j4CetG.js → erDiagram-Q2GNP2WA-K5D_GKDZ.js} +1 -1
  92. package/dist/ui/assets/erDiagram-Q2GNP2WA-K5D_GKDZ.js.gz +0 -0
  93. package/dist/ui/assets/{flowDiagram-NV44I4VS-Bxx2iEi-.js → flowDiagram-NV44I4VS-D7fCREXV.js} +1 -1
  94. package/dist/ui/assets/flowDiagram-NV44I4VS-D7fCREXV.js.gz +0 -0
  95. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-BtBi1ZfT.js → ganttDiagram-LVOFAZNH-CNW9D2UF.js} +1 -1
  96. package/dist/ui/assets/ganttDiagram-LVOFAZNH-CNW9D2UF.js.gz +0 -0
  97. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CY1TKvzA.js → gitGraphDiagram-NY62KEGX-CzSHwK4S.js} +1 -1
  98. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CzSHwK4S.js.gz +0 -0
  99. package/dist/ui/assets/{graph-DC6eH7AX.js → graph-iZG1PujV.js} +1 -1
  100. package/dist/ui/assets/graph-iZG1PujV.js.gz +0 -0
  101. package/dist/ui/assets/{index-599aeaf7-Dh_oObwY.js → index-599aeaf7-BSVvtdOR.js} +1 -1
  102. package/dist/ui/assets/index-599aeaf7-BSVvtdOR.js.gz +0 -0
  103. package/dist/ui/assets/{index-CxWOjjRu.js → index-Bv9iC_mb.js} +1 -1
  104. package/dist/ui/assets/index-Bv9iC_mb.js.gz +0 -0
  105. package/dist/ui/assets/{index-DJLnZ-9H.js → index-CmhCTwYo.js} +255 -257
  106. package/dist/ui/assets/index-CmhCTwYo.js.gz +0 -0
  107. package/dist/ui/assets/{index-DQn7RJ8z.js → index-DX9HbDkF.js} +1 -1
  108. package/dist/ui/assets/index-DX9HbDkF.js.gz +0 -0
  109. package/dist/ui/assets/{infoDiagram-ER5ION4S-COpJ37pc.js → infoDiagram-ER5ION4S-7UpJXgGv.js} +1 -1
  110. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CpODBkng.js → journeyDiagram-XKPGCS4Q-B_u-rXxp.js} +1 -1
  111. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B_u-rXxp.js.gz +0 -0
  112. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-DWShJ5Su.js → kanban-definition-3W4ZIXB7-C60Ys_tG.js} +1 -1
  113. package/dist/ui/assets/kanban-definition-3W4ZIXB7-C60Ys_tG.js.gz +0 -0
  114. package/dist/ui/assets/{layout-ttMTfXMb.js → layout-2nOBwYEK.js} +1 -1
  115. package/dist/ui/assets/layout-2nOBwYEK.js.gz +0 -0
  116. package/dist/ui/assets/{linear-DD8VTncp.js → linear-BBfmsNEf.js} +1 -1
  117. package/dist/ui/assets/linear-BBfmsNEf.js.gz +0 -0
  118. package/dist/ui/assets/{mermaid.core-BlvxruUX.js → mermaid.core-BMmc28YS.js} +5 -5
  119. package/dist/ui/assets/mermaid.core-BMmc28YS.js.gz +0 -0
  120. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-CR0ESdqM.js → mindmap-definition-VGOIOE7T-CUOfncA2.js} +1 -1
  121. package/dist/ui/assets/mindmap-definition-VGOIOE7T-CUOfncA2.js.gz +0 -0
  122. package/dist/ui/assets/{pieDiagram-ADFJNKIX-B94eVYhY.js → pieDiagram-ADFJNKIX-CYt5K7tI.js} +1 -1
  123. package/dist/ui/assets/pieDiagram-ADFJNKIX-CYt5K7tI.js.gz +0 -0
  124. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-C4tNKfCm.js → quadrantDiagram-AYHSOK5B-D3z7FGdo.js} +1 -1
  125. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-D3z7FGdo.js.gz +0 -0
  126. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-CuG3A95Q.js → requirementDiagram-UZGBJVZJ-DSmK1rXj.js} +1 -1
  127. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-DSmK1rXj.js.gz +0 -0
  128. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-BCfc7mLC.js → sankeyDiagram-TZEHDZUN-BVudlnpo.js} +1 -1
  129. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BVudlnpo.js.gz +0 -0
  130. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-D8tVuIkx.js → sequenceDiagram-WL72ISMW-DShMajjv.js} +1 -1
  131. package/dist/ui/assets/sequenceDiagram-WL72ISMW-DShMajjv.js.gz +0 -0
  132. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-DvM8so2A.js → stateDiagram-FKZM4ZOC-9zK0uo4t.js} +1 -1
  133. package/dist/ui/assets/stateDiagram-FKZM4ZOC-9zK0uo4t.js.gz +0 -0
  134. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BZEgBfav.js +1 -0
  135. package/dist/ui/assets/{timeline-definition-IT6M3QCI-CP2O8vqw.js → timeline-definition-IT6M3QCI-DQ4HYAMD.js} +1 -1
  136. package/dist/ui/assets/timeline-definition-IT6M3QCI-DQ4HYAMD.js.gz +0 -0
  137. package/dist/ui/assets/{treemap-KMMF4GRG-SGJAEegj.js → treemap-KMMF4GRG-Curv75AA.js} +1 -1
  138. package/dist/ui/assets/treemap-KMMF4GRG-Curv75AA.js.gz +0 -0
  139. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CpwYBSmP.js → xychartDiagram-PRI3JC2R-BJdTipk8.js} +1 -1
  140. package/dist/ui/assets/xychartDiagram-PRI3JC2R-BJdTipk8.js.gz +0 -0
  141. package/dist/ui/index.html +1 -1
  142. package/package.json +1 -1
  143. package/dist/ui/assets/_basePickBy-By_woBZB.js.gz +0 -0
  144. package/dist/ui/assets/_baseUniq-C2jLj-Al.js.gz +0 -0
  145. package/dist/ui/assets/arc-DADMFVbt.js.gz +0 -0
  146. package/dist/ui/assets/architectureDiagram-VXUJARFQ-rNJ5lYJQ.js.gz +0 -0
  147. package/dist/ui/assets/blockDiagram-VD42YOAC-CezN66iB.js.gz +0 -0
  148. package/dist/ui/assets/c4Diagram-YG6GDRKO-Dze59YuK.js.gz +0 -0
  149. package/dist/ui/assets/channel-B2nSdT47.js +0 -1
  150. package/dist/ui/assets/chunk-B4BG7PRW-CFohiEqO.js.gz +0 -0
  151. package/dist/ui/assets/chunk-DI55MBZ5-BbF4fGKj.js.gz +0 -0
  152. package/dist/ui/assets/chunk-TZMSLE5B-C94jSlIG.js.gz +0 -0
  153. package/dist/ui/assets/classDiagram-2ON5EDUG-lwQJA5v0.js +0 -1
  154. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-lwQJA5v0.js +0 -1
  155. package/dist/ui/assets/clone-DmZ98vg9.js +0 -1
  156. package/dist/ui/assets/consoleHook-59e792cb-cpS6JVM4.js.gz +0 -0
  157. package/dist/ui/assets/cose-bilkent-S5V4N54A-CcoEg_Ct.js.gz +0 -0
  158. package/dist/ui/assets/dagre-6UL2VRFP-DWAyqs2B.js.gz +0 -0
  159. package/dist/ui/assets/diagram-PSM6KHXK-C7J2MNfc.js.gz +0 -0
  160. package/dist/ui/assets/diagram-QEK2KX5R-6KZjqziN.js.gz +0 -0
  161. package/dist/ui/assets/diagram-S2PKOQOG-DIL01325.js.gz +0 -0
  162. package/dist/ui/assets/erDiagram-Q2GNP2WA-D5j4CetG.js.gz +0 -0
  163. package/dist/ui/assets/flowDiagram-NV44I4VS-Bxx2iEi-.js.gz +0 -0
  164. package/dist/ui/assets/ganttDiagram-LVOFAZNH-BtBi1ZfT.js.gz +0 -0
  165. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CY1TKvzA.js.gz +0 -0
  166. package/dist/ui/assets/graph-DC6eH7AX.js.gz +0 -0
  167. package/dist/ui/assets/index-599aeaf7-Dh_oObwY.js.gz +0 -0
  168. package/dist/ui/assets/index-CxWOjjRu.js.gz +0 -0
  169. package/dist/ui/assets/index-DJLnZ-9H.js.gz +0 -0
  170. package/dist/ui/assets/index-DQn7RJ8z.js.gz +0 -0
  171. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CpODBkng.js.gz +0 -0
  172. package/dist/ui/assets/kanban-definition-3W4ZIXB7-DWShJ5Su.js.gz +0 -0
  173. package/dist/ui/assets/layout-ttMTfXMb.js.gz +0 -0
  174. package/dist/ui/assets/linear-DD8VTncp.js.gz +0 -0
  175. package/dist/ui/assets/mermaid.core-BlvxruUX.js.gz +0 -0
  176. package/dist/ui/assets/mindmap-definition-VGOIOE7T-CR0ESdqM.js.gz +0 -0
  177. package/dist/ui/assets/pieDiagram-ADFJNKIX-B94eVYhY.js.gz +0 -0
  178. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-C4tNKfCm.js.gz +0 -0
  179. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-CuG3A95Q.js.gz +0 -0
  180. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BCfc7mLC.js.gz +0 -0
  181. package/dist/ui/assets/sequenceDiagram-WL72ISMW-D8tVuIkx.js.gz +0 -0
  182. package/dist/ui/assets/stateDiagram-FKZM4ZOC-DvM8so2A.js.gz +0 -0
  183. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-kQ-gZX7K.js +0 -1
  184. package/dist/ui/assets/timeline-definition-IT6M3QCI-CP2O8vqw.js.gz +0 -0
  185. package/dist/ui/assets/treemap-KMMF4GRG-SGJAEegj.js.gz +0 -0
  186. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CpwYBSmP.js.gz +0 -0
@@ -161,8 +161,7 @@ var BoardAddSession = class _BoardAddSession extends BaseCommand {
161
161
  const { args } = await this.parse(_BoardAddSession);
162
162
  const client = await this.connectToDaemon();
163
163
  try {
164
- const boardsResult = await client.service("boards").find({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
165
- const boards = Array.isArray(boardsResult) ? boardsResult : boardsResult.data;
164
+ const boards = await client.service("boards").findAll({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
166
165
  const board = boards.find(
167
166
  (b) => b.board_id === args.boardId || b.board_id.startsWith(args.boardId) || b.slug === args.boardId
168
167
  );
@@ -170,8 +169,7 @@ var BoardAddSession = class _BoardAddSession extends BaseCommand {
170
169
  await this.cleanupClient(client);
171
170
  this.error(`Board not found: ${args.boardId}`);
172
171
  }
173
- const sessionsResult = await client.service("sessions").find({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
174
- const sessions = Array.isArray(sessionsResult) ? sessionsResult : sessionsResult.data;
172
+ const sessions = await client.service("sessions").findAll({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
175
173
  const session = sessions.find(
176
174
  (s) => s.session_id === args.sessionId || s.session_id.startsWith(args.sessionId)
177
175
  );
@@ -183,19 +181,17 @@ var BoardAddSession = class _BoardAddSession extends BaseCommand {
183
181
  await this.cleanupClient(client);
184
182
  this.error("Session has no worktree associated");
185
183
  }
186
- const worktreesResult = await client.service("worktrees").find({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
187
- const worktrees = Array.isArray(worktreesResult) ? worktreesResult : worktreesResult.data;
184
+ const worktrees = await client.service("worktrees").findAll({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
188
185
  const worktree = worktrees.find((w) => w.worktree_id === session.worktree_id);
189
186
  if (!worktree) {
190
187
  await this.cleanupClient(client);
191
188
  this.error("Worktree not found for session");
192
189
  }
193
- const boardObjectsResult = await client.service("board-objects").find({
190
+ const boardObjects = await client.service("board-objects").findAll({
194
191
  query: {
195
192
  board_id: board.board_id
196
193
  }
197
194
  });
198
- const boardObjects = Array.isArray(boardObjectsResult) ? boardObjectsResult : boardObjectsResult.data;
199
195
  const existingObject = boardObjects.find(
200
196
  (bo) => bo.worktree_id === worktree.worktree_id
201
197
  );
@@ -156,15 +156,13 @@ var BoardList = class _BoardList extends BaseCommand {
156
156
  const { flags } = await this.parse(_BoardList);
157
157
  const client = await this.connectToDaemon();
158
158
  try {
159
- const result = await client.service("boards").find({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
160
- const allBoards = Array.isArray(result) ? result : result.data;
159
+ const allBoards = await client.service("boards").findAll({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
161
160
  if (allBoards.length === 0) {
162
161
  this.log(chalk2.yellow("No boards found."));
163
162
  await this.cleanupClient(client);
164
163
  return;
165
164
  }
166
- const boardObjectsResult = await client.service("board-objects").find({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
167
- const boardObjects = Array.isArray(boardObjectsResult) ? boardObjectsResult : boardObjectsResult.data;
165
+ const boardObjects = await client.service("board-objects").findAll({ query: { $limit: PAGINATION.DEFAULT_LIMIT } });
168
166
  const displayBoards = allBoards.slice(0, flags.limit);
169
167
  const table = new Table({
170
168
  head: [
@@ -172,8 +172,7 @@ var McpList = class _McpList extends BaseCommand {
172
172
  if (flags.scope) query.scope = flags.scope;
173
173
  if (flags.transport) query.transport = flags.transport;
174
174
  if (flags.enabled) query.enabled = true;
175
- const result = await client.service("mcp-servers").find({ query });
176
- const servers = Array.isArray(result) ? result : result.data;
175
+ const servers = await client.service("mcp-servers").findAll({ query });
177
176
  if (servers.length === 0) {
178
177
  this.log(chalk2.yellow("No MCP servers found."));
179
178
  await this.cleanupClient(client);
@@ -165,10 +165,9 @@ var McpRemove = class _McpRemove extends BaseCommand {
165
165
  try {
166
166
  let serverId = args.id;
167
167
  if (!args.id.match(/^[0-9a-f]{8}/i)) {
168
- const result = await client.service("mcp-servers").find({
168
+ const servers = await client.service("mcp-servers").findAll({
169
169
  query: { $limit: 100 }
170
170
  });
171
- const servers = Array.isArray(result) ? result : result.data;
172
171
  const server = servers.find((s) => s.name === args.id);
173
172
  if (!server) {
174
173
  await this.cleanupClient(client);
@@ -160,10 +160,9 @@ var McpShow = class _McpShow extends BaseCommand {
160
160
  try {
161
161
  server = await client.service("mcp-servers").get(args.id);
162
162
  } catch {
163
- const result = await client.service("mcp-servers").find({
163
+ const servers = await client.service("mcp-servers").findAll({
164
164
  query: { $limit: 1 }
165
165
  });
166
- const servers = Array.isArray(result) ? result : result.data;
167
166
  server = servers.find((s) => s.name === args.id) || null;
168
167
  }
169
168
  if (!server) {
@@ -173,8 +173,7 @@ var RepoRm = class _RepoRm extends BaseCommand {
173
173
  try {
174
174
  repo = await reposService.get(args.id);
175
175
  } catch {
176
- const result = await reposService.find({ query: { slug: args.id } });
177
- const repos = Array.isArray(result) ? result : result.data;
176
+ const repos = await reposService.findAll({ query: { slug: args.id } });
178
177
  if (repos.length > 0) {
179
178
  repo = repos[0];
180
179
  }
@@ -189,8 +189,7 @@ ${chalk2.blue("\u25CF")} Loading Claude Code session: ${chalk2.cyan(sessionId)}
189
189
  const projectName = path.basename(absoluteProjectDir);
190
190
  let repo = null;
191
191
  try {
192
- const allRepos = await reposService.find({ query: { $limit: 1e3 } });
193
- const reposList = Array.isArray(allRepos) ? allRepos : allRepos.data;
192
+ const reposList = await reposService.findAll({ query: { $limit: 1e3 } });
194
193
  repo = reposList.find((r) => r.local_path === absoluteProjectDir) || null;
195
194
  } catch {
196
195
  }
@@ -166,8 +166,7 @@ var UserDelete = class _UserDelete extends BaseCommand {
166
166
  const client = await this.connectToDaemon();
167
167
  try {
168
168
  const usersService = client.service("users");
169
- const result = await usersService.find();
170
- const users = Array.isArray(result) ? result : result.data;
169
+ const users = await usersService.findAll();
171
170
  const user = users.find(
172
171
  (u) => u.email === args.user || u.user_id === args.user || u.user_id.startsWith(args.user)
173
172
  );
@@ -184,8 +184,7 @@ var UserUpdate = class _UserUpdate extends BaseCommand {
184
184
  const client = await this.connectToDaemon();
185
185
  try {
186
186
  const usersService = client.service("users");
187
- const result = await usersService.find();
188
- const users = Array.isArray(result) ? result : result.data;
187
+ const users = await usersService.findAll();
189
188
  const user = users.find(
190
189
  (u) => u.email === args.user || u.user_id === args.user || u.user_id.startsWith(args.user)
191
190
  );
@@ -194,13 +194,12 @@ var WorktreeAdd = class _WorktreeAdd extends BaseCommand {
194
194
  const reposService = client.service("repos");
195
195
  const repo = await reposService.get(flags["repo-id"]);
196
196
  const worktreesService = client.service("worktrees");
197
- const existingWorktrees = await worktreesService.find({
197
+ const worktreesList = await worktreesService.findAll({
198
198
  query: {
199
199
  repo_id: repo.repo_id,
200
200
  name: args.name
201
201
  }
202
202
  });
203
- const worktreesList = Array.isArray(existingWorktrees) ? existingWorktrees : existingWorktrees.data;
204
203
  if (worktreesList.length > 0) {
205
204
  this.error(`Worktree '${args.name}' already exists at ${worktreesList[0].path}`);
206
205
  }
@@ -183,10 +183,9 @@ var WorktreeArchive = class _WorktreeArchive extends BaseCommand {
183
183
  this.log(` ID: ${chalk2.dim(formatShortId(worktree.worktree_id))}`);
184
184
  const sessionsService = client.service("sessions");
185
185
  try {
186
- const sessionsResult = await sessionsService.find({
186
+ const allSessions = await sessionsService.findAll({
187
187
  query: { worktree_id: worktree.worktree_id, $limit: 1e4 }
188
188
  });
189
- const allSessions = Array.isArray(sessionsResult) ? sessionsResult : sessionsResult.data;
190
189
  if (allSessions.length > 0) {
191
190
  this.log(
192
191
  ` Sessions: ${chalk2.dim(`${allSessions.length} session(s) will also be archived`)}`
@@ -193,15 +193,13 @@ var WorktreeList = class _WorktreeList extends BaseCommand {
193
193
  const reposService = client.service("repos");
194
194
  let allWorktrees = [];
195
195
  if (flags["repo-id"]) {
196
- const worktreesResult = await worktreesService.find({
196
+ allWorktrees = await worktreesService.findAll({
197
197
  query: { repo_id: flags["repo-id"], $limit: PAGINATION.DEFAULT_LIMIT }
198
198
  });
199
- allWorktrees = Array.isArray(worktreesResult) ? worktreesResult : worktreesResult.data;
200
199
  } else {
201
- const worktreesResult = await worktreesService.find({
200
+ allWorktrees = await worktreesService.findAll({
202
201
  query: { $limit: PAGINATION.DEFAULT_LIMIT }
203
202
  });
204
- allWorktrees = Array.isArray(worktreesResult) ? worktreesResult : worktreesResult.data;
205
203
  }
206
204
  let filteredWorktrees = allWorktrees;
207
205
  if (flags.archived) {
@@ -239,10 +237,9 @@ var WorktreeList = class _WorktreeList extends BaseCommand {
239
237
  const sessionsService = client.service("sessions");
240
238
  const sessionCounts = /* @__PURE__ */ new Map();
241
239
  try {
242
- const sessionsResult = await sessionsService.find({
240
+ const allSessions = await sessionsService.findAll({
243
241
  query: { $limit: PAGINATION.DEFAULT_LIMIT }
244
242
  });
245
- const allSessions = Array.isArray(sessionsResult) ? sessionsResult : sessionsResult.data;
246
243
  for (const session of allSessions) {
247
244
  const count = sessionCounts.get(session.worktree_id) || 0;
248
245
  sessionCounts.set(session.worktree_id, count + 1);
@@ -173,10 +173,9 @@ var WorktreeRemove = class _WorktreeRemove extends BaseCommand {
173
173
  this.log(` ID: ${chalk2.dim(formatShortId(worktree.worktree_id))}`);
174
174
  const sessionsService = client.service("sessions");
175
175
  try {
176
- const sessionsResult = await sessionsService.find({
176
+ const allSessions = await sessionsService.findAll({
177
177
  query: { worktree_id: worktree.worktree_id, $limit: 1e4 }
178
178
  });
179
- const allSessions = Array.isArray(sessionsResult) ? sessionsResult : sessionsResult.data;
180
179
  if (allSessions.length > 0) {
181
180
  this.log(
182
181
  ` Sessions: ${chalk2.yellow(`${allSessions.length} session(s) reference this worktree`)}`
@@ -214,10 +214,9 @@ var WorktreeShow = class _WorktreeShow extends BaseCommand {
214
214
  this.log(chalk2.bold("Sessions:"));
215
215
  const sessionsService = client.service("sessions");
216
216
  try {
217
- const sessionsResult = await sessionsService.find({
217
+ const allSessions = await sessionsService.findAll({
218
218
  query: { worktree_id: worktree.worktree_id, $limit: 1e4 }
219
219
  });
220
- const allSessions = Array.isArray(sessionsResult) ? sessionsResult : sessionsResult.data;
221
220
  if (allSessions.length > 0) {
222
221
  this.log(` ${chalk2.cyan(allSessions.length.toString())} session(s)`);
223
222
  for (const session of allSessions.slice(0, 5)) {
@@ -179,7 +179,7 @@ var WorktreeUnarchive = class _WorktreeUnarchive extends BaseCommand {
179
179
  this.log(` ID: ${chalk2.dim(formatShortId(worktree.worktree_id))}`);
180
180
  const sessionsService = client.service("sessions");
181
181
  try {
182
- const sessionsResult = await sessionsService.find({
182
+ const allSessions = await sessionsService.findAll({
183
183
  query: {
184
184
  worktree_id: worktree.worktree_id,
185
185
  archived: true,
@@ -187,7 +187,6 @@ var WorktreeUnarchive = class _WorktreeUnarchive extends BaseCommand {
187
187
  $limit: 1e4
188
188
  }
189
189
  });
190
- const allSessions = Array.isArray(sessionsResult) ? sessionsResult : sessionsResult.data;
191
190
  if (allSessions.length > 0) {
192
191
  this.log(
193
192
  ` Sessions: ${chalk2.dim(`${allSessions.length} session(s) will also be unarchived`)}`
@@ -34,7 +34,8 @@ __export(api_exports, {
34
34
  createClient: () => createClient,
35
35
  createRestClient: () => createRestClient,
36
36
  getApiKeyFromEnv: () => getApiKeyFromEnv,
37
- isDaemonRunning: () => isDaemonRunning
37
+ isDaemonRunning: () => isDaemonRunning,
38
+ normalizeFindResult: () => normalizeFindResult
38
39
  });
39
40
  module.exports = __toCommonJS(api_exports);
40
41
  var import_authentication_client = __toESM(require("@feathersjs/authentication-client"), 1);
@@ -58,6 +59,9 @@ var DAEMON = {
58
59
  var import_authentication_client2 = __toESM(require("@feathersjs/authentication-client"), 1);
59
60
  var DEFAULT_DAEMON_URL = `http://${DAEMON.DEFAULT_HOST}:${DAEMON.DEFAULT_PORT}`;
60
61
  var BOARDS_SERVICE_EXTENDED = Symbol("agor.boardsServiceExtended");
62
+ var SERVICE_FIND_ALL_EXTENDED = Symbol("agor.serviceFindAllExtended");
63
+ var CLIENT_SERVICE_FACTORY_EXTENDED = Symbol("agor.clientServiceFactoryExtended");
64
+ var CLIENT_SESSIONS_HELPERS_EXTENDED = Symbol("agor.clientSessionsHelpersExtended");
61
65
  function extendBoardsService(client) {
62
66
  const boardsService = client.service("boards");
63
67
  if (boardsService[BOARDS_SERVICE_EXTENDED]) {
@@ -116,6 +120,82 @@ function extendBoardsService(client) {
116
120
  }
117
121
  boardsService[BOARDS_SERVICE_EXTENDED] = true;
118
122
  }
123
+ function normalizeFindResult(result) {
124
+ return Array.isArray(result) ? result : result.data;
125
+ }
126
+ function isPaginatedResult(result) {
127
+ return !Array.isArray(result) && typeof result === "object" && result !== null && Array.isArray(result.data);
128
+ }
129
+ function extendFindAllOnService(service) {
130
+ const findAllService = service;
131
+ if (findAllService[SERVICE_FIND_ALL_EXTENDED]) {
132
+ return;
133
+ }
134
+ findAllService.findAll = async (params) => {
135
+ const firstResult = await service.find(params);
136
+ if (!isPaginatedResult(firstResult)) {
137
+ return firstResult;
138
+ }
139
+ const allData = [...firstResult.data];
140
+ let total = firstResult.total;
141
+ let nextSkip = firstResult.skip + firstResult.data.length;
142
+ const pageLimit = typeof firstResult.limit === "number" && firstResult.limit > 0 ? firstResult.limit : firstResult.data.length;
143
+ if (!Number.isFinite(total) || pageLimit <= 0) {
144
+ return allData;
145
+ }
146
+ const baseQuery = params?.query && typeof params.query === "object" ? { ...params.query } : void 0;
147
+ while (allData.length < total) {
148
+ const nextParams = {
149
+ ...params ?? {},
150
+ query: {
151
+ ...baseQuery ?? {},
152
+ $skip: nextSkip,
153
+ $limit: pageLimit
154
+ }
155
+ };
156
+ const nextResult = await service.find(nextParams);
157
+ if (!isPaginatedResult(nextResult)) {
158
+ allData.push(...nextResult);
159
+ break;
160
+ }
161
+ if (nextResult.data.length === 0) {
162
+ break;
163
+ }
164
+ allData.push(...nextResult.data);
165
+ nextSkip = nextResult.skip + nextResult.data.length;
166
+ total = nextResult.total;
167
+ }
168
+ return allData;
169
+ };
170
+ findAllService[SERVICE_FIND_ALL_EXTENDED] = true;
171
+ }
172
+ function extendServiceFactory(client) {
173
+ const augmentedClient = client;
174
+ if (augmentedClient[CLIENT_SERVICE_FACTORY_EXTENDED]) {
175
+ return;
176
+ }
177
+ const rawService = client.service.bind(client);
178
+ augmentedClient.service = ((path) => {
179
+ const service = rawService(path);
180
+ extendFindAllOnService(service);
181
+ return service;
182
+ });
183
+ augmentedClient[CLIENT_SERVICE_FACTORY_EXTENDED] = true;
184
+ }
185
+ function extendSessionsHelpers(client) {
186
+ const augmentedClient = client;
187
+ if (augmentedClient[CLIENT_SESSIONS_HELPERS_EXTENDED]) {
188
+ return;
189
+ }
190
+ client.sessions = {
191
+ prompt: async (sessionId, prompt, options) => {
192
+ const { params, ...requestOptions } = options ?? {};
193
+ const response = await client.service(`sessions/${sessionId}/prompt`).create({ prompt, ...requestOptions }, params);
194
+ return response;
195
+ }
196
+ };
197
+ augmentedClient[CLIENT_SESSIONS_HELPERS_EXTENDED] = true;
198
+ }
119
199
  function getApiKeyFromEnv() {
120
200
  const key = typeof process !== "undefined" ? process.env?.AGOR_API_KEY : null;
121
201
  if (key?.startsWith("agor_sk_")) {
@@ -140,7 +220,9 @@ async function createRestClient(url = DEFAULT_DAEMON_URL, apiKey) {
140
220
  },
141
221
  io: { opts: {} }
142
222
  };
223
+ extendServiceFactory(client);
143
224
  extendBoardsService(client);
225
+ extendSessionsHelpers(client);
144
226
  return client;
145
227
  }
146
228
  function createClient(url = DEFAULT_DAEMON_URL, autoConnect = true, options) {
@@ -188,7 +270,9 @@ function createClient(url = DEFAULT_DAEMON_URL, autoConnect = true, options) {
188
270
  const storage = typeof globalThis !== "undefined" && "localStorage" in globalThis ? globalThis.localStorage : void 0;
189
271
  client.configure((0, import_authentication_client.default)({ storage }));
190
272
  client.io = socket;
273
+ extendServiceFactory(client);
191
274
  extendBoardsService(client);
275
+ extendSessionsHelpers(client);
192
276
  return client;
193
277
  }
194
278
  async function isDaemonRunning(url = DEFAULT_DAEMON_URL) {
@@ -205,5 +289,6 @@ async function isDaemonRunning(url = DEFAULT_DAEMON_URL) {
205
289
  createClient,
206
290
  createRestClient,
207
291
  getApiKeyFromEnv,
208
- isDaemonRunning
292
+ isDaemonRunning,
293
+ normalizeFindResult
209
294
  });
@@ -1,17 +1,17 @@
1
1
  import { i as Message } from '../message-CbD99EwO.cjs';
2
+ import { U as UUID } from '../id-Cv3ntaTJ.cjs';
2
3
  import { a as Artifact } from '../artifact-Bi-1jifF.cjs';
3
4
  import { h as Board, m as CardWithType, k as CardType, i as BoardExportBlob } from '../board-CPZGf5wF.cjs';
4
5
  import { b as Repo, d as Worktree } from '../repo-CcvhnJDf.cjs';
5
- import { a as Session } from '../session-DEU5FS0N.cjs';
6
+ import { P as PermissionMode, a as Session } from '../session-DEU5FS0N.cjs';
6
7
  import { d as User } from '../user-BpKIlt04.cjs';
7
8
  import { a as ContextFileListItem, b as ContextFileDetail } from '../context-ByxGjp5l.cjs';
8
- import { b as AuthenticationResult } from '../feathers-CYAHFZ05.cjs';
9
+ import { b as AuthenticationResult } from '../feathers-NY8lH6YZ.cjs';
9
10
  import { i as MCPServer } from '../mcp-CtC1DFEm.cjs';
10
11
  import { c as Task } from '../task-DCPYEXlG.cjs';
11
- import { Params, Paginated, Application } from '@feathersjs/feathers';
12
+ import { Paginated, Params, Application } from '@feathersjs/feathers';
12
13
  import { Socket } from 'socket.io-client';
13
14
  export { default as authenticationClient } from '@feathersjs/authentication-client';
14
- import '../id-Cv3ntaTJ.cjs';
15
15
  import '../agentic-tool-3oiAj9Lg.cjs';
16
16
 
17
17
  /**
@@ -20,6 +20,46 @@ import '../agentic-tool-3oiAj9Lg.cjs';
20
20
  * Shared client library for connecting to agor-daemon from CLI and UI
21
21
  */
22
22
 
23
+ /**
24
+ * Client-side input type helper:
25
+ * keeps strongly typed output models branded, while accepting plain strings
26
+ * for branded UUID fields in create/update/patch payloads.
27
+ */
28
+ type ClientInput<T> = T extends UUID ? string : T extends string & {
29
+ readonly __brand: string;
30
+ } ? string : T extends readonly (infer U)[] ? ClientInput<U>[] : T extends (...args: unknown[]) => unknown ? T : T extends object ? {
31
+ [K in keyof T]: ClientInput<T[K]>;
32
+ } : T;
33
+ type CreatePayload<T> = Partial<ClientInput<T>>;
34
+ type UpdatePayload<T> = ClientInput<T>;
35
+ type PatchPayload<T> = Partial<ClientInput<T>> | null;
36
+ type FindResult<T> = Paginated<T> | T[];
37
+ interface SessionPromptRequest {
38
+ prompt: string;
39
+ permissionMode?: PermissionMode;
40
+ stream?: boolean;
41
+ messageSource?: 'gateway' | 'agor';
42
+ }
43
+ interface QueuedSessionPromptResult {
44
+ success: true;
45
+ queued: true;
46
+ message: Message;
47
+ queue_position: number;
48
+ }
49
+ interface RunningSessionPromptResult {
50
+ success: true;
51
+ taskId: string;
52
+ status: string;
53
+ streaming: boolean;
54
+ queued?: false;
55
+ }
56
+ type SessionPromptResult = QueuedSessionPromptResult | RunningSessionPromptResult;
57
+ interface SessionPromptOptions extends Omit<SessionPromptRequest, 'prompt'> {
58
+ params?: Params;
59
+ }
60
+ interface SessionsClientHelpers {
61
+ prompt(sessionId: string, prompt: string, options?: SessionPromptOptions): Promise<SessionPromptResult>;
62
+ }
23
63
  /**
24
64
  * Service interfaces for type safety
25
65
  */
@@ -40,12 +80,13 @@ interface ServiceTypes {
40
80
  /**
41
81
  * Feathers service with find method properly typed and event emitter methods
42
82
  */
43
- interface AgorService<T> {
44
- find(params?: Params): Promise<Paginated<T> | T[]>;
83
+ interface AgorService<T, TCreate = CreatePayload<T>, TUpdate = UpdatePayload<T>, TPatch = PatchPayload<T>> {
84
+ find(params?: Params): Promise<FindResult<T>>;
85
+ findAll(params?: Params): Promise<T[]>;
45
86
  get(id: string, params?: Params): Promise<T>;
46
- create(data: Partial<T>, params?: Params): Promise<T>;
47
- update(id: string, data: T, params?: Params): Promise<T>;
48
- patch(id: string | null, data: Partial<T> | null, params?: Params): Promise<T>;
87
+ create(data: TCreate, params?: Params): Promise<T>;
88
+ update(id: string, data: TUpdate, params?: Params): Promise<T>;
89
+ patch(id: string | null, data: TPatch, params?: Params): Promise<T>;
49
90
  remove(id: string, params?: Params): Promise<T>;
50
91
  on(event: 'created' | 'updated' | 'patched' | 'removed', handler: (data: T) => void): void;
51
92
  on(event: string, handler: (...args: any[]) => void): void;
@@ -251,6 +292,7 @@ interface WorktreesService extends AgorService<Worktree> {
251
292
  */
252
293
  interface AgorClient extends Omit<Application<ServiceTypes>, 'service'> {
253
294
  io: Socket;
295
+ sessions: SessionsClientHelpers;
254
296
  service(path: 'sessions'): SessionsService;
255
297
  service(path: 'tasks'): TasksService;
256
298
  service(path: 'messages'): MessagesService;
@@ -276,6 +318,7 @@ interface AgorClient extends Omit<Application<ServiceTypes>, 'service'> {
276
318
  logout(): Promise<AuthenticationResult | null>;
277
319
  reAuthenticate(force?: boolean): Promise<AuthenticationResult>;
278
320
  }
321
+ declare function normalizeFindResult<T>(result: FindResult<T>): T[];
279
322
  /**
280
323
  * Create Feathers client connected to agor-daemon
281
324
  *
@@ -313,4 +356,4 @@ declare function createClient(url?: string, autoConnect?: boolean, options?: {
313
356
  */
314
357
  declare function isDaemonRunning(url?: string): Promise<boolean>;
315
358
 
316
- export { type AgorClient, type AgorService, type BoardsService, type MessagesService, type ReposLocalService, type ReposService, type ServiceTypes, type SessionsService, type TasksService, type WorktreesService, createClient, createRestClient, getApiKeyFromEnv, isDaemonRunning };
359
+ export { type AgorClient, type AgorService, type BoardsService, type ClientInput, type CreatePayload, type FindResult, type MessagesService, type PatchPayload, type QueuedSessionPromptResult, type ReposLocalService, type ReposService, type RunningSessionPromptResult, type ServiceTypes, type SessionPromptOptions, type SessionPromptRequest, type SessionPromptResult, type SessionsClientHelpers, type SessionsService, type TasksService, type UpdatePayload, type WorktreesService, createClient, createRestClient, getApiKeyFromEnv, isDaemonRunning, normalizeFindResult };
@@ -1,17 +1,17 @@
1
1
  import { i as Message } from '../message-Cwhx2ItQ.js';
2
+ import { U as UUID } from '../id-Cv3ntaTJ.js';
2
3
  import { a as Artifact } from '../artifact-B5MFR79G.js';
3
4
  import { h as Board, m as CardWithType, k as CardType, i as BoardExportBlob } from '../board-B9Xnux_i.js';
4
5
  import { b as Repo, d as Worktree } from '../repo-j12tCmyK.js';
5
- import { a as Session } from '../session-Bw8_FN2l.js';
6
+ import { P as PermissionMode, a as Session } from '../session-Bw8_FN2l.js';
6
7
  import { d as User } from '../user-pO3lB_da.js';
7
8
  import { a as ContextFileListItem, b as ContextFileDetail } from '../context-ByxGjp5l.js';
8
- import { b as AuthenticationResult } from '../feathers-CzuSOZgY.js';
9
+ import { b as AuthenticationResult } from '../feathers-CKfl55ut.js';
9
10
  import { i as MCPServer } from '../mcp-VhU-PMHo.js';
10
11
  import { c as Task } from '../task-CKHC1gPj.js';
11
- import { Params, Paginated, Application } from '@feathersjs/feathers';
12
+ import { Paginated, Params, Application } from '@feathersjs/feathers';
12
13
  import { Socket } from 'socket.io-client';
13
14
  export { default as authenticationClient } from '@feathersjs/authentication-client';
14
- import '../id-Cv3ntaTJ.js';
15
15
  import '../agentic-tool-1L19ixPC.js';
16
16
 
17
17
  /**
@@ -20,6 +20,46 @@ import '../agentic-tool-1L19ixPC.js';
20
20
  * Shared client library for connecting to agor-daemon from CLI and UI
21
21
  */
22
22
 
23
+ /**
24
+ * Client-side input type helper:
25
+ * keeps strongly typed output models branded, while accepting plain strings
26
+ * for branded UUID fields in create/update/patch payloads.
27
+ */
28
+ type ClientInput<T> = T extends UUID ? string : T extends string & {
29
+ readonly __brand: string;
30
+ } ? string : T extends readonly (infer U)[] ? ClientInput<U>[] : T extends (...args: unknown[]) => unknown ? T : T extends object ? {
31
+ [K in keyof T]: ClientInput<T[K]>;
32
+ } : T;
33
+ type CreatePayload<T> = Partial<ClientInput<T>>;
34
+ type UpdatePayload<T> = ClientInput<T>;
35
+ type PatchPayload<T> = Partial<ClientInput<T>> | null;
36
+ type FindResult<T> = Paginated<T> | T[];
37
+ interface SessionPromptRequest {
38
+ prompt: string;
39
+ permissionMode?: PermissionMode;
40
+ stream?: boolean;
41
+ messageSource?: 'gateway' | 'agor';
42
+ }
43
+ interface QueuedSessionPromptResult {
44
+ success: true;
45
+ queued: true;
46
+ message: Message;
47
+ queue_position: number;
48
+ }
49
+ interface RunningSessionPromptResult {
50
+ success: true;
51
+ taskId: string;
52
+ status: string;
53
+ streaming: boolean;
54
+ queued?: false;
55
+ }
56
+ type SessionPromptResult = QueuedSessionPromptResult | RunningSessionPromptResult;
57
+ interface SessionPromptOptions extends Omit<SessionPromptRequest, 'prompt'> {
58
+ params?: Params;
59
+ }
60
+ interface SessionsClientHelpers {
61
+ prompt(sessionId: string, prompt: string, options?: SessionPromptOptions): Promise<SessionPromptResult>;
62
+ }
23
63
  /**
24
64
  * Service interfaces for type safety
25
65
  */
@@ -40,12 +80,13 @@ interface ServiceTypes {
40
80
  /**
41
81
  * Feathers service with find method properly typed and event emitter methods
42
82
  */
43
- interface AgorService<T> {
44
- find(params?: Params): Promise<Paginated<T> | T[]>;
83
+ interface AgorService<T, TCreate = CreatePayload<T>, TUpdate = UpdatePayload<T>, TPatch = PatchPayload<T>> {
84
+ find(params?: Params): Promise<FindResult<T>>;
85
+ findAll(params?: Params): Promise<T[]>;
45
86
  get(id: string, params?: Params): Promise<T>;
46
- create(data: Partial<T>, params?: Params): Promise<T>;
47
- update(id: string, data: T, params?: Params): Promise<T>;
48
- patch(id: string | null, data: Partial<T> | null, params?: Params): Promise<T>;
87
+ create(data: TCreate, params?: Params): Promise<T>;
88
+ update(id: string, data: TUpdate, params?: Params): Promise<T>;
89
+ patch(id: string | null, data: TPatch, params?: Params): Promise<T>;
49
90
  remove(id: string, params?: Params): Promise<T>;
50
91
  on(event: 'created' | 'updated' | 'patched' | 'removed', handler: (data: T) => void): void;
51
92
  on(event: string, handler: (...args: any[]) => void): void;
@@ -251,6 +292,7 @@ interface WorktreesService extends AgorService<Worktree> {
251
292
  */
252
293
  interface AgorClient extends Omit<Application<ServiceTypes>, 'service'> {
253
294
  io: Socket;
295
+ sessions: SessionsClientHelpers;
254
296
  service(path: 'sessions'): SessionsService;
255
297
  service(path: 'tasks'): TasksService;
256
298
  service(path: 'messages'): MessagesService;
@@ -276,6 +318,7 @@ interface AgorClient extends Omit<Application<ServiceTypes>, 'service'> {
276
318
  logout(): Promise<AuthenticationResult | null>;
277
319
  reAuthenticate(force?: boolean): Promise<AuthenticationResult>;
278
320
  }
321
+ declare function normalizeFindResult<T>(result: FindResult<T>): T[];
279
322
  /**
280
323
  * Create Feathers client connected to agor-daemon
281
324
  *
@@ -313,4 +356,4 @@ declare function createClient(url?: string, autoConnect?: boolean, options?: {
313
356
  */
314
357
  declare function isDaemonRunning(url?: string): Promise<boolean>;
315
358
 
316
- export { type AgorClient, type AgorService, type BoardsService, type MessagesService, type ReposLocalService, type ReposService, type ServiceTypes, type SessionsService, type TasksService, type WorktreesService, createClient, createRestClient, getApiKeyFromEnv, isDaemonRunning };
359
+ export { type AgorClient, type AgorService, type BoardsService, type ClientInput, type CreatePayload, type FindResult, type MessagesService, type PatchPayload, type QueuedSessionPromptResult, type ReposLocalService, type ReposService, type RunningSessionPromptResult, type ServiceTypes, type SessionPromptOptions, type SessionPromptRequest, type SessionPromptResult, type SessionsClientHelpers, type SessionsService, type TasksService, type UpdatePayload, type WorktreesService, createClient, createRestClient, getApiKeyFromEnv, isDaemonRunning, normalizeFindResult };