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