@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,9 @@
1
+ export { resolveAgentPrimaryModel, resolveAgentModelAllowlist, resolveDeclaredModels } from './agent-models.js';
2
+ export { createAgentRegistryClient, type AgentRegistryClient, type AgentRegistryRecord, type AgentManifest } from './agent-registry-client.js';
3
+ export { GraphLoader, type GraphLoaderConfig, type LoadToolDefinitionsOptions, type LoadAgentOptions } from './graph-loader.js';
4
+ export { PreinstallDefinitionCache, resolveDefinitionCacheEnabled, type CachedAgentDefinitions, } from './definition-cache.js';
5
+ export { inspectAgentSkillTree, readSkillAssembly, resolveSkillHotReload, skillAssemblyStamp, watchAgentSkillDirs, watchPreinstallSkillRoot, watchSkillRoots, } from './skill-tree.js';
6
+ export { FileSystemDeploymentSnapshot, createDeploymentSnapshotFromEnv, normalizeDigest, isInlineToolDeclaration, overlayToolRefPolicies, type IDeploymentSnapshot, type AgentSnapshotMeta, type SnapshotToolRef, type SnapshotSkillRef, type PreinstallToolManifest, type PreinstallSkillManifest, type DeploymentSnapshotOptions, } from './deployment-snapshot.js';
7
+ export { preloadError, preloadMissing, preloadManifestNotFound, preloadGraphNotFound, preloadToolNotFound, preloadSkillNotFound, preloadPackageCorrupt, isRequireReady, } from './preload-errors.js';
8
+ export { resolvePreloadBehaviorFlags, isValidateSkillIo, isRequireChecksum, type PreloadBehaviorFlags, } from './preload-flags.js';
9
+ export { assertSkillIoIfEnabled, coerceSkillInputFromMessages, resolveSkillInputFromInvokeInput, } from './skill-io-guard.js';
@@ -0,0 +1,9 @@
1
+ export { resolveAgentPrimaryModel, resolveAgentModelAllowlist, resolveDeclaredModels } from './agent-models.js';
2
+ export { createAgentRegistryClient } from './agent-registry-client.js';
3
+ export { GraphLoader } from './graph-loader.js';
4
+ export { PreinstallDefinitionCache, resolveDefinitionCacheEnabled, } from './definition-cache.js';
5
+ export { inspectAgentSkillTree, readSkillAssembly, resolveSkillHotReload, skillAssemblyStamp, watchAgentSkillDirs, watchPreinstallSkillRoot, watchSkillRoots, } from './skill-tree.js';
6
+ export { FileSystemDeploymentSnapshot, createDeploymentSnapshotFromEnv, normalizeDigest, isInlineToolDeclaration, overlayToolRefPolicies, } from './deployment-snapshot.js';
7
+ export { preloadError, preloadMissing, preloadManifestNotFound, preloadGraphNotFound, preloadToolNotFound, preloadSkillNotFound, preloadPackageCorrupt, isRequireReady, } from './preload-errors.js';
8
+ export { resolvePreloadBehaviorFlags, isValidateSkillIo, isRequireChecksum, } from './preload-flags.js';
9
+ export { assertSkillIoIfEnabled, coerceSkillInputFromMessages, resolveSkillInputFromInvokeInput, } from './skill-io-guard.js';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 预装加载错误 — 对齐 runtime.preload.* / 联调契约
3
+ */
4
+ import { AppError, type ErrorCode } from '@gt-fe/eap-contracts';
5
+ export declare function preloadError(code: ErrorCode, message: string, details?: unknown): AppError;
6
+ export declare function preloadMissing(message: string, details?: unknown): AppError;
7
+ export declare function preloadManifestNotFound(message: string, details?: unknown): AppError;
8
+ export declare function preloadGraphNotFound(message: string, details?: unknown): AppError;
9
+ export declare function preloadToolNotFound(message: string, details?: unknown): AppError;
10
+ export declare function preloadSkillNotFound(message: string, details?: unknown): AppError;
11
+ export declare function preloadPackageCorrupt(message: string, details?: unknown): AppError;
12
+ /** 是否强制校验 .ready(默认否) */
13
+ export declare function isRequireReady(explicit?: boolean): boolean;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 预装加载错误 — 对齐 runtime.preload.* / 联调契约
3
+ */
4
+ import { AppError, ErrorCodes } from '@gt-fe/eap-contracts';
5
+ export function preloadError(code, message, details) {
6
+ return new AppError(code, message, {
7
+ exposeMessage: true,
8
+ details,
9
+ });
10
+ }
11
+ export function preloadMissing(message, details) {
12
+ return preloadError(ErrorCodes.RUNTIME_PRELOAD_MISSING, message, details);
13
+ }
14
+ export function preloadManifestNotFound(message, details) {
15
+ return preloadError(ErrorCodes.RUNTIME_PRELOAD_MANIFEST_NOT_FOUND, message, details);
16
+ }
17
+ export function preloadGraphNotFound(message, details) {
18
+ return preloadError(ErrorCodes.RUNTIME_PRELOAD_GRAPH_NOT_FOUND, message, details);
19
+ }
20
+ export function preloadToolNotFound(message, details) {
21
+ return preloadError(ErrorCodes.RUNTIME_PRELOAD_TOOL_NOT_FOUND, message, details);
22
+ }
23
+ export function preloadSkillNotFound(message, details) {
24
+ return preloadError(ErrorCodes.RUNTIME_PRELOAD_SKILL_NOT_FOUND, message, details);
25
+ }
26
+ export function preloadPackageCorrupt(message, details) {
27
+ return preloadError(ErrorCodes.RUNTIME_PRELOAD_PACKAGE_CORRUPT, message, details);
28
+ }
29
+ /** 是否强制校验 .ready(默认否) */
30
+ export function isRequireReady(explicit) {
31
+ if (explicit !== undefined)
32
+ return explicit;
33
+ const v = process.env.EAP_PRELOAD_REQUIRE_READY;
34
+ return v === '1' || v === 'true' || v === 'yes';
35
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 预装读侧行为开关(环境变量 / 显式配置)
3
+ *
4
+ * | 变量 | 默认 | 含义 |
5
+ * |------|------|------|
6
+ * | EAP_PRELOAD_REQUIRE_READY | 关 | 强制校验 .ready |
7
+ * | EAP_PRELOAD_VALIDATE_SKILL_IO | **开** | 执行子图前校验 skill inputDef.required;`0`/`false` 关闭 |
8
+ * | EAP_PRELOAD_REQUIRE_CHECKSUM | 关 | snapshot 必须带 sha256 或 artifacts[] |
9
+ * | EAP_PRELOAD_DEFINITION_CACHE | 有预装时开 | 进程内定义缓存;`0`/`false` 关闭 |
10
+ * | EAP_SKILL_HOT_RELOAD | **dev 开 / server 关** | 已装配 Skill 的目录 mtime 变化则丢缓存;未写入装配名单的目录不进清单 |
11
+ * | EAP_LOCAL_SKILLS_DIR | 关 | 开发态作者源 Skill 根;查找优先于 preinstall,低于 users/ |
12
+ *
13
+ * Skill 查找优先级固定为:用户装配(users/)> Agent 预装(preinstall/),无开关。
14
+ */
15
+ export interface PreloadBehaviorFlags {
16
+ requireReady: boolean;
17
+ validateSkillIo: boolean;
18
+ requireChecksum: boolean;
19
+ }
20
+ export declare function resolvePreloadBehaviorFlags(explicit?: Partial<PreloadBehaviorFlags>): PreloadBehaviorFlags;
21
+ export declare function isValidateSkillIo(explicit?: boolean): boolean;
22
+ export declare function isRequireChecksum(explicit?: boolean): boolean;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * 预装读侧行为开关(环境变量 / 显式配置)
3
+ *
4
+ * | 变量 | 默认 | 含义 |
5
+ * |------|------|------|
6
+ * | EAP_PRELOAD_REQUIRE_READY | 关 | 强制校验 .ready |
7
+ * | EAP_PRELOAD_VALIDATE_SKILL_IO | **开** | 执行子图前校验 skill inputDef.required;`0`/`false` 关闭 |
8
+ * | EAP_PRELOAD_REQUIRE_CHECKSUM | 关 | snapshot 必须带 sha256 或 artifacts[] |
9
+ * | EAP_PRELOAD_DEFINITION_CACHE | 有预装时开 | 进程内定义缓存;`0`/`false` 关闭 |
10
+ * | EAP_SKILL_HOT_RELOAD | **dev 开 / server 关** | 已装配 Skill 的目录 mtime 变化则丢缓存;未写入装配名单的目录不进清单 |
11
+ * | EAP_LOCAL_SKILLS_DIR | 关 | 开发态作者源 Skill 根;查找优先于 preinstall,低于 users/ |
12
+ *
13
+ * Skill 查找优先级固定为:用户装配(users/)> Agent 预装(preinstall/),无开关。
14
+ */
15
+ function envFlag(name) {
16
+ const v = process.env[name];
17
+ return v === '1' || v === 'true' || v === 'yes';
18
+ }
19
+ /** 默认开启;仅当显式设为 0/false/no 时关闭 */
20
+ function envFlagDefaultOn(name) {
21
+ const v = process.env[name];
22
+ if (v === undefined || v === '')
23
+ return true;
24
+ if (v === '0' || v === 'false' || v === 'no')
25
+ return false;
26
+ return v === '1' || v === 'true' || v === 'yes';
27
+ }
28
+ export function resolvePreloadBehaviorFlags(explicit = {}) {
29
+ return {
30
+ requireReady: explicit.requireReady !== undefined ? explicit.requireReady : envFlag('EAP_PRELOAD_REQUIRE_READY'),
31
+ validateSkillIo: explicit.validateSkillIo !== undefined
32
+ ? explicit.validateSkillIo
33
+ : envFlagDefaultOn('EAP_PRELOAD_VALIDATE_SKILL_IO'),
34
+ requireChecksum: explicit.requireChecksum !== undefined
35
+ ? explicit.requireChecksum
36
+ : envFlag('EAP_PRELOAD_REQUIRE_CHECKSUM'),
37
+ };
38
+ }
39
+ export function isValidateSkillIo(explicit) {
40
+ return resolvePreloadBehaviorFlags(explicit === undefined ? {} : { validateSkillIo: explicit }).validateSkillIo;
41
+ }
42
+ export function isRequireChecksum(explicit) {
43
+ return resolvePreloadBehaviorFlags(explicit === undefined ? {} : { requireChecksum: explicit }).requireChecksum;
44
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Skill inputDef / outputDef 轻量校验(默认开启;EAP_PRELOAD_VALIDATE_SKILL_IO=0 关闭)
3
+ */
4
+ import type { LoadedSkillInfo } from '../tool/system-prompt-builder.js';
5
+ /**
6
+ * 从 invoke/stream 的 input 解析 `state.skillInput`。
7
+ * - 对象且含 `skillInput` 对象 → 用嵌套字段
8
+ * - 普通对象 → 整包作为 skillInput(便于 `{"topic":"…","message":"…"}`)
9
+ * - JSON 对象字符串(Hosting 常把 body.input 序列化后再传入)→ 按上规则解析
10
+ * - 非 JSON 纯文本或非法 JSON → `{ text }`;空串 → undefined
11
+ */
12
+ export declare function resolveSkillInputFromInvokeInput(input: unknown): Record<string, unknown> | undefined;
13
+ /**
14
+ * 聊天口只补 `text`:最后一条 user 为非 JSON 纯文本,且 required 里缺的唯一字段是 `text`。
15
+ * `topic` 等其它键不猜;结构化 JSON 缺字段仍校验失败。
16
+ */
17
+ export declare function coerceSkillInputFromMessages(skill: LoadedSkillInfo, skillInput: unknown, messages: Array<{
18
+ role?: unknown;
19
+ content?: unknown;
20
+ }>): Record<string, unknown> | undefined;
21
+ /**
22
+ * 若开启校验且 skill 声明了 inputDef.required,则要求 state.skillInput 含对应键。
23
+ * outputDef 仅做形态检查(须为 object schema),执行期出参校验留给后续。
24
+ */
25
+ export declare function assertSkillIoIfEnabled(skill: LoadedSkillInfo, skillInput: unknown, explicitFlag?: boolean): void;
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Skill inputDef / outputDef 轻量校验(默认开启;EAP_PRELOAD_VALIDATE_SKILL_IO=0 关闭)
3
+ */
4
+ import { AppError, ErrorCodes } from '@gt-fe/eap-contracts';
5
+ import { isValidateSkillIo } from './preload-flags.js';
6
+ function asRecord(value) {
7
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
8
+ return value;
9
+ }
10
+ return null;
11
+ }
12
+ /**
13
+ * 从 invoke/stream 的 input 解析 `state.skillInput`。
14
+ * - 对象且含 `skillInput` 对象 → 用嵌套字段
15
+ * - 普通对象 → 整包作为 skillInput(便于 `{"topic":"…","message":"…"}`)
16
+ * - JSON 对象字符串(Hosting 常把 body.input 序列化后再传入)→ 按上规则解析
17
+ * - 非 JSON 纯文本或非法 JSON → `{ text }`;空串 → undefined
18
+ */
19
+ export function resolveSkillInputFromInvokeInput(input) {
20
+ let value = input;
21
+ if (typeof value === 'string') {
22
+ const trimmed = value.trim();
23
+ if (!trimmed)
24
+ return undefined;
25
+ if (!((trimmed.startsWith('{') && trimmed.endsWith('}')) ||
26
+ (trimmed.startsWith('[') && trimmed.endsWith(']')))) {
27
+ return { text: trimmed };
28
+ }
29
+ try {
30
+ value = JSON.parse(trimmed);
31
+ }
32
+ catch {
33
+ return { text: trimmed };
34
+ }
35
+ }
36
+ const rec = asRecord(value);
37
+ if (!rec)
38
+ return undefined;
39
+ const nested = asRecord(rec.skillInput);
40
+ return nested ?? rec;
41
+ }
42
+ function looksLikeJsonValue(text) {
43
+ const trimmed = text.trim();
44
+ return ((trimmed.startsWith('{') && trimmed.endsWith('}')) ||
45
+ (trimmed.startsWith('[') && trimmed.endsWith(']')));
46
+ }
47
+ /**
48
+ * 聊天口只补 `text`:最后一条 user 为非 JSON 纯文本,且 required 里缺的唯一字段是 `text`。
49
+ * `topic` 等其它键不猜;结构化 JSON 缺字段仍校验失败。
50
+ */
51
+ export function coerceSkillInputFromMessages(skill, skillInput, messages) {
52
+ const base = asRecord(skillInput) ?? {};
53
+ const inputDef = asRecord(skill.inputDef);
54
+ const required = Array.isArray(inputDef?.required)
55
+ ? inputDef.required.filter((k) => typeof k === 'string' && k.length > 0)
56
+ : [];
57
+ const missing = required.filter((key) => base[key] === undefined);
58
+ if (missing.length !== 1 || missing[0] !== 'text') {
59
+ return Object.keys(base).length > 0 ? base : asRecord(skillInput) ?? undefined;
60
+ }
61
+ let lastUser;
62
+ for (let i = messages.length - 1; i >= 0; i--) {
63
+ const msg = messages[i];
64
+ if (msg?.role === 'user' && typeof msg.content === 'string' && msg.content.trim()) {
65
+ lastUser = msg.content;
66
+ break;
67
+ }
68
+ }
69
+ if (!lastUser || looksLikeJsonValue(lastUser)) {
70
+ return Object.keys(base).length > 0 ? base : undefined;
71
+ }
72
+ return { ...base, text: lastUser };
73
+ }
74
+ /**
75
+ * 若开启校验且 skill 声明了 inputDef.required,则要求 state.skillInput 含对应键。
76
+ * outputDef 仅做形态检查(须为 object schema),执行期出参校验留给后续。
77
+ */
78
+ export function assertSkillIoIfEnabled(skill, skillInput, explicitFlag) {
79
+ if (!isValidateSkillIo(explicitFlag))
80
+ return;
81
+ const inputDef = asRecord(skill.inputDef);
82
+ if (inputDef) {
83
+ const required = inputDef.required;
84
+ const input = asRecord(skillInput) ?? {};
85
+ if (Array.isArray(required)) {
86
+ const missing = required
87
+ .filter((k) => typeof k === 'string' && k.length > 0)
88
+ .filter((k) => input[k] === undefined);
89
+ if (missing.length > 0) {
90
+ throw new AppError(ErrorCodes.PARAMS_INVALID, `Skill ${skill.skillId} 缺少 inputDef.required 字段: ${missing.join(', ')}`, { exposeMessage: true, details: { skillId: skill.skillId, missing } });
91
+ }
92
+ }
93
+ }
94
+ const outputDef = skill.outputDef;
95
+ if (outputDef != null && (typeof outputDef !== 'object' || Array.isArray(outputDef))) {
96
+ throw new AppError(ErrorCodes.RUNTIME_PRELOAD_PACKAGE_CORRUPT, `Skill ${skill.skillId} outputDef 须为对象 schema`, { exposeMessage: true, details: { skillId: skill.skillId } });
97
+ }
98
+ }
@@ -0,0 +1,27 @@
1
+ export interface AgentSkillTree {
2
+ codes: string[];
3
+ /** `${count}:${maxMtimeMs}`;增删改任一 skill 文件都会变 */
4
+ stamp: string;
5
+ }
6
+ export interface SkillAssembly {
7
+ skills: string[];
8
+ source: string;
9
+ }
10
+ /**
11
+ * 装配白名单:users/<id>/.assembly.json → agentDir/.assembly.json → assembly.json
12
+ * 未声明的磁盘目录不得进入选择清单。
13
+ */
14
+ export declare function readSkillAssembly(agentDir: string, userId?: string): Promise<SkillAssembly | null>;
15
+ export declare function skillAssemblyStamp(agentDir: string, userId?: string): Promise<string>;
16
+ export declare function preinstallSkillsDir(agentDir: string): string;
17
+ export declare function userSkillsDir(agentDir: string, userId: string): string;
18
+ export declare function inspectAgentSkillTree(agentDir: string, userId?: string, extraRoots?: string[]): Promise<AgentSkillTree>;
19
+ /**
20
+ * 监听整个预装根下任意 Agent 的 skills 目录(eap chat / createDevRuntime)。
21
+ * 失败时静默(PVC/NFS 上 watch 不可靠,请求入口仍靠 stamp)。
22
+ */
23
+ export declare function watchPreinstallSkillRoot(preinstallRoot: string, onChange: () => void, debounceMs?: number): () => void;
24
+ export declare function watchSkillRoots(roots: string[], onChange: () => void, debounceMs?: number): () => void;
25
+ export declare function watchAgentSkillDirs(agentDir: string, onChange: () => void, debounceMs?: number, extraRoots?: string[]): () => void;
26
+ /** EAP_SKILL_HOT_RELOAD:dev 默认开;server/desktop 默认关 */
27
+ export declare function resolveSkillHotReload(deploymentContext: string, explicit?: boolean): boolean;
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Agent 自带 Skill 目录扫描(§3.1)
3
+ *
4
+ * agents/<code>/<ver>/preinstall/skills/<skillCode>/
5
+ * agents/<code>/<ver>/users/<userId>/skills/<skillCode>/ 同名覆盖
6
+ *
7
+ * 热加载用 stamp:目录/文件 mtime 变化则缓存失效。
8
+ */
9
+ import { readdir, stat, access, readFile } from 'node:fs/promises';
10
+ import { watch } from 'node:fs';
11
+ import { constants as fsConstants } from 'node:fs';
12
+ import path from 'node:path';
13
+ const SKILL_CODE = /^[a-z0-9][a-z0-9-]*$/;
14
+ async function exists(p) {
15
+ try {
16
+ await access(p, fsConstants.F_OK);
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ async function maxMtime(filePath, fallback = 0) {
24
+ try {
25
+ const info = await stat(filePath);
26
+ return info.mtimeMs;
27
+ }
28
+ catch {
29
+ return fallback;
30
+ }
31
+ }
32
+ /**
33
+ * 装配白名单:users/<id>/.assembly.json → agentDir/.assembly.json → assembly.json
34
+ * 未声明的磁盘目录不得进入选择清单。
35
+ */
36
+ export async function readSkillAssembly(agentDir, userId) {
37
+ const candidates = [];
38
+ const uid = userId?.trim();
39
+ if (uid)
40
+ candidates.push(path.join(agentDir, 'users', uid, '.assembly.json'));
41
+ candidates.push(path.join(agentDir, '.assembly.json'), path.join(agentDir, 'assembly.json'));
42
+ for (const file of candidates) {
43
+ const parsed = await readAssemblyFile(file);
44
+ if (parsed)
45
+ return parsed;
46
+ }
47
+ return null;
48
+ }
49
+ async function readAssemblyFile(file) {
50
+ try {
51
+ const raw = JSON.parse(await readFile(file, 'utf8'));
52
+ if (!Array.isArray(raw.skills))
53
+ return null;
54
+ const skills = raw.skills
55
+ .filter((item) => typeof item === 'string' && SKILL_CODE.test(item))
56
+ .filter((item, index, all) => all.indexOf(item) === index);
57
+ return { skills, source: file };
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ export async function skillAssemblyStamp(agentDir, userId) {
64
+ const candidates = [];
65
+ const uid = userId?.trim();
66
+ if (uid)
67
+ candidates.push(path.join(agentDir, 'users', uid, '.assembly.json'));
68
+ candidates.push(path.join(agentDir, '.assembly.json'), path.join(agentDir, 'assembly.json'));
69
+ let latest = 0;
70
+ for (const file of candidates) {
71
+ latest = Math.max(latest, await maxMtime(file, 0));
72
+ }
73
+ return String(Math.floor(latest));
74
+ }
75
+ export function preinstallSkillsDir(agentDir) {
76
+ return path.join(agentDir, 'preinstall', 'skills');
77
+ }
78
+ export function userSkillsDir(agentDir, userId) {
79
+ return path.join(agentDir, 'users', userId, 'skills');
80
+ }
81
+ export async function inspectAgentSkillTree(agentDir, userId, extraRoots = []) {
82
+ const roots = [preinstallSkillsDir(agentDir), ...extraRoots.filter(Boolean)];
83
+ const uid = userId?.trim();
84
+ if (uid)
85
+ roots.push(userSkillsDir(agentDir, uid));
86
+ const codes = new Set();
87
+ let latest = 0;
88
+ for (const root of roots) {
89
+ latest = Math.max(latest, await maxMtime(root, 0));
90
+ let names = [];
91
+ try {
92
+ names = await readdir(root);
93
+ }
94
+ catch {
95
+ continue;
96
+ }
97
+ for (const name of names) {
98
+ if (!SKILL_CODE.test(name))
99
+ continue;
100
+ const bundle = path.join(root, name);
101
+ const bundleStat = await stat(bundle).catch(() => undefined);
102
+ if (!bundleStat?.isDirectory())
103
+ continue;
104
+ const hasMain = (await exists(path.join(bundle, 'skill.md'))) ||
105
+ (await exists(path.join(bundle, 'skill.manifest.json')));
106
+ if (!hasMain)
107
+ continue;
108
+ codes.add(name);
109
+ latest = Math.max(latest, bundleStat.mtimeMs);
110
+ const files = await readdir(bundle).catch(() => []);
111
+ for (const file of files) {
112
+ latest = Math.max(latest, await maxMtime(path.join(bundle, file), 0));
113
+ }
114
+ }
115
+ }
116
+ const sorted = [...codes].sort();
117
+ return { codes: sorted, stamp: `${sorted.length}:${Math.floor(latest)}` };
118
+ }
119
+ /**
120
+ * 监听整个预装根下任意 Agent 的 skills 目录(eap chat / createDevRuntime)。
121
+ * 失败时静默(PVC/NFS 上 watch 不可靠,请求入口仍靠 stamp)。
122
+ */
123
+ export function watchPreinstallSkillRoot(preinstallRoot, onChange, debounceMs = 200) {
124
+ const agentsRoot = path.join(preinstallRoot, 'agents');
125
+ let timer;
126
+ const fire = () => {
127
+ if (timer)
128
+ clearTimeout(timer);
129
+ timer = setTimeout(onChange, debounceMs);
130
+ };
131
+ try {
132
+ const watcher = watch(agentsRoot, { recursive: true, persistent: false }, (_event, filename) => {
133
+ const norm = String(filename ?? '').replace(/\\/g, '/');
134
+ if (!norm || norm.includes('/skills/') || /(^|\/)skills$/.test(norm))
135
+ fire();
136
+ });
137
+ return () => {
138
+ if (timer)
139
+ clearTimeout(timer);
140
+ watcher.close();
141
+ };
142
+ }
143
+ catch {
144
+ return () => { };
145
+ }
146
+ }
147
+ export function watchSkillRoots(roots, onChange, debounceMs = 200) {
148
+ const watchers = [];
149
+ let timer;
150
+ const fire = () => {
151
+ if (timer)
152
+ clearTimeout(timer);
153
+ timer = setTimeout(onChange, debounceMs);
154
+ };
155
+ for (const target of roots.filter(Boolean)) {
156
+ try {
157
+ watchers.push(watch(target, { recursive: true, persistent: false }, fire));
158
+ }
159
+ catch {
160
+ // ignore missing dir / unsupported recursive watch
161
+ }
162
+ }
163
+ return () => {
164
+ if (timer)
165
+ clearTimeout(timer);
166
+ for (const watcher of watchers)
167
+ watcher.close();
168
+ };
169
+ }
170
+ export function watchAgentSkillDirs(agentDir, onChange, debounceMs = 200, extraRoots = []) {
171
+ return watchSkillRoots([preinstallSkillsDir(agentDir), path.join(agentDir, 'users'), ...extraRoots], onChange, debounceMs);
172
+ }
173
+ /** EAP_SKILL_HOT_RELOAD:dev 默认开;server/desktop 默认关 */
174
+ export function resolveSkillHotReload(deploymentContext, explicit) {
175
+ if (explicit !== undefined)
176
+ return explicit;
177
+ const v = process.env.EAP_SKILL_HOT_RELOAD;
178
+ if (v === '0' || v === 'false' || v === 'no')
179
+ return false;
180
+ if (v === '1' || v === 'true' || v === 'yes')
181
+ return true;
182
+ return deploymentContext === 'dev';
183
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * AgentRuntime — Runtime SDK 门面
3
+ *
4
+ * Hosting 内嵌调用入口:execute / stream / resumeHitl / fork。
5
+ * 对外 HTTP 由 Hosting 提供;本地 eap dev 亦可直接实例化本类。
6
+ *
7
+ * @see 04-runtime-core/design.md §1.5 / §1.7
8
+ */
9
+ import type { InvokeOrchestrator } from '../api/handlers/invoke.handler.js';
10
+ import type { ICheckpointSaver } from '../checkpoint/contracts/checkpoint-saver.contract.js';
11
+ import type { ITraceCollector } from '../contracts/trace-collector.js';
12
+ import type { IStateGraphEngine } from '../graph/contracts/state-graph.contract.js';
13
+ import { HitlHandler } from '../graph/hitl/hitl-handler.js';
14
+ import type { GraphLoader } from '../registry/graph-loader.js';
15
+ import type { SessionContextService } from '../session/session-context.service.js';
16
+ import type { MessageService } from '../session/message.service.js';
17
+ import type { SSEEvent } from '../sse/contracts/sse-emitter.contract.js';
18
+ import type { TaskService } from '../task/task.service.js';
19
+ import type { ExecuteParams, ExecuteResult, ForkOverrides, ForkResult, HitlResponse, ResumeHitlResult, SeedSessionMessagesParams, SeedSessionMessagesResult } from './types.js';
20
+ export interface ForkRelationRecord {
21
+ originalTraceId: string;
22
+ forkedTraceId: string;
23
+ checkpointId: string;
24
+ overrides?: ForkOverrides;
25
+ }
26
+ export type RecordForkRelation = (record: ForkRelationRecord) => Promise<void>;
27
+ export interface AgentRuntimeDeps {
28
+ invokeOrchestrator: InvokeOrchestrator;
29
+ sessionContextService: SessionContextService;
30
+ taskService: TaskService;
31
+ graphEngine: IStateGraphEngine;
32
+ checkpointSaver: ICheckpointSaver;
33
+ hitlHandler: HitlHandler;
34
+ graphLoader?: GraphLoader;
35
+ /** 多轮短期记忆写回;未注入时 AgentRuntime.stream 跳过持久化 */
36
+ messageService?: MessageService;
37
+ /**
38
+ * Hosting 注入的 Trace 采集器。与 ExecuteParams.traceId 同时存在时,
39
+ * Skill/Tool 节点会 createNode/completeNode。不注入则只发 SSE,不写 Span。
40
+ */
41
+ traceCollector?: ITraceCollector;
42
+ recordForkRelation?: RecordForkRelation;
43
+ }
44
+ /**
45
+ * AgentRuntime — 管理 Graph 执行的 SDK 门面
46
+ */
47
+ export declare class AgentRuntime {
48
+ private readonly deps;
49
+ constructor(deps: AgentRuntimeDeps);
50
+ /** 从 GraphLoader 解析 tool manifest 映射(invoke/stream/resume/fork 共用) */
51
+ private resolveLoadedTools;
52
+ /** 从预装重载 Skill 定义(HITL/Fork 时 ephemeral 字段可能丢失) */
53
+ private resolveLoadedSkills;
54
+ /**
55
+ * 向会话预置种子消息(开发者 few-shot / 开场白)
56
+ *
57
+ * 专为 SDK `createAgentService({ messages })` 提供:在首条真实用户输入之前
58
+ * 一次性将开发者提供的对话上下文写入 session,后续 execute/stream 直接沿用现有
59
+ * “Session 历史 + 当前输入”途径。
60
+ *
61
+ * 行为:
62
+ * - `role` 仅接受 `user` / `assistant`;`system` 应写入 graph.json LLM 节点的
63
+ * `config.systemPrompt`(由 SystemPromptBuilder 拼平台规则 + 开发者提示词);
64
+ * `tool` 必须与前置 assistant.toolCalls 严格配对,不得单独作为种子。
65
+ * - 幂等语义(exactly-once):当 session 已存在任何历史消息时,直接返回
66
+ * `seeded: false`,不重复写入。
67
+ *
68
+ * @throws PARAMS_INVALID messages 为空、role 不在白名单、content 非字符串或为空
69
+ * @throws PARAMS_INVALID messageService 未注入(无存储无法写入)
70
+ */
71
+ seedSessionMessages(params: SeedSessionMessagesParams): Promise<SeedSessionMessagesResult>;
72
+ /** 同步执行 Graph(经 InvokeOrchestrator,内含 loadedTools 注入) */
73
+ execute(params: ExecuteParams): Promise<ExecuteResult>;
74
+ /**
75
+ * 流式执行 Graph,产出 SSE 事件序列
76
+ */
77
+ stream(params: ExecuteParams): AsyncIterable<SSEEvent>;
78
+ /**
79
+ * HITL 用户响应后继续执行(同步结果)。
80
+ *
81
+ * 内部消费 `streamResumeHitl`:成功为 success;再次确认暂停为 waiting_hitl(不抛错)。
82
+ * 需要过程事件(`hitl.resumed` / `tool.result` / `skill.completed`)时请直接迭代 streamResumeHitl。
83
+ */
84
+ resumeHitl(taskId: string, response: HitlResponse): Promise<ResumeHitlResult>;
85
+ /**
86
+ * HITL 恢复的流式入口:新开一条 SSE(第一条 stream 在 `hitl.waited` 后已结束)。
87
+ *
88
+ * 事件顺序:`hitl.resumed` → 图内 `tool.*` / `skill.*` / `response.*` → `task.completed`
89
+ * 或再次 `hitl.waited`。拒绝/失败会发出同 `toolCallId` 的 `tool.error`。
90
+ *
91
+ * 从 GraphLoader `buildGraph` + Checkpoint GraphState 续跑,不用空的 `restore()`。
92
+ */
93
+ streamResumeHitl(taskId: string, response: HitlResponse): AsyncIterable<SSEEvent>;
94
+ /**
95
+ * 从 Checkpoint Fork 并真实重新执行
96
+ */
97
+ fork(checkpointId: string, overrides?: ForkOverrides): Promise<ForkResult>;
98
+ private prepareHitlResume;
99
+ private rebuildExecutableGraph;
100
+ private handleHitlTimeout;
101
+ private finalizeHitlTimeout;
102
+ private toSSE;
103
+ private runtimeEventToSSE;
104
+ }
105
+ /** 工厂:从运行时依赖组装 AgentRuntime */
106
+ export declare function createAgentRuntime(deps: AgentRuntimeDeps): AgentRuntime;