@accomplish_ai/agent-core 0.0.0-pr-353-20260205225158

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 (539) hide show
  1. package/LICENSE +21 -0
  2. package/dist/browser/detection.d.ts +4 -0
  3. package/dist/browser/detection.d.ts.map +1 -0
  4. package/dist/browser/detection.js +43 -0
  5. package/dist/browser/detection.js.map +1 -0
  6. package/dist/browser/index.d.ts +3 -0
  7. package/dist/browser/index.d.ts.map +1 -0
  8. package/dist/browser/index.js +3 -0
  9. package/dist/browser/index.js.map +1 -0
  10. package/dist/browser/server.d.ts +19 -0
  11. package/dist/browser/server.d.ts.map +1 -0
  12. package/dist/browser/server.js +204 -0
  13. package/dist/browser/server.js.map +1 -0
  14. package/dist/common/constants/model-display.d.ts +7 -0
  15. package/dist/common/constants/model-display.d.ts.map +1 -0
  16. package/dist/common/constants/model-display.js +105 -0
  17. package/dist/common/constants/model-display.js.map +1 -0
  18. package/dist/common/constants.d.ts +12 -0
  19. package/dist/common/constants.d.ts.map +1 -0
  20. package/dist/common/constants.js +13 -0
  21. package/dist/common/constants.js.map +1 -0
  22. package/dist/common/index.d.ts +21 -0
  23. package/dist/common/index.d.ts.map +1 -0
  24. package/dist/common/index.js +15 -0
  25. package/dist/common/index.js.map +1 -0
  26. package/dist/common/schemas/index.d.ts +2 -0
  27. package/dist/common/schemas/index.d.ts.map +1 -0
  28. package/dist/common/schemas/index.js +2 -0
  29. package/dist/common/schemas/index.js.map +1 -0
  30. package/dist/common/schemas/validation.d.ts +69 -0
  31. package/dist/common/schemas/validation.d.ts.map +1 -0
  32. package/dist/common/schemas/validation.js +34 -0
  33. package/dist/common/schemas/validation.js.map +1 -0
  34. package/dist/common/types/auth.d.ts +28 -0
  35. package/dist/common/types/auth.d.ts.map +1 -0
  36. package/dist/common/types/auth.js +2 -0
  37. package/dist/common/types/auth.js.map +1 -0
  38. package/dist/common/types/index.d.ts +11 -0
  39. package/dist/common/types/index.d.ts.map +1 -0
  40. package/dist/common/types/index.js +11 -0
  41. package/dist/common/types/index.js.map +1 -0
  42. package/dist/common/types/logging.d.ts +15 -0
  43. package/dist/common/types/logging.d.ts.map +1 -0
  44. package/dist/common/types/logging.js +5 -0
  45. package/dist/common/types/logging.js.map +1 -0
  46. package/dist/common/types/opencode.d.ts +108 -0
  47. package/dist/common/types/opencode.d.ts.map +1 -0
  48. package/dist/common/types/opencode.js +2 -0
  49. package/dist/common/types/opencode.js.map +1 -0
  50. package/dist/common/types/permission.d.ts +35 -0
  51. package/dist/common/types/permission.d.ts.map +1 -0
  52. package/dist/common/types/permission.js +4 -0
  53. package/dist/common/types/permission.js.map +1 -0
  54. package/dist/common/types/provider.d.ts +83 -0
  55. package/dist/common/types/provider.d.ts.map +1 -0
  56. package/dist/common/types/provider.js +305 -0
  57. package/dist/common/types/provider.js.map +1 -0
  58. package/dist/common/types/providerSettings.d.ts +89 -0
  59. package/dist/common/types/providerSettings.d.ts.map +1 -0
  60. package/dist/common/types/providerSettings.js +63 -0
  61. package/dist/common/types/providerSettings.js.map +1 -0
  62. package/dist/common/types/skills.d.ts +22 -0
  63. package/dist/common/types/skills.d.ts.map +1 -0
  64. package/dist/common/types/skills.js +2 -0
  65. package/dist/common/types/skills.js.map +1 -0
  66. package/dist/common/types/task.d.ts +70 -0
  67. package/dist/common/types/task.d.ts.map +1 -0
  68. package/dist/common/types/task.js +14 -0
  69. package/dist/common/types/task.js.map +1 -0
  70. package/dist/common/types/thought-stream.d.ts +21 -0
  71. package/dist/common/types/thought-stream.d.ts.map +1 -0
  72. package/dist/common/types/thought-stream.js +6 -0
  73. package/dist/common/types/thought-stream.js.map +1 -0
  74. package/dist/common/types/todo.d.ts +7 -0
  75. package/dist/common/types/todo.d.ts.map +1 -0
  76. package/dist/common/types/todo.js +2 -0
  77. package/dist/common/types/todo.js.map +1 -0
  78. package/dist/common/utils/id.d.ts +7 -0
  79. package/dist/common/utils/id.d.ts.map +1 -0
  80. package/dist/common/utils/id.js +20 -0
  81. package/dist/common/utils/id.js.map +1 -0
  82. package/dist/common/utils/index.d.ts +4 -0
  83. package/dist/common/utils/index.d.ts.map +1 -0
  84. package/dist/common/utils/index.js +4 -0
  85. package/dist/common/utils/index.js.map +1 -0
  86. package/dist/common/utils/log-source-detector.d.ts +9 -0
  87. package/dist/common/utils/log-source-detector.d.ts.map +1 -0
  88. package/dist/common/utils/log-source-detector.js +22 -0
  89. package/dist/common/utils/log-source-detector.js.map +1 -0
  90. package/dist/common/utils/waiting-detection.d.ts +7 -0
  91. package/dist/common/utils/waiting-detection.d.ts.map +1 -0
  92. package/dist/common/utils/waiting-detection.js +62 -0
  93. package/dist/common/utils/waiting-detection.js.map +1 -0
  94. package/dist/common.d.ts +21 -0
  95. package/dist/common.d.ts.map +1 -0
  96. package/dist/common.js +20 -0
  97. package/dist/common.js.map +1 -0
  98. package/dist/factories/index.d.ts +8 -0
  99. package/dist/factories/index.d.ts.map +1 -0
  100. package/dist/factories/index.js +8 -0
  101. package/dist/factories/index.js.map +1 -0
  102. package/dist/factories/log-writer.d.ts +3 -0
  103. package/dist/factories/log-writer.d.ts.map +1 -0
  104. package/dist/factories/log-writer.js +45 -0
  105. package/dist/factories/log-writer.js.map +1 -0
  106. package/dist/factories/permission-handler.d.ts +3 -0
  107. package/dist/factories/permission-handler.d.ts.map +1 -0
  108. package/dist/factories/permission-handler.js +6 -0
  109. package/dist/factories/permission-handler.js.map +1 -0
  110. package/dist/factories/skills-manager.d.ts +3 -0
  111. package/dist/factories/skills-manager.d.ts.map +1 -0
  112. package/dist/factories/skills-manager.js +10 -0
  113. package/dist/factories/skills-manager.js.map +1 -0
  114. package/dist/factories/speech.d.ts +3 -0
  115. package/dist/factories/speech.d.ts.map +1 -0
  116. package/dist/factories/speech.js +6 -0
  117. package/dist/factories/speech.js.map +1 -0
  118. package/dist/factories/storage.d.ts +4 -0
  119. package/dist/factories/storage.d.ts.map +1 -0
  120. package/dist/factories/storage.js +192 -0
  121. package/dist/factories/storage.js.map +1 -0
  122. package/dist/factories/task-manager.d.ts +4 -0
  123. package/dist/factories/task-manager.d.ts.map +1 -0
  124. package/dist/factories/task-manager.js +61 -0
  125. package/dist/factories/task-manager.js.map +1 -0
  126. package/dist/factories/thought-stream.d.ts +3 -0
  127. package/dist/factories/thought-stream.d.ts.map +1 -0
  128. package/dist/factories/thought-stream.js +6 -0
  129. package/dist/factories/thought-stream.js.map +1 -0
  130. package/dist/index.d.ts +66 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +46 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/internal/classes/CompletionEnforcer.d.ts +27 -0
  135. package/dist/internal/classes/CompletionEnforcer.d.ts.map +1 -0
  136. package/dist/internal/classes/CompletionEnforcer.js +109 -0
  137. package/dist/internal/classes/CompletionEnforcer.js.map +1 -0
  138. package/dist/internal/classes/LogCollector.d.ts +28 -0
  139. package/dist/internal/classes/LogCollector.d.ts.map +1 -0
  140. package/dist/internal/classes/LogCollector.js +100 -0
  141. package/dist/internal/classes/LogCollector.js.map +1 -0
  142. package/dist/internal/classes/LogFileWriter.d.ts +21 -0
  143. package/dist/internal/classes/LogFileWriter.d.ts.map +1 -0
  144. package/dist/internal/classes/LogFileWriter.js +140 -0
  145. package/dist/internal/classes/LogFileWriter.js.map +1 -0
  146. package/dist/internal/classes/OpenCodeAdapter.d.ts +94 -0
  147. package/dist/internal/classes/OpenCodeAdapter.d.ts.map +1 -0
  148. package/dist/internal/classes/OpenCodeAdapter.js +653 -0
  149. package/dist/internal/classes/OpenCodeAdapter.js.map +1 -0
  150. package/dist/internal/classes/OpenCodeLogWatcher.d.ts +36 -0
  151. package/dist/internal/classes/OpenCodeLogWatcher.d.ts.map +1 -0
  152. package/dist/internal/classes/OpenCodeLogWatcher.js +257 -0
  153. package/dist/internal/classes/OpenCodeLogWatcher.js.map +1 -0
  154. package/dist/internal/classes/PermissionRequestHandler.d.ts +57 -0
  155. package/dist/internal/classes/PermissionRequestHandler.d.ts.map +1 -0
  156. package/dist/internal/classes/PermissionRequestHandler.js +132 -0
  157. package/dist/internal/classes/PermissionRequestHandler.js.map +1 -0
  158. package/dist/internal/classes/SecureStorage.d.ts +44 -0
  159. package/dist/internal/classes/SecureStorage.d.ts.map +1 -0
  160. package/dist/internal/classes/SecureStorage.js +231 -0
  161. package/dist/internal/classes/SecureStorage.js.map +1 -0
  162. package/dist/internal/classes/SkillsManager.d.ts +33 -0
  163. package/dist/internal/classes/SkillsManager.d.ts.map +1 -0
  164. package/dist/internal/classes/SkillsManager.js +340 -0
  165. package/dist/internal/classes/SkillsManager.js.map +1 -0
  166. package/dist/internal/classes/SpeechService.d.ts +30 -0
  167. package/dist/internal/classes/SpeechService.d.ts.map +1 -0
  168. package/dist/internal/classes/SpeechService.js +216 -0
  169. package/dist/internal/classes/SpeechService.js.map +1 -0
  170. package/dist/internal/classes/StreamParser.d.ts +18 -0
  171. package/dist/internal/classes/StreamParser.d.ts.map +1 -0
  172. package/dist/internal/classes/StreamParser.js +117 -0
  173. package/dist/internal/classes/StreamParser.js.map +1 -0
  174. package/dist/internal/classes/TaskManager.d.ts +72 -0
  175. package/dist/internal/classes/TaskManager.d.ts.map +1 -0
  176. package/dist/internal/classes/TaskManager.js +283 -0
  177. package/dist/internal/classes/TaskManager.js.map +1 -0
  178. package/dist/internal/classes/ThoughtStreamHandler.d.ts +15 -0
  179. package/dist/internal/classes/ThoughtStreamHandler.d.ts.map +1 -0
  180. package/dist/internal/classes/ThoughtStreamHandler.js +60 -0
  181. package/dist/internal/classes/ThoughtStreamHandler.js.map +1 -0
  182. package/dist/opencode/adapter.d.ts +93 -0
  183. package/dist/opencode/adapter.d.ts.map +1 -0
  184. package/dist/opencode/adapter.js +650 -0
  185. package/dist/opencode/adapter.js.map +1 -0
  186. package/dist/opencode/auth.d.ts +12 -0
  187. package/dist/opencode/auth.d.ts.map +1 -0
  188. package/dist/opencode/auth.js +65 -0
  189. package/dist/opencode/auth.js.map +1 -0
  190. package/dist/opencode/cli-resolver.d.ts +5 -0
  191. package/dist/opencode/cli-resolver.d.ts.map +1 -0
  192. package/dist/opencode/cli-resolver.js +148 -0
  193. package/dist/opencode/cli-resolver.js.map +1 -0
  194. package/dist/opencode/completion/completion-enforcer.d.ts +27 -0
  195. package/dist/opencode/completion/completion-enforcer.d.ts.map +1 -0
  196. package/dist/opencode/completion/completion-enforcer.js +109 -0
  197. package/dist/opencode/completion/completion-enforcer.js.map +1 -0
  198. package/dist/opencode/completion/completion-state.d.ts +36 -0
  199. package/dist/opencode/completion/completion-state.d.ts.map +1 -0
  200. package/dist/opencode/completion/completion-state.js +97 -0
  201. package/dist/opencode/completion/completion-state.js.map +1 -0
  202. package/dist/opencode/completion/index.d.ts +6 -0
  203. package/dist/opencode/completion/index.d.ts.map +1 -0
  204. package/dist/opencode/completion/index.js +4 -0
  205. package/dist/opencode/completion/index.js.map +1 -0
  206. package/dist/opencode/completion/prompts.d.ts +4 -0
  207. package/dist/opencode/completion/prompts.d.ts.map +1 -0
  208. package/dist/opencode/completion/prompts.js +58 -0
  209. package/dist/opencode/completion/prompts.js.map +1 -0
  210. package/dist/opencode/config-builder.d.ts +61 -0
  211. package/dist/opencode/config-builder.d.ts.map +1 -0
  212. package/dist/opencode/config-builder.js +395 -0
  213. package/dist/opencode/config-builder.js.map +1 -0
  214. package/dist/opencode/config-generator.d.ts +86 -0
  215. package/dist/opencode/config-generator.d.ts.map +1 -0
  216. package/dist/opencode/config-generator.js +407 -0
  217. package/dist/opencode/config-generator.js.map +1 -0
  218. package/dist/opencode/environment.d.ts +46 -0
  219. package/dist/opencode/environment.d.ts.map +1 -0
  220. package/dist/opencode/environment.js +102 -0
  221. package/dist/opencode/environment.js.map +1 -0
  222. package/dist/opencode/index.d.ts +23 -0
  223. package/dist/opencode/index.d.ts.map +1 -0
  224. package/dist/opencode/index.js +13 -0
  225. package/dist/opencode/index.js.map +1 -0
  226. package/dist/opencode/log-watcher.d.ts +36 -0
  227. package/dist/opencode/log-watcher.d.ts.map +1 -0
  228. package/dist/opencode/log-watcher.js +257 -0
  229. package/dist/opencode/log-watcher.js.map +1 -0
  230. package/dist/opencode/message-processor.d.ts +69 -0
  231. package/dist/opencode/message-processor.d.ts.map +1 -0
  232. package/dist/opencode/message-processor.js +193 -0
  233. package/dist/opencode/message-processor.js.map +1 -0
  234. package/dist/opencode/proxies/azure-foundry-proxy.d.ts +10 -0
  235. package/dist/opencode/proxies/azure-foundry-proxy.d.ts.map +1 -0
  236. package/dist/opencode/proxies/azure-foundry-proxy.js +216 -0
  237. package/dist/opencode/proxies/azure-foundry-proxy.js.map +1 -0
  238. package/dist/opencode/proxies/azure-token-manager.d.ts +11 -0
  239. package/dist/opencode/proxies/azure-token-manager.d.ts.map +1 -0
  240. package/dist/opencode/proxies/azure-token-manager.js +58 -0
  241. package/dist/opencode/proxies/azure-token-manager.js.map +1 -0
  242. package/dist/opencode/proxies/index.d.ts +6 -0
  243. package/dist/opencode/proxies/index.d.ts.map +1 -0
  244. package/dist/opencode/proxies/index.js +4 -0
  245. package/dist/opencode/proxies/index.js.map +1 -0
  246. package/dist/opencode/proxies/moonshot-proxy.d.ts +10 -0
  247. package/dist/opencode/proxies/moonshot-proxy.d.ts.map +1 -0
  248. package/dist/opencode/proxies/moonshot-proxy.js +416 -0
  249. package/dist/opencode/proxies/moonshot-proxy.js.map +1 -0
  250. package/dist/opencode/stream-parser.d.ts +18 -0
  251. package/dist/opencode/stream-parser.d.ts.map +1 -0
  252. package/dist/opencode/stream-parser.js +117 -0
  253. package/dist/opencode/stream-parser.js.map +1 -0
  254. package/dist/opencode/task-manager.d.ts +72 -0
  255. package/dist/opencode/task-manager.d.ts.map +1 -0
  256. package/dist/opencode/task-manager.js +283 -0
  257. package/dist/opencode/task-manager.js.map +1 -0
  258. package/dist/providers/azure-foundry.d.ts +48 -0
  259. package/dist/providers/azure-foundry.d.ts.map +1 -0
  260. package/dist/providers/azure-foundry.js +193 -0
  261. package/dist/providers/azure-foundry.js.map +1 -0
  262. package/dist/providers/bedrock.d.ts +34 -0
  263. package/dist/providers/bedrock.d.ts.map +1 -0
  264. package/dist/providers/bedrock.js +162 -0
  265. package/dist/providers/bedrock.js.map +1 -0
  266. package/dist/providers/index.d.ts +10 -0
  267. package/dist/providers/index.d.ts.map +1 -0
  268. package/dist/providers/index.js +10 -0
  269. package/dist/providers/index.js.map +1 -0
  270. package/dist/providers/litellm.d.ts +28 -0
  271. package/dist/providers/litellm.d.ts.map +1 -0
  272. package/dist/providers/litellm.js +110 -0
  273. package/dist/providers/litellm.js.map +1 -0
  274. package/dist/providers/lmstudio.d.ts +58 -0
  275. package/dist/providers/lmstudio.d.ts.map +1 -0
  276. package/dist/providers/lmstudio.js +153 -0
  277. package/dist/providers/lmstudio.js.map +1 -0
  278. package/dist/providers/models.d.ts +10 -0
  279. package/dist/providers/models.d.ts.map +1 -0
  280. package/dist/providers/models.js +35 -0
  281. package/dist/providers/models.js.map +1 -0
  282. package/dist/providers/ollama.d.ts +31 -0
  283. package/dist/providers/ollama.d.ts.map +1 -0
  284. package/dist/providers/ollama.js +56 -0
  285. package/dist/providers/ollama.js.map +1 -0
  286. package/dist/providers/openrouter.d.ts +20 -0
  287. package/dist/providers/openrouter.d.ts.map +1 -0
  288. package/dist/providers/openrouter.js +49 -0
  289. package/dist/providers/openrouter.js.map +1 -0
  290. package/dist/providers/tool-support-testing.d.ts +42 -0
  291. package/dist/providers/tool-support-testing.d.ts.map +1 -0
  292. package/dist/providers/tool-support-testing.js +114 -0
  293. package/dist/providers/tool-support-testing.js.map +1 -0
  294. package/dist/providers/validation.d.ts +13 -0
  295. package/dist/providers/validation.d.ts.map +1 -0
  296. package/dist/providers/validation.js +136 -0
  297. package/dist/providers/validation.js.map +1 -0
  298. package/dist/services/index.d.ts +5 -0
  299. package/dist/services/index.d.ts.map +1 -0
  300. package/dist/services/index.js +5 -0
  301. package/dist/services/index.js.map +1 -0
  302. package/dist/services/permission-handler.d.ts +145 -0
  303. package/dist/services/permission-handler.d.ts.map +1 -0
  304. package/dist/services/permission-handler.js +207 -0
  305. package/dist/services/permission-handler.js.map +1 -0
  306. package/dist/services/speech.d.ts +63 -0
  307. package/dist/services/speech.d.ts.map +1 -0
  308. package/dist/services/speech.js +253 -0
  309. package/dist/services/speech.js.map +1 -0
  310. package/dist/services/summarizer.d.ts +19 -0
  311. package/dist/services/summarizer.d.ts.map +1 -0
  312. package/dist/services/summarizer.js +177 -0
  313. package/dist/services/summarizer.js.map +1 -0
  314. package/dist/services/thought-stream-handler.d.ts +54 -0
  315. package/dist/services/thought-stream-handler.d.ts.map +1 -0
  316. package/dist/services/thought-stream-handler.js +107 -0
  317. package/dist/services/thought-stream-handler.js.map +1 -0
  318. package/dist/skills/index.d.ts +2 -0
  319. package/dist/skills/index.d.ts.map +1 -0
  320. package/dist/skills/index.js +2 -0
  321. package/dist/skills/index.js.map +1 -0
  322. package/dist/skills/skills-manager.d.ts +33 -0
  323. package/dist/skills/skills-manager.d.ts.map +1 -0
  324. package/dist/skills/skills-manager.js +340 -0
  325. package/dist/skills/skills-manager.js.map +1 -0
  326. package/dist/storage/database.d.ts +14 -0
  327. package/dist/storage/database.d.ts.map +1 -0
  328. package/dist/storage/database.js +72 -0
  329. package/dist/storage/database.js.map +1 -0
  330. package/dist/storage/index.d.ts +6 -0
  331. package/dist/storage/index.d.ts.map +1 -0
  332. package/dist/storage/index.js +6 -0
  333. package/dist/storage/index.js.map +1 -0
  334. package/dist/storage/migrations/errors.d.ts +17 -0
  335. package/dist/storage/migrations/errors.d.ts.map +1 -0
  336. package/dist/storage/migrations/errors.js +27 -0
  337. package/dist/storage/migrations/errors.js.map +1 -0
  338. package/dist/storage/migrations/index.d.ts +13 -0
  339. package/dist/storage/migrations/index.d.ts.map +1 -0
  340. package/dist/storage/migrations/index.js +69 -0
  341. package/dist/storage/migrations/index.js.map +1 -0
  342. package/dist/storage/migrations/v001-initial.d.ts +3 -0
  343. package/dist/storage/migrations/v001-initial.d.ts.map +1 -0
  344. package/dist/storage/migrations/v001-initial.js +77 -0
  345. package/dist/storage/migrations/v001-initial.js.map +1 -0
  346. package/dist/storage/migrations/v002-azure-foundry.d.ts +3 -0
  347. package/dist/storage/migrations/v002-azure-foundry.d.ts.map +1 -0
  348. package/dist/storage/migrations/v002-azure-foundry.js +18 -0
  349. package/dist/storage/migrations/v002-azure-foundry.js.map +1 -0
  350. package/dist/storage/migrations/v003-lmstudio.d.ts +3 -0
  351. package/dist/storage/migrations/v003-lmstudio.d.ts.map +1 -0
  352. package/dist/storage/migrations/v003-lmstudio.js +18 -0
  353. package/dist/storage/migrations/v003-lmstudio.js.map +1 -0
  354. package/dist/storage/migrations/v004-openai-base-url.d.ts +3 -0
  355. package/dist/storage/migrations/v004-openai-base-url.d.ts.map +1 -0
  356. package/dist/storage/migrations/v004-openai-base-url.js +9 -0
  357. package/dist/storage/migrations/v004-openai-base-url.js.map +1 -0
  358. package/dist/storage/migrations/v005-task-todos.d.ts +3 -0
  359. package/dist/storage/migrations/v005-task-todos.d.ts.map +1 -0
  360. package/dist/storage/migrations/v005-task-todos.js +19 -0
  361. package/dist/storage/migrations/v005-task-todos.js.map +1 -0
  362. package/dist/storage/migrations/v006-skills.d.ts +3 -0
  363. package/dist/storage/migrations/v006-skills.d.ts.map +1 -0
  364. package/dist/storage/migrations/v006-skills.js +23 -0
  365. package/dist/storage/migrations/v006-skills.js.map +1 -0
  366. package/dist/storage/repositories/appSettings.d.ts +30 -0
  367. package/dist/storage/repositories/appSettings.d.ts.map +1 -0
  368. package/dist/storage/repositories/appSettings.js +130 -0
  369. package/dist/storage/repositories/appSettings.js.map +1 -0
  370. package/dist/storage/repositories/index.d.ts +5 -0
  371. package/dist/storage/repositories/index.d.ts.map +1 -0
  372. package/dist/storage/repositories/index.js +5 -0
  373. package/dist/storage/repositories/index.js.map +1 -0
  374. package/dist/storage/repositories/providerSettings.d.ts +19 -0
  375. package/dist/storage/repositories/providerSettings.d.ts.map +1 -0
  376. package/dist/storage/repositories/providerSettings.js +114 -0
  377. package/dist/storage/repositories/providerSettings.js.map +1 -0
  378. package/dist/storage/repositories/skills.d.ts +9 -0
  379. package/dist/storage/repositories/skills.d.ts.map +1 -0
  380. package/dist/storage/repositories/skills.js +63 -0
  381. package/dist/storage/repositories/skills.js.map +1 -0
  382. package/dist/storage/repositories/taskHistory.d.ts +29 -0
  383. package/dist/storage/repositories/taskHistory.d.ts.map +1 -0
  384. package/dist/storage/repositories/taskHistory.js +159 -0
  385. package/dist/storage/repositories/taskHistory.js.map +1 -0
  386. package/dist/storage/secure-storage.d.ts +44 -0
  387. package/dist/storage/secure-storage.d.ts.map +1 -0
  388. package/dist/storage/secure-storage.js +227 -0
  389. package/dist/storage/secure-storage.js.map +1 -0
  390. package/dist/types/index.d.ts +8 -0
  391. package/dist/types/index.d.ts.map +1 -0
  392. package/dist/types/index.js +2 -0
  393. package/dist/types/index.js.map +1 -0
  394. package/dist/types/log-writer.d.ts +26 -0
  395. package/dist/types/log-writer.d.ts.map +1 -0
  396. package/dist/types/log-writer.js +2 -0
  397. package/dist/types/log-writer.js.map +1 -0
  398. package/dist/types/permission-handler.d.ts +51 -0
  399. package/dist/types/permission-handler.d.ts.map +1 -0
  400. package/dist/types/permission-handler.js +2 -0
  401. package/dist/types/permission-handler.js.map +1 -0
  402. package/dist/types/skills-manager.d.ts +25 -0
  403. package/dist/types/skills-manager.d.ts.map +1 -0
  404. package/dist/types/skills-manager.js +2 -0
  405. package/dist/types/skills-manager.js.map +1 -0
  406. package/dist/types/speech.d.ts +32 -0
  407. package/dist/types/speech.d.ts.map +1 -0
  408. package/dist/types/speech.js +2 -0
  409. package/dist/types/speech.js.map +1 -0
  410. package/dist/types/storage.d.ts +95 -0
  411. package/dist/types/storage.d.ts.map +1 -0
  412. package/dist/types/storage.js +2 -0
  413. package/dist/types/storage.js.map +1 -0
  414. package/dist/types/task-manager.d.ts +69 -0
  415. package/dist/types/task-manager.d.ts.map +1 -0
  416. package/dist/types/task-manager.js +2 -0
  417. package/dist/types/task-manager.js.map +1 -0
  418. package/dist/types/thought-stream.d.ts +28 -0
  419. package/dist/types/thought-stream.d.ts.map +1 -0
  420. package/dist/types/thought-stream.js +2 -0
  421. package/dist/types/thought-stream.js.map +1 -0
  422. package/dist/types.d.ts +43 -0
  423. package/dist/types.d.ts.map +1 -0
  424. package/dist/types.js +2 -0
  425. package/dist/types.js.map +1 -0
  426. package/dist/utils/bundled-node.d.ts +11 -0
  427. package/dist/utils/bundled-node.d.ts.map +1 -0
  428. package/dist/utils/bundled-node.js +73 -0
  429. package/dist/utils/bundled-node.js.map +1 -0
  430. package/dist/utils/fetch.d.ts +2 -0
  431. package/dist/utils/fetch.d.ts.map +1 -0
  432. package/dist/utils/fetch.js +15 -0
  433. package/dist/utils/fetch.js.map +1 -0
  434. package/dist/utils/index.d.ts +14 -0
  435. package/dist/utils/index.d.ts.map +1 -0
  436. package/dist/utils/index.js +14 -0
  437. package/dist/utils/index.js.map +1 -0
  438. package/dist/utils/json.d.ts +10 -0
  439. package/dist/utils/json.d.ts.map +1 -0
  440. package/dist/utils/json.js +17 -0
  441. package/dist/utils/json.js.map +1 -0
  442. package/dist/utils/log-collector.d.ts +20 -0
  443. package/dist/utils/log-collector.d.ts.map +1 -0
  444. package/dist/utils/log-collector.js +100 -0
  445. package/dist/utils/log-collector.js.map +1 -0
  446. package/dist/utils/log-file-writer.d.ts +26 -0
  447. package/dist/utils/log-file-writer.d.ts.map +1 -0
  448. package/dist/utils/log-file-writer.js +144 -0
  449. package/dist/utils/log-file-writer.js.map +1 -0
  450. package/dist/utils/logging.d.ts +26 -0
  451. package/dist/utils/logging.d.ts.map +1 -0
  452. package/dist/utils/logging.js +91 -0
  453. package/dist/utils/logging.js.map +1 -0
  454. package/dist/utils/network.d.ts +14 -0
  455. package/dist/utils/network.d.ts.map +1 -0
  456. package/dist/utils/network.js +38 -0
  457. package/dist/utils/network.js.map +1 -0
  458. package/dist/utils/paths.d.ts +9 -0
  459. package/dist/utils/paths.d.ts.map +1 -0
  460. package/dist/utils/paths.js +47 -0
  461. package/dist/utils/paths.js.map +1 -0
  462. package/dist/utils/redact.d.ts +2 -0
  463. package/dist/utils/redact.d.ts.map +1 -0
  464. package/dist/utils/redact.js +20 -0
  465. package/dist/utils/redact.js.map +1 -0
  466. package/dist/utils/sanitize.d.ts +3 -0
  467. package/dist/utils/sanitize.d.ts.map +1 -0
  468. package/dist/utils/sanitize.js +21 -0
  469. package/dist/utils/sanitize.js.map +1 -0
  470. package/dist/utils/shell.d.ts +26 -0
  471. package/dist/utils/shell.d.ts.map +1 -0
  472. package/dist/utils/shell.js +60 -0
  473. package/dist/utils/shell.js.map +1 -0
  474. package/dist/utils/system-path.d.ts +3 -0
  475. package/dist/utils/system-path.d.ts.map +1 -0
  476. package/dist/utils/system-path.js +142 -0
  477. package/dist/utils/system-path.js.map +1 -0
  478. package/dist/utils/task-status.d.ts +7 -0
  479. package/dist/utils/task-status.d.ts.map +1 -0
  480. package/dist/utils/task-status.js +12 -0
  481. package/dist/utils/task-status.js.map +1 -0
  482. package/dist/utils/task-validation.d.ts +10 -0
  483. package/dist/utils/task-validation.d.ts.map +1 -0
  484. package/dist/utils/task-validation.js +35 -0
  485. package/dist/utils/task-validation.js.map +1 -0
  486. package/dist/utils/url.d.ts +3 -0
  487. package/dist/utils/url.d.ts.map +1 -0
  488. package/dist/utils/url.js +19 -0
  489. package/dist/utils/url.js.map +1 -0
  490. package/mcp-tools/ask-user-question/SKILL.md +133 -0
  491. package/mcp-tools/ask-user-question/dist/index.mjs +20794 -0
  492. package/mcp-tools/ask-user-question/package.json +17 -0
  493. package/mcp-tools/ask-user-question/src/index.ts +183 -0
  494. package/mcp-tools/ask-user-question/tsconfig.json +12 -0
  495. package/mcp-tools/complete-task/SKILL.md +17 -0
  496. package/mcp-tools/complete-task/dist/index.mjs +20722 -0
  497. package/mcp-tools/complete-task/package.json +12 -0
  498. package/mcp-tools/complete-task/src/index.ts +92 -0
  499. package/mcp-tools/dev-browser/SKILL.md +384 -0
  500. package/mcp-tools/dev-browser/dist/start-relay.mjs +6878 -0
  501. package/mcp-tools/dev-browser/dist/start-server.mjs +23369 -0
  502. package/mcp-tools/dev-browser/package.json +31 -0
  503. package/mcp-tools/dev-browser/src/index.ts +290 -0
  504. package/mcp-tools/dev-browser/src/relay.ts +652 -0
  505. package/mcp-tools/dev-browser/src/types.ts +31 -0
  506. package/mcp-tools/dev-browser/tsconfig.json +36 -0
  507. package/mcp-tools/dev-browser-mcp/README.md +42 -0
  508. package/mcp-tools/dev-browser-mcp/dist/index.mjs +24398 -0
  509. package/mcp-tools/dev-browser-mcp/package.json +17 -0
  510. package/mcp-tools/dev-browser-mcp/src/index.ts +3940 -0
  511. package/mcp-tools/dev-browser-mcp/src/snapshot/compactor.test.ts +86 -0
  512. package/mcp-tools/dev-browser-mcp/src/snapshot/compactor.ts +31 -0
  513. package/mcp-tools/dev-browser-mcp/src/snapshot/differ.test.ts +178 -0
  514. package/mcp-tools/dev-browser-mcp/src/snapshot/differ.ts +167 -0
  515. package/mcp-tools/dev-browser-mcp/src/snapshot/index.ts +19 -0
  516. package/mcp-tools/dev-browser-mcp/src/snapshot/manager.test.ts +247 -0
  517. package/mcp-tools/dev-browser-mcp/src/snapshot/manager.ts +131 -0
  518. package/mcp-tools/dev-browser-mcp/src/snapshot/parser.test.ts +94 -0
  519. package/mcp-tools/dev-browser-mcp/src/snapshot/parser.ts +81 -0
  520. package/mcp-tools/dev-browser-mcp/src/snapshot/priority.test.ts +104 -0
  521. package/mcp-tools/dev-browser-mcp/src/snapshot/priority.ts +84 -0
  522. package/mcp-tools/dev-browser-mcp/src/snapshot/tokens.test.ts +64 -0
  523. package/mcp-tools/dev-browser-mcp/src/snapshot/tokens.ts +36 -0
  524. package/mcp-tools/dev-browser-mcp/src/snapshot/types.ts +89 -0
  525. package/mcp-tools/dev-browser-mcp/tsconfig.json +15 -0
  526. package/mcp-tools/file-permission/dist/index.mjs +20752 -0
  527. package/mcp-tools/file-permission/package.json +17 -0
  528. package/mcp-tools/file-permission/src/index.ts +125 -0
  529. package/mcp-tools/file-permission/tsconfig.json +17 -0
  530. package/mcp-tools/package.json +13 -0
  531. package/mcp-tools/report-checkpoint/src/index.ts +127 -0
  532. package/mcp-tools/report-checkpoint/tsconfig.json +12 -0
  533. package/mcp-tools/report-thought/src/index.ts +109 -0
  534. package/mcp-tools/report-thought/tsconfig.json +12 -0
  535. package/mcp-tools/safe-file-deletion/SKILL.md +50 -0
  536. package/mcp-tools/start-task/dist/index.mjs +20719 -0
  537. package/mcp-tools/start-task/package.json +12 -0
  538. package/mcp-tools/start-task/src/index.ts +86 -0
  539. package/package.json +65 -0
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Permission Request Handler
3
+ *
4
+ * Reusable logic for handling permission and question requests.
5
+ * This module manages request state, timeouts, and validation.
6
+ * The Electron-specific parts (IPC, HTTP servers) remain in the desktop app.
7
+ */
8
+ import type { PermissionRequest } from '../common/types/permission.js';
9
+ /**
10
+ * Generic pending request interface
11
+ */
12
+ export interface PendingRequest<T> {
13
+ resolve: (result: T) => void;
14
+ reject: (error: Error) => void;
15
+ timeoutId: NodeJS.Timeout;
16
+ }
17
+ /**
18
+ * Validation result for permission request data
19
+ */
20
+ export interface PermissionValidationResult {
21
+ valid: boolean;
22
+ error?: string;
23
+ }
24
+ /**
25
+ * Raw file permission request data (from HTTP request body)
26
+ */
27
+ export interface FilePermissionRequestData {
28
+ operation?: string;
29
+ filePath?: string;
30
+ filePaths?: string[];
31
+ targetPath?: string;
32
+ contentPreview?: string;
33
+ }
34
+ /**
35
+ * Raw question request data (from HTTP request body)
36
+ */
37
+ export interface QuestionRequestData {
38
+ question?: string;
39
+ header?: string;
40
+ options?: Array<{
41
+ label: string;
42
+ description?: string;
43
+ }>;
44
+ multiSelect?: boolean;
45
+ }
46
+ /**
47
+ * Question response data
48
+ */
49
+ export interface QuestionResponseData {
50
+ selectedOptions?: string[];
51
+ customText?: string;
52
+ denied?: boolean;
53
+ }
54
+ /**
55
+ * Handles permission and question request lifecycle.
56
+ * Manages pending requests, timeouts, and validation.
57
+ */
58
+ export declare class PermissionRequestHandler {
59
+ private pendingPermissions;
60
+ private pendingQuestions;
61
+ private defaultTimeoutMs;
62
+ constructor(timeoutMs?: number);
63
+ /**
64
+ * Create a new permission request and wait for response
65
+ * @param timeoutMs - Optional timeout override
66
+ * @returns Promise that resolves when user responds
67
+ */
68
+ createPermissionRequest(timeoutMs?: number): {
69
+ requestId: string;
70
+ promise: Promise<boolean>;
71
+ };
72
+ /**
73
+ * Create a new question request and wait for response
74
+ * @param timeoutMs - Optional timeout override
75
+ * @returns Promise that resolves when user responds
76
+ */
77
+ createQuestionRequest(timeoutMs?: number): {
78
+ requestId: string;
79
+ promise: Promise<QuestionResponseData>;
80
+ };
81
+ /**
82
+ * Resolve a pending permission request
83
+ * @param requestId - The request ID to resolve
84
+ * @param allowed - Whether permission was granted
85
+ * @returns true if request was found and resolved, false otherwise
86
+ */
87
+ resolvePermissionRequest(requestId: string, allowed: boolean): boolean;
88
+ /**
89
+ * Resolve a pending question request
90
+ * @param requestId - The request ID to resolve
91
+ * @param response - The user's response
92
+ * @returns true if request was found and resolved, false otherwise
93
+ */
94
+ resolveQuestionRequest(requestId: string, response: QuestionResponseData): boolean;
95
+ /**
96
+ * Validate file permission request data
97
+ * @param data - Raw request data to validate
98
+ * @returns Validation result with error message if invalid
99
+ */
100
+ validateFilePermissionRequest(data: unknown): PermissionValidationResult;
101
+ /**
102
+ * Validate question request data
103
+ * @param data - Raw request data to validate
104
+ * @returns Validation result with error message if invalid
105
+ */
106
+ validateQuestionRequest(data: unknown): PermissionValidationResult;
107
+ /**
108
+ * Build a PermissionRequest object for file operations
109
+ * @param requestId - The request ID
110
+ * @param taskId - The associated task ID
111
+ * @param data - The validated request data
112
+ * @returns PermissionRequest object ready to send to the UI
113
+ */
114
+ buildFilePermissionRequest(requestId: string, taskId: string, data: FilePermissionRequestData): PermissionRequest;
115
+ /**
116
+ * Build a PermissionRequest object for questions
117
+ * @param requestId - The request ID
118
+ * @param taskId - The associated task ID
119
+ * @param data - The validated request data
120
+ * @returns PermissionRequest object ready to send to the UI
121
+ */
122
+ buildQuestionRequest(requestId: string, taskId: string, data: QuestionRequestData): PermissionRequest;
123
+ /**
124
+ * Check if there are any pending permission requests
125
+ */
126
+ hasPendingPermissions(): boolean;
127
+ /**
128
+ * Check if there are any pending question requests
129
+ */
130
+ hasPendingQuestions(): boolean;
131
+ /**
132
+ * Get the count of pending permission requests
133
+ */
134
+ getPendingPermissionCount(): number;
135
+ /**
136
+ * Get the count of pending question requests
137
+ */
138
+ getPendingQuestionCount(): number;
139
+ /**
140
+ * Clear all pending requests (e.g., on shutdown)
141
+ * Rejects all pending promises with a cancellation error
142
+ */
143
+ clearAll(): void;
144
+ }
145
+ //# sourceMappingURL=permission-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-handler.d.ts","sourceRoot":"","sources":["../../src/services/permission-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAiB,iBAAiB,EAAoB,MAAM,+BAA+B,CAAC;AAExG;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,gBAAgB,CAA2D;IACnF,OAAO,CAAC,gBAAgB,CAAS;gBAErB,SAAS,GAAE,MAAsC;IAI7D;;;;OAIG;IACH,uBAAuB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE;IAgB7F;;;;OAIG;IACH,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;KAAE;IAgBxG;;;;;OAKG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAYtE;;;;;OAKG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO;IAYlF;;;;OAIG;IACH,6BAA6B,CAAC,IAAI,EAAE,OAAO,GAAG,0BAA0B;IA2BxE;;;;OAIG;IACH,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,0BAA0B;IAclE;;;;;;OAMG;IACH,0BAA0B,CACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,yBAAyB,GAC9B,iBAAiB;IAcpB;;;;;;OAMG;IACH,oBAAoB,CAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,mBAAmB,GACxB,iBAAiB;IAapB;;OAEG;IACH,qBAAqB,IAAI,OAAO;IAIhC;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,yBAAyB,IAAI,MAAM;IAInC;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAIjC;;;OAGG;IACH,QAAQ,IAAI,IAAI;CAajB"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Permission Request Handler
3
+ *
4
+ * Reusable logic for handling permission and question requests.
5
+ * This module manages request state, timeouts, and validation.
6
+ * The Electron-specific parts (IPC, HTTP servers) remain in the desktop app.
7
+ */
8
+ import { FILE_OPERATIONS, PERMISSION_REQUEST_TIMEOUT_MS, createFilePermissionRequestId, createQuestionRequestId, } from '../common/index.js';
9
+ /**
10
+ * Handles permission and question request lifecycle.
11
+ * Manages pending requests, timeouts, and validation.
12
+ */
13
+ export class PermissionRequestHandler {
14
+ pendingPermissions = new Map();
15
+ pendingQuestions = new Map();
16
+ defaultTimeoutMs;
17
+ constructor(timeoutMs = PERMISSION_REQUEST_TIMEOUT_MS) {
18
+ this.defaultTimeoutMs = timeoutMs;
19
+ }
20
+ /**
21
+ * Create a new permission request and wait for response
22
+ * @param timeoutMs - Optional timeout override
23
+ * @returns Promise that resolves when user responds
24
+ */
25
+ createPermissionRequest(timeoutMs) {
26
+ const requestId = createFilePermissionRequestId();
27
+ const timeout = timeoutMs ?? this.defaultTimeoutMs;
28
+ const promise = new Promise((resolve, reject) => {
29
+ const timeoutId = setTimeout(() => {
30
+ this.pendingPermissions.delete(requestId);
31
+ reject(new Error('Permission request timed out'));
32
+ }, timeout);
33
+ this.pendingPermissions.set(requestId, { resolve, reject, timeoutId });
34
+ });
35
+ return { requestId, promise };
36
+ }
37
+ /**
38
+ * Create a new question request and wait for response
39
+ * @param timeoutMs - Optional timeout override
40
+ * @returns Promise that resolves when user responds
41
+ */
42
+ createQuestionRequest(timeoutMs) {
43
+ const requestId = createQuestionRequestId();
44
+ const timeout = timeoutMs ?? this.defaultTimeoutMs;
45
+ const promise = new Promise((resolve, reject) => {
46
+ const timeoutId = setTimeout(() => {
47
+ this.pendingQuestions.delete(requestId);
48
+ reject(new Error('Question request timed out'));
49
+ }, timeout);
50
+ this.pendingQuestions.set(requestId, { resolve, reject, timeoutId });
51
+ });
52
+ return { requestId, promise };
53
+ }
54
+ /**
55
+ * Resolve a pending permission request
56
+ * @param requestId - The request ID to resolve
57
+ * @param allowed - Whether permission was granted
58
+ * @returns true if request was found and resolved, false otherwise
59
+ */
60
+ resolvePermissionRequest(requestId, allowed) {
61
+ const pending = this.pendingPermissions.get(requestId);
62
+ if (!pending) {
63
+ return false;
64
+ }
65
+ clearTimeout(pending.timeoutId);
66
+ pending.resolve(allowed);
67
+ this.pendingPermissions.delete(requestId);
68
+ return true;
69
+ }
70
+ /**
71
+ * Resolve a pending question request
72
+ * @param requestId - The request ID to resolve
73
+ * @param response - The user's response
74
+ * @returns true if request was found and resolved, false otherwise
75
+ */
76
+ resolveQuestionRequest(requestId, response) {
77
+ const pending = this.pendingQuestions.get(requestId);
78
+ if (!pending) {
79
+ return false;
80
+ }
81
+ clearTimeout(pending.timeoutId);
82
+ pending.resolve(response);
83
+ this.pendingQuestions.delete(requestId);
84
+ return true;
85
+ }
86
+ /**
87
+ * Validate file permission request data
88
+ * @param data - Raw request data to validate
89
+ * @returns Validation result with error message if invalid
90
+ */
91
+ validateFilePermissionRequest(data) {
92
+ if (!data || typeof data !== 'object') {
93
+ return { valid: false, error: 'Invalid request data' };
94
+ }
95
+ const requestData = data;
96
+ // Check required fields
97
+ if (!requestData.operation) {
98
+ return { valid: false, error: 'operation is required' };
99
+ }
100
+ if (!requestData.filePath && (!requestData.filePaths || requestData.filePaths.length === 0)) {
101
+ return { valid: false, error: 'operation and either filePath or filePaths are required' };
102
+ }
103
+ // Validate operation type
104
+ if (!FILE_OPERATIONS.includes(requestData.operation)) {
105
+ return {
106
+ valid: false,
107
+ error: `Invalid operation. Must be one of: ${FILE_OPERATIONS.join(', ')}`,
108
+ };
109
+ }
110
+ return { valid: true };
111
+ }
112
+ /**
113
+ * Validate question request data
114
+ * @param data - Raw request data to validate
115
+ * @returns Validation result with error message if invalid
116
+ */
117
+ validateQuestionRequest(data) {
118
+ if (!data || typeof data !== 'object') {
119
+ return { valid: false, error: 'Invalid request data' };
120
+ }
121
+ const requestData = data;
122
+ if (!requestData.question) {
123
+ return { valid: false, error: 'question is required' };
124
+ }
125
+ return { valid: true };
126
+ }
127
+ /**
128
+ * Build a PermissionRequest object for file operations
129
+ * @param requestId - The request ID
130
+ * @param taskId - The associated task ID
131
+ * @param data - The validated request data
132
+ * @returns PermissionRequest object ready to send to the UI
133
+ */
134
+ buildFilePermissionRequest(requestId, taskId, data) {
135
+ return {
136
+ id: requestId,
137
+ taskId,
138
+ type: 'file',
139
+ fileOperation: data.operation,
140
+ filePath: data.filePath,
141
+ filePaths: data.filePaths,
142
+ targetPath: data.targetPath,
143
+ contentPreview: data.contentPreview?.substring(0, 500),
144
+ createdAt: new Date().toISOString(),
145
+ };
146
+ }
147
+ /**
148
+ * Build a PermissionRequest object for questions
149
+ * @param requestId - The request ID
150
+ * @param taskId - The associated task ID
151
+ * @param data - The validated request data
152
+ * @returns PermissionRequest object ready to send to the UI
153
+ */
154
+ buildQuestionRequest(requestId, taskId, data) {
155
+ return {
156
+ id: requestId,
157
+ taskId,
158
+ type: 'question',
159
+ question: data.question,
160
+ header: data.header,
161
+ options: data.options,
162
+ multiSelect: data.multiSelect,
163
+ createdAt: new Date().toISOString(),
164
+ };
165
+ }
166
+ /**
167
+ * Check if there are any pending permission requests
168
+ */
169
+ hasPendingPermissions() {
170
+ return this.pendingPermissions.size > 0;
171
+ }
172
+ /**
173
+ * Check if there are any pending question requests
174
+ */
175
+ hasPendingQuestions() {
176
+ return this.pendingQuestions.size > 0;
177
+ }
178
+ /**
179
+ * Get the count of pending permission requests
180
+ */
181
+ getPendingPermissionCount() {
182
+ return this.pendingPermissions.size;
183
+ }
184
+ /**
185
+ * Get the count of pending question requests
186
+ */
187
+ getPendingQuestionCount() {
188
+ return this.pendingQuestions.size;
189
+ }
190
+ /**
191
+ * Clear all pending requests (e.g., on shutdown)
192
+ * Rejects all pending promises with a cancellation error
193
+ */
194
+ clearAll() {
195
+ for (const [requestId, pending] of this.pendingPermissions) {
196
+ clearTimeout(pending.timeoutId);
197
+ pending.reject(new Error('Request cancelled'));
198
+ }
199
+ this.pendingPermissions.clear();
200
+ for (const [requestId, pending] of this.pendingQuestions) {
201
+ clearTimeout(pending.timeoutId);
202
+ pending.reject(new Error('Request cancelled'));
203
+ }
204
+ this.pendingQuestions.clear();
205
+ }
206
+ }
207
+ //# sourceMappingURL=permission-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-handler.js","sourceRoot":"","sources":["../../src/services/permission-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Speech-to-Text service using ElevenLabs API
3
+ *
4
+ * This service handles:
5
+ * - API key validation
6
+ * - Audio transcription via ElevenLabs STT API
7
+ *
8
+ * The service requires a SecureStorage instance to be provided,
9
+ * allowing it to be used in different environments (Electron, CLI, etc.)
10
+ */
11
+ import type { SecureStorage } from '../storage/secure-storage.js';
12
+ export interface TranscriptionResult {
13
+ text: string;
14
+ confidence?: number;
15
+ duration: number;
16
+ timestamp: number;
17
+ }
18
+ export interface TranscriptionError {
19
+ code: string;
20
+ message: string;
21
+ }
22
+ /**
23
+ * Speech service that uses ElevenLabs API for transcription.
24
+ * Requires a SecureStorage instance for API key management.
25
+ */
26
+ export declare class SpeechService {
27
+ private storage;
28
+ constructor(storage: SecureStorage);
29
+ /**
30
+ * Get the configured ElevenLabs API key
31
+ */
32
+ getElevenLabsApiKey(): string | null;
33
+ /**
34
+ * Check if ElevenLabs is configured
35
+ */
36
+ isElevenLabsConfigured(): boolean;
37
+ /**
38
+ * Validate ElevenLabs API key by making a test request
39
+ */
40
+ validateElevenLabsApiKey(apiKey?: string): Promise<{
41
+ valid: boolean;
42
+ error?: string;
43
+ }>;
44
+ /**
45
+ * Transcribe audio using ElevenLabs Speech-to-Text API
46
+ *
47
+ * @param audioData - Audio data as Buffer (from renderer via IPC)
48
+ * @param mimeType - MIME type of the audio (e.g., 'audio/webm')
49
+ * @returns Transcription result or error
50
+ */
51
+ transcribeAudio(audioData: Buffer, mimeType?: string): Promise<{
52
+ success: true;
53
+ result: TranscriptionResult;
54
+ } | {
55
+ success: false;
56
+ error: TranscriptionError;
57
+ }>;
58
+ }
59
+ /**
60
+ * Create a new SpeechService instance
61
+ */
62
+ export declare function createSpeechService(storage: SecureStorage): SpeechService;
63
+ //# sourceMappingURL=speech.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../../src/services/speech.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAIlC;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAKpC;;OAEG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;OAEG;IACG,wBAAwB,CAC5B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA+C9C;;;;;;OAMG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAqB,GAC9B,OAAO,CACN;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAE,GAC9C;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAChD;CAyLF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAEzE"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Speech-to-Text service using ElevenLabs API
3
+ *
4
+ * This service handles:
5
+ * - API key validation
6
+ * - Audio transcription via ElevenLabs STT API
7
+ *
8
+ * The service requires a SecureStorage instance to be provided,
9
+ * allowing it to be used in different environments (Electron, CLI, etc.)
10
+ */
11
+ import { fetchWithTimeout } from '../utils/fetch.js';
12
+ const ELEVENLABS_API_TIMEOUT_MS = 30000;
13
+ const DEFAULT_ELEVENLABS_STT_MODEL_ID = 'scribe_v2';
14
+ /**
15
+ * Speech service that uses ElevenLabs API for transcription.
16
+ * Requires a SecureStorage instance for API key management.
17
+ */
18
+ export class SpeechService {
19
+ storage;
20
+ constructor(storage) {
21
+ this.storage = storage;
22
+ }
23
+ /**
24
+ * Get the configured ElevenLabs API key
25
+ */
26
+ getElevenLabsApiKey() {
27
+ const key = this.storage.getApiKey('elevenlabs');
28
+ return key && key.trim() ? key : null;
29
+ }
30
+ /**
31
+ * Check if ElevenLabs is configured
32
+ */
33
+ isElevenLabsConfigured() {
34
+ return this.getElevenLabsApiKey() !== null;
35
+ }
36
+ /**
37
+ * Validate ElevenLabs API key by making a test request
38
+ */
39
+ async validateElevenLabsApiKey(apiKey) {
40
+ const key = apiKey || this.getElevenLabsApiKey();
41
+ if (!key || !key.trim()) {
42
+ return { valid: false, error: 'API key is required' };
43
+ }
44
+ try {
45
+ const response = await fetchWithTimeout('https://api.elevenlabs.io/v1/models', {
46
+ method: 'GET',
47
+ headers: {
48
+ 'xi-api-key': key.trim(),
49
+ },
50
+ }, ELEVENLABS_API_TIMEOUT_MS);
51
+ if (response.ok) {
52
+ return { valid: true };
53
+ }
54
+ if (response.status === 401 || response.status === 403) {
55
+ return {
56
+ valid: false,
57
+ error: 'Invalid API key. Please check your ElevenLabs API key.',
58
+ };
59
+ }
60
+ const errorData = await response.json().catch(() => ({}));
61
+ const errorMessage = errorData?.error?.message ||
62
+ `API returned status ${response.status}`;
63
+ return { valid: false, error: `API error: ${errorMessage}` };
64
+ }
65
+ catch (error) {
66
+ if (error instanceof Error && error.name === 'AbortError') {
67
+ return {
68
+ valid: false,
69
+ error: 'Request timed out. Please check your internet connection.',
70
+ };
71
+ }
72
+ const message = error instanceof Error ? error.message : 'Unknown error';
73
+ return { valid: false, error: `Network error: ${message}` };
74
+ }
75
+ }
76
+ /**
77
+ * Transcribe audio using ElevenLabs Speech-to-Text API
78
+ *
79
+ * @param audioData - Audio data as Buffer (from renderer via IPC)
80
+ * @param mimeType - MIME type of the audio (e.g., 'audio/webm')
81
+ * @returns Transcription result or error
82
+ */
83
+ async transcribeAudio(audioData, mimeType = 'audio/webm') {
84
+ const apiKey = this.getElevenLabsApiKey();
85
+ const modelId = process.env.ELEVENLABS_STT_MODEL_ID?.trim() ||
86
+ DEFAULT_ELEVENLABS_STT_MODEL_ID;
87
+ if (!apiKey) {
88
+ return {
89
+ success: false,
90
+ error: {
91
+ code: 'MISSING_API_KEY',
92
+ message: 'ElevenLabs API key is not configured. Please add it in settings.',
93
+ },
94
+ };
95
+ }
96
+ const startTime = Date.now();
97
+ console.log('[ElevenLabs] Starting transcription:', {
98
+ audioSize: audioData.length,
99
+ mimeType,
100
+ modelId,
101
+ });
102
+ try {
103
+ // Create a Blob from the Buffer for FormData
104
+ // Use Uint8Array to ensure proper typing for Blob constructor
105
+ const uint8Array = new Uint8Array(audioData);
106
+ const blob = new Blob([uint8Array], { type: mimeType });
107
+ console.log('[ElevenLabs] Created blob:', {
108
+ blobSize: blob.size,
109
+ blobType: blob.type,
110
+ });
111
+ // Create FormData for multipart upload
112
+ const formData = new FormData();
113
+ formData.append('file', blob, 'audio.webm');
114
+ formData.append('model_id', modelId);
115
+ const response = await fetchWithTimeout('https://api.elevenlabs.io/v1/speech-to-text', {
116
+ method: 'POST',
117
+ headers: {
118
+ 'xi-api-key': apiKey,
119
+ },
120
+ body: formData,
121
+ }, ELEVENLABS_API_TIMEOUT_MS);
122
+ const duration = Date.now() - startTime;
123
+ if (!response.ok) {
124
+ const errorText = await response.text().catch(() => '');
125
+ let errorData = {};
126
+ try {
127
+ errorData = JSON.parse(errorText);
128
+ }
129
+ catch {
130
+ // Not JSON, use raw text
131
+ }
132
+ console.error('[ElevenLabs] API error:', {
133
+ status: response.status,
134
+ statusText: response.statusText,
135
+ errorData: JSON.stringify(errorData, null, 2),
136
+ errorText: errorText.substring(0, 500),
137
+ });
138
+ if (response.status === 401 || response.status === 403) {
139
+ return {
140
+ success: false,
141
+ error: {
142
+ code: 'INVALID_API_KEY',
143
+ message: 'Invalid or expired ElevenLabs API key. Please check your settings.',
144
+ },
145
+ };
146
+ }
147
+ if (response.status === 429) {
148
+ return {
149
+ success: false,
150
+ error: {
151
+ code: 'RATE_LIMIT',
152
+ message: 'Rate limit exceeded. Please wait a moment and try again.',
153
+ },
154
+ };
155
+ }
156
+ // ElevenLabs can return errors in different formats
157
+ // detail can be: string, { message: string }, or other object structures
158
+ const detail = errorData?.detail;
159
+ let errorMessage;
160
+ if (typeof detail === 'string') {
161
+ errorMessage = detail;
162
+ }
163
+ else if (detail && typeof detail === 'object') {
164
+ // detail could be { message: string } or { status: string, message: string } etc.
165
+ const detailObj = detail;
166
+ const detailMessage = detailObj.message ?? detailObj.status;
167
+ if (typeof detailMessage === 'string') {
168
+ errorMessage = detailMessage;
169
+ }
170
+ else if (detailMessage !== undefined) {
171
+ errorMessage = JSON.stringify(detailMessage);
172
+ }
173
+ else {
174
+ errorMessage = JSON.stringify(detail);
175
+ }
176
+ }
177
+ else if (errorData?.error?.message) {
178
+ const nestedMessage = errorData
179
+ .error.message;
180
+ errorMessage =
181
+ typeof nestedMessage === 'string'
182
+ ? nestedMessage
183
+ : JSON.stringify(nestedMessage);
184
+ }
185
+ else if (errorData?.message) {
186
+ const rootMessage = errorData.message;
187
+ errorMessage =
188
+ typeof rootMessage === 'string'
189
+ ? rootMessage
190
+ : JSON.stringify(rootMessage);
191
+ }
192
+ else if (errorText) {
193
+ errorMessage = errorText.substring(0, 200);
194
+ }
195
+ else {
196
+ errorMessage = response.statusText || 'Unknown API error';
197
+ }
198
+ return {
199
+ success: false,
200
+ error: {
201
+ code: 'TRANSCRIPTION_FAILED',
202
+ message: `Transcription failed: ${errorMessage}`,
203
+ },
204
+ };
205
+ }
206
+ const result = (await response.json());
207
+ if (!result.text) {
208
+ return {
209
+ success: false,
210
+ error: {
211
+ code: 'EMPTY_RESULT',
212
+ message: 'No speech was recognized. Please try again.',
213
+ },
214
+ };
215
+ }
216
+ return {
217
+ success: true,
218
+ result: {
219
+ text: result.text.trim(),
220
+ confidence: result.confidence,
221
+ duration,
222
+ timestamp: Date.now(),
223
+ },
224
+ };
225
+ }
226
+ catch (error) {
227
+ if (error instanceof Error && error.name === 'AbortError') {
228
+ return {
229
+ success: false,
230
+ error: {
231
+ code: 'TIMEOUT',
232
+ message: 'Transcription request timed out. Please try again.',
233
+ },
234
+ };
235
+ }
236
+ const message = error instanceof Error ? error.message : 'Unknown error';
237
+ return {
238
+ success: false,
239
+ error: {
240
+ code: 'NETWORK_ERROR',
241
+ message: `Network error during transcription: ${message}`,
242
+ },
243
+ };
244
+ }
245
+ }
246
+ }
247
+ /**
248
+ * Create a new SpeechService instance
249
+ */
250
+ export function createSpeechService(storage) {
251
+ return new SpeechService(storage);
252
+ }
253
+ //# sourceMappingURL=speech.js.map