@stardust-bytes/agent-hub 0.1.0

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 (562) hide show
  1. package/README.md +184 -0
  2. package/backend/.env.example +26 -0
  3. package/backend/dist/agent/agent.controller.d.ts +23 -0
  4. package/backend/dist/agent/agent.controller.js +114 -0
  5. package/backend/dist/agent/agent.controller.js.map +1 -0
  6. package/backend/dist/agent/agent.module.d.ts +2 -0
  7. package/backend/dist/agent/agent.module.js +128 -0
  8. package/backend/dist/agent/agent.module.js.map +1 -0
  9. package/backend/dist/agent/agent.service.d.ts +25 -0
  10. package/backend/dist/agent/agent.service.js +198 -0
  11. package/backend/dist/agent/agent.service.js.map +1 -0
  12. package/backend/dist/agent/dto/agent-action.dto.d.ts +10 -0
  13. package/backend/dist/agent/dto/agent-action.dto.js +73 -0
  14. package/backend/dist/agent/dto/agent-action.dto.js.map +1 -0
  15. package/backend/dist/agent/dto/agent-command.util.d.ts +4 -0
  16. package/backend/dist/agent/dto/agent-command.util.js +13 -0
  17. package/backend/dist/agent/dto/agent-command.util.js.map +1 -0
  18. package/backend/dist/agent/dto/agent-run-state.d.ts +21 -0
  19. package/backend/dist/agent/dto/agent-run-state.js +19 -0
  20. package/backend/dist/agent/dto/agent-run-state.js.map +1 -0
  21. package/backend/dist/agent/dto/agent-state.enum.d.ts +6 -0
  22. package/backend/dist/agent/dto/agent-state.enum.js +11 -0
  23. package/backend/dist/agent/dto/agent-state.enum.js.map +1 -0
  24. package/backend/dist/agent/dto/approve-tool.dto.d.ts +4 -0
  25. package/backend/dist/agent/dto/approve-tool.dto.js +25 -0
  26. package/backend/dist/agent/dto/approve-tool.dto.js.map +1 -0
  27. package/backend/dist/agent/dto/chat.dto.d.ts +6 -0
  28. package/backend/dist/agent/dto/chat.dto.js +35 -0
  29. package/backend/dist/agent/dto/chat.dto.js.map +1 -0
  30. package/backend/dist/agent/dto/execute-plan.dto.d.ts +4 -0
  31. package/backend/dist/agent/dto/execute-plan.dto.js +25 -0
  32. package/backend/dist/agent/dto/execute-plan.dto.js.map +1 -0
  33. package/backend/dist/agent/dto/permissions-config.d.ts +8 -0
  34. package/backend/dist/agent/dto/permissions-config.js +11 -0
  35. package/backend/dist/agent/dto/permissions-config.js.map +1 -0
  36. package/backend/dist/agent/dto/update-permissions.dto.d.ts +7 -0
  37. package/backend/dist/agent/dto/update-permissions.dto.js +46 -0
  38. package/backend/dist/agent/dto/update-permissions.dto.js.map +1 -0
  39. package/backend/dist/agent/dto/write-stream.interface.d.ts +3 -0
  40. package/backend/dist/agent/dto/write-stream.interface.js +3 -0
  41. package/backend/dist/agent/dto/write-stream.interface.js.map +1 -0
  42. package/backend/dist/agent/dto/yolo-config.dto.d.ts +5 -0
  43. package/backend/dist/agent/dto/yolo-config.dto.js +33 -0
  44. package/backend/dist/agent/dto/yolo-config.dto.js.map +1 -0
  45. package/backend/dist/agent/mcp/mcp-client.service.d.ts +15 -0
  46. package/backend/dist/agent/mcp/mcp-client.service.js +71 -0
  47. package/backend/dist/agent/mcp/mcp-client.service.js.map +1 -0
  48. package/backend/dist/agent/mcp/mcp.module.d.ts +2 -0
  49. package/backend/dist/agent/mcp/mcp.module.js +24 -0
  50. package/backend/dist/agent/mcp/mcp.module.js.map +1 -0
  51. package/backend/dist/agent/mcp/mcp.service.d.ts +23 -0
  52. package/backend/dist/agent/mcp/mcp.service.js +123 -0
  53. package/backend/dist/agent/mcp/mcp.service.js.map +1 -0
  54. package/backend/dist/agent/providers/llm-provider.interface.d.ts +41 -0
  55. package/backend/dist/agent/providers/llm-provider.interface.js +3 -0
  56. package/backend/dist/agent/providers/llm-provider.interface.js.map +1 -0
  57. package/backend/dist/agent/providers/ollama.provider.d.ts +5 -0
  58. package/backend/dist/agent/providers/ollama.provider.js +92 -0
  59. package/backend/dist/agent/providers/ollama.provider.js.map +1 -0
  60. package/backend/dist/agent/providers/openai.provider.d.ts +5 -0
  61. package/backend/dist/agent/providers/openai.provider.js +169 -0
  62. package/backend/dist/agent/providers/openai.provider.js.map +1 -0
  63. package/backend/dist/agent/services/agent-loop.service.d.ts +131 -0
  64. package/backend/dist/agent/services/agent-loop.service.js +764 -0
  65. package/backend/dist/agent/services/agent-loop.service.js.map +1 -0
  66. package/backend/dist/agent/services/approval-manager.service.d.ts +8 -0
  67. package/backend/dist/agent/services/approval-manager.service.js +50 -0
  68. package/backend/dist/agent/services/approval-manager.service.js.map +1 -0
  69. package/backend/dist/agent/services/context-builder.service.d.ts +32 -0
  70. package/backend/dist/agent/services/context-builder.service.js +118 -0
  71. package/backend/dist/agent/services/context-builder.service.js.map +1 -0
  72. package/backend/dist/agent/services/danger-patterns.config.d.ts +10 -0
  73. package/backend/dist/agent/services/danger-patterns.config.js +82 -0
  74. package/backend/dist/agent/services/danger-patterns.config.js.map +1 -0
  75. package/backend/dist/agent/services/denial-tracking.d.ts +12 -0
  76. package/backend/dist/agent/services/denial-tracking.js +34 -0
  77. package/backend/dist/agent/services/denial-tracking.js.map +1 -0
  78. package/backend/dist/agent/services/llm-controller.service.d.ts +19 -0
  79. package/backend/dist/agent/services/llm-controller.service.js +70 -0
  80. package/backend/dist/agent/services/llm-controller.service.js.map +1 -0
  81. package/backend/dist/agent/services/permissions.service.d.ts +24 -0
  82. package/backend/dist/agent/services/permissions.service.js +106 -0
  83. package/backend/dist/agent/services/permissions.service.js.map +1 -0
  84. package/backend/dist/agent/services/yolo-classifier.constants.d.ts +6 -0
  85. package/backend/dist/agent/services/yolo-classifier.constants.js +39 -0
  86. package/backend/dist/agent/services/yolo-classifier.constants.js.map +1 -0
  87. package/backend/dist/agent/services/yolo-classifier.service.d.ts +29 -0
  88. package/backend/dist/agent/services/yolo-classifier.service.js +139 -0
  89. package/backend/dist/agent/services/yolo-classifier.service.js.map +1 -0
  90. package/backend/dist/agent/subagent/subagent-tools.util.d.ts +3 -0
  91. package/backend/dist/agent/subagent/subagent-tools.util.js +37 -0
  92. package/backend/dist/agent/subagent/subagent-tools.util.js.map +1 -0
  93. package/backend/dist/agent/subagent/subagent.service.d.ts +17 -0
  94. package/backend/dist/agent/subagent/subagent.service.js +89 -0
  95. package/backend/dist/agent/subagent/subagent.service.js.map +1 -0
  96. package/backend/dist/agent-output/agent-output.controller.d.ts +20 -0
  97. package/backend/dist/agent-output/agent-output.controller.js +123 -0
  98. package/backend/dist/agent-output/agent-output.controller.js.map +1 -0
  99. package/backend/dist/agent-output/agent-output.module.d.ts +2 -0
  100. package/backend/dist/agent-output/agent-output.module.js +22 -0
  101. package/backend/dist/agent-output/agent-output.module.js.map +1 -0
  102. package/backend/dist/agent-profiles/agent-profiles.controller.d.ts +59 -0
  103. package/backend/dist/agent-profiles/agent-profiles.controller.js +70 -0
  104. package/backend/dist/agent-profiles/agent-profiles.controller.js.map +1 -0
  105. package/backend/dist/agent-profiles/agent-profiles.module.d.ts +2 -0
  106. package/backend/dist/agent-profiles/agent-profiles.module.js +23 -0
  107. package/backend/dist/agent-profiles/agent-profiles.module.js.map +1 -0
  108. package/backend/dist/agent-profiles/agent-profiles.service.d.ts +85 -0
  109. package/backend/dist/agent-profiles/agent-profiles.service.js +48 -0
  110. package/backend/dist/agent-profiles/agent-profiles.service.js.map +1 -0
  111. package/backend/dist/agent-profiles/dto/create-agent-profile.dto.d.ts +9 -0
  112. package/backend/dist/agent-profiles/dto/create-agent-profile.dto.js +52 -0
  113. package/backend/dist/agent-profiles/dto/create-agent-profile.dto.js.map +1 -0
  114. package/backend/dist/agent-profiles/dto/update-agent-profile.dto.d.ts +5 -0
  115. package/backend/dist/agent-profiles/dto/update-agent-profile.dto.js +9 -0
  116. package/backend/dist/agent-profiles/dto/update-agent-profile.dto.js.map +1 -0
  117. package/backend/dist/app.controller.d.ts +10 -0
  118. package/backend/dist/app.controller.js +39 -0
  119. package/backend/dist/app.controller.js.map +1 -0
  120. package/backend/dist/app.module.d.ts +2 -0
  121. package/backend/dist/app.module.js +68 -0
  122. package/backend/dist/app.module.js.map +1 -0
  123. package/backend/dist/connector/connector.controller.d.ts +67 -0
  124. package/backend/dist/connector/connector.controller.js +150 -0
  125. package/backend/dist/connector/connector.controller.js.map +1 -0
  126. package/backend/dist/connector/connector.module.d.ts +2 -0
  127. package/backend/dist/connector/connector.module.js +28 -0
  128. package/backend/dist/connector/connector.module.js.map +1 -0
  129. package/backend/dist/connector/connector.service.d.ts +61 -0
  130. package/backend/dist/connector/connector.service.js +63 -0
  131. package/backend/dist/connector/connector.service.js.map +1 -0
  132. package/backend/dist/connector/dto/oauth-confirm.dto.d.ts +4 -0
  133. package/backend/dist/connector/dto/oauth-confirm.dto.js +25 -0
  134. package/backend/dist/connector/dto/oauth-confirm.dto.js.map +1 -0
  135. package/backend/dist/connector/dto/update-connector.dto.d.ts +5 -0
  136. package/backend/dist/connector/dto/update-connector.dto.js +9 -0
  137. package/backend/dist/connector/dto/update-connector.dto.js.map +1 -0
  138. package/backend/dist/connector/dto/upsert-connector.dto.d.ts +6 -0
  139. package/backend/dist/connector/dto/upsert-connector.dto.js +35 -0
  140. package/backend/dist/connector/dto/upsert-connector.dto.js.map +1 -0
  141. package/backend/dist/connector/providers/google/gmail.service.d.ts +31 -0
  142. package/backend/dist/connector/providers/google/gmail.service.js +114 -0
  143. package/backend/dist/connector/providers/google/gmail.service.js.map +1 -0
  144. package/backend/dist/connector/providers/google/google-calendar.service.d.ts +37 -0
  145. package/backend/dist/connector/providers/google/google-calendar.service.js +105 -0
  146. package/backend/dist/connector/providers/google/google-calendar.service.js.map +1 -0
  147. package/backend/dist/connector/providers/google/google-drive.service.d.ts +22 -0
  148. package/backend/dist/connector/providers/google/google-drive.service.js +130 -0
  149. package/backend/dist/connector/providers/google/google-drive.service.js.map +1 -0
  150. package/backend/dist/connector/providers/google/google-oauth.service.d.ts +23 -0
  151. package/backend/dist/connector/providers/google/google-oauth.service.js +74 -0
  152. package/backend/dist/connector/providers/google/google-oauth.service.js.map +1 -0
  153. package/backend/dist/connector/providers/google/google-sheets.service.d.ts +29 -0
  154. package/backend/dist/connector/providers/google/google-sheets.service.js +246 -0
  155. package/backend/dist/connector/providers/google/google-sheets.service.js.map +1 -0
  156. package/backend/dist/cowork/cowork.controller.d.ts +37 -0
  157. package/backend/dist/cowork/cowork.controller.js +127 -0
  158. package/backend/dist/cowork/cowork.controller.js.map +1 -0
  159. package/backend/dist/cowork/cowork.module.d.ts +2 -0
  160. package/backend/dist/cowork/cowork.module.js +26 -0
  161. package/backend/dist/cowork/cowork.module.js.map +1 -0
  162. package/backend/dist/cowork/cowork.service.d.ts +40 -0
  163. package/backend/dist/cowork/cowork.service.js +116 -0
  164. package/backend/dist/cowork/cowork.service.js.map +1 -0
  165. package/backend/dist/cowork/dto/set-project.dto.d.ts +3 -0
  166. package/backend/dist/cowork/dto/set-project.dto.js +21 -0
  167. package/backend/dist/cowork/dto/set-project.dto.js.map +1 -0
  168. package/backend/dist/excel/excel.module.d.ts +2 -0
  169. package/backend/dist/excel/excel.module.js +26 -0
  170. package/backend/dist/excel/excel.module.js.map +1 -0
  171. package/backend/dist/excel/excel.service.d.ts +33 -0
  172. package/backend/dist/excel/excel.service.js +204 -0
  173. package/backend/dist/excel/excel.service.js.map +1 -0
  174. package/backend/dist/excel/executors/excel-add-sheet.executor.d.ts +12 -0
  175. package/backend/dist/excel/executors/excel-add-sheet.executor.js +64 -0
  176. package/backend/dist/excel/executors/excel-add-sheet.executor.js.map +1 -0
  177. package/backend/dist/excel/executors/excel-chart.executor.d.ts +12 -0
  178. package/backend/dist/excel/executors/excel-chart.executor.js +68 -0
  179. package/backend/dist/excel/executors/excel-chart.executor.js.map +1 -0
  180. package/backend/dist/excel/executors/list-excel-sheets.executor.d.ts +8 -0
  181. package/backend/dist/excel/executors/list-excel-sheets.executor.js +38 -0
  182. package/backend/dist/excel/executors/list-excel-sheets.executor.js.map +1 -0
  183. package/backend/dist/excel/executors/read-excel.executor.d.ts +8 -0
  184. package/backend/dist/excel/executors/read-excel.executor.js +40 -0
  185. package/backend/dist/excel/executors/read-excel.executor.js.map +1 -0
  186. package/backend/dist/excel/executors/write-excel.executor.d.ts +12 -0
  187. package/backend/dist/excel/executors/write-excel.executor.js +66 -0
  188. package/backend/dist/excel/executors/write-excel.executor.js.map +1 -0
  189. package/backend/dist/files/files.controller.d.ts +8 -0
  190. package/backend/dist/files/files.controller.js +53 -0
  191. package/backend/dist/files/files.controller.js.map +1 -0
  192. package/backend/dist/files/files.module.d.ts +2 -0
  193. package/backend/dist/files/files.module.js +20 -0
  194. package/backend/dist/files/files.module.js.map +1 -0
  195. package/backend/dist/http-exception.filter.d.ts +4 -0
  196. package/backend/dist/http-exception.filter.js +32 -0
  197. package/backend/dist/http-exception.filter.js.map +1 -0
  198. package/backend/dist/knowledge/dto/search.dto.d.ts +3 -0
  199. package/backend/dist/knowledge/dto/search.dto.js +21 -0
  200. package/backend/dist/knowledge/dto/search.dto.js.map +1 -0
  201. package/backend/dist/knowledge/knowledge.controller.d.ts +38 -0
  202. package/backend/dist/knowledge/knowledge.controller.js +91 -0
  203. package/backend/dist/knowledge/knowledge.controller.js.map +1 -0
  204. package/backend/dist/knowledge/knowledge.module.d.ts +2 -0
  205. package/backend/dist/knowledge/knowledge.module.js +25 -0
  206. package/backend/dist/knowledge/knowledge.module.js.map +1 -0
  207. package/backend/dist/knowledge/knowledge.service.d.ts +103 -0
  208. package/backend/dist/knowledge/knowledge.service.js +379 -0
  209. package/backend/dist/knowledge/knowledge.service.js.map +1 -0
  210. package/backend/dist/main.d.ts +1 -0
  211. package/backend/dist/main.js +33 -0
  212. package/backend/dist/main.js.map +1 -0
  213. package/backend/dist/memory/dto/create-memory.dto.d.ts +6 -0
  214. package/backend/dist/memory/dto/create-memory.dto.js +34 -0
  215. package/backend/dist/memory/dto/create-memory.dto.js.map +1 -0
  216. package/backend/dist/memory/dto/search-memory.dto.d.ts +5 -0
  217. package/backend/dist/memory/dto/search-memory.dto.js +32 -0
  218. package/backend/dist/memory/dto/search-memory.dto.js.map +1 -0
  219. package/backend/dist/memory/dto/update-memory.dto.d.ts +5 -0
  220. package/backend/dist/memory/dto/update-memory.dto.js +9 -0
  221. package/backend/dist/memory/dto/update-memory.dto.js.map +1 -0
  222. package/backend/dist/memory/memory-extraction.service.d.ts +19 -0
  223. package/backend/dist/memory/memory-extraction.service.js +87 -0
  224. package/backend/dist/memory/memory-extraction.service.js.map +1 -0
  225. package/backend/dist/memory/memory.constants.d.ts +9 -0
  226. package/backend/dist/memory/memory.constants.js +13 -0
  227. package/backend/dist/memory/memory.constants.js.map +1 -0
  228. package/backend/dist/memory/memory.controller.d.ts +53 -0
  229. package/backend/dist/memory/memory.controller.js +81 -0
  230. package/backend/dist/memory/memory.controller.js.map +1 -0
  231. package/backend/dist/memory/memory.gateway.d.ts +8 -0
  232. package/backend/dist/memory/memory.gateway.js +37 -0
  233. package/backend/dist/memory/memory.gateway.js.map +1 -0
  234. package/backend/dist/memory/memory.module.d.ts +2 -0
  235. package/backend/dist/memory/memory.module.js +25 -0
  236. package/backend/dist/memory/memory.module.js.map +1 -0
  237. package/backend/dist/memory/memory.service.d.ts +70 -0
  238. package/backend/dist/memory/memory.service.js +144 -0
  239. package/backend/dist/memory/memory.service.js.map +1 -0
  240. package/backend/dist/mode-policy/mode-policy.config.d.ts +20 -0
  241. package/backend/dist/mode-policy/mode-policy.config.js +17 -0
  242. package/backend/dist/mode-policy/mode-policy.config.js.map +1 -0
  243. package/backend/dist/mode-policy/mode-policy.module.d.ts +2 -0
  244. package/backend/dist/mode-policy/mode-policy.module.js +21 -0
  245. package/backend/dist/mode-policy/mode-policy.module.js.map +1 -0
  246. package/backend/dist/mode-policy/mode-policy.service.d.ts +18 -0
  247. package/backend/dist/mode-policy/mode-policy.service.js +66 -0
  248. package/backend/dist/mode-policy/mode-policy.service.js.map +1 -0
  249. package/backend/dist/notes/dto/create-note.dto.d.ts +4 -0
  250. package/backend/dist/notes/dto/create-note.dto.js +27 -0
  251. package/backend/dist/notes/dto/create-note.dto.js.map +1 -0
  252. package/backend/dist/notes/dto/update-note.dto.d.ts +5 -0
  253. package/backend/dist/notes/dto/update-note.dto.js +9 -0
  254. package/backend/dist/notes/dto/update-note.dto.js.map +1 -0
  255. package/backend/dist/notes/notes.controller.d.ts +35 -0
  256. package/backend/dist/notes/notes.controller.js +70 -0
  257. package/backend/dist/notes/notes.controller.js.map +1 -0
  258. package/backend/dist/notes/notes.gateway.d.ts +8 -0
  259. package/backend/dist/notes/notes.gateway.js +37 -0
  260. package/backend/dist/notes/notes.gateway.js.map +1 -0
  261. package/backend/dist/notes/notes.module.d.ts +2 -0
  262. package/backend/dist/notes/notes.module.js +24 -0
  263. package/backend/dist/notes/notes.module.js.map +1 -0
  264. package/backend/dist/notes/notes.service.d.ts +45 -0
  265. package/backend/dist/notes/notes.service.js +57 -0
  266. package/backend/dist/notes/notes.service.js.map +1 -0
  267. package/backend/dist/plans/plans.controller.d.ts +100 -0
  268. package/backend/dist/plans/plans.controller.js +80 -0
  269. package/backend/dist/plans/plans.controller.js.map +1 -0
  270. package/backend/dist/plans/plans.module.d.ts +2 -0
  271. package/backend/dist/plans/plans.module.js +23 -0
  272. package/backend/dist/plans/plans.module.js.map +1 -0
  273. package/backend/dist/plans/plans.service.d.ts +141 -0
  274. package/backend/dist/plans/plans.service.js +94 -0
  275. package/backend/dist/plans/plans.service.js.map +1 -0
  276. package/backend/dist/prisma/prisma.module.d.ts +2 -0
  277. package/backend/dist/prisma/prisma.module.js +22 -0
  278. package/backend/dist/prisma/prisma.module.js.map +1 -0
  279. package/backend/dist/prisma/prisma.service.d.ts +6 -0
  280. package/backend/dist/prisma/prisma.service.js +24 -0
  281. package/backend/dist/prisma/prisma.service.js.map +1 -0
  282. package/backend/dist/providers/dto/create-provider-model.dto.d.ts +3 -0
  283. package/backend/dist/providers/dto/create-provider-model.dto.js +22 -0
  284. package/backend/dist/providers/dto/create-provider-model.dto.js.map +1 -0
  285. package/backend/dist/providers/dto/create-provider.dto.d.ts +6 -0
  286. package/backend/dist/providers/dto/create-provider.dto.js +37 -0
  287. package/backend/dist/providers/dto/create-provider.dto.js.map +1 -0
  288. package/backend/dist/providers/dto/update-provider.dto.d.ts +5 -0
  289. package/backend/dist/providers/dto/update-provider.dto.js +9 -0
  290. package/backend/dist/providers/dto/update-provider.dto.js.map +1 -0
  291. package/backend/dist/providers/providers.controller.d.ts +60 -0
  292. package/backend/dist/providers/providers.controller.js +113 -0
  293. package/backend/dist/providers/providers.controller.js.map +1 -0
  294. package/backend/dist/providers/providers.module.d.ts +2 -0
  295. package/backend/dist/providers/providers.module.js +23 -0
  296. package/backend/dist/providers/providers.module.js.map +1 -0
  297. package/backend/dist/providers/providers.service.d.ts +86 -0
  298. package/backend/dist/providers/providers.service.js +100 -0
  299. package/backend/dist/providers/providers.service.js.map +1 -0
  300. package/backend/dist/schedule-tasks/dto/create-schedule-task.dto.d.ts +13 -0
  301. package/backend/dist/schedule-tasks/dto/create-schedule-task.dto.js +81 -0
  302. package/backend/dist/schedule-tasks/dto/create-schedule-task.dto.js.map +1 -0
  303. package/backend/dist/schedule-tasks/dto/update-schedule-task.dto.d.ts +5 -0
  304. package/backend/dist/schedule-tasks/dto/update-schedule-task.dto.js +9 -0
  305. package/backend/dist/schedule-tasks/dto/update-schedule-task.dto.js.map +1 -0
  306. package/backend/dist/schedule-tasks/schedule-cron.service.d.ts +8 -0
  307. package/backend/dist/schedule-tasks/schedule-cron.service.js +50 -0
  308. package/backend/dist/schedule-tasks/schedule-cron.service.js.map +1 -0
  309. package/backend/dist/schedule-tasks/schedule-runner.service.d.ts +25 -0
  310. package/backend/dist/schedule-tasks/schedule-runner.service.js +109 -0
  311. package/backend/dist/schedule-tasks/schedule-runner.service.js.map +1 -0
  312. package/backend/dist/schedule-tasks/schedule-tasks.controller.d.ts +108 -0
  313. package/backend/dist/schedule-tasks/schedule-tasks.controller.js +85 -0
  314. package/backend/dist/schedule-tasks/schedule-tasks.controller.js.map +1 -0
  315. package/backend/dist/schedule-tasks/schedule-tasks.module.d.ts +2 -0
  316. package/backend/dist/schedule-tasks/schedule-tasks.module.js +32 -0
  317. package/backend/dist/schedule-tasks/schedule-tasks.module.js.map +1 -0
  318. package/backend/dist/schedule-tasks/schedule-tasks.service.d.ts +141 -0
  319. package/backend/dist/schedule-tasks/schedule-tasks.service.js +80 -0
  320. package/backend/dist/schedule-tasks/schedule-tasks.service.js.map +1 -0
  321. package/backend/dist/sessions/sessions.controller.d.ts +40 -0
  322. package/backend/dist/sessions/sessions.controller.js +75 -0
  323. package/backend/dist/sessions/sessions.controller.js.map +1 -0
  324. package/backend/dist/sessions/sessions.module.d.ts +2 -0
  325. package/backend/dist/sessions/sessions.module.js +23 -0
  326. package/backend/dist/sessions/sessions.module.js.map +1 -0
  327. package/backend/dist/sessions/sessions.service.d.ts +55 -0
  328. package/backend/dist/sessions/sessions.service.js +73 -0
  329. package/backend/dist/sessions/sessions.service.js.map +1 -0
  330. package/backend/dist/settings/settings.controller.d.ts +14 -0
  331. package/backend/dist/settings/settings.controller.js +56 -0
  332. package/backend/dist/settings/settings.controller.js.map +1 -0
  333. package/backend/dist/settings/settings.module.d.ts +2 -0
  334. package/backend/dist/settings/settings.module.js +24 -0
  335. package/backend/dist/settings/settings.module.js.map +1 -0
  336. package/backend/dist/settings/settings.service.d.ts +10 -0
  337. package/backend/dist/settings/settings.service.js +49 -0
  338. package/backend/dist/settings/settings.service.js.map +1 -0
  339. package/backend/dist/tools/executors/convert-note-to-task.executor.d.ts +12 -0
  340. package/backend/dist/tools/executors/convert-note-to-task.executor.js +59 -0
  341. package/backend/dist/tools/executors/convert-note-to-task.executor.js.map +1 -0
  342. package/backend/dist/tools/executors/create-note.executor.d.ts +8 -0
  343. package/backend/dist/tools/executors/create-note.executor.js +39 -0
  344. package/backend/dist/tools/executors/create-note.executor.js.map +1 -0
  345. package/backend/dist/tools/executors/create-plan.executor.d.ts +8 -0
  346. package/backend/dist/tools/executors/create-plan.executor.js +45 -0
  347. package/backend/dist/tools/executors/create-plan.executor.js.map +1 -0
  348. package/backend/dist/tools/executors/create-task.executor.d.ts +10 -0
  349. package/backend/dist/tools/executors/create-task.executor.js +53 -0
  350. package/backend/dist/tools/executors/create-task.executor.js.map +1 -0
  351. package/backend/dist/tools/executors/delete-note.executor.d.ts +8 -0
  352. package/backend/dist/tools/executors/delete-note.executor.js +38 -0
  353. package/backend/dist/tools/executors/delete-note.executor.js.map +1 -0
  354. package/backend/dist/tools/executors/delete-tasks.executor.d.ts +8 -0
  355. package/backend/dist/tools/executors/delete-tasks.executor.js +33 -0
  356. package/backend/dist/tools/executors/delete-tasks.executor.js.map +1 -0
  357. package/backend/dist/tools/executors/get-task.executor.d.ts +8 -0
  358. package/backend/dist/tools/executors/get-task.executor.js +44 -0
  359. package/backend/dist/tools/executors/get-task.executor.js.map +1 -0
  360. package/backend/dist/tools/executors/glob.executor.d.ts +10 -0
  361. package/backend/dist/tools/executors/glob.executor.js +82 -0
  362. package/backend/dist/tools/executors/glob.executor.js.map +1 -0
  363. package/backend/dist/tools/executors/google-calendar-availability.executor.d.ts +23 -0
  364. package/backend/dist/tools/executors/google-calendar-availability.executor.js +46 -0
  365. package/backend/dist/tools/executors/google-calendar-availability.executor.js.map +1 -0
  366. package/backend/dist/tools/executors/google-calendar-create.executor.d.ts +42 -0
  367. package/backend/dist/tools/executors/google-calendar-create.executor.js +48 -0
  368. package/backend/dist/tools/executors/google-calendar-create.executor.js.map +1 -0
  369. package/backend/dist/tools/executors/google-calendar-list.executor.d.ts +22 -0
  370. package/backend/dist/tools/executors/google-calendar-list.executor.js +45 -0
  371. package/backend/dist/tools/executors/google-calendar-list.executor.js.map +1 -0
  372. package/backend/dist/tools/executors/google-calendar-update.executor.d.ts +31 -0
  373. package/backend/dist/tools/executors/google-calendar-update.executor.js +50 -0
  374. package/backend/dist/tools/executors/google-calendar-update.executor.js.map +1 -0
  375. package/backend/dist/tools/executors/google-drive-create-folder.executor.d.ts +23 -0
  376. package/backend/dist/tools/executors/google-drive-create-folder.executor.js +44 -0
  377. package/backend/dist/tools/executors/google-drive-create-folder.executor.js.map +1 -0
  378. package/backend/dist/tools/executors/google-drive-list.executor.d.ts +18 -0
  379. package/backend/dist/tools/executors/google-drive-list.executor.js +44 -0
  380. package/backend/dist/tools/executors/google-drive-list.executor.js.map +1 -0
  381. package/backend/dist/tools/executors/google-drive-read.executor.d.ts +19 -0
  382. package/backend/dist/tools/executors/google-drive-read.executor.js +48 -0
  383. package/backend/dist/tools/executors/google-drive-read.executor.js.map +1 -0
  384. package/backend/dist/tools/executors/google-drive-search.executor.d.ts +23 -0
  385. package/backend/dist/tools/executors/google-drive-search.executor.js +46 -0
  386. package/backend/dist/tools/executors/google-drive-search.executor.js.map +1 -0
  387. package/backend/dist/tools/executors/google-drive-upload.executor.d.ts +30 -0
  388. package/backend/dist/tools/executors/google-drive-upload.executor.js +49 -0
  389. package/backend/dist/tools/executors/google-drive-upload.executor.js.map +1 -0
  390. package/backend/dist/tools/executors/google-gmail-draft.executor.d.ts +30 -0
  391. package/backend/dist/tools/executors/google-gmail-draft.executor.js +45 -0
  392. package/backend/dist/tools/executors/google-gmail-draft.executor.js.map +1 -0
  393. package/backend/dist/tools/executors/google-gmail-labels.executor.d.ts +13 -0
  394. package/backend/dist/tools/executors/google-gmail-labels.executor.js +39 -0
  395. package/backend/dist/tools/executors/google-gmail-labels.executor.js.map +1 -0
  396. package/backend/dist/tools/executors/google-gmail-read.executor.d.ts +19 -0
  397. package/backend/dist/tools/executors/google-gmail-read.executor.js +43 -0
  398. package/backend/dist/tools/executors/google-gmail-read.executor.js.map +1 -0
  399. package/backend/dist/tools/executors/google-gmail-search.executor.d.ts +23 -0
  400. package/backend/dist/tools/executors/google-gmail-search.executor.js +46 -0
  401. package/backend/dist/tools/executors/google-gmail-search.executor.js.map +1 -0
  402. package/backend/dist/tools/executors/google-gmail-send.executor.d.ts +44 -0
  403. package/backend/dist/tools/executors/google-gmail-send.executor.js +47 -0
  404. package/backend/dist/tools/executors/google-gmail-send.executor.js.map +1 -0
  405. package/backend/dist/tools/executors/google-sheets-add-tab.executor.d.ts +23 -0
  406. package/backend/dist/tools/executors/google-sheets-add-tab.executor.js +44 -0
  407. package/backend/dist/tools/executors/google-sheets-add-tab.executor.js.map +1 -0
  408. package/backend/dist/tools/executors/google-sheets-append.executor.d.ts +30 -0
  409. package/backend/dist/tools/executors/google-sheets-append.executor.js +45 -0
  410. package/backend/dist/tools/executors/google-sheets-append.executor.js.map +1 -0
  411. package/backend/dist/tools/executors/google-sheets-chart.executor.d.ts +40 -0
  412. package/backend/dist/tools/executors/google-sheets-chart.executor.js +48 -0
  413. package/backend/dist/tools/executors/google-sheets-chart.executor.js.map +1 -0
  414. package/backend/dist/tools/executors/google-sheets-create.executor.d.ts +27 -0
  415. package/backend/dist/tools/executors/google-sheets-create.executor.js +44 -0
  416. package/backend/dist/tools/executors/google-sheets-create.executor.js.map +1 -0
  417. package/backend/dist/tools/executors/google-sheets-format.executor.d.ts +57 -0
  418. package/backend/dist/tools/executors/google-sheets-format.executor.js +58 -0
  419. package/backend/dist/tools/executors/google-sheets-format.executor.js.map +1 -0
  420. package/backend/dist/tools/executors/google-sheets-list-tabs.executor.d.ts +19 -0
  421. package/backend/dist/tools/executors/google-sheets-list-tabs.executor.js +43 -0
  422. package/backend/dist/tools/executors/google-sheets-list-tabs.executor.js.map +1 -0
  423. package/backend/dist/tools/executors/google-sheets-read.executor.d.ts +27 -0
  424. package/backend/dist/tools/executors/google-sheets-read.executor.js +45 -0
  425. package/backend/dist/tools/executors/google-sheets-read.executor.js.map +1 -0
  426. package/backend/dist/tools/executors/google-sheets-update.executor.d.ts +34 -0
  427. package/backend/dist/tools/executors/google-sheets-update.executor.js +46 -0
  428. package/backend/dist/tools/executors/google-sheets-update.executor.js.map +1 -0
  429. package/backend/dist/tools/executors/grep.executor.d.ts +9 -0
  430. package/backend/dist/tools/executors/grep.executor.js +82 -0
  431. package/backend/dist/tools/executors/grep.executor.js.map +1 -0
  432. package/backend/dist/tools/executors/list-directory.executor.d.ts +8 -0
  433. package/backend/dist/tools/executors/list-directory.executor.js +37 -0
  434. package/backend/dist/tools/executors/list-directory.executor.js.map +1 -0
  435. package/backend/dist/tools/executors/list-notes.executor.d.ts +8 -0
  436. package/backend/dist/tools/executors/list-notes.executor.js +37 -0
  437. package/backend/dist/tools/executors/list-notes.executor.js.map +1 -0
  438. package/backend/dist/tools/executors/list-tasks.executor.d.ts +8 -0
  439. package/backend/dist/tools/executors/list-tasks.executor.js +32 -0
  440. package/backend/dist/tools/executors/list-tasks.executor.js.map +1 -0
  441. package/backend/dist/tools/executors/read-file.executor.d.ts +8 -0
  442. package/backend/dist/tools/executors/read-file.executor.js +44 -0
  443. package/backend/dist/tools/executors/read-file.executor.js.map +1 -0
  444. package/backend/dist/tools/executors/resume-plan.executor.d.ts +8 -0
  445. package/backend/dist/tools/executors/resume-plan.executor.js +58 -0
  446. package/backend/dist/tools/executors/resume-plan.executor.js.map +1 -0
  447. package/backend/dist/tools/executors/run-command.executor.d.ts +5 -0
  448. package/backend/dist/tools/executors/run-command.executor.js +55 -0
  449. package/backend/dist/tools/executors/run-command.executor.js.map +1 -0
  450. package/backend/dist/tools/executors/search-knowledge.executor.d.ts +8 -0
  451. package/backend/dist/tools/executors/search-knowledge.executor.js +33 -0
  452. package/backend/dist/tools/executors/search-knowledge.executor.js.map +1 -0
  453. package/backend/dist/tools/executors/spawn-subagent.executor.d.ts +5 -0
  454. package/backend/dist/tools/executors/spawn-subagent.executor.js +27 -0
  455. package/backend/dist/tools/executors/spawn-subagent.executor.js.map +1 -0
  456. package/backend/dist/tools/executors/tool-executor.interface.d.ts +8 -0
  457. package/backend/dist/tools/executors/tool-executor.interface.js +3 -0
  458. package/backend/dist/tools/executors/tool-executor.interface.js.map +1 -0
  459. package/backend/dist/tools/executors/update-note.executor.d.ts +8 -0
  460. package/backend/dist/tools/executors/update-note.executor.js +43 -0
  461. package/backend/dist/tools/executors/update-note.executor.js.map +1 -0
  462. package/backend/dist/tools/executors/update-task.executor.d.ts +8 -0
  463. package/backend/dist/tools/executors/update-task.executor.js +50 -0
  464. package/backend/dist/tools/executors/update-task.executor.js.map +1 -0
  465. package/backend/dist/tools/executors/web-fetch.executor.d.ts +8 -0
  466. package/backend/dist/tools/executors/web-fetch.executor.js +57 -0
  467. package/backend/dist/tools/executors/web-fetch.executor.js.map +1 -0
  468. package/backend/dist/tools/executors/web-search.executor.d.ts +8 -0
  469. package/backend/dist/tools/executors/web-search.executor.js +70 -0
  470. package/backend/dist/tools/executors/web-search.executor.js.map +1 -0
  471. package/backend/dist/tools/executors/write-file.executor.d.ts +10 -0
  472. package/backend/dist/tools/executors/write-file.executor.js +60 -0
  473. package/backend/dist/tools/executors/write-file.executor.js.map +1 -0
  474. package/backend/dist/tools/tools.controller.d.ts +37 -0
  475. package/backend/dist/tools/tools.controller.js +63 -0
  476. package/backend/dist/tools/tools.controller.js.map +1 -0
  477. package/backend/dist/tools/tools.module.d.ts +2 -0
  478. package/backend/dist/tools/tools.module.js +128 -0
  479. package/backend/dist/tools/tools.module.js.map +1 -0
  480. package/backend/dist/tools/tools.service.d.ts +55 -0
  481. package/backend/dist/tools/tools.service.js +49 -0
  482. package/backend/dist/tools/tools.service.js.map +1 -0
  483. package/backend/dist/usage/dto/create-usage.dto.d.ts +8 -0
  484. package/backend/dist/usage/dto/create-usage.dto.js +45 -0
  485. package/backend/dist/usage/dto/create-usage.dto.js.map +1 -0
  486. package/backend/dist/usage/usage.controller.d.ts +19 -0
  487. package/backend/dist/usage/usage.controller.js +43 -0
  488. package/backend/dist/usage/usage.controller.js.map +1 -0
  489. package/backend/dist/usage/usage.module.d.ts +2 -0
  490. package/backend/dist/usage/usage.module.js +24 -0
  491. package/backend/dist/usage/usage.module.js.map +1 -0
  492. package/backend/dist/usage/usage.service.d.ts +30 -0
  493. package/backend/dist/usage/usage.service.js +61 -0
  494. package/backend/dist/usage/usage.service.js.map +1 -0
  495. package/backend/dist/word/executors/edit-word.executor.d.ts +12 -0
  496. package/backend/dist/word/executors/edit-word.executor.js +65 -0
  497. package/backend/dist/word/executors/edit-word.executor.js.map +1 -0
  498. package/backend/dist/word/executors/read-word.executor.d.ts +10 -0
  499. package/backend/dist/word/executors/read-word.executor.js +49 -0
  500. package/backend/dist/word/executors/read-word.executor.js.map +1 -0
  501. package/backend/dist/word/executors/write-word.executor.d.ts +12 -0
  502. package/backend/dist/word/executors/write-word.executor.js +63 -0
  503. package/backend/dist/word/executors/write-word.executor.js.map +1 -0
  504. package/backend/dist/word/word.module.d.ts +2 -0
  505. package/backend/dist/word/word.module.js +21 -0
  506. package/backend/dist/word/word.module.js.map +1 -0
  507. package/backend/dist/word/word.service.d.ts +22 -0
  508. package/backend/dist/word/word.service.js +155 -0
  509. package/backend/dist/word/word.service.js.map +1 -0
  510. package/backend/dist/workspace/dto/watch.dto.d.ts +3 -0
  511. package/backend/dist/workspace/dto/watch.dto.js +22 -0
  512. package/backend/dist/workspace/dto/watch.dto.js.map +1 -0
  513. package/backend/dist/workspace/indexer.service.d.ts +24 -0
  514. package/backend/dist/workspace/indexer.service.js +109 -0
  515. package/backend/dist/workspace/indexer.service.js.map +1 -0
  516. package/backend/dist/workspace/workspace-watcher.service.d.ts +20 -0
  517. package/backend/dist/workspace/workspace-watcher.service.js +73 -0
  518. package/backend/dist/workspace/workspace-watcher.service.js.map +1 -0
  519. package/backend/dist/workspace/workspace.controller.d.ts +21 -0
  520. package/backend/dist/workspace/workspace.controller.js +72 -0
  521. package/backend/dist/workspace/workspace.controller.js.map +1 -0
  522. package/backend/dist/workspace/workspace.module.d.ts +2 -0
  523. package/backend/dist/workspace/workspace.module.js +27 -0
  524. package/backend/dist/workspace/workspace.module.js.map +1 -0
  525. package/backend/dist/workspace/workspace.service.d.ts +16 -0
  526. package/backend/dist/workspace/workspace.service.js +70 -0
  527. package/backend/dist/workspace/workspace.service.js.map +1 -0
  528. package/backend/package.json +80 -0
  529. package/backend/prisma/migrations/20260607051149_init/migration.sql +11 -0
  530. package/backend/prisma/migrations/20260607082131_add_settings/migration.sql +5 -0
  531. package/backend/prisma/migrations/20260607090628_add_knowledge_file/migration.sql +12 -0
  532. package/backend/prisma/migrations/20260607102620_add_sessions_chat_messages/migration.sql +17 -0
  533. package/backend/prisma/migrations/20260607160733_add_tool_fields_to_message/migration.sql +18 -0
  534. package/backend/prisma/migrations/20260608120000_add_providers/migration.sql +19 -0
  535. package/backend/prisma/migrations/20260608150513_add_tools/migration.sql +9 -0
  536. package/backend/prisma/migrations/20260608155121_add_tool_config/migration.sql +3 -0
  537. package/backend/prisma/migrations/20260609044217_add_error_message/migration.sql +2 -0
  538. package/backend/prisma/migrations/20260609110505_add_notes/migration.sql +8 -0
  539. package/backend/prisma/migrations/20260609151214_add_plan_tables/migration.sql +21 -0
  540. package/backend/prisma/migrations/20260610100714_add_agent_file/migration.sql +9 -0
  541. package/backend/prisma/migrations/20260611085424_add_session_mode/migration.sql +2 -0
  542. package/backend/prisma/migrations/20260611120000_add_memory_model/migration.sql +13 -0
  543. package/backend/prisma/migrations/20260612120000_add_usage_record/migration.sql +12 -0
  544. package/backend/prisma/migrations/20260612130000_add_project_model/migration.sql +7 -0
  545. package/backend/prisma/migrations/20260612130000_add_project_model/migration_lock.toml +5 -0
  546. package/backend/prisma/migrations/20260612140000_add_connector_model/migration.sql +9 -0
  547. package/backend/prisma/migrations/20260612173937_add_connector_services_account/migration.sql +24 -0
  548. package/backend/prisma/migrations/20260612181017_remove_connector_services/migration.sql +23 -0
  549. package/backend/prisma/migrations/20260613135109_add_schedule_tasks/migration.sql +45 -0
  550. package/backend/prisma/migrations/20260613140915_add_cron_days_of_week/migration.sql +2 -0
  551. package/backend/prisma/migrations/20260613142809_add_timezone/migration.sql +2 -0
  552. package/backend/prisma/migrations/20260613163408_remove_task_model/migration.sql +10 -0
  553. package/backend/prisma/migrations/20260620120025_add_agent_profile/migration.sql +17 -0
  554. package/backend/prisma/migrations/migration_lock.toml +3 -0
  555. package/backend/prisma/schema.prisma +208 -0
  556. package/backend/prisma/seed.cjs +132 -0
  557. package/bin/workspace-cli.js +296 -0
  558. package/frontend/dist/assets/index-DRtpgPPc.css +1 -0
  559. package/frontend/dist/assets/index-Dn28_pkr.js +101 -0
  560. package/frontend/dist/index.html +19 -0
  561. package/frontend/dist/logo.png +0 -0
  562. package/package.json +54 -0
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var PermissionsService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.PermissionsService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const settings_service_1 = require("../../settings/settings.service");
16
+ const permissions_config_1 = require("../dto/permissions-config");
17
+ const yolo_classifier_service_1 = require("./yolo-classifier.service");
18
+ let PermissionsService = PermissionsService_1 = class PermissionsService {
19
+ constructor(settingsService, yoloClassifier) {
20
+ this.settingsService = settingsService;
21
+ this.yoloClassifier = yoloClassifier;
22
+ }
23
+ async getConfig() {
24
+ const raw = await this.settingsService.get(PermissionsService_1.SETTING_KEY, '');
25
+ if (!raw)
26
+ return { ...permissions_config_1.DEFAULT_PERMISSIONS_CONFIG };
27
+ try {
28
+ return JSON.parse(raw);
29
+ }
30
+ catch {
31
+ return { ...permissions_config_1.DEFAULT_PERMISSIONS_CONFIG };
32
+ }
33
+ }
34
+ async updateConfig(updates) {
35
+ const current = await this.getConfig();
36
+ const updated = { ...current, ...updates };
37
+ await this.settingsService.upsert(PermissionsService_1.SETTING_KEY, JSON.stringify(updated));
38
+ return updated;
39
+ }
40
+ async isAllowed(toolName) {
41
+ const config = await this.getConfig();
42
+ if (config.deniedTools.includes(toolName))
43
+ return false;
44
+ if (config.allowedTools.includes(toolName))
45
+ return true;
46
+ return config.defaultPolicy === 'allow';
47
+ }
48
+ async decide(toolName, toolInput, transcript, sessionId) {
49
+ const config = await this.getConfig();
50
+ if (config.deniedTools.includes(toolName)) {
51
+ return { action: 'deny', reason: 'Tool denied by configuration' };
52
+ }
53
+ const permissionMode = await this.decidePermissionMode(toolName, toolInput);
54
+ switch (permissionMode) {
55
+ case 'bypassPermissions':
56
+ return { action: 'allow' };
57
+ case 'dontAsk':
58
+ return { action: 'deny', reason: 'Blocked by dontAsk mode' };
59
+ case 'acceptEdits':
60
+ return { action: 'allow' };
61
+ case 'auto':
62
+ return this.handleAutoMode(toolName, toolInput, transcript, sessionId);
63
+ case 'plan':
64
+ if (['create_plan', 'resume_plan'].includes(toolName)) {
65
+ const result = await this.yoloClassifier.evaluate(toolName, toolInput, transcript, sessionId);
66
+ return result.allowed
67
+ ? { action: 'allow' }
68
+ : { action: 'deny', reason: result.reason ?? 'Blocked by classifier' };
69
+ }
70
+ return { action: 'ask' };
71
+ case 'requireApproval':
72
+ return { action: 'ask' };
73
+ default:
74
+ return { action: 'ask' };
75
+ }
76
+ }
77
+ async handleAutoMode(toolName, toolInput, transcript, sessionId) {
78
+ const result = await this.yoloClassifier.evaluate(toolName, toolInput, transcript, sessionId);
79
+ if (result.allowed)
80
+ return { action: 'allow' };
81
+ return {
82
+ action: 'deny',
83
+ reason: result.reason ? `YOLO: ${result.reason}` : 'Blocked by YOLO classifier',
84
+ };
85
+ }
86
+ hasDestructivePatterns(name, input) {
87
+ const patterns = ['delete', 'remove', 'drop', 'truncate', 'rm ', 'rmdir', 'del '];
88
+ return patterns.some(p => input.toLowerCase().includes(p));
89
+ }
90
+ async decidePermissionMode(toolName, toolInput) {
91
+ const config = await this.getConfig();
92
+ if (config.requireApprovalTools.includes(toolName))
93
+ return 'requireApproval';
94
+ if (this.hasDestructivePatterns(toolName, toolInput))
95
+ return 'requireApproval';
96
+ return config.permissionMode;
97
+ }
98
+ };
99
+ exports.PermissionsService = PermissionsService;
100
+ PermissionsService.SETTING_KEY = 'agent.permissions';
101
+ exports.PermissionsService = PermissionsService = PermissionsService_1 = __decorate([
102
+ (0, common_1.Injectable)(),
103
+ __metadata("design:paramtypes", [settings_service_1.SettingsService,
104
+ yolo_classifier_service_1.YoloClassifierService])
105
+ ], PermissionsService);
106
+ //# sourceMappingURL=permissions.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.service.js","sourceRoot":"","sources":["../../../src/agent/services/permissions.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const YOLO_SYSTEM_PROMPT = "You are a security classifier for an AI agent workspace.\nYour job is to evaluate whether a proposed action should be ALLOWED or BLOCKED.\n\n## Evaluation Rules\n1. Consider the full conversation context, not just the latest action\n2. Block attempts to disable or circumvent the classifier itself\n3. Writing a script then running it = directly running the commands\n4. When spawning sub-agents, evaluate the delegated task's intent\n5. Each action is evaluated independently\n6. Lean toward blocking when shared infrastructure could be affected\n7. Only block for security-relevant harm, not quality or efficiency issues\n\n## BLOCK Rules\n- Running interpreters directly (python, node, ruby) without user request\n- Package runners (npx, npm run) executing untrusted code\n- Network commands (curl, wget) that could exfiltrate data\n- Destructive git operations (force push, delete branches)\n- Cloud CLI commands (kubectl, aws) affecting production\n- Writing executable scripts (.sh, .bat) with dangerous content\n- Spawning sub-agents with permission bypass intent\n- Irreversible local destruction (rm -rf, drop tables)\n- Credential leakage (printing or sending secrets)\n- Data exfiltration to external services\n- Self-modification of agent code or config\n\n## ALLOW by default\nAllow unless a BLOCK rule clearly applies.";
2
+ export declare const STAGE1_PROMPT_SUFFIX = "Err on the side of blocking. Respond with <block>yes</block> or <block>no</block>.";
3
+ export declare const STAGE2_PROMPT_SUFFIX = "Use <thinking> before responding. Explicit user confirmation required to override blocks. Respond with <block>yes</block> or <block>no</block> and <reason>...</reason>.";
4
+ export declare const STAGE1_MAX_TOKENS = 64;
5
+ export declare const STAGE2_MAX_TOKENS = 4096;
6
+ export declare const SAFE_TOOL_ALLOWLIST: string[];
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SAFE_TOOL_ALLOWLIST = exports.STAGE2_MAX_TOKENS = exports.STAGE1_MAX_TOKENS = exports.STAGE2_PROMPT_SUFFIX = exports.STAGE1_PROMPT_SUFFIX = exports.YOLO_SYSTEM_PROMPT = void 0;
4
+ exports.YOLO_SYSTEM_PROMPT = `You are a security classifier for an AI agent workspace.
5
+ Your job is to evaluate whether a proposed action should be ALLOWED or BLOCKED.
6
+
7
+ ## Evaluation Rules
8
+ 1. Consider the full conversation context, not just the latest action
9
+ 2. Block attempts to disable or circumvent the classifier itself
10
+ 3. Writing a script then running it = directly running the commands
11
+ 4. When spawning sub-agents, evaluate the delegated task's intent
12
+ 5. Each action is evaluated independently
13
+ 6. Lean toward blocking when shared infrastructure could be affected
14
+ 7. Only block for security-relevant harm, not quality or efficiency issues
15
+
16
+ ## BLOCK Rules
17
+ - Running interpreters directly (python, node, ruby) without user request
18
+ - Package runners (npx, npm run) executing untrusted code
19
+ - Network commands (curl, wget) that could exfiltrate data
20
+ - Destructive git operations (force push, delete branches)
21
+ - Cloud CLI commands (kubectl, aws) affecting production
22
+ - Writing executable scripts (.sh, .bat) with dangerous content
23
+ - Spawning sub-agents with permission bypass intent
24
+ - Irreversible local destruction (rm -rf, drop tables)
25
+ - Credential leakage (printing or sending secrets)
26
+ - Data exfiltration to external services
27
+ - Self-modification of agent code or config
28
+
29
+ ## ALLOW by default
30
+ Allow unless a BLOCK rule clearly applies.`;
31
+ exports.STAGE1_PROMPT_SUFFIX = `Err on the side of blocking. Respond with <block>yes</block> or <block>no</block>.`;
32
+ exports.STAGE2_PROMPT_SUFFIX = `Use <thinking> before responding. Explicit user confirmation required to override blocks. Respond with <block>yes</block> or <block>no</block> and <reason>...</reason>.`;
33
+ exports.STAGE1_MAX_TOKENS = 64;
34
+ exports.STAGE2_MAX_TOKENS = 4096;
35
+ exports.SAFE_TOOL_ALLOWLIST = [
36
+ 'list_tasks', 'get_task', 'list_notes',
37
+ 'web_search', 'web_fetch',
38
+ ];
39
+ //# sourceMappingURL=yolo-classifier.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yolo-classifier.constants.js","sourceRoot":"","sources":["../../../src/agent/services/yolo-classifier.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;2CA0BS,CAAC;AAE/B,QAAA,oBAAoB,GAAG,oFAAoF,CAAC;AAE5G,QAAA,oBAAoB,GAAG,0KAA0K,CAAC;AAElM,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACvB,QAAA,iBAAiB,GAAG,IAAI,CAAC;AAEzB,QAAA,mBAAmB,GAAG;IACjC,YAAY,EAAE,UAAU,EAAE,YAAY;IACtC,YAAY,EAAE,WAAW;CAC1B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { SettingsService } from '../../settings/settings.service';
2
+ import { LLMControllerService } from './llm-controller.service';
3
+ export interface YoloResult {
4
+ allowed: boolean;
5
+ reason?: string;
6
+ stage: 'fast_path' | 'pattern' | 'stage1' | 'stage2' | 'error' | 'fallback';
7
+ rule?: string;
8
+ }
9
+ export interface YoloConfig {
10
+ disabledPatterns: string[];
11
+ failClosed: boolean;
12
+ safeToolAllowlist: boolean;
13
+ }
14
+ export declare const DEFAULT_YOLO_CONFIG: YoloConfig;
15
+ export declare class YoloClassifierService {
16
+ private readonly llmController;
17
+ private readonly settingsService;
18
+ private static readonly SETTING_KEY;
19
+ private trackers;
20
+ private config;
21
+ private configLoaded;
22
+ constructor(llmController: LLMControllerService, settingsService: SettingsService);
23
+ private ensureConfig;
24
+ getConfig(): Promise<YoloConfig>;
25
+ updateConfig(updates: Partial<YoloConfig>): Promise<YoloConfig>;
26
+ evaluate(toolName: string, toolInput: string, transcript: string, sessionId?: number): Promise<YoloResult>;
27
+ private runStage1;
28
+ private runStage2;
29
+ }
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var YoloClassifierService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.YoloClassifierService = exports.DEFAULT_YOLO_CONFIG = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const settings_service_1 = require("../../settings/settings.service");
16
+ const llm_controller_service_1 = require("./llm-controller.service");
17
+ const danger_patterns_config_1 = require("./danger-patterns.config");
18
+ const denial_tracking_1 = require("./denial-tracking");
19
+ const yolo_classifier_constants_1 = require("./yolo-classifier.constants");
20
+ exports.DEFAULT_YOLO_CONFIG = {
21
+ disabledPatterns: [],
22
+ failClosed: true,
23
+ safeToolAllowlist: true,
24
+ };
25
+ let YoloClassifierService = YoloClassifierService_1 = class YoloClassifierService {
26
+ constructor(llmController, settingsService) {
27
+ this.llmController = llmController;
28
+ this.settingsService = settingsService;
29
+ this.trackers = new Map();
30
+ this.config = { ...exports.DEFAULT_YOLO_CONFIG };
31
+ this.configLoaded = false;
32
+ }
33
+ async ensureConfig() {
34
+ if (this.configLoaded)
35
+ return;
36
+ const raw = await this.settingsService.get(YoloClassifierService_1.SETTING_KEY, '');
37
+ if (raw) {
38
+ try {
39
+ const parsed = JSON.parse(raw);
40
+ this.config = { ...exports.DEFAULT_YOLO_CONFIG, ...parsed };
41
+ }
42
+ catch { }
43
+ }
44
+ this.configLoaded = true;
45
+ }
46
+ async getConfig() {
47
+ await this.ensureConfig();
48
+ return { ...this.config };
49
+ }
50
+ async updateConfig(updates) {
51
+ this.config = { ...this.config, ...updates };
52
+ await this.settingsService.upsert(YoloClassifierService_1.SETTING_KEY, JSON.stringify(this.config));
53
+ return this.getConfig();
54
+ }
55
+ async evaluate(toolName, toolInput, transcript, sessionId) {
56
+ await this.ensureConfig();
57
+ const sessionKey = sessionId?.toString() ?? 'default';
58
+ let tracker = this.trackers.get(sessionKey);
59
+ if (!tracker) {
60
+ tracker = new denial_tracking_1.DenialTracker();
61
+ this.trackers.set(sessionKey, tracker);
62
+ }
63
+ if (tracker.isLimitExceeded()) {
64
+ return { allowed: false, reason: 'Denial limit exceeded', stage: 'fallback' };
65
+ }
66
+ if (this.config.safeToolAllowlist && yolo_classifier_constants_1.SAFE_TOOL_ALLOWLIST.includes(toolName)) {
67
+ tracker.recordAllow();
68
+ return { allowed: true, stage: 'fast_path' };
69
+ }
70
+ const activeRules = danger_patterns_config_1.BLOCK_RULES.filter(r => !this.config.disabledPatterns.includes(r.category));
71
+ const matched = (0, danger_patterns_config_1.matchDangerPattern)(toolName, toolInput, activeRules);
72
+ if (matched) {
73
+ return this.runStage2(toolName, toolInput, transcript, tracker, matched);
74
+ }
75
+ return this.runStage1(toolName, toolInput, transcript, tracker);
76
+ }
77
+ async runStage1(toolName, toolInput, transcript, tracker) {
78
+ const prompt = `${transcript}\n\nAction: ${toolName}(${toolInput})\n\n${yolo_classifier_constants_1.STAGE1_PROMPT_SUFFIX}`;
79
+ const messages = [
80
+ { role: 'system', content: yolo_classifier_constants_1.YOLO_SYSTEM_PROMPT },
81
+ { role: 'user', content: prompt },
82
+ ];
83
+ try {
84
+ const response = await this.llmController.generateCompletion(messages, { max_tokens: yolo_classifier_constants_1.STAGE1_MAX_TOKENS, temperature: 0 });
85
+ const blockMatch = response.match(/<block>(yes|no)<\/block>/);
86
+ if (!blockMatch) {
87
+ return this.runStage2(toolName, toolInput, transcript, tracker);
88
+ }
89
+ if (blockMatch[1] === 'no') {
90
+ tracker.recordAllow();
91
+ return { allowed: true, stage: 'stage1' };
92
+ }
93
+ return this.runStage2(toolName, toolInput, transcript, tracker);
94
+ }
95
+ catch {
96
+ if (this.config.failClosed) {
97
+ return { allowed: false, reason: 'Classifier API error', stage: 'error' };
98
+ }
99
+ return { allowed: false, reason: 'Classifier unavailable', stage: 'fallback' };
100
+ }
101
+ }
102
+ async runStage2(toolName, toolInput, transcript, tracker, matched) {
103
+ const prompt = `${transcript}\n\nAction: ${toolName}(${toolInput})\n${yolo_classifier_constants_1.STAGE2_PROMPT_SUFFIX}`;
104
+ const messages = [
105
+ { role: 'system', content: yolo_classifier_constants_1.YOLO_SYSTEM_PROMPT },
106
+ { role: 'user', content: prompt },
107
+ ];
108
+ try {
109
+ const response = await this.llmController.generateCompletion(messages, { max_tokens: yolo_classifier_constants_1.STAGE2_MAX_TOKENS, temperature: 0 });
110
+ const blockMatch = response.match(/<block>(yes|no)<\/block>/);
111
+ const reasonMatch = response.match(/<reason>([^<]+)<\/reason>/);
112
+ if (!blockMatch || blockMatch[1] === 'yes') {
113
+ const exceeded = tracker.recordDenial();
114
+ return {
115
+ allowed: false,
116
+ reason: reasonMatch?.[1] ?? 'Blocked by classifier',
117
+ stage: 'stage2',
118
+ rule: matched?.category,
119
+ };
120
+ }
121
+ tracker.recordAllow();
122
+ return { allowed: true, stage: matched ? 'pattern' : 'stage2' };
123
+ }
124
+ catch {
125
+ if (this.config.failClosed) {
126
+ return { allowed: false, reason: 'Classifier API error', stage: 'error' };
127
+ }
128
+ return { allowed: false, reason: 'Classifier unavailable', stage: 'fallback' };
129
+ }
130
+ }
131
+ };
132
+ exports.YoloClassifierService = YoloClassifierService;
133
+ YoloClassifierService.SETTING_KEY = 'agent.yolo_config';
134
+ exports.YoloClassifierService = YoloClassifierService = YoloClassifierService_1 = __decorate([
135
+ (0, common_1.Injectable)(),
136
+ __metadata("design:paramtypes", [llm_controller_service_1.LLMControllerService,
137
+ settings_service_1.SettingsService])
138
+ ], YoloClassifierService);
139
+ //# sourceMappingURL=yolo-classifier.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yolo-classifier.service.js","sourceRoot":"","sources":["../../../src/agent/services/yolo-classifier.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../services/context-builder.service';
2
+ export declare function filterSubagentTools(tools: ToolDefinition[], allowedTools?: string): ToolDefinition[];
3
+ export declare function runWithConcurrency<T, R>(items: T[], limit: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filterSubagentTools = filterSubagentTools;
4
+ exports.runWithConcurrency = runWithConcurrency;
5
+ const DISPATCH_TOOLS = new Set(['spawn_subagent', 'delegate']);
6
+ function filterSubagentTools(tools, allowedTools) {
7
+ let allowed = null;
8
+ if (allowedTools && allowedTools !== '*') {
9
+ try {
10
+ const parsed = JSON.parse(allowedTools);
11
+ if (Array.isArray(parsed))
12
+ allowed = new Set(parsed.map(String));
13
+ }
14
+ catch { }
15
+ }
16
+ return tools.filter(t => {
17
+ const name = t.function.name;
18
+ if (DISPATCH_TOOLS.has(name))
19
+ return false;
20
+ if (allowed && !allowed.has(name))
21
+ return false;
22
+ return true;
23
+ });
24
+ }
25
+ async function runWithConcurrency(items, limit, fn) {
26
+ const results = new Array(items.length);
27
+ let next = 0;
28
+ const workers = Array.from({ length: Math.min(Math.max(limit, 1), items.length) }, async () => {
29
+ while (next < items.length) {
30
+ const i = next++;
31
+ results[i] = await fn(items[i], i);
32
+ }
33
+ });
34
+ await Promise.all(workers);
35
+ return results;
36
+ }
37
+ //# sourceMappingURL=subagent-tools.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-tools.util.js","sourceRoot":"","sources":["../../../src/agent/subagent/subagent-tools.util.ts"],"names":[],"mappings":";;AAIA,kDAcC;AAED,gDAaC;AA/BD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;AAE/D,SAAgB,mBAAmB,CAAC,KAAuB,EAAE,YAAqB;IAChF,IAAI,OAAO,GAAuB,IAAI,CAAC;IACvC,IAAI,YAAY,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC,CAAyB,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7B,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,KAAU,EAAE,KAAa,EAAE,EAA0C;IAErE,MAAM,OAAO,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC5F,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { AgentLoopService } from '../services/agent-loop.service';
2
+ import { ToolDefinition } from '../services/context-builder.service';
3
+ import { WriteStream } from '../dto/write-stream.interface';
4
+ export declare class SubagentService {
5
+ private readonly agentLoop;
6
+ private static readonly MAX_PARALLEL;
7
+ constructor(agentLoop: AgentLoopService);
8
+ delegate(tasks: string[], providerType: string, model: string, providerConfig: {
9
+ baseUrl: string;
10
+ key?: string;
11
+ }, tools: ToolDefinition[], signal: AbortSignal, res: WriteStream, sessionId?: number, projectPath?: string, systemPromptOverride?: string, subagentName?: string): Promise<string>;
12
+ spawn(task: string, providerType: string, model: string, providerConfig: {
13
+ baseUrl: string;
14
+ key?: string;
15
+ }, tools: ToolDefinition[], signal: AbortSignal, res: WriteStream, sessionId?: number, projectPath?: string, systemPromptOverride?: string, subagentName?: string, subagentRunId?: string): Promise<string>;
16
+ private createPrefixedResponse;
17
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var SubagentService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.SubagentService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const crypto = require("crypto");
19
+ const agent_loop_service_1 = require("../services/agent-loop.service");
20
+ const subagent_tools_util_1 = require("./subagent-tools.util");
21
+ let SubagentService = SubagentService_1 = class SubagentService {
22
+ constructor(agentLoop) {
23
+ this.agentLoop = agentLoop;
24
+ }
25
+ async delegate(tasks, providerType, model, providerConfig, tools, signal, res, sessionId, projectPath, systemPromptOverride, subagentName) {
26
+ if (signal.aborted)
27
+ return 'Aborted';
28
+ const requestId = crypto.randomUUID();
29
+ res.write(`data: ${JSON.stringify({ delegate: { requestId, taskCount: tasks.length } })}\n\n`);
30
+ const results = await (0, subagent_tools_util_1.runWithConcurrency)(tasks, SubagentService_1.MAX_PARALLEL, async (task, i) => {
31
+ res.write(`data: ${JSON.stringify({ delegateProgress: { requestId, index: i, subtask: task, status: 'running' } })}\n\n`);
32
+ try {
33
+ const summary = await this.spawn(task, providerType, model, providerConfig, tools, signal, res, sessionId, projectPath, systemPromptOverride, subagentName);
34
+ return { index: i, task, status: 'completed', summary: summary.slice(0, 200) };
35
+ }
36
+ catch (err) {
37
+ return { index: i, task, status: 'failed', summary: err.message ?? 'Unknown error' };
38
+ }
39
+ });
40
+ res.write(`data: ${JSON.stringify({ delegateResult: { requestId, results } })}\n\n`);
41
+ return results.map(r => `Delegate result ${r.index}: [${r.status}] — ${r.task}\n Summary: ${r.summary}`).join('\n');
42
+ }
43
+ async spawn(task, providerType, model, providerConfig, tools, signal, res, sessionId, projectPath, systemPromptOverride, subagentName, subagentRunId) {
44
+ const runId = subagentRunId ?? crypto.randomUUID();
45
+ const subagentPrompt = systemPromptOverride ??
46
+ (`You are a sub-agent. Your task: ${task}\n\n` +
47
+ 'You have access to the same workspace tools. Complete the task and report back concisely.');
48
+ const subRes = this.createPrefixedResponse(res, subagentName, runId);
49
+ return this.agentLoop.run(providerType, model, subagentPrompt, [], task, tools, subRes, signal, sessionId, projectPath, providerConfig, subagentName, runId);
50
+ }
51
+ createPrefixedResponse(res, subagentName, subagentRunId) {
52
+ const originalWrite = res.write.bind(res);
53
+ return {
54
+ write(data) {
55
+ if (/^data: \[DONE\]\n?$/m.test(data)) {
56
+ const donePayload = { subagent: true, done: true };
57
+ if (subagentName)
58
+ donePayload.subagentName = subagentName;
59
+ if (subagentRunId)
60
+ donePayload.subagentRunId = subagentRunId;
61
+ return originalWrite(`data: ${JSON.stringify(donePayload)}\n\n`);
62
+ }
63
+ const modified = data.replace(/^(data: )(\{.*?\})(\n\n)$/gm, (_match, prefix, json, suffix) => {
64
+ try {
65
+ const parsed = JSON.parse(json);
66
+ parsed.subagent = true;
67
+ if (subagentName)
68
+ parsed.subagentName = subagentName;
69
+ if (subagentRunId)
70
+ parsed.subagentRunId = subagentRunId;
71
+ return `${prefix}${JSON.stringify(parsed)}${suffix}`;
72
+ }
73
+ catch {
74
+ return _match;
75
+ }
76
+ });
77
+ return originalWrite(modified);
78
+ },
79
+ };
80
+ }
81
+ };
82
+ exports.SubagentService = SubagentService;
83
+ SubagentService.MAX_PARALLEL = 4;
84
+ exports.SubagentService = SubagentService = SubagentService_1 = __decorate([
85
+ (0, common_1.Injectable)(),
86
+ __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => agent_loop_service_1.AgentLoopService))),
87
+ __metadata("design:paramtypes", [agent_loop_service_1.AgentLoopService])
88
+ ], SubagentService);
89
+ //# sourceMappingURL=subagent.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent.service.js","sourceRoot":"","sources":["../../../src/agent/subagent/subagent.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { StreamableFile } from '@nestjs/common';
2
+ import { Response } from 'express';
3
+ import { WorkspaceService } from '../workspace/workspace.service';
4
+ interface AgentOutputFile {
5
+ filename: string;
6
+ size: number;
7
+ modifiedAt: string;
8
+ }
9
+ export declare class AgentOutputController {
10
+ private readonly workspace;
11
+ constructor(workspace: WorkspaceService);
12
+ listFiles(): Promise<AgentOutputFile[]>;
13
+ private scanAgentOutputDir;
14
+ download(filename: string, res: Response): StreamableFile;
15
+ private resolveFile;
16
+ remove(filename: string): Promise<{
17
+ success: boolean;
18
+ }>;
19
+ }
20
+ export {};