task-o-matic-core 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 (447) hide show
  1. package/README.md +646 -0
  2. package/dist/index.d.ts +27 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +46 -0
  5. package/dist/lib/ai-service/ai-operations.d.ts +45 -0
  6. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -0
  7. package/dist/lib/ai-service/ai-operations.js +60 -0
  8. package/dist/lib/ai-service/base-operations.d.ts +43 -0
  9. package/dist/lib/ai-service/base-operations.d.ts.map +1 -0
  10. package/dist/lib/ai-service/base-operations.js +119 -0
  11. package/dist/lib/ai-service/documentation-operations.d.ts +18 -0
  12. package/dist/lib/ai-service/documentation-operations.d.ts.map +1 -0
  13. package/dist/lib/ai-service/documentation-operations.js +308 -0
  14. package/dist/lib/ai-service/filesystem-tools.d.ts +69 -0
  15. package/dist/lib/ai-service/filesystem-tools.d.ts.map +1 -0
  16. package/dist/lib/ai-service/filesystem-tools.js +70 -0
  17. package/dist/lib/ai-service/json-parser.d.ts +34 -0
  18. package/dist/lib/ai-service/json-parser.d.ts.map +1 -0
  19. package/dist/lib/ai-service/json-parser.js +177 -0
  20. package/dist/lib/ai-service/mcp-client.d.ts +9 -0
  21. package/dist/lib/ai-service/mcp-client.d.ts.map +1 -0
  22. package/dist/lib/ai-service/mcp-client.js +48 -0
  23. package/dist/lib/ai-service/model-provider.d.ts +12 -0
  24. package/dist/lib/ai-service/model-provider.d.ts.map +1 -0
  25. package/dist/lib/ai-service/model-provider.js +146 -0
  26. package/dist/lib/ai-service/prd-operations.d.ts +25 -0
  27. package/dist/lib/ai-service/prd-operations.d.ts.map +1 -0
  28. package/dist/lib/ai-service/prd-operations.js +592 -0
  29. package/dist/lib/ai-service/research-tools.d.ts +4 -0
  30. package/dist/lib/ai-service/research-tools.d.ts.map +1 -0
  31. package/dist/lib/ai-service/research-tools.js +8 -0
  32. package/dist/lib/ai-service/retry-handler.d.ts +8 -0
  33. package/dist/lib/ai-service/retry-handler.d.ts.map +1 -0
  34. package/dist/lib/ai-service/retry-handler.js +63 -0
  35. package/dist/lib/ai-service/task-operations.d.ts +13 -0
  36. package/dist/lib/ai-service/task-operations.d.ts.map +1 -0
  37. package/dist/lib/ai-service/task-operations.js +220 -0
  38. package/dist/lib/benchmark/registry.d.ts +11 -0
  39. package/dist/lib/benchmark/registry.d.ts.map +1 -0
  40. package/dist/lib/benchmark/registry.js +212 -0
  41. package/dist/lib/benchmark/runner.d.ts +6 -0
  42. package/dist/lib/benchmark/runner.d.ts.map +1 -0
  43. package/dist/lib/benchmark/runner.js +150 -0
  44. package/dist/lib/benchmark/storage.d.ts +13 -0
  45. package/dist/lib/benchmark/storage.d.ts.map +1 -0
  46. package/dist/lib/benchmark/storage.js +100 -0
  47. package/dist/lib/benchmark/types.d.ts +104 -0
  48. package/dist/lib/benchmark/types.d.ts.map +1 -0
  49. package/dist/lib/benchmark/types.js +2 -0
  50. package/dist/lib/better-t-stack-cli.d.ts +50 -0
  51. package/dist/lib/better-t-stack-cli.d.ts.map +1 -0
  52. package/dist/lib/better-t-stack-cli.js +428 -0
  53. package/dist/lib/bootstrap/cli-bootstrap.d.ts +14 -0
  54. package/dist/lib/bootstrap/cli-bootstrap.d.ts.map +1 -0
  55. package/dist/lib/bootstrap/cli-bootstrap.js +322 -0
  56. package/dist/lib/bootstrap/index.d.ts +3 -0
  57. package/dist/lib/bootstrap/index.d.ts.map +1 -0
  58. package/dist/lib/bootstrap/index.js +18 -0
  59. package/dist/lib/bootstrap/medusa-bootstrap.d.ts +14 -0
  60. package/dist/lib/bootstrap/medusa-bootstrap.d.ts.map +1 -0
  61. package/dist/lib/bootstrap/medusa-bootstrap.js +215 -0
  62. package/dist/lib/config-validation.d.ts +215 -0
  63. package/dist/lib/config-validation.d.ts.map +1 -0
  64. package/dist/lib/config-validation.js +254 -0
  65. package/dist/lib/config.d.ts +55 -0
  66. package/dist/lib/config.d.ts.map +1 -0
  67. package/dist/lib/config.js +351 -0
  68. package/dist/lib/context-builder.d.ts +66 -0
  69. package/dist/lib/context-builder.d.ts.map +1 -0
  70. package/dist/lib/context-builder.js +322 -0
  71. package/dist/lib/executors/claude-code-executor.d.ts +9 -0
  72. package/dist/lib/executors/claude-code-executor.d.ts.map +1 -0
  73. package/dist/lib/executors/claude-code-executor.js +69 -0
  74. package/dist/lib/executors/codex-executor.d.ts +9 -0
  75. package/dist/lib/executors/codex-executor.d.ts.map +1 -0
  76. package/dist/lib/executors/codex-executor.js +73 -0
  77. package/dist/lib/executors/executor-factory.d.ts +5 -0
  78. package/dist/lib/executors/executor-factory.d.ts.map +1 -0
  79. package/dist/lib/executors/executor-factory.js +27 -0
  80. package/dist/lib/executors/gemini-executor.d.ts +9 -0
  81. package/dist/lib/executors/gemini-executor.d.ts.map +1 -0
  82. package/dist/lib/executors/gemini-executor.js +67 -0
  83. package/dist/lib/executors/kilo-executor.d.ts +9 -0
  84. package/dist/lib/executors/kilo-executor.d.ts.map +1 -0
  85. package/dist/lib/executors/kilo-executor.js +69 -0
  86. package/dist/lib/executors/opencode-executor.d.ts +9 -0
  87. package/dist/lib/executors/opencode-executor.d.ts.map +1 -0
  88. package/dist/lib/executors/opencode-executor.js +67 -0
  89. package/dist/lib/git-utils.d.ts +88 -0
  90. package/dist/lib/git-utils.d.ts.map +1 -0
  91. package/dist/lib/git-utils.js +242 -0
  92. package/dist/lib/hooks.d.ts +73 -0
  93. package/dist/lib/hooks.d.ts.map +1 -0
  94. package/dist/lib/hooks.js +62 -0
  95. package/dist/lib/index.d.ts +100 -0
  96. package/dist/lib/index.d.ts.map +1 -0
  97. package/dist/lib/index.js +143 -0
  98. package/dist/lib/logger.d.ts +20 -0
  99. package/dist/lib/logger.d.ts.map +1 -0
  100. package/dist/lib/logger.js +32 -0
  101. package/dist/lib/notifications.d.ts +7 -0
  102. package/dist/lib/notifications.d.ts.map +1 -0
  103. package/dist/lib/notifications.js +81 -0
  104. package/dist/lib/prompt-builder.d.ts +70 -0
  105. package/dist/lib/prompt-builder.d.ts.map +1 -0
  106. package/dist/lib/prompt-builder.js +344 -0
  107. package/dist/lib/prompt-registry.d.ts +22 -0
  108. package/dist/lib/prompt-registry.d.ts.map +1 -0
  109. package/dist/lib/prompt-registry.js +409 -0
  110. package/dist/lib/provider-defaults.json +32 -0
  111. package/dist/lib/storage/file-system.d.ts +57 -0
  112. package/dist/lib/storage/file-system.d.ts.map +1 -0
  113. package/dist/lib/storage/file-system.js +638 -0
  114. package/dist/lib/storage/storage-callbacks.d.ts +17 -0
  115. package/dist/lib/storage/storage-callbacks.d.ts.map +1 -0
  116. package/dist/lib/storage/storage-callbacks.js +94 -0
  117. package/dist/lib/storage/types.d.ts +43 -0
  118. package/dist/lib/storage/types.d.ts.map +1 -0
  119. package/dist/lib/storage/types.js +2 -0
  120. package/dist/lib/task-execution-core.d.ts +7 -0
  121. package/dist/lib/task-execution-core.d.ts.map +1 -0
  122. package/dist/lib/task-execution-core.js +381 -0
  123. package/dist/lib/task-execution.d.ts +7 -0
  124. package/dist/lib/task-execution.d.ts.map +1 -0
  125. package/dist/lib/task-execution.js +40 -0
  126. package/dist/lib/task-loop-execution.d.ts +7 -0
  127. package/dist/lib/task-loop-execution.d.ts.map +1 -0
  128. package/dist/lib/task-loop-execution.js +156 -0
  129. package/dist/lib/task-planning.d.ts +29 -0
  130. package/dist/lib/task-planning.d.ts.map +1 -0
  131. package/dist/lib/task-planning.js +103 -0
  132. package/dist/lib/task-review.d.ts +27 -0
  133. package/dist/lib/task-review.d.ts.map +1 -0
  134. package/dist/lib/task-review.js +103 -0
  135. package/dist/lib/validation.d.ts +26 -0
  136. package/dist/lib/validation.d.ts.map +1 -0
  137. package/dist/lib/validation.js +98 -0
  138. package/dist/prompts/documentation-detection.d.ts +2 -0
  139. package/dist/prompts/documentation-detection.d.ts.map +1 -0
  140. package/dist/prompts/documentation-detection.js +24 -0
  141. package/dist/prompts/documentation-recap.d.ts +3 -0
  142. package/dist/prompts/documentation-recap.d.ts.map +1 -0
  143. package/dist/prompts/documentation-recap.js +13 -0
  144. package/dist/prompts/index.d.ts +15 -0
  145. package/dist/prompts/index.d.ts.map +1 -0
  146. package/dist/prompts/index.js +30 -0
  147. package/dist/prompts/prd-combination.d.ts +2 -0
  148. package/dist/prompts/prd-combination.d.ts.map +1 -0
  149. package/dist/prompts/prd-combination.js +35 -0
  150. package/dist/prompts/prd-generation.d.ts +2 -0
  151. package/dist/prompts/prd-generation.d.ts.map +1 -0
  152. package/dist/prompts/prd-generation.js +49 -0
  153. package/dist/prompts/prd-parsing.d.ts +3 -0
  154. package/dist/prompts/prd-parsing.d.ts.map +1 -0
  155. package/dist/prompts/prd-parsing.js +172 -0
  156. package/dist/prompts/prd-question-answer.d.ts +3 -0
  157. package/dist/prompts/prd-question-answer.d.ts.map +1 -0
  158. package/dist/prompts/prd-question-answer.js +27 -0
  159. package/dist/prompts/prd-question.d.ts +3 -0
  160. package/dist/prompts/prd-question.d.ts.map +1 -0
  161. package/dist/prompts/prd-question.js +40 -0
  162. package/dist/prompts/prd-rework.d.ts +3 -0
  163. package/dist/prompts/prd-rework.d.ts.map +1 -0
  164. package/dist/prompts/prd-rework.js +81 -0
  165. package/dist/prompts/prd-suggest-stack.d.ts +3 -0
  166. package/dist/prompts/prd-suggest-stack.d.ts.map +1 -0
  167. package/dist/prompts/prd-suggest-stack.js +99 -0
  168. package/dist/prompts/task-breakdown.d.ts +3 -0
  169. package/dist/prompts/task-breakdown.d.ts.map +1 -0
  170. package/dist/prompts/task-breakdown.js +151 -0
  171. package/dist/prompts/task-enhancement.d.ts +3 -0
  172. package/dist/prompts/task-enhancement.d.ts.map +1 -0
  173. package/dist/prompts/task-enhancement.js +140 -0
  174. package/dist/prompts/task-execution.d.ts +3 -0
  175. package/dist/prompts/task-execution.d.ts.map +1 -0
  176. package/dist/prompts/task-execution.js +24 -0
  177. package/dist/prompts/task-planning.d.ts +3 -0
  178. package/dist/prompts/task-planning.d.ts.map +1 -0
  179. package/dist/prompts/task-planning.js +66 -0
  180. package/dist/prompts/workflow-assistance.d.ts +32 -0
  181. package/dist/prompts/workflow-assistance.d.ts.map +1 -0
  182. package/dist/prompts/workflow-assistance.js +130 -0
  183. package/dist/prompts/workflow-prompts.d.ts +9 -0
  184. package/dist/prompts/workflow-prompts.d.ts.map +1 -0
  185. package/dist/prompts/workflow-prompts.js +93 -0
  186. package/dist/services/benchmark.d.ts +26 -0
  187. package/dist/services/benchmark.d.ts.map +1 -0
  188. package/dist/services/benchmark.js +343 -0
  189. package/dist/services/prd.d.ts +136 -0
  190. package/dist/services/prd.d.ts.map +1 -0
  191. package/dist/services/prd.js +550 -0
  192. package/dist/services/tasks.d.ts +388 -0
  193. package/dist/services/tasks.d.ts.map +1 -0
  194. package/dist/services/tasks.js +1150 -0
  195. package/dist/services/workflow-ai-assistant.d.ts +74 -0
  196. package/dist/services/workflow-ai-assistant.d.ts.map +1 -0
  197. package/dist/services/workflow-ai-assistant.js +175 -0
  198. package/dist/services/workflow-benchmark.d.ts +34 -0
  199. package/dist/services/workflow-benchmark.d.ts.map +1 -0
  200. package/dist/services/workflow-benchmark.js +318 -0
  201. package/dist/services/workflow.d.ts +107 -0
  202. package/dist/services/workflow.d.ts.map +1 -0
  203. package/dist/services/workflow.js +580 -0
  204. package/dist/test/hooks.test.d.ts +2 -0
  205. package/dist/test/hooks.test.d.ts.map +1 -0
  206. package/dist/test/hooks.test.js +67 -0
  207. package/dist/test/integration/callbacks.test.d.ts +2 -0
  208. package/dist/test/integration/callbacks.test.d.ts.map +1 -0
  209. package/dist/test/integration/callbacks.test.js +64 -0
  210. package/dist/test/lib/ai-service/task-operations.test.d.ts +2 -0
  211. package/dist/test/lib/ai-service/task-operations.test.d.ts.map +1 -0
  212. package/dist/test/lib/ai-service/task-operations.test.js +362 -0
  213. package/dist/test/lib/config.test.d.ts +2 -0
  214. package/dist/test/lib/config.test.d.ts.map +1 -0
  215. package/dist/test/lib/config.test.js +128 -0
  216. package/dist/test/lib/git-utils.test.d.ts +2 -0
  217. package/dist/test/lib/git-utils.test.d.ts.map +1 -0
  218. package/dist/test/lib/git-utils.test.js +168 -0
  219. package/dist/test/mocks/mock-ai-operations.d.ts +15 -0
  220. package/dist/test/mocks/mock-ai-operations.d.ts.map +1 -0
  221. package/dist/test/mocks/mock-ai-operations.js +107 -0
  222. package/dist/test/mocks/mock-context-builder.d.ts +10 -0
  223. package/dist/test/mocks/mock-context-builder.d.ts.map +1 -0
  224. package/dist/test/mocks/mock-context-builder.js +81 -0
  225. package/dist/test/mocks/mock-model-provider.d.ts +7 -0
  226. package/dist/test/mocks/mock-model-provider.d.ts.map +1 -0
  227. package/dist/test/mocks/mock-model-provider.js +21 -0
  228. package/dist/test/mocks/mock-service-factory.d.ts +11 -0
  229. package/dist/test/mocks/mock-service-factory.d.ts.map +1 -0
  230. package/dist/test/mocks/mock-service-factory.js +61 -0
  231. package/dist/test/mocks/mock-storage.d.ts +50 -0
  232. package/dist/test/mocks/mock-storage.d.ts.map +1 -0
  233. package/dist/test/mocks/mock-storage.js +145 -0
  234. package/dist/test/model-parsing.test.d.ts +2 -0
  235. package/dist/test/model-parsing.test.d.ts.map +1 -0
  236. package/dist/test/model-parsing.test.js +73 -0
  237. package/dist/test/services/task-service.test.d.ts +2 -0
  238. package/dist/test/services/task-service.test.d.ts.map +1 -0
  239. package/dist/test/services/task-service.test.js +459 -0
  240. package/dist/test/storage.test.d.ts +2 -0
  241. package/dist/test/storage.test.d.ts.map +1 -0
  242. package/dist/test/storage.test.js +207 -0
  243. package/dist/test/task-loop-git.test.d.ts +2 -0
  244. package/dist/test/task-loop-git.test.d.ts.map +1 -0
  245. package/dist/test/task-loop-git.test.js +95 -0
  246. package/dist/test/test-mock-setup.d.ts +26 -0
  247. package/dist/test/test-mock-setup.d.ts.map +1 -0
  248. package/dist/test/test-mock-setup.js +41 -0
  249. package/dist/test/test-setup.d.ts +9 -0
  250. package/dist/test/test-setup.d.ts.map +1 -0
  251. package/dist/test/test-setup.js +44 -0
  252. package/dist/test/test-utils.d.ts +22 -0
  253. package/dist/test/test-utils.d.ts.map +1 -0
  254. package/dist/test/test-utils.js +37 -0
  255. package/dist/test/utils/ai-operation-utility.test.d.ts +2 -0
  256. package/dist/test/utils/ai-operation-utility.test.d.ts.map +1 -0
  257. package/dist/test/utils/ai-operation-utility.test.js +290 -0
  258. package/dist/test/utils/error-handling.test.d.ts +2 -0
  259. package/dist/test/utils/error-handling.test.d.ts.map +1 -0
  260. package/dist/test/utils/error-handling.test.js +231 -0
  261. package/dist/test/utils/file-utils.test.d.ts +2 -0
  262. package/dist/test/utils/file-utils.test.d.ts.map +1 -0
  263. package/dist/test/utils/file-utils.test.js +76 -0
  264. package/dist/test/utils/id-generator.test.d.ts +2 -0
  265. package/dist/test/utils/id-generator.test.d.ts.map +1 -0
  266. package/dist/test/utils/id-generator.test.js +41 -0
  267. package/dist/test/utils/model-parser.test.d.ts +2 -0
  268. package/dist/test/utils/model-parser.test.d.ts.map +1 -0
  269. package/dist/test/utils/model-parser.test.js +65 -0
  270. package/dist/test/validation.test.d.ts +2 -0
  271. package/dist/test/validation.test.d.ts.map +1 -0
  272. package/dist/test/validation.test.js +22 -0
  273. package/dist/types/callbacks.d.ts +30 -0
  274. package/dist/types/callbacks.d.ts.map +1 -0
  275. package/dist/types/callbacks.js +2 -0
  276. package/dist/types/index.d.ts +435 -0
  277. package/dist/types/index.d.ts.map +1 -0
  278. package/dist/types/index.js +30 -0
  279. package/dist/types/mcp.d.ts +3 -0
  280. package/dist/types/mcp.d.ts.map +1 -0
  281. package/dist/types/mcp.js +3 -0
  282. package/dist/types/options.d.ts +112 -0
  283. package/dist/types/options.d.ts.map +1 -0
  284. package/dist/types/options.js +2 -0
  285. package/dist/types/results.d.ts +200 -0
  286. package/dist/types/results.d.ts.map +1 -0
  287. package/dist/types/results.js +2 -0
  288. package/dist/types/workflow-options.d.ts +82 -0
  289. package/dist/types/workflow-options.d.ts.map +1 -0
  290. package/dist/types/workflow-options.js +2 -0
  291. package/dist/types/workflow-results.d.ts +82 -0
  292. package/dist/types/workflow-results.d.ts.map +1 -0
  293. package/dist/types/workflow-results.js +2 -0
  294. package/dist/utils/ai-config-builder.d.ts +14 -0
  295. package/dist/utils/ai-config-builder.d.ts.map +1 -0
  296. package/dist/utils/ai-config-builder.js +22 -0
  297. package/dist/utils/ai-operation-utility.d.ts +142 -0
  298. package/dist/utils/ai-operation-utility.d.ts.map +1 -0
  299. package/dist/utils/ai-operation-utility.js +303 -0
  300. package/dist/utils/ai-service-factory.d.ts +34 -0
  301. package/dist/utils/ai-service-factory.d.ts.map +1 -0
  302. package/dist/utils/ai-service-factory.js +99 -0
  303. package/dist/utils/error-utils.d.ts +70 -0
  304. package/dist/utils/error-utils.d.ts.map +1 -0
  305. package/dist/utils/error-utils.js +104 -0
  306. package/dist/utils/file-utils.d.ts +107 -0
  307. package/dist/utils/file-utils.d.ts.map +1 -0
  308. package/dist/utils/file-utils.js +171 -0
  309. package/dist/utils/id-generator.d.ts +92 -0
  310. package/dist/utils/id-generator.d.ts.map +1 -0
  311. package/dist/utils/id-generator.js +146 -0
  312. package/dist/utils/metadata-utils.d.ts +40 -0
  313. package/dist/utils/metadata-utils.d.ts.map +1 -0
  314. package/dist/utils/metadata-utils.js +43 -0
  315. package/dist/utils/model-executor-parser.d.ts +38 -0
  316. package/dist/utils/model-executor-parser.d.ts.map +1 -0
  317. package/dist/utils/model-executor-parser.js +69 -0
  318. package/dist/utils/model-parser.d.ts +6 -0
  319. package/dist/utils/model-parser.d.ts.map +1 -0
  320. package/dist/utils/model-parser.js +49 -0
  321. package/dist/utils/stack-formatter.d.ts +12 -0
  322. package/dist/utils/stack-formatter.d.ts.map +1 -0
  323. package/dist/utils/stack-formatter.js +36 -0
  324. package/dist/utils/storage-utils.d.ts +49 -0
  325. package/dist/utils/storage-utils.d.ts.map +1 -0
  326. package/dist/utils/storage-utils.js +80 -0
  327. package/dist/utils/streaming-utils.d.ts +38 -0
  328. package/dist/utils/streaming-utils.d.ts.map +1 -0
  329. package/dist/utils/streaming-utils.js +64 -0
  330. package/dist/utils/task-o-matic-error.d.ts +206 -0
  331. package/dist/utils/task-o-matic-error.d.ts.map +1 -0
  332. package/dist/utils/task-o-matic-error.js +304 -0
  333. package/package.json +40 -0
  334. package/src/index.ts +36 -0
  335. package/src/lib/ai-service/ai-operations.ts +310 -0
  336. package/src/lib/ai-service/base-operations.ts +139 -0
  337. package/src/lib/ai-service/documentation-operations.ts +438 -0
  338. package/src/lib/ai-service/filesystem-tools.ts +73 -0
  339. package/src/lib/ai-service/gemini-proxy.ts.bak +52 -0
  340. package/src/lib/ai-service/json-parser.ts +203 -0
  341. package/src/lib/ai-service/mcp-client.ts +54 -0
  342. package/src/lib/ai-service/model-provider.ts +192 -0
  343. package/src/lib/ai-service/prd-operations.ts +854 -0
  344. package/src/lib/ai-service/research-tools.ts +207 -0
  345. package/src/lib/ai-service/retry-handler.ts +89 -0
  346. package/src/lib/ai-service/task-operations.ts +342 -0
  347. package/src/lib/benchmark/registry.ts +307 -0
  348. package/src/lib/benchmark/runner.ts +190 -0
  349. package/src/lib/benchmark/storage.ts +140 -0
  350. package/src/lib/benchmark/types.ts +121 -0
  351. package/src/lib/better-t-stack-cli.ts +524 -0
  352. package/src/lib/bootstrap/cli-bootstrap.ts +397 -0
  353. package/src/lib/bootstrap/index.ts +2 -0
  354. package/src/lib/bootstrap/medusa-bootstrap.ts +261 -0
  355. package/src/lib/config-validation.ts +278 -0
  356. package/src/lib/config.ts +435 -0
  357. package/src/lib/context-builder.ts +383 -0
  358. package/src/lib/executors/claude-code-executor.ts +83 -0
  359. package/src/lib/executors/codex-executor.ts +85 -0
  360. package/src/lib/executors/executor-factory.ts +28 -0
  361. package/src/lib/executors/gemini-executor.ts +80 -0
  362. package/src/lib/executors/kilo-executor.ts +83 -0
  363. package/src/lib/executors/opencode-executor.ts +81 -0
  364. package/src/lib/git-utils.ts +334 -0
  365. package/src/lib/hooks.ts +121 -0
  366. package/src/lib/index.ts +166 -0
  367. package/src/lib/logger.ts +43 -0
  368. package/src/lib/notifications.ts +103 -0
  369. package/src/lib/prompt-builder.ts +471 -0
  370. package/src/lib/prompt-registry.ts +491 -0
  371. package/src/lib/provider-defaults.json +32 -0
  372. package/src/lib/storage/file-system.ts +864 -0
  373. package/src/lib/storage/storage-callbacks.ts +120 -0
  374. package/src/lib/storage/types.ts +58 -0
  375. package/src/lib/task-execution-core.ts +591 -0
  376. package/src/lib/task-execution.ts +59 -0
  377. package/src/lib/task-loop-execution.ts +214 -0
  378. package/src/lib/task-planning.ts +157 -0
  379. package/src/lib/task-review.ts +138 -0
  380. package/src/lib/validation.ts +140 -0
  381. package/src/prompts/documentation-detection.ts +21 -0
  382. package/src/prompts/documentation-recap.ts +11 -0
  383. package/src/prompts/index.ts +14 -0
  384. package/src/prompts/prd-combination.ts +32 -0
  385. package/src/prompts/prd-generation.ts +46 -0
  386. package/src/prompts/prd-parsing.ts +170 -0
  387. package/src/prompts/prd-question-answer.ts +25 -0
  388. package/src/prompts/prd-question.ts +38 -0
  389. package/src/prompts/prd-rework.ts +79 -0
  390. package/src/prompts/prd-suggest-stack.ts +97 -0
  391. package/src/prompts/task-breakdown.ts +149 -0
  392. package/src/prompts/task-enhancement.ts +138 -0
  393. package/src/prompts/task-execution.ts +22 -0
  394. package/src/prompts/task-planning.ts +64 -0
  395. package/src/prompts/workflow-assistance.ts +151 -0
  396. package/src/prompts/workflow-prompts.ts +97 -0
  397. package/src/services/benchmark.ts +433 -0
  398. package/src/services/prd.ts +845 -0
  399. package/src/services/tasks.ts +1515 -0
  400. package/src/services/workflow-ai-assistant.ts +298 -0
  401. package/src/services/workflow-benchmark.ts +339 -0
  402. package/src/services/workflow.ts +779 -0
  403. package/src/test/hooks.test.ts +77 -0
  404. package/src/test/integration/callbacks.test.ts +39 -0
  405. package/src/test/lib/ai-service/task-operations.test.ts +430 -0
  406. package/src/test/lib/config.test.ts +150 -0
  407. package/src/test/lib/git-utils.test.ts +198 -0
  408. package/src/test/mocks/mock-ai-operations.ts +205 -0
  409. package/src/test/mocks/mock-context-builder.ts +84 -0
  410. package/src/test/mocks/mock-model-provider.ts +21 -0
  411. package/src/test/mocks/mock-service-factory.ts +64 -0
  412. package/src/test/mocks/mock-storage.ts +204 -0
  413. package/src/test/model-parsing.test.ts +78 -0
  414. package/src/test/services/task-service.test.ts +551 -0
  415. package/src/test/storage.test.ts +206 -0
  416. package/src/test/task-loop-git.test.ts +142 -0
  417. package/src/test/test-mock-setup.ts +46 -0
  418. package/src/test/test-setup.ts +48 -0
  419. package/src/test/test-utils.ts +45 -0
  420. package/src/test/utils/ai-operation-utility.test.ts +306 -0
  421. package/src/test/utils/error-handling.test.ts +241 -0
  422. package/src/test/utils/file-utils.test.ts +80 -0
  423. package/src/test/utils/id-generator.test.ts +44 -0
  424. package/src/test/utils/model-parser.test.ts +67 -0
  425. package/src/test/validation.test.ts +19 -0
  426. package/src/types/callbacks.ts +14 -0
  427. package/src/types/index.ts +628 -0
  428. package/src/types/mcp.ts +5 -0
  429. package/src/types/options.ts +165 -0
  430. package/src/types/results.ts +216 -0
  431. package/src/types/workflow-options.ts +113 -0
  432. package/src/types/workflow-results.ts +87 -0
  433. package/src/utils/ai-config-builder.ts +33 -0
  434. package/src/utils/ai-operation-utility.ts +380 -0
  435. package/src/utils/ai-service-factory.ts +125 -0
  436. package/src/utils/error-utils.ts +124 -0
  437. package/src/utils/file-utils.ts +197 -0
  438. package/src/utils/id-generator.ts +168 -0
  439. package/src/utils/metadata-utils.ts +48 -0
  440. package/src/utils/model-executor-parser.ts +80 -0
  441. package/src/utils/model-parser.ts +58 -0
  442. package/src/utils/stack-formatter.ts +53 -0
  443. package/src/utils/storage-utils.ts +94 -0
  444. package/src/utils/streaming-utils.ts +91 -0
  445. package/src/utils/task-o-matic-error.ts +393 -0
  446. package/tsconfig.json +20 -0
  447. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configManager = exports.ConfigManager = exports.providerDefaults = void 0;
7
+ exports.createDefaultConfigCallbacks = createDefaultConfigCallbacks;
8
+ exports.setupWorkingDirectory = setupWorkingDirectory;
9
+ const path_1 = require("path");
10
+ const process_1 = require("process");
11
+ const fs_1 = require("fs");
12
+ const dotenv_1 = require("dotenv");
13
+ const config_validation_1 = require("./config-validation");
14
+ const task_o_matic_error_1 = require("../utils/task-o-matic-error");
15
+ const logger_1 = require("./logger");
16
+ // Provider-specific sensible defaults for 2025
17
+ // Externalized to JSON for easy updates
18
+ const provider_defaults_json_1 = __importDefault(require("./provider-defaults.json"));
19
+ exports.providerDefaults = provider_defaults_json_1.default;
20
+ function getApiKeyFromEnv(provider, getEnv) {
21
+ switch (provider) {
22
+ case "openrouter":
23
+ return getEnv("OPENROUTER_API_KEY");
24
+ case "anthropic":
25
+ return getEnv("ANTHROPIC_API_KEY");
26
+ case "openai":
27
+ return getEnv("OPENAI_API_KEY");
28
+ case "custom":
29
+ return getEnv("CUSTOM_API_KEY");
30
+ case "zai":
31
+ return getEnv("ZAI_API_KEY");
32
+ default:
33
+ return undefined;
34
+ }
35
+ }
36
+ function createDefaultConfigCallbacks(workingDir = (0, process_1.cwd)()) {
37
+ // Ensure dotenv is loaded for the default callbacks
38
+ const envPath = (0, path_1.join)(workingDir, ".env");
39
+ if ((0, fs_1.existsSync)(envPath)) {
40
+ (0, dotenv_1.config)({ path: envPath });
41
+ }
42
+ return {
43
+ read: async (key) => {
44
+ // If key is relative, assume it's in .task-o-matic dir relative to workingDir
45
+ // But ConfigManager usually passes "config.json"
46
+ // We need to resolve it.
47
+ // For default callbacks, we replicate the original behavior:
48
+ // .task-o-matic/config.json in workingDir
49
+ const configPath = (0, path_1.join)(workingDir, ".task-o-matic", key);
50
+ if ((0, fs_1.existsSync)(configPath)) {
51
+ return (0, fs_1.readFileSync)(configPath, "utf-8");
52
+ }
53
+ return null;
54
+ },
55
+ write: async (key, value) => {
56
+ const taskOMaticDir = (0, path_1.join)(workingDir, ".task-o-matic");
57
+ if (!(0, fs_1.existsSync)(taskOMaticDir)) {
58
+ (0, fs_1.mkdirSync)(taskOMaticDir, { recursive: true });
59
+ }
60
+ const configPath = (0, path_1.join)(taskOMaticDir, key);
61
+ (0, fs_1.writeFileSync)(configPath, value, "utf-8");
62
+ },
63
+ getEnv: (key) => process.env[key],
64
+ };
65
+ }
66
+ class ConfigManager {
67
+ config = null;
68
+ customWorkingDir = null;
69
+ callbacks;
70
+ constructor(callbacks, workingDirectory) {
71
+ if (workingDirectory) {
72
+ this.customWorkingDir = (0, path_1.resolve)(workingDirectory);
73
+ }
74
+ // If callbacks not provided, create defaults using the working directory
75
+ this.callbacks =
76
+ callbacks || createDefaultConfigCallbacks(this.getWorkingDirectory());
77
+ // We cannot await in constructor.
78
+ // Consumers MUST call load() or ensure it's loaded before accessing config.
79
+ // For backward compatibility in CLI (where sync access was common),
80
+ // we might need a way to force sync load if using default callbacks?
81
+ // But we want to support async callbacks.
82
+ // So we enforce async initialization pattern.
83
+ }
84
+ setWorkingDirectory(dir) {
85
+ this.customWorkingDir = (0, path_1.resolve)(dir);
86
+ // Re-create default callbacks to point to new dir
87
+ this.callbacks = createDefaultConfigCallbacks(this.getWorkingDirectory());
88
+ // Invalidate config so next access requires reload
89
+ this.config = null;
90
+ }
91
+ setCallbacks(callbacks) {
92
+ this.callbacks = callbacks;
93
+ this.config = null;
94
+ }
95
+ getWorkingDirectory() {
96
+ return this.customWorkingDir || (0, process_1.cwd)();
97
+ }
98
+ getTaskOMaticDir() {
99
+ return (0, path_1.join)(this.getWorkingDirectory(), ".task-o-matic");
100
+ }
101
+ loadEnvConfig() {
102
+ const providerStr = this.callbacks.getEnv("AI_PROVIDER")?.toLowerCase();
103
+ const provider = providerStr ? providerStr : undefined;
104
+ // Check if provider is valid if set
105
+ // (This validation is loose here, strict validation happens in validateConfig)
106
+ const maxTokensStr = this.callbacks.getEnv("AI_MAX_TOKENS");
107
+ const tempStr = this.callbacks.getEnv("AI_TEMPERATURE");
108
+ const modelStr = this.callbacks.getEnv("AI_MODEL");
109
+ const config = {};
110
+ if (provider)
111
+ config.provider = provider;
112
+ if (modelStr)
113
+ config.model = modelStr;
114
+ if (maxTokensStr)
115
+ config.maxTokens = parseInt(maxTokensStr);
116
+ if (tempStr)
117
+ config.temperature = parseFloat(tempStr);
118
+ // API Key logic needs to know the provider.
119
+ // If provider is not in env, we should check the resolved provider...
120
+ // But here we only return partial env overrides.
121
+ // The API key fetching logic in getApiKeyFromEnv depends on the provider.
122
+ // If the provider comes from file, we can't know it here easily if we are just returning overrides.
123
+ // However, getApiKeyFromEnv is a helper.
124
+ // We can fetch ALL potential API keys? No, that's messy.
125
+ // Or we just fetch the API key if AI_PROVIDER is set?
126
+ // If AI_PROVIDER is NOT set, we don't know which env var to read for the key yet
127
+ // (unless we assume the default or the file one).
128
+ // If we return undefined for apiKey here, it might overwrite the file one?
129
+ // No, undefined properties don't overwrite if we use spread correctly?
130
+ // { ...a, ...b } where b has undefined properties...
131
+ // In JS/TS spread { ...{a:1}, ...{a: undefined} } results in {a: undefined}.
132
+ // So we must NOT include undefined keys in the returned object.
133
+ if (provider) {
134
+ const key = getApiKeyFromEnv(provider, this.callbacks.getEnv);
135
+ if (key)
136
+ config.apiKey = key;
137
+ }
138
+ else {
139
+ // If provider not in env, we might miss the API key from env if the user
140
+ // intended to use file-provider + env-key.
141
+ // This is a bit tricky with the current structure.
142
+ // But let's stick to the fix for provider override first.
143
+ // We will deal with API key resolution merging later or assume user sets both in env.
144
+ // Actually, we can check all possible keys?
145
+ // Or better: The merge logic in load() is complex.
146
+ // Let's defer API key resolution to after we know the final provider?
147
+ // But load() does: ai: { ...defaultConfig.ai, ...fileConfig.ai, ...envConfig }
148
+ // If I change loadEnvConfig to NOT return apiKey if provider is missing,
149
+ // then apiKey will come from fileConfig or defaultConfig.
150
+ }
151
+ return config;
152
+ }
153
+ async load() {
154
+ const envConfig = this.loadEnvConfig();
155
+ // Default provider is openrouter
156
+ const defaultProvider = envConfig.provider || "openrouter";
157
+ // We can try to get API key for default provider if not in envConfig
158
+ let defaultApiKey = envConfig.apiKey;
159
+ if (!defaultApiKey) {
160
+ defaultApiKey = getApiKeyFromEnv(defaultProvider, this.callbacks.getEnv);
161
+ }
162
+ const defaultConfig = {
163
+ ai: {
164
+ provider: "openrouter",
165
+ model: "z-ai/glm-4.6",
166
+ maxTokens: 32768,
167
+ temperature: 0.5,
168
+ apiKey: defaultApiKey, // This might be overwritten by file or envConfig later
169
+ },
170
+ };
171
+ try {
172
+ // Use relative path "config.json" - callbacks handle resolution
173
+ const configData = await this.callbacks.read("config.json");
174
+ if (configData) {
175
+ const fileConfig = JSON.parse(configData);
176
+ // We need to resolve the final provider to get the correct API key from env
177
+ // if it wasn't provided in envConfig.
178
+ const finalProvider = envConfig.provider || fileConfig.ai?.provider || defaultConfig.ai.provider;
179
+ // If envConfig didn't provide a key, check if we can get it based on finalProvider
180
+ let finalApiKey = envConfig.apiKey;
181
+ if (!finalApiKey) {
182
+ finalApiKey = getApiKeyFromEnv(finalProvider, this.callbacks.getEnv);
183
+ }
184
+ // We construct a refined envConfig that includes the correct API key
185
+ const refinedEnvConfig = { ...envConfig };
186
+ if (finalApiKey) {
187
+ refinedEnvConfig.apiKey = finalApiKey;
188
+ }
189
+ const mergedConfig = {
190
+ ...defaultConfig,
191
+ ...fileConfig,
192
+ ai: { ...defaultConfig.ai, ...fileConfig.ai, ...refinedEnvConfig },
193
+ };
194
+ // Validate the merged configuration
195
+ const validatedConfig = (0, config_validation_1.validateConfig)(mergedConfig);
196
+ this.config = validatedConfig;
197
+ if (this.config && this.config.workingDirectory) {
198
+ this.customWorkingDir = this.config.workingDirectory;
199
+ }
200
+ }
201
+ else {
202
+ // Apply envConfig to defaults
203
+ const mergedConfig = {
204
+ ...defaultConfig,
205
+ ai: { ...defaultConfig.ai, ...envConfig }
206
+ };
207
+ this.config = (0, config_validation_1.validateConfig)(mergedConfig);
208
+ }
209
+ }
210
+ catch (error) {
211
+ logger_1.logger.warn(`Failed to read or validate config, using defaults: ${error}`);
212
+ // Even defaults should be validated
213
+ this.config = (0, config_validation_1.validateConfig)(defaultConfig);
214
+ }
215
+ return this.config;
216
+ }
217
+ async save() {
218
+ if (!this.config) {
219
+ throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.CONFIGURATION_ERROR, "Config not loaded, cannot save.", {
220
+ suggestions: ["Call await configManager.load() before saving"],
221
+ });
222
+ }
223
+ try {
224
+ await this.callbacks.write("config.json", JSON.stringify(this.config, null, 2));
225
+ }
226
+ catch (error) {
227
+ logger_1.logger.error(`Failed to save config: ${error}`);
228
+ throw error;
229
+ }
230
+ }
231
+ getConfig() {
232
+ if (!this.config) {
233
+ // If we are here, it means load() wasn't called or hasn't finished.
234
+ // Since we can't be async here, we must throw or return defaults.
235
+ // Returning defaults might hide issues.
236
+ // Throwing forces users to await load().
237
+ throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.CONFIGURATION_ERROR, "Config not loaded. Call await configManager.load() first.", {
238
+ context: "Configuration must be loaded before access",
239
+ suggestions: [
240
+ "Call await configManager.load() first",
241
+ "Check initialization order",
242
+ ],
243
+ });
244
+ }
245
+ return this.config;
246
+ }
247
+ getAIConfig() {
248
+ return this.getConfig().ai;
249
+ }
250
+ async setAIConfig(aiConfig) {
251
+ if (!this.config) {
252
+ await this.load();
253
+ }
254
+ // Validate the partial config before merging
255
+ const validatedPartial = (0, config_validation_1.validatePartialAIConfig)(aiConfig);
256
+ // Merge and validate the full config
257
+ const mergedAIConfig = { ...this.config.ai, ...validatedPartial };
258
+ const validatedConfig = (0, config_validation_1.validateConfig)({
259
+ ...this.config,
260
+ ai: mergedAIConfig,
261
+ });
262
+ this.config = validatedConfig;
263
+ await this.save();
264
+ }
265
+ setConfig(config) {
266
+ this.config = config;
267
+ }
268
+ // Helper for legacy code that might need path (deprecated for direct use)
269
+ getConfigFilePath() {
270
+ return (0, path_1.join)(this.getTaskOMaticDir(), "config.json");
271
+ }
272
+ /**
273
+ * Validate configuration independently of load().
274
+ * Can be used to validate config before applying changes.
275
+ */
276
+ validate(configToValidate) {
277
+ const errors = [];
278
+ const config = configToValidate || this.config;
279
+ if (!config) {
280
+ return {
281
+ valid: false,
282
+ errors: [
283
+ "No configuration to validate. Either provide a config or call load() first.",
284
+ ],
285
+ };
286
+ }
287
+ // Validate AI config
288
+ if (config.ai) {
289
+ const { provider, model, apiKey, maxTokens, temperature } = config.ai;
290
+ // Validate provider
291
+ if (provider &&
292
+ ![
293
+ "openrouter",
294
+ "anthropic",
295
+ "openai",
296
+ "custom",
297
+ "gemini",
298
+ "zai",
299
+ ].includes(provider)) {
300
+ errors.push(`Invalid provider: ${provider}. Must be one of: openrouter, anthropic, openai, custom, gemini, zai`);
301
+ }
302
+ // Validate model
303
+ if (model !== undefined && typeof model !== "string") {
304
+ errors.push("Model must be a string");
305
+ }
306
+ // Validate maxTokens
307
+ if (maxTokens !== undefined) {
308
+ if (typeof maxTokens !== "number" ||
309
+ maxTokens < 1 ||
310
+ maxTokens > 200000) {
311
+ errors.push("maxTokens must be a number between 1 and 200000");
312
+ }
313
+ }
314
+ // Validate temperature
315
+ if (temperature !== undefined) {
316
+ if (typeof temperature !== "number" ||
317
+ temperature < 0 ||
318
+ temperature > 2) {
319
+ errors.push("temperature must be a number between 0 and 2");
320
+ }
321
+ }
322
+ // Warn about missing API key (not an error, just a warning)
323
+ if (!apiKey && provider !== "custom") {
324
+ // This is a soft validation - API key can be set via env vars
325
+ }
326
+ }
327
+ return {
328
+ valid: errors.length === 0,
329
+ errors,
330
+ };
331
+ }
332
+ }
333
+ exports.ConfigManager = ConfigManager;
334
+ exports.configManager = new ConfigManager();
335
+ /**
336
+ * Helper function to set working directory and reload config.
337
+ * Combines the common pattern of setWorkingDirectory + load.
338
+ *
339
+ * @param dir - Working directory path
340
+ * @param manager - ConfigManager instance (defaults to singleton)
341
+ * @returns Loaded config
342
+ *
343
+ * @example
344
+ * ```typescript
345
+ * await setupWorkingDirectory("/path/to/project");
346
+ * ```
347
+ */
348
+ async function setupWorkingDirectory(dir, manager = exports.configManager) {
349
+ manager.setWorkingDirectory(dir);
350
+ return await manager.load();
351
+ }
@@ -0,0 +1,66 @@
1
+ import { TaskContext, TaskDocumentation } from "../types";
2
+ import { TaskRepository } from "./storage/types";
3
+ export interface FileStats {
4
+ mtime: number;
5
+ isDirectory: boolean;
6
+ }
7
+ export interface ContextCallbacks {
8
+ readFile: (path: string) => Promise<string | null>;
9
+ fileExists: (path: string) => Promise<boolean>;
10
+ listFiles: (dir: string) => Promise<string[]>;
11
+ stat: (path: string) => Promise<FileStats | null>;
12
+ }
13
+ export declare function createDefaultContextCallbacks(): ContextCallbacks;
14
+ export declare class ContextBuilder {
15
+ private storage;
16
+ private callbacks;
17
+ private taskOMatic;
18
+ private initialized;
19
+ constructor(storage: TaskRepository, callbacks?: ContextCallbacks);
20
+ private ensureInitialized;
21
+ /**
22
+ * Build comprehensive context for AI operations
23
+ */
24
+ buildContext(taskId: string): Promise<TaskContext>;
25
+ /**
26
+ * Build context for new tasks (without requiring existing task)
27
+ */
28
+ buildContextForNewTask(title: string, description?: string, prdFile?: string): Promise<TaskContext>;
29
+ /**
30
+ * Get stack configuration from project (set by bootstrap)
31
+ */
32
+ private getStackConfig;
33
+ /**
34
+ * Get task documentation references
35
+ */
36
+ private getTaskDocumentation;
37
+ /**
38
+ * Get full task content from MD file
39
+ */
40
+ private getTaskFullContent;
41
+ /**
42
+ * Read documentation file content
43
+ */
44
+ private readDocumentationFile;
45
+ /**
46
+ * Check if documentation is fresh (less than 7 days old)
47
+ */
48
+ isDocumentationFresh(documentation: TaskDocumentation): boolean;
49
+ /**
50
+ * Check if documentation is stale (more than 30 days old)
51
+ */
52
+ isDocumentationStale(documentation: TaskDocumentation): boolean;
53
+ /**
54
+ * Get PRD content from file path
55
+ */
56
+ private getPRDContent;
57
+ /**
58
+ * Get relevant PRD content based on task title/description
59
+ */
60
+ private getRelevantPRDContent;
61
+ /**
62
+ * Format context for AI prompts
63
+ */
64
+ formatContextForAI(context: TaskContext): string;
65
+ }
66
+ //# sourceMappingURL=context-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../src/lib/context-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,WAAW,EAAa,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKjD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;CACnD;AAED,wBAAgB,6BAA6B,IAAI,gBAAgB,CA4BhE;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,gBAAgB;IAKjE,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsCxD;;OAEG;IACG,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC;IAsBvB;;OAEG;YACW,cAAc;IA6C5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;YACW,kBAAkB;IAgBhC;;OAEG;YACW,qBAAqB;IAmBnC;;OAEG;IACH,oBAAoB,CAAC,aAAa,EAAE,iBAAiB,GAAG,OAAO;IAK/D;;OAEG;IACH,oBAAoB,CAAC,aAAa,EAAE,iBAAiB,GAAG,OAAO;IAK/D;;OAEG;YACW,aAAa;IAkB3B;;OAEG;YACW,qBAAqB;IAqDnC;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM;CAmDjD"}