@gt-fe/eap-runtime 0.0.8

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 (326) hide show
  1. package/README.md +323 -0
  2. package/dist/api/handlers/index.d.ts +3 -0
  3. package/dist/api/handlers/index.js +4 -0
  4. package/dist/api/handlers/invoke.handler.d.ts +77 -0
  5. package/dist/api/handlers/invoke.handler.js +411 -0
  6. package/dist/api/handlers/messages.handler.d.ts +53 -0
  7. package/dist/api/handlers/messages.handler.js +80 -0
  8. package/dist/api/handlers/stream.handler.d.ts +92 -0
  9. package/dist/api/handlers/stream.handler.js +432 -0
  10. package/dist/api/index.d.ts +3 -0
  11. package/dist/api/index.js +4 -0
  12. package/dist/api/middleware/auth.middleware.d.ts +96 -0
  13. package/dist/api/middleware/auth.middleware.js +158 -0
  14. package/dist/api/middleware/index.d.ts +1 -0
  15. package/dist/api/middleware/index.js +2 -0
  16. package/dist/api/routes/agent.routes.d.ts +44 -0
  17. package/dist/api/routes/agent.routes.js +204 -0
  18. package/dist/api/routes/index.d.ts +3 -0
  19. package/dist/api/routes/index.js +4 -0
  20. package/dist/api/routes/session.routes.d.ts +82 -0
  21. package/dist/api/routes/session.routes.js +169 -0
  22. package/dist/api/routes/task.routes.d.ts +75 -0
  23. package/dist/api/routes/task.routes.js +108 -0
  24. package/dist/checkpoint/checkpoint-serializer.d.ts +58 -0
  25. package/dist/checkpoint/checkpoint-serializer.js +81 -0
  26. package/dist/checkpoint/composite-checkpoint-saver.d.ts +42 -0
  27. package/dist/checkpoint/composite-checkpoint-saver.js +118 -0
  28. package/dist/checkpoint/contracts/checkpoint-saver.contract.d.ts +65 -0
  29. package/dist/checkpoint/contracts/checkpoint-saver.contract.js +12 -0
  30. package/dist/checkpoint/contracts/index.d.ts +1 -0
  31. package/dist/checkpoint/contracts/index.js +1 -0
  32. package/dist/checkpoint/file-checkpoint-saver.d.ts +19 -0
  33. package/dist/checkpoint/file-checkpoint-saver.js +98 -0
  34. package/dist/checkpoint/hybrid-checkpoint-saver.d.ts +130 -0
  35. package/dist/checkpoint/hybrid-checkpoint-saver.js +211 -0
  36. package/dist/checkpoint/in-memory-checkpoint-saver.d.ts +14 -0
  37. package/dist/checkpoint/in-memory-checkpoint-saver.js +46 -0
  38. package/dist/checkpoint/index.d.ts +16 -0
  39. package/dist/checkpoint/index.js +13 -0
  40. package/dist/checkpoint/mongo-checkpoint-saver.d.ts +38 -0
  41. package/dist/checkpoint/mongo-checkpoint-saver.js +56 -0
  42. package/dist/checkpoint/pg-checkpoint-saver.d.ts +59 -0
  43. package/dist/checkpoint/pg-checkpoint-saver.js +140 -0
  44. package/dist/checkpoint/redis-checkpoint-saver.d.ts +68 -0
  45. package/dist/checkpoint/redis-checkpoint-saver.js +173 -0
  46. package/dist/checkpoint/restore-checkpoint.d.ts +33 -0
  47. package/dist/checkpoint/restore-checkpoint.js +33 -0
  48. package/dist/common/agent-code.d.ts +10 -0
  49. package/dist/common/agent-code.js +12 -0
  50. package/dist/common/concurrency.d.ts +79 -0
  51. package/dist/common/concurrency.js +121 -0
  52. package/dist/common/health.d.ts +40 -0
  53. package/dist/common/health.js +37 -0
  54. package/dist/common/index.d.ts +5 -0
  55. package/dist/common/index.js +5 -0
  56. package/dist/common/logger.d.ts +34 -0
  57. package/dist/common/logger.js +38 -0
  58. package/dist/common/queue-consumer.d.ts +125 -0
  59. package/dist/common/queue-consumer.js +159 -0
  60. package/dist/common/trace-id.d.ts +2 -0
  61. package/dist/common/trace-id.js +8 -0
  62. package/dist/common/types.d.ts +104 -0
  63. package/dist/common/types.js +14 -0
  64. package/dist/contracts/index.d.ts +11 -0
  65. package/dist/contracts/index.js +10 -0
  66. package/dist/contracts/permission-checker.d.ts +10 -0
  67. package/dist/contracts/permission-checker.js +4 -0
  68. package/dist/contracts/trace-collector.d.ts +211 -0
  69. package/dist/contracts/trace-collector.js +13 -0
  70. package/dist/governance/governance-client.d.ts +38 -0
  71. package/dist/governance/governance-client.js +95 -0
  72. package/dist/governance/index.d.ts +7 -0
  73. package/dist/governance/index.js +5 -0
  74. package/dist/governance/permission-guard.d.ts +19 -0
  75. package/dist/governance/permission-guard.js +59 -0
  76. package/dist/graph/adapters/index.d.ts +3 -0
  77. package/dist/graph/adapters/index.js +3 -0
  78. package/dist/graph/adapters/langgraph-checkpointer.d.ts +40 -0
  79. package/dist/graph/adapters/langgraph-checkpointer.js +211 -0
  80. package/dist/graph/adapters/langgraph.adapter.d.ts +190 -0
  81. package/dist/graph/adapters/langgraph.adapter.js +1303 -0
  82. package/dist/graph/adapters/subgraph-compiler.d.ts +39 -0
  83. package/dist/graph/adapters/subgraph-compiler.js +248 -0
  84. package/dist/graph/condition-evaluator.d.ts +57 -0
  85. package/dist/graph/condition-evaluator.js +162 -0
  86. package/dist/graph/contracts/executable-graph.d.ts +340 -0
  87. package/dist/graph/contracts/executable-graph.js +10 -0
  88. package/dist/graph/contracts/index.d.ts +2 -0
  89. package/dist/graph/contracts/index.js +2 -0
  90. package/dist/graph/contracts/state-graph.contract.d.ts +76 -0
  91. package/dist/graph/contracts/state-graph.contract.js +11 -0
  92. package/dist/graph/hitl/hitl-handler.d.ts +199 -0
  93. package/dist/graph/hitl/hitl-handler.js +480 -0
  94. package/dist/graph/hitl/index.d.ts +1 -0
  95. package/dist/graph/hitl/index.js +1 -0
  96. package/dist/graph/index.d.ts +7 -0
  97. package/dist/graph/index.js +7 -0
  98. package/dist/graph/nodes/index.d.ts +2 -0
  99. package/dist/graph/nodes/index.js +2 -0
  100. package/dist/graph/nodes/llm-node.d.ts +182 -0
  101. package/dist/graph/nodes/llm-node.js +281 -0
  102. package/dist/graph/nodes/skill-bind-node.d.ts +32 -0
  103. package/dist/graph/nodes/skill-bind-node.js +116 -0
  104. package/dist/graph/nodes/tool-node.d.ts +75 -0
  105. package/dist/graph/nodes/tool-node.js +324 -0
  106. package/dist/graph/resolve-graph-prompt.d.ts +5 -0
  107. package/dist/graph/resolve-graph-prompt.js +75 -0
  108. package/dist/graph/retry/budget-aware-retry.d.ts +91 -0
  109. package/dist/graph/retry/budget-aware-retry.js +126 -0
  110. package/dist/graph/retry/index.d.ts +9 -0
  111. package/dist/graph/retry/index.js +8 -0
  112. package/dist/graph/retry/node-retry.d.ts +123 -0
  113. package/dist/graph/retry/node-retry.js +235 -0
  114. package/dist/graph/skill-audit-recorder.d.ts +126 -0
  115. package/dist/graph/skill-audit-recorder.js +114 -0
  116. package/dist/index.d.ts +21 -0
  117. package/dist/index.js +32 -0
  118. package/dist/memory/compression/compression-stats.d.ts +109 -0
  119. package/dist/memory/compression/compression-stats.js +144 -0
  120. package/dist/memory/compression/compression.repository.d.ts +62 -0
  121. package/dist/memory/compression/compression.repository.js +71 -0
  122. package/dist/memory/compression/index.d.ts +10 -0
  123. package/dist/memory/compression/index.js +15 -0
  124. package/dist/memory/compression/llm-summarize.d.ts +58 -0
  125. package/dist/memory/compression/llm-summarize.js +192 -0
  126. package/dist/memory/compression/sliding-window.compression.d.ts +60 -0
  127. package/dist/memory/compression/sliding-window.compression.js +175 -0
  128. package/dist/memory/index.d.ts +4 -0
  129. package/dist/memory/index.js +7 -0
  130. package/dist/memory/long-term-memory.service.d.ts +94 -0
  131. package/dist/memory/long-term-memory.service.js +120 -0
  132. package/dist/memory/message-compression.service.d.ts +128 -0
  133. package/dist/memory/message-compression.service.js +69 -0
  134. package/dist/memory/pg-memory.repository.d.ts +44 -0
  135. package/dist/memory/pg-memory.repository.js +108 -0
  136. package/dist/memory/semantic-retrieval.service.d.ts +148 -0
  137. package/dist/memory/semantic-retrieval.service.js +238 -0
  138. package/dist/providers/echo-llm-provider.d.ts +10 -0
  139. package/dist/providers/echo-llm-provider.js +87 -0
  140. package/dist/providers/http-llm-provider.d.ts +35 -0
  141. package/dist/providers/http-llm-provider.js +404 -0
  142. package/dist/providers/index.d.ts +7 -0
  143. package/dist/providers/index.js +5 -0
  144. package/dist/providers/local-llm-provider.d.ts +27 -0
  145. package/dist/providers/local-llm-provider.js +105 -0
  146. package/dist/providers/resolve-llm-model.d.ts +13 -0
  147. package/dist/providers/resolve-llm-model.js +30 -0
  148. package/dist/providers/routing-llm-provider.d.ts +28 -0
  149. package/dist/providers/routing-llm-provider.js +79 -0
  150. package/dist/registry/agent-models.d.ts +1 -0
  151. package/dist/registry/agent-models.js +1 -0
  152. package/dist/registry/agent-registry-client.d.ts +56 -0
  153. package/dist/registry/agent-registry-client.js +36 -0
  154. package/dist/registry/definition-cache.d.ts +37 -0
  155. package/dist/registry/definition-cache.js +82 -0
  156. package/dist/registry/deployment-snapshot.d.ts +99 -0
  157. package/dist/registry/deployment-snapshot.js +542 -0
  158. package/dist/registry/graph-loader.d.ts +134 -0
  159. package/dist/registry/graph-loader.js +985 -0
  160. package/dist/registry/index.d.ts +9 -0
  161. package/dist/registry/index.js +9 -0
  162. package/dist/registry/preload-errors.d.ts +13 -0
  163. package/dist/registry/preload-errors.js +35 -0
  164. package/dist/registry/preload-flags.d.ts +22 -0
  165. package/dist/registry/preload-flags.js +44 -0
  166. package/dist/registry/skill-io-guard.d.ts +25 -0
  167. package/dist/registry/skill-io-guard.js +98 -0
  168. package/dist/registry/skill-tree.d.ts +27 -0
  169. package/dist/registry/skill-tree.js +183 -0
  170. package/dist/runtime/agent-runtime.d.ts +106 -0
  171. package/dist/runtime/agent-runtime.js +777 -0
  172. package/dist/runtime/dev-runtime.d.ts +69 -0
  173. package/dist/runtime/dev-runtime.js +199 -0
  174. package/dist/runtime/index.d.ts +4 -0
  175. package/dist/runtime/index.js +3 -0
  176. package/dist/runtime/storage-profile.d.ts +50 -0
  177. package/dist/runtime/storage-profile.js +138 -0
  178. package/dist/runtime/types.d.ts +120 -0
  179. package/dist/runtime/types.js +9 -0
  180. package/dist/server.d.ts +12 -0
  181. package/dist/server.js +161 -0
  182. package/dist/session/compression-middleware.d.ts +126 -0
  183. package/dist/session/compression-middleware.js +230 -0
  184. package/dist/session/file-message.repository.d.ts +25 -0
  185. package/dist/session/file-message.repository.js +78 -0
  186. package/dist/session/file-session.repository.d.ts +72 -0
  187. package/dist/session/file-session.repository.js +212 -0
  188. package/dist/session/index.d.ts +13 -0
  189. package/dist/session/index.js +12 -0
  190. package/dist/session/message.service.d.ts +80 -0
  191. package/dist/session/message.service.js +128 -0
  192. package/dist/session/persist-turn-messages.d.ts +145 -0
  193. package/dist/session/persist-turn-messages.js +325 -0
  194. package/dist/session/pg-message.repository.d.ts +49 -0
  195. package/dist/session/pg-message.repository.js +149 -0
  196. package/dist/session/pg-session.repository.d.ts +46 -0
  197. package/dist/session/pg-session.repository.js +117 -0
  198. package/dist/session/session-context.service.d.ts +49 -0
  199. package/dist/session/session-context.service.js +66 -0
  200. package/dist/session/session.service.d.ts +194 -0
  201. package/dist/session/session.service.js +166 -0
  202. package/dist/sse/connection-event-logger.d.ts +21 -0
  203. package/dist/sse/connection-event-logger.js +33 -0
  204. package/dist/sse/contracts/index.d.ts +1 -0
  205. package/dist/sse/contracts/index.js +1 -0
  206. package/dist/sse/contracts/sse-emitter.contract.d.ts +74 -0
  207. package/dist/sse/contracts/sse-emitter.contract.js +11 -0
  208. package/dist/sse/event-buffer.d.ts +20 -0
  209. package/dist/sse/event-buffer.js +45 -0
  210. package/dist/sse/events/code-events.d.ts +19 -0
  211. package/dist/sse/events/code-events.js +9 -0
  212. package/dist/sse/events/collaboration-events.d.ts +37 -0
  213. package/dist/sse/events/collaboration-events.js +11 -0
  214. package/dist/sse/events/connection-events.d.ts +13 -0
  215. package/dist/sse/events/connection-events.js +9 -0
  216. package/dist/sse/events/file-events.d.ts +29 -0
  217. package/dist/sse/events/file-events.js +10 -0
  218. package/dist/sse/events/hitl-events.d.ts +33 -0
  219. package/dist/sse/events/hitl-events.js +10 -0
  220. package/dist/sse/events/index.d.ts +107 -0
  221. package/dist/sse/events/index.js +96 -0
  222. package/dist/sse/events/plan-events.d.ts +38 -0
  223. package/dist/sse/events/plan-events.js +11 -0
  224. package/dist/sse/events/reasoning-events.d.ts +35 -0
  225. package/dist/sse/events/reasoning-events.js +13 -0
  226. package/dist/sse/events/response-events.d.ts +25 -0
  227. package/dist/sse/events/response-events.js +12 -0
  228. package/dist/sse/events/session-events.d.ts +43 -0
  229. package/dist/sse/events/session-events.js +12 -0
  230. package/dist/sse/events/skill-events.d.ts +48 -0
  231. package/dist/sse/events/skill-events.js +11 -0
  232. package/dist/sse/events/stats-events.d.ts +44 -0
  233. package/dist/sse/events/stats-events.js +12 -0
  234. package/dist/sse/events/tool-events.d.ts +68 -0
  235. package/dist/sse/events/tool-events.js +14 -0
  236. package/dist/sse/index.d.ts +8 -0
  237. package/dist/sse/index.js +8 -0
  238. package/dist/sse/sse-connection-manager.d.ts +116 -0
  239. package/dist/sse/sse-connection-manager.js +185 -0
  240. package/dist/sse/sse-emitter.d.ts +108 -0
  241. package/dist/sse/sse-emitter.js +210 -0
  242. package/dist/sse/sse-heartbeat.d.ts +58 -0
  243. package/dist/sse/sse-heartbeat.js +76 -0
  244. package/dist/sse/trace-collector.d.ts +60 -0
  245. package/dist/sse/trace-collector.js +107 -0
  246. package/dist/task/contracts/index.d.ts +2 -0
  247. package/dist/task/contracts/index.js +1 -0
  248. package/dist/task/contracts/task-manager.contract.d.ts +160 -0
  249. package/dist/task/contracts/task-manager.contract.js +10 -0
  250. package/dist/task/index.d.ts +7 -0
  251. package/dist/task/index.js +5 -0
  252. package/dist/task/pg-task.repository.d.ts +47 -0
  253. package/dist/task/pg-task.repository.js +131 -0
  254. package/dist/task/task-progress-tracker.d.ts +67 -0
  255. package/dist/task/task-progress-tracker.js +80 -0
  256. package/dist/task/task-timeout.d.ts +70 -0
  257. package/dist/task/task-timeout.js +116 -0
  258. package/dist/task/task.service.d.ts +84 -0
  259. package/dist/task/task.service.js +233 -0
  260. package/dist/token/compression-budget-integration.d.ts +145 -0
  261. package/dist/token/compression-budget-integration.js +185 -0
  262. package/dist/token/context-window-budget.d.ts +113 -0
  263. package/dist/token/context-window-budget.js +134 -0
  264. package/dist/token/contracts/index.d.ts +1 -0
  265. package/dist/token/contracts/index.js +1 -0
  266. package/dist/token/contracts/token-budget.contract.d.ts +77 -0
  267. package/dist/token/contracts/token-budget.contract.js +11 -0
  268. package/dist/token/index.d.ts +12 -0
  269. package/dist/token/index.js +10 -0
  270. package/dist/token/pg-token-budget.repository.d.ts +39 -0
  271. package/dist/token/pg-token-budget.repository.js +116 -0
  272. package/dist/token/session-budget-checker.d.ts +54 -0
  273. package/dist/token/session-budget-checker.js +72 -0
  274. package/dist/token/token-budget-guard.d.ts +66 -0
  275. package/dist/token/token-budget-guard.js +97 -0
  276. package/dist/token/token-budget.service.d.ts +86 -0
  277. package/dist/token/token-budget.service.js +130 -0
  278. package/dist/token/token-detail-mode.d.ts +73 -0
  279. package/dist/token/token-detail-mode.js +107 -0
  280. package/dist/token/token-estimator.d.ts +80 -0
  281. package/dist/token/token-estimator.js +134 -0
  282. package/dist/token/token-stats.service.d.ts +88 -0
  283. package/dist/token/token-stats.service.js +94 -0
  284. package/dist/tool/create-tool-executor.d.ts +33 -0
  285. package/dist/tool/create-tool-executor.js +60 -0
  286. package/dist/tool/dev-http-executor.d.ts +18 -0
  287. package/dist/tool/dev-http-executor.js +96 -0
  288. package/dist/tool/dev-mcp-executor.d.ts +29 -0
  289. package/dist/tool/dev-mcp-executor.js +84 -0
  290. package/dist/tool/dev-tool-executor.d.ts +23 -0
  291. package/dist/tool/dev-tool-executor.js +55 -0
  292. package/dist/tool/file-artifact.d.ts +11 -0
  293. package/dist/tool/file-artifact.js +90 -0
  294. package/dist/tool/http-tool-executor.d.ts +17 -0
  295. package/dist/tool/http-tool-executor.js +158 -0
  296. package/dist/tool/index.d.ts +18 -0
  297. package/dist/tool/index.js +17 -0
  298. package/dist/tool/loaded-tool-definition.d.ts +35 -0
  299. package/dist/tool/loaded-tool-definition.js +9 -0
  300. package/dist/tool/local-mcp-client.d.ts +23 -0
  301. package/dist/tool/local-mcp-client.js +225 -0
  302. package/dist/tool/local-tool-executor.d.ts +37 -0
  303. package/dist/tool/local-tool-executor.js +249 -0
  304. package/dist/tool/mcp-tool-executor.d.ts +23 -0
  305. package/dist/tool/mcp-tool-executor.js +160 -0
  306. package/dist/tool/mock-tool-executor.d.ts +28 -0
  307. package/dist/tool/mock-tool-executor.js +65 -0
  308. package/dist/tool/system-prompt-builder.d.ts +114 -0
  309. package/dist/tool/system-prompt-builder.js +213 -0
  310. package/dist/tool/tool-confirmation.d.ts +29 -0
  311. package/dist/tool/tool-confirmation.js +81 -0
  312. package/dist/tool/tool-event-emitter.d.ts +58 -0
  313. package/dist/tool/tool-event-emitter.js +154 -0
  314. package/dist/tool/tool-execution-router.d.ts +25 -0
  315. package/dist/tool/tool-execution-router.js +50 -0
  316. package/dist/tool/tool-executor.interface.d.ts +85 -0
  317. package/dist/tool/tool-executor.interface.js +7 -0
  318. package/dist/tool/tool-orchestrator.d.ts +22 -0
  319. package/dist/tool/tool-orchestrator.js +104 -0
  320. package/dist/tool/tool-result-injector.d.ts +64 -0
  321. package/dist/tool/tool-result-injector.js +65 -0
  322. package/dist/utils/format-error.d.ts +4 -0
  323. package/dist/utils/format-error.js +4 -0
  324. package/dist/utils/http-error.d.ts +11 -0
  325. package/dist/utils/http-error.js +24 -0
  326. package/package.json +56 -0
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Executable Graph 类型定义
3
+ *
4
+ * 定义 Graph 引擎核心的可执行图、DSL、节点、边等类型。
5
+ * 与 @gt-fe/eap-contracts 的 GraphDSL 基础类型互补,在 Runtime 层提供更丰富的类型支持。
6
+ *
7
+ * @see design.md §1.4 StateGraph Contract
8
+ * @see requirements.md Requirement 1 AC1-AC2
9
+ */
10
+ import type { GraphDSL as BaseGraphDSL, GraphNode as BaseGraphNode, GraphEdge as BaseGraphEdge, GraphNodeType, GraphConfig } from '@gt-fe/eap-contracts';
11
+ export type { GraphNodeType, GraphConfig };
12
+ /**
13
+ * RuntimeGraphConfig — Runtime 层扩展的 Graph 配置
14
+ *
15
+ * 在 @gt-fe/eap-contracts GraphConfig 基础上增加 Runtime 执行所需的 maxRetries。
16
+ */
17
+ export interface RuntimeGraphConfig extends GraphConfig {
18
+ /** Graph 级默认重试次数(节点级 retry 可覆盖) */
19
+ maxRetries?: number;
20
+ }
21
+ /**
22
+ * GraphNode — Runtime 层扩展的节点定义
23
+ *
24
+ * 继承 @gt-fe/eap-contracts 基础 GraphNode,增加 Runtime 执行所需的字段:
25
+ * - 重试配置(节点级 maxRetries + 退避策略)
26
+ * - HITL 标记(interrupt_before / interrupt_after)
27
+ * - 描述信息(调试/Trace 用)
28
+ */
29
+ export interface GraphNode extends BaseGraphNode {
30
+ /** 节点显示名称(调试/Trace 用) */
31
+ label?: string;
32
+ /** 节点描述 */
33
+ description?: string;
34
+ /** 节点级重试配置(覆盖 GraphConfig.maxRetries) */
35
+ retry?: NodeRetryConfig;
36
+ /** HITL 中断策略 */
37
+ interrupt?: NodeInterruptConfig;
38
+ /** 子图引用 ID(type=subgraph 时必填) */
39
+ subgraphId?: string;
40
+ /** 并行分支定义(type=parallel 时使用) */
41
+ branches?: string[];
42
+ }
43
+ /**
44
+ * GraphEdge — 基础边定义
45
+ *
46
+ * 从源节点到目标节点的连接,可选条件表达式。
47
+ */
48
+ export interface GraphEdge extends BaseGraphEdge {
49
+ /** 边的优先级(多条出边时决定评估顺序) */
50
+ priority?: number;
51
+ }
52
+ /**
53
+ * ConditionalEdge — 条件路由边
54
+ *
55
+ * 对应 LangGraph 的 addConditionalEdges,根据运行时状态动态选择目标节点。
56
+ * 支持多分支路由和 fallback 默认路径。
57
+ */
58
+ export interface ConditionalEdge {
59
+ /** 条件路由的源节点 ID */
60
+ from: string;
61
+ /** 条件分支列表 */
62
+ branches: ConditionalBranch[];
63
+ /** 条件判断函数名或表达式(DSL 中声明) */
64
+ conditionFn?: string;
65
+ /** 无分支匹配时的默认目标节点 */
66
+ fallback?: string;
67
+ }
68
+ /**
69
+ * ConditionalBranch — 条件分支定义
70
+ */
71
+ export interface ConditionalBranch {
72
+ /** 分支匹配值(conditionFn 返回此值时走此分支) */
73
+ value: string;
74
+ /** 目标节点 ID */
75
+ to: string;
76
+ /** 分支描述(调试用) */
77
+ description?: string;
78
+ }
79
+ /**
80
+ * GraphDSL — Runtime 层扩展的声明式工作流定义
81
+ *
82
+ * 扩展 @gt-fe/eap-contracts 的 BaseGraphDSL,增加条件路由、入口/终止节点等。
83
+ */
84
+ export interface GraphDSL extends Omit<BaseGraphDSL, 'config' | 'nodes' | 'edges'> {
85
+ /** 覆盖节点类型为 Runtime 扩展版本 */
86
+ nodes: GraphNode[];
87
+ /** 覆盖边类型为 Runtime 扩展版本 */
88
+ edges: GraphEdge[];
89
+ /** Runtime 扩展配置(含 maxRetries) */
90
+ config?: RuntimeGraphConfig;
91
+ /** 条件路由边列表(addConditionalEdges) */
92
+ conditionalEdges?: ConditionalEdge[];
93
+ /** 入口节点 ID(默认为 __start__) */
94
+ entryPoint?: string;
95
+ /** 终止节点 ID 列表(默认为 __end__) */
96
+ finishPoints?: string[];
97
+ /** Graph 描述信息 */
98
+ description?: string;
99
+ }
100
+ /**
101
+ * NodeRetryConfig — 节点重试配置
102
+ *
103
+ * LLM 节点默认 3 次重试 + 指数退避。
104
+ * @see design.md Issue#1: 两级重试
105
+ */
106
+ export interface NodeRetryConfig {
107
+ /** 最大重试次数(默认 3) */
108
+ maxRetries: number;
109
+ /** 退避策略 */
110
+ backoff?: BackoffStrategy;
111
+ }
112
+ /** 退避策略 */
113
+ export interface BackoffStrategy {
114
+ /** 策略类型 */
115
+ type: 'exponential' | 'linear' | 'fixed';
116
+ /** 基础延迟(毫秒,默认 1000) */
117
+ baseDelay: number;
118
+ /** 最大延迟(毫秒,默认 30000) */
119
+ maxDelay: number;
120
+ /** 抖动因子(0-1,减少惊群效应) */
121
+ jitter?: number;
122
+ }
123
+ /**
124
+ * NodeInterruptConfig — 节点 HITL 中断配置
125
+ */
126
+ export interface NodeInterruptConfig {
127
+ /** 在节点执行前暂停 */
128
+ before?: boolean;
129
+ /** 在节点执行后暂停 */
130
+ after?: boolean;
131
+ /** 暂停时展示给用户的问题 */
132
+ question?: string;
133
+ /** 用户可选项 */
134
+ options?: string[];
135
+ /** 等待超时(毫秒) */
136
+ timeout?: number;
137
+ }
138
+ /** 图执行状态 */
139
+ export type GraphExecutionStatus = 'idle' | 'running' | 'paused' | 'completed' | 'failed';
140
+ /**
141
+ * ExecutableGraph — buildGraph 编译后的可执行图
142
+ *
143
+ * 封装已注册节点、边、条件路由等完整执行信息。
144
+ * 具体内部结构由底层引擎决定,上层只通过 Contract 方法操作。
145
+ */
146
+ export interface ExecutableGraph {
147
+ /** 图的唯一标识 */
148
+ id: string;
149
+ /** 图名称(来自 DSL) */
150
+ name: string;
151
+ /** 图的当前执行状态 */
152
+ status: GraphExecutionStatus;
153
+ /** 已注册的节点 ID 列表 */
154
+ nodeIds: string[];
155
+ /** 入口节点 ID */
156
+ entryPoint: string;
157
+ /** 终止节点 ID 列表 */
158
+ finishPoints: string[];
159
+ /** 关联的原始 DSL 版本号 */
160
+ dslVersion: string;
161
+ /** 编译时间 (ISO 8601) */
162
+ compiledAt: string;
163
+ /** 底层引擎内部实例引用(opaque,由 adapter 管理) */
164
+ _engineInstance?: unknown;
165
+ }
166
+ import type { ExecutionContext as PlatformExecutionContext } from '@gt-fe/eap-contracts';
167
+ /**
168
+ * GraphState — 传入 stream/invoke 的上下文数据
169
+ */
170
+ export interface GraphState {
171
+ messages: GraphMessage[];
172
+ userId: string;
173
+ delegationToken?: string;
174
+ /** @deprecated 使用 agentCode;仅作旧 Checkpoint 恢复双读兜底,新代码不再写入 */
175
+ agentId?: string;
176
+ /** Agent 对外主键 */
177
+ agentCode?: string;
178
+ /** Hosting 路由选定的预装版本(AR-3b;写入 Checkpoint 供 HITL/Fork 恢复) */
179
+ agentVersion?: string;
180
+ correlationId?: string;
181
+ taskId?: string;
182
+ /** 平台执行上下文(06 R16 / 04 R15) */
183
+ executionContext?: PlatformExecutionContext;
184
+ /** ExecuteConfig.forceToolServer — 单次 invoke 强制走 Gateway 的 toolName */
185
+ forceToolServer?: string[];
186
+ /** GraphLoader 注入:toolName → 运行期 manifest 引用 */
187
+ loadedTools?: import('../../tool/loaded-tool-definition.js').LoadedToolMap;
188
+ /** GraphLoader 注入:已装配 Skill 列表(兼容) */
189
+ loadedSkills?: import('../../tool/system-prompt-builder.js').LoadedSkillInfo[];
190
+ /** GraphLoader 注入:skillId → 完整定义(子图解析 / prompt) */
191
+ skillDefinitions?: import('../../tool/system-prompt-builder.js').LoadedSkillMap;
192
+ /** 当前子图 / 已绑定技能提示词(按 skillId 注入,入口 LLM 读取) */
193
+ activeSkillPrompt?: string;
194
+ /** silent LLM 的原始输出;不入对话 messages */
195
+ silentOutput?: string;
196
+ /** @deprecated 同 silentOutput,兼容旧图 */
197
+ skillSelectRaw?: string;
198
+ /** 解析 graph 内 ./prompts/*.md 的根目录(agentDir + 工程根) */
199
+ promptRoots?: string[];
200
+ activatedSkill?: string | null;
201
+ skillRoute?: string;
202
+ /** bind / invoke 解析出的 Skill 入参;子图 IO 校验读取 */
203
+ skillInput?: Record<string, unknown>;
204
+ /** Hosting 已建 Trace id(与 Foundation traces.id 同值) */
205
+ traceId?: string;
206
+ /** Trace 采集器(RT-7;不入 Checkpoint 序列化语义) */
207
+ traceCollector?: import('../../contracts/trace-collector.js').ITraceCollector;
208
+ /** 当前 Skill 子图 createNode 返回的 span id;子图内 Tool span 的 parentNodeId */
209
+ skillSpanId?: string;
210
+ /**
211
+ * HITL 续跑:入口 messages 以 __set 覆盖 checkpoint 历史,避免 append 重复。
212
+ * 仅 stream/invoke 入口使用,不入持久化语义。
213
+ */
214
+ replaceCheckpointMessages?: boolean;
215
+ [key: string]: unknown;
216
+ }
217
+ /** Graph 内部消息格式 */
218
+ export interface GraphMessage {
219
+ role: 'user' | 'assistant' | 'system' | 'tool';
220
+ content: string;
221
+ toolCalls?: ToolCallInfo[];
222
+ /** tool 角色消息的工具名称(由 adapter 填充) */
223
+ toolName?: string;
224
+ /** tool 角色消息对应的 tool call ID */
225
+ toolCallId?: string;
226
+ /** tool 执行是否成功 */
227
+ success?: boolean;
228
+ /**
229
+ * DeepSeek 等 thinking 模式的 reasoning_content。
230
+ * 多轮请求必须原样回传,否则上游会 400。
231
+ */
232
+ reasoningContent?: string;
233
+ /** 工具产出的文件;仅 Runtime 发 file.created,不进模型正文 */
234
+ file?: {
235
+ fileName: string;
236
+ fileType: string;
237
+ size: number;
238
+ url: string;
239
+ };
240
+ }
241
+ /** Tool 调用信息 */
242
+ export interface ToolCallInfo {
243
+ id: string;
244
+ name: string;
245
+ arguments: Record<string, unknown>;
246
+ }
247
+ /**
248
+ * RuntimeEvent — stream 方法产出的事件流元素
249
+ *
250
+ * 对应 SSE 事件协议中的各类事件(约 30 种),
251
+ * 由 Contract stream 方法 yield,经 SSE Emitter 推送给客户端。
252
+ */
253
+ export interface RuntimeEvent {
254
+ /** 事件类型(如 response.chunk, tool.called 等) */
255
+ type: string;
256
+ /** 关联的 Task ID */
257
+ taskId?: string;
258
+ /** 请求关联 ID */
259
+ correlationId?: string;
260
+ /** 事件时间戳 (ISO 8601) */
261
+ timestamp: string;
262
+ /** 事件负载 */
263
+ payload: Record<string, unknown>;
264
+ }
265
+ /**
266
+ * CheckpointData — 图执行状态的可持久化快照
267
+ /**
268
+ * 包含恢复执行所需的全部信息:当前节点、历史路径、完整 State。
269
+ */
270
+ export interface CheckpointData {
271
+ /** Checkpoint 唯一 ID */
272
+ checkpointId: string;
273
+ /** 所属线程 ID(一个 Task 对应一个 thread) */
274
+ threadId: string;
275
+ /** 暂停时所在的节点 ID */
276
+ currentNodeId: string;
277
+ /** 已执行的节点历史路径 */
278
+ historyPath: string[];
279
+ /** 完整的 Graph State 快照 */
280
+ state: GraphState;
281
+ /**
282
+ * LangGraph 引擎原生 Checkpoint 快照(含 pending_sends / channel_versions 等)。
283
+ * 回读时优先使用,避免同 thread 多轮出现 `pending_sends is not iterable`。
284
+ */
285
+ engineSnapshot?: Record<string, unknown>;
286
+ /** 创建人 */
287
+ createdBy: string;
288
+ /** 快照创建时间 (ISO 8601) */
289
+ createdAt: string;
290
+ /** 最后更新人 */
291
+ updatedBy: string;
292
+ /** 最后更新时间 (ISO 8601) */
293
+ updatedAt: string;
294
+ /** 是否删除(软删除标记) */
295
+ isDeleted: boolean;
296
+ /** 删除人 */
297
+ deletedBy?: string | null;
298
+ /** 删除时间 (ISO 8601) */
299
+ deletedAt?: string | null;
300
+ }
301
+ /**
302
+ * GraphResult — invoke 方法的返回值
303
+ *
304
+ * 同步调用结束后返回的完整结果。
305
+ */
306
+ export interface GraphResult {
307
+ /** 最终输出内容 */
308
+ output: string;
309
+ /** 执行结束后的完整 State */
310
+ finalState: GraphState;
311
+ /** 本次执行的 Token 消耗汇总 */
312
+ tokenUsage: GraphTokenUsage;
313
+ /** 执行耗时(毫秒) */
314
+ duration: number;
315
+ }
316
+ /** Graph 级 Token 消耗汇总
317
+ *
318
+ * - input/output/total:单次 invoke/stream 请求内所有 LLM 轮次的累计消耗
319
+ * - perNode:按 LLM 节点维度的明细数组(每次 LLM 调用一条)
320
+ * - conversationTotal(可选):当前会话(跨请求)累计消耗,由 session 层服务填充
321
+ */
322
+ export interface GraphTokenUsage {
323
+ input: number;
324
+ output: number;
325
+ total: number;
326
+ /** 每个 LLM 节点的 token 明细(多轮对话会有多条) */
327
+ perNode?: Array<{
328
+ nodeId: string;
329
+ model: string;
330
+ inputTokens: number;
331
+ outputTokens: number;
332
+ }>;
333
+ /** 当前会话跨请求累计消耗(可选;由 session 层服务填充) */
334
+ conversationTotal?: {
335
+ input: number;
336
+ output: number;
337
+ total: number;
338
+ };
339
+ }
340
+ export type { IStateGraphEngine } from './state-graph.contract.js';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Executable Graph 类型定义
3
+ *
4
+ * 定义 Graph 引擎核心的可执行图、DSL、节点、边等类型。
5
+ * 与 @gt-fe/eap-contracts 的 GraphDSL 基础类型互补,在 Runtime 层提供更丰富的类型支持。
6
+ *
7
+ * @see design.md §1.4 StateGraph Contract
8
+ * @see requirements.md Requirement 1 AC1-AC2
9
+ */
10
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './executable-graph.js';
2
+ export * from './state-graph.contract.js';
@@ -0,0 +1,2 @@
1
+ export * from './executable-graph.js';
2
+ export * from './state-graph.contract.js';
@@ -0,0 +1,76 @@
1
+ /**
2
+ * StateGraph Contract — 平台 Graph 引擎抽象接口
3
+ *
4
+ * 定义 Graph 执行引擎的核心 Contract,确保底层引擎可插拔替换。
5
+ * v1 实现使用 LangGraph.js(见 adapters/langgraph.adapter.ts),
6
+ * 后续可替换为其他 Graph 引擎,只需实现本接口即可。
7
+ *
8
+ * @see requirements.md Requirement 1 AC5
9
+ * @see design.md §1.4 StateGraph Contract
10
+ */
11
+ import type { ExecutableGraph, GraphDSL, GraphState, RuntimeEvent, CheckpointData, GraphResult } from './executable-graph.js';
12
+ export type { ExecutableGraph, GraphDSL, GraphState, GraphMessage, ToolCallInfo, RuntimeEvent, CheckpointData, GraphResult, GraphTokenUsage, GraphExecutionStatus, } from './executable-graph.js';
13
+ /**
14
+ * IStateGraphEngine — StateGraph 引擎 Contract
15
+ *
16
+ * 平台 Graph 执行引擎的抽象接口。所有 Graph 引擎实现(LangGraph.js、自研引擎等)
17
+ * 必须实现此接口,以保证底层引擎可插拔替换。
18
+ *
19
+ * 核心方法:
20
+ * - buildGraph: 将声明式 DSL 编译为可执行图
21
+ * - stream: 流式驱动图执行,逐步产出事件
22
+ * - invoke: 同步执行,等待完整结果
23
+ * - checkpoint: 从运行中的图提取状态快照
24
+ * - restore: 从快照恢复图执行
25
+ */
26
+ export interface IStateGraphEngine {
27
+ /**
28
+ * 解析 Graph DSL 并构建可执行图
29
+ *
30
+ * 将 YAML/JSON 声明式工作流定义编译为引擎可执行的内部表示,
31
+ * 包括注册节点函数、添加边和条件路由、配置 Checkpoint 等。
32
+ *
33
+ * @param dsl - Graph DSL 定义(来自 graph.yaml 或 graph.json)
34
+ * @returns 编译后的可执行图实例
35
+ */
36
+ buildGraph(dsl: GraphDSL): Promise<ExecutableGraph>;
37
+ /**
38
+ * 流式驱动图执行,实时产出各节点的执行事件
39
+ *
40
+ * 以 AsyncIterableIterator 方式逐步 yield 事件(供 SSE/Trace 采集),
41
+ * 直到图到达终止节点或被中断。
42
+ *
43
+ * @param graph - 已构建的可执行图
44
+ * @param state - 初始执行状态(含消息历史、用户上下文等)
45
+ * @returns 异步可迭代的事件流
46
+ */
47
+ stream(graph: ExecutableGraph, state: GraphState): AsyncIterableIterator<RuntimeEvent>;
48
+ /**
49
+ * 同步调用图执行,等待完整结果返回
50
+ *
51
+ * 适用于简单任务场景,阻塞等待图执行完毕后返回最终结果。
52
+ *
53
+ * @param graph - 已构建的可执行图
54
+ * @param state - 初始执行状态
55
+ * @returns 执行结果(含 output、finalState、tokenUsage)
56
+ */
57
+ invoke(graph: ExecutableGraph, state: GraphState): Promise<GraphResult>;
58
+ /**
59
+ * 从运行中的图提取 Checkpoint(状态快照)
60
+ *
61
+ * 用于 HITL 暂停、断线恢复等场景,将当前执行进度持久化。
62
+ *
63
+ * @param graph - 当前运行中的可执行图
64
+ * @returns Checkpoint 数据(含当前节点、历史路径、完整 State)
65
+ */
66
+ checkpoint(graph: ExecutableGraph): CheckpointData;
67
+ /**
68
+ * 从 Checkpoint 数据恢复可执行图
69
+ *
70
+ * 供断点恢复、HITL 继续、Replay/Fork(05-Trace 模块)等场景使用。
71
+ *
72
+ * @param checkpointData - 之前保存的 Checkpoint 快照
73
+ * @returns 恢复后的可执行图,可继续执行
74
+ */
75
+ restore(checkpointData: CheckpointData): Promise<ExecutableGraph>;
76
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * StateGraph Contract — 平台 Graph 引擎抽象接口
3
+ *
4
+ * 定义 Graph 执行引擎的核心 Contract,确保底层引擎可插拔替换。
5
+ * v1 实现使用 LangGraph.js(见 adapters/langgraph.adapter.ts),
6
+ * 后续可替换为其他 Graph 引擎,只需实现本接口即可。
7
+ *
8
+ * @see requirements.md Requirement 1 AC5
9
+ * @see design.md §1.4 StateGraph Contract
10
+ */
11
+ export {};
@@ -0,0 +1,199 @@
1
+ /**
2
+ * HITL (Human-In-The-Loop) Handler
3
+ *
4
+ * 实现人工介入的中断、恢复、超时逻辑。
5
+ * 当 Graph 到达 HITL 节点时暂停执行,等待人工确认后继续。
6
+ *
7
+ * 超时不得在 setTimeout 回调里 throw(会变成未捕获异常);
8
+ * 由 AgentRuntime 监听器关 Task / Span。deadline 写入 Checkpoint,冷恢复可校验。
9
+ *
10
+ * @see design.md §1.6 hitl.waiting / hitl.resumed 事件
11
+ * @see tasks.md Task 14
12
+ */
13
+ import type { ICheckpointSaver } from '../../checkpoint/contracts/checkpoint-saver.contract.js';
14
+ import type { ISSEEmitter } from '../../sse/contracts/sse-emitter.contract.js';
15
+ import type { GraphState } from '../contracts/executable-graph.js';
16
+ /** HITL 默认等待时长(毫秒)= 300 秒。SSE `hitl.waited.timeout` 对外用秒。 */
17
+ export declare const DEFAULT_HITL_TIMEOUT_MS = 300000;
18
+ /** HITL 超时行为 */
19
+ export type HitlTimeoutBehavior = 'error' | 'cancel' | 'auto-confirm';
20
+ /** HITL 中断配置 */
21
+ export interface HitlInterruptConfig {
22
+ /** 展示给用户的确认问题 */
23
+ question: string;
24
+ /** 可选项列表 */
25
+ options: string[];
26
+ /** 等待超时(毫秒),默认 300000 (5min) */
27
+ timeout?: number;
28
+ /** 超时后执行的行为,默认 error */
29
+ timeoutBehavior?: HitlTimeoutBehavior;
30
+ /** 超时自动确认时使用的默认选项 */
31
+ defaultOption?: string;
32
+ }
33
+ /** interrupt 时附带的 Tool/Span 对账信息(确认类 Tool 路径) */
34
+ export interface HitlInterruptExtras {
35
+ toolCallId?: string;
36
+ toolName?: string;
37
+ toolSpanId?: string;
38
+ skillSpanId?: string;
39
+ }
40
+ /** HITL 等待中状态(内存中维护) */
41
+ export interface HitlWaitingState {
42
+ taskId: string;
43
+ threadId: string;
44
+ config: HitlInterruptConfig;
45
+ /** 超时定时器引用 */
46
+ timer: ReturnType<typeof setTimeout> | null;
47
+ /** 中断时间 */
48
+ interruptedAt: string;
49
+ deadlineAt: string;
50
+ toolCallId?: string;
51
+ toolName?: string;
52
+ toolSpanId?: string;
53
+ skillSpanId?: string;
54
+ }
55
+ /** HITL 超时错误(保留类型;timer 不再 throw,resume 逾期改走 AppError) */
56
+ export declare class HitlTimeoutError extends Error {
57
+ readonly taskId: string;
58
+ readonly timeoutMs: number;
59
+ constructor(taskId: string, timeoutMs: number);
60
+ }
61
+ /** Checkpoint 已标记超时,禁止再 resume */
62
+ export declare class HitlAlreadyTimedOutError extends Error {
63
+ readonly taskId: string;
64
+ constructor(taskId: string);
65
+ }
66
+ /** 内存与 Checkpoint 都没有等待态(已被 resume/timeout 抢走) */
67
+ export declare class HitlNotWaitingError extends Error {
68
+ readonly taskId: string;
69
+ constructor(taskId: string);
70
+ }
71
+ export declare function isHitlDecision(choice: unknown): choice is 'confirm' | 'reject';
72
+ /** 最后一条 assistant 仍有未配对的 toolCalls(HITL 暂停后尚未 result/error) */
73
+ export declare function lastAssistantHasUnansweredToolCalls(messages: Array<{
74
+ role?: string;
75
+ toolCalls?: Array<{
76
+ id?: string;
77
+ }>;
78
+ toolCallId?: string;
79
+ }>): boolean;
80
+ /**
81
+ * HITL 已中断、等待外部 resume(非阻塞)
82
+ *
83
+ * Tool 确认节点 interrupt 后抛出本错误,由 invoke/stream 捕获并返回 waiting_hitl,
84
+ * 客户端再通过 POST .../hitl 或 streamResumeHitl 继续。
85
+ */
86
+ export declare class HitlPausedError extends Error {
87
+ readonly taskId: string;
88
+ readonly threadId: string;
89
+ readonly question: string;
90
+ readonly options: string[];
91
+ readonly toolCallId?: string | undefined;
92
+ readonly toolName?: string | undefined;
93
+ readonly timeoutMs: number;
94
+ toolSpanId?: string;
95
+ skillSpanId?: string;
96
+ constructor(taskId: string, threadId: string, question: string, options: string[], toolCallId?: string | undefined, toolName?: string | undefined, timeoutMs?: number);
97
+ }
98
+ /**
99
+ * 向上解包 HitlPausedError(LangGraph / Promise 可能挂在 `.cause`)
100
+ */
101
+ export declare function unwrapHitlPaused(error: unknown): HitlPausedError | null;
102
+ /** Checkpoint state 中持久化的 HITL 等待元数据(进程重启 / 无内存 Map 时冷恢复) */
103
+ export declare const HITL_WAITING_STATE_KEY = "__hitlWaiting";
104
+ export interface PersistedHitlWaiting {
105
+ taskId: string;
106
+ threadId: string;
107
+ config: HitlInterruptConfig;
108
+ interruptedAt: string;
109
+ /** ISO;超过后 resume 拒绝,按 timeoutBehavior 收口 */
110
+ deadlineAt: string;
111
+ toolCallId?: string;
112
+ toolName?: string;
113
+ toolSpanId?: string;
114
+ skillSpanId?: string;
115
+ /** error/cancel 超时已占用此等待;resume 必须拒绝 */
116
+ timedOut?: boolean;
117
+ }
118
+ /** 超时回调(AgentRuntime 注册:关 Task / Span,或 auto-confirm 续跑) */
119
+ export interface HitlTimeoutEvent {
120
+ taskId: string;
121
+ threadId: string;
122
+ behavior: HitlTimeoutBehavior;
123
+ timeoutMs: number;
124
+ question: string;
125
+ options: string[];
126
+ defaultChoice?: string;
127
+ toolCallId?: string;
128
+ toolName?: string;
129
+ toolSpanId?: string;
130
+ skillSpanId?: string;
131
+ }
132
+ export type HitlTimeoutListener = (event: HitlTimeoutEvent) => Promise<void>;
133
+ export declare function toHitlTimeoutMs(timeoutMs?: number): number;
134
+ /** SSE `hitl.waited.data.timeout`:秒 */
135
+ export declare function toHitlTimeoutSeconds(timeoutMs?: number): number;
136
+ export declare function isHitlDeadlinePassed(persisted: Pick<PersistedHitlWaiting, 'deadlineAt'> | undefined, now?: number): boolean;
137
+ export declare function readPersistedHitlWaiting(state: unknown): PersistedHitlWaiting | undefined;
138
+ /** 门面 stream / HTTP StreamOrchestrator / streamResumeHitl 共用 */
139
+ export declare function buildHitlWaitedPayload(paused: HitlPausedError): {
140
+ question: string;
141
+ options: string[];
142
+ threadId: string;
143
+ timeout: number;
144
+ toolCallId?: string;
145
+ toolName?: string;
146
+ };
147
+ /**
148
+ * HitlHandler — 管理 HITL 中断/恢复/超时
149
+ *
150
+ * 职责:
151
+ * - interrupt: 保存 checkpoint + 发射 hitl.waiting + 启动超时计时
152
+ * - resume: 加载 checkpoint + 注入用户选择 + 发射 hitl.resumed
153
+ * - handleTimeout: 不 throw;回调 listener(error/cancel 收口,auto-confirm 续跑)
154
+ */
155
+ export declare class HitlHandler {
156
+ private readonly checkpointSaver;
157
+ private readonly sseEmitter;
158
+ /** taskId → waiting state */
159
+ private waitingTasks;
160
+ /** resume 后暂存的用户选择(供 ToolConfirmationInterceptor 轮询读取) */
161
+ private resolvedChoices;
162
+ private timeoutListener?;
163
+ /** 同一 taskId 上串行化 resume 与 timeout,避免双边占用 */
164
+ private taskLocks;
165
+ constructor(checkpointSaver: ICheckpointSaver, sseEmitter: ISSEEmitter, timeoutListener?: HitlTimeoutListener);
166
+ setTimeoutListener(listener: HitlTimeoutListener | undefined): void;
167
+ /**
168
+ * 中断 Graph 执行,等待人工确认
169
+ *
170
+ * 写入 `__hitlWaiting`(含 deadlineAt)到同一 thread 的 Checkpoint。
171
+ * 不保留 LangGraph `engineSnapshot`:子图与父图共用 session thread,
172
+ * resume 时用 GraphState 从父图入口重入(skillSpanId / hitlChoice 防重复 span)。
173
+ */
174
+ interrupt(taskId: string, threadId: string, state: GraphState, config: HitlInterruptConfig, extras?: HitlInterruptExtras): Promise<void>;
175
+ /**
176
+ * 用户响应后恢复执行
177
+ *
178
+ * 优先用进程内 waitingTasks;若进程重启丢失,可用 threadId 从 Checkpoint 冷恢复
179
+ *(interrupt 时已写入 `__hitlWaiting`)。
180
+ *
181
+ * @returns 注入用户选择后的 GraphState
182
+ */
183
+ resume(taskId: string, choice: string, userId: string, threadIdHint?: string): Promise<GraphState>;
184
+ /**
185
+ * 超时处理入口(同步包装)。timer 回调不得 throw。
186
+ */
187
+ handleTimeout(taskId: string): void;
188
+ handleTimeoutAsync(taskId: string): Promise<void>;
189
+ private clearWaiting;
190
+ private withTaskLock;
191
+ /** 查询某 task 是否在等待 HITL */
192
+ isWaiting(taskId: string): boolean;
193
+ /** 获取等待状态(测试/调试用) */
194
+ getWaitingState(taskId: string): HitlWaitingState | undefined;
195
+ /**
196
+ * 取出并清除 resume 写入的用户选择(确认拦截器轮询用)
197
+ */
198
+ consumeResolvedChoice(taskId: string): string | undefined;
199
+ }