@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,296 @@
1
+ #!/usr/bin/env node
2
+ const { spawn, execSync, exec } = require('child_process');
3
+ const path = require('path');
4
+ const fs = require('fs');
5
+ const http = require('http');
6
+
7
+ const ROOT = path.resolve(__dirname, '..');
8
+ const CWD = process.cwd();
9
+ const DATA_DIR = path.resolve(CWD, 'workspace_data');
10
+ const DB_PATH = path.join(DATA_DIR, 'dev.db');
11
+
12
+ const BACKEND_ENTRY = path.join(ROOT, 'backend', 'dist', 'main.js');
13
+
14
+ function log(tag, msg) {
15
+ console.log(`[${tag}] ${msg}`);
16
+ }
17
+
18
+ function createDataDir() {
19
+ if (!fs.existsSync(DATA_DIR)) {
20
+ fs.mkdirSync(DATA_DIR, { recursive: true });
21
+ log('init', 'Created workspace_data directory');
22
+ }
23
+ }
24
+
25
+ function createEnv() {
26
+ const envPath = path.join(CWD, '.env');
27
+ if (fs.existsSync(envPath)) return;
28
+ const examplePath = path.join(ROOT, 'backend', '.env.example');
29
+ if (fs.existsSync(examplePath)) {
30
+ log('init', 'Creating .env from .env.example — edit it to match your setup');
31
+ fs.copyFileSync(examplePath, envPath);
32
+ } else {
33
+ log('init', 'Creating default .env');
34
+ const defaults = [
35
+ 'PORT=17135',
36
+ 'OLLAMA_URL=http://localhost:11434',
37
+ 'ACTIVE_PROVIDER=ollama',
38
+ 'EMBED_MODEL=nomic-embed-text',
39
+ 'SUMMARY_MODEL=llama3.2',
40
+ 'UPLOAD_DIR=./workspace_data/uploads',
41
+ 'APP_URL=http://localhost:17135',
42
+ '',
43
+ '# Google OAuth credentials (optional)',
44
+ 'GOOGLE_GMAIL_CLIENT_ID=',
45
+ 'GOOGLE_GMAIL_CLIENT_SECRET=',
46
+ 'GOOGLE_CALENDAR_CLIENT_ID=',
47
+ 'GOOGLE_CALENDAR_CLIENT_SECRET=',
48
+ 'GOOGLE_DRIVE_CLIENT_ID=',
49
+ 'GOOGLE_DRIVE_CLIENT_SECRET=',
50
+ 'GOOGLE_SHEETS_CLIENT_ID=',
51
+ 'GOOGLE_SHEETS_CLIENT_SECRET=',
52
+ ].join('\n');
53
+ fs.writeFileSync(envPath, defaults);
54
+ }
55
+ }
56
+
57
+ function needsMigration() {
58
+ return !fs.existsSync(DB_PATH);
59
+ }
60
+
61
+ function runMigrations() {
62
+ const schemaPath = path.join(ROOT, 'backend', 'prisma', 'schema.prisma');
63
+ const backendDir = path.join(ROOT, 'backend');
64
+ const env = { ...process.env, DATABASE_URL: `file:${DB_PATH}` };
65
+
66
+ log('init', 'Applying database migrations...');
67
+ execSync(`npx prisma migrate deploy --schema="${schemaPath}"`, {
68
+ cwd: backendDir, stdio: 'inherit', env,
69
+ });
70
+
71
+ log('init', 'Generating Prisma client...');
72
+ execSync(`npx prisma generate --schema="${schemaPath}"`, {
73
+ cwd: backendDir, stdio: 'inherit', env,
74
+ });
75
+
76
+ log('init', 'Seeding database...');
77
+ execSync('npx prisma db seed', {
78
+ cwd: backendDir, stdio: 'inherit', env,
79
+ });
80
+ }
81
+
82
+ function getPort() {
83
+ return process.env.PORT ?? '17135';
84
+ }
85
+
86
+ function resolveEnv() {
87
+ const envPath = path.join(CWD, '.env');
88
+ if (fs.existsSync(envPath)) {
89
+ const content = fs.readFileSync(envPath, 'utf-8');
90
+ for (const line of content.split('\n')) {
91
+ const trimmed = line.trim();
92
+ if (!trimmed || trimmed.startsWith('#')) continue;
93
+ const eqIdx = trimmed.indexOf('=');
94
+ if (eqIdx === -1) continue;
95
+ const key = trimmed.slice(0, eqIdx).trim();
96
+ const val = trimmed.slice(eqIdx + 1).trim();
97
+ if (key && !process.env[key]) {
98
+ process.env[key] = val;
99
+ }
100
+ }
101
+ }
102
+ }
103
+
104
+ function waitForServer(port, maxRetries = 60) {
105
+ return new Promise((resolve, reject) => {
106
+ let retries = 0;
107
+ const check = () => {
108
+ const req = http.get(`http://localhost:${port}/api/health`, (res) => {
109
+ let data = '';
110
+ res.on('data', (chunk) => { data += chunk; });
111
+ res.on('end', () => {
112
+ try {
113
+ const json = JSON.parse(data);
114
+ if (json.status === 'ok') return resolve();
115
+ } catch {}
116
+ retry();
117
+ });
118
+ });
119
+ req.on('error', retry);
120
+ req.setTimeout(2000, () => { req.destroy(); retry(); });
121
+ };
122
+ const retry = () => {
123
+ if (++retries >= maxRetries) {
124
+ return reject(new Error('Server did not start in time'));
125
+ }
126
+ setTimeout(check, 500);
127
+ };
128
+ check();
129
+ });
130
+ }
131
+
132
+ function openBrowser(url) {
133
+ const platform = process.platform;
134
+ if (platform === 'win32') {
135
+ exec(`start "" "${url}"`);
136
+ } else if (platform === 'darwin') {
137
+ exec(`open "${url}"`);
138
+ } else {
139
+ exec(`xdg-open "${url}"`);
140
+ }
141
+ }
142
+
143
+ async function cmdInit() {
144
+ createDataDir();
145
+ createEnv();
146
+ if (needsMigration()) {
147
+ runMigrations();
148
+ log('init', 'Setup complete');
149
+ } else {
150
+ log('init', 'Already initialized (dev.db exists)');
151
+ }
152
+ process.exit(0);
153
+ }
154
+
155
+ async function cmdStudio() {
156
+ const noBrowser = process.argv.includes('--no-browser');
157
+ const port = getPort();
158
+
159
+ createDataDir();
160
+ createEnv();
161
+ if (needsMigration()) {
162
+ runMigrations();
163
+ }
164
+ resolveEnv();
165
+
166
+ const server = spawn('node', [BACKEND_ENTRY], {
167
+ stdio: 'inherit',
168
+ env: {
169
+ ...process.env,
170
+ DATABASE_URL: `file:${DB_PATH}`,
171
+ PORT: port,
172
+ },
173
+ });
174
+
175
+ server.on('error', (err) => {
176
+ console.error(err);
177
+ process.exit(1);
178
+ });
179
+
180
+ log('studio', `Starting server on port ${port}...`);
181
+ try {
182
+ await waitForServer(port);
183
+ } catch {
184
+ log('studio', 'Warning: Could not confirm server readiness');
185
+ }
186
+
187
+ const url = `http://localhost:${port}`;
188
+ console.log('');
189
+ console.log(' ╔══════════════════════════════════════╗');
190
+ console.log(' ║ Agent Hub Studio ║');
191
+ console.log(' ╠══════════════════════════════════════╣');
192
+ console.log(` ║ URL: ${url.padEnd(33)}║`);
193
+ console.log(` ║ Port: ${port.padEnd(33)}║`);
194
+ console.log(' ╠══════════════════════════════════════╣');
195
+ console.log(' ║ Press Ctrl+C to stop ║');
196
+ console.log(' ╚══════════════════════════════════════╝');
197
+ console.log('');
198
+
199
+ if (!noBrowser) {
200
+ openBrowser(url);
201
+ }
202
+
203
+ const cleanup = () => {
204
+ log('studio', 'Shutting down...');
205
+ server.kill('SIGTERM');
206
+ setTimeout(() => process.exit(0), 1000);
207
+ };
208
+ process.on('SIGINT', cleanup);
209
+ process.on('SIGTERM', cleanup);
210
+
211
+ server.on('exit', (code) => process.exit(code ?? 0));
212
+ }
213
+
214
+ function getRegistryValue(key, name) {
215
+ return new Promise((resolve) => {
216
+ exec(`reg query "${key}" /v "${name}"`, (err, stdout) => {
217
+ if (err) return resolve(null);
218
+ const match = stdout.match(/REG_SZ\s+(.+)/);
219
+ resolve(match ? match[1].trim() : null);
220
+ });
221
+ });
222
+ }
223
+
224
+ async function cmdAutoStart() {
225
+ const sub = process.argv[3];
226
+ const key = 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run';
227
+ const valueName = 'AgentHubStudio';
228
+ const cliPath = path.resolve(__dirname, 'workspace-cli.js');
229
+ const cmd = `"${process.execPath}" "${cliPath}" studio --no-browser`;
230
+
231
+ if (sub === 'enable') {
232
+ exec(`reg add "${key}" /v "${valueName}" /t REG_SZ /d "${cmd}" /f`, (err) => {
233
+ if (err) {
234
+ console.error('Failed to enable auto-start:', err.message);
235
+ process.exit(1);
236
+ }
237
+ console.log('Auto-start enabled — Agent Hub Studio will start on Windows boot');
238
+ process.exit(0);
239
+ });
240
+ } else if (sub === 'disable') {
241
+ exec(`reg delete "${key}" /v "${valueName}" /f`, (err) => {
242
+ if (err && !err.message.includes('does not exist')) {
243
+ console.error('Failed to disable auto-start:', err.message);
244
+ process.exit(1);
245
+ }
246
+ console.log('Auto-start disabled');
247
+ process.exit(0);
248
+ });
249
+ } else if (sub === 'status') {
250
+ const val = await getRegistryValue(key, valueName);
251
+ if (val) {
252
+ console.log(`Auto-start: enabled (${val})`);
253
+ } else {
254
+ console.log('Auto-start: disabled');
255
+ }
256
+ process.exit(0);
257
+ } else {
258
+ console.log('Usage: agent-hub auto-start <enable|disable|status>');
259
+ process.exit(1);
260
+ }
261
+ }
262
+
263
+ async function main() {
264
+ const subcommand = process.argv[2];
265
+ if (!subcommand || subcommand === 'studio') {
266
+ await cmdStudio();
267
+ } else if (subcommand === 'init') {
268
+ await cmdInit();
269
+ } else if (subcommand === 'auto-start') {
270
+ await cmdAutoStart();
271
+ } else if (subcommand === '--help' || subcommand === 'help') {
272
+ console.log(`
273
+ Agent Hub Studio — CLI
274
+
275
+ Usage:
276
+ agent-hub Start Studio (server + dashboard)
277
+ agent-hub studio Same as above
278
+ agent-hub studio --no-browser Start server without opening browser
279
+ agent-hub init One-time setup (data dir, .env, migrations)
280
+ agent-hub auto-start enable Register Windows auto-start
281
+ agent-hub auto-start disable Remove Windows auto-start
282
+ agent-hub auto-start status Check auto-start status
283
+ agent-hub --help Show this help
284
+ `);
285
+ process.exit(0);
286
+ } else {
287
+ console.log(`Unknown command: ${subcommand}`);
288
+ console.log('Run "agent-hub --help" for usage');
289
+ process.exit(1);
290
+ }
291
+ }
292
+
293
+ main().catch((err) => {
294
+ console.error(err);
295
+ process.exit(1);
296
+ });
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap";@import"https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap";*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-full{bottom:100%}.left-0{left:0}.right-0{right:0}.right-1\.5{right:.375rem}.top-0{top:0}.top-full{top:100%}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2 / span 2}.m-1{margin:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-\[1\.125rem\]{height:1.125rem}.h-\[1\.75rem\]{height:1.75rem}.h-\[3rem\]{height:3rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-40{max-height:10rem}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.w-1{width:.25rem}.w-120{width:30rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-72{width:18rem}.w-8{width:2rem}.w-96{width:24rem}.w-\[1\.125rem\]{width:1.125rem}.w-\[32rem\]{width:32rem}.w-\[40rem\]{width:40rem}.w-\[48rem\]{width:48rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-60{max-width:15rem}.max-w-60rem{max-width:60rem}.max-w-\[120px\]{max-width:120px}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes dot-pulse{0%,to{opacity:.2}50%{opacity:1}}.animate-dot-pulse{animation:dot-pulse 1.2s ease-in-out infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-cyber-accent{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-cyber-accent\/10{border-color:#3b82f61a}.border-cyber-accent\/20{border-color:#3b82f633}.border-cyber-accent\/30{border-color:#3b82f64d}.border-cyber-accent\/40{border-color:#3b82f666}.border-cyber-accent\/5{border-color:#3b82f60d}.border-cyber-accent\/50{border-color:#3b82f680}.border-cyber-accent\/80{border-color:#3b82f6cc}.border-cyber-border,.border-cyber-code-border{--tw-border-opacity: 1;border-color:rgb(48 54 61 / var(--tw-border-opacity, 1))}.border-cyber-code-border\/50{border-color:#30363d80}.border-cyber-cyan\/30{border-color:#00d4ff4d}.border-cyber-cyan\/40{border-color:#00d4ff66}.border-cyber-green{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-cyber-green\/30{border-color:#22c55e4d}.border-cyber-green\/50{border-color:#22c55e80}.border-cyber-muted\/40{border-color:#8886}.border-cyber-orange{--tw-border-opacity: 1;border-color:rgb(255 165 0 / var(--tw-border-opacity, 1))}.border-cyber-orange\/50{border-color:#ffa50080}.border-cyber-orange\/60{border-color:#ffa50099}.border-red-400\/40{border-color:#f8717166}.border-red-400\/50{border-color:#f8717180}.bg-black\/60{background-color:#0009}.bg-cyber-accent{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-cyber-accent\/10{background-color:#3b82f61a}.bg-cyber-accent\/15{background-color:#3b82f626}.bg-cyber-accent\/20{background-color:#3b82f633}.bg-cyber-bg{--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity, 1))}.bg-cyber-code-bg{--tw-bg-opacity: 1;background-color:rgb(13 17 23 / var(--tw-bg-opacity, 1))}.bg-cyber-code-border{--tw-bg-opacity: 1;background-color:rgb(48 54 61 / var(--tw-bg-opacity, 1))}.bg-cyber-dark{--tw-bg-opacity: 1;background-color:rgb(17 17 17 / var(--tw-bg-opacity, 1))}.bg-cyber-dark\/40{background-color:#1116}.bg-cyber-dark\/80{background-color:#111c}.bg-cyber-green{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-cyber-modal-bg{--tw-bg-opacity: 1;background-color:rgb(40 40 40 / var(--tw-bg-opacity, 1))}.bg-cyber-muted{--tw-bg-opacity: 1;background-color:rgb(136 136 136 / var(--tw-bg-opacity, 1))}.bg-cyber-orange{--tw-bg-opacity: 1;background-color:rgb(255 165 0 / var(--tw-bg-opacity, 1))}.bg-cyber-status{--tw-bg-opacity: 1;background-color:rgb(22 22 22 / var(--tw-bg-opacity, 1))}.bg-red-500\/80{background-color:#ef4444cc}.bg-transparent{background-color:transparent}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:.75rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pr-5{padding-right:1.25rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-\[\'Press_Start_2P\'\]{font-family:"Press Start 2P"}.font-mono{font-family:JetBrains Mono,Fira Code,Courier New,monospace}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-5{line-height:1.25rem}.leading-relaxed{line-height:1.625}.tracking-widest{letter-spacing:.1em}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-cyber-accent{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-cyber-accent\/30{color:#3b82f64d}.text-cyber-accent\/40{color:#3b82f666}.text-cyber-accent\/50{color:#3b82f680}.text-cyber-accent\/60{color:#3b82f699}.text-cyber-accent\/70{color:#3b82f6b3}.text-cyber-accent\/80{color:#3b82f6cc}.text-cyber-code-text{--tw-text-opacity: 1;color:rgb(230 237 243 / var(--tw-text-opacity, 1))}.text-cyber-cyan{--tw-text-opacity: 1;color:rgb(0 212 255 / var(--tw-text-opacity, 1))}.text-cyber-cyan\/70{color:#00d4ffb3}.text-cyber-green{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-cyber-muted{--tw-text-opacity: 1;color:rgb(136 136 136 / var(--tw-text-opacity, 1))}.text-cyber-muted\/40{color:#8886}.text-cyber-muted\/50{color:#88888880}.text-cyber-muted\/60{color:#8889}.text-cyber-muted\/80{color:#888c}.text-cyber-orange{--tw-text-opacity: 1;color:rgb(255 165 0 / var(--tw-text-opacity, 1))}.text-cyber-text{--tw-text-opacity: 1;color:rgb(238 238 238 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-400\/40{color:#f8717166}.text-red-400\/80{color:#f87171cc}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-100\/60{color:#f1f5f999}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.placeholder-cyber-muted\/40::-moz-placeholder{color:#8886}.placeholder-cyber-muted\/40::placeholder{color:#8886}.caret-white{caret-color:#fff}.accent-cyber-accent{accent-color:#3B82F6}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-500{transition-duration:.5s}:root{--cyber-bg: #000000;--cyber-text: #EEEEEE;--cyber-muted: #888888;--cyber-accent: #3B82F6;--cyber-cyan: #00d4ff;--cyber-link: #58a6ff;--cyber-code-red: #f08383;--cyber-code-bg: #0d1117;--cyber-code-border: #30363d;--cyber-code-text: #e6edf3;--cyber-row: #161b22;--cyber-blockquote: #8b949e;--cyber-scrollbar-track: #141414;--cyber-accent-20: rgba(59, 130, 246, .2);--cyber-cyan-15: rgba(0, 212, 255, .15);--cyber-cyan-05: rgba(0, 212, 255, .05);--cyber-cyan-03: rgba(0, 212, 255, .03);--cyber-inline-code-bg: rgba(110, 118, 129, .4)}*{box-sizing:border-box}html,body,#app{margin:0;padding:0;height:100%;background-color:var(--cyber-bg);color:var(--cyber-text);font-size:16px;font-family:JetBrains Mono,Fira Code,Courier New,monospace}::-webkit-scrollbar{width:.25rem}::-webkit-scrollbar-track{background:var(--cyber-scrollbar-track)}::-webkit-scrollbar-thumb{background:var(--cyber-accent-20);border-radius:.125rem}.markdown-body{font-family:JetBrains Mono,Fira Code,Courier New,monospace}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--cyber-cyan);font-weight:600;margin:1rem 0 .5rem;padding-bottom:.375rem;border-bottom:1px solid var(--cyber-cyan-15)}.markdown-body a{color:var(--cyber-link);text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body p{margin:0 0 .625rem;line-height:1.7}.markdown-body code{background:var(--cyber-inline-code-bg);color:var(--cyber-code-red);padding:.0625rem .375rem;border-radius:.25rem}.markdown-body pre{background:var(--cyber-code-bg);border:1px solid var(--cyber-code-border);border-radius:.25rem;padding:.75rem;margin:.75rem 0;overflow-x:auto}.markdown-body pre code{background:none;color:var(--cyber-code-text);padding:0;line-height:1.6}.markdown-body table{width:100%;border-collapse:collapse;margin:.75rem 0;border:1px solid var(--cyber-code-border)}.markdown-body th,.markdown-body td{border:1px solid var(--cyber-code-border);padding:.4375rem .625rem;text-align:left}.markdown-body th{background:var(--cyber-row);color:var(--cyber-cyan);font-weight:500}.markdown-body tr:nth-child(2n){background:var(--cyber-cyan-03)}.markdown-body blockquote{border-left:.1875rem solid var(--cyber-cyan);margin:.75rem 0;padding:.5rem .875rem;background:var(--cyber-cyan-05);color:var(--cyber-blockquote);border-radius:0 .25rem .25rem 0}.markdown-body ul,.markdown-body ol{margin:.5rem 0;padding-left:1.25rem;color:var(--cyber-code-text)}.markdown-body ul{list-style:disc}.markdown-body ol{list-style:decimal}.markdown-body li{margin:.1875rem 0}.markdown-body hr{border:none;border-top:1px solid var(--cyber-code-border);margin:1rem 0}.markdown-body img{max-width:100%;border-radius:.25rem}.markdown-body .citation{color:var(--cyber-orange, #FFA500);font-size:.75rem;opacity:.8;white-space:nowrap}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-cyber-accent\/30:hover{border-color:#3b82f64d}.hover\:border-cyber-accent\/40:hover{border-color:#3b82f666}.hover\:border-cyber-muted:hover{--tw-border-opacity: 1;border-color:rgb(136 136 136 / var(--tw-border-opacity, 1))}.hover\:bg-cyber-accent\/10:hover{background-color:#3b82f61a}.hover\:bg-cyber-accent\/20:hover{background-color:#3b82f633}.hover\:bg-cyber-accent\/25:hover{background-color:#3b82f640}.hover\:bg-cyber-accent\/5:hover{background-color:#3b82f60d}.hover\:bg-cyber-accent\/80:hover{background-color:#3b82f6cc}.hover\:bg-cyber-bg\/30:hover{background-color:#1e1e1e4d}.hover\:bg-cyber-cyan\/10:hover{background-color:#00d4ff1a}.hover\:bg-cyber-cyan\/20:hover{background-color:#00d4ff33}.hover\:bg-cyber-dark:hover{--tw-bg-opacity: 1;background-color:rgb(17 17 17 / var(--tw-bg-opacity, 1))}.hover\:bg-cyber-dark\/40:hover{background-color:#1116}.hover\:bg-cyber-green\/10:hover{background-color:#22c55e1a}.hover\:bg-cyber-green\/80:hover{background-color:#22c55ecc}.hover\:bg-cyber-row:hover{--tw-bg-opacity: 1;background-color:rgb(22 27 34 / var(--tw-bg-opacity, 1))}.hover\:bg-red-400\/10:hover{background-color:#f871711a}.hover\:bg-red-500:hover{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.hover\:text-cyber-accent:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.hover\:text-cyber-accent\/70:hover{color:#3b82f6b3}.hover\:text-cyber-accent\/80:hover{color:#3b82f6cc}.hover\:text-cyber-orange\/80:hover{color:#ffa500cc}.hover\:text-cyber-text:hover{--tw-text-opacity: 1;color:rgb(238 238 238 / var(--tw-text-opacity, 1))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-red-400\/80:hover{color:#f87171cc}.hover\:text-slate-100:hover{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.focus\:border-cyber-accent:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-cyber-accent\/40:focus{border-color:#3b82f666}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width: 640px){.sm\:block{display:block}}@media (min-width: 768px){.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:pl-3{padding-left:.75rem}}