bazis 0.111.0 → 0.111.1

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.
@@ -853,21 +853,6 @@ export class AgentToolExecutor {
853
853
  return this.finish(call, result, startedAt, metadata, options, audit, undefined, undefined, undefined, executionState);
854
854
  }
855
855
 
856
- if (
857
- (tool.metadata.sideEffect === "write" || tool.metadata.sideEffect === "external")
858
- && audit.sink === undefined
859
- && !(options.allowUnauditedSideEffects ?? this.allowUnauditedSideEffects)
860
- ) {
861
- const result = this.errorResult(
862
- call,
863
- "TOOL_AUDIT_REQUIRED",
864
- `Tool "${tool.metadata.name}" has side effects and requires an audit sink.`,
865
- metadata,
866
- startedAt,
867
- );
868
- return this.finish(call, result, startedAt, metadata, options, audit, tool, options.agentName, undefined, executionState);
869
- }
870
-
871
856
  const visibility = this.authorizeAgent(tool, options);
872
857
  if (!visibility.allowed) {
873
858
  const code = visibility.code ?? "TOOL_NOT_VISIBLE_TO_AGENT";
@@ -887,6 +872,22 @@ export class AgentToolExecutor {
887
872
  return this.finish(call, result, startedAt, metadata, options, audit, tool, options.agentName, undefined, executionState);
888
873
  }
889
874
 
875
+ // After visibility: a tool the agent cannot see is refused for that reason.
876
+ if (
877
+ (tool.metadata.sideEffect === "write" || tool.metadata.sideEffect === "external")
878
+ && audit.sink === undefined
879
+ && !(options.allowUnauditedSideEffects ?? this.allowUnauditedSideEffects)
880
+ ) {
881
+ const result = this.errorResult(
882
+ call,
883
+ "TOOL_AUDIT_REQUIRED",
884
+ `Tool "${tool.metadata.name}" has side effects and requires an audit sink.`,
885
+ metadata,
886
+ startedAt,
887
+ );
888
+ return this.finish(call, result, startedAt, metadata, options, audit, tool, options.agentName, undefined, executionState);
889
+ }
890
+
890
891
  const schema = this.schemaSettings(options);
891
892
  const schemaGate = this.ensureSchemaValidator(call, tool, schema, metadata, startedAt);
892
893
  if (schemaGate) {
@@ -232,7 +232,7 @@ export class CodexAppServerClient implements CodexClient {
232
232
  if (method === "account/updated") this.modelCache = undefined;
233
233
  }, () => { this.clearLogin(); this.modelCache = undefined; });
234
234
  const initialized = await client.request("initialize", {
235
- clientInfo: { name: "bazis", title: "Bazis", version: "0.111.0" }, capabilities: { experimentalApi: true },
235
+ clientInfo: { name: "bazis", title: "Bazis", version: "0.111.1" }, capabilities: { experimentalApi: true },
236
236
  }, 15_000, signal);
237
237
  if (resolve(text(initialized.codexHome, 4096)) !== this.paths.home) throw new CodexError("PROTOCOL_ERROR");
238
238
  client.notify("initialized");
@@ -12,6 +12,7 @@ import {
12
12
  type AgentModelResponse,
13
13
  } from "../../agent";
14
14
  import { InfraError, type InfraConnector } from "../InfraConnector";
15
+ import { identifyConnector } from "../connectorIdentity";
15
16
  import { redactSensitiveText } from "../../../library/redaction";
16
17
  import { awaitAbortable } from "../../kernel/internal/awaitAbortable";
17
18
  import {
@@ -426,7 +427,9 @@ export function llmRouter(
426
427
  ensureFallbacksValid(entries);
427
428
  const configs = Object.freeze(Array.from(new Set(entries.map(([, profile]) => profile.config))));
428
429
 
429
- return {
430
+ // The framework LLM connector, like llmConnect: it never touches the schema,
431
+ // so it may start before application services next to ormBazis ensureCreated.
432
+ return identifyConnector({
430
433
  token: AGENT_MODEL_PROVIDER,
431
434
  config: configs,
432
435
  providers: agentRuntimeProviders,
@@ -462,5 +465,5 @@ export function llmRouter(
462
465
  healthCheck(client, signal) {
463
466
  return client instanceof LlmModelRouter ? client.healthCheck(signal) : false;
464
467
  },
465
- };
468
+ }, "llm");
466
469
  }
@@ -467,12 +467,11 @@ export class OpenAiCompatibleModelProvider implements AgentModelProvider {
467
467
  const toolCalls = message.content
468
468
  .filter((part) => part.kind === "tool-call")
469
469
  .map((part) => {
470
- const providerName = mapping.bazisToProvider.get(part.call.name);
471
- if (providerName === undefined) {
472
- throw new OpenAiCompatibleProviderError(
473
- `Assistant transcript references tool "${part.call.name}" which is absent from the request contract.`,
474
- );
475
- }
470
+ // A call to a tool outside this request (one the agent may not use, or
471
+ // a made-up name) stays in the history next to its denial: the model must
472
+ // see both to recover. It gets a wire name that no request tool uses.
473
+ const providerName = mapping.bazisToProvider.get(part.call.name)
474
+ ?? providerToolName(part.call.name, new Set(mapping.providerToBazis.keys()));
476
475
  return Object.freeze({
477
476
  id: part.call.id,
478
477
  type: "function" as const,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bazis",
3
- "version": "0.111.0",
3
+ "version": "0.111.1",
4
4
  "description": "Modular backend framework for Bun in TypeScript: DI wired by codegen, HTTP, a PostgreSQL ORM, JWT, WebSocket, agents and a CLI.",
5
5
  "license": "MIT",
6
6
  "author": "Alexander Alenin",