@axiom-lattice/protocols 3.0.1 → 3.0.3

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @axiom-lattice/protocols@3.0.1 build /home/runner/work/agentic/agentic/packages/protocols
2
+ > @axiom-lattice/protocols@3.0.3 build /home/runner/work/agentic/agentic/packages/protocols
3
3
  > tsup src/index.ts --format cjs,esm --dts --sourcemap
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -9,12 +9,12 @@
9
9
  CJS Build start
10
10
  ESM Build start
11
11
  CJS dist/index.js 6.69 KB
12
- CJS dist/index.js.map 47.01 KB
13
- CJS ⚡️ Build success in 244ms
12
+ CJS dist/index.js.map 47.36 KB
13
+ CJS ⚡️ Build success in 301ms
14
14
  ESM dist/index.mjs 4.78 KB
15
- ESM dist/index.mjs.map 44.53 KB
16
- ESM ⚡️ Build success in 249ms
15
+ ESM dist/index.mjs.map 44.88 KB
16
+ ESM ⚡️ Build success in 309ms
17
17
  DTS Build start
18
- DTS ⚡️ Build success in 12041ms
19
- DTS dist/index.d.ts 138.95 KB
20
- DTS dist/index.d.mts 138.95 KB
18
+ DTS ⚡️ Build success in 14233ms
19
+ DTS dist/index.d.ts 142.56 KB
20
+ DTS dist/index.d.mts 142.56 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @axiom-lattice/protocols
2
2
 
3
+ ## 3.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - ecc456c: add agent workstation
8
+
9
+ ## 3.0.2
10
+
11
+ ### Patch Changes
12
+
13
+ - 8f54c19: new ux
14
+
3
15
  ## 3.0.1
4
16
 
5
17
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -183,6 +183,14 @@ interface BaseAgentConfig {
183
183
  * ```
184
184
  */
185
185
  responseFormat?: any;
186
+ /**
187
+ * Arbitrary metadata as string-to-string map (optional).
188
+ * Mirrors the skill metadata convention. Useful for:
189
+ * - trust tier (e.g. verified: "human-reviewed" | "machine-confirmed")
190
+ * - version tracking (e.g. version: "1.2")
191
+ * - provenance (e.g. source material, learning run id)
192
+ */
193
+ metadata?: Record<string, string>;
186
194
  }
187
195
  type AvailableModule = "filesystem" | "code_eval" | "browser";
188
196
  interface SandboxMiddlewareConfig {
@@ -3450,12 +3458,35 @@ interface EvalSuite {
3450
3458
  updatedAt: Date;
3451
3459
  caseCount?: number;
3452
3460
  }
3461
+ /**
3462
+ * How an eval case handles a HITL interrupt (agent pausing for human input).
3463
+ *
3464
+ * - `stop` (default): leave the case interrupted at the pause — the judge
3465
+ * evaluates the pause itself as business behavior.
3466
+ * - `auto-approve`: resume the agent with an approval so the flow AFTER the
3467
+ * pause can be tested (e.g. payment execution).
3468
+ * - `auto-reject`: resume with a rejection so the rejection path is tested.
3469
+ * - `canned-response`: resume with the exact `value` (simulates a specific
3470
+ * human reply). `value` is also the override for auto-approve/auto-reject
3471
+ * (defaults: "同意" / "拒绝").
3472
+ */
3473
+ interface InterruptPolicy {
3474
+ mode: "stop" | "auto-approve" | "auto-reject" | "canned-response";
3475
+ value?: string;
3476
+ }
3453
3477
  interface CreateEvalSuiteRequest {
3454
3478
  name: string;
3455
3479
  }
3456
3480
  interface CreateEvalRunRequest {
3457
3481
  totalCases: number;
3458
3482
  concurrency: number;
3483
+ /** Mark this run as a hold-out validation run (results withheld per-case) */
3484
+ holdout?: boolean;
3485
+ /** Workspace-project environment the run executed in (caller's runConfig) */
3486
+ envProjectId?: string;
3487
+ envWorkspaceId?: string;
3488
+ /** Task this run belongs to (training round association) */
3489
+ taskId?: string;
3459
3490
  }
3460
3491
  interface EvalCase {
3461
3492
  id: string;
@@ -3474,6 +3505,7 @@ interface EvalCase {
3474
3505
  weight: number;
3475
3506
  description: string;
3476
3507
  }>;
3508
+ interruptPolicy?: InterruptPolicy;
3477
3509
  createdAt: Date;
3478
3510
  updatedAt: Date;
3479
3511
  }
@@ -3491,6 +3523,7 @@ interface CreateEvalCaseRequest {
3491
3523
  weight: number;
3492
3524
  description: string;
3493
3525
  }>;
3526
+ interruptPolicy?: InterruptPolicy;
3494
3527
  }
3495
3528
  interface EvalRun {
3496
3529
  id: string;
@@ -3501,8 +3534,26 @@ interface EvalRun {
3501
3534
  totalCases: number;
3502
3535
  passedCases: number;
3503
3536
  failedCases: number;
3537
+ /** Cases that hit a HITL interrupt (agent requested human input) — not judged. */
3538
+ interruptedCases?: number;
3504
3539
  avgScore: number;
3505
3540
  error?: string;
3541
+ /**
3542
+ * When true, this run executed ONLY the hold-out validation suite.
3543
+ * Per-case results of holdout runs are withheld from agents (aggregate
3544
+ * only) to preserve hold-out isolation — the agent must not learn which
3545
+ * validation cases failed.
3546
+ */
3547
+ holdout?: boolean;
3548
+ /**
3549
+ * The workspace-project environment (caller's runConfig) this run
3550
+ * executed in. Used to answer "which project environment was this run
3551
+ * executed against" for observability.
3552
+ */
3553
+ envProjectId?: string;
3554
+ envWorkspaceId?: string;
3555
+ /** Training task this run belongs to (round association, 1 task : N runs) */
3556
+ taskId?: string;
3506
3557
  createdAt: Date;
3507
3558
  startedAt?: Date;
3508
3559
  completedAt?: Date;
@@ -3533,6 +3584,12 @@ interface EvalRunResult {
3533
3584
  data?: unknown;
3534
3585
  }>;
3535
3586
  error?: string;
3587
+ /**
3588
+ * True when the case hit a HITL interrupt: the agent requested human input
3589
+ * before producing an answer, so the case was NOT judged (neither pass nor
3590
+ * fail). `pass` is false and `score` is 0 for such rows.
3591
+ */
3592
+ interrupted?: boolean;
3536
3593
  createdAt: Date;
3537
3594
  }
3538
3595
  interface EvalProjectReport {
@@ -3569,6 +3626,7 @@ interface EvalStore {
3569
3626
  status?: EvalRun['status'];
3570
3627
  passedCases?: number;
3571
3628
  failedCases?: number;
3629
+ interruptedCases?: number;
3572
3630
  avgScore?: number;
3573
3631
  error?: string;
3574
3632
  completedAt?: Date;
@@ -3675,6 +3733,8 @@ interface TaskItem {
3675
3733
  * Reason for task failure (when status is 'failed')
3676
3734
  */
3677
3735
  failureReason?: string;
3736
+ /** File references attached to this task */
3737
+ files?: TaskFileRef[];
3678
3738
  }
3679
3739
  /**
3680
3740
  * Create task request type
@@ -3748,6 +3808,26 @@ interface CreateTaskRequest {
3748
3808
  * Reason for task failure (when status is 'failed')
3749
3809
  */
3750
3810
  failureReason?: string;
3811
+ /** File references attached to this task */
3812
+ files?: TaskFileRef[];
3813
+ }
3814
+ /**
3815
+ * A file reference attached to a task — a URI association, not file management.
3816
+ * The file body is managed by the workspace/sandbox systems; tasks only record
3817
+ * the reference so they can display and hand files to agents.
3818
+ */
3819
+ interface TaskFileRef {
3820
+ /**
3821
+ * Uniquely locates the resource:
3822
+ * - http(s)://... → external URL
3823
+ * - /s/:token → shared resource
3824
+ * - anything else → sandbox path (e.g. /project/uploads/foo.pdf)
3825
+ */
3826
+ uri: string;
3827
+ /** Display name (useful when uri is a uuid or bare path) */
3828
+ name?: string;
3829
+ /** Who attached the file: the user (reference material) or an agent (artifact) */
3830
+ addedBy?: "user" | "agent";
3751
3831
  }
3752
3832
  /**
3753
3833
  * Update task request type
@@ -3821,6 +3901,8 @@ interface UpdateTaskRequest {
3821
3901
  * Reason for task failure (when status is 'failed')
3822
3902
  */
3823
3903
  failureReason?: string;
3904
+ /** File references attached to this task */
3905
+ files?: TaskFileRef[];
3824
3906
  }
3825
3907
  /**
3826
3908
  * Task list filter criteria
@@ -4599,8 +4681,14 @@ interface PluginMeta {
4599
4681
  configSchema?: Record<string, unknown>;
4600
4682
  /** 默认配置 */
4601
4683
  defaultConfig?: Record<string, unknown>;
4602
- /** 推荐的配套插件,在前端中间件配置 UI 中展示为提示 */
4684
+ /** 推荐配置的 companion 插件 */
4603
4685
  recommends?: string[];
4686
+ /**
4687
+ * 能力分类(可选,驱动前端 Capabilities/中间件分区的 Tab 分组)。
4688
+ * 内置约定值:data | execution | workflow | assistant。
4689
+ * 第三方插件可自定义分类名,前端会原样显示;未提供时归入 "Other"。
4690
+ */
4691
+ category?: string;
4604
4692
  }
4605
4693
  /**
4606
4694
  * 插件元数据输出(API 返回格式)
@@ -4766,4 +4854,4 @@ type Timestamp = number;
4766
4854
  */
4767
4855
  type Callback<T = any, R = void> = (data: T) => R | Promise<R>;
4768
4856
 
4769
- export { type A2AApiKeyEntry, type A2AApiKeyRecord, type A2AApiKeyStore, type A2AArtifact, type A2AAuthContext, type A2ACapabilities, type A2AConfig, type A2ADataPart, type A2AFilePart, type A2AMessage, type A2APart, type A2AProvider, type A2APushNotification, type A2ARemoteAgentConfig, type A2ASSEEvent, type A2ASkill, type A2ATask, type A2ATaskArtifactUpdatePayload, type A2ATaskSendRequest, type A2ATaskState, type A2ATaskStatus, type A2ATaskUpdatePayload, type A2ATextPart, A2A_DEFAULT_CAPABILITIES, A2A_DEFAULT_INPUT_MODES, A2A_DEFAULT_OUTPUT_MODES, type AgentCard, type AgentClient, type AgentConfig, type AgentConfigWithTools, type AgentLatticeProtocol, type AgentMenuConfig, type AgentMiddlewareConfig, type AgentRunConfig, AgentType, type Assistant, type AssistantMessage, type AssistantStore, type Attachment, type AvailableModule, type BaseLatticeProtocol, type BaseMessage, type Binding, type BindingRegistry, type BootstrapFilesConfig, type BrowserMiddlewareConfig, type Callback, type ChannelAdapter, type ChannelInstallation, type ChannelInstallationStore, type ChannelInstallationType, type ClawMiddlewareConfig, type CodeEvalMiddlewareConfig, type Collection, type CollectionField, type CollectionFieldType, type CollectionMiddlewareConfig, type CollectionSchema, type CollectionStore, type ConnectionEntry, type ConnectionStore, type ConversationRecord, type CreateA2AApiKeyInput, type CreateAssistantRequest, type CreateBindingInput, type CreateChannelInstallationRequest, type CreateCollectionRequest, type CreateConversationInput, type CreateDatabaseConfigRequest, type CreateEvalCaseRequest, type CreateEvalProjectRequest, type CreateEvalRunRequest, type CreateEvalSuiteRequest, type CreateMcpServerConfigRequest, type CreateMenuItemInput, type CreateMetricsServerConfigRequest, type CreateProjectRequest, type CreateRunStepRequest, type CreateShareRequest, type CreateSkillRequest, type CreateTaskRequest, type CreateTenantRequest, type CreateThreadRequest, type CreateUserRequest, type CreateUserTenantLinkRequest, type CreateWorkItemRequest, type CreateWorkflowRunRequest, type CreateWorkspaceRequest, type CustomMenuConfig, type DataSource, type DatabaseConfig, type DatabaseConfigEntry, type DatabaseConfigStore, type DatabaseType, type DeepAgentConfig, type DeveloperMessage, type DispatchResult, type EmbeddingsConfig, type EmbeddingsLatticeProtocol, type EvalCase, type EvalProject, type EvalProjectReport, type EvalRun, type EvalRunResult, type EvalStore, type EvalSuite, type ExecuteSqlQueryRequest, type ExecuteSqlQueryResponse, type FilterCondition, type GraphBuildOptions, type HtmlMenuConfig, type IConversationStore, type ID, type InboundMessage, type InternalAgentNode, type InternalBaseNode, type InternalDSL, type InternalEdge, type InternalInput, type InternalInputNode, type InternalMapNode, type InternalNode, type InternalNodeConfig, type InternalOutput, type InternalState, type InternalStateField, type InternalTerminalNode, type InterruptMessage, type LLMConfig, type LarkChannelInstallationConfig, type LatticeError, type LatticeEventBus, type LatticeMessage, type LocalA2AProviderId, type LocalA2AProviderState, type LocalA2AProviderStatus, type LocalA2ATemplateDefinition, type LocalRuntimeConfig, type LoggerClient, type LoggerConfig, type LoggerContext, type LoggerLatticeProtocol, LoggerType, type McpClient, type McpClientOptions, type McpConnectionStatus, type McpLatticeMessage, type McpLatticeProtocol, McpMessageType, type McpServerConfig, type McpServerConfigEntry, type McpServerConfigStore, type McpStats, type McpTool, type McpToolResult, type McpTransportType, type MemoryClient, type MemoryConfig, type MemoryLatticeProtocol, MemoryType, type MenuContentConfig, type MenuContentType, type MenuItem, type MenuRegistry, type MenuTarget, type Message, type MessageChunk, type MessageChunkType, MessageChunkTypes, type MessageContext, type MessageMiddleware, type MetricColumn, type MetricDataPoint, type MetricMeta, type MetricQueryResult, type MetricsMiddlewareConfig, type MetricsServerConfig, type MetricsServerConfigEntry, type MetricsServerConfigStore, type MetricsServerType, type MiddlewareType, type ModelLatticeProtocol, type OutboundMessage, type PaginatedResult, type PaginationParams, type PinoFileOptions, type Plugin, type PluginConnection, type PluginConnectionFieldSchema, type PluginConnectionTestResult, type PluginContext, type PluginDiscoveredResource, type PluginMeta, type PluginMetaOutput, type PluginMiddlewareFactory, type PluginToolMeta, type ProcessingAgentConfig, type Project, type ProjectStore, type QueryParams, type QueryResultFormat, type QueryWorkflowRunsOptions, type QueryWorkflowRunsResult, type QueueClient, type QueueConfig, type QueueLatticeProtocol, type QueueResult, QueueType, type ReactAgentConfig, type ReplyTarget, type ResourceAddress, type ResourceResolver, type Result, type RunStep, type STTClient, type STTConfig, type STTModelLatticeProtocol, type SandboxMiddlewareConfig, type ScheduleClient, type ScheduleConfig, type ScheduleCronOptions, ScheduleExecutionType, type ScheduleLatticeProtocol, type ScheduleOnceOptions, type ScheduleStorage, ScheduleType, type ScheduledTaskDefinition, ScheduledTaskStatus, type SchedulerMiddlewareConfig, type SemanticMetricsFilter, type SemanticMetricsQueryRequest, type SemanticMetricsQueryResponse, type SemanticMetricsServerConfig, type ShareRecord, type ShareResult, type ShareVisibility, type SharedResourceStore, type Skill, type SkillClient, type SkillClientType, type SkillConfig, type SkillLatticeProtocol, type SkillStore, type SkillStoreContext, type SqlMiddlewareConfig, type StepStatus, type StepType, type StorageType, type SystemMessage, type TableQueryRequest, type TableQueryResponse, type TaskHandler, type TaskItem, type TaskListFilter, type TaskStore, type TaskWorkItem, type TaskWorkItemListFilter, type TaskWorkItemStore, type TeamAgentConfig, type TeamTeammateConfig, type Tenant, type TenantStatus, type TenantStore, type TestMcpServerToolsResponse, type Thread, type ThreadStore, type Timestamp, type ToolCall, type ToolConfig, type ToolExecutor, type ToolLatticeProtocol, type ToolMessage, type TopologyEdge, type TranscriptionResult, type UIComponent, UIComponentType, type UIConfig, type UILatticeProtocol, type UpdateChannelInstallationRequest, type UpdateCollectionRequest, type UpdateDatabaseConfigRequest, type UpdateMcpServerConfigRequest, type UpdateMenuItemInput, type UpdateMetricsServerConfigRequest, type UpdateProjectRequest, type UpdateRunStepRequest, type UpdateTaskRequest, type UpdateTenantRequest, type UpdateUserRequest, type UpdateUserTenantLinkRequest, type UpdateWorkflowRunRequest, type UpdateWorkspaceRequest, type User, type UserMessage, type UserStatus, type UserStore, type UserTenantLink, type UserTenantLinkStore, type UserTenantRole, type VectorStoreConfig, type VectorStoreCreateParams, type VectorStoreLatticeProtocol, type VectorStoreProvider, type WechatChannelInstallationConfig, type WorkflowAgentConfig, type WorkflowRun, type WorkflowRunStatus, type WorkflowTrackingStore, type Workspace, type WorkspaceStore, type YamlAgentStep, type YamlMapStep, type YamlParallelBlock, type YamlTopLevelStep, type YamlWorkflow, getSubAgentsFromConfig, getToolsFromConfig, hasTools, isA2ARemoteAgentConfig, isDeepAgentConfig, isProcessingAgentConfig, isTeamAgentConfig, isWorkflowAgentConfig };
4857
+ export { type A2AApiKeyEntry, type A2AApiKeyRecord, type A2AApiKeyStore, type A2AArtifact, type A2AAuthContext, type A2ACapabilities, type A2AConfig, type A2ADataPart, type A2AFilePart, type A2AMessage, type A2APart, type A2AProvider, type A2APushNotification, type A2ARemoteAgentConfig, type A2ASSEEvent, type A2ASkill, type A2ATask, type A2ATaskArtifactUpdatePayload, type A2ATaskSendRequest, type A2ATaskState, type A2ATaskStatus, type A2ATaskUpdatePayload, type A2ATextPart, A2A_DEFAULT_CAPABILITIES, A2A_DEFAULT_INPUT_MODES, A2A_DEFAULT_OUTPUT_MODES, type AgentCard, type AgentClient, type AgentConfig, type AgentConfigWithTools, type AgentLatticeProtocol, type AgentMenuConfig, type AgentMiddlewareConfig, type AgentRunConfig, AgentType, type Assistant, type AssistantMessage, type AssistantStore, type Attachment, type AvailableModule, type BaseLatticeProtocol, type BaseMessage, type Binding, type BindingRegistry, type BootstrapFilesConfig, type BrowserMiddlewareConfig, type Callback, type ChannelAdapter, type ChannelInstallation, type ChannelInstallationStore, type ChannelInstallationType, type ClawMiddlewareConfig, type CodeEvalMiddlewareConfig, type Collection, type CollectionField, type CollectionFieldType, type CollectionMiddlewareConfig, type CollectionSchema, type CollectionStore, type ConnectionEntry, type ConnectionStore, type ConversationRecord, type CreateA2AApiKeyInput, type CreateAssistantRequest, type CreateBindingInput, type CreateChannelInstallationRequest, type CreateCollectionRequest, type CreateConversationInput, type CreateDatabaseConfigRequest, type CreateEvalCaseRequest, type CreateEvalProjectRequest, type CreateEvalRunRequest, type CreateEvalSuiteRequest, type CreateMcpServerConfigRequest, type CreateMenuItemInput, type CreateMetricsServerConfigRequest, type CreateProjectRequest, type CreateRunStepRequest, type CreateShareRequest, type CreateSkillRequest, type CreateTaskRequest, type CreateTenantRequest, type CreateThreadRequest, type CreateUserRequest, type CreateUserTenantLinkRequest, type CreateWorkItemRequest, type CreateWorkflowRunRequest, type CreateWorkspaceRequest, type CustomMenuConfig, type DataSource, type DatabaseConfig, type DatabaseConfigEntry, type DatabaseConfigStore, type DatabaseType, type DeepAgentConfig, type DeveloperMessage, type DispatchResult, type EmbeddingsConfig, type EmbeddingsLatticeProtocol, type EvalCase, type EvalProject, type EvalProjectReport, type EvalRun, type EvalRunResult, type EvalStore, type EvalSuite, type ExecuteSqlQueryRequest, type ExecuteSqlQueryResponse, type FilterCondition, type GraphBuildOptions, type HtmlMenuConfig, type IConversationStore, type ID, type InboundMessage, type InternalAgentNode, type InternalBaseNode, type InternalDSL, type InternalEdge, type InternalInput, type InternalInputNode, type InternalMapNode, type InternalNode, type InternalNodeConfig, type InternalOutput, type InternalState, type InternalStateField, type InternalTerminalNode, type InterruptMessage, type InterruptPolicy, type LLMConfig, type LarkChannelInstallationConfig, type LatticeError, type LatticeEventBus, type LatticeMessage, type LocalA2AProviderId, type LocalA2AProviderState, type LocalA2AProviderStatus, type LocalA2ATemplateDefinition, type LocalRuntimeConfig, type LoggerClient, type LoggerConfig, type LoggerContext, type LoggerLatticeProtocol, LoggerType, type McpClient, type McpClientOptions, type McpConnectionStatus, type McpLatticeMessage, type McpLatticeProtocol, McpMessageType, type McpServerConfig, type McpServerConfigEntry, type McpServerConfigStore, type McpStats, type McpTool, type McpToolResult, type McpTransportType, type MemoryClient, type MemoryConfig, type MemoryLatticeProtocol, MemoryType, type MenuContentConfig, type MenuContentType, type MenuItem, type MenuRegistry, type MenuTarget, type Message, type MessageChunk, type MessageChunkType, MessageChunkTypes, type MessageContext, type MessageMiddleware, type MetricColumn, type MetricDataPoint, type MetricMeta, type MetricQueryResult, type MetricsMiddlewareConfig, type MetricsServerConfig, type MetricsServerConfigEntry, type MetricsServerConfigStore, type MetricsServerType, type MiddlewareType, type ModelLatticeProtocol, type OutboundMessage, type PaginatedResult, type PaginationParams, type PinoFileOptions, type Plugin, type PluginConnection, type PluginConnectionFieldSchema, type PluginConnectionTestResult, type PluginContext, type PluginDiscoveredResource, type PluginMeta, type PluginMetaOutput, type PluginMiddlewareFactory, type PluginToolMeta, type ProcessingAgentConfig, type Project, type ProjectStore, type QueryParams, type QueryResultFormat, type QueryWorkflowRunsOptions, type QueryWorkflowRunsResult, type QueueClient, type QueueConfig, type QueueLatticeProtocol, type QueueResult, QueueType, type ReactAgentConfig, type ReplyTarget, type ResourceAddress, type ResourceResolver, type Result, type RunStep, type STTClient, type STTConfig, type STTModelLatticeProtocol, type SandboxMiddlewareConfig, type ScheduleClient, type ScheduleConfig, type ScheduleCronOptions, ScheduleExecutionType, type ScheduleLatticeProtocol, type ScheduleOnceOptions, type ScheduleStorage, ScheduleType, type ScheduledTaskDefinition, ScheduledTaskStatus, type SchedulerMiddlewareConfig, type SemanticMetricsFilter, type SemanticMetricsQueryRequest, type SemanticMetricsQueryResponse, type SemanticMetricsServerConfig, type ShareRecord, type ShareResult, type ShareVisibility, type SharedResourceStore, type Skill, type SkillClient, type SkillClientType, type SkillConfig, type SkillLatticeProtocol, type SkillStore, type SkillStoreContext, type SqlMiddlewareConfig, type StepStatus, type StepType, type StorageType, type SystemMessage, type TableQueryRequest, type TableQueryResponse, type TaskFileRef, type TaskHandler, type TaskItem, type TaskListFilter, type TaskStore, type TaskWorkItem, type TaskWorkItemListFilter, type TaskWorkItemStore, type TeamAgentConfig, type TeamTeammateConfig, type Tenant, type TenantStatus, type TenantStore, type TestMcpServerToolsResponse, type Thread, type ThreadStore, type Timestamp, type ToolCall, type ToolConfig, type ToolExecutor, type ToolLatticeProtocol, type ToolMessage, type TopologyEdge, type TranscriptionResult, type UIComponent, UIComponentType, type UIConfig, type UILatticeProtocol, type UpdateChannelInstallationRequest, type UpdateCollectionRequest, type UpdateDatabaseConfigRequest, type UpdateMcpServerConfigRequest, type UpdateMenuItemInput, type UpdateMetricsServerConfigRequest, type UpdateProjectRequest, type UpdateRunStepRequest, type UpdateTaskRequest, type UpdateTenantRequest, type UpdateUserRequest, type UpdateUserTenantLinkRequest, type UpdateWorkflowRunRequest, type UpdateWorkspaceRequest, type User, type UserMessage, type UserStatus, type UserStore, type UserTenantLink, type UserTenantLinkStore, type UserTenantRole, type VectorStoreConfig, type VectorStoreCreateParams, type VectorStoreLatticeProtocol, type VectorStoreProvider, type WechatChannelInstallationConfig, type WorkflowAgentConfig, type WorkflowRun, type WorkflowRunStatus, type WorkflowTrackingStore, type Workspace, type WorkspaceStore, type YamlAgentStep, type YamlMapStep, type YamlParallelBlock, type YamlTopLevelStep, type YamlWorkflow, getSubAgentsFromConfig, getToolsFromConfig, hasTools, isA2ARemoteAgentConfig, isDeepAgentConfig, isProcessingAgentConfig, isTeamAgentConfig, isWorkflowAgentConfig };
package/dist/index.d.ts CHANGED
@@ -183,6 +183,14 @@ interface BaseAgentConfig {
183
183
  * ```
184
184
  */
185
185
  responseFormat?: any;
186
+ /**
187
+ * Arbitrary metadata as string-to-string map (optional).
188
+ * Mirrors the skill metadata convention. Useful for:
189
+ * - trust tier (e.g. verified: "human-reviewed" | "machine-confirmed")
190
+ * - version tracking (e.g. version: "1.2")
191
+ * - provenance (e.g. source material, learning run id)
192
+ */
193
+ metadata?: Record<string, string>;
186
194
  }
187
195
  type AvailableModule = "filesystem" | "code_eval" | "browser";
188
196
  interface SandboxMiddlewareConfig {
@@ -3450,12 +3458,35 @@ interface EvalSuite {
3450
3458
  updatedAt: Date;
3451
3459
  caseCount?: number;
3452
3460
  }
3461
+ /**
3462
+ * How an eval case handles a HITL interrupt (agent pausing for human input).
3463
+ *
3464
+ * - `stop` (default): leave the case interrupted at the pause — the judge
3465
+ * evaluates the pause itself as business behavior.
3466
+ * - `auto-approve`: resume the agent with an approval so the flow AFTER the
3467
+ * pause can be tested (e.g. payment execution).
3468
+ * - `auto-reject`: resume with a rejection so the rejection path is tested.
3469
+ * - `canned-response`: resume with the exact `value` (simulates a specific
3470
+ * human reply). `value` is also the override for auto-approve/auto-reject
3471
+ * (defaults: "同意" / "拒绝").
3472
+ */
3473
+ interface InterruptPolicy {
3474
+ mode: "stop" | "auto-approve" | "auto-reject" | "canned-response";
3475
+ value?: string;
3476
+ }
3453
3477
  interface CreateEvalSuiteRequest {
3454
3478
  name: string;
3455
3479
  }
3456
3480
  interface CreateEvalRunRequest {
3457
3481
  totalCases: number;
3458
3482
  concurrency: number;
3483
+ /** Mark this run as a hold-out validation run (results withheld per-case) */
3484
+ holdout?: boolean;
3485
+ /** Workspace-project environment the run executed in (caller's runConfig) */
3486
+ envProjectId?: string;
3487
+ envWorkspaceId?: string;
3488
+ /** Task this run belongs to (training round association) */
3489
+ taskId?: string;
3459
3490
  }
3460
3491
  interface EvalCase {
3461
3492
  id: string;
@@ -3474,6 +3505,7 @@ interface EvalCase {
3474
3505
  weight: number;
3475
3506
  description: string;
3476
3507
  }>;
3508
+ interruptPolicy?: InterruptPolicy;
3477
3509
  createdAt: Date;
3478
3510
  updatedAt: Date;
3479
3511
  }
@@ -3491,6 +3523,7 @@ interface CreateEvalCaseRequest {
3491
3523
  weight: number;
3492
3524
  description: string;
3493
3525
  }>;
3526
+ interruptPolicy?: InterruptPolicy;
3494
3527
  }
3495
3528
  interface EvalRun {
3496
3529
  id: string;
@@ -3501,8 +3534,26 @@ interface EvalRun {
3501
3534
  totalCases: number;
3502
3535
  passedCases: number;
3503
3536
  failedCases: number;
3537
+ /** Cases that hit a HITL interrupt (agent requested human input) — not judged. */
3538
+ interruptedCases?: number;
3504
3539
  avgScore: number;
3505
3540
  error?: string;
3541
+ /**
3542
+ * When true, this run executed ONLY the hold-out validation suite.
3543
+ * Per-case results of holdout runs are withheld from agents (aggregate
3544
+ * only) to preserve hold-out isolation — the agent must not learn which
3545
+ * validation cases failed.
3546
+ */
3547
+ holdout?: boolean;
3548
+ /**
3549
+ * The workspace-project environment (caller's runConfig) this run
3550
+ * executed in. Used to answer "which project environment was this run
3551
+ * executed against" for observability.
3552
+ */
3553
+ envProjectId?: string;
3554
+ envWorkspaceId?: string;
3555
+ /** Training task this run belongs to (round association, 1 task : N runs) */
3556
+ taskId?: string;
3506
3557
  createdAt: Date;
3507
3558
  startedAt?: Date;
3508
3559
  completedAt?: Date;
@@ -3533,6 +3584,12 @@ interface EvalRunResult {
3533
3584
  data?: unknown;
3534
3585
  }>;
3535
3586
  error?: string;
3587
+ /**
3588
+ * True when the case hit a HITL interrupt: the agent requested human input
3589
+ * before producing an answer, so the case was NOT judged (neither pass nor
3590
+ * fail). `pass` is false and `score` is 0 for such rows.
3591
+ */
3592
+ interrupted?: boolean;
3536
3593
  createdAt: Date;
3537
3594
  }
3538
3595
  interface EvalProjectReport {
@@ -3569,6 +3626,7 @@ interface EvalStore {
3569
3626
  status?: EvalRun['status'];
3570
3627
  passedCases?: number;
3571
3628
  failedCases?: number;
3629
+ interruptedCases?: number;
3572
3630
  avgScore?: number;
3573
3631
  error?: string;
3574
3632
  completedAt?: Date;
@@ -3675,6 +3733,8 @@ interface TaskItem {
3675
3733
  * Reason for task failure (when status is 'failed')
3676
3734
  */
3677
3735
  failureReason?: string;
3736
+ /** File references attached to this task */
3737
+ files?: TaskFileRef[];
3678
3738
  }
3679
3739
  /**
3680
3740
  * Create task request type
@@ -3748,6 +3808,26 @@ interface CreateTaskRequest {
3748
3808
  * Reason for task failure (when status is 'failed')
3749
3809
  */
3750
3810
  failureReason?: string;
3811
+ /** File references attached to this task */
3812
+ files?: TaskFileRef[];
3813
+ }
3814
+ /**
3815
+ * A file reference attached to a task — a URI association, not file management.
3816
+ * The file body is managed by the workspace/sandbox systems; tasks only record
3817
+ * the reference so they can display and hand files to agents.
3818
+ */
3819
+ interface TaskFileRef {
3820
+ /**
3821
+ * Uniquely locates the resource:
3822
+ * - http(s)://... → external URL
3823
+ * - /s/:token → shared resource
3824
+ * - anything else → sandbox path (e.g. /project/uploads/foo.pdf)
3825
+ */
3826
+ uri: string;
3827
+ /** Display name (useful when uri is a uuid or bare path) */
3828
+ name?: string;
3829
+ /** Who attached the file: the user (reference material) or an agent (artifact) */
3830
+ addedBy?: "user" | "agent";
3751
3831
  }
3752
3832
  /**
3753
3833
  * Update task request type
@@ -3821,6 +3901,8 @@ interface UpdateTaskRequest {
3821
3901
  * Reason for task failure (when status is 'failed')
3822
3902
  */
3823
3903
  failureReason?: string;
3904
+ /** File references attached to this task */
3905
+ files?: TaskFileRef[];
3824
3906
  }
3825
3907
  /**
3826
3908
  * Task list filter criteria
@@ -4599,8 +4681,14 @@ interface PluginMeta {
4599
4681
  configSchema?: Record<string, unknown>;
4600
4682
  /** 默认配置 */
4601
4683
  defaultConfig?: Record<string, unknown>;
4602
- /** 推荐的配套插件,在前端中间件配置 UI 中展示为提示 */
4684
+ /** 推荐配置的 companion 插件 */
4603
4685
  recommends?: string[];
4686
+ /**
4687
+ * 能力分类(可选,驱动前端 Capabilities/中间件分区的 Tab 分组)。
4688
+ * 内置约定值:data | execution | workflow | assistant。
4689
+ * 第三方插件可自定义分类名,前端会原样显示;未提供时归入 "Other"。
4690
+ */
4691
+ category?: string;
4604
4692
  }
4605
4693
  /**
4606
4694
  * 插件元数据输出(API 返回格式)
@@ -4766,4 +4854,4 @@ type Timestamp = number;
4766
4854
  */
4767
4855
  type Callback<T = any, R = void> = (data: T) => R | Promise<R>;
4768
4856
 
4769
- export { type A2AApiKeyEntry, type A2AApiKeyRecord, type A2AApiKeyStore, type A2AArtifact, type A2AAuthContext, type A2ACapabilities, type A2AConfig, type A2ADataPart, type A2AFilePart, type A2AMessage, type A2APart, type A2AProvider, type A2APushNotification, type A2ARemoteAgentConfig, type A2ASSEEvent, type A2ASkill, type A2ATask, type A2ATaskArtifactUpdatePayload, type A2ATaskSendRequest, type A2ATaskState, type A2ATaskStatus, type A2ATaskUpdatePayload, type A2ATextPart, A2A_DEFAULT_CAPABILITIES, A2A_DEFAULT_INPUT_MODES, A2A_DEFAULT_OUTPUT_MODES, type AgentCard, type AgentClient, type AgentConfig, type AgentConfigWithTools, type AgentLatticeProtocol, type AgentMenuConfig, type AgentMiddlewareConfig, type AgentRunConfig, AgentType, type Assistant, type AssistantMessage, type AssistantStore, type Attachment, type AvailableModule, type BaseLatticeProtocol, type BaseMessage, type Binding, type BindingRegistry, type BootstrapFilesConfig, type BrowserMiddlewareConfig, type Callback, type ChannelAdapter, type ChannelInstallation, type ChannelInstallationStore, type ChannelInstallationType, type ClawMiddlewareConfig, type CodeEvalMiddlewareConfig, type Collection, type CollectionField, type CollectionFieldType, type CollectionMiddlewareConfig, type CollectionSchema, type CollectionStore, type ConnectionEntry, type ConnectionStore, type ConversationRecord, type CreateA2AApiKeyInput, type CreateAssistantRequest, type CreateBindingInput, type CreateChannelInstallationRequest, type CreateCollectionRequest, type CreateConversationInput, type CreateDatabaseConfigRequest, type CreateEvalCaseRequest, type CreateEvalProjectRequest, type CreateEvalRunRequest, type CreateEvalSuiteRequest, type CreateMcpServerConfigRequest, type CreateMenuItemInput, type CreateMetricsServerConfigRequest, type CreateProjectRequest, type CreateRunStepRequest, type CreateShareRequest, type CreateSkillRequest, type CreateTaskRequest, type CreateTenantRequest, type CreateThreadRequest, type CreateUserRequest, type CreateUserTenantLinkRequest, type CreateWorkItemRequest, type CreateWorkflowRunRequest, type CreateWorkspaceRequest, type CustomMenuConfig, type DataSource, type DatabaseConfig, type DatabaseConfigEntry, type DatabaseConfigStore, type DatabaseType, type DeepAgentConfig, type DeveloperMessage, type DispatchResult, type EmbeddingsConfig, type EmbeddingsLatticeProtocol, type EvalCase, type EvalProject, type EvalProjectReport, type EvalRun, type EvalRunResult, type EvalStore, type EvalSuite, type ExecuteSqlQueryRequest, type ExecuteSqlQueryResponse, type FilterCondition, type GraphBuildOptions, type HtmlMenuConfig, type IConversationStore, type ID, type InboundMessage, type InternalAgentNode, type InternalBaseNode, type InternalDSL, type InternalEdge, type InternalInput, type InternalInputNode, type InternalMapNode, type InternalNode, type InternalNodeConfig, type InternalOutput, type InternalState, type InternalStateField, type InternalTerminalNode, type InterruptMessage, type LLMConfig, type LarkChannelInstallationConfig, type LatticeError, type LatticeEventBus, type LatticeMessage, type LocalA2AProviderId, type LocalA2AProviderState, type LocalA2AProviderStatus, type LocalA2ATemplateDefinition, type LocalRuntimeConfig, type LoggerClient, type LoggerConfig, type LoggerContext, type LoggerLatticeProtocol, LoggerType, type McpClient, type McpClientOptions, type McpConnectionStatus, type McpLatticeMessage, type McpLatticeProtocol, McpMessageType, type McpServerConfig, type McpServerConfigEntry, type McpServerConfigStore, type McpStats, type McpTool, type McpToolResult, type McpTransportType, type MemoryClient, type MemoryConfig, type MemoryLatticeProtocol, MemoryType, type MenuContentConfig, type MenuContentType, type MenuItem, type MenuRegistry, type MenuTarget, type Message, type MessageChunk, type MessageChunkType, MessageChunkTypes, type MessageContext, type MessageMiddleware, type MetricColumn, type MetricDataPoint, type MetricMeta, type MetricQueryResult, type MetricsMiddlewareConfig, type MetricsServerConfig, type MetricsServerConfigEntry, type MetricsServerConfigStore, type MetricsServerType, type MiddlewareType, type ModelLatticeProtocol, type OutboundMessage, type PaginatedResult, type PaginationParams, type PinoFileOptions, type Plugin, type PluginConnection, type PluginConnectionFieldSchema, type PluginConnectionTestResult, type PluginContext, type PluginDiscoveredResource, type PluginMeta, type PluginMetaOutput, type PluginMiddlewareFactory, type PluginToolMeta, type ProcessingAgentConfig, type Project, type ProjectStore, type QueryParams, type QueryResultFormat, type QueryWorkflowRunsOptions, type QueryWorkflowRunsResult, type QueueClient, type QueueConfig, type QueueLatticeProtocol, type QueueResult, QueueType, type ReactAgentConfig, type ReplyTarget, type ResourceAddress, type ResourceResolver, type Result, type RunStep, type STTClient, type STTConfig, type STTModelLatticeProtocol, type SandboxMiddlewareConfig, type ScheduleClient, type ScheduleConfig, type ScheduleCronOptions, ScheduleExecutionType, type ScheduleLatticeProtocol, type ScheduleOnceOptions, type ScheduleStorage, ScheduleType, type ScheduledTaskDefinition, ScheduledTaskStatus, type SchedulerMiddlewareConfig, type SemanticMetricsFilter, type SemanticMetricsQueryRequest, type SemanticMetricsQueryResponse, type SemanticMetricsServerConfig, type ShareRecord, type ShareResult, type ShareVisibility, type SharedResourceStore, type Skill, type SkillClient, type SkillClientType, type SkillConfig, type SkillLatticeProtocol, type SkillStore, type SkillStoreContext, type SqlMiddlewareConfig, type StepStatus, type StepType, type StorageType, type SystemMessage, type TableQueryRequest, type TableQueryResponse, type TaskHandler, type TaskItem, type TaskListFilter, type TaskStore, type TaskWorkItem, type TaskWorkItemListFilter, type TaskWorkItemStore, type TeamAgentConfig, type TeamTeammateConfig, type Tenant, type TenantStatus, type TenantStore, type TestMcpServerToolsResponse, type Thread, type ThreadStore, type Timestamp, type ToolCall, type ToolConfig, type ToolExecutor, type ToolLatticeProtocol, type ToolMessage, type TopologyEdge, type TranscriptionResult, type UIComponent, UIComponentType, type UIConfig, type UILatticeProtocol, type UpdateChannelInstallationRequest, type UpdateCollectionRequest, type UpdateDatabaseConfigRequest, type UpdateMcpServerConfigRequest, type UpdateMenuItemInput, type UpdateMetricsServerConfigRequest, type UpdateProjectRequest, type UpdateRunStepRequest, type UpdateTaskRequest, type UpdateTenantRequest, type UpdateUserRequest, type UpdateUserTenantLinkRequest, type UpdateWorkflowRunRequest, type UpdateWorkspaceRequest, type User, type UserMessage, type UserStatus, type UserStore, type UserTenantLink, type UserTenantLinkStore, type UserTenantRole, type VectorStoreConfig, type VectorStoreCreateParams, type VectorStoreLatticeProtocol, type VectorStoreProvider, type WechatChannelInstallationConfig, type WorkflowAgentConfig, type WorkflowRun, type WorkflowRunStatus, type WorkflowTrackingStore, type Workspace, type WorkspaceStore, type YamlAgentStep, type YamlMapStep, type YamlParallelBlock, type YamlTopLevelStep, type YamlWorkflow, getSubAgentsFromConfig, getToolsFromConfig, hasTools, isA2ARemoteAgentConfig, isDeepAgentConfig, isProcessingAgentConfig, isTeamAgentConfig, isWorkflowAgentConfig };
4857
+ export { type A2AApiKeyEntry, type A2AApiKeyRecord, type A2AApiKeyStore, type A2AArtifact, type A2AAuthContext, type A2ACapabilities, type A2AConfig, type A2ADataPart, type A2AFilePart, type A2AMessage, type A2APart, type A2AProvider, type A2APushNotification, type A2ARemoteAgentConfig, type A2ASSEEvent, type A2ASkill, type A2ATask, type A2ATaskArtifactUpdatePayload, type A2ATaskSendRequest, type A2ATaskState, type A2ATaskStatus, type A2ATaskUpdatePayload, type A2ATextPart, A2A_DEFAULT_CAPABILITIES, A2A_DEFAULT_INPUT_MODES, A2A_DEFAULT_OUTPUT_MODES, type AgentCard, type AgentClient, type AgentConfig, type AgentConfigWithTools, type AgentLatticeProtocol, type AgentMenuConfig, type AgentMiddlewareConfig, type AgentRunConfig, AgentType, type Assistant, type AssistantMessage, type AssistantStore, type Attachment, type AvailableModule, type BaseLatticeProtocol, type BaseMessage, type Binding, type BindingRegistry, type BootstrapFilesConfig, type BrowserMiddlewareConfig, type Callback, type ChannelAdapter, type ChannelInstallation, type ChannelInstallationStore, type ChannelInstallationType, type ClawMiddlewareConfig, type CodeEvalMiddlewareConfig, type Collection, type CollectionField, type CollectionFieldType, type CollectionMiddlewareConfig, type CollectionSchema, type CollectionStore, type ConnectionEntry, type ConnectionStore, type ConversationRecord, type CreateA2AApiKeyInput, type CreateAssistantRequest, type CreateBindingInput, type CreateChannelInstallationRequest, type CreateCollectionRequest, type CreateConversationInput, type CreateDatabaseConfigRequest, type CreateEvalCaseRequest, type CreateEvalProjectRequest, type CreateEvalRunRequest, type CreateEvalSuiteRequest, type CreateMcpServerConfigRequest, type CreateMenuItemInput, type CreateMetricsServerConfigRequest, type CreateProjectRequest, type CreateRunStepRequest, type CreateShareRequest, type CreateSkillRequest, type CreateTaskRequest, type CreateTenantRequest, type CreateThreadRequest, type CreateUserRequest, type CreateUserTenantLinkRequest, type CreateWorkItemRequest, type CreateWorkflowRunRequest, type CreateWorkspaceRequest, type CustomMenuConfig, type DataSource, type DatabaseConfig, type DatabaseConfigEntry, type DatabaseConfigStore, type DatabaseType, type DeepAgentConfig, type DeveloperMessage, type DispatchResult, type EmbeddingsConfig, type EmbeddingsLatticeProtocol, type EvalCase, type EvalProject, type EvalProjectReport, type EvalRun, type EvalRunResult, type EvalStore, type EvalSuite, type ExecuteSqlQueryRequest, type ExecuteSqlQueryResponse, type FilterCondition, type GraphBuildOptions, type HtmlMenuConfig, type IConversationStore, type ID, type InboundMessage, type InternalAgentNode, type InternalBaseNode, type InternalDSL, type InternalEdge, type InternalInput, type InternalInputNode, type InternalMapNode, type InternalNode, type InternalNodeConfig, type InternalOutput, type InternalState, type InternalStateField, type InternalTerminalNode, type InterruptMessage, type InterruptPolicy, type LLMConfig, type LarkChannelInstallationConfig, type LatticeError, type LatticeEventBus, type LatticeMessage, type LocalA2AProviderId, type LocalA2AProviderState, type LocalA2AProviderStatus, type LocalA2ATemplateDefinition, type LocalRuntimeConfig, type LoggerClient, type LoggerConfig, type LoggerContext, type LoggerLatticeProtocol, LoggerType, type McpClient, type McpClientOptions, type McpConnectionStatus, type McpLatticeMessage, type McpLatticeProtocol, McpMessageType, type McpServerConfig, type McpServerConfigEntry, type McpServerConfigStore, type McpStats, type McpTool, type McpToolResult, type McpTransportType, type MemoryClient, type MemoryConfig, type MemoryLatticeProtocol, MemoryType, type MenuContentConfig, type MenuContentType, type MenuItem, type MenuRegistry, type MenuTarget, type Message, type MessageChunk, type MessageChunkType, MessageChunkTypes, type MessageContext, type MessageMiddleware, type MetricColumn, type MetricDataPoint, type MetricMeta, type MetricQueryResult, type MetricsMiddlewareConfig, type MetricsServerConfig, type MetricsServerConfigEntry, type MetricsServerConfigStore, type MetricsServerType, type MiddlewareType, type ModelLatticeProtocol, type OutboundMessage, type PaginatedResult, type PaginationParams, type PinoFileOptions, type Plugin, type PluginConnection, type PluginConnectionFieldSchema, type PluginConnectionTestResult, type PluginContext, type PluginDiscoveredResource, type PluginMeta, type PluginMetaOutput, type PluginMiddlewareFactory, type PluginToolMeta, type ProcessingAgentConfig, type Project, type ProjectStore, type QueryParams, type QueryResultFormat, type QueryWorkflowRunsOptions, type QueryWorkflowRunsResult, type QueueClient, type QueueConfig, type QueueLatticeProtocol, type QueueResult, QueueType, type ReactAgentConfig, type ReplyTarget, type ResourceAddress, type ResourceResolver, type Result, type RunStep, type STTClient, type STTConfig, type STTModelLatticeProtocol, type SandboxMiddlewareConfig, type ScheduleClient, type ScheduleConfig, type ScheduleCronOptions, ScheduleExecutionType, type ScheduleLatticeProtocol, type ScheduleOnceOptions, type ScheduleStorage, ScheduleType, type ScheduledTaskDefinition, ScheduledTaskStatus, type SchedulerMiddlewareConfig, type SemanticMetricsFilter, type SemanticMetricsQueryRequest, type SemanticMetricsQueryResponse, type SemanticMetricsServerConfig, type ShareRecord, type ShareResult, type ShareVisibility, type SharedResourceStore, type Skill, type SkillClient, type SkillClientType, type SkillConfig, type SkillLatticeProtocol, type SkillStore, type SkillStoreContext, type SqlMiddlewareConfig, type StepStatus, type StepType, type StorageType, type SystemMessage, type TableQueryRequest, type TableQueryResponse, type TaskFileRef, type TaskHandler, type TaskItem, type TaskListFilter, type TaskStore, type TaskWorkItem, type TaskWorkItemListFilter, type TaskWorkItemStore, type TeamAgentConfig, type TeamTeammateConfig, type Tenant, type TenantStatus, type TenantStore, type TestMcpServerToolsResponse, type Thread, type ThreadStore, type Timestamp, type ToolCall, type ToolConfig, type ToolExecutor, type ToolLatticeProtocol, type ToolMessage, type TopologyEdge, type TranscriptionResult, type UIComponent, UIComponentType, type UIConfig, type UILatticeProtocol, type UpdateChannelInstallationRequest, type UpdateCollectionRequest, type UpdateDatabaseConfigRequest, type UpdateMcpServerConfigRequest, type UpdateMenuItemInput, type UpdateMetricsServerConfigRequest, type UpdateProjectRequest, type UpdateRunStepRequest, type UpdateTaskRequest, type UpdateTenantRequest, type UpdateUserRequest, type UpdateUserTenantLinkRequest, type UpdateWorkflowRunRequest, type UpdateWorkspaceRequest, type User, type UserMessage, type UserStatus, type UserStore, type UserTenantLink, type UserTenantLinkStore, type UserTenantRole, type VectorStoreConfig, type VectorStoreCreateParams, type VectorStoreLatticeProtocol, type VectorStoreProvider, type WechatChannelInstallationConfig, type WorkflowAgentConfig, type WorkflowRun, type WorkflowRunStatus, type WorkflowTrackingStore, type Workspace, type WorkspaceStore, type YamlAgentStep, type YamlMapStep, type YamlParallelBlock, type YamlTopLevelStep, type YamlWorkflow, getSubAgentsFromConfig, getToolsFromConfig, hasTools, isA2ARemoteAgentConfig, isDeepAgentConfig, isProcessingAgentConfig, isTeamAgentConfig, isWorkflowAgentConfig };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/AgentLatticeProtocol.ts","../src/MemoryLatticeProtocol.ts","../src/UILatticeProtocol.ts","../src/QueueLatticeProtocol.ts","../src/ScheduleLatticeProtocol.ts","../src/LoggerLatticeProtocol.ts","../src/MessageProtocol.ts","../src/McpLatticeProtocol.ts","../src/A2AProtocol.ts"],"sourcesContent":["/**\n * Protocols\n *\n * 导出所有Lattice协议接口,为整个系统提供统一的接口规范\n */\n\nexport * from \"./BaseLatticeProtocol\";\nexport * from \"./ToolLatticeProtocol\";\nexport * from \"./ModelLatticeProtocol\";\nexport * from \"./AgentLatticeProtocol\";\nexport * from \"./MemoryLatticeProtocol\";\nexport * from \"./UILatticeProtocol\";\nexport * from \"./QueueLatticeProtocol\";\nexport * from \"./ScheduleLatticeProtocol\";\nexport * from \"./EmbeddingsLatticeProtocol\";\nexport * from \"./STTModelLatticeProtocol\";\nexport * from \"./VectorStoreLatticeProtocol\";\nexport * from \"./LoggerLatticeProtocol\";\nexport * from \"./MessageProtocol\";\nexport * from \"./ThreadStoreProtocol\";\nexport * from \"./AssistantStoreProtocol\";\nexport * from \"./SkillLatticeProtocol\";\nexport * from \"./SkillStoreProtocol\";\nexport * from \"./McpLatticeProtocol\";\nexport * from \"./WorkspaceStoreProtocol\";\nexport * from \"./TenantStoreProtocol\";\nexport * from \"./DatabaseConfigStoreProtocol\";\nexport * from \"./ConnectionStoreProtocol\";\nexport * from \"./ChannelInstallationStoreProtocol\";\nexport * from \"./MetricsServerConfigStoreProtocol\";\nexport * from \"./McpServerConfigStoreProtocol\";\nexport * from \"./UserStoreProtocol\";\nexport * from \"./UserTenantLinkProtocol\";\nexport * from \"./WorkflowTrackingStoreProtocol\";\nexport * from \"./BindingProtocol\";\nexport * from \"./CollectionStoreProtocol\";\nexport * from \"./VectorStoreProviderProtocol\";\nexport * from \"./MenuProtocol\";\nexport * from \"./EvalStoreProtocol\";\nexport * from \"./TaskStoreProtocol\";\nexport * from \"./TaskWorkItemProtocol\";\n\nexport * from \"./LocalA2ATemplateConfig\";\nexport * from \"./ChannelAdapterProtocol\";\nexport * from \"./A2AProtocol\";\nexport * from \"./A2AApiKeyStoreProtocol\";\nexport * from \"./ConversationStoreProtocol\";\n\n// Workflow DSL (concise, public API)\nexport * from \"./WorkflowDSL\";\n\n// Internal DSL (expanded IR, internal use)\nexport * from \"./InternalDSL\";\n\nexport * from \"./SandboxResourceProtocol\";\n\n// Plugin system\nexport type {\n Plugin,\n PluginMeta,\n PluginMetaOutput,\n PluginConnection,\n PluginConnectionFieldSchema,\n PluginConnectionTestResult,\n PluginDiscoveredResource,\n PluginContext,\n PluginToolMeta,\n PluginMiddlewareFactory,\n} from \"./PluginProtocol\";\n\n// 导出通用类型\nexport * from \"./types\";\n","/**\n * AgentLatticeProtocol\n *\n * 智能体Lattice的协议,定义了智能体的行为和组合方式\n */\n\nimport { CompiledStateGraph } from \"@langchain/langgraph\";\nimport { ZodObject } from \"zod\";\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * 智能体类型枚举\n */\nexport enum AgentType {\n REACT = \"react\",\n DEEP_AGENT = \"deep_agent\",\n TEAM = \"team\",\n PROCESSING = \"processing\",\n /** Remote A2A agent — delegates to an external A2A-compatible server */\n A2A_REMOTE = \"a2a_remote\",\n /** Workflow agent — compiled from YAML DSL into a LangGraph StateGraph */\n WORKFLOW = \"workflow\",\n}\n\n/**\n * Runtime configuration that will be injected into LangGraphRunnableConfig.configurable\n * Tools can access these values via config.configurable.runConfig\n */\nexport interface AgentRunConfig {\n /** Database key for SQL tools (registered via sqlDatabaseManager) */\n databaseKey?: string;\n /** Any additional runtime configuration */\n [key: string]: any;\n}\n\n/**\n * Base agent configuration shared by all agent types\n */\ninterface BaseAgentConfig {\n key: string; // Unique key\n name: string; // Name\n description: string; // Description\n prompt: string; // Prompt\n /**\n * Key of the parent agent to inherit configuration from.\n * When set, unspecified fields are inherited from the parent agent's config.\n * Child's explicitly set fields override the parent's.\n */\n extendsAgent?: string;\n schema?: ZodObject<any, any, any, any, any>; // Input validation schema\n modelKey?: string; // Model key to use\n /**\n * Runtime configuration to inject into tool execution context\n * Will be available in tools via config.configurable.runConfig\n */\n runConfig?: AgentRunConfig;\n skillCategories?: string[];\n middleware?: AgentMiddlewareConfig[];\n /**\n * Structured output response format for the agent.\n * Supports Zod schema (z.object({...})), JSON Schema object ({ type: \"object\", properties: {...} }),\n * providerStrategy(), toolStrategy(), and other formats accepted by the underlying model.\n *\n * @example\n * ```ts\n * // Zod schema\n * responseFormat: z.object({ name: z.string(), age: z.number() })\n *\n * // JSON Schema\n * responseFormat: { type: \"object\", properties: { name: { type: \"string\" } }, required: [\"name\"] }\n * ```\n */\n responseFormat?: any;\n}\n\nexport type AvailableModule = \"filesystem\" | \"code_eval\" | \"browser\";\n\nexport interface SandboxMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n modules: AvailableModule[];\n}\n\nexport interface CodeEvalMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n timeout: number;\n memoryLimit: number;\n}\n\nexport interface BrowserMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n headless: boolean;\n}\n\nexport interface SqlMiddlewareConfig {\n databaseKeys?: string[];\n}\n\nexport interface MetricsMiddlewareConfig {\n /** List of configured metrics server keys */\n serverKeys: string[];\n /** Optional descriptions for each server */\n serverDescriptions?: Record<string, string>;\n}\n\nexport interface SchedulerMiddlewareConfig {\n defaultMaxRetries?: number;\n}\n\nexport interface CollectionMiddlewareConfig {\n /** List of configured collection keys */\n collectionKeys: string[];\n /**\n * When true, all collections for the tenant are available.\n * When false or undefined, only collections in collectionKeys are used.\n */\n connectAll?: boolean;\n}\n\nexport type MiddlewareType = \"filesystem\" | \"code_eval\" | \"browser\" | \"sql\" | \"skill\" | \"http\" | \"custom\" | \"metrics\" | \"ask_user_to_clarify\" | \"widget\" | \"claw\" | \"date\" | \"scheduler\" | \"topology\" | \"task\" | \"collection\" | string;\n\nexport interface AgentMiddlewareConfig {\n id: string;\n type: MiddlewareType;\n name: string;\n description: string;\n enabled: boolean;\n /** 可选:限制该中间件暴露的工具列表。不配置则默认暴露所有工具 */\n allowedTools?: string[];\n config: SandboxMiddlewareConfig | CodeEvalMiddlewareConfig | BrowserMiddlewareConfig | SqlMiddlewareConfig | MetricsMiddlewareConfig | ClawMiddlewareConfig | CollectionMiddlewareConfig | SchedulerMiddlewareConfig | Record<string, any>;\n}\n\n/**\n * Bootstrap file configuration\n * Defines default content for project bootstrap files\n */\nexport interface BootstrapFilesConfig {\n /** Default content for AGENTS.md - operating instructions */\n agents?: string;\n /** Default content for SOUL.md - personality and tone */\n soul?: string;\n /** Default content for IDENTITY.md - agent identity */\n identity?: string;\n /** Default content for USER.md - user preferences */\n user?: string;\n /** Default content for TOOLS.md - tool documentation */\n tools?: string;\n /** Default content for BOOTSTRAP.md - first-run tasks */\n bootstrap?: string;\n}\n\n/**\n * Claw Middleware 配置\n * 用于配置 bootstrap 文件管理行为\n */\nexport interface ClawMiddlewareConfig {\n /** 是否启用 bootstrap 文件注入(默认:true) */\n injectBootstrapFiles?: boolean;\n /** 自定义 bootstrap 文件内容 */\n bootstrapFiles?: BootstrapFilesConfig;\n}\n\n\n/**\n * REACT agent configuration\n */\nexport interface ReactAgentConfig extends BaseAgentConfig {\n type: AgentType.REACT;\n tools?: string[]; // Tool list\n}\n\n/**\n * DEEP_AGENT configuration - only this type supports subAgents\n */\nexport interface DeepAgentConfig extends BaseAgentConfig {\n type: AgentType.DEEP_AGENT;\n tools?: string[]; // Tool list\n subAgents?: string[]; // Sub-agent list (unique to DEEP_AGENT)\n internalSubAgents?: AgentConfig[]; // Internal sub-agent list (unique to DEEP_AGENT)\n}\n\n/**\n * PROCESSING agent configuration — workflow orchestration with topology enforcement.\n * Replaces todoListMiddleware with topologyMiddleware.\n */\nexport interface ProcessingAgentConfig extends BaseAgentConfig {\n type: AgentType.PROCESSING;\n tools?: string[];\n subAgents?: string[];\n internalSubAgents?: AgentConfig[];\n}\n\n/**\n * Team teammate configuration -- describes an available teammate.\n */\nexport interface TeamTeammateConfig {\n /** Unique name for this teammate (used as agent ID) */\n name: string;\n /** Role category (e.g. \"research\", \"writing\", \"review\") */\n role: string;\n /** Human-readable description of what this teammate does */\n description: string;\n /** Tool keys this teammate has access to */\n tools?: string[];\n /** Custom system prompt for this teammate */\n prompt?: string;\n /** Model key override for this teammate */\n modelKey?: string;\n}\n\n/**\n * TEAM agent configuration -- a team lead that dynamically creates teammates.\n * Teammates are created on-the-fly from create_team tool input (name, role, description).\n */\nexport interface TeamAgentConfig extends BaseAgentConfig {\n type: AgentType.TEAM;\n /** Tool keys available to the team lead */\n tools?: string[];\n /** Maximum number of teammates running concurrently */\n maxConcurrency?: number;\n /**\n * Schedule lattice key for polling task list / mailbox.\n * When set, teammates use ScheduleLattice for periodic polling instead of event-driven wait.\n */\n scheduleLatticeKey?: string;\n /** Poll interval in ms when using schedule lattice (default: 5000) */\n pollIntervalMs?: number;\n}\n\n/**\n * Type guard to check if config is TeamAgentConfig\n */\nexport function isTeamAgentConfig(\n config: AgentConfig\n): config is TeamAgentConfig {\n return config.type === AgentType.TEAM;\n}\n\n// ─── A2A_REMOTE Agent ──────────────────────────────────────────────────────\n\nexport interface LocalRuntimeConfig {\n label?: string;\n agentCardUrl: string;\n healthUrl?: string;\n command: {\n executable: string;\n args: string[];\n cwd?: string;\n env?: Record<string, string>;\n };\n}\n\n/**\n * A2A_REMOTE agent configuration — wraps a remote A2A-compatible agent endpoint.\n *\n * This agent type wraps a remote A2A endpoint so orchestrators can treat\n * external agents the same as local LangGraph agents.\n */\nexport interface A2ARemoteAgentConfig extends BaseAgentConfig {\n type: AgentType.A2A_REMOTE;\n /**\n * URL of the remote agent's agent card (e.g. http://host:3000/.well-known/agent-card.json).\n * The builder fetches this card to discover the JSON-RPC endpoint.\n */\n agentCardUrl: string;\n /**\n * Optional API key sent as a Bearer token.\n */\n apiKey?: string;\n /**\n * HTTP timeout in milliseconds (default: 300_000 = 5 min).\n */\n timeout?: number;\n projectId?: string;\n /**\n * Optional tool keys (not used by the builder, but included for type compatibility).\n */\n tools?: string[];\n /**\n * Optional local runtime snapshot for Local Managed A2A assistants.\n * When present, the gateway manages a local process for this assistant.\n * Copied from a template or custom form at creation time.\n */\n localRuntime?: LocalRuntimeConfig;\n}\n\nexport type LocalA2AProviderId = string;\n\nexport type LocalA2AProviderStatus =\n | \"missing\"\n | \"disabled\"\n | \"starting\"\n | \"running\"\n | \"stopped\"\n | \"failed\";\n\nexport interface LocalA2AProviderState {\n runtimeId: string;\n label: string;\n status: LocalA2AProviderStatus;\n enabled: boolean;\n assistantId?: string;\n agentCardUrl?: string;\n healthUrl?: string;\n pid?: number;\n message?: string;\n lastStartedAt?: string;\n lastStoppedAt?: string;\n}\n\n/**\n * WORKFLOW agent configuration — compiled from YAML workflow DSL into a LangGraph StateGraph.\n *\n * The workflow field contains the full DSL definition (nodes, edges, state).\n * The WorkflowAgentGraphBuilder compiles this into a multi-node LangGraph\n * where each node invokes a registered sub-agent by ref.\n */\nexport interface WorkflowAgentConfig extends BaseAgentConfig {\n type: AgentType.WORKFLOW;\n /** The YAML workflow DSL definition string (needs+if format) */\n workflowYaml: string;\n /** Optional tool keys */\n tools?: string[];\n}\n\n/**\n * Type guard to check if config is A2ARemoteAgentConfig\n */\nexport function isA2ARemoteAgentConfig(\n config: AgentConfig\n): config is A2ARemoteAgentConfig {\n return config.type === AgentType.A2A_REMOTE;\n}\n\n/**\n * Type guard to check if config is WorkflowAgentConfig\n */\nexport function isWorkflowAgentConfig(\n config: AgentConfig\n): config is WorkflowAgentConfig {\n return config.type === AgentType.WORKFLOW;\n}\n\n/**\n * Agent configuration union type\n * Different agent types have different configuration options\n */\nexport type AgentConfig =\n | ReactAgentConfig\n | DeepAgentConfig\n | TeamAgentConfig\n | ProcessingAgentConfig\n | A2ARemoteAgentConfig\n | WorkflowAgentConfig\n\n/**\n * Agent configuration with tools property\n */\nexport type AgentConfigWithTools =\n | ReactAgentConfig\n | DeepAgentConfig\n | TeamAgentConfig\n | ProcessingAgentConfig\n | A2ARemoteAgentConfig\n | WorkflowAgentConfig\n\n/**\n * Type guard to check if config has tools property\n */\nexport function hasTools(config: AgentConfig): config is AgentConfigWithTools {\n return true;\n}\n\n/**\n * Type guard to check if config is DeepAgentConfig (has subAgents)\n */\nexport function isDeepAgentConfig(\n config: AgentConfig\n): config is DeepAgentConfig {\n return config.type === AgentType.DEEP_AGENT;\n}\n\n/**\n * Type guard to check if config is ProcessingAgentConfig (has subAgents + topology)\n */\nexport function isProcessingAgentConfig(\n config: AgentConfig\n): config is ProcessingAgentConfig {\n return config.type === AgentType.PROCESSING;\n}\n\n/**\n * Get tools from config safely\n */\nexport function getToolsFromConfig(config: AgentConfig): string[] {\n if (hasTools(config)) {\n return config.tools || [];\n }\n return [];\n}\n\n/**\n * Get subAgents from config safely (DeepAgentConfig and ProcessingAgentConfig have subAgents)\n */\nexport function getSubAgentsFromConfig(config: AgentConfig): string[] {\n if (isDeepAgentConfig(config) || isProcessingAgentConfig(config)) {\n return config.subAgents || [];\n }\n return [];\n}\n\n/**\n * 智能体客户端类型\n */\nexport type AgentClient = CompiledStateGraph<any, any, any, any, any>;\n\n/**\n * Graph构建选项\n */\nexport interface GraphBuildOptions {\n overrideTools?: string[];\n overrideModel?: string;\n metadata?: Record<string, any>;\n}\n\n/**\n * 智能体Lattice协议接口\n */\nexport interface AgentLatticeProtocol\n extends BaseLatticeProtocol<AgentConfig, AgentClient> {\n // 智能体执行函数\n invoke: (input: any, options?: any) => Promise<any>;\n\n // 构建智能体图\n buildGraph: (options?: GraphBuildOptions) => Promise<AgentClient>;\n}\n","/**\n * MemoryLatticeProtocol\n *\n * 记忆Lattice的协议,用于管理智能体的上下文和记忆\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * 记忆类型枚举\n */\nexport enum MemoryType {\n SHORT_TERM = \"short_term\",\n LONG_TERM = \"long_term\",\n EPISODIC = \"episodic\",\n SEMANTIC = \"semantic\",\n WORKING = \"working\",\n}\n\n/**\n * 记忆配置接口\n */\nexport interface MemoryConfig {\n name: string; // 名称\n description: string; // 描述\n type: MemoryType; // 记忆类型\n ttl?: number; // 生存时间\n capacity?: number; // 容量限制\n}\n\n/**\n * 记忆客户端接口\n */\nexport interface MemoryClient {\n add: (key: string, value: any) => Promise<void>;\n get: (key: string) => Promise<any>;\n update: (key: string, value: any) => Promise<void>;\n delete: (key: string) => Promise<void>;\n search: (query: string, options?: any) => Promise<any[]>;\n clear: () => Promise<void>;\n}\n\n/**\n * 记忆Lattice协议接口\n */\nexport interface MemoryLatticeProtocol\n extends BaseLatticeProtocol<MemoryConfig, MemoryClient> {\n // 记忆操作方法\n add: (key: string, value: any) => Promise<void>;\n get: (key: string) => Promise<any>;\n update: (key: string, value: any) => Promise<void>;\n delete: (key: string) => Promise<void>;\n search: (query: string, options?: any) => Promise<any[]>;\n clear: () => Promise<void>;\n}\n","/**\n * UILatticeProtocol\n *\n * UI Lattice的协议,用于定义用户界面组件\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * UI组件类型枚举\n */\nexport enum UIComponentType {\n CONTAINER = \"container\",\n INPUT = \"input\",\n BUTTON = \"button\",\n LIST = \"list\",\n TABLE = \"table\",\n CHART = \"chart\",\n FORM = \"form\",\n CARD = \"card\",\n MODAL = \"modal\",\n CUSTOM = \"custom\",\n}\n\n/**\n * UI配置接口\n */\nexport interface UIConfig {\n name: string; // 组件名称\n description: string; // 组件描述\n type: UIComponentType; // 组件类型\n props?: Record<string, any>; // 组件属性\n children?: string[]; // 子组件列表\n}\n\n/**\n * UI组件接口\n * 使用泛型以适应不同的UI框架(React, Vue等)\n */\nexport interface UIComponent<T = any> {\n render: (props?: any) => T;\n addEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n removeEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n\n/**\n * UI Lattice协议接口\n */\nexport interface UILatticeProtocol<T = any>\n extends BaseLatticeProtocol<UIConfig, UIComponent<T>> {\n // UI渲染方法\n render: (props?: any) => T;\n\n // 事件处理\n addEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n removeEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n","/**\n * QueueLatticeProtocol\n *\n * Queue Lattice protocol for task queue management\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Queue service type enumeration\n */\nexport enum QueueType {\n MEMORY = \"memory\",\n REDIS = \"redis\",\n}\n\n/**\n * Queue configuration interface\n */\nexport interface QueueConfig {\n name: string; // Queue name\n description: string; // Queue description\n type: QueueType; // Queue service type\n queueName?: string; // Specific queue name (e.g., \"tasks\")\n options?: Record<string, any>; // Additional options (e.g., Redis connection options)\n}\n\n/**\n * Queue operation result interface\n */\nexport interface QueueResult<T = any> {\n data: T | null;\n error: any | null;\n}\n\n/**\n * Queue client interface\n */\nexport interface QueueClient {\n push: (item: any) => Promise<QueueResult<number>>;\n pop: () => Promise<QueueResult<any>>;\n createQueue?: () => Promise<{ success: boolean; queue_name?: string; error?: any }>;\n}\n\n/**\n * Queue Lattice protocol interface\n */\nexport interface QueueLatticeProtocol\n extends BaseLatticeProtocol<QueueConfig, QueueClient> {\n // Queue operations\n push: (item: any) => Promise<QueueResult<number>>;\n pop: () => Promise<QueueResult<any>>;\n createQueue?: () => Promise<{ success: boolean; queue_name?: string; error?: any }>;\n}\n\n\n\n","/**\n * ScheduleLatticeProtocol\n *\n * Schedule Lattice protocol for delayed and recurring task execution management\n * Supports persistence and recovery after service restart\n * Supports both one-time delayed tasks and cron-style recurring tasks\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Schedule service type enumeration\n */\nexport enum ScheduleType {\n MEMORY = \"memory\",\n POSTGRES = \"postgres\",\n REDIS = \"redis\",\n}\n\n/**\n * Schedule execution type - one-time or recurring\n */\nexport enum ScheduleExecutionType {\n ONCE = \"once\", // Execute once at specified time\n CRON = \"cron\", // Recurring based on cron expression\n}\n\n/**\n * Task status enumeration\n */\nexport enum ScheduledTaskStatus {\n PENDING = \"pending\", // Waiting to be executed\n RUNNING = \"running\", // Currently executing\n COMPLETED = \"completed\", // Successfully completed (for ONCE type)\n FAILED = \"failed\", // Execution failed\n CANCELLED = \"cancelled\", // Manually cancelled\n PAUSED = \"paused\", // Paused (for CRON type)\n}\n\n/**\n * Schedule configuration interface\n */\nexport interface ScheduleConfig {\n name: string;\n description: string;\n type: ScheduleType;\n storage?: ScheduleStorage; // Optional storage for persistence\n options?: Record<string, any>;\n}\n\n/**\n * Scheduled task definition - fully serializable\n * Supports both one-time and cron-style recurring tasks\n */\nexport interface ScheduledTaskDefinition {\n taskId: string;\n taskType: string; // Maps to a registered handler\n payload: Record<string, any>; // JSON-serializable data passed to handler\n\n // Context fields for querying\n tenantId: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n\n // Execution configuration\n executionType: ScheduleExecutionType;\n\n // For ONCE type - execute at specific time or after delay\n executeAt?: number; // Timestamp when to execute\n delayMs?: number; // Original delay in milliseconds (for reference)\n\n // For CRON type - recurring schedule\n cronExpression?: string; // Cron format: \"0 9 * * *\" (min hour day month weekday)\n timezone?: string; // Timezone: \"Asia/Shanghai\", defaults to system timezone\n nextRunAt?: number; // Next calculated execution time\n lastRunAt?: number; // Last execution time\n\n // Execution tracking\n status: ScheduledTaskStatus;\n runCount: number; // How many times executed\n maxRuns?: number; // Max executions (null/undefined = infinite for cron, 1 for once)\n\n // Error handling\n retryCount: number; // Current retry count\n maxRetries: number; // Maximum retry attempts\n lastError?: string; // Last error message if failed\n\n // Timestamps\n createdAt: number;\n updatedAt: number;\n expiresAt?: number; // When to stop (for cron, optional)\n\n metadata?: Record<string, any>; // Additional metadata\n}\n\n/**\n * Task handler function type\n */\nexport type TaskHandler = (\n payload: Record<string, any>,\n taskInfo: ScheduledTaskDefinition\n) => void | Promise<void>;\n\n/**\n * Options for scheduling a one-time task\n */\nexport interface ScheduleOnceOptions {\n executeAt?: number; // Absolute timestamp to execute\n delayMs?: number; // OR relative delay from now\n maxRetries?: number; // Max retry attempts (default: 0)\n tenantId?: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n metadata?: Record<string, any>;\n}\n\n/**\n * Options for scheduling a cron task\n */\nexport interface ScheduleCronOptions {\n cronExpression: string; // Cron expression: \"0 9 * * *\"\n timezone?: string; // Timezone: \"Asia/Shanghai\"\n maxRuns?: number; // Max executions (undefined = infinite)\n expiresAt?: number; // Stop after this timestamp\n maxRetries?: number; // Max retry attempts per run (default: 0)\n tenantId?: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n metadata?: Record<string, any>;\n}\n\n/**\n * Schedule storage interface for persistence\n */\nexport interface ScheduleStorage {\n /**\n * Save a new task\n */\n save(task: ScheduledTaskDefinition): Promise<void>;\n\n /**\n * Get task by ID\n */\n get(taskId: string): Promise<ScheduledTaskDefinition | null>;\n\n /**\n * Update task\n */\n update(\n taskId: string,\n updates: Partial<ScheduledTaskDefinition>\n ): Promise<void>;\n\n /**\n * Delete task\n */\n delete(taskId: string): Promise<void>;\n\n /**\n * Get all pending/active tasks (for recovery)\n * Returns tasks with status: PENDING or PAUSED\n */\n getActiveTasks(): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by type\n */\n getTasksByType(taskType: string): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by status\n */\n getTasksByStatus(\n status: ScheduledTaskStatus\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by execution type\n */\n getTasksByExecutionType(\n executionType: ScheduleExecutionType\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by assistant ID\n */\n getTasksByAssistantId(\n assistantId: string\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by thread ID\n */\n getTasksByThreadId(threadId: string): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get all tasks (with optional filters)\n */\n getAllTasks(filters?: {\n tenantId?: string;\n status?: ScheduledTaskStatus;\n executionType?: ScheduleExecutionType;\n taskType?: string;\n assistantId?: string;\n threadId?: string;\n limit?: number;\n offset?: number;\n }): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Count tasks (with optional filters)\n */\n countTasks(filters?: {\n tenantId?: string;\n status?: ScheduledTaskStatus;\n executionType?: ScheduleExecutionType;\n taskType?: string;\n assistantId?: string;\n threadId?: string;\n }): Promise<number>;\n\n /**\n * Delete completed/cancelled tasks older than specified time\n * Useful for cleanup\n */\n deleteOldTasks(olderThanMs: number): Promise<number>;\n}\n\n/**\n * Schedule client interface\n */\nexport interface ScheduleClient {\n // ===== Handler Registration =====\n\n /**\n * Register a handler for a task type\n * Must be called before scheduling tasks of this type\n */\n registerHandler(taskType: string, handler: TaskHandler): void;\n\n /**\n * Unregister a handler\n */\n unregisterHandler(taskType: string): boolean;\n\n /**\n * Check if a handler is registered\n */\n hasHandler(taskType: string): boolean;\n\n /**\n * Get all registered handler types\n */\n getHandlerTypes(): string[];\n\n // ===== One-time Task Scheduling =====\n\n /**\n * Schedule a one-time task\n * @param taskId - Unique identifier for the task\n * @param taskType - Type of task (must have a registered handler)\n * @param payload - Data to pass to the handler (must be JSON-serializable)\n * @param options - Execution options (executeAt or delayMs required)\n */\n scheduleOnce(\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleOnceOptions\n ): Promise<boolean>;\n\n // ===== Cron Task Scheduling =====\n\n /**\n * Schedule a recurring cron task\n * @param taskId - Unique identifier for the task\n * @param taskType - Type of task (must have a registered handler)\n * @param payload - Data to pass to the handler (must be JSON-serializable)\n * @param options - Cron options (cronExpression required)\n */\n scheduleCron(\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleCronOptions\n ): Promise<boolean>;\n\n // ===== Task Management =====\n\n /**\n * Cancel a scheduled task\n */\n cancel(taskId: string): Promise<boolean>;\n\n /**\n * Pause a cron task (only for CRON type)\n */\n pause(taskId: string): Promise<boolean>;\n\n /**\n * Resume a paused cron task (only for CRON type)\n */\n resume(taskId: string): Promise<boolean>;\n\n /**\n * Check if a task exists\n */\n has(taskId: string): Promise<boolean>;\n\n /**\n * Get task information\n */\n getTask(taskId: string): Promise<ScheduledTaskDefinition | null>;\n\n /**\n * Get remaining time until next execution\n * Returns -1 if task not found or already executed\n */\n getRemainingTime(taskId: string): Promise<number>;\n\n /**\n * Get count of active tasks (pending + paused)\n */\n getActiveTaskCount(): Promise<number>;\n\n /**\n * Get all active task IDs\n */\n getActiveTaskIds(): Promise<string[]>;\n\n /**\n * Cancel all active tasks\n */\n cancelAll(): Promise<void>;\n\n // ===== Recovery =====\n\n /**\n * Restore active tasks from storage (call on service startup)\n * Re-schedules all pending tasks with their remaining time\n * Re-schedules all cron tasks for their next run\n * @returns Number of tasks restored\n */\n restore(): Promise<number>;\n\n // ===== Storage =====\n\n /**\n * Set the storage backend\n */\n setStorage(storage: ScheduleStorage): void;\n\n /**\n * Get current storage backend\n */\n getStorage(): ScheduleStorage | null;\n}\n\n/**\n * Schedule Lattice protocol interface\n */\nexport interface ScheduleLatticeProtocol\n extends BaseLatticeProtocol<ScheduleConfig, ScheduleClient> {\n // Handler registration\n registerHandler: (taskType: string, handler: TaskHandler) => void;\n unregisterHandler: (taskType: string) => boolean;\n hasHandler: (taskType: string) => boolean;\n getHandlerTypes: () => string[];\n\n // One-time task scheduling\n scheduleOnce: (\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleOnceOptions\n ) => Promise<boolean>;\n\n // Cron task scheduling\n scheduleCron: (\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleCronOptions\n ) => Promise<boolean>;\n\n // Task management\n cancel: (taskId: string) => Promise<boolean>;\n pause: (taskId: string) => Promise<boolean>;\n resume: (taskId: string) => Promise<boolean>;\n has: (taskId: string) => Promise<boolean>;\n getTask: (taskId: string) => Promise<ScheduledTaskDefinition | null>;\n getRemainingTime: (taskId: string) => Promise<number>;\n getActiveTaskCount: () => Promise<number>;\n getActiveTaskIds: () => Promise<string[]>;\n cancelAll: () => Promise<void>;\n\n // Recovery\n restore: () => Promise<number>;\n}\n","/**\n * LoggerLatticeProtocol\n *\n * Logger Lattice protocol for logging management\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Logger service type enumeration\n */\nexport enum LoggerType {\n PINO = \"pino\",\n CONSOLE = \"console\",\n CUSTOM = \"custom\",\n}\n\n/**\n * Logger context interface\n */\nexport interface LoggerContext {\n \"x-user-id\"?: string;\n \"x-tenant-id\"?: string;\n \"x-request-id\"?: string;\n \"x-task-id\"?: string;\n \"x-thread-id\"?: string;\n [key: string]: any;\n}\n\n/**\n * Pino logger file transport options\n */\nexport interface PinoFileOptions {\n file?: string; // Log file path (e.g., \"./logs/app.log\" or \"./logs/app\")\n frequency?: \"daily\" | \"hourly\" | \"minutely\" | string; // Log rotation frequency\n mkdir?: boolean; // Create directory if not exists\n size?: string; // Max file size (e.g., \"10M\", \"100K\")\n maxFiles?: number; // Maximum number of log files to keep\n}\n\n/**\n * Logger configuration interface\n */\nexport interface LoggerConfig {\n name: string; // Logger name\n description?: string; // Logger description\n type: LoggerType; // Logger service type\n serviceName?: string; // Service name (e.g., \"lattice-gateway\")\n loggerName?: string; // Logger instance name (e.g., \"fastify-server\")\n context?: LoggerContext; // Initial context\n // File logging options (for PINO type)\n file?: string | PinoFileOptions; // Log file path or detailed file options\n // Additional options (e.g., pino config, custom logger settings)\n options?: Record<string, any>;\n}\n\n/**\n * Logger client interface\n */\nexport interface LoggerClient {\n info: (msg: string, obj?: object) => void;\n error: (msg: string, obj?: object | Error) => void;\n warn: (msg: string, obj?: object) => void;\n debug: (msg: string, obj?: object) => void;\n updateContext?: (context: Partial<LoggerContext>) => void;\n child?: (options: Partial<LoggerConfig>) => LoggerClient;\n}\n\n/**\n * Logger Lattice protocol interface\n */\nexport interface LoggerLatticeProtocol\n extends BaseLatticeProtocol<LoggerConfig, LoggerClient> {\n // Logger operations\n info: (msg: string, obj?: object) => void;\n error: (msg: string, obj?: object | Error) => void;\n warn: (msg: string, obj?: object) => void;\n debug: (msg: string, obj?: object) => void;\n updateContext?: (context: Partial<LoggerContext>) => void;\n child?: (options: Partial<LoggerConfig>) => LoggerClient;\n}\n","/**\n * MessageProtocol\n *\n */\n\n\n\n/**\n * Base message interface\n */\nexport interface BaseMessage {\n id: string; // Unique identifier for the message\n role: string; // Role of the sender (user, assistant, system, tool, developer)\n content?: string; // Optional text content of the message\n name?: string; // Optional name of the sender\n}\n\n/**\n * User message interface\n */\nexport interface UserMessage extends BaseMessage {\n role: \"human\";\n content: string; // Text input from the user\n files?: Array<{ name: string; id: string }>; // Optional files attached to the message\n}\n\n/**\n * Tool call interface\n */\nexport interface ToolCall {\n id: string; // Unique identifier for this tool call\n name: string; // Name of the tool/function to call\n args: Record<string, any>; // Arguments as an object\n type: \"tool_call\"; // Type of tool call\n response?: string; // Optional response from the tool execution\n}\n\n/**\n * Assistant message interface\n */\nexport interface AssistantMessage extends BaseMessage {\n role: \"ai\";\n content?: string; // Text response from the assistant (optional if using tool calls)\n tool_calls?: ToolCall[]; // Optional tool calls made by the assistant\n}\n\nexport interface InterruptMessage extends BaseMessage {\n type: \"interrupt\";\n value: any;\n}\n\n/**\n * System message interface\n */\nexport interface SystemMessage extends BaseMessage {\n role: \"system\";\n content: string; // Instructions or context for the assistant\n}\n\n/**\n * Tool message interface\n */\nexport interface ToolMessage extends BaseMessage {\n role: \"tool\";\n content: string; // Result from the tool execution\n tool_call_id: string; // ID of the tool call this message responds to\n}\n\n/**\n * Developer message interface\n */\nexport interface DeveloperMessage extends BaseMessage {\n role: \"developer\";\n content: string; // Content for development or debugging\n}\n\n/**\n * Message chunk type constants\n */\nexport const MessageChunkTypes = {\n HUMAN: 'human',\n AI: 'ai',\n TOOL: 'tool',\n INTERRUPT: 'interrupt',\n MESSAGE_COMPLETED: 'message_completed',\n MESSAGE_FAILED: 'message_failed',\n THREAD_IDLE: 'thread_idle',\n} as const;\n\nexport type MessageChunkType = typeof MessageChunkTypes[keyof typeof MessageChunkTypes];\n\nexport interface MessageChunk {\n type: MessageChunkType;\n data: {\n id: string;\n content?: string;\n tool_call_chunks?: Array<{\n name?: string;\n args?: string;\n id?: string;\n index: number;\n }>;\n tool_calls?: Array<{\n name: string;\n args: Record<string, any>;\n id: string;\n type: string;\n response?: string;\n }>;\n additional_kwargs?: {\n tool_calls?: Array<{\n function?: { name?: string; arguments?: any };\n id?: string;\n }>;\n };\n tool_call_id?: string;\n };\n}\n\n/**\n * Message type union\n */\nexport type Message =\n | UserMessage\n | AssistantMessage\n | SystemMessage\n | ToolMessage\n | DeveloperMessage;\n","/**\n * McpLatticeProtocol\n *\n * Model Context Protocol (MCP) lattice protocol for integrating MCP servers\n * with the Lattice framework. Provides standardized interfaces for MCP\n * client connections, tool discovery, and remote execution.\n */\n\nimport { BaseLatticeProtocol, LatticeMessage } from \"./BaseLatticeProtocol\";\n\n/**\n * MCP transport type\n */\nexport type McpTransportType = \"stdio\" | \"streamable_http\" | \"sse\";\n\n/**\n * MCP server configuration\n */\nexport interface McpServerConfig {\n /** Server name */\n name: string;\n /** Server version */\n version: string;\n /** Transport type */\n transport: McpTransportType;\n /** Command for stdio transport (e.g., \"npx\", \"python\") */\n command?: string;\n /** Arguments for stdio transport */\n args?: string[];\n /** URL for HTTP/SSE transport */\n url?: string;\n /** Environment variables */\n env?: Record<string, string>;\n /** Connection timeout in milliseconds */\n timeout?: number;\n /** Retry attempts on connection failure */\n retryAttempts?: number;\n}\n\n/**\n * MCP tool definition\n */\nexport interface McpTool {\n /** Tool name */\n name: string;\n /** Tool description */\n description: string;\n /** Input schema */\n inputSchema: {\n type: \"object\";\n properties: Record<string, any>;\n required?: string[];\n };\n /** Tool metadata */\n metadata?: Record<string, any>;\n}\n\n/**\n * MCP tool call result\n */\nexport interface McpToolResult {\n /** Whether the call was successful */\n success: boolean;\n /** Result content */\n content: Array<{\n type: \"text\" | \"image\" | \"audio\" | \"resource\";\n data: any;\n mimeType?: string;\n }>;\n /** Error message if failed */\n error?: string;\n /** Execution metadata */\n metadata?: {\n duration: number;\n tokens?: number;\n model?: string;\n };\n}\n\n/**\n * MCP client interface\n */\nexport interface McpClient {\n /** Client name */\n name: string;\n /** Client version */\n version: string;\n /** Server configuration */\n serverConfig: McpServerConfig;\n \n /**\n * Connect to MCP server\n */\n connect(): Promise<void>;\n \n /**\n * Disconnect from MCP server\n */\n disconnect(): Promise<void>;\n \n /**\n * Check if connected\n */\n isConnected(): boolean;\n \n /**\n * List available tools\n */\n listTools(): Promise<McpTool[]>;\n \n /**\n * Call a tool\n */\n callTool(name: string, arguments_: Record<string, any>): Promise<McpToolResult>;\n \n /**\n * Subscribe to server notifications\n */\n subscribe(topic: string, handler: (data: any) => void): void;\n \n /**\n * Unsubscribe from server notifications\n */\n unsubscribe(topic: string): void;\n \n /**\n * Get client statistics\n */\n getStats(): McpStats;\n \n /**\n * Get connection status\n */\n getStatus(): McpConnectionStatus;\n}\n\n/**\n * MCP client options\n */\nexport interface McpClientOptions {\n /** Client name */\n name: string;\n /** Client version */\n version: string;\n /** Server configuration */\n serverConfig: McpServerConfig;\n /** Auto-connect on initialization */\n autoConnect?: boolean;\n /** Error handler */\n onError?: (error: Error) => void;\n /** Connection status handler */\n onStatusChange?: (status: McpConnectionStatus) => void;\n}\n\n/**\n * MCP Lattice protocol interface\n */\nexport interface McpLatticeProtocol\n extends BaseLatticeProtocol<McpServerConfig, McpClient> {\n /**\n * Server configuration\n */\n config: McpServerConfig;\n \n /**\n * MCP client instance\n */\n client: McpClient;\n \n /**\n * Connect to MCP server\n */\n connect(): Promise<void>;\n \n /**\n * Disconnect from MCP server\n */\n disconnect(): Promise<void>;\n \n /**\n * Get available tools\n */\n getTools(): Promise<McpTool[]>;\n \n /**\n * Execute a tool\n */\n executeTool(\n name: string,\n arguments_: Record<string, any>\n ): Promise<McpToolResult>;\n \n /**\n * Execute with automatic retries\n */\n executeToolWithRetry(\n name: string,\n arguments_: Record<string, any>,\n maxRetries?: number\n ): Promise<McpToolResult>;\n \n /**\n * Get protocol version\n */\n getProtocolVersion(): string;\n \n /**\n * Health check\n */\n healthCheck(): Promise<boolean>;\n}\n\n/**\n * MCP message types\n */\nexport enum McpMessageType {\n CONNECT = \"mcp:connect\",\n DISCONNECT = \"mcp:disconnect\",\n LIST_TOOLS = \"mcp:list_tools\",\n CALL_TOOL = \"mcp:call_tool\",\n TOOL_RESULT = \"mcp:tool_result\",\n NOTIFICATION = \"mcp:notification\",\n ERROR = \"mcp:error\",\n HEALTH_CHECK = \"mcp:health_check\",\n}\n\n/**\n * MCP Lattice message\n */\nexport interface McpLatticeMessage extends LatticeMessage {\n type: McpMessageType;\n payload: {\n toolName?: string;\n arguments?: Record<string, any>;\n result?: McpToolResult;\n tools?: McpTool[];\n error?: string;\n };\n}\n\n/**\n * MCP connection status\n */\nexport type McpConnectionStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"reconnecting\"\n | \"error\";\n\n/**\n * MCP statistics\n */\nexport interface McpStats {\n totalCalls: number;\n successfulCalls: number;\n failedCalls: number;\n averageLatency: number;\n lastCallTimestamp: number;\n}\n","/**\n * A2AProtocol - Google Agent-to-Agent Protocol type definitions\n *\n * Based on the A2A open protocol spec for AI agent interoperability.\n * @see https://github.com/google/A2A\n */\n\n// ─── Agent Card ───────────────────────────────────────────────────────────\n\nexport interface A2ASkill {\n id: string;\n name: string;\n description: string;\n tags: string[];\n examples: string[];\n}\n\nexport interface A2ACapabilities {\n streaming: boolean;\n pushNotifications: boolean;\n stateTransitionHistory: boolean;\n}\n\nexport interface A2AProvider {\n organization: string;\n url?: string;\n}\n\nexport interface AgentCard {\n name: string;\n description: string;\n url: string;\n provider: A2AProvider;\n version: string;\n documentationUrl?: string;\n capabilities: A2ACapabilities;\n defaultInputModes: string[];\n defaultOutputModes: string[];\n skills: A2ASkill[];\n}\n\n// ─── Artifact / Part ──────────────────────────────────────────────────────\n\nexport interface A2ATextPart {\n type: \"text\";\n text: string;\n}\n\nexport interface A2AFilePart {\n type: \"file\";\n file: {\n name: string;\n mimeType: string;\n bytes?: string;\n uri?: string;\n };\n}\n\nexport interface A2ADataPart {\n type: \"data\";\n data: Record<string, unknown>;\n}\n\nexport type A2APart = A2ATextPart | A2AFilePart | A2ADataPart;\n\n// ─── Message ──────────────────────────────────────────────────────────────\n\nexport interface A2AMessage {\n role: \"user\" | \"agent\";\n parts: A2APart[];\n messageId?: string;\n contextId?: string;\n referenceTaskIds?: string[];\n metadata?: Record<string, unknown>;\n}\n\n// ─── Task ─────────────────────────────────────────────────────────────────\n\nexport type A2ATaskState =\n | \"working\"\n | \"input-required\"\n | \"completed\"\n | \"failed\"\n | \"canceled\"\n | \"rejected\";\n\nexport interface A2ATaskStatus {\n state: A2ATaskState;\n message?: A2AMessage;\n timestamp: string;\n}\n\nexport interface A2AArtifact {\n name?: string;\n description?: string;\n parts: A2APart[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2ATask {\n id: string;\n sessionId?: string;\n contextId?: string;\n status: A2ATaskStatus;\n artifacts: A2AArtifact[];\n history?: A2AMessage[];\n metadata?: Record<string, unknown>;\n}\n\n// ─── Request / Response ───────────────────────────────────────────────────\n\nexport interface A2ATaskSendRequest {\n id?: string;\n sessionId?: string;\n message: A2AMessage;\n pushNotification?: A2APushNotification;\n historyLength?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2APushNotification {\n url: string;\n token?: string;\n}\n\nexport interface A2ATaskUpdatePayload {\n id: string;\n sessionId?: string;\n contextId?: string;\n status: A2ATaskStatus;\n final?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2ATaskArtifactUpdatePayload {\n id: string;\n sessionId?: string;\n contextId?: string;\n artifact: A2AArtifact;\n final?: boolean;\n metadata?: Record<string, unknown>;\n}\n\n// ─── SSE Events ───────────────────────────────────────────────────────────\n\nexport type A2ASSEEvent =\n | { event: \"task\"; data: A2ATaskUpdatePayload }\n | { event: \"status-update\"; data: A2ATaskUpdatePayload }\n | { event: \"artifact-update\"; data: A2ATaskArtifactUpdatePayload }\n | { event: \"error\"; data: { code: string; message: string } };\n\n// ─── Config ───────────────────────────────────────────────────────────────\n\nexport interface A2AConfig {\n agentName: string;\n agentDescription: string;\n agentUrl: string;\n organization: string;\n version?: string;\n capabilities?: Partial<A2ACapabilities>;\n defaultInputModes?: string[];\n defaultOutputModes?: string[];\n skills?: A2ASkill[];\n apiKeyMap: Map<string, A2AApiKeyEntry>;\n}\n\nexport interface A2AApiKeyEntry {\n key: string;\n tenantId?: string;\n projectId?: string;\n workspaceId?: string;\n}\n\nexport const A2A_DEFAULT_CAPABILITIES: A2ACapabilities = {\n streaming: true,\n pushNotifications: false,\n stateTransitionHistory: false,\n};\n\nexport const A2A_DEFAULT_INPUT_MODES = [\"text\", \"text/plain\"];\nexport const A2A_DEFAULT_OUTPUT_MODES = [\"text\", \"text/plain\", \"text/markdown\"];\n\nexport interface A2AAuthContext {\n authenticated: boolean;\n apiKey?: string;\n tenantId?: string;\n projectId?: string;\n workspaceId?: string;\n source?: \"bearer\" | \"x-api-key\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACaO,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,gBAAa;AAEb,EAAAA,WAAA,gBAAa;AAEb,EAAAA,WAAA,cAAW;AARD,SAAAA;AAAA,GAAA;AA0NL,SAAS,kBACd,QAC2B;AAC3B,SAAO,OAAO,SAAS;AACzB;AA4FO,SAAS,uBACd,QACgC;AAChC,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,sBACd,QAC+B;AAC/B,SAAO,OAAO,SAAS;AACzB;AA4BO,SAAS,SAAS,QAAqD;AAC5E,SAAO;AACT;AAKO,SAAS,kBACd,QAC2B;AAC3B,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,wBACd,QACiC;AACjC,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,mBAAmB,QAA+B;AAChE,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO,OAAO,SAAS,CAAC;AAAA,EAC1B;AACA,SAAO,CAAC;AACV;AAKO,SAAS,uBAAuB,QAA+B;AACpE,MAAI,kBAAkB,MAAM,KAAK,wBAAwB,MAAM,GAAG;AAChE,WAAO,OAAO,aAAa,CAAC;AAAA,EAC9B;AACA,SAAO,CAAC;AACV;;;AC7YO,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,aAAU;AALA,SAAAA;AAAA,GAAA;;;ACAL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AAVC,SAAAA;AAAA,GAAA;;;ACAL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;;;ACEL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,WAAQ;AAHE,SAAAA;AAAA,GAAA;AASL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,UAAO;AACP,EAAAA,uBAAA,UAAO;AAFG,SAAAA;AAAA,GAAA;AAQL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,YAAS;AACT,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,YAAS;AANC,SAAAA;AAAA,GAAA;;;ACnBL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;;;ACoEL,IAAM,oBAAoB;AAAA,EAC/B,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,aAAa;AACf;;;ACgIO,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,gBAAa;AACb,EAAAA,gBAAA,gBAAa;AACb,EAAAA,gBAAA,eAAY;AACZ,EAAAA,gBAAA,iBAAc;AACd,EAAAA,gBAAA,kBAAe;AACf,EAAAA,gBAAA,WAAQ;AACR,EAAAA,gBAAA,kBAAe;AARL,SAAAA;AAAA,GAAA;;;AC1CL,IAAM,2BAA4C;AAAA,EACvD,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,wBAAwB;AAC1B;AAEO,IAAM,0BAA0B,CAAC,QAAQ,YAAY;AACrD,IAAM,2BAA2B,CAAC,QAAQ,cAAc,eAAe;","names":["AgentType","MemoryType","UIComponentType","QueueType","ScheduleType","ScheduleExecutionType","ScheduledTaskStatus","LoggerType","McpMessageType"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/AgentLatticeProtocol.ts","../src/MemoryLatticeProtocol.ts","../src/UILatticeProtocol.ts","../src/QueueLatticeProtocol.ts","../src/ScheduleLatticeProtocol.ts","../src/LoggerLatticeProtocol.ts","../src/MessageProtocol.ts","../src/McpLatticeProtocol.ts","../src/A2AProtocol.ts"],"sourcesContent":["/**\n * Protocols\n *\n * 导出所有Lattice协议接口,为整个系统提供统一的接口规范\n */\n\nexport * from \"./BaseLatticeProtocol\";\nexport * from \"./ToolLatticeProtocol\";\nexport * from \"./ModelLatticeProtocol\";\nexport * from \"./AgentLatticeProtocol\";\nexport * from \"./MemoryLatticeProtocol\";\nexport * from \"./UILatticeProtocol\";\nexport * from \"./QueueLatticeProtocol\";\nexport * from \"./ScheduleLatticeProtocol\";\nexport * from \"./EmbeddingsLatticeProtocol\";\nexport * from \"./STTModelLatticeProtocol\";\nexport * from \"./VectorStoreLatticeProtocol\";\nexport * from \"./LoggerLatticeProtocol\";\nexport * from \"./MessageProtocol\";\nexport * from \"./ThreadStoreProtocol\";\nexport * from \"./AssistantStoreProtocol\";\nexport * from \"./SkillLatticeProtocol\";\nexport * from \"./SkillStoreProtocol\";\nexport * from \"./McpLatticeProtocol\";\nexport * from \"./WorkspaceStoreProtocol\";\nexport * from \"./TenantStoreProtocol\";\nexport * from \"./DatabaseConfigStoreProtocol\";\nexport * from \"./ConnectionStoreProtocol\";\nexport * from \"./ChannelInstallationStoreProtocol\";\nexport * from \"./MetricsServerConfigStoreProtocol\";\nexport * from \"./McpServerConfigStoreProtocol\";\nexport * from \"./UserStoreProtocol\";\nexport * from \"./UserTenantLinkProtocol\";\nexport * from \"./WorkflowTrackingStoreProtocol\";\nexport * from \"./BindingProtocol\";\nexport * from \"./CollectionStoreProtocol\";\nexport * from \"./VectorStoreProviderProtocol\";\nexport * from \"./MenuProtocol\";\nexport * from \"./EvalStoreProtocol\";\nexport * from \"./TaskStoreProtocol\";\nexport * from \"./TaskWorkItemProtocol\";\n\nexport * from \"./LocalA2ATemplateConfig\";\nexport * from \"./ChannelAdapterProtocol\";\nexport * from \"./A2AProtocol\";\nexport * from \"./A2AApiKeyStoreProtocol\";\nexport * from \"./ConversationStoreProtocol\";\n\n// Workflow DSL (concise, public API)\nexport * from \"./WorkflowDSL\";\n\n// Internal DSL (expanded IR, internal use)\nexport * from \"./InternalDSL\";\n\nexport * from \"./SandboxResourceProtocol\";\n\n// Plugin system\nexport type {\n Plugin,\n PluginMeta,\n PluginMetaOutput,\n PluginConnection,\n PluginConnectionFieldSchema,\n PluginConnectionTestResult,\n PluginDiscoveredResource,\n PluginContext,\n PluginToolMeta,\n PluginMiddlewareFactory,\n} from \"./PluginProtocol\";\n\n// 导出通用类型\nexport * from \"./types\";\n","/**\n * AgentLatticeProtocol\n *\n * 智能体Lattice的协议,定义了智能体的行为和组合方式\n */\n\nimport { CompiledStateGraph } from \"@langchain/langgraph\";\nimport { ZodObject } from \"zod\";\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * 智能体类型枚举\n */\nexport enum AgentType {\n REACT = \"react\",\n DEEP_AGENT = \"deep_agent\",\n TEAM = \"team\",\n PROCESSING = \"processing\",\n /** Remote A2A agent — delegates to an external A2A-compatible server */\n A2A_REMOTE = \"a2a_remote\",\n /** Workflow agent — compiled from YAML DSL into a LangGraph StateGraph */\n WORKFLOW = \"workflow\",\n}\n\n/**\n * Runtime configuration that will be injected into LangGraphRunnableConfig.configurable\n * Tools can access these values via config.configurable.runConfig\n */\nexport interface AgentRunConfig {\n /** Database key for SQL tools (registered via sqlDatabaseManager) */\n databaseKey?: string;\n /** Any additional runtime configuration */\n [key: string]: any;\n}\n\n/**\n * Base agent configuration shared by all agent types\n */\ninterface BaseAgentConfig {\n key: string; // Unique key\n name: string; // Name\n description: string; // Description\n prompt: string; // Prompt\n /**\n * Key of the parent agent to inherit configuration from.\n * When set, unspecified fields are inherited from the parent agent's config.\n * Child's explicitly set fields override the parent's.\n */\n extendsAgent?: string;\n schema?: ZodObject<any, any, any, any, any>; // Input validation schema\n modelKey?: string; // Model key to use\n /**\n * Runtime configuration to inject into tool execution context\n * Will be available in tools via config.configurable.runConfig\n */\n runConfig?: AgentRunConfig;\n skillCategories?: string[];\n middleware?: AgentMiddlewareConfig[];\n /**\n * Structured output response format for the agent.\n * Supports Zod schema (z.object({...})), JSON Schema object ({ type: \"object\", properties: {...} }),\n * providerStrategy(), toolStrategy(), and other formats accepted by the underlying model.\n *\n * @example\n * ```ts\n * // Zod schema\n * responseFormat: z.object({ name: z.string(), age: z.number() })\n *\n * // JSON Schema\n * responseFormat: { type: \"object\", properties: { name: { type: \"string\" } }, required: [\"name\"] }\n * ```\n */\n responseFormat?: any;\n /**\n * Arbitrary metadata as string-to-string map (optional).\n * Mirrors the skill metadata convention. Useful for:\n * - trust tier (e.g. verified: \"human-reviewed\" | \"machine-confirmed\")\n * - version tracking (e.g. version: \"1.2\")\n * - provenance (e.g. source material, learning run id)\n */\n metadata?: Record<string, string>;\n}\n\nexport type AvailableModule = \"filesystem\" | \"code_eval\" | \"browser\";\n\nexport interface SandboxMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n modules: AvailableModule[];\n}\n\nexport interface CodeEvalMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n timeout: number;\n memoryLimit: number;\n}\n\nexport interface BrowserMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n headless: boolean;\n}\n\nexport interface SqlMiddlewareConfig {\n databaseKeys?: string[];\n}\n\nexport interface MetricsMiddlewareConfig {\n /** List of configured metrics server keys */\n serverKeys: string[];\n /** Optional descriptions for each server */\n serverDescriptions?: Record<string, string>;\n}\n\nexport interface SchedulerMiddlewareConfig {\n defaultMaxRetries?: number;\n}\n\nexport interface CollectionMiddlewareConfig {\n /** List of configured collection keys */\n collectionKeys: string[];\n /**\n * When true, all collections for the tenant are available.\n * When false or undefined, only collections in collectionKeys are used.\n */\n connectAll?: boolean;\n}\n\nexport type MiddlewareType = \"filesystem\" | \"code_eval\" | \"browser\" | \"sql\" | \"skill\" | \"http\" | \"custom\" | \"metrics\" | \"ask_user_to_clarify\" | \"widget\" | \"claw\" | \"date\" | \"scheduler\" | \"topology\" | \"task\" | \"collection\" | string;\n\nexport interface AgentMiddlewareConfig {\n id: string;\n type: MiddlewareType;\n name: string;\n description: string;\n enabled: boolean;\n /** 可选:限制该中间件暴露的工具列表。不配置则默认暴露所有工具 */\n allowedTools?: string[];\n config: SandboxMiddlewareConfig | CodeEvalMiddlewareConfig | BrowserMiddlewareConfig | SqlMiddlewareConfig | MetricsMiddlewareConfig | ClawMiddlewareConfig | CollectionMiddlewareConfig | SchedulerMiddlewareConfig | Record<string, any>;\n}\n\n/**\n * Bootstrap file configuration\n * Defines default content for project bootstrap files\n */\nexport interface BootstrapFilesConfig {\n /** Default content for AGENTS.md - operating instructions */\n agents?: string;\n /** Default content for SOUL.md - personality and tone */\n soul?: string;\n /** Default content for IDENTITY.md - agent identity */\n identity?: string;\n /** Default content for USER.md - user preferences */\n user?: string;\n /** Default content for TOOLS.md - tool documentation */\n tools?: string;\n /** Default content for BOOTSTRAP.md - first-run tasks */\n bootstrap?: string;\n}\n\n/**\n * Claw Middleware 配置\n * 用于配置 bootstrap 文件管理行为\n */\nexport interface ClawMiddlewareConfig {\n /** 是否启用 bootstrap 文件注入(默认:true) */\n injectBootstrapFiles?: boolean;\n /** 自定义 bootstrap 文件内容 */\n bootstrapFiles?: BootstrapFilesConfig;\n}\n\n\n/**\n * REACT agent configuration\n */\nexport interface ReactAgentConfig extends BaseAgentConfig {\n type: AgentType.REACT;\n tools?: string[]; // Tool list\n}\n\n/**\n * DEEP_AGENT configuration - only this type supports subAgents\n */\nexport interface DeepAgentConfig extends BaseAgentConfig {\n type: AgentType.DEEP_AGENT;\n tools?: string[]; // Tool list\n subAgents?: string[]; // Sub-agent list (unique to DEEP_AGENT)\n internalSubAgents?: AgentConfig[]; // Internal sub-agent list (unique to DEEP_AGENT)\n}\n\n/**\n * PROCESSING agent configuration — workflow orchestration with topology enforcement.\n * Replaces todoListMiddleware with topologyMiddleware.\n */\nexport interface ProcessingAgentConfig extends BaseAgentConfig {\n type: AgentType.PROCESSING;\n tools?: string[];\n subAgents?: string[];\n internalSubAgents?: AgentConfig[];\n}\n\n/**\n * Team teammate configuration -- describes an available teammate.\n */\nexport interface TeamTeammateConfig {\n /** Unique name for this teammate (used as agent ID) */\n name: string;\n /** Role category (e.g. \"research\", \"writing\", \"review\") */\n role: string;\n /** Human-readable description of what this teammate does */\n description: string;\n /** Tool keys this teammate has access to */\n tools?: string[];\n /** Custom system prompt for this teammate */\n prompt?: string;\n /** Model key override for this teammate */\n modelKey?: string;\n}\n\n/**\n * TEAM agent configuration -- a team lead that dynamically creates teammates.\n * Teammates are created on-the-fly from create_team tool input (name, role, description).\n */\nexport interface TeamAgentConfig extends BaseAgentConfig {\n type: AgentType.TEAM;\n /** Tool keys available to the team lead */\n tools?: string[];\n /** Maximum number of teammates running concurrently */\n maxConcurrency?: number;\n /**\n * Schedule lattice key for polling task list / mailbox.\n * When set, teammates use ScheduleLattice for periodic polling instead of event-driven wait.\n */\n scheduleLatticeKey?: string;\n /** Poll interval in ms when using schedule lattice (default: 5000) */\n pollIntervalMs?: number;\n}\n\n/**\n * Type guard to check if config is TeamAgentConfig\n */\nexport function isTeamAgentConfig(\n config: AgentConfig\n): config is TeamAgentConfig {\n return config.type === AgentType.TEAM;\n}\n\n// ─── A2A_REMOTE Agent ──────────────────────────────────────────────────────\n\nexport interface LocalRuntimeConfig {\n label?: string;\n agentCardUrl: string;\n healthUrl?: string;\n command: {\n executable: string;\n args: string[];\n cwd?: string;\n env?: Record<string, string>;\n };\n}\n\n/**\n * A2A_REMOTE agent configuration — wraps a remote A2A-compatible agent endpoint.\n *\n * This agent type wraps a remote A2A endpoint so orchestrators can treat\n * external agents the same as local LangGraph agents.\n */\nexport interface A2ARemoteAgentConfig extends BaseAgentConfig {\n type: AgentType.A2A_REMOTE;\n /**\n * URL of the remote agent's agent card (e.g. http://host:3000/.well-known/agent-card.json).\n * The builder fetches this card to discover the JSON-RPC endpoint.\n */\n agentCardUrl: string;\n /**\n * Optional API key sent as a Bearer token.\n */\n apiKey?: string;\n /**\n * HTTP timeout in milliseconds (default: 300_000 = 5 min).\n */\n timeout?: number;\n projectId?: string;\n /**\n * Optional tool keys (not used by the builder, but included for type compatibility).\n */\n tools?: string[];\n /**\n * Optional local runtime snapshot for Local Managed A2A assistants.\n * When present, the gateway manages a local process for this assistant.\n * Copied from a template or custom form at creation time.\n */\n localRuntime?: LocalRuntimeConfig;\n}\n\nexport type LocalA2AProviderId = string;\n\nexport type LocalA2AProviderStatus =\n | \"missing\"\n | \"disabled\"\n | \"starting\"\n | \"running\"\n | \"stopped\"\n | \"failed\";\n\nexport interface LocalA2AProviderState {\n runtimeId: string;\n label: string;\n status: LocalA2AProviderStatus;\n enabled: boolean;\n assistantId?: string;\n agentCardUrl?: string;\n healthUrl?: string;\n pid?: number;\n message?: string;\n lastStartedAt?: string;\n lastStoppedAt?: string;\n}\n\n/**\n * WORKFLOW agent configuration — compiled from YAML workflow DSL into a LangGraph StateGraph.\n *\n * The workflow field contains the full DSL definition (nodes, edges, state).\n * The WorkflowAgentGraphBuilder compiles this into a multi-node LangGraph\n * where each node invokes a registered sub-agent by ref.\n */\nexport interface WorkflowAgentConfig extends BaseAgentConfig {\n type: AgentType.WORKFLOW;\n /** The YAML workflow DSL definition string (needs+if format) */\n workflowYaml: string;\n /** Optional tool keys */\n tools?: string[];\n}\n\n/**\n * Type guard to check if config is A2ARemoteAgentConfig\n */\nexport function isA2ARemoteAgentConfig(\n config: AgentConfig\n): config is A2ARemoteAgentConfig {\n return config.type === AgentType.A2A_REMOTE;\n}\n\n/**\n * Type guard to check if config is WorkflowAgentConfig\n */\nexport function isWorkflowAgentConfig(\n config: AgentConfig\n): config is WorkflowAgentConfig {\n return config.type === AgentType.WORKFLOW;\n}\n\n/**\n * Agent configuration union type\n * Different agent types have different configuration options\n */\nexport type AgentConfig =\n | ReactAgentConfig\n | DeepAgentConfig\n | TeamAgentConfig\n | ProcessingAgentConfig\n | A2ARemoteAgentConfig\n | WorkflowAgentConfig\n\n/**\n * Agent configuration with tools property\n */\nexport type AgentConfigWithTools =\n | ReactAgentConfig\n | DeepAgentConfig\n | TeamAgentConfig\n | ProcessingAgentConfig\n | A2ARemoteAgentConfig\n | WorkflowAgentConfig\n\n/**\n * Type guard to check if config has tools property\n */\nexport function hasTools(config: AgentConfig): config is AgentConfigWithTools {\n return true;\n}\n\n/**\n * Type guard to check if config is DeepAgentConfig (has subAgents)\n */\nexport function isDeepAgentConfig(\n config: AgentConfig\n): config is DeepAgentConfig {\n return config.type === AgentType.DEEP_AGENT;\n}\n\n/**\n * Type guard to check if config is ProcessingAgentConfig (has subAgents + topology)\n */\nexport function isProcessingAgentConfig(\n config: AgentConfig\n): config is ProcessingAgentConfig {\n return config.type === AgentType.PROCESSING;\n}\n\n/**\n * Get tools from config safely\n */\nexport function getToolsFromConfig(config: AgentConfig): string[] {\n if (hasTools(config)) {\n return config.tools || [];\n }\n return [];\n}\n\n/**\n * Get subAgents from config safely (DeepAgentConfig and ProcessingAgentConfig have subAgents)\n */\nexport function getSubAgentsFromConfig(config: AgentConfig): string[] {\n if (isDeepAgentConfig(config) || isProcessingAgentConfig(config)) {\n return config.subAgents || [];\n }\n return [];\n}\n\n/**\n * 智能体客户端类型\n */\nexport type AgentClient = CompiledStateGraph<any, any, any, any, any>;\n\n/**\n * Graph构建选项\n */\nexport interface GraphBuildOptions {\n overrideTools?: string[];\n overrideModel?: string;\n metadata?: Record<string, any>;\n}\n\n/**\n * 智能体Lattice协议接口\n */\nexport interface AgentLatticeProtocol\n extends BaseLatticeProtocol<AgentConfig, AgentClient> {\n // 智能体执行函数\n invoke: (input: any, options?: any) => Promise<any>;\n\n // 构建智能体图\n buildGraph: (options?: GraphBuildOptions) => Promise<AgentClient>;\n}\n","/**\n * MemoryLatticeProtocol\n *\n * 记忆Lattice的协议,用于管理智能体的上下文和记忆\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * 记忆类型枚举\n */\nexport enum MemoryType {\n SHORT_TERM = \"short_term\",\n LONG_TERM = \"long_term\",\n EPISODIC = \"episodic\",\n SEMANTIC = \"semantic\",\n WORKING = \"working\",\n}\n\n/**\n * 记忆配置接口\n */\nexport interface MemoryConfig {\n name: string; // 名称\n description: string; // 描述\n type: MemoryType; // 记忆类型\n ttl?: number; // 生存时间\n capacity?: number; // 容量限制\n}\n\n/**\n * 记忆客户端接口\n */\nexport interface MemoryClient {\n add: (key: string, value: any) => Promise<void>;\n get: (key: string) => Promise<any>;\n update: (key: string, value: any) => Promise<void>;\n delete: (key: string) => Promise<void>;\n search: (query: string, options?: any) => Promise<any[]>;\n clear: () => Promise<void>;\n}\n\n/**\n * 记忆Lattice协议接口\n */\nexport interface MemoryLatticeProtocol\n extends BaseLatticeProtocol<MemoryConfig, MemoryClient> {\n // 记忆操作方法\n add: (key: string, value: any) => Promise<void>;\n get: (key: string) => Promise<any>;\n update: (key: string, value: any) => Promise<void>;\n delete: (key: string) => Promise<void>;\n search: (query: string, options?: any) => Promise<any[]>;\n clear: () => Promise<void>;\n}\n","/**\n * UILatticeProtocol\n *\n * UI Lattice的协议,用于定义用户界面组件\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * UI组件类型枚举\n */\nexport enum UIComponentType {\n CONTAINER = \"container\",\n INPUT = \"input\",\n BUTTON = \"button\",\n LIST = \"list\",\n TABLE = \"table\",\n CHART = \"chart\",\n FORM = \"form\",\n CARD = \"card\",\n MODAL = \"modal\",\n CUSTOM = \"custom\",\n}\n\n/**\n * UI配置接口\n */\nexport interface UIConfig {\n name: string; // 组件名称\n description: string; // 组件描述\n type: UIComponentType; // 组件类型\n props?: Record<string, any>; // 组件属性\n children?: string[]; // 子组件列表\n}\n\n/**\n * UI组件接口\n * 使用泛型以适应不同的UI框架(React, Vue等)\n */\nexport interface UIComponent<T = any> {\n render: (props?: any) => T;\n addEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n removeEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n\n/**\n * UI Lattice协议接口\n */\nexport interface UILatticeProtocol<T = any>\n extends BaseLatticeProtocol<UIConfig, UIComponent<T>> {\n // UI渲染方法\n render: (props?: any) => T;\n\n // 事件处理\n addEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n removeEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n","/**\n * QueueLatticeProtocol\n *\n * Queue Lattice protocol for task queue management\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Queue service type enumeration\n */\nexport enum QueueType {\n MEMORY = \"memory\",\n REDIS = \"redis\",\n}\n\n/**\n * Queue configuration interface\n */\nexport interface QueueConfig {\n name: string; // Queue name\n description: string; // Queue description\n type: QueueType; // Queue service type\n queueName?: string; // Specific queue name (e.g., \"tasks\")\n options?: Record<string, any>; // Additional options (e.g., Redis connection options)\n}\n\n/**\n * Queue operation result interface\n */\nexport interface QueueResult<T = any> {\n data: T | null;\n error: any | null;\n}\n\n/**\n * Queue client interface\n */\nexport interface QueueClient {\n push: (item: any) => Promise<QueueResult<number>>;\n pop: () => Promise<QueueResult<any>>;\n createQueue?: () => Promise<{ success: boolean; queue_name?: string; error?: any }>;\n}\n\n/**\n * Queue Lattice protocol interface\n */\nexport interface QueueLatticeProtocol\n extends BaseLatticeProtocol<QueueConfig, QueueClient> {\n // Queue operations\n push: (item: any) => Promise<QueueResult<number>>;\n pop: () => Promise<QueueResult<any>>;\n createQueue?: () => Promise<{ success: boolean; queue_name?: string; error?: any }>;\n}\n\n\n\n","/**\n * ScheduleLatticeProtocol\n *\n * Schedule Lattice protocol for delayed and recurring task execution management\n * Supports persistence and recovery after service restart\n * Supports both one-time delayed tasks and cron-style recurring tasks\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Schedule service type enumeration\n */\nexport enum ScheduleType {\n MEMORY = \"memory\",\n POSTGRES = \"postgres\",\n REDIS = \"redis\",\n}\n\n/**\n * Schedule execution type - one-time or recurring\n */\nexport enum ScheduleExecutionType {\n ONCE = \"once\", // Execute once at specified time\n CRON = \"cron\", // Recurring based on cron expression\n}\n\n/**\n * Task status enumeration\n */\nexport enum ScheduledTaskStatus {\n PENDING = \"pending\", // Waiting to be executed\n RUNNING = \"running\", // Currently executing\n COMPLETED = \"completed\", // Successfully completed (for ONCE type)\n FAILED = \"failed\", // Execution failed\n CANCELLED = \"cancelled\", // Manually cancelled\n PAUSED = \"paused\", // Paused (for CRON type)\n}\n\n/**\n * Schedule configuration interface\n */\nexport interface ScheduleConfig {\n name: string;\n description: string;\n type: ScheduleType;\n storage?: ScheduleStorage; // Optional storage for persistence\n options?: Record<string, any>;\n}\n\n/**\n * Scheduled task definition - fully serializable\n * Supports both one-time and cron-style recurring tasks\n */\nexport interface ScheduledTaskDefinition {\n taskId: string;\n taskType: string; // Maps to a registered handler\n payload: Record<string, any>; // JSON-serializable data passed to handler\n\n // Context fields for querying\n tenantId: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n\n // Execution configuration\n executionType: ScheduleExecutionType;\n\n // For ONCE type - execute at specific time or after delay\n executeAt?: number; // Timestamp when to execute\n delayMs?: number; // Original delay in milliseconds (for reference)\n\n // For CRON type - recurring schedule\n cronExpression?: string; // Cron format: \"0 9 * * *\" (min hour day month weekday)\n timezone?: string; // Timezone: \"Asia/Shanghai\", defaults to system timezone\n nextRunAt?: number; // Next calculated execution time\n lastRunAt?: number; // Last execution time\n\n // Execution tracking\n status: ScheduledTaskStatus;\n runCount: number; // How many times executed\n maxRuns?: number; // Max executions (null/undefined = infinite for cron, 1 for once)\n\n // Error handling\n retryCount: number; // Current retry count\n maxRetries: number; // Maximum retry attempts\n lastError?: string; // Last error message if failed\n\n // Timestamps\n createdAt: number;\n updatedAt: number;\n expiresAt?: number; // When to stop (for cron, optional)\n\n metadata?: Record<string, any>; // Additional metadata\n}\n\n/**\n * Task handler function type\n */\nexport type TaskHandler = (\n payload: Record<string, any>,\n taskInfo: ScheduledTaskDefinition\n) => void | Promise<void>;\n\n/**\n * Options for scheduling a one-time task\n */\nexport interface ScheduleOnceOptions {\n executeAt?: number; // Absolute timestamp to execute\n delayMs?: number; // OR relative delay from now\n maxRetries?: number; // Max retry attempts (default: 0)\n tenantId?: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n metadata?: Record<string, any>;\n}\n\n/**\n * Options for scheduling a cron task\n */\nexport interface ScheduleCronOptions {\n cronExpression: string; // Cron expression: \"0 9 * * *\"\n timezone?: string; // Timezone: \"Asia/Shanghai\"\n maxRuns?: number; // Max executions (undefined = infinite)\n expiresAt?: number; // Stop after this timestamp\n maxRetries?: number; // Max retry attempts per run (default: 0)\n tenantId?: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n metadata?: Record<string, any>;\n}\n\n/**\n * Schedule storage interface for persistence\n */\nexport interface ScheduleStorage {\n /**\n * Save a new task\n */\n save(task: ScheduledTaskDefinition): Promise<void>;\n\n /**\n * Get task by ID\n */\n get(taskId: string): Promise<ScheduledTaskDefinition | null>;\n\n /**\n * Update task\n */\n update(\n taskId: string,\n updates: Partial<ScheduledTaskDefinition>\n ): Promise<void>;\n\n /**\n * Delete task\n */\n delete(taskId: string): Promise<void>;\n\n /**\n * Get all pending/active tasks (for recovery)\n * Returns tasks with status: PENDING or PAUSED\n */\n getActiveTasks(): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by type\n */\n getTasksByType(taskType: string): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by status\n */\n getTasksByStatus(\n status: ScheduledTaskStatus\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by execution type\n */\n getTasksByExecutionType(\n executionType: ScheduleExecutionType\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by assistant ID\n */\n getTasksByAssistantId(\n assistantId: string\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by thread ID\n */\n getTasksByThreadId(threadId: string): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get all tasks (with optional filters)\n */\n getAllTasks(filters?: {\n tenantId?: string;\n status?: ScheduledTaskStatus;\n executionType?: ScheduleExecutionType;\n taskType?: string;\n assistantId?: string;\n threadId?: string;\n limit?: number;\n offset?: number;\n }): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Count tasks (with optional filters)\n */\n countTasks(filters?: {\n tenantId?: string;\n status?: ScheduledTaskStatus;\n executionType?: ScheduleExecutionType;\n taskType?: string;\n assistantId?: string;\n threadId?: string;\n }): Promise<number>;\n\n /**\n * Delete completed/cancelled tasks older than specified time\n * Useful for cleanup\n */\n deleteOldTasks(olderThanMs: number): Promise<number>;\n}\n\n/**\n * Schedule client interface\n */\nexport interface ScheduleClient {\n // ===== Handler Registration =====\n\n /**\n * Register a handler for a task type\n * Must be called before scheduling tasks of this type\n */\n registerHandler(taskType: string, handler: TaskHandler): void;\n\n /**\n * Unregister a handler\n */\n unregisterHandler(taskType: string): boolean;\n\n /**\n * Check if a handler is registered\n */\n hasHandler(taskType: string): boolean;\n\n /**\n * Get all registered handler types\n */\n getHandlerTypes(): string[];\n\n // ===== One-time Task Scheduling =====\n\n /**\n * Schedule a one-time task\n * @param taskId - Unique identifier for the task\n * @param taskType - Type of task (must have a registered handler)\n * @param payload - Data to pass to the handler (must be JSON-serializable)\n * @param options - Execution options (executeAt or delayMs required)\n */\n scheduleOnce(\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleOnceOptions\n ): Promise<boolean>;\n\n // ===== Cron Task Scheduling =====\n\n /**\n * Schedule a recurring cron task\n * @param taskId - Unique identifier for the task\n * @param taskType - Type of task (must have a registered handler)\n * @param payload - Data to pass to the handler (must be JSON-serializable)\n * @param options - Cron options (cronExpression required)\n */\n scheduleCron(\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleCronOptions\n ): Promise<boolean>;\n\n // ===== Task Management =====\n\n /**\n * Cancel a scheduled task\n */\n cancel(taskId: string): Promise<boolean>;\n\n /**\n * Pause a cron task (only for CRON type)\n */\n pause(taskId: string): Promise<boolean>;\n\n /**\n * Resume a paused cron task (only for CRON type)\n */\n resume(taskId: string): Promise<boolean>;\n\n /**\n * Check if a task exists\n */\n has(taskId: string): Promise<boolean>;\n\n /**\n * Get task information\n */\n getTask(taskId: string): Promise<ScheduledTaskDefinition | null>;\n\n /**\n * Get remaining time until next execution\n * Returns -1 if task not found or already executed\n */\n getRemainingTime(taskId: string): Promise<number>;\n\n /**\n * Get count of active tasks (pending + paused)\n */\n getActiveTaskCount(): Promise<number>;\n\n /**\n * Get all active task IDs\n */\n getActiveTaskIds(): Promise<string[]>;\n\n /**\n * Cancel all active tasks\n */\n cancelAll(): Promise<void>;\n\n // ===== Recovery =====\n\n /**\n * Restore active tasks from storage (call on service startup)\n * Re-schedules all pending tasks with their remaining time\n * Re-schedules all cron tasks for their next run\n * @returns Number of tasks restored\n */\n restore(): Promise<number>;\n\n // ===== Storage =====\n\n /**\n * Set the storage backend\n */\n setStorage(storage: ScheduleStorage): void;\n\n /**\n * Get current storage backend\n */\n getStorage(): ScheduleStorage | null;\n}\n\n/**\n * Schedule Lattice protocol interface\n */\nexport interface ScheduleLatticeProtocol\n extends BaseLatticeProtocol<ScheduleConfig, ScheduleClient> {\n // Handler registration\n registerHandler: (taskType: string, handler: TaskHandler) => void;\n unregisterHandler: (taskType: string) => boolean;\n hasHandler: (taskType: string) => boolean;\n getHandlerTypes: () => string[];\n\n // One-time task scheduling\n scheduleOnce: (\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleOnceOptions\n ) => Promise<boolean>;\n\n // Cron task scheduling\n scheduleCron: (\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleCronOptions\n ) => Promise<boolean>;\n\n // Task management\n cancel: (taskId: string) => Promise<boolean>;\n pause: (taskId: string) => Promise<boolean>;\n resume: (taskId: string) => Promise<boolean>;\n has: (taskId: string) => Promise<boolean>;\n getTask: (taskId: string) => Promise<ScheduledTaskDefinition | null>;\n getRemainingTime: (taskId: string) => Promise<number>;\n getActiveTaskCount: () => Promise<number>;\n getActiveTaskIds: () => Promise<string[]>;\n cancelAll: () => Promise<void>;\n\n // Recovery\n restore: () => Promise<number>;\n}\n","/**\n * LoggerLatticeProtocol\n *\n * Logger Lattice protocol for logging management\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Logger service type enumeration\n */\nexport enum LoggerType {\n PINO = \"pino\",\n CONSOLE = \"console\",\n CUSTOM = \"custom\",\n}\n\n/**\n * Logger context interface\n */\nexport interface LoggerContext {\n \"x-user-id\"?: string;\n \"x-tenant-id\"?: string;\n \"x-request-id\"?: string;\n \"x-task-id\"?: string;\n \"x-thread-id\"?: string;\n [key: string]: any;\n}\n\n/**\n * Pino logger file transport options\n */\nexport interface PinoFileOptions {\n file?: string; // Log file path (e.g., \"./logs/app.log\" or \"./logs/app\")\n frequency?: \"daily\" | \"hourly\" | \"minutely\" | string; // Log rotation frequency\n mkdir?: boolean; // Create directory if not exists\n size?: string; // Max file size (e.g., \"10M\", \"100K\")\n maxFiles?: number; // Maximum number of log files to keep\n}\n\n/**\n * Logger configuration interface\n */\nexport interface LoggerConfig {\n name: string; // Logger name\n description?: string; // Logger description\n type: LoggerType; // Logger service type\n serviceName?: string; // Service name (e.g., \"lattice-gateway\")\n loggerName?: string; // Logger instance name (e.g., \"fastify-server\")\n context?: LoggerContext; // Initial context\n // File logging options (for PINO type)\n file?: string | PinoFileOptions; // Log file path or detailed file options\n // Additional options (e.g., pino config, custom logger settings)\n options?: Record<string, any>;\n}\n\n/**\n * Logger client interface\n */\nexport interface LoggerClient {\n info: (msg: string, obj?: object) => void;\n error: (msg: string, obj?: object | Error) => void;\n warn: (msg: string, obj?: object) => void;\n debug: (msg: string, obj?: object) => void;\n updateContext?: (context: Partial<LoggerContext>) => void;\n child?: (options: Partial<LoggerConfig>) => LoggerClient;\n}\n\n/**\n * Logger Lattice protocol interface\n */\nexport interface LoggerLatticeProtocol\n extends BaseLatticeProtocol<LoggerConfig, LoggerClient> {\n // Logger operations\n info: (msg: string, obj?: object) => void;\n error: (msg: string, obj?: object | Error) => void;\n warn: (msg: string, obj?: object) => void;\n debug: (msg: string, obj?: object) => void;\n updateContext?: (context: Partial<LoggerContext>) => void;\n child?: (options: Partial<LoggerConfig>) => LoggerClient;\n}\n","/**\n * MessageProtocol\n *\n */\n\n\n\n/**\n * Base message interface\n */\nexport interface BaseMessage {\n id: string; // Unique identifier for the message\n role: string; // Role of the sender (user, assistant, system, tool, developer)\n content?: string; // Optional text content of the message\n name?: string; // Optional name of the sender\n}\n\n/**\n * User message interface\n */\nexport interface UserMessage extends BaseMessage {\n role: \"human\";\n content: string; // Text input from the user\n files?: Array<{ name: string; id: string }>; // Optional files attached to the message\n}\n\n/**\n * Tool call interface\n */\nexport interface ToolCall {\n id: string; // Unique identifier for this tool call\n name: string; // Name of the tool/function to call\n args: Record<string, any>; // Arguments as an object\n type: \"tool_call\"; // Type of tool call\n response?: string; // Optional response from the tool execution\n}\n\n/**\n * Assistant message interface\n */\nexport interface AssistantMessage extends BaseMessage {\n role: \"ai\";\n content?: string; // Text response from the assistant (optional if using tool calls)\n tool_calls?: ToolCall[]; // Optional tool calls made by the assistant\n}\n\nexport interface InterruptMessage extends BaseMessage {\n type: \"interrupt\";\n value: any;\n}\n\n/**\n * System message interface\n */\nexport interface SystemMessage extends BaseMessage {\n role: \"system\";\n content: string; // Instructions or context for the assistant\n}\n\n/**\n * Tool message interface\n */\nexport interface ToolMessage extends BaseMessage {\n role: \"tool\";\n content: string; // Result from the tool execution\n tool_call_id: string; // ID of the tool call this message responds to\n}\n\n/**\n * Developer message interface\n */\nexport interface DeveloperMessage extends BaseMessage {\n role: \"developer\";\n content: string; // Content for development or debugging\n}\n\n/**\n * Message chunk type constants\n */\nexport const MessageChunkTypes = {\n HUMAN: 'human',\n AI: 'ai',\n TOOL: 'tool',\n INTERRUPT: 'interrupt',\n MESSAGE_COMPLETED: 'message_completed',\n MESSAGE_FAILED: 'message_failed',\n THREAD_IDLE: 'thread_idle',\n} as const;\n\nexport type MessageChunkType = typeof MessageChunkTypes[keyof typeof MessageChunkTypes];\n\nexport interface MessageChunk {\n type: MessageChunkType;\n data: {\n id: string;\n content?: string;\n tool_call_chunks?: Array<{\n name?: string;\n args?: string;\n id?: string;\n index: number;\n }>;\n tool_calls?: Array<{\n name: string;\n args: Record<string, any>;\n id: string;\n type: string;\n response?: string;\n }>;\n additional_kwargs?: {\n tool_calls?: Array<{\n function?: { name?: string; arguments?: any };\n id?: string;\n }>;\n };\n tool_call_id?: string;\n };\n}\n\n/**\n * Message type union\n */\nexport type Message =\n | UserMessage\n | AssistantMessage\n | SystemMessage\n | ToolMessage\n | DeveloperMessage;\n","/**\n * McpLatticeProtocol\n *\n * Model Context Protocol (MCP) lattice protocol for integrating MCP servers\n * with the Lattice framework. Provides standardized interfaces for MCP\n * client connections, tool discovery, and remote execution.\n */\n\nimport { BaseLatticeProtocol, LatticeMessage } from \"./BaseLatticeProtocol\";\n\n/**\n * MCP transport type\n */\nexport type McpTransportType = \"stdio\" | \"streamable_http\" | \"sse\";\n\n/**\n * MCP server configuration\n */\nexport interface McpServerConfig {\n /** Server name */\n name: string;\n /** Server version */\n version: string;\n /** Transport type */\n transport: McpTransportType;\n /** Command for stdio transport (e.g., \"npx\", \"python\") */\n command?: string;\n /** Arguments for stdio transport */\n args?: string[];\n /** URL for HTTP/SSE transport */\n url?: string;\n /** Environment variables */\n env?: Record<string, string>;\n /** Connection timeout in milliseconds */\n timeout?: number;\n /** Retry attempts on connection failure */\n retryAttempts?: number;\n}\n\n/**\n * MCP tool definition\n */\nexport interface McpTool {\n /** Tool name */\n name: string;\n /** Tool description */\n description: string;\n /** Input schema */\n inputSchema: {\n type: \"object\";\n properties: Record<string, any>;\n required?: string[];\n };\n /** Tool metadata */\n metadata?: Record<string, any>;\n}\n\n/**\n * MCP tool call result\n */\nexport interface McpToolResult {\n /** Whether the call was successful */\n success: boolean;\n /** Result content */\n content: Array<{\n type: \"text\" | \"image\" | \"audio\" | \"resource\";\n data: any;\n mimeType?: string;\n }>;\n /** Error message if failed */\n error?: string;\n /** Execution metadata */\n metadata?: {\n duration: number;\n tokens?: number;\n model?: string;\n };\n}\n\n/**\n * MCP client interface\n */\nexport interface McpClient {\n /** Client name */\n name: string;\n /** Client version */\n version: string;\n /** Server configuration */\n serverConfig: McpServerConfig;\n \n /**\n * Connect to MCP server\n */\n connect(): Promise<void>;\n \n /**\n * Disconnect from MCP server\n */\n disconnect(): Promise<void>;\n \n /**\n * Check if connected\n */\n isConnected(): boolean;\n \n /**\n * List available tools\n */\n listTools(): Promise<McpTool[]>;\n \n /**\n * Call a tool\n */\n callTool(name: string, arguments_: Record<string, any>): Promise<McpToolResult>;\n \n /**\n * Subscribe to server notifications\n */\n subscribe(topic: string, handler: (data: any) => void): void;\n \n /**\n * Unsubscribe from server notifications\n */\n unsubscribe(topic: string): void;\n \n /**\n * Get client statistics\n */\n getStats(): McpStats;\n \n /**\n * Get connection status\n */\n getStatus(): McpConnectionStatus;\n}\n\n/**\n * MCP client options\n */\nexport interface McpClientOptions {\n /** Client name */\n name: string;\n /** Client version */\n version: string;\n /** Server configuration */\n serverConfig: McpServerConfig;\n /** Auto-connect on initialization */\n autoConnect?: boolean;\n /** Error handler */\n onError?: (error: Error) => void;\n /** Connection status handler */\n onStatusChange?: (status: McpConnectionStatus) => void;\n}\n\n/**\n * MCP Lattice protocol interface\n */\nexport interface McpLatticeProtocol\n extends BaseLatticeProtocol<McpServerConfig, McpClient> {\n /**\n * Server configuration\n */\n config: McpServerConfig;\n \n /**\n * MCP client instance\n */\n client: McpClient;\n \n /**\n * Connect to MCP server\n */\n connect(): Promise<void>;\n \n /**\n * Disconnect from MCP server\n */\n disconnect(): Promise<void>;\n \n /**\n * Get available tools\n */\n getTools(): Promise<McpTool[]>;\n \n /**\n * Execute a tool\n */\n executeTool(\n name: string,\n arguments_: Record<string, any>\n ): Promise<McpToolResult>;\n \n /**\n * Execute with automatic retries\n */\n executeToolWithRetry(\n name: string,\n arguments_: Record<string, any>,\n maxRetries?: number\n ): Promise<McpToolResult>;\n \n /**\n * Get protocol version\n */\n getProtocolVersion(): string;\n \n /**\n * Health check\n */\n healthCheck(): Promise<boolean>;\n}\n\n/**\n * MCP message types\n */\nexport enum McpMessageType {\n CONNECT = \"mcp:connect\",\n DISCONNECT = \"mcp:disconnect\",\n LIST_TOOLS = \"mcp:list_tools\",\n CALL_TOOL = \"mcp:call_tool\",\n TOOL_RESULT = \"mcp:tool_result\",\n NOTIFICATION = \"mcp:notification\",\n ERROR = \"mcp:error\",\n HEALTH_CHECK = \"mcp:health_check\",\n}\n\n/**\n * MCP Lattice message\n */\nexport interface McpLatticeMessage extends LatticeMessage {\n type: McpMessageType;\n payload: {\n toolName?: string;\n arguments?: Record<string, any>;\n result?: McpToolResult;\n tools?: McpTool[];\n error?: string;\n };\n}\n\n/**\n * MCP connection status\n */\nexport type McpConnectionStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"reconnecting\"\n | \"error\";\n\n/**\n * MCP statistics\n */\nexport interface McpStats {\n totalCalls: number;\n successfulCalls: number;\n failedCalls: number;\n averageLatency: number;\n lastCallTimestamp: number;\n}\n","/**\n * A2AProtocol - Google Agent-to-Agent Protocol type definitions\n *\n * Based on the A2A open protocol spec for AI agent interoperability.\n * @see https://github.com/google/A2A\n */\n\n// ─── Agent Card ───────────────────────────────────────────────────────────\n\nexport interface A2ASkill {\n id: string;\n name: string;\n description: string;\n tags: string[];\n examples: string[];\n}\n\nexport interface A2ACapabilities {\n streaming: boolean;\n pushNotifications: boolean;\n stateTransitionHistory: boolean;\n}\n\nexport interface A2AProvider {\n organization: string;\n url?: string;\n}\n\nexport interface AgentCard {\n name: string;\n description: string;\n url: string;\n provider: A2AProvider;\n version: string;\n documentationUrl?: string;\n capabilities: A2ACapabilities;\n defaultInputModes: string[];\n defaultOutputModes: string[];\n skills: A2ASkill[];\n}\n\n// ─── Artifact / Part ──────────────────────────────────────────────────────\n\nexport interface A2ATextPart {\n type: \"text\";\n text: string;\n}\n\nexport interface A2AFilePart {\n type: \"file\";\n file: {\n name: string;\n mimeType: string;\n bytes?: string;\n uri?: string;\n };\n}\n\nexport interface A2ADataPart {\n type: \"data\";\n data: Record<string, unknown>;\n}\n\nexport type A2APart = A2ATextPart | A2AFilePart | A2ADataPart;\n\n// ─── Message ──────────────────────────────────────────────────────────────\n\nexport interface A2AMessage {\n role: \"user\" | \"agent\";\n parts: A2APart[];\n messageId?: string;\n contextId?: string;\n referenceTaskIds?: string[];\n metadata?: Record<string, unknown>;\n}\n\n// ─── Task ─────────────────────────────────────────────────────────────────\n\nexport type A2ATaskState =\n | \"working\"\n | \"input-required\"\n | \"completed\"\n | \"failed\"\n | \"canceled\"\n | \"rejected\";\n\nexport interface A2ATaskStatus {\n state: A2ATaskState;\n message?: A2AMessage;\n timestamp: string;\n}\n\nexport interface A2AArtifact {\n name?: string;\n description?: string;\n parts: A2APart[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2ATask {\n id: string;\n sessionId?: string;\n contextId?: string;\n status: A2ATaskStatus;\n artifacts: A2AArtifact[];\n history?: A2AMessage[];\n metadata?: Record<string, unknown>;\n}\n\n// ─── Request / Response ───────────────────────────────────────────────────\n\nexport interface A2ATaskSendRequest {\n id?: string;\n sessionId?: string;\n message: A2AMessage;\n pushNotification?: A2APushNotification;\n historyLength?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2APushNotification {\n url: string;\n token?: string;\n}\n\nexport interface A2ATaskUpdatePayload {\n id: string;\n sessionId?: string;\n contextId?: string;\n status: A2ATaskStatus;\n final?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2ATaskArtifactUpdatePayload {\n id: string;\n sessionId?: string;\n contextId?: string;\n artifact: A2AArtifact;\n final?: boolean;\n metadata?: Record<string, unknown>;\n}\n\n// ─── SSE Events ───────────────────────────────────────────────────────────\n\nexport type A2ASSEEvent =\n | { event: \"task\"; data: A2ATaskUpdatePayload }\n | { event: \"status-update\"; data: A2ATaskUpdatePayload }\n | { event: \"artifact-update\"; data: A2ATaskArtifactUpdatePayload }\n | { event: \"error\"; data: { code: string; message: string } };\n\n// ─── Config ───────────────────────────────────────────────────────────────\n\nexport interface A2AConfig {\n agentName: string;\n agentDescription: string;\n agentUrl: string;\n organization: string;\n version?: string;\n capabilities?: Partial<A2ACapabilities>;\n defaultInputModes?: string[];\n defaultOutputModes?: string[];\n skills?: A2ASkill[];\n apiKeyMap: Map<string, A2AApiKeyEntry>;\n}\n\nexport interface A2AApiKeyEntry {\n key: string;\n tenantId?: string;\n projectId?: string;\n workspaceId?: string;\n}\n\nexport const A2A_DEFAULT_CAPABILITIES: A2ACapabilities = {\n streaming: true,\n pushNotifications: false,\n stateTransitionHistory: false,\n};\n\nexport const A2A_DEFAULT_INPUT_MODES = [\"text\", \"text/plain\"];\nexport const A2A_DEFAULT_OUTPUT_MODES = [\"text\", \"text/plain\", \"text/markdown\"];\n\nexport interface A2AAuthContext {\n authenticated: boolean;\n apiKey?: string;\n tenantId?: string;\n projectId?: string;\n workspaceId?: string;\n source?: \"bearer\" | \"x-api-key\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACaO,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,gBAAa;AAEb,EAAAA,WAAA,gBAAa;AAEb,EAAAA,WAAA,cAAW;AARD,SAAAA;AAAA,GAAA;AAkOL,SAAS,kBACd,QAC2B;AAC3B,SAAO,OAAO,SAAS;AACzB;AA4FO,SAAS,uBACd,QACgC;AAChC,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,sBACd,QAC+B;AAC/B,SAAO,OAAO,SAAS;AACzB;AA4BO,SAAS,SAAS,QAAqD;AAC5E,SAAO;AACT;AAKO,SAAS,kBACd,QAC2B;AAC3B,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,wBACd,QACiC;AACjC,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,mBAAmB,QAA+B;AAChE,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO,OAAO,SAAS,CAAC;AAAA,EAC1B;AACA,SAAO,CAAC;AACV;AAKO,SAAS,uBAAuB,QAA+B;AACpE,MAAI,kBAAkB,MAAM,KAAK,wBAAwB,MAAM,GAAG;AAChE,WAAO,OAAO,aAAa,CAAC;AAAA,EAC9B;AACA,SAAO,CAAC;AACV;;;ACrZO,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,aAAU;AALA,SAAAA;AAAA,GAAA;;;ACAL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AAVC,SAAAA;AAAA,GAAA;;;ACAL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;;;ACEL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,WAAQ;AAHE,SAAAA;AAAA,GAAA;AASL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,UAAO;AACP,EAAAA,uBAAA,UAAO;AAFG,SAAAA;AAAA,GAAA;AAQL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,YAAS;AACT,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,YAAS;AANC,SAAAA;AAAA,GAAA;;;ACnBL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;;;ACoEL,IAAM,oBAAoB;AAAA,EAC/B,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,aAAa;AACf;;;ACgIO,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,gBAAa;AACb,EAAAA,gBAAA,gBAAa;AACb,EAAAA,gBAAA,eAAY;AACZ,EAAAA,gBAAA,iBAAc;AACd,EAAAA,gBAAA,kBAAe;AACf,EAAAA,gBAAA,WAAQ;AACR,EAAAA,gBAAA,kBAAe;AARL,SAAAA;AAAA,GAAA;;;AC1CL,IAAM,2BAA4C;AAAA,EACvD,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,wBAAwB;AAC1B;AAEO,IAAM,0BAA0B,CAAC,QAAQ,YAAY;AACrD,IAAM,2BAA2B,CAAC,QAAQ,cAAc,eAAe;","names":["AgentType","MemoryType","UIComponentType","QueueType","ScheduleType","ScheduleExecutionType","ScheduledTaskStatus","LoggerType","McpMessageType"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AgentLatticeProtocol.ts","../src/MemoryLatticeProtocol.ts","../src/UILatticeProtocol.ts","../src/QueueLatticeProtocol.ts","../src/ScheduleLatticeProtocol.ts","../src/LoggerLatticeProtocol.ts","../src/MessageProtocol.ts","../src/McpLatticeProtocol.ts","../src/A2AProtocol.ts"],"sourcesContent":["/**\n * AgentLatticeProtocol\n *\n * 智能体Lattice的协议,定义了智能体的行为和组合方式\n */\n\nimport { CompiledStateGraph } from \"@langchain/langgraph\";\nimport { ZodObject } from \"zod\";\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * 智能体类型枚举\n */\nexport enum AgentType {\n REACT = \"react\",\n DEEP_AGENT = \"deep_agent\",\n TEAM = \"team\",\n PROCESSING = \"processing\",\n /** Remote A2A agent — delegates to an external A2A-compatible server */\n A2A_REMOTE = \"a2a_remote\",\n /** Workflow agent — compiled from YAML DSL into a LangGraph StateGraph */\n WORKFLOW = \"workflow\",\n}\n\n/**\n * Runtime configuration that will be injected into LangGraphRunnableConfig.configurable\n * Tools can access these values via config.configurable.runConfig\n */\nexport interface AgentRunConfig {\n /** Database key for SQL tools (registered via sqlDatabaseManager) */\n databaseKey?: string;\n /** Any additional runtime configuration */\n [key: string]: any;\n}\n\n/**\n * Base agent configuration shared by all agent types\n */\ninterface BaseAgentConfig {\n key: string; // Unique key\n name: string; // Name\n description: string; // Description\n prompt: string; // Prompt\n /**\n * Key of the parent agent to inherit configuration from.\n * When set, unspecified fields are inherited from the parent agent's config.\n * Child's explicitly set fields override the parent's.\n */\n extendsAgent?: string;\n schema?: ZodObject<any, any, any, any, any>; // Input validation schema\n modelKey?: string; // Model key to use\n /**\n * Runtime configuration to inject into tool execution context\n * Will be available in tools via config.configurable.runConfig\n */\n runConfig?: AgentRunConfig;\n skillCategories?: string[];\n middleware?: AgentMiddlewareConfig[];\n /**\n * Structured output response format for the agent.\n * Supports Zod schema (z.object({...})), JSON Schema object ({ type: \"object\", properties: {...} }),\n * providerStrategy(), toolStrategy(), and other formats accepted by the underlying model.\n *\n * @example\n * ```ts\n * // Zod schema\n * responseFormat: z.object({ name: z.string(), age: z.number() })\n *\n * // JSON Schema\n * responseFormat: { type: \"object\", properties: { name: { type: \"string\" } }, required: [\"name\"] }\n * ```\n */\n responseFormat?: any;\n}\n\nexport type AvailableModule = \"filesystem\" | \"code_eval\" | \"browser\";\n\nexport interface SandboxMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n modules: AvailableModule[];\n}\n\nexport interface CodeEvalMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n timeout: number;\n memoryLimit: number;\n}\n\nexport interface BrowserMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n headless: boolean;\n}\n\nexport interface SqlMiddlewareConfig {\n databaseKeys?: string[];\n}\n\nexport interface MetricsMiddlewareConfig {\n /** List of configured metrics server keys */\n serverKeys: string[];\n /** Optional descriptions for each server */\n serverDescriptions?: Record<string, string>;\n}\n\nexport interface SchedulerMiddlewareConfig {\n defaultMaxRetries?: number;\n}\n\nexport interface CollectionMiddlewareConfig {\n /** List of configured collection keys */\n collectionKeys: string[];\n /**\n * When true, all collections for the tenant are available.\n * When false or undefined, only collections in collectionKeys are used.\n */\n connectAll?: boolean;\n}\n\nexport type MiddlewareType = \"filesystem\" | \"code_eval\" | \"browser\" | \"sql\" | \"skill\" | \"http\" | \"custom\" | \"metrics\" | \"ask_user_to_clarify\" | \"widget\" | \"claw\" | \"date\" | \"scheduler\" | \"topology\" | \"task\" | \"collection\" | string;\n\nexport interface AgentMiddlewareConfig {\n id: string;\n type: MiddlewareType;\n name: string;\n description: string;\n enabled: boolean;\n /** 可选:限制该中间件暴露的工具列表。不配置则默认暴露所有工具 */\n allowedTools?: string[];\n config: SandboxMiddlewareConfig | CodeEvalMiddlewareConfig | BrowserMiddlewareConfig | SqlMiddlewareConfig | MetricsMiddlewareConfig | ClawMiddlewareConfig | CollectionMiddlewareConfig | SchedulerMiddlewareConfig | Record<string, any>;\n}\n\n/**\n * Bootstrap file configuration\n * Defines default content for project bootstrap files\n */\nexport interface BootstrapFilesConfig {\n /** Default content for AGENTS.md - operating instructions */\n agents?: string;\n /** Default content for SOUL.md - personality and tone */\n soul?: string;\n /** Default content for IDENTITY.md - agent identity */\n identity?: string;\n /** Default content for USER.md - user preferences */\n user?: string;\n /** Default content for TOOLS.md - tool documentation */\n tools?: string;\n /** Default content for BOOTSTRAP.md - first-run tasks */\n bootstrap?: string;\n}\n\n/**\n * Claw Middleware 配置\n * 用于配置 bootstrap 文件管理行为\n */\nexport interface ClawMiddlewareConfig {\n /** 是否启用 bootstrap 文件注入(默认:true) */\n injectBootstrapFiles?: boolean;\n /** 自定义 bootstrap 文件内容 */\n bootstrapFiles?: BootstrapFilesConfig;\n}\n\n\n/**\n * REACT agent configuration\n */\nexport interface ReactAgentConfig extends BaseAgentConfig {\n type: AgentType.REACT;\n tools?: string[]; // Tool list\n}\n\n/**\n * DEEP_AGENT configuration - only this type supports subAgents\n */\nexport interface DeepAgentConfig extends BaseAgentConfig {\n type: AgentType.DEEP_AGENT;\n tools?: string[]; // Tool list\n subAgents?: string[]; // Sub-agent list (unique to DEEP_AGENT)\n internalSubAgents?: AgentConfig[]; // Internal sub-agent list (unique to DEEP_AGENT)\n}\n\n/**\n * PROCESSING agent configuration — workflow orchestration with topology enforcement.\n * Replaces todoListMiddleware with topologyMiddleware.\n */\nexport interface ProcessingAgentConfig extends BaseAgentConfig {\n type: AgentType.PROCESSING;\n tools?: string[];\n subAgents?: string[];\n internalSubAgents?: AgentConfig[];\n}\n\n/**\n * Team teammate configuration -- describes an available teammate.\n */\nexport interface TeamTeammateConfig {\n /** Unique name for this teammate (used as agent ID) */\n name: string;\n /** Role category (e.g. \"research\", \"writing\", \"review\") */\n role: string;\n /** Human-readable description of what this teammate does */\n description: string;\n /** Tool keys this teammate has access to */\n tools?: string[];\n /** Custom system prompt for this teammate */\n prompt?: string;\n /** Model key override for this teammate */\n modelKey?: string;\n}\n\n/**\n * TEAM agent configuration -- a team lead that dynamically creates teammates.\n * Teammates are created on-the-fly from create_team tool input (name, role, description).\n */\nexport interface TeamAgentConfig extends BaseAgentConfig {\n type: AgentType.TEAM;\n /** Tool keys available to the team lead */\n tools?: string[];\n /** Maximum number of teammates running concurrently */\n maxConcurrency?: number;\n /**\n * Schedule lattice key for polling task list / mailbox.\n * When set, teammates use ScheduleLattice for periodic polling instead of event-driven wait.\n */\n scheduleLatticeKey?: string;\n /** Poll interval in ms when using schedule lattice (default: 5000) */\n pollIntervalMs?: number;\n}\n\n/**\n * Type guard to check if config is TeamAgentConfig\n */\nexport function isTeamAgentConfig(\n config: AgentConfig\n): config is TeamAgentConfig {\n return config.type === AgentType.TEAM;\n}\n\n// ─── A2A_REMOTE Agent ──────────────────────────────────────────────────────\n\nexport interface LocalRuntimeConfig {\n label?: string;\n agentCardUrl: string;\n healthUrl?: string;\n command: {\n executable: string;\n args: string[];\n cwd?: string;\n env?: Record<string, string>;\n };\n}\n\n/**\n * A2A_REMOTE agent configuration — wraps a remote A2A-compatible agent endpoint.\n *\n * This agent type wraps a remote A2A endpoint so orchestrators can treat\n * external agents the same as local LangGraph agents.\n */\nexport interface A2ARemoteAgentConfig extends BaseAgentConfig {\n type: AgentType.A2A_REMOTE;\n /**\n * URL of the remote agent's agent card (e.g. http://host:3000/.well-known/agent-card.json).\n * The builder fetches this card to discover the JSON-RPC endpoint.\n */\n agentCardUrl: string;\n /**\n * Optional API key sent as a Bearer token.\n */\n apiKey?: string;\n /**\n * HTTP timeout in milliseconds (default: 300_000 = 5 min).\n */\n timeout?: number;\n projectId?: string;\n /**\n * Optional tool keys (not used by the builder, but included for type compatibility).\n */\n tools?: string[];\n /**\n * Optional local runtime snapshot for Local Managed A2A assistants.\n * When present, the gateway manages a local process for this assistant.\n * Copied from a template or custom form at creation time.\n */\n localRuntime?: LocalRuntimeConfig;\n}\n\nexport type LocalA2AProviderId = string;\n\nexport type LocalA2AProviderStatus =\n | \"missing\"\n | \"disabled\"\n | \"starting\"\n | \"running\"\n | \"stopped\"\n | \"failed\";\n\nexport interface LocalA2AProviderState {\n runtimeId: string;\n label: string;\n status: LocalA2AProviderStatus;\n enabled: boolean;\n assistantId?: string;\n agentCardUrl?: string;\n healthUrl?: string;\n pid?: number;\n message?: string;\n lastStartedAt?: string;\n lastStoppedAt?: string;\n}\n\n/**\n * WORKFLOW agent configuration — compiled from YAML workflow DSL into a LangGraph StateGraph.\n *\n * The workflow field contains the full DSL definition (nodes, edges, state).\n * The WorkflowAgentGraphBuilder compiles this into a multi-node LangGraph\n * where each node invokes a registered sub-agent by ref.\n */\nexport interface WorkflowAgentConfig extends BaseAgentConfig {\n type: AgentType.WORKFLOW;\n /** The YAML workflow DSL definition string (needs+if format) */\n workflowYaml: string;\n /** Optional tool keys */\n tools?: string[];\n}\n\n/**\n * Type guard to check if config is A2ARemoteAgentConfig\n */\nexport function isA2ARemoteAgentConfig(\n config: AgentConfig\n): config is A2ARemoteAgentConfig {\n return config.type === AgentType.A2A_REMOTE;\n}\n\n/**\n * Type guard to check if config is WorkflowAgentConfig\n */\nexport function isWorkflowAgentConfig(\n config: AgentConfig\n): config is WorkflowAgentConfig {\n return config.type === AgentType.WORKFLOW;\n}\n\n/**\n * Agent configuration union type\n * Different agent types have different configuration options\n */\nexport type AgentConfig =\n | ReactAgentConfig\n | DeepAgentConfig\n | TeamAgentConfig\n | ProcessingAgentConfig\n | A2ARemoteAgentConfig\n | WorkflowAgentConfig\n\n/**\n * Agent configuration with tools property\n */\nexport type AgentConfigWithTools =\n | ReactAgentConfig\n | DeepAgentConfig\n | TeamAgentConfig\n | ProcessingAgentConfig\n | A2ARemoteAgentConfig\n | WorkflowAgentConfig\n\n/**\n * Type guard to check if config has tools property\n */\nexport function hasTools(config: AgentConfig): config is AgentConfigWithTools {\n return true;\n}\n\n/**\n * Type guard to check if config is DeepAgentConfig (has subAgents)\n */\nexport function isDeepAgentConfig(\n config: AgentConfig\n): config is DeepAgentConfig {\n return config.type === AgentType.DEEP_AGENT;\n}\n\n/**\n * Type guard to check if config is ProcessingAgentConfig (has subAgents + topology)\n */\nexport function isProcessingAgentConfig(\n config: AgentConfig\n): config is ProcessingAgentConfig {\n return config.type === AgentType.PROCESSING;\n}\n\n/**\n * Get tools from config safely\n */\nexport function getToolsFromConfig(config: AgentConfig): string[] {\n if (hasTools(config)) {\n return config.tools || [];\n }\n return [];\n}\n\n/**\n * Get subAgents from config safely (DeepAgentConfig and ProcessingAgentConfig have subAgents)\n */\nexport function getSubAgentsFromConfig(config: AgentConfig): string[] {\n if (isDeepAgentConfig(config) || isProcessingAgentConfig(config)) {\n return config.subAgents || [];\n }\n return [];\n}\n\n/**\n * 智能体客户端类型\n */\nexport type AgentClient = CompiledStateGraph<any, any, any, any, any>;\n\n/**\n * Graph构建选项\n */\nexport interface GraphBuildOptions {\n overrideTools?: string[];\n overrideModel?: string;\n metadata?: Record<string, any>;\n}\n\n/**\n * 智能体Lattice协议接口\n */\nexport interface AgentLatticeProtocol\n extends BaseLatticeProtocol<AgentConfig, AgentClient> {\n // 智能体执行函数\n invoke: (input: any, options?: any) => Promise<any>;\n\n // 构建智能体图\n buildGraph: (options?: GraphBuildOptions) => Promise<AgentClient>;\n}\n","/**\n * MemoryLatticeProtocol\n *\n * 记忆Lattice的协议,用于管理智能体的上下文和记忆\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * 记忆类型枚举\n */\nexport enum MemoryType {\n SHORT_TERM = \"short_term\",\n LONG_TERM = \"long_term\",\n EPISODIC = \"episodic\",\n SEMANTIC = \"semantic\",\n WORKING = \"working\",\n}\n\n/**\n * 记忆配置接口\n */\nexport interface MemoryConfig {\n name: string; // 名称\n description: string; // 描述\n type: MemoryType; // 记忆类型\n ttl?: number; // 生存时间\n capacity?: number; // 容量限制\n}\n\n/**\n * 记忆客户端接口\n */\nexport interface MemoryClient {\n add: (key: string, value: any) => Promise<void>;\n get: (key: string) => Promise<any>;\n update: (key: string, value: any) => Promise<void>;\n delete: (key: string) => Promise<void>;\n search: (query: string, options?: any) => Promise<any[]>;\n clear: () => Promise<void>;\n}\n\n/**\n * 记忆Lattice协议接口\n */\nexport interface MemoryLatticeProtocol\n extends BaseLatticeProtocol<MemoryConfig, MemoryClient> {\n // 记忆操作方法\n add: (key: string, value: any) => Promise<void>;\n get: (key: string) => Promise<any>;\n update: (key: string, value: any) => Promise<void>;\n delete: (key: string) => Promise<void>;\n search: (query: string, options?: any) => Promise<any[]>;\n clear: () => Promise<void>;\n}\n","/**\n * UILatticeProtocol\n *\n * UI Lattice的协议,用于定义用户界面组件\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * UI组件类型枚举\n */\nexport enum UIComponentType {\n CONTAINER = \"container\",\n INPUT = \"input\",\n BUTTON = \"button\",\n LIST = \"list\",\n TABLE = \"table\",\n CHART = \"chart\",\n FORM = \"form\",\n CARD = \"card\",\n MODAL = \"modal\",\n CUSTOM = \"custom\",\n}\n\n/**\n * UI配置接口\n */\nexport interface UIConfig {\n name: string; // 组件名称\n description: string; // 组件描述\n type: UIComponentType; // 组件类型\n props?: Record<string, any>; // 组件属性\n children?: string[]; // 子组件列表\n}\n\n/**\n * UI组件接口\n * 使用泛型以适应不同的UI框架(React, Vue等)\n */\nexport interface UIComponent<T = any> {\n render: (props?: any) => T;\n addEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n removeEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n\n/**\n * UI Lattice协议接口\n */\nexport interface UILatticeProtocol<T = any>\n extends BaseLatticeProtocol<UIConfig, UIComponent<T>> {\n // UI渲染方法\n render: (props?: any) => T;\n\n // 事件处理\n addEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n removeEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n","/**\n * QueueLatticeProtocol\n *\n * Queue Lattice protocol for task queue management\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Queue service type enumeration\n */\nexport enum QueueType {\n MEMORY = \"memory\",\n REDIS = \"redis\",\n}\n\n/**\n * Queue configuration interface\n */\nexport interface QueueConfig {\n name: string; // Queue name\n description: string; // Queue description\n type: QueueType; // Queue service type\n queueName?: string; // Specific queue name (e.g., \"tasks\")\n options?: Record<string, any>; // Additional options (e.g., Redis connection options)\n}\n\n/**\n * Queue operation result interface\n */\nexport interface QueueResult<T = any> {\n data: T | null;\n error: any | null;\n}\n\n/**\n * Queue client interface\n */\nexport interface QueueClient {\n push: (item: any) => Promise<QueueResult<number>>;\n pop: () => Promise<QueueResult<any>>;\n createQueue?: () => Promise<{ success: boolean; queue_name?: string; error?: any }>;\n}\n\n/**\n * Queue Lattice protocol interface\n */\nexport interface QueueLatticeProtocol\n extends BaseLatticeProtocol<QueueConfig, QueueClient> {\n // Queue operations\n push: (item: any) => Promise<QueueResult<number>>;\n pop: () => Promise<QueueResult<any>>;\n createQueue?: () => Promise<{ success: boolean; queue_name?: string; error?: any }>;\n}\n\n\n\n","/**\n * ScheduleLatticeProtocol\n *\n * Schedule Lattice protocol for delayed and recurring task execution management\n * Supports persistence and recovery after service restart\n * Supports both one-time delayed tasks and cron-style recurring tasks\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Schedule service type enumeration\n */\nexport enum ScheduleType {\n MEMORY = \"memory\",\n POSTGRES = \"postgres\",\n REDIS = \"redis\",\n}\n\n/**\n * Schedule execution type - one-time or recurring\n */\nexport enum ScheduleExecutionType {\n ONCE = \"once\", // Execute once at specified time\n CRON = \"cron\", // Recurring based on cron expression\n}\n\n/**\n * Task status enumeration\n */\nexport enum ScheduledTaskStatus {\n PENDING = \"pending\", // Waiting to be executed\n RUNNING = \"running\", // Currently executing\n COMPLETED = \"completed\", // Successfully completed (for ONCE type)\n FAILED = \"failed\", // Execution failed\n CANCELLED = \"cancelled\", // Manually cancelled\n PAUSED = \"paused\", // Paused (for CRON type)\n}\n\n/**\n * Schedule configuration interface\n */\nexport interface ScheduleConfig {\n name: string;\n description: string;\n type: ScheduleType;\n storage?: ScheduleStorage; // Optional storage for persistence\n options?: Record<string, any>;\n}\n\n/**\n * Scheduled task definition - fully serializable\n * Supports both one-time and cron-style recurring tasks\n */\nexport interface ScheduledTaskDefinition {\n taskId: string;\n taskType: string; // Maps to a registered handler\n payload: Record<string, any>; // JSON-serializable data passed to handler\n\n // Context fields for querying\n tenantId: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n\n // Execution configuration\n executionType: ScheduleExecutionType;\n\n // For ONCE type - execute at specific time or after delay\n executeAt?: number; // Timestamp when to execute\n delayMs?: number; // Original delay in milliseconds (for reference)\n\n // For CRON type - recurring schedule\n cronExpression?: string; // Cron format: \"0 9 * * *\" (min hour day month weekday)\n timezone?: string; // Timezone: \"Asia/Shanghai\", defaults to system timezone\n nextRunAt?: number; // Next calculated execution time\n lastRunAt?: number; // Last execution time\n\n // Execution tracking\n status: ScheduledTaskStatus;\n runCount: number; // How many times executed\n maxRuns?: number; // Max executions (null/undefined = infinite for cron, 1 for once)\n\n // Error handling\n retryCount: number; // Current retry count\n maxRetries: number; // Maximum retry attempts\n lastError?: string; // Last error message if failed\n\n // Timestamps\n createdAt: number;\n updatedAt: number;\n expiresAt?: number; // When to stop (for cron, optional)\n\n metadata?: Record<string, any>; // Additional metadata\n}\n\n/**\n * Task handler function type\n */\nexport type TaskHandler = (\n payload: Record<string, any>,\n taskInfo: ScheduledTaskDefinition\n) => void | Promise<void>;\n\n/**\n * Options for scheduling a one-time task\n */\nexport interface ScheduleOnceOptions {\n executeAt?: number; // Absolute timestamp to execute\n delayMs?: number; // OR relative delay from now\n maxRetries?: number; // Max retry attempts (default: 0)\n tenantId?: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n metadata?: Record<string, any>;\n}\n\n/**\n * Options for scheduling a cron task\n */\nexport interface ScheduleCronOptions {\n cronExpression: string; // Cron expression: \"0 9 * * *\"\n timezone?: string; // Timezone: \"Asia/Shanghai\"\n maxRuns?: number; // Max executions (undefined = infinite)\n expiresAt?: number; // Stop after this timestamp\n maxRetries?: number; // Max retry attempts per run (default: 0)\n tenantId?: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n metadata?: Record<string, any>;\n}\n\n/**\n * Schedule storage interface for persistence\n */\nexport interface ScheduleStorage {\n /**\n * Save a new task\n */\n save(task: ScheduledTaskDefinition): Promise<void>;\n\n /**\n * Get task by ID\n */\n get(taskId: string): Promise<ScheduledTaskDefinition | null>;\n\n /**\n * Update task\n */\n update(\n taskId: string,\n updates: Partial<ScheduledTaskDefinition>\n ): Promise<void>;\n\n /**\n * Delete task\n */\n delete(taskId: string): Promise<void>;\n\n /**\n * Get all pending/active tasks (for recovery)\n * Returns tasks with status: PENDING or PAUSED\n */\n getActiveTasks(): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by type\n */\n getTasksByType(taskType: string): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by status\n */\n getTasksByStatus(\n status: ScheduledTaskStatus\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by execution type\n */\n getTasksByExecutionType(\n executionType: ScheduleExecutionType\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by assistant ID\n */\n getTasksByAssistantId(\n assistantId: string\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by thread ID\n */\n getTasksByThreadId(threadId: string): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get all tasks (with optional filters)\n */\n getAllTasks(filters?: {\n tenantId?: string;\n status?: ScheduledTaskStatus;\n executionType?: ScheduleExecutionType;\n taskType?: string;\n assistantId?: string;\n threadId?: string;\n limit?: number;\n offset?: number;\n }): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Count tasks (with optional filters)\n */\n countTasks(filters?: {\n tenantId?: string;\n status?: ScheduledTaskStatus;\n executionType?: ScheduleExecutionType;\n taskType?: string;\n assistantId?: string;\n threadId?: string;\n }): Promise<number>;\n\n /**\n * Delete completed/cancelled tasks older than specified time\n * Useful for cleanup\n */\n deleteOldTasks(olderThanMs: number): Promise<number>;\n}\n\n/**\n * Schedule client interface\n */\nexport interface ScheduleClient {\n // ===== Handler Registration =====\n\n /**\n * Register a handler for a task type\n * Must be called before scheduling tasks of this type\n */\n registerHandler(taskType: string, handler: TaskHandler): void;\n\n /**\n * Unregister a handler\n */\n unregisterHandler(taskType: string): boolean;\n\n /**\n * Check if a handler is registered\n */\n hasHandler(taskType: string): boolean;\n\n /**\n * Get all registered handler types\n */\n getHandlerTypes(): string[];\n\n // ===== One-time Task Scheduling =====\n\n /**\n * Schedule a one-time task\n * @param taskId - Unique identifier for the task\n * @param taskType - Type of task (must have a registered handler)\n * @param payload - Data to pass to the handler (must be JSON-serializable)\n * @param options - Execution options (executeAt or delayMs required)\n */\n scheduleOnce(\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleOnceOptions\n ): Promise<boolean>;\n\n // ===== Cron Task Scheduling =====\n\n /**\n * Schedule a recurring cron task\n * @param taskId - Unique identifier for the task\n * @param taskType - Type of task (must have a registered handler)\n * @param payload - Data to pass to the handler (must be JSON-serializable)\n * @param options - Cron options (cronExpression required)\n */\n scheduleCron(\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleCronOptions\n ): Promise<boolean>;\n\n // ===== Task Management =====\n\n /**\n * Cancel a scheduled task\n */\n cancel(taskId: string): Promise<boolean>;\n\n /**\n * Pause a cron task (only for CRON type)\n */\n pause(taskId: string): Promise<boolean>;\n\n /**\n * Resume a paused cron task (only for CRON type)\n */\n resume(taskId: string): Promise<boolean>;\n\n /**\n * Check if a task exists\n */\n has(taskId: string): Promise<boolean>;\n\n /**\n * Get task information\n */\n getTask(taskId: string): Promise<ScheduledTaskDefinition | null>;\n\n /**\n * Get remaining time until next execution\n * Returns -1 if task not found or already executed\n */\n getRemainingTime(taskId: string): Promise<number>;\n\n /**\n * Get count of active tasks (pending + paused)\n */\n getActiveTaskCount(): Promise<number>;\n\n /**\n * Get all active task IDs\n */\n getActiveTaskIds(): Promise<string[]>;\n\n /**\n * Cancel all active tasks\n */\n cancelAll(): Promise<void>;\n\n // ===== Recovery =====\n\n /**\n * Restore active tasks from storage (call on service startup)\n * Re-schedules all pending tasks with their remaining time\n * Re-schedules all cron tasks for their next run\n * @returns Number of tasks restored\n */\n restore(): Promise<number>;\n\n // ===== Storage =====\n\n /**\n * Set the storage backend\n */\n setStorage(storage: ScheduleStorage): void;\n\n /**\n * Get current storage backend\n */\n getStorage(): ScheduleStorage | null;\n}\n\n/**\n * Schedule Lattice protocol interface\n */\nexport interface ScheduleLatticeProtocol\n extends BaseLatticeProtocol<ScheduleConfig, ScheduleClient> {\n // Handler registration\n registerHandler: (taskType: string, handler: TaskHandler) => void;\n unregisterHandler: (taskType: string) => boolean;\n hasHandler: (taskType: string) => boolean;\n getHandlerTypes: () => string[];\n\n // One-time task scheduling\n scheduleOnce: (\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleOnceOptions\n ) => Promise<boolean>;\n\n // Cron task scheduling\n scheduleCron: (\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleCronOptions\n ) => Promise<boolean>;\n\n // Task management\n cancel: (taskId: string) => Promise<boolean>;\n pause: (taskId: string) => Promise<boolean>;\n resume: (taskId: string) => Promise<boolean>;\n has: (taskId: string) => Promise<boolean>;\n getTask: (taskId: string) => Promise<ScheduledTaskDefinition | null>;\n getRemainingTime: (taskId: string) => Promise<number>;\n getActiveTaskCount: () => Promise<number>;\n getActiveTaskIds: () => Promise<string[]>;\n cancelAll: () => Promise<void>;\n\n // Recovery\n restore: () => Promise<number>;\n}\n","/**\n * LoggerLatticeProtocol\n *\n * Logger Lattice protocol for logging management\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Logger service type enumeration\n */\nexport enum LoggerType {\n PINO = \"pino\",\n CONSOLE = \"console\",\n CUSTOM = \"custom\",\n}\n\n/**\n * Logger context interface\n */\nexport interface LoggerContext {\n \"x-user-id\"?: string;\n \"x-tenant-id\"?: string;\n \"x-request-id\"?: string;\n \"x-task-id\"?: string;\n \"x-thread-id\"?: string;\n [key: string]: any;\n}\n\n/**\n * Pino logger file transport options\n */\nexport interface PinoFileOptions {\n file?: string; // Log file path (e.g., \"./logs/app.log\" or \"./logs/app\")\n frequency?: \"daily\" | \"hourly\" | \"minutely\" | string; // Log rotation frequency\n mkdir?: boolean; // Create directory if not exists\n size?: string; // Max file size (e.g., \"10M\", \"100K\")\n maxFiles?: number; // Maximum number of log files to keep\n}\n\n/**\n * Logger configuration interface\n */\nexport interface LoggerConfig {\n name: string; // Logger name\n description?: string; // Logger description\n type: LoggerType; // Logger service type\n serviceName?: string; // Service name (e.g., \"lattice-gateway\")\n loggerName?: string; // Logger instance name (e.g., \"fastify-server\")\n context?: LoggerContext; // Initial context\n // File logging options (for PINO type)\n file?: string | PinoFileOptions; // Log file path or detailed file options\n // Additional options (e.g., pino config, custom logger settings)\n options?: Record<string, any>;\n}\n\n/**\n * Logger client interface\n */\nexport interface LoggerClient {\n info: (msg: string, obj?: object) => void;\n error: (msg: string, obj?: object | Error) => void;\n warn: (msg: string, obj?: object) => void;\n debug: (msg: string, obj?: object) => void;\n updateContext?: (context: Partial<LoggerContext>) => void;\n child?: (options: Partial<LoggerConfig>) => LoggerClient;\n}\n\n/**\n * Logger Lattice protocol interface\n */\nexport interface LoggerLatticeProtocol\n extends BaseLatticeProtocol<LoggerConfig, LoggerClient> {\n // Logger operations\n info: (msg: string, obj?: object) => void;\n error: (msg: string, obj?: object | Error) => void;\n warn: (msg: string, obj?: object) => void;\n debug: (msg: string, obj?: object) => void;\n updateContext?: (context: Partial<LoggerContext>) => void;\n child?: (options: Partial<LoggerConfig>) => LoggerClient;\n}\n","/**\n * MessageProtocol\n *\n */\n\n\n\n/**\n * Base message interface\n */\nexport interface BaseMessage {\n id: string; // Unique identifier for the message\n role: string; // Role of the sender (user, assistant, system, tool, developer)\n content?: string; // Optional text content of the message\n name?: string; // Optional name of the sender\n}\n\n/**\n * User message interface\n */\nexport interface UserMessage extends BaseMessage {\n role: \"human\";\n content: string; // Text input from the user\n files?: Array<{ name: string; id: string }>; // Optional files attached to the message\n}\n\n/**\n * Tool call interface\n */\nexport interface ToolCall {\n id: string; // Unique identifier for this tool call\n name: string; // Name of the tool/function to call\n args: Record<string, any>; // Arguments as an object\n type: \"tool_call\"; // Type of tool call\n response?: string; // Optional response from the tool execution\n}\n\n/**\n * Assistant message interface\n */\nexport interface AssistantMessage extends BaseMessage {\n role: \"ai\";\n content?: string; // Text response from the assistant (optional if using tool calls)\n tool_calls?: ToolCall[]; // Optional tool calls made by the assistant\n}\n\nexport interface InterruptMessage extends BaseMessage {\n type: \"interrupt\";\n value: any;\n}\n\n/**\n * System message interface\n */\nexport interface SystemMessage extends BaseMessage {\n role: \"system\";\n content: string; // Instructions or context for the assistant\n}\n\n/**\n * Tool message interface\n */\nexport interface ToolMessage extends BaseMessage {\n role: \"tool\";\n content: string; // Result from the tool execution\n tool_call_id: string; // ID of the tool call this message responds to\n}\n\n/**\n * Developer message interface\n */\nexport interface DeveloperMessage extends BaseMessage {\n role: \"developer\";\n content: string; // Content for development or debugging\n}\n\n/**\n * Message chunk type constants\n */\nexport const MessageChunkTypes = {\n HUMAN: 'human',\n AI: 'ai',\n TOOL: 'tool',\n INTERRUPT: 'interrupt',\n MESSAGE_COMPLETED: 'message_completed',\n MESSAGE_FAILED: 'message_failed',\n THREAD_IDLE: 'thread_idle',\n} as const;\n\nexport type MessageChunkType = typeof MessageChunkTypes[keyof typeof MessageChunkTypes];\n\nexport interface MessageChunk {\n type: MessageChunkType;\n data: {\n id: string;\n content?: string;\n tool_call_chunks?: Array<{\n name?: string;\n args?: string;\n id?: string;\n index: number;\n }>;\n tool_calls?: Array<{\n name: string;\n args: Record<string, any>;\n id: string;\n type: string;\n response?: string;\n }>;\n additional_kwargs?: {\n tool_calls?: Array<{\n function?: { name?: string; arguments?: any };\n id?: string;\n }>;\n };\n tool_call_id?: string;\n };\n}\n\n/**\n * Message type union\n */\nexport type Message =\n | UserMessage\n | AssistantMessage\n | SystemMessage\n | ToolMessage\n | DeveloperMessage;\n","/**\n * McpLatticeProtocol\n *\n * Model Context Protocol (MCP) lattice protocol for integrating MCP servers\n * with the Lattice framework. Provides standardized interfaces for MCP\n * client connections, tool discovery, and remote execution.\n */\n\nimport { BaseLatticeProtocol, LatticeMessage } from \"./BaseLatticeProtocol\";\n\n/**\n * MCP transport type\n */\nexport type McpTransportType = \"stdio\" | \"streamable_http\" | \"sse\";\n\n/**\n * MCP server configuration\n */\nexport interface McpServerConfig {\n /** Server name */\n name: string;\n /** Server version */\n version: string;\n /** Transport type */\n transport: McpTransportType;\n /** Command for stdio transport (e.g., \"npx\", \"python\") */\n command?: string;\n /** Arguments for stdio transport */\n args?: string[];\n /** URL for HTTP/SSE transport */\n url?: string;\n /** Environment variables */\n env?: Record<string, string>;\n /** Connection timeout in milliseconds */\n timeout?: number;\n /** Retry attempts on connection failure */\n retryAttempts?: number;\n}\n\n/**\n * MCP tool definition\n */\nexport interface McpTool {\n /** Tool name */\n name: string;\n /** Tool description */\n description: string;\n /** Input schema */\n inputSchema: {\n type: \"object\";\n properties: Record<string, any>;\n required?: string[];\n };\n /** Tool metadata */\n metadata?: Record<string, any>;\n}\n\n/**\n * MCP tool call result\n */\nexport interface McpToolResult {\n /** Whether the call was successful */\n success: boolean;\n /** Result content */\n content: Array<{\n type: \"text\" | \"image\" | \"audio\" | \"resource\";\n data: any;\n mimeType?: string;\n }>;\n /** Error message if failed */\n error?: string;\n /** Execution metadata */\n metadata?: {\n duration: number;\n tokens?: number;\n model?: string;\n };\n}\n\n/**\n * MCP client interface\n */\nexport interface McpClient {\n /** Client name */\n name: string;\n /** Client version */\n version: string;\n /** Server configuration */\n serverConfig: McpServerConfig;\n \n /**\n * Connect to MCP server\n */\n connect(): Promise<void>;\n \n /**\n * Disconnect from MCP server\n */\n disconnect(): Promise<void>;\n \n /**\n * Check if connected\n */\n isConnected(): boolean;\n \n /**\n * List available tools\n */\n listTools(): Promise<McpTool[]>;\n \n /**\n * Call a tool\n */\n callTool(name: string, arguments_: Record<string, any>): Promise<McpToolResult>;\n \n /**\n * Subscribe to server notifications\n */\n subscribe(topic: string, handler: (data: any) => void): void;\n \n /**\n * Unsubscribe from server notifications\n */\n unsubscribe(topic: string): void;\n \n /**\n * Get client statistics\n */\n getStats(): McpStats;\n \n /**\n * Get connection status\n */\n getStatus(): McpConnectionStatus;\n}\n\n/**\n * MCP client options\n */\nexport interface McpClientOptions {\n /** Client name */\n name: string;\n /** Client version */\n version: string;\n /** Server configuration */\n serverConfig: McpServerConfig;\n /** Auto-connect on initialization */\n autoConnect?: boolean;\n /** Error handler */\n onError?: (error: Error) => void;\n /** Connection status handler */\n onStatusChange?: (status: McpConnectionStatus) => void;\n}\n\n/**\n * MCP Lattice protocol interface\n */\nexport interface McpLatticeProtocol\n extends BaseLatticeProtocol<McpServerConfig, McpClient> {\n /**\n * Server configuration\n */\n config: McpServerConfig;\n \n /**\n * MCP client instance\n */\n client: McpClient;\n \n /**\n * Connect to MCP server\n */\n connect(): Promise<void>;\n \n /**\n * Disconnect from MCP server\n */\n disconnect(): Promise<void>;\n \n /**\n * Get available tools\n */\n getTools(): Promise<McpTool[]>;\n \n /**\n * Execute a tool\n */\n executeTool(\n name: string,\n arguments_: Record<string, any>\n ): Promise<McpToolResult>;\n \n /**\n * Execute with automatic retries\n */\n executeToolWithRetry(\n name: string,\n arguments_: Record<string, any>,\n maxRetries?: number\n ): Promise<McpToolResult>;\n \n /**\n * Get protocol version\n */\n getProtocolVersion(): string;\n \n /**\n * Health check\n */\n healthCheck(): Promise<boolean>;\n}\n\n/**\n * MCP message types\n */\nexport enum McpMessageType {\n CONNECT = \"mcp:connect\",\n DISCONNECT = \"mcp:disconnect\",\n LIST_TOOLS = \"mcp:list_tools\",\n CALL_TOOL = \"mcp:call_tool\",\n TOOL_RESULT = \"mcp:tool_result\",\n NOTIFICATION = \"mcp:notification\",\n ERROR = \"mcp:error\",\n HEALTH_CHECK = \"mcp:health_check\",\n}\n\n/**\n * MCP Lattice message\n */\nexport interface McpLatticeMessage extends LatticeMessage {\n type: McpMessageType;\n payload: {\n toolName?: string;\n arguments?: Record<string, any>;\n result?: McpToolResult;\n tools?: McpTool[];\n error?: string;\n };\n}\n\n/**\n * MCP connection status\n */\nexport type McpConnectionStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"reconnecting\"\n | \"error\";\n\n/**\n * MCP statistics\n */\nexport interface McpStats {\n totalCalls: number;\n successfulCalls: number;\n failedCalls: number;\n averageLatency: number;\n lastCallTimestamp: number;\n}\n","/**\n * A2AProtocol - Google Agent-to-Agent Protocol type definitions\n *\n * Based on the A2A open protocol spec for AI agent interoperability.\n * @see https://github.com/google/A2A\n */\n\n// ─── Agent Card ───────────────────────────────────────────────────────────\n\nexport interface A2ASkill {\n id: string;\n name: string;\n description: string;\n tags: string[];\n examples: string[];\n}\n\nexport interface A2ACapabilities {\n streaming: boolean;\n pushNotifications: boolean;\n stateTransitionHistory: boolean;\n}\n\nexport interface A2AProvider {\n organization: string;\n url?: string;\n}\n\nexport interface AgentCard {\n name: string;\n description: string;\n url: string;\n provider: A2AProvider;\n version: string;\n documentationUrl?: string;\n capabilities: A2ACapabilities;\n defaultInputModes: string[];\n defaultOutputModes: string[];\n skills: A2ASkill[];\n}\n\n// ─── Artifact / Part ──────────────────────────────────────────────────────\n\nexport interface A2ATextPart {\n type: \"text\";\n text: string;\n}\n\nexport interface A2AFilePart {\n type: \"file\";\n file: {\n name: string;\n mimeType: string;\n bytes?: string;\n uri?: string;\n };\n}\n\nexport interface A2ADataPart {\n type: \"data\";\n data: Record<string, unknown>;\n}\n\nexport type A2APart = A2ATextPart | A2AFilePart | A2ADataPart;\n\n// ─── Message ──────────────────────────────────────────────────────────────\n\nexport interface A2AMessage {\n role: \"user\" | \"agent\";\n parts: A2APart[];\n messageId?: string;\n contextId?: string;\n referenceTaskIds?: string[];\n metadata?: Record<string, unknown>;\n}\n\n// ─── Task ─────────────────────────────────────────────────────────────────\n\nexport type A2ATaskState =\n | \"working\"\n | \"input-required\"\n | \"completed\"\n | \"failed\"\n | \"canceled\"\n | \"rejected\";\n\nexport interface A2ATaskStatus {\n state: A2ATaskState;\n message?: A2AMessage;\n timestamp: string;\n}\n\nexport interface A2AArtifact {\n name?: string;\n description?: string;\n parts: A2APart[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2ATask {\n id: string;\n sessionId?: string;\n contextId?: string;\n status: A2ATaskStatus;\n artifacts: A2AArtifact[];\n history?: A2AMessage[];\n metadata?: Record<string, unknown>;\n}\n\n// ─── Request / Response ───────────────────────────────────────────────────\n\nexport interface A2ATaskSendRequest {\n id?: string;\n sessionId?: string;\n message: A2AMessage;\n pushNotification?: A2APushNotification;\n historyLength?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2APushNotification {\n url: string;\n token?: string;\n}\n\nexport interface A2ATaskUpdatePayload {\n id: string;\n sessionId?: string;\n contextId?: string;\n status: A2ATaskStatus;\n final?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2ATaskArtifactUpdatePayload {\n id: string;\n sessionId?: string;\n contextId?: string;\n artifact: A2AArtifact;\n final?: boolean;\n metadata?: Record<string, unknown>;\n}\n\n// ─── SSE Events ───────────────────────────────────────────────────────────\n\nexport type A2ASSEEvent =\n | { event: \"task\"; data: A2ATaskUpdatePayload }\n | { event: \"status-update\"; data: A2ATaskUpdatePayload }\n | { event: \"artifact-update\"; data: A2ATaskArtifactUpdatePayload }\n | { event: \"error\"; data: { code: string; message: string } };\n\n// ─── Config ───────────────────────────────────────────────────────────────\n\nexport interface A2AConfig {\n agentName: string;\n agentDescription: string;\n agentUrl: string;\n organization: string;\n version?: string;\n capabilities?: Partial<A2ACapabilities>;\n defaultInputModes?: string[];\n defaultOutputModes?: string[];\n skills?: A2ASkill[];\n apiKeyMap: Map<string, A2AApiKeyEntry>;\n}\n\nexport interface A2AApiKeyEntry {\n key: string;\n tenantId?: string;\n projectId?: string;\n workspaceId?: string;\n}\n\nexport const A2A_DEFAULT_CAPABILITIES: A2ACapabilities = {\n streaming: true,\n pushNotifications: false,\n stateTransitionHistory: false,\n};\n\nexport const A2A_DEFAULT_INPUT_MODES = [\"text\", \"text/plain\"];\nexport const A2A_DEFAULT_OUTPUT_MODES = [\"text\", \"text/plain\", \"text/markdown\"];\n\nexport interface A2AAuthContext {\n authenticated: boolean;\n apiKey?: string;\n tenantId?: string;\n projectId?: string;\n workspaceId?: string;\n source?: \"bearer\" | \"x-api-key\";\n}\n"],"mappings":";AAaO,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,gBAAa;AAEb,EAAAA,WAAA,gBAAa;AAEb,EAAAA,WAAA,cAAW;AARD,SAAAA;AAAA,GAAA;AA0NL,SAAS,kBACd,QAC2B;AAC3B,SAAO,OAAO,SAAS;AACzB;AA4FO,SAAS,uBACd,QACgC;AAChC,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,sBACd,QAC+B;AAC/B,SAAO,OAAO,SAAS;AACzB;AA4BO,SAAS,SAAS,QAAqD;AAC5E,SAAO;AACT;AAKO,SAAS,kBACd,QAC2B;AAC3B,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,wBACd,QACiC;AACjC,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,mBAAmB,QAA+B;AAChE,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO,OAAO,SAAS,CAAC;AAAA,EAC1B;AACA,SAAO,CAAC;AACV;AAKO,SAAS,uBAAuB,QAA+B;AACpE,MAAI,kBAAkB,MAAM,KAAK,wBAAwB,MAAM,GAAG;AAChE,WAAO,OAAO,aAAa,CAAC;AAAA,EAC9B;AACA,SAAO,CAAC;AACV;;;AC7YO,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,aAAU;AALA,SAAAA;AAAA,GAAA;;;ACAL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AAVC,SAAAA;AAAA,GAAA;;;ACAL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;;;ACEL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,WAAQ;AAHE,SAAAA;AAAA,GAAA;AASL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,UAAO;AACP,EAAAA,uBAAA,UAAO;AAFG,SAAAA;AAAA,GAAA;AAQL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,YAAS;AACT,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,YAAS;AANC,SAAAA;AAAA,GAAA;;;ACnBL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;;;ACoEL,IAAM,oBAAoB;AAAA,EAC/B,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,aAAa;AACf;;;ACgIO,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,gBAAa;AACb,EAAAA,gBAAA,gBAAa;AACb,EAAAA,gBAAA,eAAY;AACZ,EAAAA,gBAAA,iBAAc;AACd,EAAAA,gBAAA,kBAAe;AACf,EAAAA,gBAAA,WAAQ;AACR,EAAAA,gBAAA,kBAAe;AARL,SAAAA;AAAA,GAAA;;;AC1CL,IAAM,2BAA4C;AAAA,EACvD,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,wBAAwB;AAC1B;AAEO,IAAM,0BAA0B,CAAC,QAAQ,YAAY;AACrD,IAAM,2BAA2B,CAAC,QAAQ,cAAc,eAAe;","names":["AgentType","MemoryType","UIComponentType","QueueType","ScheduleType","ScheduleExecutionType","ScheduledTaskStatus","LoggerType","McpMessageType"]}
1
+ {"version":3,"sources":["../src/AgentLatticeProtocol.ts","../src/MemoryLatticeProtocol.ts","../src/UILatticeProtocol.ts","../src/QueueLatticeProtocol.ts","../src/ScheduleLatticeProtocol.ts","../src/LoggerLatticeProtocol.ts","../src/MessageProtocol.ts","../src/McpLatticeProtocol.ts","../src/A2AProtocol.ts"],"sourcesContent":["/**\n * AgentLatticeProtocol\n *\n * 智能体Lattice的协议,定义了智能体的行为和组合方式\n */\n\nimport { CompiledStateGraph } from \"@langchain/langgraph\";\nimport { ZodObject } from \"zod\";\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * 智能体类型枚举\n */\nexport enum AgentType {\n REACT = \"react\",\n DEEP_AGENT = \"deep_agent\",\n TEAM = \"team\",\n PROCESSING = \"processing\",\n /** Remote A2A agent — delegates to an external A2A-compatible server */\n A2A_REMOTE = \"a2a_remote\",\n /** Workflow agent — compiled from YAML DSL into a LangGraph StateGraph */\n WORKFLOW = \"workflow\",\n}\n\n/**\n * Runtime configuration that will be injected into LangGraphRunnableConfig.configurable\n * Tools can access these values via config.configurable.runConfig\n */\nexport interface AgentRunConfig {\n /** Database key for SQL tools (registered via sqlDatabaseManager) */\n databaseKey?: string;\n /** Any additional runtime configuration */\n [key: string]: any;\n}\n\n/**\n * Base agent configuration shared by all agent types\n */\ninterface BaseAgentConfig {\n key: string; // Unique key\n name: string; // Name\n description: string; // Description\n prompt: string; // Prompt\n /**\n * Key of the parent agent to inherit configuration from.\n * When set, unspecified fields are inherited from the parent agent's config.\n * Child's explicitly set fields override the parent's.\n */\n extendsAgent?: string;\n schema?: ZodObject<any, any, any, any, any>; // Input validation schema\n modelKey?: string; // Model key to use\n /**\n * Runtime configuration to inject into tool execution context\n * Will be available in tools via config.configurable.runConfig\n */\n runConfig?: AgentRunConfig;\n skillCategories?: string[];\n middleware?: AgentMiddlewareConfig[];\n /**\n * Structured output response format for the agent.\n * Supports Zod schema (z.object({...})), JSON Schema object ({ type: \"object\", properties: {...} }),\n * providerStrategy(), toolStrategy(), and other formats accepted by the underlying model.\n *\n * @example\n * ```ts\n * // Zod schema\n * responseFormat: z.object({ name: z.string(), age: z.number() })\n *\n * // JSON Schema\n * responseFormat: { type: \"object\", properties: { name: { type: \"string\" } }, required: [\"name\"] }\n * ```\n */\n responseFormat?: any;\n /**\n * Arbitrary metadata as string-to-string map (optional).\n * Mirrors the skill metadata convention. Useful for:\n * - trust tier (e.g. verified: \"human-reviewed\" | \"machine-confirmed\")\n * - version tracking (e.g. version: \"1.2\")\n * - provenance (e.g. source material, learning run id)\n */\n metadata?: Record<string, string>;\n}\n\nexport type AvailableModule = \"filesystem\" | \"code_eval\" | \"browser\";\n\nexport interface SandboxMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n modules: AvailableModule[];\n}\n\nexport interface CodeEvalMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n timeout: number;\n memoryLimit: number;\n}\n\nexport interface BrowserMiddlewareConfig {\n vmIsolation: \"agent\" | \"project\" | \"global\";\n headless: boolean;\n}\n\nexport interface SqlMiddlewareConfig {\n databaseKeys?: string[];\n}\n\nexport interface MetricsMiddlewareConfig {\n /** List of configured metrics server keys */\n serverKeys: string[];\n /** Optional descriptions for each server */\n serverDescriptions?: Record<string, string>;\n}\n\nexport interface SchedulerMiddlewareConfig {\n defaultMaxRetries?: number;\n}\n\nexport interface CollectionMiddlewareConfig {\n /** List of configured collection keys */\n collectionKeys: string[];\n /**\n * When true, all collections for the tenant are available.\n * When false or undefined, only collections in collectionKeys are used.\n */\n connectAll?: boolean;\n}\n\nexport type MiddlewareType = \"filesystem\" | \"code_eval\" | \"browser\" | \"sql\" | \"skill\" | \"http\" | \"custom\" | \"metrics\" | \"ask_user_to_clarify\" | \"widget\" | \"claw\" | \"date\" | \"scheduler\" | \"topology\" | \"task\" | \"collection\" | string;\n\nexport interface AgentMiddlewareConfig {\n id: string;\n type: MiddlewareType;\n name: string;\n description: string;\n enabled: boolean;\n /** 可选:限制该中间件暴露的工具列表。不配置则默认暴露所有工具 */\n allowedTools?: string[];\n config: SandboxMiddlewareConfig | CodeEvalMiddlewareConfig | BrowserMiddlewareConfig | SqlMiddlewareConfig | MetricsMiddlewareConfig | ClawMiddlewareConfig | CollectionMiddlewareConfig | SchedulerMiddlewareConfig | Record<string, any>;\n}\n\n/**\n * Bootstrap file configuration\n * Defines default content for project bootstrap files\n */\nexport interface BootstrapFilesConfig {\n /** Default content for AGENTS.md - operating instructions */\n agents?: string;\n /** Default content for SOUL.md - personality and tone */\n soul?: string;\n /** Default content for IDENTITY.md - agent identity */\n identity?: string;\n /** Default content for USER.md - user preferences */\n user?: string;\n /** Default content for TOOLS.md - tool documentation */\n tools?: string;\n /** Default content for BOOTSTRAP.md - first-run tasks */\n bootstrap?: string;\n}\n\n/**\n * Claw Middleware 配置\n * 用于配置 bootstrap 文件管理行为\n */\nexport interface ClawMiddlewareConfig {\n /** 是否启用 bootstrap 文件注入(默认:true) */\n injectBootstrapFiles?: boolean;\n /** 自定义 bootstrap 文件内容 */\n bootstrapFiles?: BootstrapFilesConfig;\n}\n\n\n/**\n * REACT agent configuration\n */\nexport interface ReactAgentConfig extends BaseAgentConfig {\n type: AgentType.REACT;\n tools?: string[]; // Tool list\n}\n\n/**\n * DEEP_AGENT configuration - only this type supports subAgents\n */\nexport interface DeepAgentConfig extends BaseAgentConfig {\n type: AgentType.DEEP_AGENT;\n tools?: string[]; // Tool list\n subAgents?: string[]; // Sub-agent list (unique to DEEP_AGENT)\n internalSubAgents?: AgentConfig[]; // Internal sub-agent list (unique to DEEP_AGENT)\n}\n\n/**\n * PROCESSING agent configuration — workflow orchestration with topology enforcement.\n * Replaces todoListMiddleware with topologyMiddleware.\n */\nexport interface ProcessingAgentConfig extends BaseAgentConfig {\n type: AgentType.PROCESSING;\n tools?: string[];\n subAgents?: string[];\n internalSubAgents?: AgentConfig[];\n}\n\n/**\n * Team teammate configuration -- describes an available teammate.\n */\nexport interface TeamTeammateConfig {\n /** Unique name for this teammate (used as agent ID) */\n name: string;\n /** Role category (e.g. \"research\", \"writing\", \"review\") */\n role: string;\n /** Human-readable description of what this teammate does */\n description: string;\n /** Tool keys this teammate has access to */\n tools?: string[];\n /** Custom system prompt for this teammate */\n prompt?: string;\n /** Model key override for this teammate */\n modelKey?: string;\n}\n\n/**\n * TEAM agent configuration -- a team lead that dynamically creates teammates.\n * Teammates are created on-the-fly from create_team tool input (name, role, description).\n */\nexport interface TeamAgentConfig extends BaseAgentConfig {\n type: AgentType.TEAM;\n /** Tool keys available to the team lead */\n tools?: string[];\n /** Maximum number of teammates running concurrently */\n maxConcurrency?: number;\n /**\n * Schedule lattice key for polling task list / mailbox.\n * When set, teammates use ScheduleLattice for periodic polling instead of event-driven wait.\n */\n scheduleLatticeKey?: string;\n /** Poll interval in ms when using schedule lattice (default: 5000) */\n pollIntervalMs?: number;\n}\n\n/**\n * Type guard to check if config is TeamAgentConfig\n */\nexport function isTeamAgentConfig(\n config: AgentConfig\n): config is TeamAgentConfig {\n return config.type === AgentType.TEAM;\n}\n\n// ─── A2A_REMOTE Agent ──────────────────────────────────────────────────────\n\nexport interface LocalRuntimeConfig {\n label?: string;\n agentCardUrl: string;\n healthUrl?: string;\n command: {\n executable: string;\n args: string[];\n cwd?: string;\n env?: Record<string, string>;\n };\n}\n\n/**\n * A2A_REMOTE agent configuration — wraps a remote A2A-compatible agent endpoint.\n *\n * This agent type wraps a remote A2A endpoint so orchestrators can treat\n * external agents the same as local LangGraph agents.\n */\nexport interface A2ARemoteAgentConfig extends BaseAgentConfig {\n type: AgentType.A2A_REMOTE;\n /**\n * URL of the remote agent's agent card (e.g. http://host:3000/.well-known/agent-card.json).\n * The builder fetches this card to discover the JSON-RPC endpoint.\n */\n agentCardUrl: string;\n /**\n * Optional API key sent as a Bearer token.\n */\n apiKey?: string;\n /**\n * HTTP timeout in milliseconds (default: 300_000 = 5 min).\n */\n timeout?: number;\n projectId?: string;\n /**\n * Optional tool keys (not used by the builder, but included for type compatibility).\n */\n tools?: string[];\n /**\n * Optional local runtime snapshot for Local Managed A2A assistants.\n * When present, the gateway manages a local process for this assistant.\n * Copied from a template or custom form at creation time.\n */\n localRuntime?: LocalRuntimeConfig;\n}\n\nexport type LocalA2AProviderId = string;\n\nexport type LocalA2AProviderStatus =\n | \"missing\"\n | \"disabled\"\n | \"starting\"\n | \"running\"\n | \"stopped\"\n | \"failed\";\n\nexport interface LocalA2AProviderState {\n runtimeId: string;\n label: string;\n status: LocalA2AProviderStatus;\n enabled: boolean;\n assistantId?: string;\n agentCardUrl?: string;\n healthUrl?: string;\n pid?: number;\n message?: string;\n lastStartedAt?: string;\n lastStoppedAt?: string;\n}\n\n/**\n * WORKFLOW agent configuration — compiled from YAML workflow DSL into a LangGraph StateGraph.\n *\n * The workflow field contains the full DSL definition (nodes, edges, state).\n * The WorkflowAgentGraphBuilder compiles this into a multi-node LangGraph\n * where each node invokes a registered sub-agent by ref.\n */\nexport interface WorkflowAgentConfig extends BaseAgentConfig {\n type: AgentType.WORKFLOW;\n /** The YAML workflow DSL definition string (needs+if format) */\n workflowYaml: string;\n /** Optional tool keys */\n tools?: string[];\n}\n\n/**\n * Type guard to check if config is A2ARemoteAgentConfig\n */\nexport function isA2ARemoteAgentConfig(\n config: AgentConfig\n): config is A2ARemoteAgentConfig {\n return config.type === AgentType.A2A_REMOTE;\n}\n\n/**\n * Type guard to check if config is WorkflowAgentConfig\n */\nexport function isWorkflowAgentConfig(\n config: AgentConfig\n): config is WorkflowAgentConfig {\n return config.type === AgentType.WORKFLOW;\n}\n\n/**\n * Agent configuration union type\n * Different agent types have different configuration options\n */\nexport type AgentConfig =\n | ReactAgentConfig\n | DeepAgentConfig\n | TeamAgentConfig\n | ProcessingAgentConfig\n | A2ARemoteAgentConfig\n | WorkflowAgentConfig\n\n/**\n * Agent configuration with tools property\n */\nexport type AgentConfigWithTools =\n | ReactAgentConfig\n | DeepAgentConfig\n | TeamAgentConfig\n | ProcessingAgentConfig\n | A2ARemoteAgentConfig\n | WorkflowAgentConfig\n\n/**\n * Type guard to check if config has tools property\n */\nexport function hasTools(config: AgentConfig): config is AgentConfigWithTools {\n return true;\n}\n\n/**\n * Type guard to check if config is DeepAgentConfig (has subAgents)\n */\nexport function isDeepAgentConfig(\n config: AgentConfig\n): config is DeepAgentConfig {\n return config.type === AgentType.DEEP_AGENT;\n}\n\n/**\n * Type guard to check if config is ProcessingAgentConfig (has subAgents + topology)\n */\nexport function isProcessingAgentConfig(\n config: AgentConfig\n): config is ProcessingAgentConfig {\n return config.type === AgentType.PROCESSING;\n}\n\n/**\n * Get tools from config safely\n */\nexport function getToolsFromConfig(config: AgentConfig): string[] {\n if (hasTools(config)) {\n return config.tools || [];\n }\n return [];\n}\n\n/**\n * Get subAgents from config safely (DeepAgentConfig and ProcessingAgentConfig have subAgents)\n */\nexport function getSubAgentsFromConfig(config: AgentConfig): string[] {\n if (isDeepAgentConfig(config) || isProcessingAgentConfig(config)) {\n return config.subAgents || [];\n }\n return [];\n}\n\n/**\n * 智能体客户端类型\n */\nexport type AgentClient = CompiledStateGraph<any, any, any, any, any>;\n\n/**\n * Graph构建选项\n */\nexport interface GraphBuildOptions {\n overrideTools?: string[];\n overrideModel?: string;\n metadata?: Record<string, any>;\n}\n\n/**\n * 智能体Lattice协议接口\n */\nexport interface AgentLatticeProtocol\n extends BaseLatticeProtocol<AgentConfig, AgentClient> {\n // 智能体执行函数\n invoke: (input: any, options?: any) => Promise<any>;\n\n // 构建智能体图\n buildGraph: (options?: GraphBuildOptions) => Promise<AgentClient>;\n}\n","/**\n * MemoryLatticeProtocol\n *\n * 记忆Lattice的协议,用于管理智能体的上下文和记忆\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * 记忆类型枚举\n */\nexport enum MemoryType {\n SHORT_TERM = \"short_term\",\n LONG_TERM = \"long_term\",\n EPISODIC = \"episodic\",\n SEMANTIC = \"semantic\",\n WORKING = \"working\",\n}\n\n/**\n * 记忆配置接口\n */\nexport interface MemoryConfig {\n name: string; // 名称\n description: string; // 描述\n type: MemoryType; // 记忆类型\n ttl?: number; // 生存时间\n capacity?: number; // 容量限制\n}\n\n/**\n * 记忆客户端接口\n */\nexport interface MemoryClient {\n add: (key: string, value: any) => Promise<void>;\n get: (key: string) => Promise<any>;\n update: (key: string, value: any) => Promise<void>;\n delete: (key: string) => Promise<void>;\n search: (query: string, options?: any) => Promise<any[]>;\n clear: () => Promise<void>;\n}\n\n/**\n * 记忆Lattice协议接口\n */\nexport interface MemoryLatticeProtocol\n extends BaseLatticeProtocol<MemoryConfig, MemoryClient> {\n // 记忆操作方法\n add: (key: string, value: any) => Promise<void>;\n get: (key: string) => Promise<any>;\n update: (key: string, value: any) => Promise<void>;\n delete: (key: string) => Promise<void>;\n search: (query: string, options?: any) => Promise<any[]>;\n clear: () => Promise<void>;\n}\n","/**\n * UILatticeProtocol\n *\n * UI Lattice的协议,用于定义用户界面组件\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * UI组件类型枚举\n */\nexport enum UIComponentType {\n CONTAINER = \"container\",\n INPUT = \"input\",\n BUTTON = \"button\",\n LIST = \"list\",\n TABLE = \"table\",\n CHART = \"chart\",\n FORM = \"form\",\n CARD = \"card\",\n MODAL = \"modal\",\n CUSTOM = \"custom\",\n}\n\n/**\n * UI配置接口\n */\nexport interface UIConfig {\n name: string; // 组件名称\n description: string; // 组件描述\n type: UIComponentType; // 组件类型\n props?: Record<string, any>; // 组件属性\n children?: string[]; // 子组件列表\n}\n\n/**\n * UI组件接口\n * 使用泛型以适应不同的UI框架(React, Vue等)\n */\nexport interface UIComponent<T = any> {\n render: (props?: any) => T;\n addEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n removeEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n\n/**\n * UI Lattice协议接口\n */\nexport interface UILatticeProtocol<T = any>\n extends BaseLatticeProtocol<UIConfig, UIComponent<T>> {\n // UI渲染方法\n render: (props?: any) => T;\n\n // 事件处理\n addEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n removeEventListener: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n","/**\n * QueueLatticeProtocol\n *\n * Queue Lattice protocol for task queue management\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Queue service type enumeration\n */\nexport enum QueueType {\n MEMORY = \"memory\",\n REDIS = \"redis\",\n}\n\n/**\n * Queue configuration interface\n */\nexport interface QueueConfig {\n name: string; // Queue name\n description: string; // Queue description\n type: QueueType; // Queue service type\n queueName?: string; // Specific queue name (e.g., \"tasks\")\n options?: Record<string, any>; // Additional options (e.g., Redis connection options)\n}\n\n/**\n * Queue operation result interface\n */\nexport interface QueueResult<T = any> {\n data: T | null;\n error: any | null;\n}\n\n/**\n * Queue client interface\n */\nexport interface QueueClient {\n push: (item: any) => Promise<QueueResult<number>>;\n pop: () => Promise<QueueResult<any>>;\n createQueue?: () => Promise<{ success: boolean; queue_name?: string; error?: any }>;\n}\n\n/**\n * Queue Lattice protocol interface\n */\nexport interface QueueLatticeProtocol\n extends BaseLatticeProtocol<QueueConfig, QueueClient> {\n // Queue operations\n push: (item: any) => Promise<QueueResult<number>>;\n pop: () => Promise<QueueResult<any>>;\n createQueue?: () => Promise<{ success: boolean; queue_name?: string; error?: any }>;\n}\n\n\n\n","/**\n * ScheduleLatticeProtocol\n *\n * Schedule Lattice protocol for delayed and recurring task execution management\n * Supports persistence and recovery after service restart\n * Supports both one-time delayed tasks and cron-style recurring tasks\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Schedule service type enumeration\n */\nexport enum ScheduleType {\n MEMORY = \"memory\",\n POSTGRES = \"postgres\",\n REDIS = \"redis\",\n}\n\n/**\n * Schedule execution type - one-time or recurring\n */\nexport enum ScheduleExecutionType {\n ONCE = \"once\", // Execute once at specified time\n CRON = \"cron\", // Recurring based on cron expression\n}\n\n/**\n * Task status enumeration\n */\nexport enum ScheduledTaskStatus {\n PENDING = \"pending\", // Waiting to be executed\n RUNNING = \"running\", // Currently executing\n COMPLETED = \"completed\", // Successfully completed (for ONCE type)\n FAILED = \"failed\", // Execution failed\n CANCELLED = \"cancelled\", // Manually cancelled\n PAUSED = \"paused\", // Paused (for CRON type)\n}\n\n/**\n * Schedule configuration interface\n */\nexport interface ScheduleConfig {\n name: string;\n description: string;\n type: ScheduleType;\n storage?: ScheduleStorage; // Optional storage for persistence\n options?: Record<string, any>;\n}\n\n/**\n * Scheduled task definition - fully serializable\n * Supports both one-time and cron-style recurring tasks\n */\nexport interface ScheduledTaskDefinition {\n taskId: string;\n taskType: string; // Maps to a registered handler\n payload: Record<string, any>; // JSON-serializable data passed to handler\n\n // Context fields for querying\n tenantId: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n\n // Execution configuration\n executionType: ScheduleExecutionType;\n\n // For ONCE type - execute at specific time or after delay\n executeAt?: number; // Timestamp when to execute\n delayMs?: number; // Original delay in milliseconds (for reference)\n\n // For CRON type - recurring schedule\n cronExpression?: string; // Cron format: \"0 9 * * *\" (min hour day month weekday)\n timezone?: string; // Timezone: \"Asia/Shanghai\", defaults to system timezone\n nextRunAt?: number; // Next calculated execution time\n lastRunAt?: number; // Last execution time\n\n // Execution tracking\n status: ScheduledTaskStatus;\n runCount: number; // How many times executed\n maxRuns?: number; // Max executions (null/undefined = infinite for cron, 1 for once)\n\n // Error handling\n retryCount: number; // Current retry count\n maxRetries: number; // Maximum retry attempts\n lastError?: string; // Last error message if failed\n\n // Timestamps\n createdAt: number;\n updatedAt: number;\n expiresAt?: number; // When to stop (for cron, optional)\n\n metadata?: Record<string, any>; // Additional metadata\n}\n\n/**\n * Task handler function type\n */\nexport type TaskHandler = (\n payload: Record<string, any>,\n taskInfo: ScheduledTaskDefinition\n) => void | Promise<void>;\n\n/**\n * Options for scheduling a one-time task\n */\nexport interface ScheduleOnceOptions {\n executeAt?: number; // Absolute timestamp to execute\n delayMs?: number; // OR relative delay from now\n maxRetries?: number; // Max retry attempts (default: 0)\n tenantId?: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n metadata?: Record<string, any>;\n}\n\n/**\n * Options for scheduling a cron task\n */\nexport interface ScheduleCronOptions {\n cronExpression: string; // Cron expression: \"0 9 * * *\"\n timezone?: string; // Timezone: \"Asia/Shanghai\"\n maxRuns?: number; // Max executions (undefined = infinite)\n expiresAt?: number; // Stop after this timestamp\n maxRetries?: number; // Max retry attempts per run (default: 0)\n tenantId?: string; // Tenant isolation\n assistantId?: string; // Which assistant created/owns this task\n threadId?: string; // Which thread this task belongs to\n metadata?: Record<string, any>;\n}\n\n/**\n * Schedule storage interface for persistence\n */\nexport interface ScheduleStorage {\n /**\n * Save a new task\n */\n save(task: ScheduledTaskDefinition): Promise<void>;\n\n /**\n * Get task by ID\n */\n get(taskId: string): Promise<ScheduledTaskDefinition | null>;\n\n /**\n * Update task\n */\n update(\n taskId: string,\n updates: Partial<ScheduledTaskDefinition>\n ): Promise<void>;\n\n /**\n * Delete task\n */\n delete(taskId: string): Promise<void>;\n\n /**\n * Get all pending/active tasks (for recovery)\n * Returns tasks with status: PENDING or PAUSED\n */\n getActiveTasks(): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by type\n */\n getTasksByType(taskType: string): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by status\n */\n getTasksByStatus(\n status: ScheduledTaskStatus\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by execution type\n */\n getTasksByExecutionType(\n executionType: ScheduleExecutionType\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by assistant ID\n */\n getTasksByAssistantId(\n assistantId: string\n ): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get tasks by thread ID\n */\n getTasksByThreadId(threadId: string): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Get all tasks (with optional filters)\n */\n getAllTasks(filters?: {\n tenantId?: string;\n status?: ScheduledTaskStatus;\n executionType?: ScheduleExecutionType;\n taskType?: string;\n assistantId?: string;\n threadId?: string;\n limit?: number;\n offset?: number;\n }): Promise<ScheduledTaskDefinition[]>;\n\n /**\n * Count tasks (with optional filters)\n */\n countTasks(filters?: {\n tenantId?: string;\n status?: ScheduledTaskStatus;\n executionType?: ScheduleExecutionType;\n taskType?: string;\n assistantId?: string;\n threadId?: string;\n }): Promise<number>;\n\n /**\n * Delete completed/cancelled tasks older than specified time\n * Useful for cleanup\n */\n deleteOldTasks(olderThanMs: number): Promise<number>;\n}\n\n/**\n * Schedule client interface\n */\nexport interface ScheduleClient {\n // ===== Handler Registration =====\n\n /**\n * Register a handler for a task type\n * Must be called before scheduling tasks of this type\n */\n registerHandler(taskType: string, handler: TaskHandler): void;\n\n /**\n * Unregister a handler\n */\n unregisterHandler(taskType: string): boolean;\n\n /**\n * Check if a handler is registered\n */\n hasHandler(taskType: string): boolean;\n\n /**\n * Get all registered handler types\n */\n getHandlerTypes(): string[];\n\n // ===== One-time Task Scheduling =====\n\n /**\n * Schedule a one-time task\n * @param taskId - Unique identifier for the task\n * @param taskType - Type of task (must have a registered handler)\n * @param payload - Data to pass to the handler (must be JSON-serializable)\n * @param options - Execution options (executeAt or delayMs required)\n */\n scheduleOnce(\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleOnceOptions\n ): Promise<boolean>;\n\n // ===== Cron Task Scheduling =====\n\n /**\n * Schedule a recurring cron task\n * @param taskId - Unique identifier for the task\n * @param taskType - Type of task (must have a registered handler)\n * @param payload - Data to pass to the handler (must be JSON-serializable)\n * @param options - Cron options (cronExpression required)\n */\n scheduleCron(\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleCronOptions\n ): Promise<boolean>;\n\n // ===== Task Management =====\n\n /**\n * Cancel a scheduled task\n */\n cancel(taskId: string): Promise<boolean>;\n\n /**\n * Pause a cron task (only for CRON type)\n */\n pause(taskId: string): Promise<boolean>;\n\n /**\n * Resume a paused cron task (only for CRON type)\n */\n resume(taskId: string): Promise<boolean>;\n\n /**\n * Check if a task exists\n */\n has(taskId: string): Promise<boolean>;\n\n /**\n * Get task information\n */\n getTask(taskId: string): Promise<ScheduledTaskDefinition | null>;\n\n /**\n * Get remaining time until next execution\n * Returns -1 if task not found or already executed\n */\n getRemainingTime(taskId: string): Promise<number>;\n\n /**\n * Get count of active tasks (pending + paused)\n */\n getActiveTaskCount(): Promise<number>;\n\n /**\n * Get all active task IDs\n */\n getActiveTaskIds(): Promise<string[]>;\n\n /**\n * Cancel all active tasks\n */\n cancelAll(): Promise<void>;\n\n // ===== Recovery =====\n\n /**\n * Restore active tasks from storage (call on service startup)\n * Re-schedules all pending tasks with their remaining time\n * Re-schedules all cron tasks for their next run\n * @returns Number of tasks restored\n */\n restore(): Promise<number>;\n\n // ===== Storage =====\n\n /**\n * Set the storage backend\n */\n setStorage(storage: ScheduleStorage): void;\n\n /**\n * Get current storage backend\n */\n getStorage(): ScheduleStorage | null;\n}\n\n/**\n * Schedule Lattice protocol interface\n */\nexport interface ScheduleLatticeProtocol\n extends BaseLatticeProtocol<ScheduleConfig, ScheduleClient> {\n // Handler registration\n registerHandler: (taskType: string, handler: TaskHandler) => void;\n unregisterHandler: (taskType: string) => boolean;\n hasHandler: (taskType: string) => boolean;\n getHandlerTypes: () => string[];\n\n // One-time task scheduling\n scheduleOnce: (\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleOnceOptions\n ) => Promise<boolean>;\n\n // Cron task scheduling\n scheduleCron: (\n taskId: string,\n taskType: string,\n payload: Record<string, any>,\n options: ScheduleCronOptions\n ) => Promise<boolean>;\n\n // Task management\n cancel: (taskId: string) => Promise<boolean>;\n pause: (taskId: string) => Promise<boolean>;\n resume: (taskId: string) => Promise<boolean>;\n has: (taskId: string) => Promise<boolean>;\n getTask: (taskId: string) => Promise<ScheduledTaskDefinition | null>;\n getRemainingTime: (taskId: string) => Promise<number>;\n getActiveTaskCount: () => Promise<number>;\n getActiveTaskIds: () => Promise<string[]>;\n cancelAll: () => Promise<void>;\n\n // Recovery\n restore: () => Promise<number>;\n}\n","/**\n * LoggerLatticeProtocol\n *\n * Logger Lattice protocol for logging management\n */\n\nimport { BaseLatticeProtocol } from \"./BaseLatticeProtocol\";\n\n/**\n * Logger service type enumeration\n */\nexport enum LoggerType {\n PINO = \"pino\",\n CONSOLE = \"console\",\n CUSTOM = \"custom\",\n}\n\n/**\n * Logger context interface\n */\nexport interface LoggerContext {\n \"x-user-id\"?: string;\n \"x-tenant-id\"?: string;\n \"x-request-id\"?: string;\n \"x-task-id\"?: string;\n \"x-thread-id\"?: string;\n [key: string]: any;\n}\n\n/**\n * Pino logger file transport options\n */\nexport interface PinoFileOptions {\n file?: string; // Log file path (e.g., \"./logs/app.log\" or \"./logs/app\")\n frequency?: \"daily\" | \"hourly\" | \"minutely\" | string; // Log rotation frequency\n mkdir?: boolean; // Create directory if not exists\n size?: string; // Max file size (e.g., \"10M\", \"100K\")\n maxFiles?: number; // Maximum number of log files to keep\n}\n\n/**\n * Logger configuration interface\n */\nexport interface LoggerConfig {\n name: string; // Logger name\n description?: string; // Logger description\n type: LoggerType; // Logger service type\n serviceName?: string; // Service name (e.g., \"lattice-gateway\")\n loggerName?: string; // Logger instance name (e.g., \"fastify-server\")\n context?: LoggerContext; // Initial context\n // File logging options (for PINO type)\n file?: string | PinoFileOptions; // Log file path or detailed file options\n // Additional options (e.g., pino config, custom logger settings)\n options?: Record<string, any>;\n}\n\n/**\n * Logger client interface\n */\nexport interface LoggerClient {\n info: (msg: string, obj?: object) => void;\n error: (msg: string, obj?: object | Error) => void;\n warn: (msg: string, obj?: object) => void;\n debug: (msg: string, obj?: object) => void;\n updateContext?: (context: Partial<LoggerContext>) => void;\n child?: (options: Partial<LoggerConfig>) => LoggerClient;\n}\n\n/**\n * Logger Lattice protocol interface\n */\nexport interface LoggerLatticeProtocol\n extends BaseLatticeProtocol<LoggerConfig, LoggerClient> {\n // Logger operations\n info: (msg: string, obj?: object) => void;\n error: (msg: string, obj?: object | Error) => void;\n warn: (msg: string, obj?: object) => void;\n debug: (msg: string, obj?: object) => void;\n updateContext?: (context: Partial<LoggerContext>) => void;\n child?: (options: Partial<LoggerConfig>) => LoggerClient;\n}\n","/**\n * MessageProtocol\n *\n */\n\n\n\n/**\n * Base message interface\n */\nexport interface BaseMessage {\n id: string; // Unique identifier for the message\n role: string; // Role of the sender (user, assistant, system, tool, developer)\n content?: string; // Optional text content of the message\n name?: string; // Optional name of the sender\n}\n\n/**\n * User message interface\n */\nexport interface UserMessage extends BaseMessage {\n role: \"human\";\n content: string; // Text input from the user\n files?: Array<{ name: string; id: string }>; // Optional files attached to the message\n}\n\n/**\n * Tool call interface\n */\nexport interface ToolCall {\n id: string; // Unique identifier for this tool call\n name: string; // Name of the tool/function to call\n args: Record<string, any>; // Arguments as an object\n type: \"tool_call\"; // Type of tool call\n response?: string; // Optional response from the tool execution\n}\n\n/**\n * Assistant message interface\n */\nexport interface AssistantMessage extends BaseMessage {\n role: \"ai\";\n content?: string; // Text response from the assistant (optional if using tool calls)\n tool_calls?: ToolCall[]; // Optional tool calls made by the assistant\n}\n\nexport interface InterruptMessage extends BaseMessage {\n type: \"interrupt\";\n value: any;\n}\n\n/**\n * System message interface\n */\nexport interface SystemMessage extends BaseMessage {\n role: \"system\";\n content: string; // Instructions or context for the assistant\n}\n\n/**\n * Tool message interface\n */\nexport interface ToolMessage extends BaseMessage {\n role: \"tool\";\n content: string; // Result from the tool execution\n tool_call_id: string; // ID of the tool call this message responds to\n}\n\n/**\n * Developer message interface\n */\nexport interface DeveloperMessage extends BaseMessage {\n role: \"developer\";\n content: string; // Content for development or debugging\n}\n\n/**\n * Message chunk type constants\n */\nexport const MessageChunkTypes = {\n HUMAN: 'human',\n AI: 'ai',\n TOOL: 'tool',\n INTERRUPT: 'interrupt',\n MESSAGE_COMPLETED: 'message_completed',\n MESSAGE_FAILED: 'message_failed',\n THREAD_IDLE: 'thread_idle',\n} as const;\n\nexport type MessageChunkType = typeof MessageChunkTypes[keyof typeof MessageChunkTypes];\n\nexport interface MessageChunk {\n type: MessageChunkType;\n data: {\n id: string;\n content?: string;\n tool_call_chunks?: Array<{\n name?: string;\n args?: string;\n id?: string;\n index: number;\n }>;\n tool_calls?: Array<{\n name: string;\n args: Record<string, any>;\n id: string;\n type: string;\n response?: string;\n }>;\n additional_kwargs?: {\n tool_calls?: Array<{\n function?: { name?: string; arguments?: any };\n id?: string;\n }>;\n };\n tool_call_id?: string;\n };\n}\n\n/**\n * Message type union\n */\nexport type Message =\n | UserMessage\n | AssistantMessage\n | SystemMessage\n | ToolMessage\n | DeveloperMessage;\n","/**\n * McpLatticeProtocol\n *\n * Model Context Protocol (MCP) lattice protocol for integrating MCP servers\n * with the Lattice framework. Provides standardized interfaces for MCP\n * client connections, tool discovery, and remote execution.\n */\n\nimport { BaseLatticeProtocol, LatticeMessage } from \"./BaseLatticeProtocol\";\n\n/**\n * MCP transport type\n */\nexport type McpTransportType = \"stdio\" | \"streamable_http\" | \"sse\";\n\n/**\n * MCP server configuration\n */\nexport interface McpServerConfig {\n /** Server name */\n name: string;\n /** Server version */\n version: string;\n /** Transport type */\n transport: McpTransportType;\n /** Command for stdio transport (e.g., \"npx\", \"python\") */\n command?: string;\n /** Arguments for stdio transport */\n args?: string[];\n /** URL for HTTP/SSE transport */\n url?: string;\n /** Environment variables */\n env?: Record<string, string>;\n /** Connection timeout in milliseconds */\n timeout?: number;\n /** Retry attempts on connection failure */\n retryAttempts?: number;\n}\n\n/**\n * MCP tool definition\n */\nexport interface McpTool {\n /** Tool name */\n name: string;\n /** Tool description */\n description: string;\n /** Input schema */\n inputSchema: {\n type: \"object\";\n properties: Record<string, any>;\n required?: string[];\n };\n /** Tool metadata */\n metadata?: Record<string, any>;\n}\n\n/**\n * MCP tool call result\n */\nexport interface McpToolResult {\n /** Whether the call was successful */\n success: boolean;\n /** Result content */\n content: Array<{\n type: \"text\" | \"image\" | \"audio\" | \"resource\";\n data: any;\n mimeType?: string;\n }>;\n /** Error message if failed */\n error?: string;\n /** Execution metadata */\n metadata?: {\n duration: number;\n tokens?: number;\n model?: string;\n };\n}\n\n/**\n * MCP client interface\n */\nexport interface McpClient {\n /** Client name */\n name: string;\n /** Client version */\n version: string;\n /** Server configuration */\n serverConfig: McpServerConfig;\n \n /**\n * Connect to MCP server\n */\n connect(): Promise<void>;\n \n /**\n * Disconnect from MCP server\n */\n disconnect(): Promise<void>;\n \n /**\n * Check if connected\n */\n isConnected(): boolean;\n \n /**\n * List available tools\n */\n listTools(): Promise<McpTool[]>;\n \n /**\n * Call a tool\n */\n callTool(name: string, arguments_: Record<string, any>): Promise<McpToolResult>;\n \n /**\n * Subscribe to server notifications\n */\n subscribe(topic: string, handler: (data: any) => void): void;\n \n /**\n * Unsubscribe from server notifications\n */\n unsubscribe(topic: string): void;\n \n /**\n * Get client statistics\n */\n getStats(): McpStats;\n \n /**\n * Get connection status\n */\n getStatus(): McpConnectionStatus;\n}\n\n/**\n * MCP client options\n */\nexport interface McpClientOptions {\n /** Client name */\n name: string;\n /** Client version */\n version: string;\n /** Server configuration */\n serverConfig: McpServerConfig;\n /** Auto-connect on initialization */\n autoConnect?: boolean;\n /** Error handler */\n onError?: (error: Error) => void;\n /** Connection status handler */\n onStatusChange?: (status: McpConnectionStatus) => void;\n}\n\n/**\n * MCP Lattice protocol interface\n */\nexport interface McpLatticeProtocol\n extends BaseLatticeProtocol<McpServerConfig, McpClient> {\n /**\n * Server configuration\n */\n config: McpServerConfig;\n \n /**\n * MCP client instance\n */\n client: McpClient;\n \n /**\n * Connect to MCP server\n */\n connect(): Promise<void>;\n \n /**\n * Disconnect from MCP server\n */\n disconnect(): Promise<void>;\n \n /**\n * Get available tools\n */\n getTools(): Promise<McpTool[]>;\n \n /**\n * Execute a tool\n */\n executeTool(\n name: string,\n arguments_: Record<string, any>\n ): Promise<McpToolResult>;\n \n /**\n * Execute with automatic retries\n */\n executeToolWithRetry(\n name: string,\n arguments_: Record<string, any>,\n maxRetries?: number\n ): Promise<McpToolResult>;\n \n /**\n * Get protocol version\n */\n getProtocolVersion(): string;\n \n /**\n * Health check\n */\n healthCheck(): Promise<boolean>;\n}\n\n/**\n * MCP message types\n */\nexport enum McpMessageType {\n CONNECT = \"mcp:connect\",\n DISCONNECT = \"mcp:disconnect\",\n LIST_TOOLS = \"mcp:list_tools\",\n CALL_TOOL = \"mcp:call_tool\",\n TOOL_RESULT = \"mcp:tool_result\",\n NOTIFICATION = \"mcp:notification\",\n ERROR = \"mcp:error\",\n HEALTH_CHECK = \"mcp:health_check\",\n}\n\n/**\n * MCP Lattice message\n */\nexport interface McpLatticeMessage extends LatticeMessage {\n type: McpMessageType;\n payload: {\n toolName?: string;\n arguments?: Record<string, any>;\n result?: McpToolResult;\n tools?: McpTool[];\n error?: string;\n };\n}\n\n/**\n * MCP connection status\n */\nexport type McpConnectionStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"reconnecting\"\n | \"error\";\n\n/**\n * MCP statistics\n */\nexport interface McpStats {\n totalCalls: number;\n successfulCalls: number;\n failedCalls: number;\n averageLatency: number;\n lastCallTimestamp: number;\n}\n","/**\n * A2AProtocol - Google Agent-to-Agent Protocol type definitions\n *\n * Based on the A2A open protocol spec for AI agent interoperability.\n * @see https://github.com/google/A2A\n */\n\n// ─── Agent Card ───────────────────────────────────────────────────────────\n\nexport interface A2ASkill {\n id: string;\n name: string;\n description: string;\n tags: string[];\n examples: string[];\n}\n\nexport interface A2ACapabilities {\n streaming: boolean;\n pushNotifications: boolean;\n stateTransitionHistory: boolean;\n}\n\nexport interface A2AProvider {\n organization: string;\n url?: string;\n}\n\nexport interface AgentCard {\n name: string;\n description: string;\n url: string;\n provider: A2AProvider;\n version: string;\n documentationUrl?: string;\n capabilities: A2ACapabilities;\n defaultInputModes: string[];\n defaultOutputModes: string[];\n skills: A2ASkill[];\n}\n\n// ─── Artifact / Part ──────────────────────────────────────────────────────\n\nexport interface A2ATextPart {\n type: \"text\";\n text: string;\n}\n\nexport interface A2AFilePart {\n type: \"file\";\n file: {\n name: string;\n mimeType: string;\n bytes?: string;\n uri?: string;\n };\n}\n\nexport interface A2ADataPart {\n type: \"data\";\n data: Record<string, unknown>;\n}\n\nexport type A2APart = A2ATextPart | A2AFilePart | A2ADataPart;\n\n// ─── Message ──────────────────────────────────────────────────────────────\n\nexport interface A2AMessage {\n role: \"user\" | \"agent\";\n parts: A2APart[];\n messageId?: string;\n contextId?: string;\n referenceTaskIds?: string[];\n metadata?: Record<string, unknown>;\n}\n\n// ─── Task ─────────────────────────────────────────────────────────────────\n\nexport type A2ATaskState =\n | \"working\"\n | \"input-required\"\n | \"completed\"\n | \"failed\"\n | \"canceled\"\n | \"rejected\";\n\nexport interface A2ATaskStatus {\n state: A2ATaskState;\n message?: A2AMessage;\n timestamp: string;\n}\n\nexport interface A2AArtifact {\n name?: string;\n description?: string;\n parts: A2APart[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2ATask {\n id: string;\n sessionId?: string;\n contextId?: string;\n status: A2ATaskStatus;\n artifacts: A2AArtifact[];\n history?: A2AMessage[];\n metadata?: Record<string, unknown>;\n}\n\n// ─── Request / Response ───────────────────────────────────────────────────\n\nexport interface A2ATaskSendRequest {\n id?: string;\n sessionId?: string;\n message: A2AMessage;\n pushNotification?: A2APushNotification;\n historyLength?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2APushNotification {\n url: string;\n token?: string;\n}\n\nexport interface A2ATaskUpdatePayload {\n id: string;\n sessionId?: string;\n contextId?: string;\n status: A2ATaskStatus;\n final?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface A2ATaskArtifactUpdatePayload {\n id: string;\n sessionId?: string;\n contextId?: string;\n artifact: A2AArtifact;\n final?: boolean;\n metadata?: Record<string, unknown>;\n}\n\n// ─── SSE Events ───────────────────────────────────────────────────────────\n\nexport type A2ASSEEvent =\n | { event: \"task\"; data: A2ATaskUpdatePayload }\n | { event: \"status-update\"; data: A2ATaskUpdatePayload }\n | { event: \"artifact-update\"; data: A2ATaskArtifactUpdatePayload }\n | { event: \"error\"; data: { code: string; message: string } };\n\n// ─── Config ───────────────────────────────────────────────────────────────\n\nexport interface A2AConfig {\n agentName: string;\n agentDescription: string;\n agentUrl: string;\n organization: string;\n version?: string;\n capabilities?: Partial<A2ACapabilities>;\n defaultInputModes?: string[];\n defaultOutputModes?: string[];\n skills?: A2ASkill[];\n apiKeyMap: Map<string, A2AApiKeyEntry>;\n}\n\nexport interface A2AApiKeyEntry {\n key: string;\n tenantId?: string;\n projectId?: string;\n workspaceId?: string;\n}\n\nexport const A2A_DEFAULT_CAPABILITIES: A2ACapabilities = {\n streaming: true,\n pushNotifications: false,\n stateTransitionHistory: false,\n};\n\nexport const A2A_DEFAULT_INPUT_MODES = [\"text\", \"text/plain\"];\nexport const A2A_DEFAULT_OUTPUT_MODES = [\"text\", \"text/plain\", \"text/markdown\"];\n\nexport interface A2AAuthContext {\n authenticated: boolean;\n apiKey?: string;\n tenantId?: string;\n projectId?: string;\n workspaceId?: string;\n source?: \"bearer\" | \"x-api-key\";\n}\n"],"mappings":";AAaO,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,gBAAa;AAEb,EAAAA,WAAA,gBAAa;AAEb,EAAAA,WAAA,cAAW;AARD,SAAAA;AAAA,GAAA;AAkOL,SAAS,kBACd,QAC2B;AAC3B,SAAO,OAAO,SAAS;AACzB;AA4FO,SAAS,uBACd,QACgC;AAChC,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,sBACd,QAC+B;AAC/B,SAAO,OAAO,SAAS;AACzB;AA4BO,SAAS,SAAS,QAAqD;AAC5E,SAAO;AACT;AAKO,SAAS,kBACd,QAC2B;AAC3B,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,wBACd,QACiC;AACjC,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,mBAAmB,QAA+B;AAChE,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO,OAAO,SAAS,CAAC;AAAA,EAC1B;AACA,SAAO,CAAC;AACV;AAKO,SAAS,uBAAuB,QAA+B;AACpE,MAAI,kBAAkB,MAAM,KAAK,wBAAwB,MAAM,GAAG;AAChE,WAAO,OAAO,aAAa,CAAC;AAAA,EAC9B;AACA,SAAO,CAAC;AACV;;;ACrZO,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,aAAU;AALA,SAAAA;AAAA,GAAA;;;ACAL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AAVC,SAAAA;AAAA,GAAA;;;ACAL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;;;ACEL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,WAAQ;AAHE,SAAAA;AAAA,GAAA;AASL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,UAAO;AACP,EAAAA,uBAAA,UAAO;AAFG,SAAAA;AAAA,GAAA;AAQL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,YAAS;AACT,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,YAAS;AANC,SAAAA;AAAA,GAAA;;;ACnBL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;;;ACoEL,IAAM,oBAAoB;AAAA,EAC/B,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,aAAa;AACf;;;ACgIO,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,gBAAa;AACb,EAAAA,gBAAA,gBAAa;AACb,EAAAA,gBAAA,eAAY;AACZ,EAAAA,gBAAA,iBAAc;AACd,EAAAA,gBAAA,kBAAe;AACf,EAAAA,gBAAA,WAAQ;AACR,EAAAA,gBAAA,kBAAe;AARL,SAAAA;AAAA,GAAA;;;AC1CL,IAAM,2BAA4C;AAAA,EACvD,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,wBAAwB;AAC1B;AAEO,IAAM,0BAA0B,CAAC,QAAQ,YAAY;AACrD,IAAM,2BAA2B,CAAC,QAAQ,cAAc,eAAe;","names":["AgentType","MemoryType","UIComponentType","QueueType","ScheduleType","ScheduleExecutionType","ScheduledTaskStatus","LoggerType","McpMessageType"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiom-lattice/protocols",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
4
4
  "description": "Unified protocol type definitions for Axiom Lattice framework",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -28,7 +28,9 @@
28
28
  "devDependencies": {
29
29
  "@types/jest": "^29.5.12",
30
30
  "@types/node": "^20.11.24",
31
- "eslint": "^8",
31
+ "@typescript-eslint/eslint-plugin": "^7.2.0",
32
+ "@typescript-eslint/parser": "^7.2.0",
33
+ "eslint": "^8.57.0",
32
34
  "rimraf": "^5.0.5",
33
35
  "tsup": "^8.0.1",
34
36
  "typescript": "^5.4.2"
@@ -71,6 +71,14 @@ interface BaseAgentConfig {
71
71
  * ```
72
72
  */
73
73
  responseFormat?: any;
74
+ /**
75
+ * Arbitrary metadata as string-to-string map (optional).
76
+ * Mirrors the skill metadata convention. Useful for:
77
+ * - trust tier (e.g. verified: "human-reviewed" | "machine-confirmed")
78
+ * - version tracking (e.g. version: "1.2")
79
+ * - provenance (e.g. source material, learning run id)
80
+ */
81
+ metadata?: Record<string, string>;
74
82
  }
75
83
 
76
84
  export type AvailableModule = "filesystem" | "code_eval" | "browser";
@@ -32,6 +32,23 @@ export interface EvalSuite {
32
32
  caseCount?: number;
33
33
  }
34
34
 
35
+ /**
36
+ * How an eval case handles a HITL interrupt (agent pausing for human input).
37
+ *
38
+ * - `stop` (default): leave the case interrupted at the pause — the judge
39
+ * evaluates the pause itself as business behavior.
40
+ * - `auto-approve`: resume the agent with an approval so the flow AFTER the
41
+ * pause can be tested (e.g. payment execution).
42
+ * - `auto-reject`: resume with a rejection so the rejection path is tested.
43
+ * - `canned-response`: resume with the exact `value` (simulates a specific
44
+ * human reply). `value` is also the override for auto-approve/auto-reject
45
+ * (defaults: "同意" / "拒绝").
46
+ */
47
+ export interface InterruptPolicy {
48
+ mode: "stop" | "auto-approve" | "auto-reject" | "canned-response";
49
+ value?: string;
50
+ }
51
+
35
52
  export interface CreateEvalSuiteRequest {
36
53
  name: string;
37
54
  }
@@ -39,6 +56,13 @@ export interface CreateEvalSuiteRequest {
39
56
  export interface CreateEvalRunRequest {
40
57
  totalCases: number;
41
58
  concurrency: number;
59
+ /** Mark this run as a hold-out validation run (results withheld per-case) */
60
+ holdout?: boolean;
61
+ /** Workspace-project environment the run executed in (caller's runConfig) */
62
+ envProjectId?: string;
63
+ envWorkspaceId?: string;
64
+ /** Task this run belongs to (training round association) */
65
+ taskId?: string;
42
66
  }
43
67
 
44
68
  export interface EvalCase {
@@ -51,6 +75,7 @@ export interface EvalCase {
51
75
  outputType: 'file_content' | 'message_content';
52
76
  contentAssertion: string;
53
77
  rubrics?: Array<{ name: string; weight: number; description: string }>;
78
+ interruptPolicy?: InterruptPolicy;
54
79
  createdAt: Date;
55
80
  updatedAt: Date;
56
81
  }
@@ -62,6 +87,7 @@ export interface CreateEvalCaseRequest {
62
87
  outputType: 'file_content' | 'message_content';
63
88
  contentAssertion: string;
64
89
  rubrics?: Array<{ name: string; weight: number; description: string }>;
90
+ interruptPolicy?: InterruptPolicy;
65
91
  }
66
92
 
67
93
  export interface EvalRun {
@@ -73,8 +99,26 @@ export interface EvalRun {
73
99
  totalCases: number;
74
100
  passedCases: number;
75
101
  failedCases: number;
102
+ /** Cases that hit a HITL interrupt (agent requested human input) — not judged. */
103
+ interruptedCases?: number;
76
104
  avgScore: number;
77
105
  error?: string;
106
+ /**
107
+ * When true, this run executed ONLY the hold-out validation suite.
108
+ * Per-case results of holdout runs are withheld from agents (aggregate
109
+ * only) to preserve hold-out isolation — the agent must not learn which
110
+ * validation cases failed.
111
+ */
112
+ holdout?: boolean;
113
+ /**
114
+ * The workspace-project environment (caller's runConfig) this run
115
+ * executed in. Used to answer "which project environment was this run
116
+ * executed against" for observability.
117
+ */
118
+ envProjectId?: string;
119
+ envWorkspaceId?: string;
120
+ /** Training task this run belongs to (round association, 1 task : N runs) */
121
+ taskId?: string;
78
122
  createdAt: Date;
79
123
  startedAt?: Date;
80
124
  completedAt?: Date;
@@ -93,6 +137,12 @@ export interface EvalRunResult {
93
137
  messages?: Array<{ role: string; content: string; id?: string }>;
94
138
  logs?: Array<{ timestamp: string; level: string; message: string; data?: unknown }>;
95
139
  error?: string;
140
+ /**
141
+ * True when the case hit a HITL interrupt: the agent requested human input
142
+ * before producing an answer, so the case was NOT judged (neither pass nor
143
+ * fail). `pass` is false and `score` is 0 for such rows.
144
+ */
145
+ interrupted?: boolean;
96
146
  createdAt: Date;
97
147
  }
98
148
 
@@ -127,7 +177,7 @@ export interface EvalStore {
127
177
  getRunsByTenant(tenantId: string, opts?: { projectId?: string; status?: string }): Promise<EvalRun[]>;
128
178
  getRunById(tenantId: string, id: string): Promise<EvalRun | null>;
129
179
  createRun(tenantId: string, projectId: string, id: string, data: CreateEvalRunRequest): Promise<EvalRun>;
130
- updateRunStatus(tenantId: string, id: string, updates: { status?: EvalRun['status']; passedCases?: number; failedCases?: number; avgScore?: number; error?: string; completedAt?: Date }): Promise<EvalRun | null>;
180
+ updateRunStatus(tenantId: string, id: string, updates: { status?: EvalRun['status']; passedCases?: number; failedCases?: number; interruptedCases?: number; avgScore?: number; error?: string; completedAt?: Date }): Promise<EvalRun | null>;
131
181
  deleteRun(tenantId: string, id: string): Promise<boolean>;
132
182
 
133
183
  getResultsByRun(tenantId: string, runId: string): Promise<EvalRunResult[]>;
@@ -95,8 +95,14 @@ export interface PluginMeta {
95
95
  configSchema?: Record<string, unknown>;
96
96
  /** 默认配置 */
97
97
  defaultConfig?: Record<string, unknown>;
98
- /** 推荐的配套插件,在前端中间件配置 UI 中展示为提示 */
98
+ /** 推荐配置的 companion 插件 */
99
99
  recommends?: string[];
100
+ /**
101
+ * 能力分类(可选,驱动前端 Capabilities/中间件分区的 Tab 分组)。
102
+ * 内置约定值:data | execution | workflow | assistant。
103
+ * 第三方插件可自定义分类名,前端会原样显示;未提供时归入 "Other"。
104
+ */
105
+ category?: string;
100
106
  }
101
107
 
102
108
  /**
@@ -113,6 +113,9 @@ export interface TaskItem {
113
113
  * Reason for task failure (when status is 'failed')
114
114
  */
115
115
  failureReason?: string;
116
+
117
+ /** File references attached to this task */
118
+ files?: TaskFileRef[];
116
119
  }
117
120
 
118
121
  /**
@@ -203,6 +206,28 @@ export interface CreateTaskRequest {
203
206
  * Reason for task failure (when status is 'failed')
204
207
  */
205
208
  failureReason?: string;
209
+
210
+ /** File references attached to this task */
211
+ files?: TaskFileRef[];
212
+ }
213
+
214
+ /**
215
+ * A file reference attached to a task — a URI association, not file management.
216
+ * The file body is managed by the workspace/sandbox systems; tasks only record
217
+ * the reference so they can display and hand files to agents.
218
+ */
219
+ export interface TaskFileRef {
220
+ /**
221
+ * Uniquely locates the resource:
222
+ * - http(s)://... → external URL
223
+ * - /s/:token → shared resource
224
+ * - anything else → sandbox path (e.g. /project/uploads/foo.pdf)
225
+ */
226
+ uri: string;
227
+ /** Display name (useful when uri is a uuid or bare path) */
228
+ name?: string;
229
+ /** Who attached the file: the user (reference material) or an agent (artifact) */
230
+ addedBy?: "user" | "agent";
206
231
  }
207
232
 
208
233
  /**
@@ -293,6 +318,9 @@ export interface UpdateTaskRequest {
293
318
  * Reason for task failure (when status is 'failed')
294
319
  */
295
320
  failureReason?: string;
321
+
322
+ /** File references attached to this task */
323
+ files?: TaskFileRef[];
296
324
  }
297
325
 
298
326
  /**