@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.
- package/README.md +323 -0
- package/dist/api/handlers/index.d.ts +3 -0
- package/dist/api/handlers/index.js +4 -0
- package/dist/api/handlers/invoke.handler.d.ts +77 -0
- package/dist/api/handlers/invoke.handler.js +411 -0
- package/dist/api/handlers/messages.handler.d.ts +53 -0
- package/dist/api/handlers/messages.handler.js +80 -0
- package/dist/api/handlers/stream.handler.d.ts +92 -0
- package/dist/api/handlers/stream.handler.js +432 -0
- package/dist/api/index.d.ts +3 -0
- package/dist/api/index.js +4 -0
- package/dist/api/middleware/auth.middleware.d.ts +96 -0
- package/dist/api/middleware/auth.middleware.js +158 -0
- package/dist/api/middleware/index.d.ts +1 -0
- package/dist/api/middleware/index.js +2 -0
- package/dist/api/routes/agent.routes.d.ts +44 -0
- package/dist/api/routes/agent.routes.js +204 -0
- package/dist/api/routes/index.d.ts +3 -0
- package/dist/api/routes/index.js +4 -0
- package/dist/api/routes/session.routes.d.ts +82 -0
- package/dist/api/routes/session.routes.js +169 -0
- package/dist/api/routes/task.routes.d.ts +75 -0
- package/dist/api/routes/task.routes.js +108 -0
- package/dist/checkpoint/checkpoint-serializer.d.ts +58 -0
- package/dist/checkpoint/checkpoint-serializer.js +81 -0
- package/dist/checkpoint/composite-checkpoint-saver.d.ts +42 -0
- package/dist/checkpoint/composite-checkpoint-saver.js +118 -0
- package/dist/checkpoint/contracts/checkpoint-saver.contract.d.ts +65 -0
- package/dist/checkpoint/contracts/checkpoint-saver.contract.js +12 -0
- package/dist/checkpoint/contracts/index.d.ts +1 -0
- package/dist/checkpoint/contracts/index.js +1 -0
- package/dist/checkpoint/file-checkpoint-saver.d.ts +19 -0
- package/dist/checkpoint/file-checkpoint-saver.js +98 -0
- package/dist/checkpoint/hybrid-checkpoint-saver.d.ts +130 -0
- package/dist/checkpoint/hybrid-checkpoint-saver.js +211 -0
- package/dist/checkpoint/in-memory-checkpoint-saver.d.ts +14 -0
- package/dist/checkpoint/in-memory-checkpoint-saver.js +46 -0
- package/dist/checkpoint/index.d.ts +16 -0
- package/dist/checkpoint/index.js +13 -0
- package/dist/checkpoint/mongo-checkpoint-saver.d.ts +38 -0
- package/dist/checkpoint/mongo-checkpoint-saver.js +56 -0
- package/dist/checkpoint/pg-checkpoint-saver.d.ts +59 -0
- package/dist/checkpoint/pg-checkpoint-saver.js +140 -0
- package/dist/checkpoint/redis-checkpoint-saver.d.ts +68 -0
- package/dist/checkpoint/redis-checkpoint-saver.js +173 -0
- package/dist/checkpoint/restore-checkpoint.d.ts +33 -0
- package/dist/checkpoint/restore-checkpoint.js +33 -0
- package/dist/common/agent-code.d.ts +10 -0
- package/dist/common/agent-code.js +12 -0
- package/dist/common/concurrency.d.ts +79 -0
- package/dist/common/concurrency.js +121 -0
- package/dist/common/health.d.ts +40 -0
- package/dist/common/health.js +37 -0
- package/dist/common/index.d.ts +5 -0
- package/dist/common/index.js +5 -0
- package/dist/common/logger.d.ts +34 -0
- package/dist/common/logger.js +38 -0
- package/dist/common/queue-consumer.d.ts +125 -0
- package/dist/common/queue-consumer.js +159 -0
- package/dist/common/trace-id.d.ts +2 -0
- package/dist/common/trace-id.js +8 -0
- package/dist/common/types.d.ts +104 -0
- package/dist/common/types.js +14 -0
- package/dist/contracts/index.d.ts +11 -0
- package/dist/contracts/index.js +10 -0
- package/dist/contracts/permission-checker.d.ts +10 -0
- package/dist/contracts/permission-checker.js +4 -0
- package/dist/contracts/trace-collector.d.ts +211 -0
- package/dist/contracts/trace-collector.js +13 -0
- package/dist/governance/governance-client.d.ts +38 -0
- package/dist/governance/governance-client.js +95 -0
- package/dist/governance/index.d.ts +7 -0
- package/dist/governance/index.js +5 -0
- package/dist/governance/permission-guard.d.ts +19 -0
- package/dist/governance/permission-guard.js +59 -0
- package/dist/graph/adapters/index.d.ts +3 -0
- package/dist/graph/adapters/index.js +3 -0
- package/dist/graph/adapters/langgraph-checkpointer.d.ts +40 -0
- package/dist/graph/adapters/langgraph-checkpointer.js +211 -0
- package/dist/graph/adapters/langgraph.adapter.d.ts +190 -0
- package/dist/graph/adapters/langgraph.adapter.js +1303 -0
- package/dist/graph/adapters/subgraph-compiler.d.ts +39 -0
- package/dist/graph/adapters/subgraph-compiler.js +248 -0
- package/dist/graph/condition-evaluator.d.ts +57 -0
- package/dist/graph/condition-evaluator.js +162 -0
- package/dist/graph/contracts/executable-graph.d.ts +340 -0
- package/dist/graph/contracts/executable-graph.js +10 -0
- package/dist/graph/contracts/index.d.ts +2 -0
- package/dist/graph/contracts/index.js +2 -0
- package/dist/graph/contracts/state-graph.contract.d.ts +76 -0
- package/dist/graph/contracts/state-graph.contract.js +11 -0
- package/dist/graph/hitl/hitl-handler.d.ts +199 -0
- package/dist/graph/hitl/hitl-handler.js +480 -0
- package/dist/graph/hitl/index.d.ts +1 -0
- package/dist/graph/hitl/index.js +1 -0
- package/dist/graph/index.d.ts +7 -0
- package/dist/graph/index.js +7 -0
- package/dist/graph/nodes/index.d.ts +2 -0
- package/dist/graph/nodes/index.js +2 -0
- package/dist/graph/nodes/llm-node.d.ts +182 -0
- package/dist/graph/nodes/llm-node.js +281 -0
- package/dist/graph/nodes/skill-bind-node.d.ts +32 -0
- package/dist/graph/nodes/skill-bind-node.js +116 -0
- package/dist/graph/nodes/tool-node.d.ts +75 -0
- package/dist/graph/nodes/tool-node.js +324 -0
- package/dist/graph/resolve-graph-prompt.d.ts +5 -0
- package/dist/graph/resolve-graph-prompt.js +75 -0
- package/dist/graph/retry/budget-aware-retry.d.ts +91 -0
- package/dist/graph/retry/budget-aware-retry.js +126 -0
- package/dist/graph/retry/index.d.ts +9 -0
- package/dist/graph/retry/index.js +8 -0
- package/dist/graph/retry/node-retry.d.ts +123 -0
- package/dist/graph/retry/node-retry.js +235 -0
- package/dist/graph/skill-audit-recorder.d.ts +126 -0
- package/dist/graph/skill-audit-recorder.js +114 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +32 -0
- package/dist/memory/compression/compression-stats.d.ts +109 -0
- package/dist/memory/compression/compression-stats.js +144 -0
- package/dist/memory/compression/compression.repository.d.ts +62 -0
- package/dist/memory/compression/compression.repository.js +71 -0
- package/dist/memory/compression/index.d.ts +10 -0
- package/dist/memory/compression/index.js +15 -0
- package/dist/memory/compression/llm-summarize.d.ts +58 -0
- package/dist/memory/compression/llm-summarize.js +192 -0
- package/dist/memory/compression/sliding-window.compression.d.ts +60 -0
- package/dist/memory/compression/sliding-window.compression.js +175 -0
- package/dist/memory/index.d.ts +4 -0
- package/dist/memory/index.js +7 -0
- package/dist/memory/long-term-memory.service.d.ts +94 -0
- package/dist/memory/long-term-memory.service.js +120 -0
- package/dist/memory/message-compression.service.d.ts +128 -0
- package/dist/memory/message-compression.service.js +69 -0
- package/dist/memory/pg-memory.repository.d.ts +44 -0
- package/dist/memory/pg-memory.repository.js +108 -0
- package/dist/memory/semantic-retrieval.service.d.ts +148 -0
- package/dist/memory/semantic-retrieval.service.js +238 -0
- package/dist/providers/echo-llm-provider.d.ts +10 -0
- package/dist/providers/echo-llm-provider.js +87 -0
- package/dist/providers/http-llm-provider.d.ts +35 -0
- package/dist/providers/http-llm-provider.js +404 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.js +5 -0
- package/dist/providers/local-llm-provider.d.ts +27 -0
- package/dist/providers/local-llm-provider.js +105 -0
- package/dist/providers/resolve-llm-model.d.ts +13 -0
- package/dist/providers/resolve-llm-model.js +30 -0
- package/dist/providers/routing-llm-provider.d.ts +28 -0
- package/dist/providers/routing-llm-provider.js +79 -0
- package/dist/registry/agent-models.d.ts +1 -0
- package/dist/registry/agent-models.js +1 -0
- package/dist/registry/agent-registry-client.d.ts +56 -0
- package/dist/registry/agent-registry-client.js +36 -0
- package/dist/registry/definition-cache.d.ts +37 -0
- package/dist/registry/definition-cache.js +82 -0
- package/dist/registry/deployment-snapshot.d.ts +99 -0
- package/dist/registry/deployment-snapshot.js +542 -0
- package/dist/registry/graph-loader.d.ts +134 -0
- package/dist/registry/graph-loader.js +985 -0
- package/dist/registry/index.d.ts +9 -0
- package/dist/registry/index.js +9 -0
- package/dist/registry/preload-errors.d.ts +13 -0
- package/dist/registry/preload-errors.js +35 -0
- package/dist/registry/preload-flags.d.ts +22 -0
- package/dist/registry/preload-flags.js +44 -0
- package/dist/registry/skill-io-guard.d.ts +25 -0
- package/dist/registry/skill-io-guard.js +98 -0
- package/dist/registry/skill-tree.d.ts +27 -0
- package/dist/registry/skill-tree.js +183 -0
- package/dist/runtime/agent-runtime.d.ts +106 -0
- package/dist/runtime/agent-runtime.js +777 -0
- package/dist/runtime/dev-runtime.d.ts +69 -0
- package/dist/runtime/dev-runtime.js +199 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.js +3 -0
- package/dist/runtime/storage-profile.d.ts +50 -0
- package/dist/runtime/storage-profile.js +138 -0
- package/dist/runtime/types.d.ts +120 -0
- package/dist/runtime/types.js +9 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.js +161 -0
- package/dist/session/compression-middleware.d.ts +126 -0
- package/dist/session/compression-middleware.js +230 -0
- package/dist/session/file-message.repository.d.ts +25 -0
- package/dist/session/file-message.repository.js +78 -0
- package/dist/session/file-session.repository.d.ts +72 -0
- package/dist/session/file-session.repository.js +212 -0
- package/dist/session/index.d.ts +13 -0
- package/dist/session/index.js +12 -0
- package/dist/session/message.service.d.ts +80 -0
- package/dist/session/message.service.js +128 -0
- package/dist/session/persist-turn-messages.d.ts +145 -0
- package/dist/session/persist-turn-messages.js +325 -0
- package/dist/session/pg-message.repository.d.ts +49 -0
- package/dist/session/pg-message.repository.js +149 -0
- package/dist/session/pg-session.repository.d.ts +46 -0
- package/dist/session/pg-session.repository.js +117 -0
- package/dist/session/session-context.service.d.ts +49 -0
- package/dist/session/session-context.service.js +66 -0
- package/dist/session/session.service.d.ts +194 -0
- package/dist/session/session.service.js +166 -0
- package/dist/sse/connection-event-logger.d.ts +21 -0
- package/dist/sse/connection-event-logger.js +33 -0
- package/dist/sse/contracts/index.d.ts +1 -0
- package/dist/sse/contracts/index.js +1 -0
- package/dist/sse/contracts/sse-emitter.contract.d.ts +74 -0
- package/dist/sse/contracts/sse-emitter.contract.js +11 -0
- package/dist/sse/event-buffer.d.ts +20 -0
- package/dist/sse/event-buffer.js +45 -0
- package/dist/sse/events/code-events.d.ts +19 -0
- package/dist/sse/events/code-events.js +9 -0
- package/dist/sse/events/collaboration-events.d.ts +37 -0
- package/dist/sse/events/collaboration-events.js +11 -0
- package/dist/sse/events/connection-events.d.ts +13 -0
- package/dist/sse/events/connection-events.js +9 -0
- package/dist/sse/events/file-events.d.ts +29 -0
- package/dist/sse/events/file-events.js +10 -0
- package/dist/sse/events/hitl-events.d.ts +33 -0
- package/dist/sse/events/hitl-events.js +10 -0
- package/dist/sse/events/index.d.ts +107 -0
- package/dist/sse/events/index.js +96 -0
- package/dist/sse/events/plan-events.d.ts +38 -0
- package/dist/sse/events/plan-events.js +11 -0
- package/dist/sse/events/reasoning-events.d.ts +35 -0
- package/dist/sse/events/reasoning-events.js +13 -0
- package/dist/sse/events/response-events.d.ts +25 -0
- package/dist/sse/events/response-events.js +12 -0
- package/dist/sse/events/session-events.d.ts +43 -0
- package/dist/sse/events/session-events.js +12 -0
- package/dist/sse/events/skill-events.d.ts +48 -0
- package/dist/sse/events/skill-events.js +11 -0
- package/dist/sse/events/stats-events.d.ts +44 -0
- package/dist/sse/events/stats-events.js +12 -0
- package/dist/sse/events/tool-events.d.ts +68 -0
- package/dist/sse/events/tool-events.js +14 -0
- package/dist/sse/index.d.ts +8 -0
- package/dist/sse/index.js +8 -0
- package/dist/sse/sse-connection-manager.d.ts +116 -0
- package/dist/sse/sse-connection-manager.js +185 -0
- package/dist/sse/sse-emitter.d.ts +108 -0
- package/dist/sse/sse-emitter.js +210 -0
- package/dist/sse/sse-heartbeat.d.ts +58 -0
- package/dist/sse/sse-heartbeat.js +76 -0
- package/dist/sse/trace-collector.d.ts +60 -0
- package/dist/sse/trace-collector.js +107 -0
- package/dist/task/contracts/index.d.ts +2 -0
- package/dist/task/contracts/index.js +1 -0
- package/dist/task/contracts/task-manager.contract.d.ts +160 -0
- package/dist/task/contracts/task-manager.contract.js +10 -0
- package/dist/task/index.d.ts +7 -0
- package/dist/task/index.js +5 -0
- package/dist/task/pg-task.repository.d.ts +47 -0
- package/dist/task/pg-task.repository.js +131 -0
- package/dist/task/task-progress-tracker.d.ts +67 -0
- package/dist/task/task-progress-tracker.js +80 -0
- package/dist/task/task-timeout.d.ts +70 -0
- package/dist/task/task-timeout.js +116 -0
- package/dist/task/task.service.d.ts +84 -0
- package/dist/task/task.service.js +233 -0
- package/dist/token/compression-budget-integration.d.ts +145 -0
- package/dist/token/compression-budget-integration.js +185 -0
- package/dist/token/context-window-budget.d.ts +113 -0
- package/dist/token/context-window-budget.js +134 -0
- package/dist/token/contracts/index.d.ts +1 -0
- package/dist/token/contracts/index.js +1 -0
- package/dist/token/contracts/token-budget.contract.d.ts +77 -0
- package/dist/token/contracts/token-budget.contract.js +11 -0
- package/dist/token/index.d.ts +12 -0
- package/dist/token/index.js +10 -0
- package/dist/token/pg-token-budget.repository.d.ts +39 -0
- package/dist/token/pg-token-budget.repository.js +116 -0
- package/dist/token/session-budget-checker.d.ts +54 -0
- package/dist/token/session-budget-checker.js +72 -0
- package/dist/token/token-budget-guard.d.ts +66 -0
- package/dist/token/token-budget-guard.js +97 -0
- package/dist/token/token-budget.service.d.ts +86 -0
- package/dist/token/token-budget.service.js +130 -0
- package/dist/token/token-detail-mode.d.ts +73 -0
- package/dist/token/token-detail-mode.js +107 -0
- package/dist/token/token-estimator.d.ts +80 -0
- package/dist/token/token-estimator.js +134 -0
- package/dist/token/token-stats.service.d.ts +88 -0
- package/dist/token/token-stats.service.js +94 -0
- package/dist/tool/create-tool-executor.d.ts +33 -0
- package/dist/tool/create-tool-executor.js +60 -0
- package/dist/tool/dev-http-executor.d.ts +18 -0
- package/dist/tool/dev-http-executor.js +96 -0
- package/dist/tool/dev-mcp-executor.d.ts +29 -0
- package/dist/tool/dev-mcp-executor.js +84 -0
- package/dist/tool/dev-tool-executor.d.ts +23 -0
- package/dist/tool/dev-tool-executor.js +55 -0
- package/dist/tool/file-artifact.d.ts +11 -0
- package/dist/tool/file-artifact.js +90 -0
- package/dist/tool/http-tool-executor.d.ts +17 -0
- package/dist/tool/http-tool-executor.js +158 -0
- package/dist/tool/index.d.ts +18 -0
- package/dist/tool/index.js +17 -0
- package/dist/tool/loaded-tool-definition.d.ts +35 -0
- package/dist/tool/loaded-tool-definition.js +9 -0
- package/dist/tool/local-mcp-client.d.ts +23 -0
- package/dist/tool/local-mcp-client.js +225 -0
- package/dist/tool/local-tool-executor.d.ts +37 -0
- package/dist/tool/local-tool-executor.js +249 -0
- package/dist/tool/mcp-tool-executor.d.ts +23 -0
- package/dist/tool/mcp-tool-executor.js +160 -0
- package/dist/tool/mock-tool-executor.d.ts +28 -0
- package/dist/tool/mock-tool-executor.js +65 -0
- package/dist/tool/system-prompt-builder.d.ts +114 -0
- package/dist/tool/system-prompt-builder.js +213 -0
- package/dist/tool/tool-confirmation.d.ts +29 -0
- package/dist/tool/tool-confirmation.js +81 -0
- package/dist/tool/tool-event-emitter.d.ts +58 -0
- package/dist/tool/tool-event-emitter.js +154 -0
- package/dist/tool/tool-execution-router.d.ts +25 -0
- package/dist/tool/tool-execution-router.js +50 -0
- package/dist/tool/tool-executor.interface.d.ts +85 -0
- package/dist/tool/tool-executor.interface.js +7 -0
- package/dist/tool/tool-orchestrator.d.ts +22 -0
- package/dist/tool/tool-orchestrator.js +104 -0
- package/dist/tool/tool-result-injector.d.ts +64 -0
- package/dist/tool/tool-result-injector.js +65 -0
- package/dist/utils/format-error.d.ts +4 -0
- package/dist/utils/format-error.js +4 -0
- package/dist/utils/http-error.d.ts +11 -0
- package/dist/utils/http-error.js +24 -0
- package/package.json +56 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace 采集器接口
|
|
3
|
+
*
|
|
4
|
+
* 由 foundation-service 实现,Runtime 在执行过程中调用此接口推送 Trace 事件。
|
|
5
|
+
*
|
|
6
|
+
* 支持双层追踪模型:
|
|
7
|
+
* - 执行流(ExecutionFlow/ExecutionNode):智能体内部执行流
|
|
8
|
+
* - 链路(TraceLink/TraceLinkNode):跨服务调用链路
|
|
9
|
+
*
|
|
10
|
+
* @see foundation-service 实现存储和查询
|
|
11
|
+
* @see admin-portal 管理页面
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Trace 事件
|
|
15
|
+
*/
|
|
16
|
+
export interface TraceEvent {
|
|
17
|
+
/** 事件 ID */
|
|
18
|
+
id: string;
|
|
19
|
+
/** 事件类型 */
|
|
20
|
+
type: string;
|
|
21
|
+
/** 关联 ID */
|
|
22
|
+
correlationId: string;
|
|
23
|
+
/** 任务 ID */
|
|
24
|
+
taskId: string;
|
|
25
|
+
/** 会话 ID */
|
|
26
|
+
sessionId: string;
|
|
27
|
+
/** 时间戳(ISO 8601 格式,UTC) */
|
|
28
|
+
timestamp: string;
|
|
29
|
+
/** 事件负载 */
|
|
30
|
+
payload: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Trace 会话
|
|
34
|
+
*/
|
|
35
|
+
export interface TraceSession {
|
|
36
|
+
/** 会话 ID */
|
|
37
|
+
sessionId: string;
|
|
38
|
+
/** 任务 ID */
|
|
39
|
+
taskId: string;
|
|
40
|
+
/** 开始时间(ISO 8601 格式,UTC) */
|
|
41
|
+
startTime: string;
|
|
42
|
+
/** 结束时间(ISO 8601 格式,UTC) */
|
|
43
|
+
endTime?: string;
|
|
44
|
+
/** 事件列表 */
|
|
45
|
+
events: TraceEvent[];
|
|
46
|
+
/** 状态 */
|
|
47
|
+
status: 'running' | 'completed' | 'failed';
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 执行流事件
|
|
51
|
+
*
|
|
52
|
+
* 用于记录智能体内部执行流。
|
|
53
|
+
*/
|
|
54
|
+
export interface ExecutionFlowEvent {
|
|
55
|
+
/** 与 ExecuteParams.traceId / Foundation traces.id 同值 */
|
|
56
|
+
traceId: string;
|
|
57
|
+
/** 历史字段(值为 agentCode;对齐 foundation Trace API 的 agentId 字段) */
|
|
58
|
+
agentId: string;
|
|
59
|
+
/** 对外主键(优先写入 Trace) */
|
|
60
|
+
agentCode?: string;
|
|
61
|
+
/** 会话 ID */
|
|
62
|
+
sessionId: string;
|
|
63
|
+
/** 用户 ID */
|
|
64
|
+
userId: string;
|
|
65
|
+
/** 关联 ID */
|
|
66
|
+
correlationId?: string;
|
|
67
|
+
/** 调用类型 */
|
|
68
|
+
callType: 'sync' | 'async' | 'callback' | 'fork';
|
|
69
|
+
/** 元数据 */
|
|
70
|
+
metadata?: Record<string, unknown>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 执行节点事件
|
|
74
|
+
*
|
|
75
|
+
* 用于记录智能体内部执行节点。
|
|
76
|
+
*/
|
|
77
|
+
export interface ExecutionNodeEvent {
|
|
78
|
+
/** 与 ExecuteParams.traceId / Foundation traces.id 同值 */
|
|
79
|
+
traceId: string;
|
|
80
|
+
/** 父节点 ID */
|
|
81
|
+
parentNodeId?: string;
|
|
82
|
+
/** 节点名称 */
|
|
83
|
+
name: string;
|
|
84
|
+
/** 节点类型 */
|
|
85
|
+
type: 'start' | 'llm' | 'tool' | 'skill' | 'condition' | 'end';
|
|
86
|
+
/** 工具运行环境(type=tool) */
|
|
87
|
+
toolRuntime?: 'local' | 'server' | 'both' | 'mock';
|
|
88
|
+
/** Agent 对外主键 */
|
|
89
|
+
agentCode?: string;
|
|
90
|
+
/** 输入数据 */
|
|
91
|
+
input?: unknown;
|
|
92
|
+
/** 扩展元数据(如 skillId) */
|
|
93
|
+
metadata?: Record<string, unknown>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 链路事件
|
|
97
|
+
*
|
|
98
|
+
* 用于记录跨服务调用链路。
|
|
99
|
+
*/
|
|
100
|
+
export interface TraceLinkEvent {
|
|
101
|
+
/** 关联 ID */
|
|
102
|
+
correlationId: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 链路节点事件
|
|
106
|
+
*
|
|
107
|
+
* 用于记录跨服务调用链路节点。
|
|
108
|
+
*/
|
|
109
|
+
export interface TraceLinkNodeEvent {
|
|
110
|
+
/** 链路 ID */
|
|
111
|
+
linkId: string;
|
|
112
|
+
/** 父节点 ID */
|
|
113
|
+
parentNodeId?: string;
|
|
114
|
+
/** 服务 ID */
|
|
115
|
+
serviceId: string;
|
|
116
|
+
/** 服务名称 */
|
|
117
|
+
serviceName: string;
|
|
118
|
+
/** 操作名称 */
|
|
119
|
+
operation: string;
|
|
120
|
+
/** 主机地址 */
|
|
121
|
+
host?: string;
|
|
122
|
+
/** 端口 */
|
|
123
|
+
port?: number;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* ITraceCollector — Trace 采集器接口
|
|
127
|
+
*
|
|
128
|
+
* 由 foundation-service 实现,Runtime 通过此接口推送事件。
|
|
129
|
+
* Runtime 在执行过程中调用 collect() 推送 SSE 事件转换的 Trace 事件。
|
|
130
|
+
*/
|
|
131
|
+
export interface ITraceCollector {
|
|
132
|
+
/**
|
|
133
|
+
* 收集 Trace 事件
|
|
134
|
+
*
|
|
135
|
+
* @param event - Trace 事件
|
|
136
|
+
*/
|
|
137
|
+
collect(event: TraceEvent): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* 开始 Trace 会话
|
|
140
|
+
*
|
|
141
|
+
* @param sessionId - 会话 ID
|
|
142
|
+
* @param taskId - 任务 ID
|
|
143
|
+
*/
|
|
144
|
+
startSession(sessionId: string, taskId: string): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* 结束 Trace 会话
|
|
147
|
+
*
|
|
148
|
+
* @param sessionId - 会话 ID
|
|
149
|
+
* @param status - 会话状态
|
|
150
|
+
*/
|
|
151
|
+
endSession(sessionId: string, status: 'completed' | 'failed'): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* 获取 Trace 会话
|
|
154
|
+
*
|
|
155
|
+
* @param sessionId - 会话 ID
|
|
156
|
+
* @returns Trace 会话
|
|
157
|
+
*/
|
|
158
|
+
getSession(sessionId: string): Promise<TraceSession | null>;
|
|
159
|
+
/**
|
|
160
|
+
* 创建执行流
|
|
161
|
+
*
|
|
162
|
+
* @param event - 执行流事件
|
|
163
|
+
* @returns 执行流 ID
|
|
164
|
+
*/
|
|
165
|
+
createFlow(event: ExecutionFlowEvent): Promise<string>;
|
|
166
|
+
/**
|
|
167
|
+
* 创建执行节点
|
|
168
|
+
*
|
|
169
|
+
* @param event - 执行节点事件
|
|
170
|
+
* @returns 执行节点 ID
|
|
171
|
+
*/
|
|
172
|
+
createNode(event: ExecutionNodeEvent): Promise<string>;
|
|
173
|
+
/**
|
|
174
|
+
* 完成执行节点
|
|
175
|
+
*
|
|
176
|
+
* @param nodeId - 节点 ID
|
|
177
|
+
* @param params - 完成参数
|
|
178
|
+
*/
|
|
179
|
+
completeNode(nodeId: string, params: {
|
|
180
|
+
status: 'completed' | 'failed';
|
|
181
|
+
output?: unknown;
|
|
182
|
+
error?: string;
|
|
183
|
+
inputTokens?: number;
|
|
184
|
+
outputTokens?: number;
|
|
185
|
+
totalTokens?: number;
|
|
186
|
+
}): Promise<void>;
|
|
187
|
+
/**
|
|
188
|
+
* 创建链路
|
|
189
|
+
*
|
|
190
|
+
* @param event - 链路事件
|
|
191
|
+
* @returns 链路 ID
|
|
192
|
+
*/
|
|
193
|
+
createLink(event: TraceLinkEvent): Promise<string>;
|
|
194
|
+
/**
|
|
195
|
+
* 创建链路节点
|
|
196
|
+
*
|
|
197
|
+
* @param event - 链路节点事件
|
|
198
|
+
* @returns 链路节点 ID
|
|
199
|
+
*/
|
|
200
|
+
createLinkNode(event: TraceLinkNodeEvent): Promise<string>;
|
|
201
|
+
/**
|
|
202
|
+
* 完成链路节点
|
|
203
|
+
*
|
|
204
|
+
* @param nodeId - 链路节点 ID
|
|
205
|
+
* @param params - 完成参数
|
|
206
|
+
*/
|
|
207
|
+
completeLinkNode(nodeId: string, params: {
|
|
208
|
+
status: 'completed' | 'failed';
|
|
209
|
+
error?: string;
|
|
210
|
+
}): Promise<void>;
|
|
211
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace 采集器接口
|
|
3
|
+
*
|
|
4
|
+
* 由 foundation-service 实现,Runtime 在执行过程中调用此接口推送 Trace 事件。
|
|
5
|
+
*
|
|
6
|
+
* 支持双层追踪模型:
|
|
7
|
+
* - 执行流(ExecutionFlow/ExecutionNode):智能体内部执行流
|
|
8
|
+
* - 链路(TraceLink/TraceLinkNode):跨服务调用链路
|
|
9
|
+
*
|
|
10
|
+
* @see foundation-service 实现存储和查询
|
|
11
|
+
* @see admin-portal 管理页面
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 治理服务 HTTP 客户端(06-governance validateToken / checkPermission)
|
|
3
|
+
*/
|
|
4
|
+
import type { ExecutionContext, GovernancePermissionCheckParams, GovernancePermissionCheckResult } from '@gt-fe/eap-contracts';
|
|
5
|
+
export interface HttpGovernanceClientOptions {
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface IGovernanceClient {
|
|
10
|
+
checkPermission(ctx: ExecutionContext, params: GovernancePermissionCheckParams): Promise<GovernancePermissionCheckResult>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 通过 foundation-service governance API 校验权限
|
|
14
|
+
*/
|
|
15
|
+
export declare class HttpGovernanceClient implements IGovernanceClient {
|
|
16
|
+
private readonly baseUrl;
|
|
17
|
+
private readonly timeout;
|
|
18
|
+
constructor(options: HttpGovernanceClientOptions);
|
|
19
|
+
checkPermission(ctx: ExecutionContext, params: GovernancePermissionCheckParams): Promise<GovernancePermissionCheckResult>;
|
|
20
|
+
}
|
|
21
|
+
/** 本地/测试:跳过远程校验 */
|
|
22
|
+
export declare class AllowAllGovernanceClient implements IGovernanceClient {
|
|
23
|
+
checkPermission(_ctx: ExecutionContext, _params: GovernancePermissionCheckParams): Promise<GovernancePermissionCheckResult>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 从 Invoke 请求与 userId 解析 ExecutionContext
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveExecutionContext(req: {
|
|
29
|
+
/** @deprecated 使用 agentCode */
|
|
30
|
+
agentId?: string;
|
|
31
|
+
agentCode?: string;
|
|
32
|
+
sessionId?: string;
|
|
33
|
+
executionContext?: ExecutionContext;
|
|
34
|
+
userId?: string;
|
|
35
|
+
}, fallbackUserId: string, options?: {
|
|
36
|
+
correlationId?: string;
|
|
37
|
+
delegationToken?: string;
|
|
38
|
+
}): ExecutionContext;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 治理服务 HTTP 客户端(06-governance validateToken / checkPermission)
|
|
3
|
+
*/
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
/**
|
|
6
|
+
* 通过 foundation-service governance API 校验权限
|
|
7
|
+
*/
|
|
8
|
+
export class HttpGovernanceClient {
|
|
9
|
+
baseUrl;
|
|
10
|
+
timeout;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.baseUrl = options.baseUrl.replace(/\/+$/, '');
|
|
13
|
+
this.timeout = options.timeout ?? 10_000;
|
|
14
|
+
}
|
|
15
|
+
async checkPermission(ctx, params) {
|
|
16
|
+
const controller = new AbortController();
|
|
17
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
18
|
+
try {
|
|
19
|
+
const response = await fetch(`${this.baseUrl}/api/v1/governance/check-permission`, {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
headers: {
|
|
22
|
+
'Content-Type': 'application/json',
|
|
23
|
+
Authorization: `Bearer ${ctx.delegationToken}`,
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify({
|
|
26
|
+
userId: ctx.userId,
|
|
27
|
+
callerType: ctx.callerType,
|
|
28
|
+
roles: ctx.roles,
|
|
29
|
+
permissions: ctx.permissions,
|
|
30
|
+
resourceType: params.resourceType,
|
|
31
|
+
resourceId: params.resourceId,
|
|
32
|
+
action: params.action,
|
|
33
|
+
dataScope: params.dataScope,
|
|
34
|
+
resourceOwnerId: params.resourceOwnerId,
|
|
35
|
+
correlationId: ctx.correlationId,
|
|
36
|
+
}),
|
|
37
|
+
signal: controller.signal,
|
|
38
|
+
});
|
|
39
|
+
clearTimeout(timeoutId);
|
|
40
|
+
if (response.status === 503 || response.status >= 500) {
|
|
41
|
+
return { allowed: false, reason: 'GOVERNANCE_UNAVAILABLE' };
|
|
42
|
+
}
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
if (response.status === 403) {
|
|
45
|
+
try {
|
|
46
|
+
const errBody = (await response.json());
|
|
47
|
+
const errData = errBody.data ?? errBody;
|
|
48
|
+
return { allowed: false, reason: errData.reason ?? 'NO_PERMISSION' };
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return { allowed: false, reason: 'NO_PERMISSION' };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return { allowed: false, reason: 'NO_PERMISSION' };
|
|
55
|
+
}
|
|
56
|
+
const body = (await response.json());
|
|
57
|
+
const data = body.data ?? body;
|
|
58
|
+
return {
|
|
59
|
+
allowed: data.allowed === true,
|
|
60
|
+
reason: data.allowed ? undefined : (data.reason ?? 'NO_PERMISSION'),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
clearTimeout(timeoutId);
|
|
65
|
+
return { allowed: false, reason: 'GOVERNANCE_UNAVAILABLE' };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** 本地/测试:跳过远程校验 */
|
|
70
|
+
export class AllowAllGovernanceClient {
|
|
71
|
+
async checkPermission(_ctx, _params) {
|
|
72
|
+
return { allowed: true };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 从 Invoke 请求与 userId 解析 ExecutionContext
|
|
77
|
+
*/
|
|
78
|
+
export function resolveExecutionContext(req, fallbackUserId, options) {
|
|
79
|
+
if (req.executionContext) {
|
|
80
|
+
return {
|
|
81
|
+
...req.executionContext,
|
|
82
|
+
sessionId: req.executionContext.sessionId ?? req.sessionId,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const userId = req.userId ?? fallbackUserId;
|
|
86
|
+
return {
|
|
87
|
+
userId: userId === 'anonymous' ? null : userId,
|
|
88
|
+
callerType: 'user',
|
|
89
|
+
roles: [],
|
|
90
|
+
permissions: [],
|
|
91
|
+
delegationToken: options?.delegationToken ?? process.env.EAP_DELEGATION_TOKEN ?? '',
|
|
92
|
+
correlationId: options?.correlationId ?? randomUUID(),
|
|
93
|
+
sessionId: req.sessionId,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 权限校验 — 对齐 06-governance R16.8
|
|
3
|
+
*/
|
|
4
|
+
export type { CallerType, ExecutionContext, GovernancePermissionCheckParams, GovernancePermissionCheckResult, PermissionAction, PermissionDenyReason, PermissionResourceType, } from '@gt-fe/eap-contracts';
|
|
5
|
+
export type { IGovernanceClient } from './governance-client.js';
|
|
6
|
+
export { HttpGovernanceClient, AllowAllGovernanceClient, resolveExecutionContext, } from './governance-client.js';
|
|
7
|
+
export { assertToolPermission, assertSkillPermission, PermissionDeniedError, GovernanceUnavailableError, } from './permission-guard.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 权限校验 — 对齐 06-governance R16.8
|
|
3
|
+
*/
|
|
4
|
+
export { HttpGovernanceClient, AllowAllGovernanceClient, resolveExecutionContext, } from './governance-client.js';
|
|
5
|
+
export { assertToolPermission, assertSkillPermission, PermissionDeniedError, GovernanceUnavailableError, } from './permission-guard.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 执行期 Tool 权限守卫
|
|
3
|
+
*/
|
|
4
|
+
import type { ExecutionContext, PermissionDenyReason } from '@gt-fe/eap-contracts';
|
|
5
|
+
import type { IGovernanceClient } from './governance-client.js';
|
|
6
|
+
export declare class GovernanceUnavailableError extends Error {
|
|
7
|
+
readonly reason: PermissionDenyReason;
|
|
8
|
+
constructor(message?: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class PermissionDeniedError extends Error {
|
|
11
|
+
readonly reason: PermissionDenyReason;
|
|
12
|
+
constructor(reason?: PermissionDenyReason, message?: string);
|
|
13
|
+
}
|
|
14
|
+
export declare function assertToolPermission(client: IGovernanceClient | undefined, ctx: ExecutionContext, toolId: string, options?: {
|
|
15
|
+
dataScope?: 'user-bound' | 'department-bound' | 'global';
|
|
16
|
+
resourceOwnerId?: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
/** Skill 激活守卫(04 R15.3) */
|
|
19
|
+
export declare function assertSkillPermission(client: IGovernanceClient | undefined, ctx: ExecutionContext, skillId: string): Promise<void>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 执行期 Tool 权限守卫
|
|
3
|
+
*/
|
|
4
|
+
export class GovernanceUnavailableError extends Error {
|
|
5
|
+
reason = 'GOVERNANCE_UNAVAILABLE';
|
|
6
|
+
constructor(message = 'Governance service unavailable') {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'GovernanceUnavailableError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class PermissionDeniedError extends Error {
|
|
12
|
+
reason;
|
|
13
|
+
constructor(reason = 'NO_PERMISSION', message) {
|
|
14
|
+
super(message ?? reason);
|
|
15
|
+
this.name = 'PermissionDeniedError';
|
|
16
|
+
this.reason = reason;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export async function assertToolPermission(client, ctx, toolId, options) {
|
|
20
|
+
if (!client) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (!ctx.delegationToken && ctx.callerType === 'user') {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const result = await client.checkPermission(ctx, {
|
|
27
|
+
resourceType: 'tool',
|
|
28
|
+
resourceId: toolId,
|
|
29
|
+
action: 'execute',
|
|
30
|
+
dataScope: options?.dataScope,
|
|
31
|
+
resourceOwnerId: options?.resourceOwnerId,
|
|
32
|
+
});
|
|
33
|
+
if (result.reason === 'GOVERNANCE_UNAVAILABLE') {
|
|
34
|
+
throw new GovernanceUnavailableError();
|
|
35
|
+
}
|
|
36
|
+
if (!result.allowed) {
|
|
37
|
+
throw new PermissionDeniedError(result.reason ?? 'NO_PERMISSION');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Skill 激活守卫(04 R15.3) */
|
|
41
|
+
export async function assertSkillPermission(client, ctx, skillId) {
|
|
42
|
+
if (!client || !skillId) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!ctx.delegationToken && ctx.callerType === 'user') {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const result = await client.checkPermission(ctx, {
|
|
49
|
+
resourceType: 'skill',
|
|
50
|
+
resourceId: skillId,
|
|
51
|
+
action: 'use',
|
|
52
|
+
});
|
|
53
|
+
if (result.reason === 'GOVERNANCE_UNAVAILABLE') {
|
|
54
|
+
throw new GovernanceUnavailableError();
|
|
55
|
+
}
|
|
56
|
+
if (!result.allowed) {
|
|
57
|
+
throw new PermissionDeniedError(result.reason ?? 'NO_PERMISSION');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangGraphCheckpointer — BaseCheckpointSaver 桥接实现
|
|
3
|
+
*
|
|
4
|
+
* 将 LangGraph 的 BaseCheckpointSaver 接口委托到平台的 ICheckpointSaver,
|
|
5
|
+
* 实现 getTuple / put / putWrites / list 与 CheckpointData 之间的数据映射。
|
|
6
|
+
*
|
|
7
|
+
* @see design.md §1.4 Checkpoint 集成
|
|
8
|
+
* @see tasks.md Task 11.5
|
|
9
|
+
*/
|
|
10
|
+
import { BaseCheckpointSaver, type RunnableConfig, type CheckpointTuple, type Checkpoint, type CheckpointMetadata, type ListOptions } from '@langchain/langgraph';
|
|
11
|
+
import type { ICheckpointSaver } from '../../checkpoint/contracts/checkpoint-saver.contract.js';
|
|
12
|
+
/** LangGraph PendingWrite: [channel, value] */
|
|
13
|
+
type PendingWrite = [channel: string, value: unknown];
|
|
14
|
+
/**
|
|
15
|
+
* LangGraphCheckpointer — 桥接 LangGraph BaseCheckpointSaver → ICheckpointSaver
|
|
16
|
+
*
|
|
17
|
+
* intermediate writes(putWrites)先放进程内;checkpoint 快照仍落 ICheckpointSaver。
|
|
18
|
+
*/
|
|
19
|
+
export declare class LangGraphCheckpointer extends BaseCheckpointSaver {
|
|
20
|
+
private readonly saver;
|
|
21
|
+
/** threadId|ns|checkpointId → writes */
|
|
22
|
+
private readonly pendingWrites;
|
|
23
|
+
constructor(saver: ICheckpointSaver);
|
|
24
|
+
getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined>;
|
|
25
|
+
put(config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, _newVersions?: Record<string, number | string>): Promise<RunnableConfig>;
|
|
26
|
+
/**
|
|
27
|
+
* 存储与 checkpoint 关联的 intermediate writes(LangGraph 0.2+ 必需;缺此方法会报 putWrites is not a function)
|
|
28
|
+
*/
|
|
29
|
+
putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
|
|
30
|
+
list(config: RunnableConfig, options?: ListOptions): AsyncIterableIterator<CheckpointTuple>;
|
|
31
|
+
private extractThreadId;
|
|
32
|
+
private checkpointDataToTuple;
|
|
33
|
+
/**
|
|
34
|
+
* 优先还原 put() 时写入的 engineSnapshot;旧数据兜底补齐 pending_sends=[]。
|
|
35
|
+
*/
|
|
36
|
+
private restoreLangGraphCheckpoint;
|
|
37
|
+
private checkpointToData;
|
|
38
|
+
private extractExtraState;
|
|
39
|
+
}
|
|
40
|
+
export {};
|