neoctl 0.2.43 → 0.2.45

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,12 +6,21 @@ export const NEO_PLUGIN_MANIFEST = "neo-plugin.json";
6
6
  export async function loadNeoPlugins(options) {
7
7
  const roots = normalizeRoots(options.directories);
8
8
  const plugins = [];
9
- for (const root of roots)
10
- plugins.push(...await loadPluginRoot(root, options));
11
- plugins.sort((left, right) => left.id.localeCompare(right.id));
12
- assertUnique(plugins.map((plugin) => plugin.id), "duplicate plugin id");
13
- assertUnique(plugins.flatMap((plugin) => plugin.tools ?? []).map((tool) => tool.name), "duplicate tool name across plugins");
14
- return plugins;
9
+ try {
10
+ for (const root of roots)
11
+ plugins.push(...await loadPluginRoot(root, options));
12
+ for (const directory of options.pluginDirectories ?? []) {
13
+ plugins.push(...await loadPluginRoot(path.dirname(directory), options, path.basename(directory)));
14
+ }
15
+ plugins.sort((left, right) => left.id.localeCompare(right.id));
16
+ assertUnique(plugins.map((plugin) => plugin.id), "duplicate plugin id");
17
+ assertUnique(plugins.flatMap((plugin) => plugin.tools ?? []).map((tool) => tool.name), "duplicate tool name across plugins");
18
+ return plugins;
19
+ }
20
+ catch (error) {
21
+ await disposePlugins(plugins);
22
+ throw error;
23
+ }
15
24
  }
16
25
  export function validateNeoPluginManifest(value, manifestPath = NEO_PLUGIN_MANIFEST) {
17
26
  if (!isRecord(value))
@@ -36,7 +45,7 @@ export function validateNeoPluginManifest(value, manifestPath = NEO_PLUGIN_MANIF
36
45
  ...(typeof value.description === "string" && value.description.trim() ? { description: value.description.trim() } : {}),
37
46
  };
38
47
  }
39
- async function loadPluginRoot(root, options) {
48
+ async function loadPluginRoot(root, options, only) {
40
49
  let entries;
41
50
  try {
42
51
  entries = await readdir(root, { withFileTypes: true });
@@ -46,53 +55,71 @@ async function loadPluginRoot(root, options) {
46
55
  return [];
47
56
  throw error;
48
57
  }
49
- const directories = entries.filter((entry) => entry.isDirectory()).sort((left, right) => left.name.localeCompare(right.name));
58
+ const directories = entries.filter((entry) => entry.isDirectory() && (!only || entry.name === only)).sort((left, right) => left.name.localeCompare(right.name));
50
59
  const plugins = [];
51
- for (const entry of directories) {
52
- const pluginDir = path.resolve(root, entry.name);
53
- const manifestPath = path.join(pluginDir, NEO_PLUGIN_MANIFEST);
54
- let rawManifest;
55
- try {
56
- rawManifest = await readFile(manifestPath, "utf8");
57
- }
58
- catch (error) {
59
- if (isNodeError(error) && error.code === "ENOENT")
60
- continue;
61
- throw error;
62
- }
63
- let parsedManifest;
64
- try {
65
- parsedManifest = JSON.parse(rawManifest);
66
- }
67
- catch (error) {
68
- throw new Error(`invalid plugin manifest ${manifestPath}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
69
- }
70
- const manifest = validateNeoPluginManifest(parsedManifest, manifestPath);
71
- const entryPath = resolveContainedEntry(pluginDir, manifest.entry, manifestPath);
72
- const module = await import(pathToFileURL(entryPath).href);
73
- const factory = module.createPlugin ?? module.default;
74
- if (typeof factory !== "function") {
75
- throw new Error(`invalid plugin module ${entryPath}: export createPlugin(context) or a default factory`);
60
+ try {
61
+ for (const entry of directories) {
62
+ const pluginDir = path.resolve(root, entry.name);
63
+ const manifestPath = path.join(pluginDir, NEO_PLUGIN_MANIFEST);
64
+ let rawManifest;
65
+ try {
66
+ rawManifest = await readFile(manifestPath, "utf8");
67
+ }
68
+ catch (error) {
69
+ if (isNodeError(error) && error.code === "ENOENT")
70
+ continue;
71
+ throw error;
72
+ }
73
+ let parsedManifest;
74
+ try {
75
+ parsedManifest = JSON.parse(rawManifest);
76
+ }
77
+ catch (error) {
78
+ throw new Error(`invalid plugin manifest ${manifestPath}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
79
+ }
80
+ const manifest = validateNeoPluginManifest(parsedManifest, manifestPath);
81
+ const entryPath = resolveContainedEntry(pluginDir, manifest.entry, manifestPath);
82
+ const module = await import(pathToFileURL(entryPath).href);
83
+ const factory = module.createPlugin ?? module.default;
84
+ if (typeof factory !== "function") {
85
+ throw new Error(`invalid plugin module ${entryPath}: export createPlugin(context) or a default factory`);
86
+ }
87
+ const context = Object.freeze({
88
+ manifest: Object.freeze({ ...manifest }),
89
+ pluginDir,
90
+ ...(options.appDataDir ? { appDataDir: path.resolve(options.appDataDir) } : {}),
91
+ env: Object.freeze({ ...(options.env ?? process.env) }),
92
+ });
93
+ const rawCapabilities = await factory(context);
94
+ let capabilities;
95
+ try {
96
+ capabilities = normalizeCapabilities(rawCapabilities, entryPath);
97
+ }
98
+ catch (error) {
99
+ if (typeof rawCapabilities?.dispose === "function")
100
+ await Promise.resolve().then(() => rawCapabilities.dispose()).catch(() => { });
101
+ throw error;
102
+ }
103
+ plugins.push({
104
+ id: manifest.id,
105
+ name: manifest.name,
106
+ version: manifest.version,
107
+ description: manifest.description,
108
+ defaultEnabled: manifest.defaultEnabled !== false,
109
+ sourceDir: pluginDir,
110
+ manifestPath,
111
+ ...capabilities,
112
+ });
76
113
  }
77
- const context = Object.freeze({
78
- manifest: Object.freeze({ ...manifest }),
79
- pluginDir,
80
- ...(options.appDataDir ? { appDataDir: path.resolve(options.appDataDir) } : {}),
81
- env: Object.freeze({ ...(options.env ?? process.env) }),
82
- });
83
- const capabilities = normalizeCapabilities(await factory(context), entryPath);
84
- plugins.push({
85
- id: manifest.id,
86
- name: manifest.name,
87
- version: manifest.version,
88
- description: manifest.description,
89
- defaultEnabled: manifest.defaultEnabled !== false,
90
- sourceDir: pluginDir,
91
- manifestPath,
92
- ...capabilities,
93
- });
94
- }
95
- return plugins;
114
+ return plugins;
115
+ }
116
+ catch (error) {
117
+ await disposePlugins(plugins);
118
+ throw error;
119
+ }
120
+ }
121
+ async function disposePlugins(plugins) {
122
+ await Promise.allSettled(plugins.map(plugin => Promise.resolve().then(() => plugin.dispose?.())));
96
123
  }
97
124
  function normalizeCapabilities(value, entryPath) {
98
125
  if (!isRecord(value))
@@ -109,10 +136,13 @@ function normalizeCapabilities(value, entryPath) {
109
136
  if (value.presentToolResult !== undefined && typeof value.presentToolResult !== "function") {
110
137
  throw new Error(`invalid plugin module ${entryPath}: presentToolResult must be a function`);
111
138
  }
139
+ if (value.dispose !== undefined && typeof value.dispose !== "function")
140
+ throw new Error(`invalid plugin module ${entryPath}: dispose must be a function`);
112
141
  const normalizedTools = tools;
113
142
  const normalizedSections = promptSections;
114
143
  assertUnique(normalizedTools.map((tool) => tool.name), `duplicate tool name in plugin module ${entryPath}`);
115
144
  return {
145
+ ...(typeof value.dispose === "function" ? { dispose: value.dispose } : {}),
116
146
  tools: [...normalizedTools],
117
147
  promptSections: normalizedSections.map((section) => ({ ...section })),
118
148
  ...(typeof value.presentToolResult === "function" ? { presentToolResult: value.presentToolResult } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-system.js","sourceRoot":"","sources":["../../src/plugins/plugin-system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-system.js","sourceRoot":"","sources":["../../src/plugins/plugin-system.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ export declare class ToolRegistry {
10
10
  private readonly tools;
11
11
  private readonly aliases;
12
12
  private readonly disabledTools;
13
+ /** Independent registration/enablement state, sharing immutable tool implementations. */
14
+ clone(): ToolRegistry;
13
15
  register(tool: Tool<any>): void;
14
16
  get(name: string): Tool<any> | undefined;
15
17
  getByAlias(name: string): Tool<any> | undefined;
@@ -8,6 +8,17 @@ export class ToolRegistry {
8
8
  tools = new Map();
9
9
  aliases = new Map();
10
10
  disabledTools = new Set();
11
+ /** Independent registration/enablement state, sharing immutable tool implementations. */
12
+ clone() {
13
+ const copy = new ToolRegistry();
14
+ for (const [name, tool] of this.tools)
15
+ copy.tools.set(name, tool);
16
+ for (const [name, target] of this.aliases)
17
+ copy.aliases.set(name, target);
18
+ for (const name of this.disabledTools)
19
+ copy.disabledTools.add(name);
20
+ return copy;
21
+ }
11
22
  register(tool) {
12
23
  if (this.tools.has(tool.name)) {
13
24
  throw new Error(`Tool already registered: ${tool.name}`);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { TaskStore } from '../tasks/task-store.js';
2
2
  import { type DetailPart } from './tool-call-detail.js';
3
3
  /** Server-owned context ONLY. Never construct this from request/query/body fields.
4
4
  * The store must already be loaded by the host. Loading/binding it here would write.
5
- * redact must apply the owner's runtime secret registry (redactDisplayValue).
5
+ * redact is retained for compatibility; detail values are preserved without text rewriting.
6
6
  */
7
7
  export interface AgentContentOwner {
8
8
  ownerSessionId: string;
@@ -19,7 +19,7 @@ export interface AgentContentRequest {
19
19
  refresh?: boolean;
20
20
  }
21
21
  export interface AgentContentFragment extends DetailPart {
22
- /** Offset/length in the fully sanitized string, UTF-16; join by id + offset. */
22
+ /** Offset/length in the full serialized display value, UTF-16; join by id + offset. */
23
23
  offset: number;
24
24
  totalChars: number;
25
25
  hasMore: boolean;
@@ -141,7 +141,7 @@ function part(owner, v) {
141
141
  if (v === undefined)
142
142
  return absent();
143
143
  const isTruncated = truncated(v);
144
- return { state: isTruncated ? 'truncated' : 'complete', text: text(sanitize(owner, v)), reason: isTruncated ? '保存的源数据已截断,不是全文' : '已保存内容的脱敏全文' };
144
+ return { state: isTruncated ? 'truncated' : 'complete', text: text(sanitize(owner, v)), reason: isTruncated ? '保存的源数据已截断,不是全文' : '已保存内容的原始全文' };
145
145
  }
146
146
  function preview(p, max = 2048) {
147
147
  return p.text.length <= max ? p : { state: 'truncated', text: p.text.slice(0, max), reason: '摘要明确截断;不作为全文' };
@@ -42,7 +42,14 @@ export interface WebRuntimePluginDefinition extends Pick<NeoPluginResource, "id"
42
42
  promptSections?: readonly PromptSection[];
43
43
  presentToolResult?: NeoPluginResource["presentToolResult"];
44
44
  }
45
+ export interface WebPluginSnapshot {
46
+ plugins: readonly WebRuntimePluginDefinition[];
47
+ release: () => void;
48
+ }
45
49
  interface WebRuntimePluginSupport {
50
+ resolveCatalog?: () => readonly WebRuntimePluginDefinition[];
51
+ acquire?: (overrides: Readonly<Record<string, boolean>>) => WebPluginSnapshot;
52
+ pendingOverrides?: Record<string, boolean>;
46
53
  catalog: WebRuntimePluginDefinition[];
47
54
  overrides: Record<string, boolean>;
48
55
  basePromptSections: PromptSection[];
@@ -245,6 +252,9 @@ export interface CreateWebRuntimeOptions {
245
252
  plugins?: readonly string[];
246
253
  /** Switchable plugins supplied by the embedding application. */
247
254
  externalPlugins?: readonly WebRuntimePluginDefinition[];
255
+ resolveExternalPlugins?: WebRuntimePluginSupport["resolveCatalog"];
256
+ acquirePluginSnapshot?: WebRuntimePluginSupport["acquire"];
257
+ reservePluginToolNames?: (names: readonly string[]) => void;
248
258
  /** Per-session plugin overrides. Missing ids inherit the global setting. */
249
259
  sessionPluginOverrides?: Readonly<Record<string, boolean>>;
250
260
  persistSessionPluginOverrides?: WebRuntimePluginSupport["persist"];
@@ -323,6 +333,7 @@ type WebLineOperation = {
323
333
  };
324
334
  export declare function runWebServer(argv?: string[], runtimeOptions?: RunWebServerOptions): Promise<void>;
325
335
  export declare function createWebRuntime(options?: CreateWebRuntimeOptions): Promise<WebRuntime>;
336
+ export declare function refreshRuntimePlugins(runtime: WebRuntime, engine?: QueryEngine): void;
326
337
  /** Called only at a safe turn boundary or while idle, never during tool execution. */
327
338
  export declare function refreshGlobalToolOverrides(runtime: Pick<WebRuntime, "tools" | "toolSupport">): void;
328
339
  /** Bind only the foreground view; never stop work owned by another session. */
@@ -662,6 +673,12 @@ export declare class WebRepl {
662
673
  sessionPlugins(): {
663
674
  sessionId: string | undefined;
664
675
  busy: boolean;
676
+ items: never[];
677
+ pending?: undefined;
678
+ } | {
679
+ sessionId: string | undefined;
680
+ busy: boolean;
681
+ pending: boolean;
665
682
  items: {
666
683
  id: string;
667
684
  name: string;
package/dist/web/index.js CHANGED
@@ -183,6 +183,9 @@ export async function createWebRuntime(options = {}) {
183
183
  };
184
184
  for (const tool of createSubagentTools(taskStore, resumeHandler))
185
185
  registerTool(tool, { source: "builtin" });
186
+ const pluginToolNames = new Set(pluginCatalog.flatMap(plugin => plugin.tools.map(tool => tool.name)));
187
+ options.reservePluginToolNames?.(tools.list(undefined, { includeDeferred: true }).filter(tool => !pluginToolNames.has(tool.name)).flatMap(tool => [tool.name, ...(tool.aliases ?? [])]).concat(toolCatalog.filter(tool => tool.source !== "plugin").map(tool => tool.name)));
188
+ agentRuntime.acquireTurnResources = (sessionId) => acquireWebPluginTurn(runtime, false, runtime.engine, sessionId);
186
189
  const globalToolOverrides = normalizeToolOverrides(options.globalToolOverrides, toolCatalog);
187
190
  const sessionToolOverrides = normalizeToolOverrides(options.sessionToolOverrides, toolCatalog);
188
191
  applyToolOverrides(tools, toolCatalog, globalToolOverrides, sessionToolOverrides);
@@ -196,7 +199,10 @@ export async function createWebRuntime(options = {}) {
196
199
  modelGateway,
197
200
  tools,
198
201
  contextManagerFactory: (cwd) => new DefaultContextManager({ cwd }),
199
- refreshTools: () => {
202
+ acquireTurnResources: (engine) => acquireWebPluginTurn(runtime, true, engine),
203
+ refreshTools: (engine) => {
204
+ if (runtime)
205
+ refreshRuntimePlugins(runtime, engine);
200
206
  if (!options.resolveGlobalToolOverrides)
201
207
  return;
202
208
  if (runtime)
@@ -239,14 +245,16 @@ export async function createWebRuntime(options = {}) {
239
245
  defaultReasoning: modelConfig?.defaultReasoning,
240
246
  envPath: process.env.NEO_ENV_FILE?.trim() ? path.resolve(process.env.NEO_ENV_FILE.trim()) : envLoad.userDotEnvPath,
241
247
  envNotice: envLoad.createdUserDotEnv ? formatCreatedEnvNotice(envLoad.userDotEnvPath) : undefined,
242
- pluginSupport: pluginCatalog.length ? {
248
+ pluginSupport: {
249
+ resolveCatalog: options.resolveExternalPlugins,
250
+ acquire: options.acquirePluginSnapshot,
243
251
  catalog: pluginCatalog,
244
252
  overrides: pluginOverrides,
245
253
  basePromptSections: [...(options.externalPromptSections ?? [])],
246
254
  basePluginIds: [...(options.plugins ?? [])],
247
255
  persist: options.persistSessionPluginOverrides,
248
256
  resolve: options.resolveSessionPluginOverrides,
249
- } : undefined,
257
+ },
250
258
  toolSupport: {
251
259
  catalog: toolCatalog,
252
260
  globalOverrides: globalToolOverrides,
@@ -259,6 +267,92 @@ export async function createWebRuntime(options = {}) {
259
267
  };
260
268
  return runtime;
261
269
  }
270
+ /** Build first, publish only after all registrations validate. Never called by a child on the parent registry. */
271
+ function buildPluginRegistry(runtime, catalog, overrides) {
272
+ const registry = runtime.tools.clone();
273
+ for (const plugin of runtime.pluginSupport?.catalog ?? [])
274
+ for (const tool of plugin.tools)
275
+ registry.unregister(tool.name);
276
+ const names = new Set(registry.names({ includeDisabled: true }));
277
+ for (const plugin of catalog)
278
+ for (const tool of plugin.tools) {
279
+ if (names.has(tool.name))
280
+ throw new Error(`duplicate plugin/host tool: ${tool.name}`);
281
+ names.add(tool.name);
282
+ }
283
+ for (const plugin of activeWebRuntimePlugins(catalog, overrides))
284
+ for (const tool of plugin.tools)
285
+ registry.register(tool);
286
+ const support = runtime.toolSupport;
287
+ if (support) {
288
+ const global = support.resolveGlobal?.() ?? support.globalOverrides;
289
+ const all = [...support.catalog.filter(tool => tool.source !== "plugin"), ...catalog.flatMap(plugin => plugin.tools.map(tool => ({ name: tool.name })))];
290
+ for (const tool of all)
291
+ registry.setEnabled(tool.name, support.sessionOverrides[tool.name] ?? global[tool.name] ?? isToolEnabledByDefault(tool.name));
292
+ }
293
+ return registry;
294
+ }
295
+ export function refreshRuntimePlugins(runtime, engine = runtime.engine) {
296
+ const support = runtime.pluginSupport;
297
+ if (!support)
298
+ return;
299
+ const catalog = normalizeWebRuntimePlugins(support.resolveCatalog?.() ?? support.catalog);
300
+ const overrides = normalizePluginOverrides(resolveRuntimePluginOverrides(runtime, engine), catalog);
301
+ const registry = buildPluginRegistry(runtime, catalog, overrides);
302
+ // Only plugin registrations change. Built-in objects (including task managers) retain identity.
303
+ for (const plugin of support.catalog)
304
+ for (const tool of plugin.tools)
305
+ runtime.tools.unregister(tool.name);
306
+ const active = activeWebRuntimePlugins(catalog, overrides);
307
+ for (const plugin of active)
308
+ for (const tool of plugin.tools) {
309
+ runtime.tools.register(tool);
310
+ runtime.tools.setEnabled(tool.name, registry.isEnabled(tool.name) === true);
311
+ }
312
+ support.catalog = catalog;
313
+ support.overrides = overrides;
314
+ support.pendingOverrides = undefined;
315
+ if (runtime.toolSupport)
316
+ runtime.toolSupport.catalog = [
317
+ ...runtime.toolSupport.catalog.filter(tool => tool.source !== "plugin"),
318
+ ...catalog.flatMap(plugin => plugin.tools.map(tool => ({ name: tool.name, source: "plugin", pluginId: plugin.id, pluginName: plugin.name, presentation: toolPresentationForSource(tool.name, "plugin") }))),
319
+ ];
320
+ engine.setRuntimePlugins([...support.basePluginIds, ...active.map(plugin => plugin.id)], [...support.basePromptSections, ...active.flatMap(plugin => plugin.promptSections ?? [])]);
321
+ }
322
+ function resolveRuntimePluginOverrides(runtime, engine, sessionId = engine.snapshot().session?.sessionId) {
323
+ const support = runtime.pluginSupport;
324
+ if (!support)
325
+ return {};
326
+ if (engine === runtime.engine && sessionId === engine.snapshot().session?.sessionId && support.pendingOverrides)
327
+ return support.pendingOverrides;
328
+ const resolved = sessionId ? support.resolve?.(sessionId) : undefined;
329
+ // Web hosts publish in-memory settings synchronously. Legacy async embedders retain loaded overrides.
330
+ if (resolved && !(resolved instanceof Promise))
331
+ return resolved;
332
+ if (resolved instanceof Promise)
333
+ void resolved.catch(() => { });
334
+ return support.overrides;
335
+ }
336
+ /** Children acquire independent tools/prompts; they never refresh the parent's in-flight context. */
337
+ function acquireWebPluginTurn(runtime, main, engine = runtime.engine, sessionId) {
338
+ if (main) {
339
+ refreshRuntimePlugins(runtime, engine);
340
+ refreshGlobalToolOverrides(runtime);
341
+ }
342
+ const support = runtime.pluginSupport;
343
+ const overrides = resolveRuntimePluginOverrides(runtime, engine, sessionId);
344
+ const snapshot = support?.acquire?.(overrides);
345
+ try {
346
+ const catalog = normalizeWebRuntimePlugins(snapshot?.plugins ?? support?.resolveCatalog?.() ?? support?.catalog);
347
+ const tools = buildPluginRegistry(runtime, catalog, overrides);
348
+ return { tools, release: snapshot?.release ?? (() => { }),
349
+ ...(!main ? { promptSections: [...(support?.basePromptSections ?? []), ...activeWebRuntimePlugins(catalog, overrides).flatMap(plugin => plugin.promptSections ?? [])] } : {}) };
350
+ }
351
+ catch (error) {
352
+ snapshot?.release();
353
+ throw error;
354
+ }
355
+ }
262
356
  function normalizeWebRuntimePlugins(value) {
263
357
  if (!Array.isArray(value))
264
358
  return [];
@@ -567,6 +661,7 @@ export class WebRepl {
567
661
  return this.buildRuntimeContext(this.runtimeContextRevision);
568
662
  }
569
663
  sessionPlugins() {
664
+ this.runtime.engine.refreshToolsIfIdle();
570
665
  const support = this.runtime.pluginSupport;
571
666
  const sessionId = this.runtime.engine.snapshot().session?.sessionId;
572
667
  if (!support)
@@ -574,8 +669,9 @@ export class WebRepl {
574
669
  return {
575
670
  sessionId,
576
671
  busy: this.busy,
577
- items: support.catalog.map((plugin) => {
578
- const override = support.overrides[plugin.id];
672
+ pending: Boolean(support.pendingOverrides),
673
+ items: (support.resolveCatalog?.() ?? support.catalog).map((plugin) => {
674
+ const override = (support.pendingOverrides ?? support.overrides)[plugin.id];
579
675
  return {
580
676
  id: plugin.id,
581
677
  name: plugin.name,
@@ -684,14 +780,12 @@ export class WebRepl {
684
780
  await this.applySessionToolOverrides(await support.resolveSession(sessionId), false);
685
781
  }
686
782
  async setSessionPlugins(value) {
687
- if (this.busy)
688
- return actionFailure("PLUGIN_UPDATE_BLOCKED", "cannot change session plugins while a response is running");
689
783
  if (!isRecord(value))
690
784
  return actionFailure("INVALID_REQUEST", "plugin overrides must be an object");
691
785
  const support = this.runtime.pluginSupport;
692
786
  if (!support)
693
787
  return actionFailure("PLUGIN_NOT_CONFIGURED", "web plugins are not configured");
694
- const available = new Set(support.catalog.map((plugin) => plugin.id));
788
+ const available = new Set((support.resolveCatalog?.() ?? support.catalog).map((plugin) => plugin.id));
695
789
  const overrides = {};
696
790
  for (const [id, mode] of Object.entries(value)) {
697
791
  if (!available.has(id))
@@ -781,22 +875,18 @@ export class WebRepl {
781
875
  const support = this.runtime.pluginSupport;
782
876
  if (!support)
783
877
  return;
784
- const normalized = normalizePluginOverrides(overrides, support.catalog);
785
- for (const plugin of support.catalog)
786
- for (const tool of plugin.tools)
787
- this.runtime.tools.unregister(tool.name);
788
- const activePlugins = activeWebRuntimePlugins(support.catalog, normalized);
789
- for (const plugin of activePlugins)
790
- for (const tool of plugin.tools)
791
- this.runtime.tools.register(tool);
792
- support.overrides = normalized;
793
- const toolSupport = this.runtime.toolSupport;
794
- if (toolSupport)
795
- applyToolOverrides(this.runtime.tools, toolSupport.catalog, toolSupport.globalOverrides, toolSupport.sessionOverrides);
796
- this.runtime.engine.setRuntimePlugins([...support.basePluginIds, ...activePlugins.map((plugin) => plugin.id)], [...support.basePromptSections, ...activePlugins.flatMap((plugin) => plugin.promptSections ?? [])]);
878
+ const catalog = normalizeWebRuntimePlugins(support.resolveCatalog?.() ?? support.catalog);
879
+ const normalized = normalizePluginOverrides(overrides, catalog);
880
+ buildPluginRegistry(this.runtime, catalog, normalized);
797
881
  const sessionId = this.runtime.engine.snapshot().session?.sessionId;
798
882
  if (persist && sessionId && support.persist)
799
883
  await support.persist(sessionId, normalized);
884
+ support.pendingOverrides = normalized;
885
+ if (this.busy) {
886
+ this.publishRuntimeContext();
887
+ return;
888
+ }
889
+ refreshRuntimePlugins(this.runtime);
800
890
  const metrics = await this.runtime.engine.contextMetrics();
801
891
  this.runtime.initialMetrics = metrics;
802
892
  this.setStatus({ ...this.status, metrics, activityTick: this.status.activityTick + 1 });