@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,85 @@
1
+ /**
2
+ * Tool 执行契约 — IToolExecutor 与请求/响应类型
3
+ *
4
+ * @see docs/contracts/tool-execution.md §3
5
+ * @see .kiro/specs/04-runtime-core/tasks.md Task 19.1
6
+ */
7
+ /**
8
+ * AuthContext — 调用权限上下文
9
+ */
10
+ export interface AuthContext {
11
+ userId: string;
12
+ delegationToken: string;
13
+ /** Agent 对外主键 */
14
+ agentCode: string;
15
+ /**
16
+ * @deprecated 使用 agentCode;仅作历史调用方双读兜底
17
+ */
18
+ agentId?: string;
19
+ }
20
+ /**
21
+ * ToolCallRequest — Tool 调用请求
22
+ */
23
+ export interface ToolCallRequest {
24
+ toolCallId: string;
25
+ toolName: string;
26
+ arguments: Record<string, unknown>;
27
+ authContext: AuthContext;
28
+ dataScope?: 'user-bound' | 'department-bound' | 'global';
29
+ resourceOwnerId?: string;
30
+ /** Hosting/Runtime Task ID(写入 tool_call_logs) */
31
+ taskId?: string;
32
+ /** 链路关联 ID;缺省可用 toolCallId */
33
+ correlationId?: string;
34
+ /** 路由用:manifest type */
35
+ toolType?: string;
36
+ /** 路由用:manifest runtime */
37
+ toolRuntime?: 'local' | 'server' | 'both';
38
+ /** both 类型时强制走服务端 Gateway */
39
+ forceServer?: boolean;
40
+ /**
41
+ * 执行配置(来自 tool.manifest.execution / Skill scripts 虚拟 Tool)
42
+ *
43
+ * - protocol=mcp:DevMcpExecutor / Gateway MCP 路径
44
+ * - localPreferred / source=skill-script:LocalToolExecutor 本机执行
45
+ * - 其余 code:server 走 Gateway;desktop 按 installStore 分流
46
+ */
47
+ execution?: unknown;
48
+ }
49
+ /**
50
+ * ToolCallResult — Tool 调用结果
51
+ */
52
+ export interface ToolCallResult {
53
+ toolCallId: string;
54
+ toolName: string;
55
+ content: string;
56
+ success: boolean;
57
+ error?: string;
58
+ /** Gateway / 本地执行结构化错误码 */
59
+ errorCode?: string;
60
+ retryable?: boolean;
61
+ runtime?: 'local' | 'server' | 'mock';
62
+ /** 工具产出的可下载/可打开文件;不进模型正文 */
63
+ file?: {
64
+ fileName: string;
65
+ fileType: string;
66
+ size: number;
67
+ url: string;
68
+ };
69
+ }
70
+ export interface LLMToolCall {
71
+ id: string;
72
+ function: {
73
+ name: string;
74
+ arguments: string;
75
+ };
76
+ }
77
+ export interface LLMToolCallResponse {
78
+ toolCalls: LLMToolCall[];
79
+ }
80
+ /**
81
+ * IToolExecutor — Tool 执行网关接口
82
+ */
83
+ export interface IToolExecutor {
84
+ execute(request: ToolCallRequest): Promise<ToolCallResult>;
85
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tool 执行契约 — IToolExecutor 与请求/响应类型
3
+ *
4
+ * @see docs/contracts/tool-execution.md §3
5
+ * @see .kiro/specs/04-runtime-core/tasks.md Task 19.1
6
+ */
7
+ export {};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * ToolOrchestrator — Tool 调用编排服务
3
+ *
4
+ * @see design.md §1.1 Tool调用编排
5
+ * @see requirements.md Requirement 8 AC1, AC3
6
+ */
7
+ import type { ExecutionContext } from '@gt-fe/eap-contracts';
8
+ import type { IGovernanceClient } from '../governance/governance-client.js';
9
+ export type { AuthContext, ToolCallRequest, ToolCallResult, LLMToolCall, LLMToolCallResponse, IToolExecutor, } from './tool-executor.interface.js';
10
+ import type { AuthContext, ToolCallRequest, ToolCallResult, LLMToolCallResponse, IToolExecutor } from './tool-executor.interface.js';
11
+ /**
12
+ * ToolOrchestrator — Tool 调用编排主服务
13
+ */
14
+ export declare class ToolOrchestrator {
15
+ private readonly toolExecutor;
16
+ private readonly governanceClient?;
17
+ constructor(toolExecutor: IToolExecutor, governanceClient?: IGovernanceClient | undefined);
18
+ extractToolCalls(llmResponse: LLMToolCallResponse, authContext: AuthContext): ToolCallRequest[];
19
+ executeSingle(request: ToolCallRequest, executionContext?: ExecutionContext): Promise<ToolCallResult>;
20
+ executeAll(requests: ToolCallRequest[], executionContext?: ExecutionContext): Promise<ToolCallResult[]>;
21
+ executeSequential(requests: ToolCallRequest[]): Promise<ToolCallResult[]>;
22
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * ToolOrchestrator — Tool 调用编排服务
3
+ *
4
+ * @see design.md §1.1 Tool调用编排
5
+ * @see requirements.md Requirement 8 AC1, AC3
6
+ */
7
+ import { assertToolPermission, GovernanceUnavailableError, PermissionDeniedError, } from '../governance/permission-guard.js';
8
+ /**
9
+ * ToolOrchestrator — Tool 调用编排主服务
10
+ */
11
+ export class ToolOrchestrator {
12
+ toolExecutor;
13
+ governanceClient;
14
+ constructor(toolExecutor, governanceClient) {
15
+ this.toolExecutor = toolExecutor;
16
+ this.governanceClient = governanceClient;
17
+ }
18
+ extractToolCalls(llmResponse, authContext) {
19
+ if (!llmResponse.toolCalls || llmResponse.toolCalls.length === 0) {
20
+ return [];
21
+ }
22
+ return llmResponse.toolCalls.map((toolCall) => {
23
+ let parsedArguments;
24
+ try {
25
+ parsedArguments = JSON.parse(toolCall.function.arguments);
26
+ }
27
+ catch {
28
+ parsedArguments = {};
29
+ }
30
+ return {
31
+ toolCallId: toolCall.id,
32
+ toolName: toolCall.function.name,
33
+ arguments: parsedArguments,
34
+ authContext,
35
+ };
36
+ });
37
+ }
38
+ async executeSingle(request, executionContext) {
39
+ if (this.governanceClient && executionContext?.delegationToken) {
40
+ try {
41
+ await assertToolPermission(this.governanceClient, executionContext, request.toolName, {
42
+ dataScope: request.dataScope ?? 'user-bound',
43
+ resourceOwnerId: request.resourceOwnerId ?? executionContext.userId ?? undefined,
44
+ });
45
+ }
46
+ catch (error) {
47
+ if (error instanceof PermissionDeniedError || error instanceof GovernanceUnavailableError) {
48
+ return {
49
+ toolCallId: request.toolCallId,
50
+ toolName: request.toolName,
51
+ content: '',
52
+ success: false,
53
+ error: error.reason,
54
+ errorCode: error instanceof PermissionDeniedError ? 'NO_PERMISSION' : 'GOVERNANCE_UNAVAILABLE',
55
+ };
56
+ }
57
+ throw error;
58
+ }
59
+ }
60
+ try {
61
+ return await this.toolExecutor.execute(request);
62
+ }
63
+ catch (error) {
64
+ const message = error instanceof Error ? error.message : 'Unknown execution error';
65
+ return {
66
+ toolCallId: request.toolCallId,
67
+ toolName: request.toolName,
68
+ content: '',
69
+ success: false,
70
+ error: message,
71
+ };
72
+ }
73
+ }
74
+ async executeAll(requests, executionContext) {
75
+ if (requests.length === 0) {
76
+ return [];
77
+ }
78
+ const settled = await Promise.allSettled(requests.map((request) => this.executeSingle(request, executionContext)));
79
+ return settled.map((outcome, index) => {
80
+ if (outcome.status === 'fulfilled') {
81
+ return outcome.value;
82
+ }
83
+ const request = requests[index];
84
+ const message = outcome.reason instanceof Error
85
+ ? outcome.reason.message
86
+ : 'Unknown execution error';
87
+ return {
88
+ toolCallId: request.toolCallId,
89
+ toolName: request.toolName,
90
+ content: '',
91
+ success: false,
92
+ error: message,
93
+ };
94
+ });
95
+ }
96
+ async executeSequential(requests) {
97
+ const results = [];
98
+ for (const request of requests) {
99
+ const result = await this.executeSingle(request);
100
+ results.push(result);
101
+ }
102
+ return results;
103
+ }
104
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * ToolResultInjector — Tool 结果注入服务
3
+ *
4
+ * 将 Tool 执行结果写回 Graph State,作为 'tool' 角色消息追加到消息历史中,
5
+ * 从而触发下一轮 LLM 推理(ReAct 循环)。
6
+ *
7
+ * 流程:LLM → ToolCall → Tool执行 → **结果注入State** → LLM再次推理 → ... → 最终回复
8
+ *
9
+ * @see design.md §1.1 结果注入: Tool结果写回Graph State
10
+ * @see design.md §1.2 Tool结果注入State → 回到LLM节点(ReAct循环)
11
+ * @see requirements.md Requirement 8 AC4
12
+ */
13
+ import type { GraphState, GraphMessage } from '../graph/contracts/executable-graph.js';
14
+ import type { ToolCallResult } from './tool-executor.interface.js';
15
+ /**
16
+ * ToolMessage — 注入到 Graph State 的 Tool 结果消息结构
17
+ *
18
+ * 遵循 LLM function-calling 协议,通过 toolCallId 让 LLM 将结果
19
+ * 与其原始 tool_calls 请求关联匹配。
20
+ */
21
+ export interface ToolMessage extends GraphMessage {
22
+ /** 固定为 'tool' */
23
+ role: 'tool';
24
+ /** Tool 执行结果内容(成功时为结果,失败时为错误信息) */
25
+ content: string;
26
+ /** 对应的 tool_call ID,LLM 用此匹配原始请求 */
27
+ toolCallId: string;
28
+ /** Tool 名称(辅助调试/Trace) */
29
+ toolName: string;
30
+ /** 是否执行成功 */
31
+ success: boolean;
32
+ }
33
+ /**
34
+ * ToolResultInjector — Tool 结果注入到 Graph State
35
+ *
36
+ * 职责:
37
+ * 1. 将 ToolCallResult[] 转换为 ToolMessage[]
38
+ * 2. 追加到 GraphState.messages 末尾
39
+ * 3. 返回新的 GraphState(不可变更新),供下一轮 LLM 推理使用
40
+ */
41
+ export declare class ToolResultInjector {
42
+ /**
43
+ * 将 Tool 执行结果注入到 Graph State 中
44
+ *
45
+ * 每个 ToolCallResult 转换为一条 role='tool' 的消息,包含:
46
+ * - toolCallId: 供 LLM 匹配原始 tool_calls 请求
47
+ * - content: 成功时为 result.content,失败时为错误描述
48
+ * - toolName/success: 辅助信息
49
+ *
50
+ * 返回全新的 GraphState 对象(不修改原始 state),
51
+ * 确保 Graph 执行的不可变语义。
52
+ *
53
+ * @param state - 当前 Graph State
54
+ * @param results - Tool 调用结果列表
55
+ * @returns 包含 Tool 结果消息的新 GraphState
56
+ */
57
+ injectResults(state: GraphState, results: ToolCallResult[]): GraphState;
58
+ /**
59
+ * 将单个 ToolCallResult 转换为 ToolMessage
60
+ *
61
+ * 失败时 content 为格式化的错误信息,方便 LLM 理解并决策下一步。
62
+ */
63
+ private buildToolMessage;
64
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * ToolResultInjector — Tool 结果注入服务
3
+ *
4
+ * 将 Tool 执行结果写回 Graph State,作为 'tool' 角色消息追加到消息历史中,
5
+ * 从而触发下一轮 LLM 推理(ReAct 循环)。
6
+ *
7
+ * 流程:LLM → ToolCall → Tool执行 → **结果注入State** → LLM再次推理 → ... → 最终回复
8
+ *
9
+ * @see design.md §1.1 结果注入: Tool结果写回Graph State
10
+ * @see design.md §1.2 Tool结果注入State → 回到LLM节点(ReAct循环)
11
+ * @see requirements.md Requirement 8 AC4
12
+ */
13
+ // ─────────────────────────────────────────────
14
+ // ToolResultInjector
15
+ // ─────────────────────────────────────────────
16
+ /**
17
+ * ToolResultInjector — Tool 结果注入到 Graph State
18
+ *
19
+ * 职责:
20
+ * 1. 将 ToolCallResult[] 转换为 ToolMessage[]
21
+ * 2. 追加到 GraphState.messages 末尾
22
+ * 3. 返回新的 GraphState(不可变更新),供下一轮 LLM 推理使用
23
+ */
24
+ export class ToolResultInjector {
25
+ /**
26
+ * 将 Tool 执行结果注入到 Graph State 中
27
+ *
28
+ * 每个 ToolCallResult 转换为一条 role='tool' 的消息,包含:
29
+ * - toolCallId: 供 LLM 匹配原始 tool_calls 请求
30
+ * - content: 成功时为 result.content,失败时为错误描述
31
+ * - toolName/success: 辅助信息
32
+ *
33
+ * 返回全新的 GraphState 对象(不修改原始 state),
34
+ * 确保 Graph 执行的不可变语义。
35
+ *
36
+ * @param state - 当前 Graph State
37
+ * @param results - Tool 调用结果列表
38
+ * @returns 包含 Tool 结果消息的新 GraphState
39
+ */
40
+ injectResults(state, results) {
41
+ const toolMessages = results.map((result) => this.buildToolMessage(result));
42
+ return {
43
+ ...state,
44
+ messages: [...state.messages, ...toolMessages],
45
+ };
46
+ }
47
+ /**
48
+ * 将单个 ToolCallResult 转换为 ToolMessage
49
+ *
50
+ * 失败时 content 为格式化的错误信息,方便 LLM 理解并决策下一步。
51
+ */
52
+ buildToolMessage(result) {
53
+ const content = result.success
54
+ ? result.content
55
+ : `[Tool Error] ${result.error ?? 'Unknown error'}`;
56
+ return {
57
+ role: 'tool',
58
+ content,
59
+ toolCallId: result.toolCallId,
60
+ toolName: result.toolName,
61
+ success: result.success,
62
+ ...(result.file ? { file: result.file } : {}),
63
+ };
64
+ }
65
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 将未知异常格式化为可读字符串 — 委托 @gt-fe/eap-contracts
3
+ */
4
+ export { formatUnknownError } from '@gt-fe/eap-contracts';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 将未知异常格式化为可读字符串 — 委托 @gt-fe/eap-contracts
3
+ */
4
+ export { formatUnknownError } from '@gt-fe/eap-contracts';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Runtime HTTP 错误出口 — 对齐 @gt-fe/eap-contracts ErrorCodes / AppError
3
+ */
4
+ import { type ErrorCode, type AppError } from '@gt-fe/eap-contracts';
5
+ import type { ServerResponse } from 'node:http';
6
+ /** 公共 classify;连接失败不再误标为 GOVERNANCE_UNAVAILABLE */
7
+ export declare function classifyRuntimeError(error: unknown): AppError;
8
+ export declare function runtimeErrorCode(error: unknown): ErrorCode;
9
+ export declare function sendErrorJson(res: ServerResponse, error: unknown, options?: {
10
+ traceId?: string;
11
+ }): void;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Runtime HTTP 错误出口 — 对齐 @gt-fe/eap-contracts ErrorCodes / AppError
3
+ */
4
+ import { classifyError, formatUnknownError, ErrorCodes, } from '@gt-fe/eap-contracts';
5
+ /** 公共 classify;连接失败不再误标为 GOVERNANCE_UNAVAILABLE */
6
+ export function classifyRuntimeError(error) {
7
+ return classifyError(error);
8
+ }
9
+ export function runtimeErrorCode(error) {
10
+ return classifyRuntimeError(error).code;
11
+ }
12
+ export function sendErrorJson(res, error, options) {
13
+ if (res.writableEnded || res.headersSent) {
14
+ console.error('Error after response started:', formatUnknownError(error));
15
+ return;
16
+ }
17
+ const appErr = classifyRuntimeError(error);
18
+ if (appErr.code === ErrorCodes.PLATFORM_INTERNAL_UNEXPECTED) {
19
+ console.error('Runtime internal error:', formatUnknownError(error), error);
20
+ }
21
+ const body = appErr.toApiResponse(options?.traceId);
22
+ res.writeHead(appErr.httpStatus, { 'Content-Type': 'application/json' });
23
+ res.end(JSON.stringify(body));
24
+ }
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@gt-fe/eap-runtime",
3
+ "version": "0.0.8",
4
+ "description": "Enterprise Agent Platform — Runtime核心:Graph执行引擎、Task生命周期、Session管理、Checkpoint持久化",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "publishConfig": {
18
+ "registry": "https://registry.npmjs.org/",
19
+ "access": "public"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "start": "node dist/server.js",
24
+ "dev": "npx tsx src/server.ts",
25
+ "clean": "rm -rf dist",
26
+ "lint": "eslint src --ext .ts",
27
+ "test": "vitest run"
28
+ },
29
+ "keywords": [
30
+ "eap",
31
+ "runtime",
32
+ "agent",
33
+ "langgraph",
34
+ "graph-engine"
35
+ ],
36
+ "license": "UNLICENSED",
37
+ "dependencies": {
38
+ "@langchain/langgraph": "^0.2.0",
39
+ "amqplib": "^0.10.0",
40
+ "ioredis": "^5.4.0",
41
+ "pg": "^8.13.0",
42
+ "yaml": "^2.6.1",
43
+ "@gt-fe/eap-contracts": "0.0.8"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^22.0.0",
47
+ "typescript": "^5.5.0",
48
+ "vitest": "^2.0.0"
49
+ },
50
+ "pnpm": {
51
+ "onlyBuiltDependencies": [
52
+ "esbuild"
53
+ ]
54
+ },
55
+ "packageManager": "pnpm@9.15.9"
56
+ }