neoctl 0.2.41 → 0.2.42

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.
@@ -0,0 +1,183 @@
1
+ import { inflateSync } from "node:zlib";
2
+ export function decodeImageBase64(value) {
3
+ const base64 = value.replace(/^data:[^;,]+;base64,/u, "").replace(/\s+/gu, "");
4
+ if (!base64 || base64.length % 4 === 1 || !/^[A-Za-z0-9+/]+={0,2}$/u.test(base64))
5
+ throw new Error("Image payload is not valid base64");
6
+ if (base64.length > Math.ceil(50 * 1024 * 1024 / 3) * 4)
7
+ throw new Error("Image exceeds the 50 MiB limit");
8
+ const bytes = Buffer.from(base64, "base64");
9
+ if (bytes.toString("base64").replace(/=+$/u, "") !== base64.replace(/=+$/u, ""))
10
+ throw new Error("Image payload is not canonical base64");
11
+ if (bytes.length > 50 * 1024 * 1024)
12
+ throw new Error("Image exceeds the 50 MiB limit");
13
+ return bytes;
14
+ }
15
+ /** Inspect binary headers rather than trusting requested or returned MIME/size. */
16
+ export function inspectImageBytes(bytes) {
17
+ if (bytes.length >= 33 && bytes.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]))) {
18
+ if (bytes.toString("ascii", 12, 16) !== "IHDR" || bytes.readUInt32BE(8) !== 13 || bytes[26] !== 0 || bytes[27] !== 0 || bytes[28] > 1)
19
+ throw new Error("Invalid PNG IHDR");
20
+ const allowedDepths = { 0: [1, 2, 4, 8, 16], 2: [8, 16], 3: [1, 2, 4, 8], 4: [8, 16], 6: [8, 16] };
21
+ if (!allowedDepths[bytes[25]]?.includes(bytes[24]))
22
+ throw new Error("Invalid PNG color type or bit depth");
23
+ const width = bytes.readUInt32BE(16), height = bytes.readUInt32BE(20);
24
+ assertDimensions(width, height);
25
+ let offset = 8, ended = false, transparency;
26
+ const idat = [];
27
+ while (offset + 12 <= bytes.length) {
28
+ const length = bytes.readUInt32BE(offset), type = bytes.toString("ascii", offset + 4, offset + 8);
29
+ if (offset + 12 + length > bytes.length)
30
+ throw new Error("Truncated PNG chunk");
31
+ if (type === "IDAT")
32
+ idat.push(bytes.subarray(offset + 8, offset + 8 + length));
33
+ if (type === "tRNS")
34
+ transparency = bytes.subarray(offset + 8, offset + 8 + length);
35
+ if (type === "IEND") {
36
+ ended = true;
37
+ break;
38
+ }
39
+ offset += 12 + length;
40
+ }
41
+ if (!ended || !idat.length)
42
+ throw new Error("PNG is missing image data or IEND");
43
+ const color = bytes[25], depth = bytes[24], interlace = bytes[28];
44
+ let hasTransparentPixels;
45
+ if (![4, 6].includes(color) && !transparency)
46
+ hasTransparentPixels = false;
47
+ if (depth === 8 && interlace === 0) {
48
+ const channels = { 0: 1, 2: 3, 3: 1, 4: 2, 6: 4 }[color];
49
+ if (channels) {
50
+ const stride = width * channels, expected = (stride + 1) * height;
51
+ if (expected > 128 * 1024 * 1024)
52
+ throw new Error("PNG decoded data exceeds verification limit");
53
+ const raw = inflateSync(Buffer.concat(idat), { maxOutputLength: expected + 1 });
54
+ if (raw.length !== expected)
55
+ throw new Error("PNG decoded data length is inconsistent with dimensions");
56
+ let prev = Buffer.alloc(stride), row = Buffer.alloc(stride), found = false;
57
+ for (let y = 0; y < height; y++) {
58
+ const start = y * (stride + 1), filter = raw[start];
59
+ if (filter > 4)
60
+ throw new Error("Invalid PNG scanline filter");
61
+ for (let x = 0; x < stride; x++) {
62
+ const a = x >= channels ? row[x - channels] : 0, b = prev[x], c = x >= channels ? prev[x - channels] : 0;
63
+ const prediction = filter === 0 ? 0 : filter === 1 ? a : filter === 2 ? b : filter === 3 ? Math.floor((a + b) / 2) : paeth(a, b, c);
64
+ row[x] = (raw[start + 1 + x] + prediction) & 255;
65
+ }
66
+ for (let x = 0; x < width; x++) {
67
+ const p = x * channels;
68
+ if ((color === 4 || color === 6) && row[p + channels - 1] < 255)
69
+ found = true;
70
+ if (color === 3 && transparency && (transparency[row[p]] ?? 255) < 255)
71
+ found = true;
72
+ if (color === 0 && transparency?.length === 2 && row[p] === transparency.readUInt16BE(0))
73
+ found = true;
74
+ if (color === 2 && transparency?.length === 6 && row[p] === transparency.readUInt16BE(0) && row[p + 1] === transparency.readUInt16BE(2) && row[p + 2] === transparency.readUInt16BE(4))
75
+ found = true;
76
+ }
77
+ [prev, row] = [row, prev];
78
+ }
79
+ hasTransparentPixels = found;
80
+ }
81
+ }
82
+ return { mimeType: "image/png", width, height, hasAlphaChannel: color === 4 || color === 6, hasTransparentPixels };
83
+ }
84
+ if (bytes.length > 4 && bytes[0] === 255 && bytes[1] === 216) {
85
+ let offset = 2;
86
+ while (offset + 4 < bytes.length) {
87
+ if (bytes[offset++] !== 255)
88
+ throw new Error("Invalid JPEG marker");
89
+ while (bytes[offset] === 255)
90
+ offset++;
91
+ const marker = bytes[offset++];
92
+ if (marker === 217 || marker === 218)
93
+ break;
94
+ if (marker === 1 || (marker >= 208 && marker <= 215))
95
+ continue;
96
+ const length = bytes.readUInt16BE(offset);
97
+ if (length < 2 || offset + length > bytes.length)
98
+ throw new Error("Truncated JPEG segment");
99
+ if ([192, 193, 194, 195, 197, 198, 199, 201, 202, 203, 205, 206, 207].includes(marker)) {
100
+ if (length < 8)
101
+ throw new Error("Invalid JPEG frame");
102
+ const height = bytes.readUInt16BE(offset + 3), width = bytes.readUInt16BE(offset + 5);
103
+ assertDimensions(width, height);
104
+ if (bytes.lastIndexOf(Buffer.from([255, 217])) < offset)
105
+ throw new Error("JPEG is missing end marker");
106
+ return { mimeType: "image/jpeg", width, height, hasAlphaChannel: false, hasTransparentPixels: false };
107
+ }
108
+ offset += length;
109
+ }
110
+ throw new Error("JPEG is missing dimensions");
111
+ }
112
+ if (bytes.length >= 30 && bytes.toString("ascii", 0, 4) === "RIFF" && bytes.toString("ascii", 8, 12) === "WEBP") {
113
+ if (bytes.readUInt32LE(4) + 8 > bytes.length)
114
+ throw new Error("Truncated WebP");
115
+ const kind = bytes.toString("ascii", 12, 16);
116
+ let width, height, alpha = false;
117
+ if (kind === "VP8X") {
118
+ width = bytes.readUIntLE(24, 3) + 1;
119
+ height = bytes.readUIntLE(27, 3) + 1;
120
+ alpha = Boolean(bytes[20] & 16);
121
+ }
122
+ else if (kind === "VP8L" && bytes[20] === 47) {
123
+ const bits = bytes.readUInt32LE(21);
124
+ width = (bits & 16383) + 1;
125
+ height = ((bits >>> 14) & 16383) + 1;
126
+ alpha = Boolean(bits & (1 << 28));
127
+ }
128
+ else if (kind === "VP8 " && bytes.subarray(23, 26).equals(Buffer.from([157, 1, 42]))) {
129
+ width = bytes.readUInt16LE(26) & 16383;
130
+ height = bytes.readUInt16LE(28) & 16383;
131
+ }
132
+ else
133
+ throw new Error("Unsupported WebP bitstream");
134
+ assertDimensions(width, height);
135
+ return { mimeType: "image/webp", width, height, hasAlphaChannel: alpha, hasTransparentPixels: alpha ? undefined : false };
136
+ }
137
+ throw new Error("Image bytes must contain a recognizable PNG, JPEG or WebP (not HTML, JSON, GIF or SVG)");
138
+ }
139
+ function assertDimensions(width, height) {
140
+ if (!width || !height || width * height > 40_000_000)
141
+ throw new Error("Image dimensions are invalid or exceed the 40 megapixel verification limit");
142
+ }
143
+ function paeth(a, b, c) {
144
+ const p = a + b - c, pa = Math.abs(p - a), pb = Math.abs(p - b), pc = Math.abs(p - c);
145
+ return pa <= pb && pa <= pc ? a : pb <= pc ? b : c;
146
+ }
147
+ export function outputWarnings(input, response, images) {
148
+ const warnings = [];
149
+ const mismatch = (code, field, requested, actual, message) => warnings.push({ code, field, requested, actual, message, remedy: "Use the actual output values when reporting results. Do not claim the requested setting was honored. Inspect the image or use a verified upstream if exact compliance is required." });
150
+ if (images.length !== input.n)
151
+ mismatch("COUNT_MISMATCH", "n", input.n, images.length, "The upstream returned a different number of usable images.");
152
+ for (const [field, apiField] of [["model", "model"], ["quality", "quality"], ["background", "background"]]) {
153
+ const actual = response[apiField];
154
+ if (actual !== undefined && actual !== null && input[field] !== "auto" && actual !== input[field]) {
155
+ mismatch("UPSTREAM_" + field.toUpperCase() + "_MISMATCH", field, input[field], actual, `The upstream reported a different ${field}. For quality this is a metadata discrepancy, not proof of internal compute reduction; mapping or dynamic behavior may differ.`);
156
+ if (field === "quality")
157
+ warnings[warnings.length - 1].remedy = "Report requested and upstream-reported tiers separately. Do not infer an internal downgrade, budget ceiling, or documented dynamic mapping from this discrepancy alone.";
158
+ }
159
+ }
160
+ if ((typeof response.model !== "string" || !response.model.trim()))
161
+ warnings.push({ code: "MODEL_UNVERIFIED", field: "model", requested: input.model, message: "The response does not identify its model. The requested routing ID is known, but the actual upstream model cannot be independently confirmed." });
162
+ if ((typeof response.quality !== "string" || !response.quality.trim()) && input.quality !== "auto")
163
+ warnings.push({ code: "QUALITY_UNVERIFIED", field: "quality", requested: input.quality, message: "The response does not report a quality tier; request acceptance alone does not verify that the tier was applied." });
164
+ images.forEach((image, i) => {
165
+ const size = `${image.width}x${image.height}`, format = image.mimeType.slice(6);
166
+ if (input.size !== "auto" && input.size !== size)
167
+ mismatch("SIZE_MISMATCH", `images[${i}].size`, input.size, size, "Decoded dimensions differ from the requested size. The image was not silently resized locally.");
168
+ if (format !== input.outputFormat)
169
+ mismatch("FORMAT_MISMATCH", `images[${i}].outputFormat`, input.outputFormat, format, "Actual image format differs from the request. MIME type and file extension follow the actual bytes.");
170
+ if (response.size !== undefined && response.size !== size)
171
+ mismatch("METADATA_SIZE_MISMATCH", `images[${i}].size`, response.size, size, "Upstream size metadata disagrees with the image bytes.");
172
+ if (response.output_format !== undefined && response.output_format !== format)
173
+ mismatch("METADATA_FORMAT_MISMATCH", `images[${i}].outputFormat`, response.output_format, format, "Upstream format metadata disagrees with the image bytes.");
174
+ if (input.background === "transparent" && image.hasTransparentPixels === false)
175
+ mismatch("TRANSPARENCY_MISMATCH", `images[${i}].background`, "transparent", "opaque", "No transparent pixels were found; a painted checkerboard is not transparency.");
176
+ if (input.background === "opaque" && image.hasTransparentPixels === true)
177
+ mismatch("TRANSPARENCY_MISMATCH", `images[${i}].background`, "opaque", "transparent", "Transparent pixels were found despite an opaque request.");
178
+ if (input.background === "transparent" && image.hasTransparentPixels === undefined)
179
+ warnings.push({ code: "TRANSPARENCY_UNVERIFIED", field: `images[${i}].background`, message: "The format may support alpha, but transparent pixels have not been decoded/verified. Do not promise a transparent asset without checking it." });
180
+ });
181
+ return warnings;
182
+ }
183
+ //# sourceMappingURL=image-output-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-output-verification.js","sourceRoot":"","sources":["../../../src/tools/builtins/image-output-verification.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { Tool, ToolDefinition, ToolUseContext } from "./tool.js";
2
+ /** Delegation is opt-in. The child-only report tool is not a delegation switch. */
3
+ export declare function isToolEnabledByDefault(name: string): boolean;
2
4
  export interface ToolPoolOptions {
3
5
  mode?: "default" | "simple" | "repl";
4
6
  denyTools?: readonly string[];
@@ -1,5 +1,9 @@
1
1
  import { DEFAULT_TOOL_RESULT_BUDGET_CHARS, MAX_TOOL_RESULT_BUDGET_CHARS } from "../session/tool-result-memory.js";
2
2
  import { resolveToolDescription } from "./tool.js";
3
+ /** Delegation is opt-in. The child-only report tool is not a delegation switch. */
4
+ export function isToolEnabledByDefault(name) {
5
+ return !name.startsWith("subagent_") || name === "subagent_report";
6
+ }
3
7
  export class ToolRegistry {
4
8
  tools = new Map();
5
9
  aliases = new Map();
@@ -9,6 +13,8 @@ export class ToolRegistry {
9
13
  throw new Error(`Tool already registered: ${tool.name}`);
10
14
  }
11
15
  this.tools.set(tool.name, tool);
16
+ if (!isToolEnabledByDefault(tool.name))
17
+ this.disabledTools.add(tool.name);
12
18
  for (const alias of tool.aliases ?? []) {
13
19
  if (!this.aliases.has(alias))
14
20
  this.aliases.set(alias, 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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"}
@@ -1,3 +1,4 @@
1
+ import { DEFAULT_OPENAI_IMAGE_MODEL, imageValidationError } from "./builtins/image-capabilities.js";
1
2
  import { DEFAULT_TOOL_RESULT_BUDGET_CHARS, MAX_TOOL_RESULT_BUDGET_CHARS } from "../session/tool-result-memory.js";
2
3
  import { createTextMessage, createToolResultMessage } from "../types/messages.js";
3
4
  import { validateJsonSchema } from "./schema.js";
@@ -72,6 +73,10 @@ function parseAndValidateInput(tool, input, context) {
72
73
  const hint = tool.metadata.shouldDefer
73
74
  ? ` ${buildSchemaNotSentHint(tool.name)}`
74
75
  : "";
76
+ if (tool.name === "image_create") {
77
+ const model = input && typeof input === "object" && "model" in input && typeof input.model === "string" ? input.model : String(tool.inputSchema.properties?.model?.default || process.env.OPENAI_IMAGE_MODEL?.trim() || DEFAULT_OPENAI_IMAGE_MODEL);
78
+ return { ok: false, message: imageValidationError(model, "input", schemaResult.message) };
79
+ }
75
80
  return { ok: false, message: `${schemaResult.message}.${hint}`.trim() };
76
81
  }
77
82
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"run-tool-use.js","sourceRoot":"","sources":["../../src/tools/run-tool-use.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-tool-use.js","sourceRoot":"","sources":["../../src/tools/run-tool-use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ImageResultMetadata {
2
+ model?: string;
3
+ size?: string;
4
+ quality?: string;
5
+ outputFormat?: string;
6
+ background?: string;
7
+ prompt?: string;
8
+ mode?: string;
9
+ semanticName?: string;
10
+ images: Array<{
11
+ label?: string;
12
+ width?: number;
13
+ height?: number;
14
+ mimeType?: string;
15
+ hasAlphaChannel?: boolean;
16
+ hasTransparentPixels?: boolean;
17
+ }>;
18
+ }
19
+ /** Explicit allowlist: never send image payloads, credentials or local storage paths to UI metadata. */
20
+ export declare function imageResultMetadata(output: unknown): ImageResultMetadata | undefined;
@@ -0,0 +1,20 @@
1
+ /** Explicit allowlist: never send image payloads, credentials or local storage paths to UI metadata. */
2
+ export function imageResultMetadata(output) {
3
+ if (!output || typeof output !== "object" || Array.isArray(output))
4
+ return undefined;
5
+ const data = output;
6
+ if (!Array.isArray(data.images))
7
+ return undefined;
8
+ const text = (value) => typeof value === "string" ? value : undefined;
9
+ const dimension = (value) => typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
10
+ const flag = (value) => typeof value === "boolean" ? value : undefined;
11
+ return {
12
+ model: text(data.model), size: text(data.size), quality: text(data.quality), outputFormat: text(data.outputFormat),
13
+ background: text(data.background), prompt: text(data.prompt), mode: text(data.mode), semanticName: text(data.semanticName),
14
+ images: data.images.map(value => {
15
+ const image = value && typeof value === "object" ? value : {};
16
+ return { label: text(image.label), width: dimension(image.width), height: dimension(image.height), mimeType: text(image.mimeType), hasAlphaChannel: flag(image.hasAlphaChannel), hasTransparentPixels: flag(image.hasTransparentPixels) };
17
+ }),
18
+ };
19
+ }
20
+ //# sourceMappingURL=image-result-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-result-metadata.js","sourceRoot":"","sources":["../../src/web/image-result-metadata.ts"],"names":[],"mappings":"AAYA,wGAAwG;AACxG,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACrF,MAAM,IAAI,GAAG,MAAiC,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5H,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAClH,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAC1H,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC9B,MAAM,KAAK,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC5O,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { type ImageResultMetadata } from "./image-result-metadata.js";
2
3
  import { type IncomingMessage, type ServerResponse } from "node:http";
3
4
  import { QueryEngine } from "../core/query-engine.js";
4
5
  import { type AppPromptStore } from "../app/app-prompt.js";
@@ -82,6 +83,7 @@ export declare class SessionUsageTracker {
82
83
  }
83
84
  interface UiLineImage {
84
85
  src?: string;
86
+ originalSrc?: string;
85
87
  imageId?: string;
86
88
  label?: string;
87
89
  mimeType: string;
@@ -174,6 +176,7 @@ interface UiLine {
174
176
  live?: boolean;
175
177
  collapsible?: boolean;
176
178
  image?: UiLineImage;
179
+ imageResult?: ImageResultMetadata;
177
180
  compaction?: UiCompactionReport;
178
181
  }
179
182
  type WebActionFailure = {
@@ -235,7 +238,7 @@ export interface CreateWebRuntimeOptions {
235
238
  sessionPluginOverrides?: Readonly<Record<string, boolean>>;
236
239
  persistSessionPluginOverrides?: WebRuntimePluginSupport["persist"];
237
240
  resolveSessionPluginOverrides?: WebRuntimePluginSupport["resolve"];
238
- /** Global tool defaults. Missing names default to enabled. */
241
+ /** Global tool overrides. Missing names use registry defaults (delegation tools are opt-in). */
239
242
  globalToolOverrides?: Readonly<Record<string, boolean>>;
240
243
  /** Per-session tool overrides. Missing names inherit their global default. */
241
244
  sessionToolOverrides?: Readonly<Record<string, boolean>>;
package/dist/web/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { imageResultMetadata } from "./image-result-metadata.js";
2
3
  import { subagentHeader, subagentStatusFacts } from "./status-semantics.js";
3
4
  import { handlePromptConfigRequest } from "./prompt-config-protocol.js";
4
5
  import http from "node:http";
@@ -17,7 +18,7 @@ import { readModelProviderConfig } from "../model/config.js";
17
18
  import { findModelMetadata, loadModelCatalog, reasoningEffortsForModel, resolveContextWindowTokens } from "../model/context-window.js";
18
19
  import { CommunicationLogger, LoggingModelGateway } from "../model/communication-logger.js";
19
20
  import { createModelGatewayFromConfig, createModelGatewayFromProcessEnv } from "../model/provider-factory.js";
20
- import { ToolRegistry } from "../tools/registry.js";
21
+ import { ToolRegistry, isToolEnabledByDefault } from "../tools/registry.js";
21
22
  import { builtinToolPresentation, toolPresentationForSource } from "../tools/tool-catalog.js";
22
23
  import { editTool, writeTool } from "../tools/builtins/edit-tool.js";
23
24
  import { createExecTool, createWriteStdinTool } from "../tools/builtins/exec-tool.js";
@@ -287,7 +288,7 @@ function normalizeToolOverrides(value, catalog) {
287
288
  }
288
289
  function applyToolOverrides(registry, catalog, globalOverrides, sessionOverrides) {
289
290
  for (const tool of catalog)
290
- registry.setEnabled(tool.name, sessionOverrides[tool.name] ?? globalOverrides[tool.name] ?? true);
291
+ registry.setEnabled(tool.name, sessionOverrides[tool.name] ?? globalOverrides[tool.name] ?? isToolEnabledByDefault(tool.name));
291
292
  }
292
293
  /** Called only at a safe turn boundary or while idle, never during tool execution. */
293
294
  export function refreshGlobalToolOverrides(runtime) {
@@ -596,7 +597,7 @@ export class WebRepl {
596
597
  return {
597
598
  items: support.catalog.map((tool) => ({
598
599
  ...tool,
599
- configuredEnabled: support.globalOverrides[tool.name] ?? true,
600
+ configuredEnabled: support.globalOverrides[tool.name] ?? isToolEnabledByDefault(tool.name),
600
601
  })),
601
602
  };
602
603
  }
@@ -614,7 +615,7 @@ export class WebRepl {
614
615
  busy: this.busy,
615
616
  items: support.catalog.map((tool) => {
616
617
  const override = support.sessionOverrides[tool.name];
617
- const globallyEnabled = support.globalOverrides[tool.name] ?? true;
618
+ const globallyEnabled = support.globalOverrides[tool.name] ?? isToolEnabledByDefault(tool.name);
618
619
  const available = tool.source !== "plugin" || Boolean(tool.pluginId && activePluginIds.has(tool.pluginId));
619
620
  return {
620
621
  ...tool,
@@ -2948,6 +2949,7 @@ function imageLineForBlock(role, block, messageId, blockIndex) {
2948
2949
  text: block.label ?? `[image ${block.mimeType}]`,
2949
2950
  image: {
2950
2951
  src: resolution.available ? (block.imageId ? `/api/images/by-id/${encodeURIComponent(block.imageId)}` : `/api/images/${encodeURIComponent(messageId)}/${blockIndex}`) : undefined,
2952
+ originalSrc: resolution.available ? (block.imageId ? `/api/images/by-id/${encodeURIComponent(block.imageId)}` : `/api/images/${encodeURIComponent(messageId)}/${blockIndex}`) : undefined,
2951
2953
  imageId: block.imageId,
2952
2954
  label: block.label,
2953
2955
  mimeType: block.mimeType,
@@ -3090,6 +3092,7 @@ function formatToolResultLine(toolName, output, ok, presentToolResult) {
3090
3092
  title: presentation?.title ?? toolTitle(toolName, "finished"),
3091
3093
  bodyTitle: presentation?.bodyTitle ?? formatted.bodyTitle,
3092
3094
  titleStatus: ok ? "success" : "failure",
3095
+ imageResult: toolName === "image_create" ? imageResultMetadata(output) : undefined,
3093
3096
  text: presentation?.text ?? formatted.text,
3094
3097
  toolDisplay: resources?.length ? undefined : buildToolResultDisplay(toolName, output, ok),
3095
3098
  format: formatted.format,
@@ -3593,7 +3596,19 @@ function formatImageGenerationToolResult(output, ok) {
3593
3596
  const lines = [`${mode === "edit" ? "edited" : "generated"} ${returnedImages ?? 0} image${returnedImages === 1 ? "" : "s"}`];
3594
3597
  const details = [provider, model, size, quality && quality !== "auto" ? quality : undefined, format].filter((value) => Boolean(value));
3595
3598
  if (details.length > 0)
3596
- lines.push(details.join(" · "));
3599
+ lines.push(`${output.requested ? "requested: " : ""}${details.join(" · ")}`);
3600
+ if (isRecord(output.actual)) {
3601
+ lines.push(`upstream-reported quality: ${String(output.actual.quality ?? "unreported")}`);
3602
+ if (Array.isArray(output.images))
3603
+ for (const image of output.images.filter(isRecord)) {
3604
+ if (typeof image.width === "number" && typeof image.height === "number")
3605
+ lines.push(`actual image: ${image.width}x${image.height} · ${String(image.mimeType ?? "")}`);
3606
+ }
3607
+ }
3608
+ if (Array.isArray(output.warnings))
3609
+ for (const warning of output.warnings.filter(isRecord)) {
3610
+ lines.push(`warning [${String(warning.code ?? "IMAGE_WARNING")}]: ${String(warning.message ?? "")}`);
3611
+ }
3597
3612
  if (sourceImages !== undefined)
3598
3613
  lines.push(`source images: ${sourceImages}`);
3599
3614
  const duration = imageGenerationDuration(output);