@wrongstack/webui 0.7.2 → 0.7.4

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.
@@ -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
- import { createDefaultContainer } from "@wrongstack/runtime";
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(TOKENS.ConfigStore);
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 DefaultMemoryStore({ paths: wpaths });
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 DefaultSessionStore({ dir: wpaths.projectSessions });
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 DefaultTokenCounter({
190
+ const tokenCounter = new DefaultTokenCounter2({
135
191
  registry: modelsRegistry,
136
192
  providerId: config.provider
137
193
  });
138
- const modeStore = new DefaultModeStore({ directory: wpaths.configDir });
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 DefaultSkillLoader({ paths: wpaths }) : void 0;
150
- const systemPromptBuilder = new DefaultSystemPromptBuilder({
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 HybridCompactor({
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(TOKENS.SecretScrubber);
258
- const renderer = container.has(TOKENS.Renderer) ? container.resolve(TOKENS.Renderer) : void 0;
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(TOKENS.PermissionPolicy),
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 DefaultSystemPromptBuilder({
1295
+ const freshBuilder = new DefaultSystemPromptBuilder2({
1240
1296
  memoryStore,
1241
1297
  skillLoader,
1242
1298
  modeStore,