@ai-setting/roy-agent-core 1.0.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 (378) hide show
  1. package/dist/index.js +99145 -0
  2. package/package.json +114 -0
  3. package/src/config/config-component.test.ts +627 -0
  4. package/src/config/config-component.ts +906 -0
  5. package/src/config/config-parser.test.ts +319 -0
  6. package/src/config/config-parser.ts +203 -0
  7. package/src/config/decentralized-config.test.ts +740 -0
  8. package/src/config/env-key.ts +210 -0
  9. package/src/config/env-source.test.ts +252 -0
  10. package/src/config/env-source.ts +301 -0
  11. package/src/config/file-source.test.ts +357 -0
  12. package/src/config/file-source.ts +421 -0
  13. package/src/config/index.ts +24 -0
  14. package/src/config/protocol-resolver.test.ts +217 -0
  15. package/src/config/protocol-resolver.ts +228 -0
  16. package/src/env/agent/agent-component.abort.test.ts +511 -0
  17. package/src/env/agent/agent-component.record-session.test.ts +349 -0
  18. package/src/env/agent/agent-component.test.ts +1389 -0
  19. package/src/env/agent/agent-component.tool-error.test.ts +327 -0
  20. package/src/env/agent/agent-component.ts +1711 -0
  21. package/src/env/agent/agent-config-registration.test.ts +226 -0
  22. package/src/env/agent/agent-config-registration.ts +46 -0
  23. package/src/env/agent/agent-reminder-plugin.integration.test.ts +243 -0
  24. package/src/env/agent/index.ts +10 -0
  25. package/src/env/agent/summary-agent.parse-hint.test.ts +360 -0
  26. package/src/env/agent/summary-agent.ts +508 -0
  27. package/src/env/agent/types.ts +536 -0
  28. package/src/env/commands/commands-component.test.ts +364 -0
  29. package/src/env/commands/commands-component.ts +604 -0
  30. package/src/env/commands/commands-config-registration.test.ts +198 -0
  31. package/src/env/commands/commands-config-registration.ts +38 -0
  32. package/src/env/commands/index.ts +21 -0
  33. package/src/env/commands/parser.test.ts +203 -0
  34. package/src/env/commands/parser.ts +115 -0
  35. package/src/env/commands/types.ts +184 -0
  36. package/src/env/commands-prompt-integration.test.ts +243 -0
  37. package/src/env/component-env.test.ts +119 -0
  38. package/src/env/component.ts +335 -0
  39. package/src/env/constants.test.ts +72 -0
  40. package/src/env/constants.ts +123 -0
  41. package/src/env/debug/debug-component.test.ts +114 -0
  42. package/src/env/debug/debug-component.ts +547 -0
  43. package/src/env/debug/formatters/index.ts +9 -0
  44. package/src/env/debug/formatters/repl-formatter.test.ts +139 -0
  45. package/src/env/debug/formatters/repl-formatter.ts +358 -0
  46. package/src/env/debug/formatters/trace-formatter.test.ts +119 -0
  47. package/src/env/debug/formatters/trace-formatter.ts +191 -0
  48. package/src/env/debug/formatters/tree-formatter.test.ts +107 -0
  49. package/src/env/debug/formatters/tree-formatter.ts +325 -0
  50. package/src/env/debug/index.ts +38 -0
  51. package/src/env/debug/parser/regex-parser.test.ts +201 -0
  52. package/src/env/debug/parser/regex-parser.ts +196 -0
  53. package/src/env/debug/parser/span-builder.test.ts +241 -0
  54. package/src/env/debug/parser/span-builder.ts +386 -0
  55. package/src/env/debug/reader/log-reader.test.ts +170 -0
  56. package/src/env/debug/reader/log-reader.ts +186 -0
  57. package/src/env/debug/reader/span-db-reader.test.ts +118 -0
  58. package/src/env/debug/reader/span-db-reader.ts +201 -0
  59. package/src/env/debug/types.test.ts +187 -0
  60. package/src/env/debug/types.ts +171 -0
  61. package/src/env/environment-init.test.ts +183 -0
  62. package/src/env/environment-lifecycle.test.ts +516 -0
  63. package/src/env/environment-service.test.ts +332 -0
  64. package/src/env/environment.handle-query.test.ts +96 -0
  65. package/src/env/environment.test.ts +232 -0
  66. package/src/env/environment.ts +708 -0
  67. package/src/env/errors.test.ts +165 -0
  68. package/src/env/errors.ts +157 -0
  69. package/src/env/event-source/event-source-agent-handler.test.ts +193 -0
  70. package/src/env/event-source/event-source-agent-handler.ts +111 -0
  71. package/src/env/event-source/event-source-component.process-cleanup.test.ts +236 -0
  72. package/src/env/event-source/event-source-component.stop.test.ts +346 -0
  73. package/src/env/event-source/event-source-component.test.ts +1207 -0
  74. package/src/env/event-source/event-source-component.ts +1379 -0
  75. package/src/env/event-source/event-source-config-registration.test.ts +242 -0
  76. package/src/env/event-source/event-source-config-registration.ts +37 -0
  77. package/src/env/event-source/event-source-integration.test.ts +320 -0
  78. package/src/env/event-source/event-source-platform.test.ts +630 -0
  79. package/src/env/event-source/types.ts +298 -0
  80. package/src/env/hook/global-hook-manager.ts +162 -0
  81. package/src/env/hook/hook-manager.test.ts +374 -0
  82. package/src/env/hook/hook-manager.ts +309 -0
  83. package/src/env/hook/index.ts +38 -0
  84. package/src/env/hook/types.ts +138 -0
  85. package/src/env/index.ts +144 -0
  86. package/src/env/interface.ts +203 -0
  87. package/src/env/llm/hooks.test.ts +293 -0
  88. package/src/env/llm/hooks.ts +316 -0
  89. package/src/env/llm/index.ts +61 -0
  90. package/src/env/llm/invoke-threshold-check.test.ts +88 -0
  91. package/src/env/llm/invoke-timeout.test.ts +54 -0
  92. package/src/env/llm/invoke.test.ts +71 -0
  93. package/src/env/llm/invoke.ts +1039 -0
  94. package/src/env/llm/llm-config.test.ts +523 -0
  95. package/src/env/llm/llm.test.ts +233 -0
  96. package/src/env/llm/llm.ts +568 -0
  97. package/src/env/llm/provider.test.ts +182 -0
  98. package/src/env/llm/provider.ts +108 -0
  99. package/src/env/llm/transform.test.ts +251 -0
  100. package/src/env/llm/transform.ts +286 -0
  101. package/src/env/llm/types.test.ts +580 -0
  102. package/src/env/llm/types.ts +424 -0
  103. package/src/env/log-trace/decorator-otel.test.ts +182 -0
  104. package/src/env/log-trace/decorator.ts +230 -0
  105. package/src/env/log-trace/index.ts +79 -0
  106. package/src/env/log-trace/log-trace-component.test.ts +242 -0
  107. package/src/env/log-trace/log-trace-component.ts +497 -0
  108. package/src/env/log-trace/log-trace-config-registration.test.ts +348 -0
  109. package/src/env/log-trace/log-trace-config-registration.ts +45 -0
  110. package/src/env/log-trace/logger.test.ts +149 -0
  111. package/src/env/log-trace/logger.ts +522 -0
  112. package/src/env/log-trace/opentelemetry/cli-propagation.test.ts +147 -0
  113. package/src/env/log-trace/opentelemetry/cli-propagation.ts +194 -0
  114. package/src/env/log-trace/opentelemetry/integration.test.ts +668 -0
  115. package/src/env/log-trace/opentelemetry/mod.ts +25 -0
  116. package/src/env/log-trace/opentelemetry/propagation-env.test.ts +181 -0
  117. package/src/env/log-trace/opentelemetry/propagation-env.ts +136 -0
  118. package/src/env/log-trace/opentelemetry/propagation.test.ts +259 -0
  119. package/src/env/log-trace/opentelemetry/propagation.ts +215 -0
  120. package/src/env/log-trace/opentelemetry/tracer-provider-context.test.ts +166 -0
  121. package/src/env/log-trace/opentelemetry/tracer-provider.test.ts +379 -0
  122. package/src/env/log-trace/opentelemetry/tracer-provider.ts +612 -0
  123. package/src/env/log-trace/span-storage.test.ts +145 -0
  124. package/src/env/log-trace/span-storage.ts +230 -0
  125. package/src/env/log-trace/trace-context.test.ts +187 -0
  126. package/src/env/log-trace/trace-context.ts +162 -0
  127. package/src/env/log-trace/types.test.ts +63 -0
  128. package/src/env/log-trace/types.ts +172 -0
  129. package/src/env/mcp/README.md +244 -0
  130. package/src/env/mcp/__integration__/mcp-component.integration.test.ts +373 -0
  131. package/src/env/mcp/config.test.ts +74 -0
  132. package/src/env/mcp/config.ts +116 -0
  133. package/src/env/mcp/index.ts +41 -0
  134. package/src/env/mcp/loader.test.ts +161 -0
  135. package/src/env/mcp/loader.ts +209 -0
  136. package/src/env/mcp/mcp-component.test.ts +111 -0
  137. package/src/env/mcp/mcp-component.ts +358 -0
  138. package/src/env/mcp/mcp-config-registration.test.ts +304 -0
  139. package/src/env/mcp/mcp-config-registration.ts +50 -0
  140. package/src/env/mcp/scanner.test.ts +170 -0
  141. package/src/env/mcp/scanner.ts +246 -0
  142. package/src/env/mcp/tool/adapter.test.ts +520 -0
  143. package/src/env/mcp/tool/adapter.ts +521 -0
  144. package/src/env/mcp/tool/index.ts +5 -0
  145. package/src/env/mcp/types.test.ts +171 -0
  146. package/src/env/mcp/types.ts +79 -0
  147. package/src/env/memory/README.md +177 -0
  148. package/src/env/memory/built-in/index.ts +59 -0
  149. package/src/env/memory/built-in/recall-memory.ts +103 -0
  150. package/src/env/memory/built-in/record-memory.ts +148 -0
  151. package/src/env/memory/index.ts +20 -0
  152. package/src/env/memory/memory-component.test.ts +239 -0
  153. package/src/env/memory/memory-component.ts +503 -0
  154. package/src/env/memory/memory-config-registration.test.ts +67 -0
  155. package/src/env/memory/memory-config-registration.ts +48 -0
  156. package/src/env/memory/memory-config.ts +45 -0
  157. package/src/env/memory/memory-file.test.ts +268 -0
  158. package/src/env/memory/plugin/index.ts +48 -0
  159. package/src/env/memory/plugin/memory-agent.test.ts +249 -0
  160. package/src/env/memory/plugin/memory-agent.ts +365 -0
  161. package/src/env/memory/plugin/memory-manager.ts +198 -0
  162. package/src/env/memory/plugin/memory-plugin-agent.test.ts +145 -0
  163. package/src/env/memory/plugin/memory-plugin.ts +210 -0
  164. package/src/env/memory/plugin/plugin-simplified.test.ts +51 -0
  165. package/src/env/memory/plugin/recall-memory.test.ts +106 -0
  166. package/src/env/memory/plugin/recall-memory.ts +53 -0
  167. package/src/env/memory/plugin/types.ts +101 -0
  168. package/src/env/memory/tools/memory-agent-tools.ts +228 -0
  169. package/src/env/memory/types.ts +85 -0
  170. package/src/env/paths.ts +118 -0
  171. package/src/env/prompt/index.ts +18 -0
  172. package/src/env/prompt/memory-prompts.test.ts +91 -0
  173. package/src/env/prompt/prompt-component.test.ts +491 -0
  174. package/src/env/prompt/prompt-component.ts +619 -0
  175. package/src/env/prompt/prompt-config-registration.test.ts +213 -0
  176. package/src/env/prompt/prompt-config-registration.ts +39 -0
  177. package/src/env/prompt/prompts-index.ts +504 -0
  178. package/src/env/prompt/renderer.ts +67 -0
  179. package/src/env/prompt/types.ts +136 -0
  180. package/src/env/session/hooks.ts +18 -0
  181. package/src/env/session/index.ts +37 -0
  182. package/src/env/session/search-query-parser.test.ts +425 -0
  183. package/src/env/session/search-query-parser.ts +171 -0
  184. package/src/env/session/session-checkpoint.test.ts +523 -0
  185. package/src/env/session/session-component.extract-recent-messages.test.ts +209 -0
  186. package/src/env/session/session-component.test.ts +132 -0
  187. package/src/env/session/session-component.ts +1249 -0
  188. package/src/env/session/session-config-registration.test.ts +138 -0
  189. package/src/env/session/session-config-registration.ts +52 -0
  190. package/src/env/session/session-message-converter.test.ts +763 -0
  191. package/src/env/session/session-message-converter.ts +415 -0
  192. package/src/env/session/session-message-e2e.test.ts +448 -0
  193. package/src/env/session/session-search.test.ts +391 -0
  194. package/src/env/session/session-store.test.ts +362 -0
  195. package/src/env/session/session-store.ts +141 -0
  196. package/src/env/session/storage/index.ts +6 -0
  197. package/src/env/session/storage/memory.ts +502 -0
  198. package/src/env/session/storage/sqlite.ts +794 -0
  199. package/src/env/session/types.ts +742 -0
  200. package/src/env/skill/config.ts +39 -0
  201. package/src/env/skill/index.ts +6 -0
  202. package/src/env/skill/parser.test.ts +116 -0
  203. package/src/env/skill/parser.ts +77 -0
  204. package/src/env/skill/scanner.test.ts +211 -0
  205. package/src/env/skill/scanner.ts +119 -0
  206. package/src/env/skill/skill-component.test.ts +234 -0
  207. package/src/env/skill/skill-component.ts +352 -0
  208. package/src/env/skill/skill-config-registration.test.ts +60 -0
  209. package/src/env/skill/skill-config-registration.ts +43 -0
  210. package/src/env/skill/tool/index.ts +1 -0
  211. package/src/env/skill/tool/skill-tool.test.ts +100 -0
  212. package/src/env/skill/tool/skill-tool.ts +72 -0
  213. package/src/env/skill/types.ts +64 -0
  214. package/src/env/task/delegate/delegate-tool.test.ts +498 -0
  215. package/src/env/task/delegate/delegate-tool.ts +1014 -0
  216. package/src/env/task/delegate/index.ts +18 -0
  217. package/src/env/task/delegate/stop-tool.test.ts +140 -0
  218. package/src/env/task/delegate/stop-tool.ts +119 -0
  219. package/src/env/task/delegate/task-events.test.ts +178 -0
  220. package/src/env/task/delegate/task-events.ts +143 -0
  221. package/src/env/task/hooks/contexts.test.ts +92 -0
  222. package/src/env/task/hooks/contexts.ts +192 -0
  223. package/src/env/task/hooks/index.ts +23 -0
  224. package/src/env/task/hooks/task-hook-points.test.ts +32 -0
  225. package/src/env/task/hooks/task-hook-points.ts +54 -0
  226. package/src/env/task/index.ts +7 -0
  227. package/src/env/task/plugins/index.ts +13 -0
  228. package/src/env/task/plugins/task-plugin.test.ts +74 -0
  229. package/src/env/task/plugins/task-plugin.ts +89 -0
  230. package/src/env/task/plugins/task-tag-plugin.test.ts +377 -0
  231. package/src/env/task/plugins/task-tag-plugin.ts +319 -0
  232. package/src/env/task/plugins/task-workflow-extractor.integration.test.ts +226 -0
  233. package/src/env/task/plugins/workflow-extractor-agent.test.ts +107 -0
  234. package/src/env/task/plugins/workflow-extractor-agent.ts +225 -0
  235. package/src/env/task/storage/index.ts +6 -0
  236. package/src/env/task/storage/sqlite-task-store.test.ts +283 -0
  237. package/src/env/task/storage/sqlite-task-store.ts +903 -0
  238. package/src/env/task/storage/task-search.test.ts +291 -0
  239. package/src/env/task/tag-service.test.ts +198 -0
  240. package/src/env/task/tag-service.ts +264 -0
  241. package/src/env/task/task-component.test.ts +193 -0
  242. package/src/env/task/task-component.ts +658 -0
  243. package/src/env/task/task-config-registration.test.ts +57 -0
  244. package/src/env/task/task-config-registration.ts +37 -0
  245. package/src/env/task/task-types.test.ts +137 -0
  246. package/src/env/task/tools/complete-tool.ts +44 -0
  247. package/src/env/task/tools/create-tool.ts +49 -0
  248. package/src/env/task/tools/delete-tool.ts +43 -0
  249. package/src/env/task/tools/get-tool.ts +59 -0
  250. package/src/env/task/tools/index.ts +10 -0
  251. package/src/env/task/tools/list-tool.ts +40 -0
  252. package/src/env/task/tools/operation/create-tool.ts +48 -0
  253. package/src/env/task/tools/operation/delete-tool.ts +43 -0
  254. package/src/env/task/tools/operation/get-tool.ts +43 -0
  255. package/src/env/task/tools/operation/index.ts +9 -0
  256. package/src/env/task/tools/operation/list-tool.ts +40 -0
  257. package/src/env/task/tools/operation/operation-tools.test.ts +274 -0
  258. package/src/env/task/tools/operation/operation-types.ts +75 -0
  259. package/src/env/task/tools/operation/update-tool.ts +47 -0
  260. package/src/env/task/tools/task-tools.test.ts +203 -0
  261. package/src/env/task/tools/task-types.test.ts +75 -0
  262. package/src/env/task/tools/task-types.ts +68 -0
  263. package/src/env/task/tools/update-tool.ts +70 -0
  264. package/src/env/task/types.ts +160 -0
  265. package/src/env/tool/built-in/bash.ts +201 -0
  266. package/src/env/tool/built-in/echo.ts +29 -0
  267. package/src/env/tool/built-in/edit-file.test.ts +136 -0
  268. package/src/env/tool/built-in/edit-file.ts +92 -0
  269. package/src/env/tool/built-in/glob.test.ts +94 -0
  270. package/src/env/tool/built-in/glob.ts +65 -0
  271. package/src/env/tool/built-in/grep.test.ts +122 -0
  272. package/src/env/tool/built-in/grep.ts +108 -0
  273. package/src/env/tool/built-in/index.ts +44 -0
  274. package/src/env/tool/built-in/read-file.test.ts +84 -0
  275. package/src/env/tool/built-in/read-file.ts +75 -0
  276. package/src/env/tool/built-in/write-file.test.ts +119 -0
  277. package/src/env/tool/built-in/write-file.ts +68 -0
  278. package/src/env/tool/index.ts +24 -0
  279. package/src/env/tool/registry.test.ts +257 -0
  280. package/src/env/tool/registry.ts +167 -0
  281. package/src/env/tool/tool-component.test.ts +559 -0
  282. package/src/env/tool/tool-component.ts +563 -0
  283. package/src/env/tool/tool-config-registration.test.ts +249 -0
  284. package/src/env/tool/tool-config-registration.ts +46 -0
  285. package/src/env/tool/types.ts +267 -0
  286. package/src/env/tool/validator.test.ts +143 -0
  287. package/src/env/tool/validator.ts +44 -0
  288. package/src/env/types.ts +180 -0
  289. package/src/env/workflow/ask-user-tool-registration.test.ts +216 -0
  290. package/src/env/workflow/complex-workflow.integration.test.ts +1900 -0
  291. package/src/env/workflow/decorators/decorator-node.ts +229 -0
  292. package/src/env/workflow/decorators/decorator.test.ts +196 -0
  293. package/src/env/workflow/decorators/edge.ts +82 -0
  294. package/src/env/workflow/decorators/index.ts +31 -0
  295. package/src/env/workflow/decorators/node-as.ts +98 -0
  296. package/src/env/workflow/decorators/workflow.ts +54 -0
  297. package/src/env/workflow/engine/dag-manager.test.ts +570 -0
  298. package/src/env/workflow/engine/dag-manager.ts +594 -0
  299. package/src/env/workflow/engine/engine.ts +1422 -0
  300. package/src/env/workflow/engine/event-bus.test.ts +359 -0
  301. package/src/env/workflow/engine/event-bus.ts +156 -0
  302. package/src/env/workflow/engine/executor-agent-session.test.ts +84 -0
  303. package/src/env/workflow/engine/executor.test.ts +619 -0
  304. package/src/env/workflow/engine/executor.ts +593 -0
  305. package/src/env/workflow/engine/index.ts +24 -0
  306. package/src/env/workflow/engine/node-registry.test.ts +560 -0
  307. package/src/env/workflow/engine/node-registry.ts +289 -0
  308. package/src/env/workflow/engine/resume-removed.test.ts +22 -0
  309. package/src/env/workflow/engine/scheduler.test.ts +715 -0
  310. package/src/env/workflow/engine/scheduler.ts +318 -0
  311. package/src/env/workflow/engine/workflow-engine.test.ts +815 -0
  312. package/src/env/workflow/extractor/workflow-converter.ts +306 -0
  313. package/src/env/workflow/fixtures.ts +380 -0
  314. package/src/env/workflow/index.ts +38 -0
  315. package/src/env/workflow/integration/run-resume-unified.test.ts +186 -0
  316. package/src/env/workflow/integration/service-integration.test.ts +267 -0
  317. package/src/env/workflow/metadata/keys.ts +12 -0
  318. package/src/env/workflow/nodes/agent-component-adapter.test.ts +318 -0
  319. package/src/env/workflow/nodes/agent-component-adapter.ts +448 -0
  320. package/src/env/workflow/nodes/agent-node.test.ts +371 -0
  321. package/src/env/workflow/nodes/agent-node.ts +598 -0
  322. package/src/env/workflow/nodes/ask-user-node.ts +113 -0
  323. package/src/env/workflow/nodes/condition-node.ts +200 -0
  324. package/src/env/workflow/nodes/index.ts +9 -0
  325. package/src/env/workflow/nodes/merge-node.ts +141 -0
  326. package/src/env/workflow/nodes/skill-node.test.ts +253 -0
  327. package/src/env/workflow/nodes/skill-node.ts +393 -0
  328. package/src/env/workflow/nodes/tool-node.test.ts +251 -0
  329. package/src/env/workflow/nodes/tool-node.ts +493 -0
  330. package/src/env/workflow/nodes/workflow-llm-history.test.ts +455 -0
  331. package/src/env/workflow/nodes/workflow-node.test.ts +315 -0
  332. package/src/env/workflow/nodes/workflow-node.ts +311 -0
  333. package/src/env/workflow/service/index.ts +27 -0
  334. package/src/env/workflow/service/registry.test.ts +133 -0
  335. package/src/env/workflow/service/registry.ts +71 -0
  336. package/src/env/workflow/service/workflow-service.test.ts +310 -0
  337. package/src/env/workflow/service/workflow-service.ts +393 -0
  338. package/src/env/workflow/storage/index.ts +28 -0
  339. package/src/env/workflow/storage/mock-repositories.ts +385 -0
  340. package/src/env/workflow/storage/sqlite.test.ts +179 -0
  341. package/src/env/workflow/storage/sqlite.ts +163 -0
  342. package/src/env/workflow/storage/workflow-repo.test.ts +780 -0
  343. package/src/env/workflow/storage/workflow-repo.ts +342 -0
  344. package/src/env/workflow/tools/ask-user-tool.ts +82 -0
  345. package/src/env/workflow/tools/index.ts +26 -0
  346. package/src/env/workflow/tools/run-workflow.test.ts +352 -0
  347. package/src/env/workflow/tools/run-workflow.ts +214 -0
  348. package/src/env/workflow/types/context.ts +18 -0
  349. package/src/env/workflow/types/decorators-types.ts +198 -0
  350. package/src/env/workflow/types/event.test.ts +515 -0
  351. package/src/env/workflow/types/event.ts +193 -0
  352. package/src/env/workflow/types/index.ts +49 -0
  353. package/src/env/workflow/types/run.test.ts +437 -0
  354. package/src/env/workflow/types/run.ts +173 -0
  355. package/src/env/workflow/types/workflow-hil.ts +114 -0
  356. package/src/env/workflow/types/workflow-message.test.ts +138 -0
  357. package/src/env/workflow/types/workflow-message.ts +196 -0
  358. package/src/env/workflow/types/workflow-session.test.ts +95 -0
  359. package/src/env/workflow/types/workflow-session.ts +59 -0
  360. package/src/env/workflow/types/workflow.test.ts +495 -0
  361. package/src/env/workflow/types/workflow.ts +195 -0
  362. package/src/env/workflow/types_compat.ts +51 -0
  363. package/src/env/workflow/utils/create-workflow.ts +47 -0
  364. package/src/env/workflow/utils/execution-state.ts +245 -0
  365. package/src/env/workflow/utils/index.ts +18 -0
  366. package/src/env/workflow/utils/node-registry-helper.ts +58 -0
  367. package/src/env/workflow/utils/recovery-validator.test.ts +460 -0
  368. package/src/env/workflow/utils/recovery-validator.ts +377 -0
  369. package/src/env/workflow/utils/session-parser.test.ts +111 -0
  370. package/src/env/workflow/utils/session-parser.ts +94 -0
  371. package/src/env/workflow/utils/session-recovery.test.ts +334 -0
  372. package/src/env/workflow/utils/session-recovery.ts +188 -0
  373. package/src/env/workflow/utils/template-resolver.test.ts +258 -0
  374. package/src/env/workflow/utils/template-resolver.ts +436 -0
  375. package/src/env/workflow/utils/validation-rules.ts +149 -0
  376. package/src/env/workflow/workflow-component.ts +544 -0
  377. package/src/index.ts +422 -0
  378. package/src/utils/id.ts +21 -0
@@ -0,0 +1,342 @@
1
+ /**
2
+ * @fileoverview Workflow Repository
3
+ *
4
+ * SQLite-based repository for workflow CRUD operations.
5
+ */
6
+
7
+ import { randomUUID } from 'crypto';
8
+ import type { Workflow, WorkflowDefinition, WorkflowMetadata, WorkflowConfig } from '../types';
9
+ import { getDatabase } from './sqlite';
10
+
11
+ // Row interface matching database schema
12
+ export interface WorkflowRow {
13
+ id: string;
14
+ name: string;
15
+ version: string;
16
+ description: string | null;
17
+ definition: string;
18
+ config: string;
19
+ metadata: string;
20
+ tags: string;
21
+ task_id: number | null;
22
+ created_at: string;
23
+ updated_at: string;
24
+ }
25
+
26
+ // Query options for listing workflows
27
+ export interface ListWorkflowsOptions {
28
+ limit?: number;
29
+ offset?: number;
30
+ orderBy?: 'name' | 'created_at' | 'updated_at';
31
+ order?: 'asc' | 'desc';
32
+ tag?: string;
33
+ taskId?: number; // 新增:按任务 ID 精确过滤
34
+ search?: string; // 新增:搜索 description + tags
35
+ }
36
+
37
+ // Update options
38
+ export interface UpdateWorkflowOptions {
39
+ name?: string;
40
+ version?: string;
41
+ description?: string;
42
+ definition?: WorkflowDefinition;
43
+ config?: WorkflowConfig;
44
+ metadata?: WorkflowMetadata;
45
+ tags?: string[];
46
+ }
47
+
48
+ /**
49
+ * Row to Workflow conversion helper
50
+ */
51
+ export function rowToWorkflow(row: WorkflowRow): Workflow {
52
+ const metadata = JSON.parse(row.metadata) as WorkflowMetadata;
53
+ // Merge task_id from column into metadata
54
+ if (row.task_id !== null) {
55
+ metadata.taskId = row.task_id;
56
+ }
57
+ return {
58
+ id: row.id,
59
+ name: row.name,
60
+ version: row.version,
61
+ description: row.description || undefined,
62
+ definition: JSON.parse(row.definition) as WorkflowDefinition,
63
+ config: JSON.parse(row.config) as WorkflowConfig,
64
+ metadata,
65
+ tags: JSON.parse(row.tags) as string[],
66
+ createdAt: new Date(row.created_at),
67
+ updatedAt: new Date(row.updated_at),
68
+ };
69
+ }
70
+
71
+ /**
72
+ * WorkflowRepository class
73
+ *
74
+ * Provides CRUD operations for workflows in SQLite.
75
+ */
76
+ export class WorkflowRepository {
77
+ private db: ReturnType<typeof getDatabase>;
78
+
79
+ constructor(db?: ReturnType<typeof getDatabase>) {
80
+ this.db = db || getDatabase();
81
+ }
82
+
83
+ /**
84
+ * Create a new workflow
85
+ */
86
+ create(workflow: Omit<Workflow, 'id' | 'createdAt' | 'updatedAt'>): Workflow {
87
+ const id = randomUUID();
88
+ const now = new Date().toISOString();
89
+
90
+ const stmt = this.db.prepare(`
91
+ INSERT INTO workflows (id, name, version, description, definition, config, metadata, tags, task_id, created_at, updated_at)
92
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
93
+ `);
94
+
95
+ stmt.run(
96
+ id,
97
+ workflow.name,
98
+ workflow.version,
99
+ workflow.description || null,
100
+ JSON.stringify(workflow.definition),
101
+ JSON.stringify(workflow.config),
102
+ JSON.stringify(workflow.metadata),
103
+ JSON.stringify(workflow.tags),
104
+ workflow.metadata?.taskId || null, // 新增
105
+ now,
106
+ now
107
+ );
108
+
109
+ return {
110
+ ...workflow,
111
+ id,
112
+ createdAt: new Date(now),
113
+ updatedAt: new Date(now),
114
+ };
115
+ }
116
+
117
+ /**
118
+ * Create a workflow from definition only
119
+ */
120
+ createFromDefinition(definition: WorkflowDefinition, options?: {
121
+ config?: WorkflowConfig;
122
+ metadata?: WorkflowMetadata;
123
+ tags?: string[];
124
+ }): Workflow {
125
+ const workflow: Omit<Workflow, 'id' | 'createdAt' | 'updatedAt'> = {
126
+ name: definition.name,
127
+ version: definition.version,
128
+ description: definition.description,
129
+ definition,
130
+ config: options?.config || definition.config || {},
131
+ metadata: options?.metadata || definition.metadata || {},
132
+ tags: options?.tags || definition.metadata?.tags || [],
133
+ };
134
+
135
+ return this.create(workflow);
136
+ }
137
+
138
+ /**
139
+ * Get a workflow by ID
140
+ */
141
+ getById(id: string): Workflow | undefined {
142
+ const row = this.db.prepare('SELECT * FROM workflows WHERE id = ?').get(id) as WorkflowRow | undefined;
143
+ if (!row) return undefined;
144
+ return rowToWorkflow(row);
145
+ }
146
+
147
+ /**
148
+ * Get a workflow by name (returns latest version)
149
+ */
150
+ getByName(name: string): Workflow | undefined {
151
+ const row = this.db.prepare(
152
+ 'SELECT * FROM workflows WHERE name = ? ORDER BY updated_at DESC LIMIT 1'
153
+ ).get(name) as WorkflowRow | undefined;
154
+ if (!row) return undefined;
155
+ return rowToWorkflow(row);
156
+ }
157
+
158
+ /**
159
+ * Get a specific version of a workflow by name
160
+ */
161
+ getByNameAndVersion(name: string, version: string): Workflow | undefined {
162
+ const row = this.db.prepare(
163
+ 'SELECT * FROM workflows WHERE name = ? AND version = ?'
164
+ ).get(name, version) as WorkflowRow | undefined;
165
+ if (!row) return undefined;
166
+ return rowToWorkflow(row);
167
+ }
168
+
169
+ /**
170
+ * List workflows with optional filtering and pagination
171
+ */
172
+ list(options?: ListWorkflowsOptions): Workflow[] {
173
+ let sql = 'SELECT * FROM workflows';
174
+ const params: any[] = [];
175
+ const conditions: string[] = [];
176
+
177
+ // Filter by tag
178
+ if (options?.tag) {
179
+ conditions.push('tags LIKE ?');
180
+ params.push(`%${options.tag}%`);
181
+ }
182
+
183
+ // Filter by taskId - SQLite INTEGER comparison
184
+ if (options?.taskId !== undefined) {
185
+ conditions.push('task_id = ?');
186
+ params.push(options.taskId);
187
+ }
188
+
189
+ // Apply WHERE clause
190
+ if (conditions.length > 0) {
191
+ sql += ' WHERE ' + conditions.join(' AND ');
192
+ }
193
+
194
+ // Order by
195
+ const orderBy = options?.orderBy || 'updated_at';
196
+ const order = options?.order || 'desc';
197
+ sql += ` ORDER BY ${orderBy} ${order.toUpperCase()}`;
198
+
199
+ // Pagination
200
+ if (options?.limit !== undefined) {
201
+ sql += ' LIMIT ?';
202
+ params.push(options.limit);
203
+ }
204
+ if (options?.offset !== undefined) {
205
+ sql += ' OFFSET ?';
206
+ params.push(options.offset);
207
+ }
208
+
209
+ const rows = this.db.prepare(sql).all(...params) as WorkflowRow[];
210
+ let workflows = rows.map(rowToWorkflow);
211
+
212
+ // Apply search filter in-memory (description + tags)
213
+ if (options?.search) {
214
+ // Lazy import to avoid circular dependency
215
+ const { parseSearchQuery, matchesQuery } = require('../../session/search-query-parser');
216
+ const query = parseSearchQuery(options.search);
217
+ workflows = workflows.filter(w => {
218
+ // Search in description
219
+ const descMatch = w.description ? matchesQuery(w.description, query) : false;
220
+ // Search in tags
221
+ const tagsMatch = w.tags.some(tag => matchesQuery(tag, query));
222
+ // Match if description OR any tag matches
223
+ return descMatch || tagsMatch;
224
+ });
225
+ }
226
+
227
+ return workflows;
228
+ }
229
+
230
+ /**
231
+ * List all versions of a workflow by name
232
+ */
233
+ listVersions(name: string): Workflow[] {
234
+ const rows = this.db.prepare(
235
+ 'SELECT * FROM workflows WHERE name = ? ORDER BY version DESC'
236
+ ).all(name) as WorkflowRow[];
237
+ return rows.map(rowToWorkflow);
238
+ }
239
+
240
+ /**
241
+ * Update a workflow
242
+ */
243
+ update(id: string, updates: UpdateWorkflowOptions): Workflow | undefined {
244
+ const existing = this.getById(id);
245
+ if (!existing) return undefined;
246
+
247
+ const now = new Date().toISOString();
248
+ const setClauses: string[] = ['updated_at = ?'];
249
+ const params: any[] = [now];
250
+
251
+ if (updates.name !== undefined) {
252
+ setClauses.push('name = ?');
253
+ params.push(updates.name);
254
+ }
255
+ if (updates.version !== undefined) {
256
+ setClauses.push('version = ?');
257
+ params.push(updates.version);
258
+ }
259
+ if (updates.description !== undefined) {
260
+ setClauses.push('description = ?');
261
+ params.push(updates.description);
262
+ }
263
+ if (updates.definition !== undefined) {
264
+ setClauses.push('definition = ?');
265
+ params.push(JSON.stringify(updates.definition));
266
+ }
267
+ if (updates.config !== undefined) {
268
+ setClauses.push('config = ?');
269
+ params.push(JSON.stringify(updates.config));
270
+ }
271
+ if (updates.metadata !== undefined) {
272
+ setClauses.push('metadata = ?');
273
+ params.push(JSON.stringify(updates.metadata));
274
+ // Update task_id column if taskId is present in metadata
275
+ if (updates.metadata.taskId !== undefined) {
276
+ setClauses.push('task_id = ?');
277
+ params.push(updates.metadata.taskId);
278
+ }
279
+ }
280
+ if (updates.tags !== undefined) {
281
+ setClauses.push('tags = ?');
282
+ params.push(JSON.stringify(updates.tags));
283
+ }
284
+
285
+ params.push(id);
286
+
287
+ this.db.prepare(`UPDATE workflows SET ${setClauses.join(', ')} WHERE id = ?`).run(...params);
288
+
289
+ return this.getById(id);
290
+ }
291
+
292
+ /**
293
+ * Delete a workflow
294
+ */
295
+ delete(id: string): boolean {
296
+ const existing = this.getById(id);
297
+ if (!existing) return false;
298
+
299
+ this.db.prepare('DELETE FROM workflows WHERE id = ?').run(id);
300
+ return true;
301
+ }
302
+
303
+ /**
304
+ * Check if a workflow exists
305
+ */
306
+ exists(id: string): boolean {
307
+ const result = this.db.prepare('SELECT 1 FROM workflows WHERE id = ?').get(id);
308
+ return result !== undefined;
309
+ }
310
+
311
+ /**
312
+ * Check if a workflow with name and version exists
313
+ */
314
+ existsByNameAndVersion(name: string, version: string): boolean {
315
+ const result = this.db.prepare('SELECT 1 FROM workflows WHERE name = ? AND version = ?').get(name, version);
316
+ return result !== undefined;
317
+ }
318
+
319
+ /**
320
+ * Get total count of workflows
321
+ */
322
+ count(): number {
323
+ const result = this.db.prepare('SELECT COUNT(*) as count FROM workflows').get() as { count: number };
324
+ return result.count;
325
+ }
326
+
327
+ /**
328
+ * Search workflows by name (partial match)
329
+ */
330
+ search(query: string, limit?: number): Workflow[] {
331
+ let sql = 'SELECT * FROM workflows WHERE name LIKE ? ORDER BY updated_at DESC';
332
+ const params: any[] = [`%${query}%`];
333
+
334
+ if (limit !== undefined) {
335
+ sql += ' LIMIT ?';
336
+ params.push(limit);
337
+ }
338
+
339
+ const rows = this.db.prepare(sql).all(...params) as WorkflowRow[];
340
+ return rows.map(rowToWorkflow);
341
+ }
342
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @fileoverview AskUserTool - Tool for requesting user input in workflow
3
+ *
4
+ * When an AgentNode calls this tool, it throws AskUserError to interrupt
5
+ * the workflow, allowing the workflow to pause and wait for user response.
6
+ */
7
+
8
+ import { z } from 'zod';
9
+ import type { ToolInfo, ToolContext } from '../../tool/types';
10
+ import { AskUserError } from '../types/workflow-hil';
11
+
12
+ // ==================== Input Schema ====================
13
+
14
+ /**
15
+ * AskUserTool input schema
16
+ */
17
+ export const AskUserInputSchema = z.object({
18
+ query: z.string().describe('The question or request to ask the user'),
19
+ options: z.array(z.string()).optional().describe('Optional choices for the user'),
20
+ required_confirm: z.boolean().optional().describe('If true, user must explicitly confirm'),
21
+ });
22
+
23
+ export type AskUserInput = z.infer<typeof AskUserInputSchema>;
24
+
25
+ // ==================== Tool Definition ====================
26
+
27
+ /**
28
+ * AskUserTool
29
+ *
30
+ * A special tool that can be called by Agent to request user input.
31
+ * Calling this tool will throw AskUserError, which the Executor will
32
+ * catch and convert to a workflow pause event.
33
+ */
34
+ export type AskUserTool = ToolInfo<typeof AskUserInputSchema>;
35
+
36
+ export const askUserTool: AskUserTool = {
37
+ name: 'ask_user',
38
+ description: 'Ask user for input or confirmation. Use this tool when you need user input or validation to continue the workflow.',
39
+
40
+ parameters: AskUserInputSchema,
41
+
42
+ /**
43
+ * Execute the tool
44
+ *
45
+ * @param args - Tool arguments including query
46
+ * @param context - Tool context
47
+ * @throws AskUserError - Always throws to interrupt workflow
48
+ */
49
+ async execute(
50
+ args: AskUserInput,
51
+ context: ToolContext
52
+ ): Promise<{ success: boolean; output: string }> {
53
+ // Extract context info from metadata with fallbacks
54
+ const runId = (context.metadata?.runId as string) || 'unknown';
55
+ const sessionId = (context.metadata?.sessionId as string) || `workflow_${runId}`;
56
+ const nodeId = (context.metadata?.nodeId as string) || 'unknown';
57
+
58
+ // Build query with options if provided
59
+ let fullQuery = args.query;
60
+ if (args.options && args.options.length > 0) {
61
+ fullQuery = `${args.query} (选项: ${args.options.join(', ')})`;
62
+ }
63
+
64
+ // Throw AskUserError to interrupt workflow
65
+ throw new AskUserError(
66
+ runId,
67
+ sessionId,
68
+ nodeId,
69
+ 'agent',
70
+ fullQuery
71
+ );
72
+ },
73
+
74
+ metadata: {
75
+ category: 'workflow',
76
+ tags: ['human-in-loop', 'user-input'],
77
+ version: '1.0.0',
78
+ },
79
+ };
80
+
81
+ // Export singleton instance (alias)
82
+ export const askUserToolInstance = askUserTool;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Workflow Tools - Phase 7
3
+ *
4
+ * Export all workflow-related tools
5
+ */
6
+
7
+ // Run Workflow Tool
8
+ export {
9
+ createRunWorkflowTool,
10
+ initRunWorkflowTool,
11
+ getRunWorkflowTool,
12
+ resetRunWorkflowTool,
13
+ RunWorkflowInputSchema,
14
+ type RunWorkflowInput,
15
+ type RunWorkflowTool,
16
+ type RunWorkflowToolInterface,
17
+ } from "./run-workflow";
18
+
19
+ // Ask User Tool
20
+ export {
21
+ askUserTool,
22
+ askUserToolInstance,
23
+ AskUserInputSchema,
24
+ type AskUserTool,
25
+ type AskUserInput,
26
+ } from "./ask-user-tool";