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,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Direct Integration Module - Pure Client (LLM Provider Refactoring Phase 4)
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Direct Google Generative AI API integration
|
|
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 @google/generative-ai package for reliable API access
|
|
14
|
+
* - Converts AI SDK message format to Google Generative AI 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-15: Stopped replaying historical tool call/response parts as Google `functionCall`/`functionResponse` in conversation conversion to avoid 400 errors requiring `thought_signature` on replayed calls.
|
|
23
|
+
* - 2026-02-13: Added transport-level AbortSignal wiring to Google SDK request options where supported.
|
|
24
|
+
* - 2026-02-13: Added abort-signal checks for streaming and non-streaming execution paths.
|
|
25
|
+
* - 2025-11-09: Phase 4 - Removed ALL tool execution logic (~200 lines)
|
|
26
|
+
* - Provider is now a pure client - only API calls and data transformation
|
|
27
|
+
* - Returns LLMResponse interface with type discriminator
|
|
28
|
+
* - Filters invalid function calls (empty/missing names) and logs warnings
|
|
29
|
+
* - Note: Google API doesn't provide usage information in response
|
|
30
|
+
* - 2025-11-08: Removed ALL event emission from provider
|
|
31
|
+
* - Streaming uses onChunk callback instead of direct SSE emission
|
|
32
|
+
*/
|
|
33
|
+
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
34
|
+
import { getLLMProviderConfig } from './llm-config.js';
|
|
35
|
+
import { createCategoryLogger } from './logger.js';
|
|
36
|
+
import { generateId } from './utils.js';
|
|
37
|
+
const logger = createCategoryLogger('llm.google');
|
|
38
|
+
const mcpLogger = createCategoryLogger('mcp.execution');
|
|
39
|
+
/**
|
|
40
|
+
* Google client factory
|
|
41
|
+
*/
|
|
42
|
+
export function createGoogleClient(config) {
|
|
43
|
+
return new GoogleGenerativeAI(config.apiKey);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create Google model instance
|
|
47
|
+
*/
|
|
48
|
+
export function createGoogleModel(client, modelName, tools) {
|
|
49
|
+
return client.getGenerativeModel({
|
|
50
|
+
model: modelName,
|
|
51
|
+
...(tools && tools.length > 0 && { tools: [{ functionDeclarations: tools }] })
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Convert AI SDK messages to Google format
|
|
56
|
+
*/
|
|
57
|
+
function convertMessagesToGoogle(messages) {
|
|
58
|
+
const googleMessages = [];
|
|
59
|
+
let systemInstruction = '';
|
|
60
|
+
for (const msg of messages) {
|
|
61
|
+
if (msg.role === 'system') {
|
|
62
|
+
systemInstruction = msg.content || '';
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (msg.role === 'tool') {
|
|
66
|
+
// Replay compatibility: avoid functionResponse replay because Gemini
|
|
67
|
+
// expects metadata coupling with prior functionCall traces.
|
|
68
|
+
// Keep tool outcomes as plain text context.
|
|
69
|
+
if (!msg.content?.trim()) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
googleMessages.push({
|
|
73
|
+
role: 'user',
|
|
74
|
+
parts: [{ text: `[Tool result]\n${msg.content}` }]
|
|
75
|
+
});
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (msg.role === 'assistant' && msg.tool_calls) {
|
|
79
|
+
// Replay compatibility: do NOT replay historical functionCall parts.
|
|
80
|
+
// Gemini may reject replayed calls without provider-issued thought_signature.
|
|
81
|
+
const parts = [];
|
|
82
|
+
if (msg.content) {
|
|
83
|
+
parts.push({ text: msg.content });
|
|
84
|
+
}
|
|
85
|
+
if (parts.length === 0) {
|
|
86
|
+
parts.push({ text: '[Tool call history omitted for Google replay compatibility]' });
|
|
87
|
+
}
|
|
88
|
+
googleMessages.push({
|
|
89
|
+
role: 'model',
|
|
90
|
+
parts
|
|
91
|
+
});
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
// Regular user/assistant messages
|
|
95
|
+
googleMessages.push({
|
|
96
|
+
role: msg.role === 'assistant' ? 'model' : 'user',
|
|
97
|
+
parts: [{ text: msg.content || '' }]
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return { messages: googleMessages, systemInstruction };
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Convert MCP tools to Google format
|
|
104
|
+
*/
|
|
105
|
+
function convertMCPToolsToGoogle(mcpTools) {
|
|
106
|
+
return Object.entries(mcpTools).map(([name, tool]) => ({
|
|
107
|
+
name,
|
|
108
|
+
description: tool.description || '',
|
|
109
|
+
parameters: tool.inputSchema || { type: 'object', properties: {} },
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Streaming Google response handler - Pure client (no tool execution)
|
|
114
|
+
* Returns LLMResponse with type='text' or type='tool_calls'
|
|
115
|
+
*/
|
|
116
|
+
export async function streamGoogleResponse(client, model, messages, agent, mcpTools, world, onChunk, messageId, abortSignal) {
|
|
117
|
+
const googleTools = Object.keys(mcpTools).length > 0 ? convertMCPToolsToGoogle(mcpTools) : undefined;
|
|
118
|
+
const { messages: googleMessages, systemInstruction } = convertMessagesToGoogle(messages);
|
|
119
|
+
const generativeModel = client.getGenerativeModel({
|
|
120
|
+
model,
|
|
121
|
+
systemInstruction: systemInstruction || undefined,
|
|
122
|
+
...(googleTools && googleTools.length > 0 && { tools: [{ functionDeclarations: googleTools }] })
|
|
123
|
+
});
|
|
124
|
+
logger.debug(`Google Direct: Starting streaming request for agent=${agent.id}, model=${model}`, {
|
|
125
|
+
messageCount: messages.length,
|
|
126
|
+
hasTools: !!googleTools,
|
|
127
|
+
toolCount: googleTools?.length || 0,
|
|
128
|
+
});
|
|
129
|
+
let fullResponse = '';
|
|
130
|
+
let functionCalls = [];
|
|
131
|
+
try {
|
|
132
|
+
if (abortSignal?.aborted) {
|
|
133
|
+
throw new DOMException('Google stream aborted before start', 'AbortError');
|
|
134
|
+
}
|
|
135
|
+
const result = await generativeModel.generateContentStream({ contents: googleMessages }, abortSignal ? { signal: abortSignal } : undefined);
|
|
136
|
+
for await (const chunk of result.stream) {
|
|
137
|
+
if (abortSignal?.aborted) {
|
|
138
|
+
throw new DOMException('Google stream aborted', 'AbortError');
|
|
139
|
+
}
|
|
140
|
+
const chunkText = chunk.text();
|
|
141
|
+
if (chunkText) {
|
|
142
|
+
fullResponse += chunkText;
|
|
143
|
+
onChunk(chunkText);
|
|
144
|
+
}
|
|
145
|
+
// Check for function calls in the chunk
|
|
146
|
+
if (chunk.candidates?.[0]?.content?.parts) {
|
|
147
|
+
for (const part of chunk.candidates[0].content.parts) {
|
|
148
|
+
if (part.functionCall) {
|
|
149
|
+
functionCalls.push({
|
|
150
|
+
id: generateId(),
|
|
151
|
+
type: 'function',
|
|
152
|
+
function: {
|
|
153
|
+
name: part.functionCall.name,
|
|
154
|
+
arguments: JSON.stringify(part.functionCall.args || {}),
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Return LLMResponse based on whether we have function calls or text
|
|
162
|
+
if (functionCalls.length > 0) {
|
|
163
|
+
// Filter out invalid function calls (empty or missing names)
|
|
164
|
+
const validCalls = functionCalls.filter(fc => fc.function?.name && fc.function.name.trim() !== '');
|
|
165
|
+
const invalidCount = functionCalls.length - validCalls.length;
|
|
166
|
+
if (invalidCount > 0) {
|
|
167
|
+
logger.warn(`Google Direct: Filtered ${invalidCount} invalid function calls (streaming)`, {
|
|
168
|
+
agentId: agent.id,
|
|
169
|
+
totalCalls: functionCalls.length
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
logger.debug(`Google Direct: Completed streaming request with function calls for agent=${agent.id}`, {
|
|
173
|
+
toolCount: validCalls.length,
|
|
174
|
+
toolNames: validCalls.map(fc => fc.function?.name)
|
|
175
|
+
});
|
|
176
|
+
return {
|
|
177
|
+
type: 'tool_calls',
|
|
178
|
+
content: fullResponse,
|
|
179
|
+
tool_calls: validCalls,
|
|
180
|
+
assistantMessage: {
|
|
181
|
+
role: 'assistant',
|
|
182
|
+
content: fullResponse || '',
|
|
183
|
+
tool_calls: validCalls,
|
|
184
|
+
},
|
|
185
|
+
usage: undefined, // Google streaming doesn't provide usage in final chunk
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
logger.debug(`Google Direct: Completed streaming request for agent=${agent.id}, responseLength=${fullResponse.length}`);
|
|
189
|
+
return {
|
|
190
|
+
type: 'text',
|
|
191
|
+
content: fullResponse,
|
|
192
|
+
assistantMessage: {
|
|
193
|
+
role: 'assistant',
|
|
194
|
+
content: fullResponse,
|
|
195
|
+
},
|
|
196
|
+
usage: undefined, // Google streaming doesn't provide usage in final chunk
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
logger.error(`Google Direct: Streaming error for agent=${agent.id}:`, error);
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Non-streaming Google response handler - Pure client (no tool execution)
|
|
206
|
+
* Returns LLMResponse with type='text' or type='tool_calls'
|
|
207
|
+
*/
|
|
208
|
+
export async function generateGoogleResponse(client, model, messages, agent, mcpTools, world, abortSignal) {
|
|
209
|
+
const googleTools = Object.keys(mcpTools).length > 0 ? convertMCPToolsToGoogle(mcpTools) : undefined;
|
|
210
|
+
const { messages: googleMessages, systemInstruction } = convertMessagesToGoogle(messages);
|
|
211
|
+
const generativeModel = client.getGenerativeModel({
|
|
212
|
+
model,
|
|
213
|
+
systemInstruction: systemInstruction || undefined,
|
|
214
|
+
...(googleTools && googleTools.length > 0 && { tools: [{ functionDeclarations: googleTools }] }),
|
|
215
|
+
generationConfig: {
|
|
216
|
+
temperature: agent.temperature,
|
|
217
|
+
maxOutputTokens: agent.maxTokens,
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
logger.debug(`Google Direct: Starting non-streaming request for agent=${agent.id}, model=${model}`, {
|
|
221
|
+
messageCount: messages.length,
|
|
222
|
+
hasTools: !!googleTools,
|
|
223
|
+
toolCount: googleTools?.length || 0,
|
|
224
|
+
});
|
|
225
|
+
try {
|
|
226
|
+
if (abortSignal?.aborted) {
|
|
227
|
+
throw new DOMException('Google generation aborted before start', 'AbortError');
|
|
228
|
+
}
|
|
229
|
+
const result = await generativeModel.generateContent({ contents: googleMessages }, abortSignal ? { signal: abortSignal } : undefined);
|
|
230
|
+
const response = result.response;
|
|
231
|
+
let content = response.text() || '';
|
|
232
|
+
let functionCalls = [];
|
|
233
|
+
// Check for function calls in the response
|
|
234
|
+
if (response.candidates?.[0]?.content?.parts) {
|
|
235
|
+
for (const part of response.candidates[0].content.parts) {
|
|
236
|
+
if (part.functionCall) {
|
|
237
|
+
functionCalls.push({
|
|
238
|
+
id: generateId(),
|
|
239
|
+
type: 'function',
|
|
240
|
+
function: {
|
|
241
|
+
name: part.functionCall.name,
|
|
242
|
+
arguments: JSON.stringify(part.functionCall.args || {}),
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Return LLMResponse based on whether we have function calls or text
|
|
249
|
+
if (functionCalls.length > 0) {
|
|
250
|
+
// Filter out invalid function calls (empty or missing names)
|
|
251
|
+
const validCalls = functionCalls.filter(fc => fc.function?.name && fc.function.name.trim() !== '');
|
|
252
|
+
const invalidCount = functionCalls.length - validCalls.length;
|
|
253
|
+
if (invalidCount > 0) {
|
|
254
|
+
logger.warn(`Google Direct: Filtered ${invalidCount} invalid function calls (non-streaming)`, {
|
|
255
|
+
agentId: agent.id,
|
|
256
|
+
totalCalls: functionCalls.length
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
logger.debug(`Google Direct: Completed non-streaming request with function calls for agent=${agent.id}`, {
|
|
260
|
+
toolCount: validCalls.length,
|
|
261
|
+
toolNames: validCalls.map(fc => fc.function?.name)
|
|
262
|
+
});
|
|
263
|
+
return {
|
|
264
|
+
type: 'tool_calls',
|
|
265
|
+
content: content,
|
|
266
|
+
tool_calls: validCalls,
|
|
267
|
+
assistantMessage: {
|
|
268
|
+
role: 'assistant',
|
|
269
|
+
content: content,
|
|
270
|
+
tool_calls: validCalls,
|
|
271
|
+
},
|
|
272
|
+
usage: undefined, // Google doesn't provide usage information in response
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
logger.debug(`Google 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: undefined, // Google doesn't provide usage information in response
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
logger.error(`Google Direct: Generation error for agent=${agent.id}:`, error);
|
|
288
|
+
throw error;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Factory function to create Google client for agent
|
|
293
|
+
*/
|
|
294
|
+
export function createGoogleClientForAgent(agent) {
|
|
295
|
+
const config = getLLMProviderConfig(agent.provider);
|
|
296
|
+
return createGoogleClient(config);
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=google-direct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-direct.js","sourceRoot":"","sources":["../../core/google-direct.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-in-the-Loop (HITL) Option Runtime
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* - Provide a generic world-scoped request/response flow for option-based user approvals.
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - Emits structured system events for option prompts (`hitl-option-request`)
|
|
9
|
+
* - Resolves pending requests when renderer/API submits a response
|
|
10
|
+
* - Supports timeout fallback with deterministic default option
|
|
11
|
+
* - Maintains pending request map for validation and lifecycle cleanup
|
|
12
|
+
*
|
|
13
|
+
* Implementation Notes:
|
|
14
|
+
* - Requests are keyed by `(worldId, requestId)` to avoid cross-world collisions.
|
|
15
|
+
* - Timeout fallback defaults to `no` when available, otherwise first option.
|
|
16
|
+
* - Runtime is in-memory and process-local by design.
|
|
17
|
+
*
|
|
18
|
+
* Recent Changes:
|
|
19
|
+
* - 2026-02-14: Added initial generic HITL option request/response runtime.
|
|
20
|
+
*/
|
|
21
|
+
import { type World } from './types.js';
|
|
22
|
+
export interface HitlOption {
|
|
23
|
+
id: string;
|
|
24
|
+
label: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface HitlOptionRequest {
|
|
28
|
+
requestId?: string;
|
|
29
|
+
title: string;
|
|
30
|
+
message: string;
|
|
31
|
+
options: HitlOption[];
|
|
32
|
+
chatId?: string | null;
|
|
33
|
+
timeoutMs?: number;
|
|
34
|
+
defaultOptionId?: string;
|
|
35
|
+
metadata?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface HitlOptionResolution {
|
|
38
|
+
requestId: string;
|
|
39
|
+
worldId: string;
|
|
40
|
+
chatId: string | null;
|
|
41
|
+
optionId: string;
|
|
42
|
+
source: 'user' | 'timeout';
|
|
43
|
+
}
|
|
44
|
+
export declare function requestWorldOption(world: World, request: HitlOptionRequest): Promise<HitlOptionResolution>;
|
|
45
|
+
export declare function submitWorldOptionResponse(params: {
|
|
46
|
+
worldId: string;
|
|
47
|
+
requestId: string;
|
|
48
|
+
optionId: string;
|
|
49
|
+
}): {
|
|
50
|
+
accepted: boolean;
|
|
51
|
+
reason?: string;
|
|
52
|
+
};
|
|
53
|
+
export declare function clearHitlStateForTests(): void;
|
|
54
|
+
//# sourceMappingURL=hitl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../../core/hitl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,KAAK,EAAyB,MAAM,YAAY,CAAC;AAG/D,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAoDD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAmE/B;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiCzC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAO7C"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-in-the-Loop (HITL) Option Runtime
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* - Provide a generic world-scoped request/response flow for option-based user approvals.
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - Emits structured system events for option prompts (`hitl-option-request`)
|
|
9
|
+
* - Resolves pending requests when renderer/API submits a response
|
|
10
|
+
* - Supports timeout fallback with deterministic default option
|
|
11
|
+
* - Maintains pending request map for validation and lifecycle cleanup
|
|
12
|
+
*
|
|
13
|
+
* Implementation Notes:
|
|
14
|
+
* - Requests are keyed by `(worldId, requestId)` to avoid cross-world collisions.
|
|
15
|
+
* - Timeout fallback defaults to `no` when available, otherwise first option.
|
|
16
|
+
* - Runtime is in-memory and process-local by design.
|
|
17
|
+
*
|
|
18
|
+
* Recent Changes:
|
|
19
|
+
* - 2026-02-14: Added initial generic HITL option request/response runtime.
|
|
20
|
+
*/
|
|
21
|
+
import { generateId } from './utils.js';
|
|
22
|
+
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
23
|
+
const pendingHitlRequests = new Map();
|
|
24
|
+
function getPendingKey(worldId, requestId) {
|
|
25
|
+
return `${worldId}::${requestId}`;
|
|
26
|
+
}
|
|
27
|
+
function normalizeOptions(options) {
|
|
28
|
+
const seen = new Set();
|
|
29
|
+
const normalized = [];
|
|
30
|
+
for (const option of options) {
|
|
31
|
+
const id = String(option?.id || '').trim();
|
|
32
|
+
const label = String(option?.label || '').trim();
|
|
33
|
+
if (!id || !label || seen.has(id)) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
seen.add(id);
|
|
37
|
+
normalized.push({
|
|
38
|
+
id,
|
|
39
|
+
label,
|
|
40
|
+
description: option?.description ? String(option.description) : undefined,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return normalized;
|
|
44
|
+
}
|
|
45
|
+
function resolveDefaultOptionId(options, preferredDefaultOptionId) {
|
|
46
|
+
const preferred = String(preferredDefaultOptionId || '').trim();
|
|
47
|
+
if (preferred && options.some((option) => option.id === preferred)) {
|
|
48
|
+
return preferred;
|
|
49
|
+
}
|
|
50
|
+
const explicitNo = options.find((option) => option.id === 'no');
|
|
51
|
+
if (explicitNo) {
|
|
52
|
+
return explicitNo.id;
|
|
53
|
+
}
|
|
54
|
+
return options[0]?.id || 'no';
|
|
55
|
+
}
|
|
56
|
+
export async function requestWorldOption(world, request) {
|
|
57
|
+
const normalizedOptions = normalizeOptions(Array.isArray(request.options) ? request.options : []);
|
|
58
|
+
if (normalizedOptions.length === 0) {
|
|
59
|
+
throw new Error('HITL option request requires at least one valid option.');
|
|
60
|
+
}
|
|
61
|
+
const worldId = String(world.id || '').trim();
|
|
62
|
+
if (!worldId) {
|
|
63
|
+
throw new Error('Cannot request HITL option without a valid world ID.');
|
|
64
|
+
}
|
|
65
|
+
const requestId = String(request.requestId || '').trim() || generateId();
|
|
66
|
+
const chatId = request.chatId !== undefined
|
|
67
|
+
? (request.chatId ? String(request.chatId) : null)
|
|
68
|
+
: (world.currentChatId ?? null);
|
|
69
|
+
const timeoutMsRaw = Number(request.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
70
|
+
const timeoutMs = Number.isFinite(timeoutMsRaw) && timeoutMsRaw > 0
|
|
71
|
+
? Math.floor(timeoutMsRaw)
|
|
72
|
+
: DEFAULT_TIMEOUT_MS;
|
|
73
|
+
const defaultOptionId = resolveDefaultOptionId(normalizedOptions, request.defaultOptionId);
|
|
74
|
+
const pendingKey = getPendingKey(worldId, requestId);
|
|
75
|
+
return await new Promise((resolve) => {
|
|
76
|
+
const pending = {
|
|
77
|
+
worldId,
|
|
78
|
+
requestId,
|
|
79
|
+
chatId,
|
|
80
|
+
optionIds: new Set(normalizedOptions.map((option) => option.id)),
|
|
81
|
+
timeoutHandle: null,
|
|
82
|
+
resolve: (resolution) => resolve(resolution),
|
|
83
|
+
};
|
|
84
|
+
pending.timeoutHandle = setTimeout(() => {
|
|
85
|
+
const timeoutPending = pendingHitlRequests.get(pendingKey);
|
|
86
|
+
if (!timeoutPending) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
pendingHitlRequests.delete(pendingKey);
|
|
90
|
+
timeoutPending.resolve({
|
|
91
|
+
requestId,
|
|
92
|
+
worldId,
|
|
93
|
+
chatId,
|
|
94
|
+
optionId: defaultOptionId,
|
|
95
|
+
source: 'timeout',
|
|
96
|
+
});
|
|
97
|
+
}, timeoutMs);
|
|
98
|
+
pendingHitlRequests.set(pendingKey, pending);
|
|
99
|
+
const event = {
|
|
100
|
+
messageId: generateId(),
|
|
101
|
+
timestamp: new Date(),
|
|
102
|
+
chatId,
|
|
103
|
+
content: {
|
|
104
|
+
eventType: 'hitl-option-request',
|
|
105
|
+
requestId,
|
|
106
|
+
title: String(request.title || '').trim(),
|
|
107
|
+
message: String(request.message || '').trim(),
|
|
108
|
+
options: normalizedOptions,
|
|
109
|
+
defaultOptionId,
|
|
110
|
+
timeoutMs,
|
|
111
|
+
metadata: request.metadata || null,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
world.eventEmitter.emit('system', event);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
export function submitWorldOptionResponse(params) {
|
|
118
|
+
const worldId = String(params.worldId || '').trim();
|
|
119
|
+
const requestId = String(params.requestId || '').trim();
|
|
120
|
+
const optionId = String(params.optionId || '').trim();
|
|
121
|
+
if (!worldId || !requestId || !optionId) {
|
|
122
|
+
return { accepted: false, reason: 'worldId, requestId, and optionId are required.' };
|
|
123
|
+
}
|
|
124
|
+
const pendingKey = getPendingKey(worldId, requestId);
|
|
125
|
+
const pending = pendingHitlRequests.get(pendingKey);
|
|
126
|
+
if (!pending) {
|
|
127
|
+
return { accepted: false, reason: `No pending HITL request found for requestId '${requestId}'.` };
|
|
128
|
+
}
|
|
129
|
+
if (!pending.optionIds.has(optionId)) {
|
|
130
|
+
return { accepted: false, reason: `Invalid option '${optionId}' for requestId '${requestId}'.` };
|
|
131
|
+
}
|
|
132
|
+
pendingHitlRequests.delete(pendingKey);
|
|
133
|
+
if (pending.timeoutHandle) {
|
|
134
|
+
clearTimeout(pending.timeoutHandle);
|
|
135
|
+
}
|
|
136
|
+
pending.resolve({
|
|
137
|
+
requestId,
|
|
138
|
+
worldId,
|
|
139
|
+
chatId: pending.chatId,
|
|
140
|
+
optionId,
|
|
141
|
+
source: 'user',
|
|
142
|
+
});
|
|
143
|
+
return { accepted: true };
|
|
144
|
+
}
|
|
145
|
+
export function clearHitlStateForTests() {
|
|
146
|
+
for (const pending of pendingHitlRequests.values()) {
|
|
147
|
+
if (pending.timeoutHandle) {
|
|
148
|
+
clearTimeout(pending.timeoutHandle);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
pendingHitlRequests.clear();
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=hitl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../core/hitl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAoCxC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA8B,CAAC;AAElE,SAAS,aAAa,CAAC,OAAe,EAAE,SAAiB;IACvD,OAAO,GAAG,OAAO,KAAK,SAAS,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAqB;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAiB,EAAE,CAAC;IACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,UAAU,CAAC,IAAI,CAAC;YACd,EAAE;YACF,KAAK;YACL,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;SAC1E,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAqB,EACrB,wBAAiC;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAChE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,EAAE,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAY,EACZ,OAA0B;IAE1B,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClG,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;IACzE,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,SAAS;QAC1B,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC;QACjE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QAC1B,CAAC,CAAC,kBAAkB,CAAC;IACvB,MAAM,eAAe,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAErD,OAAO,MAAM,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,EAAE;QACzD,MAAM,OAAO,GAAuB;YAClC,OAAO;YACP,SAAS;YACT,MAAM;YACN,SAAS,EAAE,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChE,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;SAC7C,CAAC;QAEF,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YACtC,MAAM,cAAc,GAAG,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACvC,cAAc,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,OAAO;gBACP,MAAM;gBACN,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAqB;YAC9B,SAAS,EAAE,UAAU,EAAE;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,MAAM;YACN,OAAO,EAAE;gBACP,SAAS,EAAE,qBAAqB;gBAChC,SAAS;gBACT,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBACzC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC7C,OAAO,EAAE,iBAAiB;gBAC1B,eAAe;gBACf,SAAS;gBACT,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;aACnC;SACF,CAAC;QACF,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAIzC;IACC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtD,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,gDAAgD,EAAE,CAAC;IACvF,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,gDAAgD,SAAS,IAAI,EAAE,CAAC;IACpG,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,QAAQ,oBAAoB,SAAS,IAAI,EAAE,CAAC;IACnG,CAAC;IAED,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,OAAO,CAAC;QACd,SAAS;QACT,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ;QACR,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,KAAK,MAAM,OAAO,IAAI,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Module - Curated Public API
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Essential world/agent/chat management functions for client applications
|
|
6
|
+
* - Event-driven messaging with clean subscription interface
|
|
7
|
+
* - Category-based logging system
|
|
8
|
+
* - Core types and utility functions
|
|
9
|
+
*
|
|
10
|
+
* Architecture:
|
|
11
|
+
* - Public API limited to client-facing functionality (~25 exports vs previous 60+)
|
|
12
|
+
* - Internal implementation details kept private
|
|
13
|
+
* - Clear separation between public and private interfaces
|
|
14
|
+
* - Tests can import from internal modules directly
|
|
15
|
+
*
|
|
16
|
+
* Public API Categories:
|
|
17
|
+
* - World Management: createWorld, getWorld, updateWorld, deleteWorld, listWorlds, getWorldConfig, exportWorldToMarkdown
|
|
18
|
+
* - Agent Management: getAgent, updateAgent, deleteAgent, listAgents, clearAgentMemory
|
|
19
|
+
* - Chat Management: createChatData, getChatData, restoreWorldChat
|
|
20
|
+
* - Event System: publishMessage, enableStreaming, disableStreaming
|
|
21
|
+
* - Core Types: World, Agent, AgentMessage, WorldChat, ChatData, WorldInfo, LLMProvider, LoggerConfig, LogLevel
|
|
22
|
+
* - Utilities: logger, createCategoryLogger, loggers, generateId, toKebabCase
|
|
23
|
+
* - Subscription System: subscribeWorld, ClientConnection (for server API)
|
|
24
|
+
*
|
|
25
|
+
* Private APIs (not exported):
|
|
26
|
+
* - Internal agent functions: createAgent (via world instance), updateAgentMemory, loadAgentsIntoWorld, syncWorldAgents, etc.
|
|
27
|
+
* - Internal chat functions: createChat, getChat, createWorldChat
|
|
28
|
+
* - Internal event functions: subscribeAgentToMessages, processAgentMessage, SSE functions
|
|
29
|
+
* - Parameter types: CreateAgentParams, UpdateAgentParams, etc.
|
|
30
|
+
* - Storage implementation: StorageAPI, storage factory functions
|
|
31
|
+
* - Internal utilities: initializeLogger, getCategoryLogLevel
|
|
32
|
+
*
|
|
33
|
+
* Recent Changes:
|
|
34
|
+
* - 2026-02-14: Exported generic HITL option request/response APIs for world-scoped user approval flows.
|
|
35
|
+
* - 2026-02-14: Exported `waitForInitialSkillSync` to allow callers to await startup skill-registry auto-sync completion.
|
|
36
|
+
* - 2026-02-13: Exported chat-scoped stop-message processing controls for Electron IPC stop action.
|
|
37
|
+
* - 2026-02-08: Exported LLM provider configuration helpers for npm core library consumers
|
|
38
|
+
*
|
|
39
|
+
* Version: 3.1.0
|
|
40
|
+
*/
|
|
41
|
+
export { createWorld, getWorld, updateWorld, setWorldVariablesText, getWorldVariablesText, getWorldEnvMap, getWorldEnvValue, deleteWorld, listWorlds, getMemory, migrateMessageIds, removeMessagesFrom, editUserMessage, logEditError, getEditErrors } from './managers.js';
|
|
42
|
+
export { exportWorldToMarkdown, exportChatToMarkdown, } from './export.js';
|
|
43
|
+
export { createAgent, getAgent, updateAgent, deleteAgent, listAgents, clearAgentMemory, } from './managers.js';
|
|
44
|
+
export { clearToolsCache } from './mcp-server-registry.js';
|
|
45
|
+
export { skillRegistry, syncSkills, waitForInitialSkillSync, getSkills, getSkillsForSystemPrompt, getSkill, getSkillSourceScope, clearSkillsForTests, type SkillRegistryEntry, type SkillSourceScope, type SkillScopeFilterOptions, type SyncSkillsOptions, type SyncSkillsResult, } from './skill-registry.js';
|
|
46
|
+
export { requestWorldOption, submitWorldOptionResponse, clearHitlStateForTests, type HitlOption, type HitlOptionRequest, type HitlOptionResolution, } from './hitl.js';
|
|
47
|
+
export { executeShellCommand, getExecutionHistory, clearExecutionHistory, stopShellCommandsForChat, getProcessExecution, listProcessExecutions, cancelProcessExecution, deleteProcessExecution, subscribeProcessExecutionStatus, clearProcessExecutionStateForTests, type CommandExecutionResult } from './shell-cmd-tool.js';
|
|
48
|
+
export { stopMessageProcessing, type StopMessageProcessingResult } from './message-processing-control.js';
|
|
49
|
+
export { newChat, branchChatFromMessage, listChats, updateChat, deleteChat, restoreChat } from './managers.js';
|
|
50
|
+
export { enableStreaming, disableStreaming, publishMessage, publishMessageWithId, } from './events/index.js';
|
|
51
|
+
export { beginWorldActivity, trackWorldActivity, type WorldActivityEventPayload, type WorldActivityEventType, } from './activity-tracker.js';
|
|
52
|
+
export { type World, type Agent, type Chat, type AgentMessage, type RemovalResult, type EditErrorLog, LLMProvider, EventType, type LLMResponse } from './types.js';
|
|
53
|
+
export { configureLLMProvider, validateProviderConfig, isProviderConfigured, getConfiguredProviders, clearAllConfiguration, getConfigurationStatus, type BaseLLMConfig, type OpenAIConfig, type AnthropicConfig, type GoogleConfig, type AzureConfig, type XAIConfig, type OpenAICompatibleConfig, type OllamaConfig, type ProviderConfigMap, type ProviderConfig, } from './llm-config.js';
|
|
54
|
+
export { type LoggerConfig, type LogLevel, logger, createCategoryLogger, loggers, addLogStreamCallback } from './logger.js';
|
|
55
|
+
export { type ClientConnection, subscribeWorld } from './subscription.js';
|
|
56
|
+
export { getDefaultRootPath } from './storage/storage-factory.js';
|
|
57
|
+
export { runMigrations, getMigrationStatus, needsMigration, type MigrationContext, type MigrationFile } from './storage/migration-runner.js';
|
|
58
|
+
export declare const VERSION = "0.5.0";
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,OAAO,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EACb,UAAU,EACV,uBAAuB,EACvB,SAAS,EACT,wBAAwB,EACxB,QAAQ,EACR,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,+BAA+B,EAC/B,kCAAkC,EAClC,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,EACjC,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,OAAO,EACP,qBAAqB,EACrB,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACZ,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGnK,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG5H,OAAO,EAAE,KAAK,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,OAAO,UAAU,CAAC"}
|