@wrongstack/webui 0.7.2 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/entry.js +77 -21
- package/dist/server/entry.js.map +1 -1
- package/dist/server/index.js +77 -21
- package/dist/server/index.js.map +1 -1
- package/package.json +5 -5
package/dist/server/entry.js
CHANGED
|
@@ -7,18 +7,18 @@ import {
|
|
|
7
7
|
Agent,
|
|
8
8
|
AutoCompactionMiddleware,
|
|
9
9
|
Context,
|
|
10
|
-
DefaultMemoryStore,
|
|
11
|
-
DefaultModeStore,
|
|
10
|
+
DefaultMemoryStore as DefaultMemoryStore2,
|
|
11
|
+
DefaultModeStore as DefaultModeStore2,
|
|
12
12
|
DefaultModelsRegistry,
|
|
13
|
-
DefaultSessionStore,
|
|
14
|
-
DefaultSkillLoader,
|
|
15
|
-
DefaultSystemPromptBuilder,
|
|
16
|
-
DefaultTokenCounter,
|
|
13
|
+
DefaultSessionStore as DefaultSessionStore2,
|
|
14
|
+
DefaultSkillLoader as DefaultSkillLoader2,
|
|
15
|
+
DefaultSystemPromptBuilder as DefaultSystemPromptBuilder2,
|
|
16
|
+
DefaultTokenCounter as DefaultTokenCounter2,
|
|
17
17
|
estimateRequestTokens,
|
|
18
18
|
EventBus,
|
|
19
|
-
HybridCompactor,
|
|
19
|
+
HybridCompactor as HybridCompactor2,
|
|
20
20
|
ProviderRegistry,
|
|
21
|
-
TOKENS,
|
|
21
|
+
TOKENS as TOKENS2,
|
|
22
22
|
ToolRegistry,
|
|
23
23
|
atomicWrite,
|
|
24
24
|
createDefaultPipelines,
|
|
@@ -34,7 +34,63 @@ import { buildProviderFactoriesFromRegistry, makeProviderFromConfig } from "@wro
|
|
|
34
34
|
import { builtinToolsPack, forgetTool, rememberTool } from "@wrongstack/tools";
|
|
35
35
|
import { WebSocket, WebSocketServer } from "ws";
|
|
36
36
|
import { randomBytes } from "crypto";
|
|
37
|
-
|
|
37
|
+
|
|
38
|
+
// ../runtime/src/container.ts
|
|
39
|
+
import {
|
|
40
|
+
Container,
|
|
41
|
+
DefaultConfigStore,
|
|
42
|
+
DefaultErrorHandler,
|
|
43
|
+
DefaultMemoryStore,
|
|
44
|
+
DefaultModeStore,
|
|
45
|
+
DefaultPermissionPolicy,
|
|
46
|
+
DefaultRetryPolicy,
|
|
47
|
+
DefaultSecretScrubber,
|
|
48
|
+
DefaultSessionStore,
|
|
49
|
+
DefaultSkillLoader,
|
|
50
|
+
DefaultSystemPromptBuilder,
|
|
51
|
+
DefaultTokenCounter,
|
|
52
|
+
HybridCompactor,
|
|
53
|
+
TOKENS
|
|
54
|
+
} from "@wrongstack/core";
|
|
55
|
+
function createDefaultContainer(opts) {
|
|
56
|
+
const { config, wpaths, logger, modelsRegistry } = opts;
|
|
57
|
+
const container = new Container();
|
|
58
|
+
const configStore = new DefaultConfigStore(config);
|
|
59
|
+
container.bind(TOKENS.ConfigStore, () => configStore);
|
|
60
|
+
container.bind(TOKENS.Logger, () => logger);
|
|
61
|
+
container.bind(TOKENS.SecretScrubber, () => new DefaultSecretScrubber());
|
|
62
|
+
container.bind(TOKENS.RetryPolicy, () => new DefaultRetryPolicy());
|
|
63
|
+
container.bind(TOKENS.ErrorHandler, () => new DefaultErrorHandler());
|
|
64
|
+
container.bind(TOKENS.ModelsRegistry, () => modelsRegistry);
|
|
65
|
+
container.bind(TOKENS.TokenCounter, () => new DefaultTokenCounter({ registry: modelsRegistry, providerId: config.provider }));
|
|
66
|
+
const modeStore = new DefaultModeStore({ directory: wpaths.configDir });
|
|
67
|
+
container.bind(TOKENS.ModeStore, () => modeStore);
|
|
68
|
+
container.bind(TOKENS.SessionStore, () => new DefaultSessionStore({ dir: wpaths.projectSessions }));
|
|
69
|
+
const memoryStore = new DefaultMemoryStore({ paths: wpaths });
|
|
70
|
+
container.bind(TOKENS.MemoryStore, () => memoryStore);
|
|
71
|
+
const skillLoader = new DefaultSkillLoader({ paths: wpaths, bundledDir: opts.bundledSkillsDir });
|
|
72
|
+
container.bind(TOKENS.SkillLoader, () => skillLoader);
|
|
73
|
+
if (opts.systemPrompt) {
|
|
74
|
+
container.bind(TOKENS.SystemPromptBuilder, () => new DefaultSystemPromptBuilder(opts.systemPrompt));
|
|
75
|
+
}
|
|
76
|
+
container.bind(
|
|
77
|
+
TOKENS.PermissionPolicy,
|
|
78
|
+
() => new DefaultPermissionPolicy({
|
|
79
|
+
trustFile: wpaths.projectTrust,
|
|
80
|
+
yolo: opts.permission?.yolo ?? false,
|
|
81
|
+
forceAllYolo: opts.permission?.forceAllYolo ?? false,
|
|
82
|
+
promptDelegate: opts.permission?.promptDelegate
|
|
83
|
+
})
|
|
84
|
+
);
|
|
85
|
+
container.bind(
|
|
86
|
+
TOKENS.Compactor,
|
|
87
|
+
() => new HybridCompactor({
|
|
88
|
+
preserveK: opts.compactor?.preserveK ?? 20,
|
|
89
|
+
eliseThreshold: opts.compactor?.eliseThreshold ?? 0.7
|
|
90
|
+
})
|
|
91
|
+
);
|
|
92
|
+
return container;
|
|
93
|
+
}
|
|
38
94
|
|
|
39
95
|
// src/server/boot.ts
|
|
40
96
|
import * as fs from "fs/promises";
|
|
@@ -100,7 +156,7 @@ async function startWebUI(opts = {}) {
|
|
|
100
156
|
ttlSeconds: 24 * 3600
|
|
101
157
|
});
|
|
102
158
|
const container = createDefaultContainer({ config, wpaths, logger, modelsRegistry });
|
|
103
|
-
const configStore = container.resolve(
|
|
159
|
+
const configStore = container.resolve(TOKENS2.ConfigStore);
|
|
104
160
|
const providerRegistry = new ProviderRegistry();
|
|
105
161
|
try {
|
|
106
162
|
const factories = await buildProviderFactoriesFromRegistry({
|
|
@@ -114,7 +170,7 @@ async function startWebUI(opts = {}) {
|
|
|
114
170
|
}
|
|
115
171
|
const toolRegistry = new ToolRegistry();
|
|
116
172
|
toolRegistry.registerAllOrThrow([...builtinToolsPack.tools ?? []], builtinToolsPack.name);
|
|
117
|
-
const memoryStore = new
|
|
173
|
+
const memoryStore = new DefaultMemoryStore2({ paths: wpaths });
|
|
118
174
|
if (config.features.memory) {
|
|
119
175
|
toolRegistry.register(rememberTool(memoryStore));
|
|
120
176
|
toolRegistry.register(forgetTool(memoryStore));
|
|
@@ -122,7 +178,7 @@ async function startWebUI(opts = {}) {
|
|
|
122
178
|
console.log("[WebUI] Tool registry loaded:", toolRegistry.list().length, "tools");
|
|
123
179
|
const events = new EventBus();
|
|
124
180
|
events.setLogger(logger);
|
|
125
|
-
const sessionStore = new
|
|
181
|
+
const sessionStore = new DefaultSessionStore2({ dir: wpaths.projectSessions });
|
|
126
182
|
let session = await sessionStore.create({
|
|
127
183
|
id: "",
|
|
128
184
|
title: "",
|
|
@@ -131,11 +187,11 @@ async function startWebUI(opts = {}) {
|
|
|
131
187
|
});
|
|
132
188
|
let sessionStartedAt = Date.now();
|
|
133
189
|
console.log("[WebUI] Session created:", session.id);
|
|
134
|
-
const tokenCounter = new
|
|
190
|
+
const tokenCounter = new DefaultTokenCounter2({
|
|
135
191
|
registry: modelsRegistry,
|
|
136
192
|
providerId: config.provider
|
|
137
193
|
});
|
|
138
|
-
const modeStore = new
|
|
194
|
+
const modeStore = new DefaultModeStore2({ directory: wpaths.configDir });
|
|
139
195
|
const activeMode = await modeStore.getActiveMode();
|
|
140
196
|
let modeId = activeMode?.id ?? "default";
|
|
141
197
|
const modePrompt = activeMode?.prompt ?? "";
|
|
@@ -146,8 +202,8 @@ async function startWebUI(opts = {}) {
|
|
|
146
202
|
supportsVision: resolvedModel.capabilities.vision,
|
|
147
203
|
supportsReasoning: resolvedModel.capabilities.reasoning
|
|
148
204
|
} : void 0;
|
|
149
|
-
const skillLoader = config.features.skills ? new
|
|
150
|
-
const systemPromptBuilder = new
|
|
205
|
+
const skillLoader = config.features.skills ? new DefaultSkillLoader2({ paths: wpaths }) : void 0;
|
|
206
|
+
const systemPromptBuilder = new DefaultSystemPromptBuilder2({
|
|
151
207
|
memoryStore,
|
|
152
208
|
skillLoader,
|
|
153
209
|
modeStore,
|
|
@@ -217,7 +273,7 @@ async function startWebUI(opts = {}) {
|
|
|
217
273
|
context.meta["contextWindowMode"] = initialContextPolicy.id;
|
|
218
274
|
context.meta["contextWindowPolicy"] = initialContextPolicy;
|
|
219
275
|
const pipelines = createDefaultPipelines();
|
|
220
|
-
const compactor = new
|
|
276
|
+
const compactor = new HybridCompactor2({
|
|
221
277
|
preserveK: config.context?.preserveK ?? 20,
|
|
222
278
|
eliseThreshold: config.context?.eliseThreshold ?? 0.7
|
|
223
279
|
});
|
|
@@ -254,10 +310,10 @@ async function startWebUI(opts = {}) {
|
|
|
254
310
|
}
|
|
255
311
|
autoCompactor.setMaxContext(newMaxContext);
|
|
256
312
|
}
|
|
257
|
-
const secretScrubber = container.resolve(
|
|
258
|
-
const renderer = container.has(
|
|
313
|
+
const secretScrubber = container.resolve(TOKENS2.SecretScrubber);
|
|
314
|
+
const renderer = container.has(TOKENS2.Renderer) ? container.resolve(TOKENS2.Renderer) : void 0;
|
|
259
315
|
const toolExecutor = new ToolExecutor(toolRegistry, {
|
|
260
|
-
permissionPolicy: container.resolve(
|
|
316
|
+
permissionPolicy: container.resolve(TOKENS2.PermissionPolicy),
|
|
261
317
|
secretScrubber,
|
|
262
318
|
renderer,
|
|
263
319
|
events,
|
|
@@ -1236,7 +1292,7 @@ async function startWebUI(opts = {}) {
|
|
|
1236
1292
|
}
|
|
1237
1293
|
modeId = id;
|
|
1238
1294
|
const modePrompt2 = id === "default" ? "" : (await modeStore.getMode(id))?.prompt ?? "";
|
|
1239
|
-
const freshBuilder = new
|
|
1295
|
+
const freshBuilder = new DefaultSystemPromptBuilder2({
|
|
1240
1296
|
memoryStore,
|
|
1241
1297
|
skillLoader,
|
|
1242
1298
|
modeStore,
|