neoctl 0.2.47 → 0.2.49

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.
Files changed (45) hide show
  1. package/dist/agents/agent-activity.js +1 -1
  2. package/dist/agents/agent-activity.js.map +1 -1
  3. package/dist/context/prompts.js +3 -4
  4. package/dist/context/prompts.js.map +1 -1
  5. package/dist/core/image-input.d.ts +6 -0
  6. package/dist/core/image-input.js +189 -0
  7. package/dist/core/image-input.js.map +1 -0
  8. package/dist/core/image-storage.js +6 -0
  9. package/dist/core/image-storage.js.map +1 -1
  10. package/dist/core/message-pipeline.js +2 -2
  11. package/dist/core/message-pipeline.js.map +1 -1
  12. package/dist/core/query-engine.d.ts +6 -0
  13. package/dist/core/query-engine.js +60 -3
  14. package/dist/core/query-engine.js.map +1 -1
  15. package/dist/core/session-images.js +14 -3
  16. package/dist/core/session-images.js.map +1 -1
  17. package/dist/model/openai-mappers.js +11 -3
  18. package/dist/model/openai-mappers.js.map +1 -1
  19. package/dist/repl/index.js +30 -30
  20. package/dist/repl/index.js.map +1 -1
  21. package/dist/session/tool-result-memory.js +2 -2
  22. package/dist/session/tool-result-memory.js.map +1 -1
  23. package/dist/tools/builtins/image-capabilities.d.ts +2 -2
  24. package/dist/tools/builtins/image-capabilities.js +3 -3
  25. package/dist/tools/builtins/image-capabilities.js.map +1 -1
  26. package/dist/tools/builtins/image-generation-tool.js +1 -1
  27. package/dist/tools/builtins/image-generation-tool.js.map +1 -1
  28. package/dist/tools/builtins/image-loader-tool.js +24 -7
  29. package/dist/tools/builtins/image-loader-tool.js.map +1 -1
  30. package/dist/web/demo-image.d.ts +1 -0
  31. package/dist/web/demo-image.js +26 -0
  32. package/dist/web/demo-image.js.map +1 -0
  33. package/dist/web/demo-tools.js +3 -4
  34. package/dist/web/demo-tools.js.map +1 -1
  35. package/dist/web/file-attachments.d.ts +10 -0
  36. package/dist/web/file-attachments.js +18 -0
  37. package/dist/web/file-attachments.js.map +1 -0
  38. package/dist/web/html.js +5 -5
  39. package/dist/web/index.d.ts +7 -1
  40. package/dist/web/index.js +124 -15
  41. package/dist/web/index.js.map +1 -1
  42. package/dist/web/terminal-presentation.js +1 -1
  43. package/dist/web/terminal-presentation.js.map +1 -1
  44. package/docs/prompt-config.md +2 -2
  45. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"demo-tools.js","sourceRoot":"","sources":["../../src/web/demo-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"demo-tools.js","sourceRoot":"","sources":["../../src/web/demo-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Message } from "../types/messages.js";
2
+ export interface DisplayFileAttachment {
3
+ kind: "file";
4
+ name: string;
5
+ absolutePath: string;
6
+ mimeType: string;
7
+ size: number;
8
+ url: string;
9
+ }
10
+ export declare function messageFileAttachments(message: Message): DisplayFileAttachment[];
@@ -0,0 +1,18 @@
1
+ import path from "node:path";
2
+ // Recover display metadata from the existing transcript, never mutate model history.
3
+ export function messageFileAttachments(message) {
4
+ if (message.role !== "user" || message.isMeta)
5
+ return [];
6
+ const text = message.blocks.filter(b => b.type === "text").map(b => b.text).join("\n");
7
+ const files = [];
8
+ for (const manifest of text.matchAll(/<<ATTACHMENT_MANIFEST>>([\s\S]*?)<<\/ATTACHMENT_MANIFEST>>/gu)) {
9
+ for (const m of manifest[1].matchAll(/^- file\d+: (.*)\r?\n path: (.*)\r?\n mimeType: (.*)\r?\n size: (\d+) bytes/gmu)) {
10
+ const absolutePath = m[2].trim();
11
+ if (!path.isAbsolute(absolutePath))
12
+ continue;
13
+ files.push({ kind: "file", name: m[1].trim(), absolutePath, mimeType: m[3].trim(), size: Number(m[4]), url: `/api/message-files/${encodeURIComponent(message.id)}/${files.length}` });
14
+ }
15
+ }
16
+ return files;
17
+ }
18
+ //# sourceMappingURL=file-attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-attachments.js","sourceRoot":"","sources":["../../src/web/file-attachments.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvF,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,8DAA8D,CAAC,EAAE,CAAC;QACrG,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,mFAAmF,CAAC,EAAE,CAAC;YAC3H,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,SAAS;YAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,sBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1L,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/web/html.js CHANGED
@@ -440,13 +440,13 @@ function renderBackgroundTasks() {
440
440
  for (const task of tasks.slice(0, 2)) {
441
441
  const row = document.createElement('div');
442
442
  row.className = 'status-bg-row';
443
- row.textContent = ' ' + task.type + ':' + truncateMiddle(task.description || task.agentId || task.taskId, Math.max(12, Math.floor(window.innerWidth / 18))) + ' · ' + task.status + ' · ' + formatElapsed(Date.now() - Date.parse(task.createdAt || new Date().toISOString()));
443
+ row.textContent = ' ' + task.type + ':' + truncateMiddle(task.description || task.agentId || task.taskId, Math.max(12, Math.floor(window.innerWidth / 18))) + ' ' + task.status + ' ' + formatElapsed(Date.now() - Date.parse(task.createdAt || new Date().toISOString()));
444
444
  rows.appendChild(row);
445
445
  }
446
446
  }
447
447
  function ensureStatusNodes() {
448
448
  if (statusNodes.phase) return;
449
- statusEl.innerHTML = '<div class="status-main"><span data-part="phase"></span><span class="sep">·</span><span data-part="model"></span><span class="sep">·</span><span data-part="ctxPercent"></span><span class="sep">·</span><span data-part="inputArrow">↑</span> <span data-part="inputTokens"></span><span class="sep">·</span><span data-part="outputArrow">↓</span> <span data-part="outputTokens"></span></div><div data-part="backgroundRows"></div>';
449
+ statusEl.innerHTML = '<div class="status-main"><span data-part="phase"></span><span class="sep" aria-hidden="true"></span><span data-part="model"></span><span class="sep" aria-hidden="true"></span><span data-part="ctxPercent"></span><span class="sep" aria-hidden="true"></span><span data-part="inputArrow">↑</span> <span data-part="inputTokens"></span><span class="sep" aria-hidden="true"></span><span data-part="outputArrow">↓</span> <span data-part="outputTokens"></span></div><div data-part="backgroundRows"></div>';
450
450
  for (const node of statusEl.querySelectorAll('[data-part]')) statusNodes[node.getAttribute('data-part')] = node;
451
451
  }
452
452
  function minimumDisplayPhase(target) {
@@ -585,7 +585,7 @@ function renderSessionsPanel() {
585
585
  const currentSessionId = state.session && state.session.sessionId;
586
586
  const header = '<div class="panel-header"><div><div class="panel-title">Sessions</div><div class="panel-subtitle">Manage saved sessions.</div></div><div class="panel-toolbar"><button class="panel-primary" data-action="new-session" title="New session" aria-label="New session">+</button></div></div>';
587
587
  const body = sessions.length ? '<div class="session-list">' + sessions.map((s, i) => renderSessionCard(s, i, selected, currentSessionId)).join('') + '</div>' : '<div class="panel-muted">No saved sessions found. Tap + to start a new session.</div>';
588
- panelEl.innerHTML = header + body + '<div class="panel-muted" style="margin-top:8px">↑/↓ select · Enter enter · Delete remove</div>';
588
+ panelEl.innerHTML = header + body + '<div class="panel-muted" style="margin-top:8px">↑/↓ select Enter enter Delete remove</div>';
589
589
  }
590
590
  function renderSessionCard(s, i, selected, currentSessionId) {
591
591
  const isCurrent = s.sessionId === currentSessionId;
@@ -596,7 +596,7 @@ function renderSessionCard(s, i, selected, currentSessionId) {
596
596
  '<span class="session-badge">' + esc(s.messages) + ' messages</span>',
597
597
  ].filter(Boolean).join('');
598
598
  const classes = ['session-card', i === selected ? 'selected' : '', isCurrent ? 'current' : '', isRunning ? 'running' : ''].filter(Boolean).join(' ');
599
- return '<div class="' + classes + '" data-session-index="' + i + '"><div class="session-main"><div class="session-title-line"><span class="session-name">' + esc(s.title || '(untitled)') + '</span></div><div class="session-badges">' + badges + '</div><div class="session-meta">' + esc(truncateMiddle(s.sessionId, 28)) + ' · updated ' + esc(s.updatedAt || 'unknown') + '</div></div><div class="session-actions"><span class="panel-actions"><button data-action="enter" data-session-id="' + esc(s.sessionId) + '">enter</button><button class="danger" data-action="delete" data-session-id="' + esc(s.sessionId) + '">delete</button></span></div></div>';
599
+ return '<div class="' + classes + '" data-session-index="' + i + '"><div class="session-main"><div class="session-title-line"><span class="session-name">' + esc(s.title || '(untitled)') + '</span></div><div class="session-badges">' + badges + '</div><div class="session-meta">' + esc(truncateMiddle(s.sessionId, 28)) + ' updated ' + esc(s.updatedAt || 'unknown') + '</div></div><div class="session-actions"><span class="panel-actions"><button data-action="enter" data-session-id="' + esc(s.sessionId) + '">enter</button><button class="danger" data-action="delete" data-session-id="' + esc(s.sessionId) + '">delete</button></span></div></div>';
600
600
  }
601
601
  function showChatView() {
602
602
  state.view = 'chat';
@@ -681,7 +681,7 @@ function renderCompletions() {
681
681
  const pageCount = Math.ceil(list.length / pageSize);
682
682
  const title = pageCount > 1 ? 'Completions (' + list.length + ') page ' + (Math.floor(pageStart / pageSize) + 1) + '/' + pageCount : 'Completions (' + list.length + ')';
683
683
  completionsEl.style.display = 'block';
684
- completionsEl.innerHTML = '<div class="completion-title">' + esc(title) + '</div>' + visible.map((c, i) => '<div class="completion-row ' + (c.kind || '') + ' ' + (i + pageStart === selected ? 'selected' : '') + '"><span class="num">' + (i + pageStart + 1) + '.</span><span class="name">' + esc(c.value) + '</span><span class="desc">' + esc(c.description || '') + '</span></div>').join('') + '<div class="completion-footer">↑/↓ select · ←/→ page · Tab complete</div>';
684
+ completionsEl.innerHTML = '<div class="completion-title">' + esc(title) + '</div>' + visible.map((c, i) => '<div class="completion-row ' + (c.kind || '') + ' ' + (i + pageStart === selected ? 'selected' : '') + '"><span class="num">' + (i + pageStart + 1) + '.</span><span class="name">' + esc(c.value) + '</span><span class="desc">' + esc(c.description || '') + '</span></div>').join('') + '<div class="completion-footer">↑/↓ select ←/→ page Tab complete</div>';
685
685
  }
686
686
  function selectedCompletion() { const list = completions(); return list.length ? list[Math.max(0, Math.min(state.completionIndex, list.length - 1))] : undefined; }
687
687
  function completeSelection() { const c = selectedCompletion(); if (!c) return false; const cursor = input.selectionStart || 0; input.value = c.insertText + input.value.slice(cursor); input.selectionStart = input.selectionEnd = c.insertText.length; autosize(); renderCompletions(); return true; }
@@ -5,6 +5,7 @@ import type { TimingRecord } from "../core/query-timing.js";
5
5
  import { type DemoWait } from "./demo-mode.js";
6
6
  import { type ImageResultMetadata } from "./image-result-metadata.js";
7
7
  import { type IncomingMessage, type ServerResponse } from "node:http";
8
+ import { type DisplayFileAttachment } from "./file-attachments.js";
8
9
  import { QueryEngine } from "../core/query-engine.js";
9
10
  import { type AppPromptStore } from "../app/app-prompt.js";
10
11
  import { type ModelProviderName } from "../model/config.js";
@@ -23,6 +24,7 @@ import type { PromptSection } from "../context/prompts.js";
23
24
  import type { NeoPluginResource } from "../plugins/plugin-system.js";
24
25
  import type { ContextMetrics } from "../types/events.js";
25
26
  import { type AgentContentRequest } from "./agent-content-detail.js";
27
+ export { validateImageBytes } from "../core/image-input.js";
26
28
  import { type WebRuntimeContextPayload } from "./runtime-context-protocol.js";
27
29
  export interface WebRuntime {
28
30
  engine: QueryEngine;
@@ -95,6 +97,7 @@ export declare class SessionUsageTracker {
95
97
  snapshot(): UsageTotals;
96
98
  }
97
99
  interface UiLineImage {
100
+ sizeBytes?: number;
98
101
  src?: string;
99
102
  originalSrc?: string;
100
103
  imageId?: string;
@@ -166,6 +169,7 @@ interface UiToolStream {
166
169
  expanded?: boolean;
167
170
  }
168
171
  interface UiLine {
172
+ files?: DisplayFileAttachment[];
169
173
  connectPreviousTool?: boolean;
170
174
  id: number;
171
175
  kind: "system" | "user" | "assistant" | "thinking" | "tool" | "error" | "meta";
@@ -213,6 +217,7 @@ interface UiStatus {
213
217
  callId: string;
214
218
  name?: string;
215
219
  };
220
+ responseWaitStartedAt?: number;
216
221
  queryTiming?: TimingRecord;
217
222
  toolTimings?: TimingRecord[];
218
223
  phase: string;
@@ -253,6 +258,7 @@ export interface CreateWebRuntimeOptions {
253
258
  /** Workspace root used by context, tools, and session storage. */
254
259
  cwd?: string;
255
260
  /** Persisted CWD transition chain shown to the model on the next request only. */
261
+ workspacePaths?: readonly string[];
256
262
  cwdTransitionPaths?: readonly string[];
257
263
  onCwdTransitionConsumed?: () => void | Promise<void>;
258
264
  /** Additional tools to register in the web runtime. */
@@ -806,6 +812,7 @@ export declare class WebRepl {
806
812
  setAppPrompt(payload: WebSetAppPromptPayload): WebActionResult<{
807
813
  appPrompt: ReturnType<QueryEngine["getAppPrompt"]>;
808
814
  }>;
815
+ fileAttachment(messageId: string, index: number): DisplayFileAttachment | undefined;
809
816
  imagePayload(messageId: string, blockIndex: number): {
810
817
  body: Buffer;
811
818
  mimeType: string;
@@ -905,4 +912,3 @@ export declare function compactLineOperations(operations: WebLineOperation[]): W
905
912
  export declare function handleWebRequest(req: IncomingMessage, res: ServerResponse, router: WebRuntimeRouter): Promise<void>;
906
913
  export declare function restoreWebHistoryLines(runtime: Pick<WebRuntime, "engine">): Array<Record<string, unknown>>;
907
914
  export declare function mergeWebQueuedInput(current: string | undefined, next: string): string;
908
- export {};
package/dist/web/index.js CHANGED
@@ -10,9 +10,14 @@ import { subagentHeader, subagentStatusFacts } from "./status-semantics.js";
10
10
  import { handlePromptConfigRequest } from "./prompt-config-protocol.js";
11
11
  import http from "node:http";
12
12
  import fs from "node:fs/promises";
13
+ import { createReadStream } from "node:fs";
14
+ import { createHash } from "node:crypto";
15
+ import os from "node:os";
16
+ import { messageFileAttachments } from "./file-attachments.js";
13
17
  import path from "node:path";
14
18
  import { existsSync, readFileSync } from "node:fs";
15
19
  import { dockerEnabled } from "../execution/docker.js";
20
+ import { executionFs } from "../execution/filesystem.js";
16
21
  import { fileURLToPath } from "node:url";
17
22
  import { createRequire } from "node:module";
18
23
  import { readSessionPrompt, updateSessionPrompt, SessionPromptError } from "./session-prompt-protocol.js";
@@ -49,6 +54,8 @@ import { createAgentContentDetailResolver } from "./agent-content-detail.js";
49
54
  import { toolDetailFieldsFromDetail } from "./tool-detail-fields.js";
50
55
  import { WEB_HTML } from "./html.js";
51
56
  import { openDirectory } from "../open-directory.js";
57
+ import { validateImageInput } from "../core/image-input.js";
58
+ export { validateImageBytes } from "../core/image-input.js";
52
59
  import { resolveImageBlockDataResultSync, resolveImageBlockDataSync } from "../core/image-storage.js";
53
60
  import { isWebPlanPayload, serializeWebPlanPayload, webPlanBodyTitle } from "./plan-payload.js";
54
61
  import { createWebRuntimeContextPayload } from "./runtime-context-protocol.js";
@@ -227,6 +234,7 @@ export async function createWebRuntime(options = {}) {
227
234
  taskNotificationSource: createTaskNotificationSource(taskStore),
228
235
  commands: replCommandDefinitions.map((command) => command.usage),
229
236
  plugins: [...(options.plugins ?? []), ...activePlugins.map((plugin) => plugin.id)],
237
+ workspacePaths: options.workspacePaths,
230
238
  cwdTransitionPaths: options.cwdTransitionPaths,
231
239
  onCwdTransitionConsumed: options.onCwdTransitionConsumed,
232
240
  session: {
@@ -1206,6 +1214,13 @@ export class WebRepl {
1206
1214
  return actionFailure("PROMPT_UPDATE_FAILED", message);
1207
1215
  }
1208
1216
  }
1217
+ fileAttachment(messageId, index) {
1218
+ for (const entry of this.runtime.engine.getDisplayEntries()) {
1219
+ if (entry.type === "message" && entry.message.id === messageId)
1220
+ return messageFileAttachments(entry.message)[index];
1221
+ }
1222
+ return undefined;
1223
+ }
1209
1224
  imagePayload(messageId, blockIndex) {
1210
1225
  if (!messageId || !Number.isInteger(blockIndex) || blockIndex < 0)
1211
1226
  return undefined;
@@ -1530,6 +1545,11 @@ export class WebRepl {
1530
1545
  this.broadcastSync();
1531
1546
  }
1532
1547
  setStatus(next) {
1548
+ const waiting = next.phase === "calling_model" && !next.modelOutput;
1549
+ const wasWaiting = this.status.phase === "calling_model" && !this.status.modelOutput;
1550
+ next = { ...next, responseWaitStartedAt: waiting
1551
+ ? (wasWaiting ? this.status.responseWaitStartedAt ?? Date.now() : Date.now())
1552
+ : undefined };
1533
1553
  this.status = next;
1534
1554
  this.broadcastSync();
1535
1555
  }
@@ -2246,7 +2266,17 @@ export class WebRepl {
2246
2266
  stopAfterTurn: () => this.queuedInput !== undefined,
2247
2267
  };
2248
2268
  const stream = continuationOnly ? engine.continueExecution(options) : engine.sendUserText(promptPayload.text, options);
2269
+ let attachedDisplay = false;
2249
2270
  for await (const event of stream) {
2271
+ if (!attachedDisplay && attachments.length && !continuationOnly && this.runtime.engine === engine) {
2272
+ const stored = [...engine.getDisplayEntries()].reverse().find(entry => entry.type === "message" && entry.message.role === "user" && !entry.message.isMeta);
2273
+ const optimistic = this.lines.find(line => line.messageId === optimisticMessageId);
2274
+ if (stored?.type === "message" && optimistic) {
2275
+ this.replaceLine(optimistic.id, { messageId: stored.message.id, files: messageFileAttachments(stored.message) });
2276
+ renderMessageImages(stored.message, line => this.append(line));
2277
+ attachedDisplay = true;
2278
+ }
2279
+ }
2250
2280
  if (this.foregroundRunToken !== runToken)
2251
2281
  continue;
2252
2282
  if (this.runtime.engine !== engine)
@@ -2560,6 +2590,15 @@ export async function handleWebRequest(req, res, router) {
2560
2590
  if (req.method === "GET" && url.pathname === "/api/runtime-context")
2561
2591
  return sendJson(res, await repl.runtimeContext());
2562
2592
  const workspaceRepl = repl;
2593
+ if (req.method === "GET" && url.pathname === "/api/cwd/scope") {
2594
+ return sendJson(res, workspaceRepl.workspaceScope?.() ?? actionFailure("CWD_NOT_CONFIGURED", "Workspace scope is not configured"));
2595
+ }
2596
+ if (req.method === "POST" && ["/api/cwd/add", "/api/cwd/remove"].includes(url.pathname)) {
2597
+ const body = await readJsonBody(req);
2598
+ return sendJson(res, workspaceRepl.updateWorkspaceScope
2599
+ ? await workspaceRepl.updateWorkspaceScope(body.path, url.pathname.endsWith("/remove"))
2600
+ : actionFailure("CWD_NOT_CONFIGURED", "Workspace scope is not configured"));
2601
+ }
2563
2602
  if (req.method === "GET" && url.pathname === "/api/cwd") {
2564
2603
  return sendJson(res, workspaceRepl.browseWorkspace
2565
2604
  ? await workspaceRepl.browseWorkspace(url.searchParams.get("path") ?? undefined)
@@ -2614,15 +2653,46 @@ export async function handleWebRequest(req, res, router) {
2614
2653
  const body = await readJsonBody(req);
2615
2654
  return sendJson(res, await repl.setSessionPlugins(body.overrides));
2616
2655
  }
2656
+ const fileMatch = /^\/api\/message-files\/([^/]+)\/(\d+)$/u.exec(url.pathname);
2657
+ if ((req.method === "GET" || req.method === "HEAD") && fileMatch) {
2658
+ const file = repl.fileAttachment(decodeURIComponent(fileMatch[1]), Number(fileMatch[2]));
2659
+ if (!file)
2660
+ return sendJson(res, { error: "attachment not found" }, 404);
2661
+ try {
2662
+ const stat = await executionFs.stat(file.absolutePath);
2663
+ if (!stat.isFile())
2664
+ throw new Error("not a file");
2665
+ if (url.searchParams.get("preview") === "1") {
2666
+ const body = await executionFs.readFile(file.absolutePath);
2667
+ const actual = validateImageInput(body.toString("base64"));
2668
+ res.writeHead(200, { "Content-Type": actual.mimeType, "Content-Length": String(body.length), "X-Content-Type-Options": "nosniff", "Cache-Control": "private, no-cache", ...nativeResourceHeaders(req, file.absolutePath) });
2669
+ res.end(req.method === "HEAD" ? undefined : body);
2670
+ return;
2671
+ }
2672
+ res.writeHead(200, { "Content-Type": "application/octet-stream", "Content-Length": String(stat.size),
2673
+ "Content-Disposition": `attachment; filename*=UTF-8''${encodeURIComponent(file.name)}`,
2674
+ "X-Content-Type-Options": "nosniff", "Cache-Control": "private, no-store", ...nativeResourceHeaders(req, file.absolutePath) });
2675
+ if (req.method === "HEAD")
2676
+ res.end();
2677
+ else if (dockerEnabled())
2678
+ res.end(await executionFs.readFile(file.absolutePath));
2679
+ else
2680
+ createReadStream(file.absolutePath).on("error", () => res.destroy()).pipe(res);
2681
+ }
2682
+ catch {
2683
+ sendJson(res, { error: "attachment unavailable" }, 404);
2684
+ }
2685
+ return;
2686
+ }
2617
2687
  const imageIdMatch = /^\/api\/images\/by-id\/([^/]+)$/u.exec(url.pathname);
2618
- if (req.method === "GET" && imageIdMatch) {
2688
+ if ((req.method === "GET" || req.method === "HEAD") && imageIdMatch) {
2619
2689
  const payload = repl.imagePayloadById(decodeURIComponent(imageIdMatch[1]));
2620
- return payload ? sendImage(res, payload) : sendJson(res, { error: "image not found" }, 404);
2690
+ return payload ? sendImage(res, payload, req) : sendJson(res, { error: "image not found" }, 404);
2621
2691
  }
2622
2692
  const imageMatch = /^\/api\/images\/([^/]+)\/(\d+)$/u.exec(url.pathname);
2623
- if (req.method === "GET" && imageMatch) {
2693
+ if ((req.method === "GET" || req.method === "HEAD") && imageMatch) {
2624
2694
  const payload = repl.imagePayload(decodeURIComponent(imageMatch[1]), Number(imageMatch[2]));
2625
- return payload ? sendImage(res, payload) : sendJson(res, { error: "image not found" }, 404);
2695
+ return payload ? sendImage(res, payload, req) : sendJson(res, { error: "image not found" }, 404);
2626
2696
  }
2627
2697
  if (req.method === "GET" && url.pathname === "/api/app-prompt")
2628
2698
  return sendJson(res, repl.appPrompt());
@@ -2743,15 +2813,47 @@ function imagePayloadForBlock(block) {
2743
2813
  if (!base64 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(base64))
2744
2814
  return undefined;
2745
2815
  const body = Buffer.from(base64, "base64");
2746
- return body.length ? { body, mimeType } : undefined;
2816
+ try {
2817
+ return body.length ? { body, mimeType: validateImageInput(base64).mimeType } : undefined;
2818
+ }
2819
+ catch {
2820
+ return undefined;
2821
+ }
2822
+ }
2823
+ function nativeResourceHeaders(req, filePath) {
2824
+ if (process.env.NEO_DESKTOP_LOCAL_RESOURCES !== "1" || dockerEnabled() || req.method !== "HEAD" || req.headers["x-neo-resource-action"] !== "reveal")
2825
+ return {};
2826
+ if (!["127.0.0.1", "::1", "::ffff:127.0.0.1"].includes(req.socket.remoteAddress ?? "") || req.headers["sec-fetch-site"] === "cross-site")
2827
+ return {};
2828
+ if (req.headers.origin) {
2829
+ try {
2830
+ if (new URL(req.headers.origin).host !== req.headers.host)
2831
+ return {};
2832
+ }
2833
+ catch {
2834
+ return {};
2835
+ }
2836
+ }
2837
+ return { "X-Neo-Resource-Path": encodeURIComponent(filePath), Vary: "X-Neo-Resource-Action" };
2747
2838
  }
2748
- function sendImage(res, payload) {
2839
+ async function sendImage(res, payload, req) {
2840
+ let headers = {};
2841
+ if (Object.keys(nativeResourceHeaders(req, "probe")).length) {
2842
+ const directory = path.join(os.tmpdir(), "neo-desktop-images");
2843
+ await fs.mkdir(directory, { recursive: true });
2844
+ const name = createHash("sha256").update(payload.body).digest("hex") + "." + payload.mimeType.split("/")[1];
2845
+ const target = path.join(directory, name);
2846
+ await fs.writeFile(target, payload.body);
2847
+ headers = nativeResourceHeaders(req, target);
2848
+ }
2749
2849
  res.writeHead(200, {
2850
+ ...headers,
2851
+ "X-Content-Type-Options": "nosniff",
2750
2852
  "Content-Type": payload.mimeType,
2751
2853
  "Content-Length": String(payload.body.length),
2752
2854
  "Cache-Control": "private, max-age=31536000, immutable",
2753
2855
  });
2754
- res.end(payload.body);
2856
+ res.end(req.method === "HEAD" ? undefined : payload.body);
2755
2857
  }
2756
2858
  async function readJsonBody(req) {
2757
2859
  const chunks = [];
@@ -2769,7 +2871,8 @@ function sanitizeWebAttachments(value) {
2769
2871
  return [];
2770
2872
  if (item.kind === "image" && typeof item.label === "string" && /^\[img#\d+\]$/.test(item.label) && typeof item.mimeType === "string" && item.mimeType.startsWith("image/") && typeof item.data === "string") {
2771
2873
  const imageId = typeof item.imageId === "string" && /^image_[0-9a-f-]{36}$/iu.test(item.imageId) ? item.imageId : createImageId();
2772
- return [{ kind: "image", imageId, label: item.label, mimeType: item.mimeType, data: item.data }];
2874
+ const image = validateImageInput(item.data);
2875
+ return [{ kind: "image", imageId, label: item.label, mimeType: image.mimeType, data: image.data }];
2773
2876
  }
2774
2877
  if (item.kind === "file" && typeof item.name === "string" && typeof item.mimeType === "string" && typeof item.size === "number" && Number.isFinite(item.size) && typeof item.absolutePath === "string" && path.isAbsolute(item.absolutePath)) {
2775
2878
  return [{
@@ -2889,7 +2992,7 @@ function buildWebPromptPayload(displayText, attachments) {
2889
2992
  const activeAttachments = candidateAttachments;
2890
2993
  const fileManifest = buildWebFileAttachmentManifest(attachments.filter((attachment) => attachment.kind === "file"));
2891
2994
  if (activeAttachments.length === 0) {
2892
- const text = [displayText.trim(), fileManifest].filter(Boolean).join("\n\n");
2995
+ const text = [displayText, fileManifest].filter(Boolean).join("\n\n");
2893
2996
  return { text, displayText };
2894
2997
  }
2895
2998
  const blocks = [];
@@ -3364,7 +3467,7 @@ function renderMessage(message, append, activeAssistantId, options = {}) {
3364
3467
  if (kind === "system")
3365
3468
  append({ kind, title: titleForRole(message.role), text: block.text, messageId: message.id, previewStyle: "summary" });
3366
3469
  else
3367
- append({ kind, text: block.text, messageId: message.id });
3470
+ append({ kind, text: block.text, messageId: message.id, ...(kind === "user" ? { files: messageFileAttachments(message) } : {}) });
3368
3471
  rendered = true;
3369
3472
  }
3370
3473
  else if (block.type === "image") {
@@ -3403,6 +3506,11 @@ function renderToolResultMessage(message, append, presentToolResult) {
3403
3506
  }
3404
3507
  function renderMessageImages(message, append, messageId = message.id) {
3405
3508
  let rendered = false;
3509
+ const files = messageFileAttachments(message);
3510
+ if (files.length) {
3511
+ append({ kind: "user", text: "", messageId, files });
3512
+ rendered = true;
3513
+ }
3406
3514
  const parentToolName = typeof message.metadata?.tool === "string" ? message.metadata.tool : undefined;
3407
3515
  const parentToolUseId = message.blocks.find((block) => block.type === "tool_result")?.toolUseId;
3408
3516
  for (const [blockIndex, block] of message.blocks.entries()) {
@@ -3441,6 +3549,7 @@ function imageLineForBlock(role, block, messageId, blockIndex) {
3441
3549
  mimeType: block.mimeType,
3442
3550
  available: resolution.available,
3443
3551
  error: resolution.available ? undefined : resolution.error,
3552
+ sizeBytes: resolution.available ? Buffer.from(resolution.data.replace(/^data:[^;,]+;base64,/iu, ""), "base64").length : undefined,
3444
3553
  blockIndex,
3445
3554
  },
3446
3555
  };
@@ -4086,13 +4195,13 @@ function formatImageGenerationToolResult(output, ok) {
4086
4195
  const lines = [`${mode === "edit" ? "edited" : "generated"} ${returnedImages ?? 0} image${returnedImages === 1 ? "" : "s"}`];
4087
4196
  const details = [provider, model, size, quality && quality !== "auto" ? quality : undefined, format].filter((value) => Boolean(value));
4088
4197
  if (details.length > 0)
4089
- lines.push(`${output.requested ? "requested: " : ""}${details.join(" · ")}`);
4198
+ lines.push(`${output.requested ? "requested: " : ""}${details.join(" ")}`);
4090
4199
  if (isRecord(output.actual)) {
4091
4200
  lines.push(`upstream-reported quality: ${String(output.actual.quality ?? "unreported")}`);
4092
4201
  if (Array.isArray(output.images))
4093
4202
  for (const image of output.images.filter(isRecord)) {
4094
4203
  if (typeof image.width === "number" && typeof image.height === "number")
4095
- lines.push(`actual image: ${image.width}x${image.height} · ${String(image.mimeType ?? "")}`);
4204
+ lines.push(`actual image: ${image.width}x${image.height} ${String(image.mimeType ?? "")}`);
4096
4205
  }
4097
4206
  }
4098
4207
  if (Array.isArray(output.warnings))
@@ -4137,7 +4246,7 @@ function formatListToolResult(output, ok) {
4137
4246
  lines.push(`type: ${typeValue}`);
4138
4247
  const counts = [returnedEntries !== undefined ? `${returnedEntries} shown` : undefined, totalFiles !== undefined ? `${totalFiles} files` : undefined, totalDirectories !== undefined ? `${totalDirectories} dirs` : undefined].filter((value) => Boolean(value));
4139
4248
  if (counts.length > 0)
4140
- lines.push(`entries: ${counts.join(" · ")}`);
4249
+ lines.push(`entries: ${counts.join(" ")}`);
4141
4250
  if (names.length > 0)
4142
4251
  lines.push("sample:", ...names.map((name) => ` ${name}`));
4143
4252
  return lines.join("\n");
@@ -4183,7 +4292,7 @@ function formatWebSearchToolResult(output, ok) {
4183
4292
  return;
4184
4293
  const title = typeof item.title === "string" && item.title.trim() ? item.title.trim() : "Untitled";
4185
4294
  const url = typeof item.url === "string" ? item.url : "";
4186
- const published = typeof item.published === "string" ? ` · ${item.published}` : "";
4295
+ const published = typeof item.published === "string" ? ` ${item.published}` : "";
4187
4296
  lines.push(`[${index + 1}] ${title}${published}`);
4188
4297
  if (url)
4189
4298
  lines.push(url);
@@ -4210,7 +4319,7 @@ function formatGrepToolResult(output, ok) {
4210
4319
  if (grepPath !== undefined)
4211
4320
  lines.push(`path: ${grepPath}`);
4212
4321
  const countParts = [`${returnedMatches ?? matches.length} shown`, totalMatchesKnown !== undefined ? `${totalMatchesKnown} known` : undefined, truncated ? "truncated" : undefined].filter((value) => Boolean(value));
4213
- lines.push(`matches: ${countParts.join(" · ")}`);
4322
+ lines.push(`matches: ${countParts.join(" ")}`);
4214
4323
  if (matches.length === 0)
4215
4324
  return [...lines, "no matches"].join("\n");
4216
4325
  lines.push("results:");