agent-world 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -7
- package/dist/cli/commands.d.ts +109 -0
- package/dist/cli/commands.js +2024 -0
- package/dist/cli/display.d.ts +124 -0
- package/dist/cli/display.js +381 -0
- package/dist/cli/hitl.d.ts +33 -0
- package/dist/cli/hitl.js +81 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/stream.d.ts +41 -0
- package/dist/cli/stream.js +222 -0
- package/dist/core/activity-tracker.d.ts +16 -0
- package/dist/core/activity-tracker.d.ts.map +1 -0
- package/dist/core/activity-tracker.js +91 -0
- package/dist/core/activity-tracker.js.map +1 -0
- package/dist/core/ai-commands.d.ts +16 -0
- package/dist/core/ai-commands.d.ts.map +1 -0
- package/dist/core/ai-commands.js +24 -0
- package/dist/core/ai-commands.js.map +1 -0
- package/dist/core/ai-sdk-patch.d.ts +24 -0
- package/dist/core/ai-sdk-patch.d.ts.map +1 -0
- package/dist/core/ai-sdk-patch.js +169 -0
- package/dist/core/ai-sdk-patch.js.map +1 -0
- package/dist/core/anthropic-direct.d.ts +52 -0
- package/dist/core/anthropic-direct.d.ts.map +1 -0
- package/dist/core/anthropic-direct.js +301 -0
- package/dist/core/anthropic-direct.js.map +1 -0
- package/dist/core/approval-cache.d.ts +104 -0
- package/dist/core/approval-cache.d.ts.map +1 -0
- package/dist/core/approval-cache.js +150 -0
- package/dist/core/approval-cache.js.map +1 -0
- package/dist/core/chat-constants.d.ts +20 -0
- package/dist/core/chat-constants.d.ts.map +1 -0
- package/dist/core/chat-constants.js +22 -0
- package/dist/core/chat-constants.js.map +1 -0
- package/dist/core/create-agent-tool.d.ts +66 -0
- package/dist/core/create-agent-tool.d.ts.map +1 -0
- package/dist/core/create-agent-tool.js +212 -0
- package/dist/core/create-agent-tool.js.map +1 -0
- package/dist/core/events/approval-checker.d.ts +61 -0
- package/dist/core/events/approval-checker.d.ts.map +1 -0
- package/dist/core/events/approval-checker.js +226 -0
- package/dist/core/events/approval-checker.js.map +1 -0
- package/dist/core/events/index.d.ts +25 -0
- package/dist/core/events/index.d.ts.map +1 -0
- package/dist/core/events/index.js +30 -0
- package/dist/core/events/index.js.map +1 -0
- package/dist/core/events/memory-manager.d.ts +73 -0
- package/dist/core/events/memory-manager.d.ts.map +1 -0
- package/dist/core/events/memory-manager.js +1218 -0
- package/dist/core/events/memory-manager.js.map +1 -0
- package/dist/core/events/mention-logic.d.ts +39 -0
- package/dist/core/events/mention-logic.d.ts.map +1 -0
- package/dist/core/events/mention-logic.js +163 -0
- package/dist/core/events/mention-logic.js.map +1 -0
- package/dist/core/events/orchestrator.d.ts +69 -0
- package/dist/core/events/orchestrator.d.ts.map +1 -0
- package/dist/core/events/orchestrator.js +883 -0
- package/dist/core/events/orchestrator.js.map +1 -0
- package/dist/core/events/persistence.d.ts +41 -0
- package/dist/core/events/persistence.d.ts.map +1 -0
- package/dist/core/events/persistence.js +296 -0
- package/dist/core/events/persistence.js.map +1 -0
- package/dist/core/events/publishers.d.ts +81 -0
- package/dist/core/events/publishers.d.ts.map +1 -0
- package/dist/core/events/publishers.js +272 -0
- package/dist/core/events/publishers.js.map +1 -0
- package/dist/core/events/subscribers.d.ts +45 -0
- package/dist/core/events/subscribers.d.ts.map +1 -0
- package/dist/core/events/subscribers.js +288 -0
- package/dist/core/events/subscribers.js.map +1 -0
- package/dist/core/events/tool-bridge-logging.d.ts +28 -0
- package/dist/core/events/tool-bridge-logging.d.ts.map +1 -0
- package/dist/core/events/tool-bridge-logging.js +94 -0
- package/dist/core/events/tool-bridge-logging.js.map +1 -0
- package/dist/core/events-metadata.d.ts +72 -0
- package/dist/core/events-metadata.d.ts.map +1 -0
- package/dist/core/events-metadata.js +167 -0
- package/dist/core/events-metadata.js.map +1 -0
- package/dist/core/events.d.ts +186 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +1248 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/export.d.ts +106 -0
- package/dist/core/export.d.ts.map +1 -0
- package/dist/core/export.js +705 -0
- package/dist/core/export.js.map +1 -0
- package/dist/core/file-tools.d.ts +114 -0
- package/dist/core/file-tools.d.ts.map +1 -0
- package/dist/core/file-tools.js +370 -0
- package/dist/core/file-tools.js.map +1 -0
- package/dist/core/google-direct.d.ts +58 -0
- package/dist/core/google-direct.d.ts.map +1 -0
- package/dist/core/google-direct.js +298 -0
- package/dist/core/google-direct.js.map +1 -0
- package/dist/core/hitl.d.ts +54 -0
- package/dist/core/hitl.d.ts.map +1 -0
- package/dist/core/hitl.js +153 -0
- package/dist/core/hitl.js.map +1 -0
- package/dist/core/index.d.ts +59 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +70 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/llm-config.d.ts +128 -0
- package/dist/core/llm-config.d.ts.map +1 -0
- package/dist/core/llm-config.js +164 -0
- package/dist/core/llm-config.js.map +1 -0
- package/dist/core/llm-manager.d.ts +163 -0
- package/dist/core/llm-manager.d.ts.map +1 -0
- package/dist/core/llm-manager.js +669 -0
- package/dist/core/llm-manager.js.map +1 -0
- package/dist/core/load-skill-tool.d.ts +55 -0
- package/dist/core/load-skill-tool.d.ts.map +1 -0
- package/dist/core/load-skill-tool.js +468 -0
- package/dist/core/load-skill-tool.js.map +1 -0
- package/dist/core/logger.d.ts +88 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +358 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/managers.d.ts +131 -0
- package/dist/core/managers.d.ts.map +1 -0
- package/dist/core/managers.js +1223 -0
- package/dist/core/managers.js.map +1 -0
- package/dist/core/mcp-server-registry.d.ts +304 -0
- package/dist/core/mcp-server-registry.d.ts.map +1 -0
- package/dist/core/mcp-server-registry.js +1769 -0
- package/dist/core/mcp-server-registry.js.map +1 -0
- package/dist/core/mcp-tools.d.ts +56 -0
- package/dist/core/mcp-tools.d.ts.map +1 -0
- package/dist/core/mcp-tools.js +186 -0
- package/dist/core/mcp-tools.js.map +1 -0
- package/dist/core/message-prep.d.ts +81 -0
- package/dist/core/message-prep.d.ts.map +1 -0
- package/dist/core/message-prep.js +223 -0
- package/dist/core/message-prep.js.map +1 -0
- package/dist/core/message-processing-control.d.ts +54 -0
- package/dist/core/message-processing-control.d.ts.map +1 -0
- package/dist/core/message-processing-control.js +139 -0
- package/dist/core/message-processing-control.js.map +1 -0
- package/dist/core/openai-direct.d.ts +80 -0
- package/dist/core/openai-direct.d.ts.map +1 -0
- package/dist/core/openai-direct.js +374 -0
- package/dist/core/openai-direct.js.map +1 -0
- package/dist/core/shell-cmd-tool.d.ts +235 -0
- package/dist/core/shell-cmd-tool.d.ts.map +1 -0
- package/dist/core/shell-cmd-tool.js +1157 -0
- package/dist/core/shell-cmd-tool.js.map +1 -0
- package/dist/core/shell-process-registry.d.ts +88 -0
- package/dist/core/shell-process-registry.d.ts.map +1 -0
- package/dist/core/shell-process-registry.js +309 -0
- package/dist/core/shell-process-registry.js.map +1 -0
- package/dist/core/skill-registry.d.ts +75 -0
- package/dist/core/skill-registry.d.ts.map +1 -0
- package/dist/core/skill-registry.js +369 -0
- package/dist/core/skill-registry.js.map +1 -0
- package/dist/core/skill-script-runner.d.ts +89 -0
- package/dist/core/skill-script-runner.d.ts.map +1 -0
- package/dist/core/skill-script-runner.js +274 -0
- package/dist/core/skill-script-runner.js.map +1 -0
- package/dist/core/skill-selector.d.ts +65 -0
- package/dist/core/skill-selector.d.ts.map +1 -0
- package/dist/core/skill-selector.js +190 -0
- package/dist/core/skill-selector.js.map +1 -0
- package/dist/core/skill-settings.d.ts +20 -0
- package/dist/core/skill-settings.d.ts.map +1 -0
- package/dist/core/skill-settings.js +40 -0
- package/dist/core/skill-settings.js.map +1 -0
- package/dist/core/storage/agent-storage.d.ts +134 -0
- package/dist/core/storage/agent-storage.d.ts.map +1 -0
- package/dist/core/storage/agent-storage.js +498 -0
- package/dist/core/storage/agent-storage.js.map +1 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts +100 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js +494 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/index.d.ts +31 -0
- package/dist/core/storage/eventStorage/index.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/index.js +31 -0
- package/dist/core/storage/eventStorage/index.js.map +1 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +87 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js +244 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +45 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.js +301 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/types.d.ts +142 -0
- package/dist/core/storage/eventStorage/types.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/types.js +43 -0
- package/dist/core/storage/eventStorage/types.js.map +1 -0
- package/dist/core/storage/eventStorage/validation.d.ts +30 -0
- package/dist/core/storage/eventStorage/validation.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/validation.js +68 -0
- package/dist/core/storage/eventStorage/validation.js.map +1 -0
- package/dist/core/storage/legacy-migrations.d.ts +45 -0
- package/dist/core/storage/legacy-migrations.d.ts.map +1 -0
- package/dist/core/storage/legacy-migrations.js +295 -0
- package/dist/core/storage/legacy-migrations.js.map +1 -0
- package/dist/core/storage/memory-storage.d.ts +105 -0
- package/dist/core/storage/memory-storage.d.ts.map +1 -0
- package/dist/core/storage/memory-storage.js +415 -0
- package/dist/core/storage/memory-storage.js.map +1 -0
- package/dist/core/storage/migration-runner.d.ts +96 -0
- package/dist/core/storage/migration-runner.d.ts.map +1 -0
- package/dist/core/storage/migration-runner.js +306 -0
- package/dist/core/storage/migration-runner.js.map +1 -0
- package/dist/core/storage/queue-storage.d.ts +147 -0
- package/dist/core/storage/queue-storage.d.ts.map +1 -0
- package/dist/core/storage/queue-storage.js +290 -0
- package/dist/core/storage/queue-storage.js.map +1 -0
- package/dist/core/storage/skill-storage.d.ts +136 -0
- package/dist/core/storage/skill-storage.d.ts.map +1 -0
- package/dist/core/storage/skill-storage.js +474 -0
- package/dist/core/storage/skill-storage.js.map +1 -0
- package/dist/core/storage/sqlite-schema.d.ts +95 -0
- package/dist/core/storage/sqlite-schema.d.ts.map +1 -0
- package/dist/core/storage/sqlite-schema.js +156 -0
- package/dist/core/storage/sqlite-schema.js.map +1 -0
- package/dist/core/storage/sqlite-storage.d.ts +146 -0
- package/dist/core/storage/sqlite-storage.d.ts.map +1 -0
- package/dist/core/storage/sqlite-storage.js +709 -0
- package/dist/core/storage/sqlite-storage.js.map +1 -0
- package/dist/core/storage/storage-factory.d.ts +61 -0
- package/dist/core/storage/storage-factory.d.ts.map +1 -0
- package/dist/core/storage/storage-factory.js +794 -0
- package/dist/core/storage/storage-factory.js.map +1 -0
- package/dist/core/storage/validation.d.ts +36 -0
- package/dist/core/storage/validation.d.ts.map +1 -0
- package/dist/core/storage/validation.js +79 -0
- package/dist/core/storage/validation.js.map +1 -0
- package/dist/core/storage/world-storage.d.ts +114 -0
- package/dist/core/storage/world-storage.d.ts.map +1 -0
- package/dist/core/storage/world-storage.js +378 -0
- package/dist/core/storage/world-storage.js.map +1 -0
- package/dist/core/subscription.d.ts +43 -0
- package/dist/core/subscription.d.ts.map +1 -0
- package/dist/core/subscription.js +227 -0
- package/dist/core/subscription.js.map +1 -0
- package/dist/core/tool-utils.d.ts +80 -0
- package/dist/core/tool-utils.d.ts.map +1 -0
- package/dist/core/tool-utils.js +273 -0
- package/dist/core/tool-utils.js.map +1 -0
- package/dist/core/types.d.ts +595 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +158 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +138 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +478 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core/world-class.d.ts +43 -0
- package/dist/core/world-class.d.ts.map +1 -0
- package/dist/core/world-class.js +90 -0
- package/dist/core/world-class.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/public/assets/agent-sprites-DJFgj-zP.png +0 -0
- package/dist/public/assets/border-KHK37r8y.svg +83 -0
- package/dist/public/assets/index-C9kPXL6G.css +1 -0
- package/dist/public/assets/index-DOQEHGWt.js +96 -0
- package/dist/public/index.html +21 -0
- package/dist/server/api.d.ts +2 -0
- package/dist/server/api.js +1124 -0
- package/dist/server/index.d.ts +29 -0
- package/dist/server/sse-handler.d.ts +62 -0
- package/dist/server/sse-handler.js +234 -0
- package/package.json +15 -3
- package/scripts/launch-electron.js +0 -58
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Direct Integration Module - Pure Client (LLM Provider Refactoring Phase 3)
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Direct Anthropic API integration bypassing AI SDK tool calling issues
|
|
6
|
+
* - Streaming and non-streaming responses returning LLMResponse
|
|
7
|
+
* - Function/tool calling detection (NO execution)
|
|
8
|
+
* - Proper error handling and retry logic
|
|
9
|
+
* - Browser-safe configuration injection
|
|
10
|
+
* - Pure client: only calls APIs and returns structured data
|
|
11
|
+
*
|
|
12
|
+
* Implementation Details:
|
|
13
|
+
* - Uses official @anthropic-ai/sdk package for reliable API access
|
|
14
|
+
* - Converts AI SDK message format to Anthropic format
|
|
15
|
+
* - Returns LLMResponse with type='text' or type='tool_calls'
|
|
16
|
+
* - Streaming support with chunk-by-chunk processing via onChunk callback
|
|
17
|
+
* - Error handling with descriptive messages
|
|
18
|
+
* - Configuration injection from llm-config module
|
|
19
|
+
* - NO event emission, NO storage, NO tool execution
|
|
20
|
+
*
|
|
21
|
+
* Recent Changes:
|
|
22
|
+
* - 2026-02-13: Added abort-signal support for streaming and non-streaming calls to enable chat stop cancellation.
|
|
23
|
+
* - 2025-11-09: Phase 3 - Removed ALL tool execution logic (~200 lines)
|
|
24
|
+
* - Provider is now a pure client - only API calls and data transformation
|
|
25
|
+
* - Returns LLMResponse interface with type discriminator
|
|
26
|
+
* - Filters invalid tool calls (empty/missing names) and logs warnings
|
|
27
|
+
* - Includes usage tracking (input_tokens, output_tokens) for non-streaming
|
|
28
|
+
* - 2025-11-08: Removed ALL event emission from provider
|
|
29
|
+
* - Streaming uses onChunk callback instead of direct SSE emission
|
|
30
|
+
*/
|
|
31
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
32
|
+
import { getLLMProviderConfig } from './llm-config.js';
|
|
33
|
+
import { createCategoryLogger } from './logger.js';
|
|
34
|
+
const logger = createCategoryLogger('anthropic');
|
|
35
|
+
const mcpLogger = createCategoryLogger('mcp.execution');
|
|
36
|
+
/**
|
|
37
|
+
* Anthropic client factory
|
|
38
|
+
*/
|
|
39
|
+
export function createAnthropicClient(config) {
|
|
40
|
+
return new Anthropic({
|
|
41
|
+
apiKey: config.apiKey,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert AI SDK messages to Anthropic format
|
|
46
|
+
*/
|
|
47
|
+
function convertMessagesToAnthropic(messages) {
|
|
48
|
+
return messages
|
|
49
|
+
.filter(msg => msg.role !== 'system') // System prompt handled separately
|
|
50
|
+
.map(msg => {
|
|
51
|
+
if (msg.role === 'tool') {
|
|
52
|
+
return {
|
|
53
|
+
role: 'user',
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: 'tool_result',
|
|
57
|
+
tool_use_id: msg.tool_call_id || '',
|
|
58
|
+
content: msg.content || '',
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (msg.role === 'assistant' && msg.tool_calls) {
|
|
64
|
+
const content = [];
|
|
65
|
+
if (msg.content) {
|
|
66
|
+
content.push({
|
|
67
|
+
type: 'text',
|
|
68
|
+
text: msg.content,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
msg.tool_calls.forEach(toolCall => {
|
|
72
|
+
content.push({
|
|
73
|
+
type: 'tool_use',
|
|
74
|
+
id: toolCall.id,
|
|
75
|
+
name: toolCall.function.name,
|
|
76
|
+
input: JSON.parse(toolCall.function.arguments || '{}'),
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
role: 'assistant',
|
|
81
|
+
content,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
role: msg.role,
|
|
86
|
+
content: msg.content || '',
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Convert MCP tools to Anthropic format
|
|
92
|
+
*/
|
|
93
|
+
function convertMCPToolsToAnthropic(mcpTools) {
|
|
94
|
+
return Object.entries(mcpTools).map(([name, tool]) => ({
|
|
95
|
+
name,
|
|
96
|
+
description: tool.description || '',
|
|
97
|
+
input_schema: tool.inputSchema || { type: 'object', properties: {} },
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract system prompt from messages
|
|
102
|
+
*/
|
|
103
|
+
function extractSystemPrompt(messages) {
|
|
104
|
+
const systemMessage = messages.find(msg => msg.role === 'system');
|
|
105
|
+
return systemMessage?.content || 'You are a helpful assistant.';
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Streaming Anthropic response handler - Pure client (no tool execution)
|
|
109
|
+
* Returns LLMResponse with type='text' or type='tool_calls'
|
|
110
|
+
*/
|
|
111
|
+
export async function streamAnthropicResponse(client, model, messages, agent, mcpTools, world, onChunk, messageId, abortSignal) {
|
|
112
|
+
const anthropicMessages = convertMessagesToAnthropic(messages);
|
|
113
|
+
const anthropicTools = Object.keys(mcpTools).length > 0 ? convertMCPToolsToAnthropic(mcpTools) : undefined;
|
|
114
|
+
const systemPrompt = extractSystemPrompt(messages);
|
|
115
|
+
const requestParams = {
|
|
116
|
+
model,
|
|
117
|
+
messages: anthropicMessages,
|
|
118
|
+
system: systemPrompt,
|
|
119
|
+
stream: true,
|
|
120
|
+
temperature: agent.temperature,
|
|
121
|
+
max_tokens: agent.maxTokens || 4096,
|
|
122
|
+
...(anthropicTools && { tools: anthropicTools }),
|
|
123
|
+
};
|
|
124
|
+
logger.debug(`Anthropic Direct: Starting streaming request for agent=${agent.id}, model=${model}`, {
|
|
125
|
+
messageCount: messages.length,
|
|
126
|
+
hasTools: !!anthropicTools,
|
|
127
|
+
toolCount: anthropicTools?.length || 0,
|
|
128
|
+
});
|
|
129
|
+
const stream = await client.messages.create(requestParams, abortSignal ? { signal: abortSignal } : undefined);
|
|
130
|
+
let fullResponse = '';
|
|
131
|
+
let toolUses = [];
|
|
132
|
+
try {
|
|
133
|
+
for await (const chunk of stream) {
|
|
134
|
+
if (abortSignal?.aborted) {
|
|
135
|
+
throw new DOMException('Anthropic stream aborted', 'AbortError');
|
|
136
|
+
}
|
|
137
|
+
if (chunk.type === 'content_block_delta') {
|
|
138
|
+
if (chunk.delta.type === 'text_delta') {
|
|
139
|
+
const textDelta = chunk.delta.text;
|
|
140
|
+
fullResponse += textDelta;
|
|
141
|
+
onChunk(textDelta);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (chunk.type === 'content_block_start') {
|
|
145
|
+
if (chunk.content_block.type === 'tool_use') {
|
|
146
|
+
toolUses.push(chunk.content_block);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Return LLMResponse based on whether we have tool calls or text
|
|
151
|
+
if (toolUses.length > 0) {
|
|
152
|
+
// Normalize toolUses to function call format
|
|
153
|
+
const toolCalls = toolUses
|
|
154
|
+
.filter(tu => tu.name && tu.name.trim() !== '')
|
|
155
|
+
.map(toolUse => ({
|
|
156
|
+
id: toolUse.id,
|
|
157
|
+
type: 'function',
|
|
158
|
+
function: {
|
|
159
|
+
name: toolUse.name,
|
|
160
|
+
arguments: JSON.stringify(toolUse.input),
|
|
161
|
+
},
|
|
162
|
+
}));
|
|
163
|
+
const invalidCount = toolUses.length - toolCalls.length;
|
|
164
|
+
if (invalidCount > 0) {
|
|
165
|
+
logger.warn(`Anthropic Direct: Filtered ${invalidCount} invalid tool calls (streaming)`, {
|
|
166
|
+
agentId: agent.id,
|
|
167
|
+
totalToolUses: toolUses.length
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
logger.debug(`Anthropic Direct: Completed streaming request with tool calls for agent=${agent.id}`, {
|
|
171
|
+
toolCount: toolCalls.length,
|
|
172
|
+
toolNames: toolCalls.map(tc => tc.function.name)
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
type: 'tool_calls',
|
|
176
|
+
content: fullResponse,
|
|
177
|
+
tool_calls: toolCalls,
|
|
178
|
+
assistantMessage: {
|
|
179
|
+
role: 'assistant',
|
|
180
|
+
content: fullResponse || '',
|
|
181
|
+
tool_calls: toolCalls,
|
|
182
|
+
},
|
|
183
|
+
usage: undefined, // Anthropic streaming doesn't provide usage in final chunk
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
logger.debug(`Anthropic Direct: Completed streaming request for agent=${agent.id}, responseLength=${fullResponse.length}`);
|
|
187
|
+
return {
|
|
188
|
+
type: 'text',
|
|
189
|
+
content: fullResponse,
|
|
190
|
+
assistantMessage: {
|
|
191
|
+
role: 'assistant',
|
|
192
|
+
content: fullResponse,
|
|
193
|
+
},
|
|
194
|
+
usage: undefined, // Anthropic streaming doesn't provide usage in final chunk
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
logger.error(`Anthropic Direct: Streaming error for agent=${agent.id}:`, error);
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Non-streaming Anthropic response handler - Pure client (no tool execution)
|
|
204
|
+
* Returns LLMResponse with type='text' or type='tool_calls'
|
|
205
|
+
*/
|
|
206
|
+
export async function generateAnthropicResponse(client, model, messages, agent, mcpTools, world, abortSignal) {
|
|
207
|
+
const anthropicMessages = convertMessagesToAnthropic(messages);
|
|
208
|
+
const anthropicTools = Object.keys(mcpTools).length > 0 ? convertMCPToolsToAnthropic(mcpTools) : undefined;
|
|
209
|
+
const systemPrompt = extractSystemPrompt(messages);
|
|
210
|
+
const requestParams = {
|
|
211
|
+
model,
|
|
212
|
+
messages: anthropicMessages,
|
|
213
|
+
system: systemPrompt,
|
|
214
|
+
temperature: agent.temperature,
|
|
215
|
+
max_tokens: agent.maxTokens || 4096,
|
|
216
|
+
...(anthropicTools && { tools: anthropicTools }),
|
|
217
|
+
};
|
|
218
|
+
logger.debug(`Anthropic Direct: Starting non-streaming request for agent=${agent.id}, model=${model}`, {
|
|
219
|
+
messageCount: messages.length,
|
|
220
|
+
hasTools: !!anthropicTools,
|
|
221
|
+
toolCount: anthropicTools?.length || 0,
|
|
222
|
+
});
|
|
223
|
+
try {
|
|
224
|
+
const response = await client.messages.create(requestParams, abortSignal ? { signal: abortSignal } : undefined);
|
|
225
|
+
let content = '';
|
|
226
|
+
let toolUses = [];
|
|
227
|
+
// Extract content and tool uses from response
|
|
228
|
+
response.content.forEach(block => {
|
|
229
|
+
if (block.type === 'text') {
|
|
230
|
+
content += block.text;
|
|
231
|
+
}
|
|
232
|
+
else if (block.type === 'tool_use') {
|
|
233
|
+
toolUses.push(block);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
// Return LLMResponse based on whether we have tool calls or text
|
|
237
|
+
if (toolUses.length > 0) {
|
|
238
|
+
// Normalize toolUses to function call format
|
|
239
|
+
const toolCalls = toolUses
|
|
240
|
+
.filter(tu => tu.name && tu.name.trim() !== '')
|
|
241
|
+
.map(toolUse => ({
|
|
242
|
+
id: toolUse.id,
|
|
243
|
+
type: 'function',
|
|
244
|
+
function: {
|
|
245
|
+
name: toolUse.name,
|
|
246
|
+
arguments: JSON.stringify(toolUse.input),
|
|
247
|
+
},
|
|
248
|
+
}));
|
|
249
|
+
const invalidCount = toolUses.length - toolCalls.length;
|
|
250
|
+
if (invalidCount > 0) {
|
|
251
|
+
logger.warn(`Anthropic Direct: Filtered ${invalidCount} invalid tool calls (non-streaming)`, {
|
|
252
|
+
agentId: agent.id,
|
|
253
|
+
totalToolUses: toolUses.length
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
logger.debug(`Anthropic Direct: Completed non-streaming request with tool calls for agent=${agent.id}`, {
|
|
257
|
+
toolCount: toolCalls.length,
|
|
258
|
+
toolNames: toolCalls.map(tc => tc.function.name)
|
|
259
|
+
});
|
|
260
|
+
return {
|
|
261
|
+
type: 'tool_calls',
|
|
262
|
+
content: content,
|
|
263
|
+
tool_calls: toolCalls,
|
|
264
|
+
assistantMessage: {
|
|
265
|
+
role: 'assistant',
|
|
266
|
+
content: content,
|
|
267
|
+
tool_calls: toolCalls,
|
|
268
|
+
},
|
|
269
|
+
usage: response.usage ? {
|
|
270
|
+
inputTokens: response.usage.input_tokens,
|
|
271
|
+
outputTokens: response.usage.output_tokens,
|
|
272
|
+
} : undefined,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
logger.debug(`Anthropic Direct: Completed non-streaming request for agent=${agent.id}, responseLength=${content.length}`);
|
|
276
|
+
return {
|
|
277
|
+
type: 'text',
|
|
278
|
+
content: content,
|
|
279
|
+
assistantMessage: {
|
|
280
|
+
role: 'assistant',
|
|
281
|
+
content: content,
|
|
282
|
+
},
|
|
283
|
+
usage: response.usage ? {
|
|
284
|
+
inputTokens: response.usage.input_tokens,
|
|
285
|
+
outputTokens: response.usage.output_tokens,
|
|
286
|
+
} : undefined,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
logger.error(`Anthropic Direct: Generation error for agent=${agent.id}:`, error);
|
|
291
|
+
throw error;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Factory function to create Anthropic client for agent
|
|
296
|
+
*/
|
|
297
|
+
export function createAnthropicClientForAgent(agent) {
|
|
298
|
+
const config = getLLMProviderConfig(agent.provider);
|
|
299
|
+
return createAnthropicClient(config);
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=anthropic-direct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-direct.js","sourceRoot":"","sources":["../../core/anthropic-direct.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Approval Cache Module
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Session-scoped approval caching for tool execution
|
|
6
|
+
* - Isolated cache per chatId to prevent cross-chat approval leakage
|
|
7
|
+
* - Timestamp tracking for audit and expiration capabilities
|
|
8
|
+
* - Singleton pattern for global cache access
|
|
9
|
+
*
|
|
10
|
+
* Implementation:
|
|
11
|
+
* - Two-level Map structure: chatId -> (toolName -> entry)
|
|
12
|
+
* - Thread-safe operations (no async needed for in-memory cache)
|
|
13
|
+
* - Automatic cleanup on chat deletion (external trigger)
|
|
14
|
+
*
|
|
15
|
+
* Changes:
|
|
16
|
+
* - 2025-11-03: Initial implementation for tool approval system
|
|
17
|
+
*/
|
|
18
|
+
export interface ApprovalCacheEntry {
|
|
19
|
+
approved: boolean;
|
|
20
|
+
timestamp: Date;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Approval cache for storing session-scoped tool approvals.
|
|
24
|
+
*
|
|
25
|
+
* Architecture:
|
|
26
|
+
* - chatId isolation: Each chat has its own approval cache
|
|
27
|
+
* - Session lifecycle: Cleared when chat ends or deleted
|
|
28
|
+
* - No persistence: In-memory only (cleared on server restart)
|
|
29
|
+
*
|
|
30
|
+
* Usage:
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // Grant session approval
|
|
33
|
+
* approvalCache.set('chat-123', 'mcp__filesystem__write_file', true);
|
|
34
|
+
*
|
|
35
|
+
* // Check approval
|
|
36
|
+
* if (approvalCache.get('chat-123', 'mcp__filesystem__write_file')) {
|
|
37
|
+
* await executeTool();
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* // Clear on chat end
|
|
41
|
+
* approvalCache.clear('chat-123');
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class ApprovalCache {
|
|
45
|
+
private cache;
|
|
46
|
+
/**
|
|
47
|
+
* Set approval status for a tool in a specific chat session
|
|
48
|
+
*
|
|
49
|
+
* @param chatId - Chat session identifier
|
|
50
|
+
* @param toolName - Full tool name (e.g., 'mcp__server__toolName')
|
|
51
|
+
* @param approved - Whether tool is approved
|
|
52
|
+
*/
|
|
53
|
+
set(chatId: string, toolName: string, approved: boolean): void;
|
|
54
|
+
/**
|
|
55
|
+
* Get approval status for a tool in a specific chat session
|
|
56
|
+
*
|
|
57
|
+
* @param chatId - Chat session identifier
|
|
58
|
+
* @param toolName - Full tool name
|
|
59
|
+
* @returns true if approved, false if denied, undefined if not cached
|
|
60
|
+
*/
|
|
61
|
+
get(chatId: string, toolName: string): boolean | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Check if approval exists for a tool in a specific chat session
|
|
64
|
+
*
|
|
65
|
+
* @param chatId - Chat session identifier
|
|
66
|
+
* @param toolName - Full tool name
|
|
67
|
+
* @returns true if approval decision exists (approved or denied)
|
|
68
|
+
*/
|
|
69
|
+
has(chatId: string, toolName: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Clear all approvals for a specific chat session
|
|
72
|
+
* Called when chat ends or is deleted
|
|
73
|
+
*
|
|
74
|
+
* @param chatId - Chat session identifier
|
|
75
|
+
*/
|
|
76
|
+
clear(chatId: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* Clear all approvals across all chats
|
|
79
|
+
* Primarily for testing and server restart scenarios
|
|
80
|
+
*/
|
|
81
|
+
clearAll(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Get all cached tools for a specific chat (for debugging/UI)
|
|
84
|
+
*
|
|
85
|
+
* @param chatId - Chat session identifier
|
|
86
|
+
* @returns Array of [toolName, entry] pairs
|
|
87
|
+
*/
|
|
88
|
+
getChatApprovals(chatId: string): Array<[string, ApprovalCacheEntry]>;
|
|
89
|
+
/**
|
|
90
|
+
* Get statistics about cache usage (for monitoring)
|
|
91
|
+
*/
|
|
92
|
+
getStats(): {
|
|
93
|
+
totalChats: number;
|
|
94
|
+
totalApprovals: number;
|
|
95
|
+
chatsWithApprovals: Array<{
|
|
96
|
+
chatId: string;
|
|
97
|
+
approvalCount: number;
|
|
98
|
+
}>;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Global singleton approval cache instance
|
|
103
|
+
*/
|
|
104
|
+
export declare const approvalCache: ApprovalCache;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-cache.d.ts","sourceRoot":"","sources":["../../core/approval-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,aAAa;IAExB,OAAO,CAAC,KAAK,CAAsD;IAEnE;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAiB9D;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAc1D;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAS9C;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ3B;;;OAGG;IACH,QAAQ,IAAI,IAAI;IAIhB;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAarE;;OAEG;IACH,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtE;CAcF;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Approval Cache Module
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Session-scoped approval caching for tool execution
|
|
6
|
+
* - Isolated cache per chatId to prevent cross-chat approval leakage
|
|
7
|
+
* - Timestamp tracking for audit and expiration capabilities
|
|
8
|
+
* - Singleton pattern for global cache access
|
|
9
|
+
*
|
|
10
|
+
* Implementation:
|
|
11
|
+
* - Two-level Map structure: chatId -> (toolName -> entry)
|
|
12
|
+
* - Thread-safe operations (no async needed for in-memory cache)
|
|
13
|
+
* - Automatic cleanup on chat deletion (external trigger)
|
|
14
|
+
*
|
|
15
|
+
* Changes:
|
|
16
|
+
* - 2025-11-03: Initial implementation for tool approval system
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Approval cache for storing session-scoped tool approvals.
|
|
20
|
+
*
|
|
21
|
+
* Architecture:
|
|
22
|
+
* - chatId isolation: Each chat has its own approval cache
|
|
23
|
+
* - Session lifecycle: Cleared when chat ends or deleted
|
|
24
|
+
* - No persistence: In-memory only (cleared on server restart)
|
|
25
|
+
*
|
|
26
|
+
* Usage:
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Grant session approval
|
|
29
|
+
* approvalCache.set('chat-123', 'mcp__filesystem__write_file', true);
|
|
30
|
+
*
|
|
31
|
+
* // Check approval
|
|
32
|
+
* if (approvalCache.get('chat-123', 'mcp__filesystem__write_file')) {
|
|
33
|
+
* await executeTool();
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* // Clear on chat end
|
|
37
|
+
* approvalCache.clear('chat-123');
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export class ApprovalCache {
|
|
41
|
+
// chatId -> (toolName -> entry)
|
|
42
|
+
cache = new Map();
|
|
43
|
+
/**
|
|
44
|
+
* Set approval status for a tool in a specific chat session
|
|
45
|
+
*
|
|
46
|
+
* @param chatId - Chat session identifier
|
|
47
|
+
* @param toolName - Full tool name (e.g., 'mcp__server__toolName')
|
|
48
|
+
* @param approved - Whether tool is approved
|
|
49
|
+
*/
|
|
50
|
+
set(chatId, toolName, approved) {
|
|
51
|
+
if (!chatId || !toolName) {
|
|
52
|
+
throw new Error('chatId and toolName are required');
|
|
53
|
+
}
|
|
54
|
+
let chatCache = this.cache.get(chatId);
|
|
55
|
+
if (!chatCache) {
|
|
56
|
+
chatCache = new Map();
|
|
57
|
+
this.cache.set(chatId, chatCache);
|
|
58
|
+
}
|
|
59
|
+
chatCache.set(toolName, {
|
|
60
|
+
approved,
|
|
61
|
+
timestamp: new Date()
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get approval status for a tool in a specific chat session
|
|
66
|
+
*
|
|
67
|
+
* @param chatId - Chat session identifier
|
|
68
|
+
* @param toolName - Full tool name
|
|
69
|
+
* @returns true if approved, false if denied, undefined if not cached
|
|
70
|
+
*/
|
|
71
|
+
get(chatId, toolName) {
|
|
72
|
+
if (!chatId || !toolName) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const chatCache = this.cache.get(chatId);
|
|
76
|
+
if (!chatCache) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const entry = chatCache.get(toolName);
|
|
80
|
+
return entry?.approved;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if approval exists for a tool in a specific chat session
|
|
84
|
+
*
|
|
85
|
+
* @param chatId - Chat session identifier
|
|
86
|
+
* @param toolName - Full tool name
|
|
87
|
+
* @returns true if approval decision exists (approved or denied)
|
|
88
|
+
*/
|
|
89
|
+
has(chatId, toolName) {
|
|
90
|
+
if (!chatId || !toolName) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
const chatCache = this.cache.get(chatId);
|
|
94
|
+
return chatCache?.has(toolName) ?? false;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Clear all approvals for a specific chat session
|
|
98
|
+
* Called when chat ends or is deleted
|
|
99
|
+
*
|
|
100
|
+
* @param chatId - Chat session identifier
|
|
101
|
+
*/
|
|
102
|
+
clear(chatId) {
|
|
103
|
+
if (!chatId) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.cache.delete(chatId);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Clear all approvals across all chats
|
|
110
|
+
* Primarily for testing and server restart scenarios
|
|
111
|
+
*/
|
|
112
|
+
clearAll() {
|
|
113
|
+
this.cache.clear();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get all cached tools for a specific chat (for debugging/UI)
|
|
117
|
+
*
|
|
118
|
+
* @param chatId - Chat session identifier
|
|
119
|
+
* @returns Array of [toolName, entry] pairs
|
|
120
|
+
*/
|
|
121
|
+
getChatApprovals(chatId) {
|
|
122
|
+
if (!chatId) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
const chatCache = this.cache.get(chatId);
|
|
126
|
+
if (!chatCache) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
return Array.from(chatCache.entries());
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get statistics about cache usage (for monitoring)
|
|
133
|
+
*/
|
|
134
|
+
getStats() {
|
|
135
|
+
const chatsWithApprovals = Array.from(this.cache.entries()).map(([chatId, chatCache]) => ({
|
|
136
|
+
chatId,
|
|
137
|
+
approvalCount: chatCache.size
|
|
138
|
+
}));
|
|
139
|
+
const totalApprovals = chatsWithApprovals.reduce((sum, chat) => sum + chat.approvalCount, 0);
|
|
140
|
+
return {
|
|
141
|
+
totalChats: this.cache.size,
|
|
142
|
+
totalApprovals,
|
|
143
|
+
chatsWithApprovals
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Global singleton approval cache instance
|
|
149
|
+
*/
|
|
150
|
+
export const approvalCache = new ApprovalCache();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-cache.js","sourceRoot":"","sources":["../../core/approval-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Constants
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* - Provide shared chat-session constants and helpers used by core chat flows.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Central default chat title constant for reusable untitled sessions.
|
|
9
|
+
* - Helper to evaluate whether a chat is still in default-title state.
|
|
10
|
+
*
|
|
11
|
+
* Implementation Notes:
|
|
12
|
+
* - Kept framework-agnostic to avoid importing manager/event modules.
|
|
13
|
+
* - Used by both chat lifecycle management and auto-title update paths.
|
|
14
|
+
*
|
|
15
|
+
* Recent Changes:
|
|
16
|
+
* - 2026-02-13: Added shared default-title constant and helper for session title logic.
|
|
17
|
+
*/
|
|
18
|
+
export declare const NEW_CHAT_TITLE = "New Chat";
|
|
19
|
+
export declare function isDefaultChatTitle(name: string | null | undefined): boolean;
|
|
20
|
+
//# sourceMappingURL=chat-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-constants.d.ts","sourceRoot":"","sources":["../../core/chat-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE3E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Constants
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* - Provide shared chat-session constants and helpers used by core chat flows.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Central default chat title constant for reusable untitled sessions.
|
|
9
|
+
* - Helper to evaluate whether a chat is still in default-title state.
|
|
10
|
+
*
|
|
11
|
+
* Implementation Notes:
|
|
12
|
+
* - Kept framework-agnostic to avoid importing manager/event modules.
|
|
13
|
+
* - Used by both chat lifecycle management and auto-title update paths.
|
|
14
|
+
*
|
|
15
|
+
* Recent Changes:
|
|
16
|
+
* - 2026-02-13: Added shared default-title constant and helper for session title logic.
|
|
17
|
+
*/
|
|
18
|
+
export const NEW_CHAT_TITLE = 'New Chat';
|
|
19
|
+
export function isDefaultChatTitle(name) {
|
|
20
|
+
return String(name ?? '').trim() === NEW_CHAT_TITLE;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=chat-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-constants.js","sourceRoot":"","sources":["../../core/chat-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAAC,IAA+B;IAChE,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,cAAc,CAAC;AACtD,CAAC"}
|