@vybestack/llxprt-code-core 0.4.8 → 0.5.0-nightly.251102.f115237d
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/dist/prompt-config/defaults/default-prompts.json +4 -17
- package/dist/src/auth/precedence.d.ts +69 -9
- package/dist/src/auth/precedence.js +467 -69
- package/dist/src/auth/precedence.js.map +1 -1
- package/dist/src/auth/types.d.ts +2 -2
- package/dist/src/config/config.d.ts +15 -1
- package/dist/src/config/config.js +118 -6
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/index.d.ts +6 -0
- package/dist/src/config/index.js +5 -0
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/profileManager.d.ts +23 -3
- package/dist/src/config/profileManager.js +54 -7
- package/dist/src/config/profileManager.js.map +1 -1
- package/dist/src/config/subagentManager.d.ts +96 -0
- package/dist/src/config/subagentManager.js +371 -0
- package/dist/src/config/subagentManager.js.map +1 -0
- package/dist/src/config/types.d.ts +18 -0
- package/dist/src/config/types.js +3 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/core/client.d.ts +27 -7
- package/dist/src/core/client.js +217 -55
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +3 -1
- package/dist/src/core/contentGenerator.js +3 -0
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +1 -5
- package/dist/src/core/coreToolScheduler.js +95 -23
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +42 -12
- package/dist/src/core/geminiChat.js +405 -205
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -2
- package/dist/src/core/nonInteractiveToolExecutor.js +94 -10
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/subagent.d.ts +86 -7
- package/dist/src/core/subagent.js +809 -79
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagentOrchestrator.d.ts +73 -0
- package/dist/src/core/subagentOrchestrator.js +383 -0
- package/dist/src/core/subagentOrchestrator.js.map +1 -0
- package/dist/src/core/subagentScheduler.d.ts +16 -0
- package/dist/src/core/subagentScheduler.js +7 -0
- package/dist/src/core/subagentScheduler.js.map +1 -0
- package/dist/src/core/turn.d.ts +5 -1
- package/dist/src/core/turn.js +5 -1
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/hooks/tool-render-suppression-hook.js +6 -1
- package/dist/src/hooks/tool-render-suppression-hook.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +32 -32
- package/dist/src/index.d.ts +19 -1
- package/dist/src/index.js +15 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/interfaces/index.d.ts +1 -0
- package/dist/src/interfaces/index.js +4 -0
- package/dist/src/interfaces/index.js.map +1 -0
- package/dist/src/interfaces/nodejs-error.interface.d.ts +4 -0
- package/dist/src/interfaces/nodejs-error.interface.js +2 -0
- package/dist/src/interfaces/nodejs-error.interface.js.map +1 -0
- package/dist/src/parsers/TextToolCallParser.js +41 -1
- package/dist/src/parsers/TextToolCallParser.js.map +1 -1
- package/dist/src/prompt-config/defaults/core.md +15 -0
- package/dist/src/prompt-config/defaults/providers/gemini/core.md +203 -119
- package/dist/src/prompt-config/defaults/tool-defaults.js +2 -0
- package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/tools/list-subagents.md +7 -0
- package/dist/src/prompt-config/defaults/tools/task.md +8 -0
- package/dist/src/providers/BaseProvider.d.ts +115 -30
- package/dist/src/providers/BaseProvider.js +445 -109
- package/dist/src/providers/BaseProvider.js.map +1 -1
- package/dist/src/providers/IProvider.d.ts +50 -18
- package/dist/src/providers/LoggingProviderWrapper.d.ts +60 -16
- package/dist/src/providers/LoggingProviderWrapper.js +213 -60
- package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
- package/dist/src/providers/ProviderManager.d.ts +73 -2
- package/dist/src/providers/ProviderManager.js +492 -40
- package/dist/src/providers/ProviderManager.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.d.ts +35 -38
- package/dist/src/providers/anthropic/AnthropicProvider.js +222 -227
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/errors.d.ts +86 -0
- package/dist/src/providers/errors.js +89 -0
- package/dist/src/providers/errors.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +101 -41
- package/dist/src/providers/gemini/GeminiProvider.js +386 -311
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/ConversationCache.d.ts +5 -3
- package/dist/src/providers/openai/ConversationCache.js +93 -32
- package/dist/src/providers/openai/ConversationCache.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.d.ts +82 -42
- package/dist/src/providers/openai/OpenAIProvider.js +373 -532
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/getOpenAIProviderInfo.d.ts +1 -1
- package/dist/src/providers/openai/getOpenAIProviderInfo.js +52 -22
- package/dist/src/providers/openai/getOpenAIProviderInfo.js.map +1 -1
- package/dist/src/providers/openai/openaiRequestParams.d.ts +7 -0
- package/dist/src/providers/openai/openaiRequestParams.js +66 -0
- package/dist/src/providers/openai/openaiRequestParams.js.map +1 -0
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.d.ts +6 -33
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js +84 -183
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js.map +1 -1
- package/dist/src/providers/types/providerRuntime.d.ts +17 -0
- package/dist/src/providers/types/providerRuntime.js +7 -0
- package/dist/src/providers/types/providerRuntime.js.map +1 -0
- package/dist/src/providers/utils/authToken.d.ts +12 -0
- package/dist/src/providers/utils/authToken.js +17 -0
- package/dist/src/providers/utils/authToken.js.map +1 -0
- package/dist/src/providers/utils/userMemory.d.ts +8 -0
- package/dist/src/providers/utils/userMemory.js +34 -0
- package/dist/src/providers/utils/userMemory.js.map +1 -0
- package/dist/src/runtime/AgentRuntimeContext.d.ts +213 -0
- package/dist/src/runtime/AgentRuntimeContext.js +17 -0
- package/dist/src/runtime/AgentRuntimeContext.js.map +1 -0
- package/dist/src/runtime/AgentRuntimeLoader.d.ts +47 -0
- package/dist/src/runtime/AgentRuntimeLoader.js +122 -0
- package/dist/src/runtime/AgentRuntimeLoader.js.map +1 -0
- package/dist/src/runtime/AgentRuntimeState.d.ts +232 -0
- package/dist/src/runtime/AgentRuntimeState.js +439 -0
- package/dist/src/runtime/AgentRuntimeState.js.map +1 -0
- package/dist/src/runtime/RuntimeInvocationContext.d.ts +51 -0
- package/dist/src/runtime/RuntimeInvocationContext.js +52 -0
- package/dist/src/runtime/RuntimeInvocationContext.js.map +1 -0
- package/dist/src/runtime/createAgentRuntimeContext.d.ts +7 -0
- package/dist/src/runtime/createAgentRuntimeContext.js +58 -0
- package/dist/src/runtime/createAgentRuntimeContext.js.map +1 -0
- package/dist/src/runtime/index.d.ts +13 -0
- package/dist/src/runtime/index.js +14 -0
- package/dist/src/runtime/index.js.map +1 -0
- package/dist/src/runtime/providerRuntimeContext.d.ts +30 -0
- package/dist/src/runtime/providerRuntimeContext.js +70 -0
- package/dist/src/runtime/providerRuntimeContext.js.map +1 -0
- package/dist/src/runtime/runtimeAdapters.d.ts +22 -0
- package/dist/src/runtime/runtimeAdapters.js +81 -0
- package/dist/src/runtime/runtimeAdapters.js.map +1 -0
- package/dist/src/runtime/runtimeStateFactory.d.ts +21 -0
- package/dist/src/runtime/runtimeStateFactory.js +104 -0
- package/dist/src/runtime/runtimeStateFactory.js.map +1 -0
- package/dist/src/services/todo-context-tracker.d.ts +10 -8
- package/dist/src/services/todo-context-tracker.js +26 -10
- package/dist/src/services/todo-context-tracker.js.map +1 -1
- package/dist/src/services/tool-call-tracker-service.d.ts +11 -7
- package/dist/src/services/tool-call-tracker-service.js +89 -29
- package/dist/src/services/tool-call-tracker-service.js.map +1 -1
- package/dist/src/settings/SettingsService.d.ts +4 -0
- package/dist/src/settings/SettingsService.js +58 -2
- package/dist/src/settings/SettingsService.js.map +1 -1
- package/dist/src/settings/settingsServiceInstance.d.ts +6 -1
- package/dist/src/settings/settingsServiceInstance.js +28 -8
- package/dist/src/settings/settingsServiceInstance.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +5 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +4 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +3 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +1 -0
- package/dist/src/telemetry/types.js +3 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/test-utils/index.d.ts +2 -0
- package/dist/src/test-utils/index.js +2 -0
- package/dist/src/test-utils/index.js.map +1 -1
- package/dist/src/test-utils/mockWorkspaceContext.d.ts +0 -3
- package/dist/src/test-utils/mockWorkspaceContext.js +3 -4
- package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -1
- package/dist/src/test-utils/providerCallOptions.d.ts +43 -0
- package/dist/src/test-utils/providerCallOptions.js +137 -0
- package/dist/src/test-utils/providerCallOptions.js.map +1 -0
- package/dist/src/test-utils/runtime.d.ts +92 -0
- package/dist/src/test-utils/runtime.js +226 -0
- package/dist/src/test-utils/runtime.js.map +1 -0
- package/dist/src/test-utils/tools.d.ts +4 -4
- package/dist/src/test-utils/tools.js +20 -10
- package/dist/src/test-utils/tools.js.map +1 -1
- package/dist/src/tools/list-subagents.d.ts +31 -0
- package/dist/src/tools/list-subagents.js +109 -0
- package/dist/src/tools/list-subagents.js.map +1 -0
- package/dist/src/tools/task.d.ts +87 -0
- package/dist/src/tools/task.js +427 -0
- package/dist/src/tools/task.js.map +1 -0
- package/dist/src/tools/todo-read.js +1 -1
- package/dist/src/tools/todo-read.js.map +1 -1
- package/dist/src/tools/todo-store.js +4 -2
- package/dist/src/tools/todo-store.js.map +1 -1
- package/dist/src/tools/todo-write.js +4 -2
- package/dist/src/tools/todo-write.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +1 -0
- package/dist/src/tools/tool-error.js +1 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +2 -0
- package/dist/src/tools/tool-registry.js +46 -21
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/types/modelParams.d.ts +4 -0
- package/dist/src/utils/gitIgnoreParser.js +15 -3
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/prompt-config/defaults/providers/anthropic/core.md +0 -97
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/glob.md +0 -34
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/list-directory.md +0 -11
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/read-file.md +0 -14
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/read-many-files.md +0 -31
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/replace.md +0 -41
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/run-shell-command.md +0 -32
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/save-memory.md +0 -35
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/search-file-content.md +0 -44
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/todo-write.md +0 -45
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/write-file.md +0 -11
- package/dist/src/prompt-config/defaults/providers/openai/core.md +0 -97
- package/dist/src/prompt-config/defaults/providers/openai/tools/todo-pause.md +0 -28
- package/dist/src/prompt-config/defaults/providers/openai/tools/todo-read.md +0 -5
- package/dist/src/prompt-config/defaults/providers/openai/tools/todo-write.md +0 -45
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @plan PLAN-20251027-STATELESS5.P03
|
|
8
|
+
* @requirement REQ-STAT5-001
|
|
9
|
+
* @pseudocode runtime-state.md lines 18-48
|
|
10
|
+
*
|
|
11
|
+
* AgentRuntimeState abstraction to replace stateful Config usage.
|
|
12
|
+
* This is a STUB implementation for Phase 03 (TDD preparation).
|
|
13
|
+
* Actual implementation happens in Phase 05.
|
|
14
|
+
*/
|
|
15
|
+
import { AuthType } from '../core/contentGenerator.js';
|
|
16
|
+
/**
|
|
17
|
+
* @plan PLAN-20251027-STATELESS5.P03
|
|
18
|
+
* @requirement REQ-STAT5-001.1
|
|
19
|
+
* @pseudocode runtime-state.md lines 366-381
|
|
20
|
+
*
|
|
21
|
+
* Error codes for runtime state validation failures.
|
|
22
|
+
*/
|
|
23
|
+
export var RuntimeStateErrorCode;
|
|
24
|
+
(function (RuntimeStateErrorCode) {
|
|
25
|
+
RuntimeStateErrorCode["RUNTIME_ID_MISSING"] = "runtimeId.missing";
|
|
26
|
+
RuntimeStateErrorCode["PROVIDER_MISSING"] = "provider.missing";
|
|
27
|
+
RuntimeStateErrorCode["PROVIDER_INVALID"] = "provider.invalid";
|
|
28
|
+
RuntimeStateErrorCode["MODEL_MISSING"] = "model.missing";
|
|
29
|
+
RuntimeStateErrorCode["MODEL_INVALID"] = "model.invalid";
|
|
30
|
+
RuntimeStateErrorCode["AUTH_TYPE_INVALID"] = "authType.invalid";
|
|
31
|
+
RuntimeStateErrorCode["AUTH_API_KEY_MISSING"] = "auth.apiKey.missing";
|
|
32
|
+
RuntimeStateErrorCode["AUTH_TOKEN_MISSING"] = "auth.token.missing";
|
|
33
|
+
RuntimeStateErrorCode["BASE_URL_INVALID"] = "baseUrl.invalid";
|
|
34
|
+
RuntimeStateErrorCode["UPDATE_UNSUPPORTED"] = "update.unsupported";
|
|
35
|
+
RuntimeStateErrorCode["NOT_IMPLEMENTED"] = "not.implemented";
|
|
36
|
+
})(RuntimeStateErrorCode || (RuntimeStateErrorCode = {}));
|
|
37
|
+
/**
|
|
38
|
+
* @plan PLAN-20251027-STATELESS5.P03
|
|
39
|
+
* @requirement REQ-STAT5-001.1
|
|
40
|
+
* @pseudocode runtime-state.md lines 366-381
|
|
41
|
+
*
|
|
42
|
+
* Error thrown during runtime state validation or update.
|
|
43
|
+
*/
|
|
44
|
+
export class RuntimeStateError extends Error {
|
|
45
|
+
code;
|
|
46
|
+
details;
|
|
47
|
+
constructor(code, details) {
|
|
48
|
+
const message = `RuntimeStateError: ${code}`;
|
|
49
|
+
super(message);
|
|
50
|
+
this.code = code;
|
|
51
|
+
this.details = details;
|
|
52
|
+
this.name = 'RuntimeStateError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Global registry for runtime state instances
|
|
56
|
+
const runtimeStateRegistry = new Map();
|
|
57
|
+
// Global subscription registry
|
|
58
|
+
const subscriptionRegistry = new Map();
|
|
59
|
+
// Last timestamp to ensure monotonic increasing timestamps within same runtime
|
|
60
|
+
let lastTimestamp = 0;
|
|
61
|
+
/**
|
|
62
|
+
* Get timestamp for runtime state operations.
|
|
63
|
+
* Ensures monotonic increase even when called in same millisecond.
|
|
64
|
+
* Bounded to stay within 2ms of actual time to handle test timing windows.
|
|
65
|
+
*/
|
|
66
|
+
function getTimestamp() {
|
|
67
|
+
const now = Date.now();
|
|
68
|
+
// If time has naturally advanced, use it and reset tracking
|
|
69
|
+
if (now > lastTimestamp) {
|
|
70
|
+
lastTimestamp = now;
|
|
71
|
+
return now;
|
|
72
|
+
}
|
|
73
|
+
// If same millisecond or very close, increment by 1
|
|
74
|
+
// But cap at now + 1 to prevent drifting too far from actual time
|
|
75
|
+
lastTimestamp = Math.min(lastTimestamp + 1, now + 1);
|
|
76
|
+
return lastTimestamp;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @plan PLAN-20251027-STATELESS5.P05
|
|
80
|
+
* @requirement REQ-STAT5-001.1
|
|
81
|
+
* @pseudocode runtime-state.md lines 73-105
|
|
82
|
+
*
|
|
83
|
+
* Creates a new immutable runtime state instance.
|
|
84
|
+
* Validates all required fields and auth consistency.
|
|
85
|
+
*/
|
|
86
|
+
export function createAgentRuntimeState(params) {
|
|
87
|
+
// Validate runtimeId (lines 75-76)
|
|
88
|
+
if (!params.runtimeId || typeof params.runtimeId !== 'string') {
|
|
89
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.RUNTIME_ID_MISSING);
|
|
90
|
+
}
|
|
91
|
+
// Validate provider (lines 77-78)
|
|
92
|
+
if (!params.provider || typeof params.provider !== 'string') {
|
|
93
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.PROVIDER_MISSING);
|
|
94
|
+
}
|
|
95
|
+
// Validate model (lines 79-80)
|
|
96
|
+
if (!params.model || typeof params.model !== 'string') {
|
|
97
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.MODEL_MISSING);
|
|
98
|
+
}
|
|
99
|
+
// Validate authType (lines 81-82)
|
|
100
|
+
const validAuthTypes = Object.values(AuthType);
|
|
101
|
+
if (!validAuthTypes.includes(params.authType)) {
|
|
102
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.AUTH_TYPE_INVALID, {
|
|
103
|
+
authType: params.authType,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// Validate API_KEY auth payload (lines 83-85)
|
|
107
|
+
if (params.authType === AuthType.API_KEY) {
|
|
108
|
+
if (!params.authPayload?.apiKey) {
|
|
109
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.AUTH_API_KEY_MISSING);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Validate OAUTH auth payload (lines 86-88)
|
|
113
|
+
if (params.authType === AuthType.OAUTH) {
|
|
114
|
+
if (!params.authPayload?.token) {
|
|
115
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.AUTH_TOKEN_MISSING);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Validate baseUrl if provided (lines 89-91)
|
|
119
|
+
if (params.baseUrl) {
|
|
120
|
+
try {
|
|
121
|
+
new URL(params.baseUrl);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.BASE_URL_INVALID, {
|
|
125
|
+
baseUrl: params.baseUrl,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Generate sessionId if not provided (line 101)
|
|
130
|
+
const sessionId = params.sessionId ||
|
|
131
|
+
`session-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
132
|
+
// Create frozen state object (lines 92-103)
|
|
133
|
+
const state = Object.freeze({
|
|
134
|
+
runtimeId: params.runtimeId,
|
|
135
|
+
provider: params.provider,
|
|
136
|
+
model: params.model,
|
|
137
|
+
authType: params.authType,
|
|
138
|
+
authPayload: params.authPayload
|
|
139
|
+
? deepFreeze(params.authPayload)
|
|
140
|
+
: undefined,
|
|
141
|
+
baseUrl: params.baseUrl,
|
|
142
|
+
proxyUrl: params.proxyUrl,
|
|
143
|
+
modelParams: params.modelParams
|
|
144
|
+
? deepFreeze(params.modelParams)
|
|
145
|
+
: undefined,
|
|
146
|
+
sessionId,
|
|
147
|
+
updatedAt: getTimestamp(),
|
|
148
|
+
});
|
|
149
|
+
// Register state in global registry (line 103)
|
|
150
|
+
runtimeStateRegistry.set(params.runtimeId, state);
|
|
151
|
+
return state;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Deep freeze helper for immutable objects
|
|
155
|
+
*/
|
|
156
|
+
function deepFreeze(obj) {
|
|
157
|
+
Object.freeze(obj);
|
|
158
|
+
Object.getOwnPropertyNames(obj).forEach((prop) => {
|
|
159
|
+
const value = obj[prop];
|
|
160
|
+
if (value && typeof value === 'object') {
|
|
161
|
+
deepFreeze(value);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
return obj;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* @plan PLAN-20251027-STATELESS5.P05
|
|
168
|
+
* @requirement REQ-STAT5-001.2
|
|
169
|
+
* @pseudocode runtime-state.md lines 209-243
|
|
170
|
+
*
|
|
171
|
+
* Updates runtime state immutably, returning a new instance.
|
|
172
|
+
* Validates updates and emits synchronous change events.
|
|
173
|
+
*/
|
|
174
|
+
export function updateAgentRuntimeState(oldState, updates) {
|
|
175
|
+
// Validate update keys are allowed (lines 214-218)
|
|
176
|
+
const allowedKeys = [
|
|
177
|
+
'provider',
|
|
178
|
+
'model',
|
|
179
|
+
'authType',
|
|
180
|
+
'authPayload',
|
|
181
|
+
'baseUrl',
|
|
182
|
+
'proxyUrl',
|
|
183
|
+
'modelParams',
|
|
184
|
+
];
|
|
185
|
+
for (const key of Object.keys(updates)) {
|
|
186
|
+
if (!allowedKeys.includes(key)) {
|
|
187
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.UPDATE_UNSUPPORTED, {
|
|
188
|
+
key,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Validate updated fields (lines 219-225)
|
|
193
|
+
if (updates.provider !== undefined) {
|
|
194
|
+
if (!updates.provider || typeof updates.provider !== 'string') {
|
|
195
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.PROVIDER_INVALID, {
|
|
196
|
+
provider: updates.provider,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (updates.model !== undefined) {
|
|
201
|
+
if (!updates.model || typeof updates.model !== 'string') {
|
|
202
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.MODEL_INVALID, {
|
|
203
|
+
model: updates.model,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (updates.authType !== undefined) {
|
|
208
|
+
const validAuthTypes = Object.values(AuthType);
|
|
209
|
+
if (!validAuthTypes.includes(updates.authType)) {
|
|
210
|
+
throw new RuntimeStateError(RuntimeStateErrorCode.AUTH_TYPE_INVALID, {
|
|
211
|
+
authType: updates.authType,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Get timestamp ensuring it's > oldState.updatedAt (lines 226)
|
|
216
|
+
const now = Date.now();
|
|
217
|
+
let updatedAt = now;
|
|
218
|
+
// If we're in the same millisecond as the previous state, wait briefly
|
|
219
|
+
// This ensures timestamps are both monotonically increasing AND bounded by actual time
|
|
220
|
+
if (now <= oldState.updatedAt) {
|
|
221
|
+
// Busy wait for next millisecond (max 1ms wait)
|
|
222
|
+
const target = oldState.updatedAt + 1;
|
|
223
|
+
while (Date.now() < target) {
|
|
224
|
+
// Spin wait
|
|
225
|
+
}
|
|
226
|
+
updatedAt = Date.now();
|
|
227
|
+
}
|
|
228
|
+
// Create new state (lines 226-227)
|
|
229
|
+
const newState = Object.freeze({
|
|
230
|
+
...oldState,
|
|
231
|
+
...updates,
|
|
232
|
+
authPayload: updates.authPayload
|
|
233
|
+
? deepFreeze(updates.authPayload)
|
|
234
|
+
: oldState.authPayload,
|
|
235
|
+
modelParams: updates.modelParams
|
|
236
|
+
? deepFreeze(updates.modelParams)
|
|
237
|
+
: oldState.modelParams,
|
|
238
|
+
updatedAt,
|
|
239
|
+
});
|
|
240
|
+
// Register new state (line 228)
|
|
241
|
+
runtimeStateRegistry.set(newState.runtimeId, newState);
|
|
242
|
+
// Compute changeset (lines 229-233)
|
|
243
|
+
const changes = {};
|
|
244
|
+
for (const key of Object.keys(updates)) {
|
|
245
|
+
const oldValue = oldState[key];
|
|
246
|
+
const newValue = newState[key];
|
|
247
|
+
if (oldValue !== newValue) {
|
|
248
|
+
changes[key] = { old: oldValue, new: newValue };
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Emit event (lines 234-241)
|
|
252
|
+
const event = {
|
|
253
|
+
runtimeId: newState.runtimeId,
|
|
254
|
+
changes,
|
|
255
|
+
snapshot: getAgentRuntimeStateSnapshot(newState),
|
|
256
|
+
timestamp: newState.updatedAt,
|
|
257
|
+
};
|
|
258
|
+
invokeSubscribers(newState.runtimeId, event);
|
|
259
|
+
return newState;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* @plan PLAN-20251027-STATELESS5.P05
|
|
263
|
+
* @requirement REQ-STAT5-002.3
|
|
264
|
+
* @pseudocode runtime-state.md lines 252-278
|
|
265
|
+
*
|
|
266
|
+
* Batch update for atomic multi-field changes (e.g., provider switch).
|
|
267
|
+
* All updates validated together, single event emitted.
|
|
268
|
+
*/
|
|
269
|
+
export function updateAgentRuntimeStateBatch(oldState, updates) {
|
|
270
|
+
// Reuse the same validation and update logic from updateAgentRuntimeState
|
|
271
|
+
// This ensures atomic behavior - if validation fails, nothing is mutated (lines 257-258)
|
|
272
|
+
return updateAgentRuntimeState(oldState, updates);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* @plan PLAN-20251027-STATELESS5.P05
|
|
276
|
+
* @requirement REQ-STAT5-001.3
|
|
277
|
+
* @pseudocode runtime-state.md lines 329-355
|
|
278
|
+
*
|
|
279
|
+
* Returns a frozen snapshot of runtime state for diagnostics.
|
|
280
|
+
* Sanitizes sensitive auth data.
|
|
281
|
+
*/
|
|
282
|
+
export function getAgentRuntimeStateSnapshot(state) {
|
|
283
|
+
// Sanitize auth payload (lines 335, 344-352)
|
|
284
|
+
const sanitizedAuthPayload = sanitizeAuthPayload(state.authPayload);
|
|
285
|
+
// Return frozen snapshot (lines 330-342)
|
|
286
|
+
return Object.freeze({
|
|
287
|
+
runtimeId: state.runtimeId,
|
|
288
|
+
provider: state.provider,
|
|
289
|
+
model: state.model,
|
|
290
|
+
authType: state.authType,
|
|
291
|
+
authPayload: sanitizedAuthPayload,
|
|
292
|
+
baseUrl: state.baseUrl,
|
|
293
|
+
proxyUrl: state.proxyUrl,
|
|
294
|
+
modelParams: state.modelParams ? { ...state.modelParams } : undefined,
|
|
295
|
+
sessionId: state.sessionId,
|
|
296
|
+
updatedAt: state.updatedAt,
|
|
297
|
+
version: 1, // Schema version (line 341)
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* @plan PLAN-20251027-STATELESS5.P05
|
|
302
|
+
* @requirement REQ-STAT5-001.3
|
|
303
|
+
* @pseudocode runtime-state.md lines 344-352
|
|
304
|
+
*
|
|
305
|
+
* Sanitizes auth payload for diagnostics by masking sensitive data.
|
|
306
|
+
*/
|
|
307
|
+
function sanitizeAuthPayload(payload) {
|
|
308
|
+
if (!payload) {
|
|
309
|
+
return undefined;
|
|
310
|
+
}
|
|
311
|
+
const result = {};
|
|
312
|
+
// Mask API key - show only last 4 chars (lines 348-349)
|
|
313
|
+
if (payload.apiKey) {
|
|
314
|
+
const apiKey = payload.apiKey;
|
|
315
|
+
if (apiKey.length > 4) {
|
|
316
|
+
result.apiKey = `***${apiKey.slice(-4)}`;
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
result.apiKey = '***';
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Redact OAuth token (lines 350-351)
|
|
323
|
+
if (payload.token) {
|
|
324
|
+
result.token = '[REDACTED]';
|
|
325
|
+
}
|
|
326
|
+
return result;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* @plan PLAN-20251027-STATELESS5.P05
|
|
330
|
+
* @requirement REQ-STAT5-003.2
|
|
331
|
+
* @pseudocode runtime-state.md lines 289-318
|
|
332
|
+
*
|
|
333
|
+
* Subscribes to runtime state change events.
|
|
334
|
+
* Returns unsubscribe function to remove callback.
|
|
335
|
+
*/
|
|
336
|
+
export function subscribeToAgentRuntimeState(runtimeId, callback, options) {
|
|
337
|
+
// Validate inputs (lines 294-295)
|
|
338
|
+
if (!runtimeId || typeof runtimeId !== 'string') {
|
|
339
|
+
throw new Error('runtimeId must be a non-empty string');
|
|
340
|
+
}
|
|
341
|
+
if (typeof callback !== 'function') {
|
|
342
|
+
throw new Error('callback must be a function');
|
|
343
|
+
}
|
|
344
|
+
// Get or create subscriber list (line 296)
|
|
345
|
+
let subscribers = subscriptionRegistry.get(runtimeId);
|
|
346
|
+
if (!subscribers) {
|
|
347
|
+
subscribers = new Map();
|
|
348
|
+
subscriptionRegistry.set(runtimeId, subscribers);
|
|
349
|
+
}
|
|
350
|
+
// Generate unique subscription ID (line 297)
|
|
351
|
+
const subscriptionId = `sub-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
352
|
+
// Store subscription (lines 298-302)
|
|
353
|
+
subscribers.set(subscriptionId, {
|
|
354
|
+
callback,
|
|
355
|
+
async: options?.async || false,
|
|
356
|
+
});
|
|
357
|
+
// Return unsubscribe function (lines 303-306)
|
|
358
|
+
return () => {
|
|
359
|
+
const subs = subscriptionRegistry.get(runtimeId);
|
|
360
|
+
if (subs) {
|
|
361
|
+
subs.delete(subscriptionId);
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* @plan PLAN-20251027-STATELESS5.P05
|
|
367
|
+
* @requirement REQ-STAT5-003.2
|
|
368
|
+
* @pseudocode runtime-state.md lines 308-316
|
|
369
|
+
*
|
|
370
|
+
* Invokes all subscribers for a given runtime ID.
|
|
371
|
+
* Handles both synchronous and async callbacks with error isolation.
|
|
372
|
+
*/
|
|
373
|
+
function invokeSubscribers(runtimeId, event) {
|
|
374
|
+
const subscribers = subscriptionRegistry.get(runtimeId);
|
|
375
|
+
if (!subscribers || subscribers.size === 0) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
// Invoke each subscriber (lines 309-315)
|
|
379
|
+
for (const subscription of subscribers.values()) {
|
|
380
|
+
try {
|
|
381
|
+
if (subscription.async) {
|
|
382
|
+
// Async callback - queue as microtask (line 311-312)
|
|
383
|
+
queueMicrotask(() => {
|
|
384
|
+
try {
|
|
385
|
+
subscription.callback(event);
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
// Error handling to prevent cascade failures (line 315)
|
|
389
|
+
console.error('Error in async runtime state callback:', error);
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
// Synchronous callback (line 313-314)
|
|
395
|
+
subscription.callback(event);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
// Error handling to prevent cascade failures (line 315)
|
|
400
|
+
console.error('Error in runtime state callback:', error);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* @plan PLAN-20251027-STATELESS5.P03
|
|
406
|
+
* @requirement REQ-STAT5-003.1
|
|
407
|
+
* @pseudocode runtime-state.md lines 150-173
|
|
408
|
+
*
|
|
409
|
+
* Synchronous accessors for runtime state fields.
|
|
410
|
+
* STUB: Minimal implementations for type safety.
|
|
411
|
+
*/
|
|
412
|
+
export function getProvider(state) {
|
|
413
|
+
return state.provider;
|
|
414
|
+
}
|
|
415
|
+
export function getModel(state) {
|
|
416
|
+
return state.model;
|
|
417
|
+
}
|
|
418
|
+
export function getAuthType(state) {
|
|
419
|
+
return state.authType;
|
|
420
|
+
}
|
|
421
|
+
export function getAuthPayload(state) {
|
|
422
|
+
if (!state.authPayload) {
|
|
423
|
+
return undefined;
|
|
424
|
+
}
|
|
425
|
+
return Object.freeze({ ...state.authPayload });
|
|
426
|
+
}
|
|
427
|
+
export function getBaseUrl(state) {
|
|
428
|
+
return state.baseUrl;
|
|
429
|
+
}
|
|
430
|
+
export function getSessionId(state) {
|
|
431
|
+
return state.sessionId;
|
|
432
|
+
}
|
|
433
|
+
export function getModelParams(state) {
|
|
434
|
+
if (!state.modelParams) {
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
return Object.freeze({ ...state.modelParams });
|
|
438
|
+
}
|
|
439
|
+
//# sourceMappingURL=AgentRuntimeState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentRuntimeState.js","sourceRoot":"","sources":["../../../src/runtime/AgentRuntimeState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* RuntimeInvocationContext captures immutable, per-call metadata that providers
|
|
8
|
+
* need to construct stateless requests without reading from Config directly.
|
|
9
|
+
*
|
|
10
|
+
* @plan PLAN-20251029-STATELESS8.P01
|
|
11
|
+
* @requirement REQ-STAT8-001
|
|
12
|
+
*/
|
|
13
|
+
import type { RedactionConfig } from '../config/config.js';
|
|
14
|
+
import type { SettingsService } from '../settings/SettingsService.js';
|
|
15
|
+
import type { ProviderTelemetryContext } from '../providers/types/providerRuntime.js';
|
|
16
|
+
import type { ProviderRuntimeContext } from './providerRuntimeContext.js';
|
|
17
|
+
export interface RuntimeInvocationContext {
|
|
18
|
+
/** Stable identifier for the invocation/runtime */
|
|
19
|
+
readonly runtimeId: string;
|
|
20
|
+
/** Immutable metadata merged from caller + provider manager layers */
|
|
21
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
22
|
+
/** Per-call settings service (stateless view) */
|
|
23
|
+
readonly settings: SettingsService;
|
|
24
|
+
/** Snapshot of global ephemeral overrides for this invocation */
|
|
25
|
+
readonly ephemerals: Readonly<Record<string, unknown>>;
|
|
26
|
+
/** Optional telemetry context derived during normalization */
|
|
27
|
+
readonly telemetry?: ProviderTelemetryContext;
|
|
28
|
+
/** Optional user memory snapshot for providers that need it */
|
|
29
|
+
readonly userMemory?: string;
|
|
30
|
+
/** Optional redaction configuration for logging/telemetry surfaces */
|
|
31
|
+
readonly redaction?: Readonly<RedactionConfig>;
|
|
32
|
+
/** Helper to read a strongly-typed ephemeral override */
|
|
33
|
+
getEphemeral<T = unknown>(key: string): T | undefined;
|
|
34
|
+
/** Helper to read nested provider-specific overrides (e.g. "openai") */
|
|
35
|
+
getProviderOverrides<T = Record<string, unknown>>(providerName: string): T | undefined;
|
|
36
|
+
}
|
|
37
|
+
export interface RuntimeInvocationContextInit {
|
|
38
|
+
runtime: ProviderRuntimeContext;
|
|
39
|
+
settings: SettingsService;
|
|
40
|
+
providerName: string;
|
|
41
|
+
telemetry?: ProviderTelemetryContext;
|
|
42
|
+
metadata?: Record<string, unknown>;
|
|
43
|
+
ephemeralsSnapshot?: Record<string, unknown>;
|
|
44
|
+
/** Optional snapshot of user memory for downstream prompt resolution */
|
|
45
|
+
userMemory?: string;
|
|
46
|
+
/** Optional redaction configuration override */
|
|
47
|
+
redaction?: RedactionConfig;
|
|
48
|
+
/** Optional fallback runtime id when runtime.runtimeId is missing */
|
|
49
|
+
fallbackRuntimeId?: string;
|
|
50
|
+
}
|
|
51
|
+
export declare function createRuntimeInvocationContext(init: RuntimeInvocationContextInit): RuntimeInvocationContext;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
function cloneAndFreeze(value) {
|
|
7
|
+
if (!value) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
const clone = Object.assign({}, value);
|
|
11
|
+
return Object.freeze(clone);
|
|
12
|
+
}
|
|
13
|
+
export function createRuntimeInvocationContext(init) {
|
|
14
|
+
const runtimeId = typeof init.runtime.runtimeId === 'string' &&
|
|
15
|
+
init.runtime.runtimeId.trim() !== ''
|
|
16
|
+
? init.runtime.runtimeId
|
|
17
|
+
: (init.fallbackRuntimeId ?? '');
|
|
18
|
+
if (!runtimeId) {
|
|
19
|
+
throw new Error('RuntimeInvocationContext requires a non-empty runtimeId.');
|
|
20
|
+
}
|
|
21
|
+
const mergedMetadata = Object.freeze({
|
|
22
|
+
...(init.runtime.metadata ?? {}),
|
|
23
|
+
...(init.metadata ?? {}),
|
|
24
|
+
});
|
|
25
|
+
if (init.ephemeralsSnapshot === undefined) {
|
|
26
|
+
throw new Error(`RuntimeInvocationContext requires provider ephemerals for provider "${init.providerName}".`);
|
|
27
|
+
}
|
|
28
|
+
const ephemerals = Object.freeze({ ...init.ephemeralsSnapshot });
|
|
29
|
+
const redaction = cloneAndFreeze(init.redaction) ?? undefined;
|
|
30
|
+
const userMemory = init.userMemory;
|
|
31
|
+
const context = {
|
|
32
|
+
runtimeId,
|
|
33
|
+
metadata: mergedMetadata,
|
|
34
|
+
settings: init.settings,
|
|
35
|
+
ephemerals,
|
|
36
|
+
telemetry: init.telemetry,
|
|
37
|
+
userMemory,
|
|
38
|
+
redaction,
|
|
39
|
+
getEphemeral(key) {
|
|
40
|
+
return ephemerals[key];
|
|
41
|
+
},
|
|
42
|
+
getProviderOverrides(providerName) {
|
|
43
|
+
const raw = ephemerals[providerName];
|
|
44
|
+
if (!raw || typeof raw !== 'object') {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return raw;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
return Object.freeze(context);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=RuntimeInvocationContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeInvocationContext.js","sourceRoot":"","sources":["../../../src/runtime/RuntimeInvocationContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqDH,SAAS,cAAc,CACrB,KAAoB;IAEpB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAM,CAAC;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAgB,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,IAAkC;IAElC,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ;QAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;QAClC,CAAC,CAAE,IAAI,CAAC,OAAO,CAAC,SAAoB;QACpC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAErC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;KACzB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,uEAAuE,IAAI,CAAC,YAAY,IAAI,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEjE,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAEnC,MAAM,OAAO,GAA6B;QACxC,SAAS;QACT,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU;QACV,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU;QACV,SAAS;QACT,YAAY,CAAc,GAAW;YACnC,OAAO,UAAU,CAAC,GAAG,CAAkB,CAAC;QAC1C,CAAC;QACD,oBAAoB,CAClB,YAAoB;YAEpB,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,GAAQ,CAAC;QAClB,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentRuntimeContext, AgentRuntimeContextFactoryOptions } from './AgentRuntimeContext.js';
|
|
7
|
+
export declare function createAgentRuntimeContext(options: AgentRuntimeContextFactoryOptions): AgentRuntimeContext;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @plan PLAN-20251028-STATELESS6.P06
|
|
8
|
+
* @requirement REQ-STAT6-001.1, REQ-STAT6-001.3, REQ-STAT6-002.2, REQ-STAT6-002.3
|
|
9
|
+
* @pseudocode agent-runtime-context.md lines 64-81
|
|
10
|
+
*
|
|
11
|
+
* Factory for creating immutable agent runtime contexts.
|
|
12
|
+
*/
|
|
13
|
+
import { HistoryService } from '../services/history/HistoryService.js';
|
|
14
|
+
const EPHEMERAL_DEFAULTS = {
|
|
15
|
+
compressionThreshold: 0.8,
|
|
16
|
+
contextLimit: 60_000,
|
|
17
|
+
preserveThreshold: 0.2,
|
|
18
|
+
};
|
|
19
|
+
export function createAgentRuntimeContext(options) {
|
|
20
|
+
if (!options.provider) {
|
|
21
|
+
throw new Error('AgentRuntimeContext requires a provider adapter. Supply options.provider.');
|
|
22
|
+
}
|
|
23
|
+
if (!options.telemetry) {
|
|
24
|
+
throw new Error('AgentRuntimeContext requires a telemetry adapter. Supply options.telemetry.');
|
|
25
|
+
}
|
|
26
|
+
if (!options.tools) {
|
|
27
|
+
throw new Error('AgentRuntimeContext requires a tools view. Supply options.tools.');
|
|
28
|
+
}
|
|
29
|
+
if (!options.providerRuntime) {
|
|
30
|
+
throw new Error('AgentRuntimeContext requires a provider runtime context. Supply options.providerRuntime.');
|
|
31
|
+
}
|
|
32
|
+
const history = options.history ?? new HistoryService();
|
|
33
|
+
const ephemerals = {
|
|
34
|
+
compressionThreshold: () => options.settings.compressionThreshold ??
|
|
35
|
+
EPHEMERAL_DEFAULTS.compressionThreshold,
|
|
36
|
+
contextLimit: () => options.settings.contextLimit ?? EPHEMERAL_DEFAULTS.contextLimit,
|
|
37
|
+
preserveThreshold: () => options.settings.preserveThreshold ??
|
|
38
|
+
EPHEMERAL_DEFAULTS.preserveThreshold,
|
|
39
|
+
toolFormatOverride: () => options.settings.toolFormatOverride,
|
|
40
|
+
};
|
|
41
|
+
const providerRuntime = Object.freeze({
|
|
42
|
+
...options.providerRuntime,
|
|
43
|
+
metadata: options.providerRuntime.metadata
|
|
44
|
+
? Object.freeze({ ...options.providerRuntime.metadata })
|
|
45
|
+
: undefined,
|
|
46
|
+
});
|
|
47
|
+
const context = {
|
|
48
|
+
state: options.state,
|
|
49
|
+
history,
|
|
50
|
+
ephemerals,
|
|
51
|
+
telemetry: options.telemetry,
|
|
52
|
+
provider: options.provider,
|
|
53
|
+
tools: options.tools,
|
|
54
|
+
providerRuntime,
|
|
55
|
+
};
|
|
56
|
+
return Object.freeze(context);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=createAgentRuntimeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAgentRuntimeContext.js","sourceRoot":"","sources":["../../../src/runtime/createAgentRuntimeContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAOvE,MAAM,kBAAkB,GAAG;IACzB,oBAAoB,EAAE,GAAG;IACzB,YAAY,EAAE,MAAM;IACpB,iBAAiB,EAAE,GAAG;CACd,CAAC;AAEX,MAAM,UAAU,yBAAyB,CACvC,OAA0C;IAE1C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,cAAc,EAAE,CAAC;IAExD,MAAM,UAAU,GAAG;QACjB,oBAAoB,EAAE,GAAW,EAAE,CACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;YACrC,kBAAkB,CAAC,oBAAoB;QACzC,YAAY,EAAE,GAAW,EAAE,CACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,kBAAkB,CAAC,YAAY;QAClE,iBAAiB,EAAE,GAAW,EAAE,CAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;YAClC,kBAAkB,CAAC,iBAAiB;QACtC,kBAAkB,EAAE,GAAuB,EAAE,CAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB;KACtC,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,GAAG,OAAO,CAAC,eAAe;QAC1B,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,QAAQ;YACxC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YACxD,CAAC,CAAC,SAAS;KACd,CAA2B,CAAC;IAE7B,MAAM,OAAO,GAAwB;QACnC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO;QACP,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,eAAe;KAChB,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @plan PLAN-20251027-STATELESS5.P03
|
|
8
|
+
*
|
|
9
|
+
* Runtime module exports.
|
|
10
|
+
*/
|
|
11
|
+
export * from './providerRuntimeContext.js';
|
|
12
|
+
export * from './AgentRuntimeState.js';
|
|
13
|
+
export * from './AgentRuntimeLoader.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @plan PLAN-20251027-STATELESS5.P03
|
|
8
|
+
*
|
|
9
|
+
* Runtime module exports.
|
|
10
|
+
*/
|
|
11
|
+
export * from './providerRuntimeContext.js';
|
|
12
|
+
export * from './AgentRuntimeState.js';
|
|
13
|
+
export * from './AgentRuntimeLoader.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAEH,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC"}
|