@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,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RuntimeHealthInfo — Runtime 依赖健康状态
|
|
3
|
+
*
|
|
4
|
+
* 供宿主服务(Hosting/CLI)调用,组装 /health 响应。
|
|
5
|
+
* Runtime 作为库不直接暴露 HTTP 端点,只提供状态查询方法。
|
|
6
|
+
*/
|
|
7
|
+
export interface RuntimeHealthInfo {
|
|
8
|
+
/** Checkpoint 存储连接状态 */
|
|
9
|
+
checkpoint: 'connected' | 'disconnected';
|
|
10
|
+
/** Redis 连接状态 */
|
|
11
|
+
redis: 'connected' | 'disconnected' | 'not_configured';
|
|
12
|
+
/** 消息队列连接状态 */
|
|
13
|
+
mq: 'connected' | 'disconnected' | 'not_configured';
|
|
14
|
+
}
|
|
15
|
+
export interface HealthCheckDeps {
|
|
16
|
+
/** 检查 Checkpoint 存储是否可用 */
|
|
17
|
+
checkCheckpoint?: () => Promise<boolean>;
|
|
18
|
+
/** 检查 Redis 是否可用 */
|
|
19
|
+
checkRedis?: () => Promise<boolean>;
|
|
20
|
+
/** 检查消息队列是否可用 */
|
|
21
|
+
checkMq?: () => Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 获取 Runtime 依赖健康状态
|
|
25
|
+
*
|
|
26
|
+
* @param deps - 各依赖的健康检查函数(未提供则标记 not_configured)
|
|
27
|
+
* @returns RuntimeHealthInfo
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { getHealthInfo } from '@eap/runtime';
|
|
32
|
+
*
|
|
33
|
+
* const health = await getHealthInfo({
|
|
34
|
+
* checkCheckpoint: () => pgPool.query('SELECT 1').then(() => true).catch(() => false),
|
|
35
|
+
* checkRedis: () => redis.ping().then(() => true).catch(() => false),
|
|
36
|
+
* });
|
|
37
|
+
* // { checkpoint: 'connected', redis: 'connected', mq: 'not_configured' }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare function getHealthInfo(deps?: HealthCheckDeps): Promise<RuntimeHealthInfo>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RuntimeHealthInfo — Runtime 依赖健康状态
|
|
3
|
+
*
|
|
4
|
+
* 供宿主服务(Hosting/CLI)调用,组装 /health 响应。
|
|
5
|
+
* Runtime 作为库不直接暴露 HTTP 端点,只提供状态查询方法。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 获取 Runtime 依赖健康状态
|
|
9
|
+
*
|
|
10
|
+
* @param deps - 各依赖的健康检查函数(未提供则标记 not_configured)
|
|
11
|
+
* @returns RuntimeHealthInfo
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { getHealthInfo } from '@eap/runtime';
|
|
16
|
+
*
|
|
17
|
+
* const health = await getHealthInfo({
|
|
18
|
+
* checkCheckpoint: () => pgPool.query('SELECT 1').then(() => true).catch(() => false),
|
|
19
|
+
* checkRedis: () => redis.ping().then(() => true).catch(() => false),
|
|
20
|
+
* });
|
|
21
|
+
* // { checkpoint: 'connected', redis: 'connected', mq: 'not_configured' }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export async function getHealthInfo(deps = {}) {
|
|
25
|
+
const [checkpoint, redis, mq] = await Promise.all([
|
|
26
|
+
deps.checkCheckpoint
|
|
27
|
+
? deps.checkCheckpoint().then((ok) => ok ? 'connected' : 'disconnected').catch(() => 'disconnected')
|
|
28
|
+
: Promise.resolve('disconnected'),
|
|
29
|
+
deps.checkRedis
|
|
30
|
+
? deps.checkRedis().then((ok) => ok ? 'connected' : 'disconnected').catch(() => 'disconnected')
|
|
31
|
+
: Promise.resolve('not_configured'),
|
|
32
|
+
deps.checkMq
|
|
33
|
+
? deps.checkMq().then((ok) => ok ? 'connected' : 'disconnected').catch(() => 'disconnected')
|
|
34
|
+
: Promise.resolve('not_configured'),
|
|
35
|
+
]);
|
|
36
|
+
return { checkpoint, redis, mq };
|
|
37
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 结构化日志接口 — A2
|
|
3
|
+
*/
|
|
4
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
5
|
+
export interface LogEntry {
|
|
6
|
+
level: LogLevel;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
module: string;
|
|
9
|
+
message: string;
|
|
10
|
+
context?: Record<string, unknown>;
|
|
11
|
+
error?: Error;
|
|
12
|
+
}
|
|
13
|
+
export interface ILogger {
|
|
14
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
15
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
16
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
17
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
18
|
+
}
|
|
19
|
+
export declare class ConsoleLogger implements ILogger {
|
|
20
|
+
private readonly module;
|
|
21
|
+
constructor(module: string);
|
|
22
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
23
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
24
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
25
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
26
|
+
private log;
|
|
27
|
+
}
|
|
28
|
+
/** ponytail: 空实现,测试用 */
|
|
29
|
+
export declare class NoopLogger implements ILogger {
|
|
30
|
+
debug(): void;
|
|
31
|
+
info(): void;
|
|
32
|
+
warn(): void;
|
|
33
|
+
error(): void;
|
|
34
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 结构化日志接口 — A2
|
|
3
|
+
*/
|
|
4
|
+
export class ConsoleLogger {
|
|
5
|
+
module;
|
|
6
|
+
constructor(module) {
|
|
7
|
+
this.module = module;
|
|
8
|
+
}
|
|
9
|
+
debug(message, context) {
|
|
10
|
+
this.log('debug', message, context);
|
|
11
|
+
}
|
|
12
|
+
info(message, context) {
|
|
13
|
+
this.log('info', message, context);
|
|
14
|
+
}
|
|
15
|
+
warn(message, context) {
|
|
16
|
+
this.log('warn', message, context);
|
|
17
|
+
}
|
|
18
|
+
error(message, context) {
|
|
19
|
+
this.log('error', message, context);
|
|
20
|
+
}
|
|
21
|
+
log(level, message, context) {
|
|
22
|
+
const entry = {
|
|
23
|
+
level,
|
|
24
|
+
timestamp: new Date().toISOString(),
|
|
25
|
+
module: this.module,
|
|
26
|
+
message,
|
|
27
|
+
...(context && { context }),
|
|
28
|
+
};
|
|
29
|
+
console[level](JSON.stringify(entry));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** ponytail: 空实现,测试用 */
|
|
33
|
+
export class NoopLogger {
|
|
34
|
+
debug() { }
|
|
35
|
+
info() { }
|
|
36
|
+
warn() { }
|
|
37
|
+
error() { }
|
|
38
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RabbitMQ 队列消费者
|
|
3
|
+
*
|
|
4
|
+
* 从 RabbitMQ 队列中消费任务消息,分发给 Graph 引擎处理。
|
|
5
|
+
* 通过 channel.prefetch(n) 控制并发:
|
|
6
|
+
* - 最多同时处理 n 条未 ack 的消息
|
|
7
|
+
* - 超出 prefetch 限制的消息留在 RabbitMQ Queue 中排队等待
|
|
8
|
+
* - 不丢弃任何请求
|
|
9
|
+
*
|
|
10
|
+
* 整体 QPS = Pod 数 × prefetch
|
|
11
|
+
*
|
|
12
|
+
* @see Requirement 14 AC2: 系统通过消息消费者 prefetch 参数控制单 Agent 实例的并发上限
|
|
13
|
+
* @see Requirement 14 AC3: 并发请求数超过 prefetch 限制时,系统将超出请求放入 Queue 排队等待,不丢弃请求
|
|
14
|
+
*/
|
|
15
|
+
import type { Connection } from 'amqplib';
|
|
16
|
+
/**
|
|
17
|
+
* 任务消息体 — 从 RabbitMQ 队列中消费到的任务负载
|
|
18
|
+
*/
|
|
19
|
+
export interface TaskMessage {
|
|
20
|
+
/** 任务唯一标识 */
|
|
21
|
+
taskId: string;
|
|
22
|
+
/** 目标 Agent(值为 agentCode;字段名保留 agentId 兼容存量消息) */
|
|
23
|
+
agentId: string;
|
|
24
|
+
/** 会话 ID */
|
|
25
|
+
sessionId: string;
|
|
26
|
+
/** 发起请求的用户 ID */
|
|
27
|
+
userId: string;
|
|
28
|
+
/** 用户输入内容 */
|
|
29
|
+
input: string;
|
|
30
|
+
/** 可选的执行配置 */
|
|
31
|
+
config?: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 任务处理器 — 接收解析后的 TaskMessage,分发给 Graph 引擎执行
|
|
35
|
+
*
|
|
36
|
+
* 处理成功则 resolve,失败则 reject(消费者据此决定 ack/nack)。
|
|
37
|
+
*/
|
|
38
|
+
export type TaskHandler = (message: TaskMessage) => Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* QueueConsumer 配置选项
|
|
41
|
+
*/
|
|
42
|
+
export interface QueueConsumerOptions {
|
|
43
|
+
/** 队列名称 */
|
|
44
|
+
queueName: string;
|
|
45
|
+
/** prefetch 数量 — 单实例最大并发消息处理数,默认 5 */
|
|
46
|
+
prefetch?: number;
|
|
47
|
+
/** 队列是否持久化,默认 true */
|
|
48
|
+
durable?: boolean;
|
|
49
|
+
/** 是否自动确认(不推荐生产使用),默认 false */
|
|
50
|
+
noAck?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* RabbitMQ 队列消费者
|
|
54
|
+
*
|
|
55
|
+
* 核心设计:利用 RabbitMQ channel.prefetch 机制实现队列式溢出控制。
|
|
56
|
+
* - consumer.prefetch(5) → 该 Channel 上最多持有 5 条未 ack 消息
|
|
57
|
+
* - 第 6 条及后续消息自动留在 RabbitMQ Queue 中排队
|
|
58
|
+
* - 只有当某条消息被 ack/nack 后,RabbitMQ 才推送下一条
|
|
59
|
+
* - 保证不丢弃任何请求(queue-based overflow)
|
|
60
|
+
*
|
|
61
|
+
* 使用方式:
|
|
62
|
+
* ```ts
|
|
63
|
+
* const consumer = new QueueConsumer(connection, {
|
|
64
|
+
* queueName: 'agent.tasks.ai-bi',
|
|
65
|
+
* prefetch: 5,
|
|
66
|
+
* }, async (msg) => {
|
|
67
|
+
* await graphEngine.execute(msg);
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* await consumer.start();
|
|
71
|
+
* // ... 优雅关闭
|
|
72
|
+
* await consumer.stop();
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare class QueueConsumer {
|
|
76
|
+
private readonly connection;
|
|
77
|
+
private readonly options;
|
|
78
|
+
private readonly taskHandler;
|
|
79
|
+
private channel;
|
|
80
|
+
private consumerTag;
|
|
81
|
+
private started;
|
|
82
|
+
/**
|
|
83
|
+
* @param connection amqplib Connection 实例
|
|
84
|
+
* @param options 消费者配置
|
|
85
|
+
* @param taskHandler 任务处理函数 — 接收解析后的消息,分发给 Graph 引擎
|
|
86
|
+
*/
|
|
87
|
+
constructor(connection: Connection, options: QueueConsumerOptions, taskHandler: TaskHandler);
|
|
88
|
+
/**
|
|
89
|
+
* 启动消费者
|
|
90
|
+
*
|
|
91
|
+
* 1. 创建 Channel
|
|
92
|
+
* 2. 设置 prefetch(限制并发)
|
|
93
|
+
* 3. 声明队列(确保队列存在)
|
|
94
|
+
* 4. 开始消费消息
|
|
95
|
+
*
|
|
96
|
+
* prefetch 机制保证:超出限制的消息留在 RabbitMQ Queue 排队,不丢弃。
|
|
97
|
+
*/
|
|
98
|
+
start(): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* 停止消费者并优雅关闭 Channel
|
|
101
|
+
*
|
|
102
|
+
* 1. 取消消费(不再接收新消息)
|
|
103
|
+
* 2. 关闭 Channel
|
|
104
|
+
*
|
|
105
|
+
* 已在处理中的消息不受影响,会正常完成后 ack/nack。
|
|
106
|
+
*/
|
|
107
|
+
stop(): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* 是否正在运行
|
|
110
|
+
*/
|
|
111
|
+
get isRunning(): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* 获取配置的 prefetch 值
|
|
114
|
+
*/
|
|
115
|
+
get prefetch(): number;
|
|
116
|
+
/**
|
|
117
|
+
* 处理单条消息
|
|
118
|
+
*
|
|
119
|
+
* - 解析消息体为 TaskMessage
|
|
120
|
+
* - 调用 taskHandler 执行任务
|
|
121
|
+
* - 成功 → ack(释放 prefetch 槽位,RabbitMQ 推送下一条)
|
|
122
|
+
* - 失败 → nack + requeue(消息重新入队,稍后重试)
|
|
123
|
+
*/
|
|
124
|
+
private handleMessage;
|
|
125
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RabbitMQ 队列消费者
|
|
3
|
+
*
|
|
4
|
+
* 从 RabbitMQ 队列中消费任务消息,分发给 Graph 引擎处理。
|
|
5
|
+
* 通过 channel.prefetch(n) 控制并发:
|
|
6
|
+
* - 最多同时处理 n 条未 ack 的消息
|
|
7
|
+
* - 超出 prefetch 限制的消息留在 RabbitMQ Queue 中排队等待
|
|
8
|
+
* - 不丢弃任何请求
|
|
9
|
+
*
|
|
10
|
+
* 整体 QPS = Pod 数 × prefetch
|
|
11
|
+
*
|
|
12
|
+
* @see Requirement 14 AC2: 系统通过消息消费者 prefetch 参数控制单 Agent 实例的并发上限
|
|
13
|
+
* @see Requirement 14 AC3: 并发请求数超过 prefetch 限制时,系统将超出请求放入 Queue 排队等待,不丢弃请求
|
|
14
|
+
*/
|
|
15
|
+
// ─────────────────────────────────────────────
|
|
16
|
+
// QueueConsumer
|
|
17
|
+
// ─────────────────────────────────────────────
|
|
18
|
+
/** 默认 prefetch 值 */
|
|
19
|
+
const DEFAULT_PREFETCH = 5;
|
|
20
|
+
/**
|
|
21
|
+
* RabbitMQ 队列消费者
|
|
22
|
+
*
|
|
23
|
+
* 核心设计:利用 RabbitMQ channel.prefetch 机制实现队列式溢出控制。
|
|
24
|
+
* - consumer.prefetch(5) → 该 Channel 上最多持有 5 条未 ack 消息
|
|
25
|
+
* - 第 6 条及后续消息自动留在 RabbitMQ Queue 中排队
|
|
26
|
+
* - 只有当某条消息被 ack/nack 后,RabbitMQ 才推送下一条
|
|
27
|
+
* - 保证不丢弃任何请求(queue-based overflow)
|
|
28
|
+
*
|
|
29
|
+
* 使用方式:
|
|
30
|
+
* ```ts
|
|
31
|
+
* const consumer = new QueueConsumer(connection, {
|
|
32
|
+
* queueName: 'agent.tasks.ai-bi',
|
|
33
|
+
* prefetch: 5,
|
|
34
|
+
* }, async (msg) => {
|
|
35
|
+
* await graphEngine.execute(msg);
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* await consumer.start();
|
|
39
|
+
* // ... 优雅关闭
|
|
40
|
+
* await consumer.stop();
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export class QueueConsumer {
|
|
44
|
+
connection;
|
|
45
|
+
options;
|
|
46
|
+
taskHandler;
|
|
47
|
+
channel = null;
|
|
48
|
+
consumerTag = null;
|
|
49
|
+
started = false;
|
|
50
|
+
/**
|
|
51
|
+
* @param connection amqplib Connection 实例
|
|
52
|
+
* @param options 消费者配置
|
|
53
|
+
* @param taskHandler 任务处理函数 — 接收解析后的消息,分发给 Graph 引擎
|
|
54
|
+
*/
|
|
55
|
+
constructor(connection, options, taskHandler) {
|
|
56
|
+
this.connection = connection;
|
|
57
|
+
this.options = {
|
|
58
|
+
queueName: options.queueName,
|
|
59
|
+
prefetch: options.prefetch ?? DEFAULT_PREFETCH,
|
|
60
|
+
durable: options.durable ?? true,
|
|
61
|
+
noAck: options.noAck ?? false,
|
|
62
|
+
};
|
|
63
|
+
this.taskHandler = taskHandler;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 启动消费者
|
|
67
|
+
*
|
|
68
|
+
* 1. 创建 Channel
|
|
69
|
+
* 2. 设置 prefetch(限制并发)
|
|
70
|
+
* 3. 声明队列(确保队列存在)
|
|
71
|
+
* 4. 开始消费消息
|
|
72
|
+
*
|
|
73
|
+
* prefetch 机制保证:超出限制的消息留在 RabbitMQ Queue 排队,不丢弃。
|
|
74
|
+
*/
|
|
75
|
+
async start() {
|
|
76
|
+
if (this.started) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// 1. 创建 Channel
|
|
80
|
+
this.channel = await this.connection.createChannel();
|
|
81
|
+
// 2. 设置 prefetch — 核心并发控制
|
|
82
|
+
// 超出 prefetch 的消息留在 Queue 中排队等待(queue-based overflow)
|
|
83
|
+
await this.channel.prefetch(this.options.prefetch);
|
|
84
|
+
// 3. 声明队列(幂等操作,队列已存在则不做修改)
|
|
85
|
+
await this.channel.assertQueue(this.options.queueName, {
|
|
86
|
+
durable: this.options.durable,
|
|
87
|
+
});
|
|
88
|
+
// 4. 开始消费
|
|
89
|
+
const { consumerTag } = await this.channel.consume(this.options.queueName, (msg) => this.handleMessage(msg), { noAck: this.options.noAck });
|
|
90
|
+
this.consumerTag = consumerTag;
|
|
91
|
+
this.started = true;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 停止消费者并优雅关闭 Channel
|
|
95
|
+
*
|
|
96
|
+
* 1. 取消消费(不再接收新消息)
|
|
97
|
+
* 2. 关闭 Channel
|
|
98
|
+
*
|
|
99
|
+
* 已在处理中的消息不受影响,会正常完成后 ack/nack。
|
|
100
|
+
*/
|
|
101
|
+
async stop() {
|
|
102
|
+
if (!this.started || !this.channel) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// 取消消费者
|
|
106
|
+
if (this.consumerTag) {
|
|
107
|
+
await this.channel.cancel(this.consumerTag);
|
|
108
|
+
this.consumerTag = null;
|
|
109
|
+
}
|
|
110
|
+
// 关闭 Channel
|
|
111
|
+
await this.channel.close();
|
|
112
|
+
this.channel = null;
|
|
113
|
+
this.started = false;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 是否正在运行
|
|
117
|
+
*/
|
|
118
|
+
get isRunning() {
|
|
119
|
+
return this.started;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 获取配置的 prefetch 值
|
|
123
|
+
*/
|
|
124
|
+
get prefetch() {
|
|
125
|
+
return this.options.prefetch;
|
|
126
|
+
}
|
|
127
|
+
// ─── 内部方法 ───────────────────────────────
|
|
128
|
+
/**
|
|
129
|
+
* 处理单条消息
|
|
130
|
+
*
|
|
131
|
+
* - 解析消息体为 TaskMessage
|
|
132
|
+
* - 调用 taskHandler 执行任务
|
|
133
|
+
* - 成功 → ack(释放 prefetch 槽位,RabbitMQ 推送下一条)
|
|
134
|
+
* - 失败 → nack + requeue(消息重新入队,稍后重试)
|
|
135
|
+
*/
|
|
136
|
+
async handleMessage(msg) {
|
|
137
|
+
// RabbitMQ 在 Channel 关闭时会发送 null
|
|
138
|
+
if (!msg || !this.channel) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
// 解析消息体
|
|
143
|
+
const body = msg.content.toString('utf-8');
|
|
144
|
+
const taskMessage = JSON.parse(body);
|
|
145
|
+
// 分发给 Graph 引擎处理
|
|
146
|
+
await this.taskHandler(taskMessage);
|
|
147
|
+
// 处理成功 → ack,释放 prefetch 槽位
|
|
148
|
+
if (!this.options.noAck) {
|
|
149
|
+
this.channel.ack(msg);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// 处理失败 → nack,requeue=true 让消息重新排队
|
|
154
|
+
if (!this.options.noAck && this.channel) {
|
|
155
|
+
this.channel.nack(msg, false, true);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* eap-runtime 内部共享类型定义
|
|
3
|
+
*
|
|
4
|
+
* 本文件定义 Runtime 模块内部使用的类型,与 @gt-fe/eap-contracts 中的公共协议类型互补但不重复。
|
|
5
|
+
* - @gt-fe/eap-contracts 定义跨模块的公共协议(如 Task 实体、Session 实体、Agent Manifest)
|
|
6
|
+
* - 本文件定义 Runtime 执行引擎内部流转的配置、上下文、枚举等
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Token 统计输出粒度控制
|
|
10
|
+
* - none: 不输出任何 Token 统计事件
|
|
11
|
+
* - summary: 仅 Task 结束时输出 stats.token_usage 汇总
|
|
12
|
+
* - detail: 每次 LLM 调用输出 stats.node_token + 结束时汇总
|
|
13
|
+
*/
|
|
14
|
+
export type TokenDetailLevel = 'none' | 'summary' | 'detail';
|
|
15
|
+
/**
|
|
16
|
+
* Runtime 执行引擎配置
|
|
17
|
+
*
|
|
18
|
+
* 控制单次请求级别的执行行为,来自 invoke/stream 请求体的 config 字段。
|
|
19
|
+
*/
|
|
20
|
+
export interface RuntimeConfig {
|
|
21
|
+
/** Token 统计输出粒度 */
|
|
22
|
+
tokenDetail: TokenDetailLevel;
|
|
23
|
+
/** Task 执行超时时间(毫秒) */
|
|
24
|
+
timeout: number;
|
|
25
|
+
/** ReAct 循环最大迭代次数 */
|
|
26
|
+
maxIterations: number;
|
|
27
|
+
/** SSE 心跳间隔(毫秒),默认 30000 */
|
|
28
|
+
heartbeatInterval: number;
|
|
29
|
+
}
|
|
30
|
+
/** RuntimeConfig 默认值 */
|
|
31
|
+
export declare const DEFAULT_RUNTIME_CONFIG: RuntimeConfig;
|
|
32
|
+
/**
|
|
33
|
+
* 执行上下文 — 贯穿 Graph 执行生命周期(Runtime 内部)
|
|
34
|
+
*
|
|
35
|
+
* 平台级 ExecutionContext(@gt-fe/eap-contracts)由 Hosting/eap dev 注入;
|
|
36
|
+
* 本类型在 Task 创建后组装,供引擎子服务使用。
|
|
37
|
+
*/
|
|
38
|
+
export interface RuntimeRunContext {
|
|
39
|
+
/** 当前 Task ID */
|
|
40
|
+
taskId: string;
|
|
41
|
+
/** 当前 Session ID */
|
|
42
|
+
sessionId: string;
|
|
43
|
+
/** 发起请求的用户 ID */
|
|
44
|
+
userId: string;
|
|
45
|
+
/** 请求关联 ID(用于分布式追踪) */
|
|
46
|
+
correlationId: string;
|
|
47
|
+
/** 目标 Agent(值为 agentCode;字段名保留 agentId 兼容历史调用方) */
|
|
48
|
+
agentId: string;
|
|
49
|
+
/** 运行时配置 */
|
|
50
|
+
config: RuntimeConfig;
|
|
51
|
+
/** 权限委托令牌(用于 Tool 调用时传递用户权限) */
|
|
52
|
+
delegationToken?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Task 执行状态(Runtime 内部使用)
|
|
56
|
+
*
|
|
57
|
+
* 状态流转:pending → running → success | failed | timeout | token_exhausted | waiting_hitl
|
|
58
|
+
*
|
|
59
|
+
* waiting_hitl:等待人工介入确认,可通过 HITL API 恢复为 running
|
|
60
|
+
*/
|
|
61
|
+
export type TaskStatus = 'pending' | 'running' | 'waiting_hitl' | 'success' | 'failed' | 'timeout' | 'token_exhausted';
|
|
62
|
+
/**
|
|
63
|
+
* Runtime 执行上下文绑定状态(非平台 Session 生命周期)
|
|
64
|
+
*
|
|
65
|
+
* 平台 Session 三态(active/paused/closed)由 Hosting 管理,见 @gt-fe/eap-contracts。
|
|
66
|
+
* Runtime 仅在引擎内标记执行上下文是否仍可绑定:`active` | `archived`。
|
|
67
|
+
*/
|
|
68
|
+
export type ExecutionSessionBindingStatus = 'active' | 'archived';
|
|
69
|
+
/**
|
|
70
|
+
* 会话消息角色
|
|
71
|
+
* - user: 用户输入
|
|
72
|
+
* - assistant: Agent/LLM 回复
|
|
73
|
+
* - system: 系统提示词
|
|
74
|
+
* - tool: Tool 执行结果
|
|
75
|
+
*/
|
|
76
|
+
export type MessageRole = 'user' | 'assistant' | 'system' | 'tool';
|
|
77
|
+
/**
|
|
78
|
+
* 单次 LLM/Tool 调用的 Token 消耗记录
|
|
79
|
+
*
|
|
80
|
+
* 与 @gt-fe/eap-contracts.TokenUsage 的区别:
|
|
81
|
+
* - contracts 版本是 Task 级聚合结果(含 byNode/byModel)
|
|
82
|
+
* - 本类型是单次调用粒度的原始记录,用于 Runtime 内部累计和 stats.node_token 事件
|
|
83
|
+
*/
|
|
84
|
+
export interface TokenUsage {
|
|
85
|
+
/** 输入 Token 数 */
|
|
86
|
+
input: number;
|
|
87
|
+
/** 输出 Token 数 */
|
|
88
|
+
output: number;
|
|
89
|
+
/** 总 Token 数 (input + output) */
|
|
90
|
+
total: number;
|
|
91
|
+
/** 使用的模型标识 */
|
|
92
|
+
model?: string;
|
|
93
|
+
/** 产生消耗的节点 ID */
|
|
94
|
+
nodeId?: string;
|
|
95
|
+
/** 预估费用(单位:元或美分,由平台配置决定) */
|
|
96
|
+
costEstimate?: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Token Budget 配额作用域
|
|
100
|
+
* - task: 单次 Task 执行上限
|
|
101
|
+
* - session: 同一 Session 的日预算
|
|
102
|
+
* - agent: 单个 Agent 单次执行 cap
|
|
103
|
+
*/
|
|
104
|
+
export type TokenBudgetScope = 'task' | 'session' | 'agent';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* eap-runtime 内部共享类型定义
|
|
3
|
+
*
|
|
4
|
+
* 本文件定义 Runtime 模块内部使用的类型,与 @gt-fe/eap-contracts 中的公共协议类型互补但不重复。
|
|
5
|
+
* - @gt-fe/eap-contracts 定义跨模块的公共协议(如 Task 实体、Session 实体、Agent Manifest)
|
|
6
|
+
* - 本文件定义 Runtime 执行引擎内部流转的配置、上下文、枚举等
|
|
7
|
+
*/
|
|
8
|
+
/** RuntimeConfig 默认值 */
|
|
9
|
+
export const DEFAULT_RUNTIME_CONFIG = {
|
|
10
|
+
tokenDetail: 'summary',
|
|
11
|
+
timeout: 60000,
|
|
12
|
+
maxIterations: 10,
|
|
13
|
+
heartbeatInterval: 30000,
|
|
14
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contracts — Runtime 接口定义
|
|
3
|
+
*
|
|
4
|
+
* Runtime 核心接口,由其他模块实现。
|
|
5
|
+
* - Trace 采集:由 foundation-service 实现
|
|
6
|
+
* - 权限校验:由 foundation-service 实现
|
|
7
|
+
* - LLM 调用:由模型路由模块实现
|
|
8
|
+
* - 存储接口:由各存储后端实现
|
|
9
|
+
*/
|
|
10
|
+
export type { ITraceCollector, TraceEvent, TraceSession, } from './trace-collector.js';
|
|
11
|
+
export type { IPermissionChecker } from './permission-checker.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 权限校验器接口(对齐 06-governance R16.8)
|
|
3
|
+
*/
|
|
4
|
+
import type { ExecutionContext, GovernancePermissionCheckParams, GovernancePermissionCheckResult } from '@gt-fe/eap-contracts';
|
|
5
|
+
/**
|
|
6
|
+
* IPermissionChecker — Runtime 执行期权限校验
|
|
7
|
+
*/
|
|
8
|
+
export interface IPermissionChecker {
|
|
9
|
+
checkPermission(ctx: ExecutionContext, params: GovernancePermissionCheckParams): Promise<GovernancePermissionCheckResult>;
|
|
10
|
+
}
|