neoctl 0.2.48 → 0.2.50

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 (54) hide show
  1. package/README.md +59 -59
  2. package/dist/context/compaction.d.ts +1 -0
  3. package/dist/context/compaction.js +9 -2
  4. package/dist/context/compaction.js.map +1 -1
  5. package/dist/context/system.md +16 -16
  6. package/dist/core/compaction-progress.d.ts +1 -1
  7. package/dist/core/compaction-progress.js +9 -0
  8. package/dist/core/compaction-progress.js.map +1 -1
  9. package/dist/core/image-input.d.ts +6 -0
  10. package/dist/core/image-input.js +189 -0
  11. package/dist/core/image-input.js.map +1 -0
  12. package/dist/core/image-storage.js +6 -0
  13. package/dist/core/image-storage.js.map +1 -1
  14. package/dist/core/query-engine.d.ts +2 -0
  15. package/dist/core/query-engine.js +7 -7
  16. package/dist/core/query-engine.js.map +1 -1
  17. package/dist/core/query.d.ts +1 -1
  18. package/dist/core/query.js +7 -6
  19. package/dist/core/query.js.map +1 -1
  20. package/dist/core/session-images.js +14 -3
  21. package/dist/core/session-images.js.map +1 -1
  22. package/dist/execution/filesystem.js +22 -22
  23. package/dist/execution/process.js +44 -44
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.js +1 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/model/model-metadata.json +137 -137
  28. package/dist/model/openai-mappers.js +11 -3
  29. package/dist/model/openai-mappers.js.map +1 -1
  30. package/dist/session/session-pagination.d.ts +20 -0
  31. package/dist/session/session-pagination.js +27 -0
  32. package/dist/session/session-pagination.js.map +1 -0
  33. package/dist/session/session-store.js +27 -24
  34. package/dist/session/session-store.js.map +1 -1
  35. package/dist/session/session-summary.d.ts +10 -0
  36. package/dist/session/session-summary.js +101 -0
  37. package/dist/session/session-summary.js.map +1 -0
  38. package/dist/tools/builtins/image-loader-tool.js +22 -6
  39. package/dist/tools/builtins/image-loader-tool.js.map +1 -1
  40. package/dist/types/events.d.ts +3 -0
  41. package/dist/web/demo-image.d.ts +1 -0
  42. package/dist/web/demo-image.js +26 -0
  43. package/dist/web/demo-image.js.map +1 -0
  44. package/dist/web/demo-tools.js +3 -4
  45. package/dist/web/demo-tools.js.map +1 -1
  46. package/dist/web/file-attachments.d.ts +10 -0
  47. package/dist/web/file-attachments.js +18 -0
  48. package/dist/web/file-attachments.js.map +1 -0
  49. package/dist/web/index.d.ts +17 -2
  50. package/dist/web/index.js +133 -18
  51. package/dist/web/index.js.map +1 -1
  52. package/docs/prompt-config.md +86 -86
  53. package/package.json +1 -1
  54. package/scripts/copy-prompt-resources.mjs +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-image.js","sourceRoot":"","sources":["../../src/web/demo-image.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { demoImage } from "./demo-image.js";
1
2
  import path from "node:path";
2
3
  import fs from "node:fs/promises";
3
4
  import { DEMO_VIDEO_BASE64 } from "./demo-video.js";
@@ -206,16 +207,14 @@ export class DemoTools {
206
207
  for (const ref of input.imageRefs ?? [this.latestImage])
207
208
  resolveContextImage(context, ref);
208
209
  const number = ++this.imageNumber;
209
- const color = number % 2 ? "#dd74ae" : "#73cbd5";
210
- const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="960" height="540" viewBox="0 0 960 540"><rect width="960" height="540" fill="#252c38"/><circle cx="760" cy="120" r="150" fill="${color}" opacity=".22"/><path d="M0 440L180 230 360 400 590 190 960 460V540H0Z" fill="${color}" opacity=".65"/><path d="M0 490L290 340 460 460 720 280 960 440V540H0Z" fill="${color}"/><text x="64" y="110" font-family="sans-serif" font-size="44" fill="white">AURORA / ${number.toString().padStart(2, "0")}</text><text x="66" y="154" font-family="sans-serif" font-size="20" fill="#ddd">Persistent images and context continuity</text></svg>`;
211
210
  const message = createTextMessage("attachment", "");
212
- message.blocks = [{ type: "image", mimeType: "image/svg+xml", data: Buffer.from(svg).toString("base64"), label: `Aurora-${number}` }];
211
+ message.blocks = [{ type: "image", mimeType: "image/png", data: demoImage(number).toString("base64"), label: `Aurora-${number}` }];
213
212
  const stored = await context.imageStore.persistMessage(message);
214
213
  const block = stored.blocks.find(b => b.type === "image");
215
214
  this.latestImage = block.imageId;
216
215
  this.firstImage ||= block.imageId;
217
216
  this.firstImageUrl ||= `/api/images/by-id/${encodeURIComponent(block.imageId)}?sessionId=${encodeURIComponent(context.session.sessionId)}`;
218
- return { ok: true, output: { provider: "openai", simulated: true, model: "demo", mode: input.mode ?? "generate", prompt: input.prompt, semanticName: input.semanticName, size: "960x540", quality: "auto", outputFormat: "svg", background: "opaque", images: [{ index: 0, imageId: block.imageId, imageAlias: block.imageAlias, label: block.label, storagePath: block.storage?.path, base64: block.data, mimeType: block.mimeType, width: 960, height: 540 }], warnings: [] } };
217
+ return { ok: true, output: { provider: "openai", simulated: true, model: "demo", mode: input.mode ?? "generate", prompt: input.prompt, semanticName: input.semanticName, size: "960x540", quality: "auto", outputFormat: "png", background: "opaque", images: [{ index: 0, imageId: block.imageId, imageAlias: block.imageAlias, label: block.label, storagePath: block.storage?.path, base64: block.data, mimeType: block.mimeType, width: 960, height: 540 }], warnings: [] } };
219
218
  }
220
219
  terminal(name, input, context, options) {
221
220
  const checked = (result) => { if (!result.ok)
@@ -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"}
@@ -1,10 +1,12 @@
1
1
  #!/usr/bin/env node
2
+ import { type SessionPageOptions } from "../session/session-pagination.js";
2
3
  import { type ToolInputChange } from "../model/tool-input-stream.js";
3
4
  import { type ToolActivity } from "./tool-activity.js";
4
5
  import type { TimingRecord } from "../core/query-timing.js";
5
6
  import { type DemoWait } from "./demo-mode.js";
6
7
  import { type ImageResultMetadata } from "./image-result-metadata.js";
7
8
  import { type IncomingMessage, type ServerResponse } from "node:http";
9
+ import { type DisplayFileAttachment } from "./file-attachments.js";
8
10
  import { QueryEngine } from "../core/query-engine.js";
9
11
  import { type AppPromptStore } from "../app/app-prompt.js";
10
12
  import { type ModelProviderName } from "../model/config.js";
@@ -23,6 +25,7 @@ import type { PromptSection } from "../context/prompts.js";
23
25
  import type { NeoPluginResource } from "../plugins/plugin-system.js";
24
26
  import type { ContextMetrics } from "../types/events.js";
25
27
  import { type AgentContentRequest } from "./agent-content-detail.js";
28
+ export { validateImageBytes } from "../core/image-input.js";
26
29
  import { type WebRuntimeContextPayload } from "./runtime-context-protocol.js";
27
30
  export interface WebRuntime {
28
31
  engine: QueryEngine;
@@ -95,6 +98,7 @@ export declare class SessionUsageTracker {
95
98
  snapshot(): UsageTotals;
96
99
  }
97
100
  interface UiLineImage {
101
+ sizeBytes?: number;
98
102
  src?: string;
99
103
  originalSrc?: string;
100
104
  imageId?: string;
@@ -166,6 +170,7 @@ interface UiToolStream {
166
170
  expanded?: boolean;
167
171
  }
168
172
  interface UiLine {
173
+ files?: DisplayFileAttachment[];
169
174
  connectPreviousTool?: boolean;
170
175
  id: number;
171
176
  kind: "system" | "user" | "assistant" | "thinking" | "tool" | "error" | "meta";
@@ -206,6 +211,7 @@ type WebActionResult<T extends object = object> = ({
206
211
  ok: true;
207
212
  } & T) | WebActionFailure;
208
213
  interface UiStatus {
214
+ compactionText?: string;
209
215
  modelOutput?: {
210
216
  kind: "text";
211
217
  } | {
@@ -213,6 +219,7 @@ interface UiStatus {
213
219
  callId: string;
214
220
  name?: string;
215
221
  };
222
+ responseWaitStartedAt?: number;
216
223
  queryTiming?: TimingRecord;
217
224
  toolTimings?: TimingRecord[];
218
225
  phase: string;
@@ -795,9 +802,17 @@ export declare class WebRepl {
795
802
  }>;
796
803
  private enqueueInput;
797
804
  private startRun;
798
- listSessions(): Promise<{
805
+ listSessions(options?: SessionPageOptions): Promise<{
806
+ runningSessionIds: string[];
799
807
  sessions: import("../index.js").SessionSummary[];
808
+ total: number;
809
+ totalCount: number;
810
+ page: number;
811
+ pageSize: number;
812
+ totalPages: number;
813
+ } | {
800
814
  runningSessionIds: string[];
815
+ sessions: import("../index.js").SessionSummary[];
801
816
  }>;
802
817
  resumeSession(sessionId: string): Promise<WebActionResult>;
803
818
  newSession(): Promise<WebActionResult>;
@@ -807,6 +822,7 @@ export declare class WebRepl {
807
822
  setAppPrompt(payload: WebSetAppPromptPayload): WebActionResult<{
808
823
  appPrompt: ReturnType<QueryEngine["getAppPrompt"]>;
809
824
  }>;
825
+ fileAttachment(messageId: string, index: number): DisplayFileAttachment | undefined;
810
826
  imagePayload(messageId: string, blockIndex: number): {
811
827
  body: Buffer;
812
828
  mimeType: string;
@@ -906,4 +922,3 @@ export declare function compactLineOperations(operations: WebLineOperation[]): W
906
922
  export declare function handleWebRequest(req: IncomingMessage, res: ServerResponse, router: WebRuntimeRouter): Promise<void>;
907
923
  export declare function restoreWebHistoryLines(runtime: Pick<WebRuntime, "engine">): Array<Record<string, unknown>>;
908
924
  export declare function mergeWebQueuedInput(current: string | undefined, next: string): string;
909
- export {};
package/dist/web/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { paginateSessions, sessionPageOptions } from "../session/session-pagination.js";
2
3
  import { applyToolInputChanges } from "../model/tool-input-stream.js";
3
4
  import { toolActivity } from "./tool-activity.js";
4
5
  import { toolObservationResult } from "./tool-observation-result.js";
@@ -10,9 +11,14 @@ import { subagentHeader, subagentStatusFacts } from "./status-semantics.js";
10
11
  import { handlePromptConfigRequest } from "./prompt-config-protocol.js";
11
12
  import http from "node:http";
12
13
  import fs from "node:fs/promises";
14
+ import { createReadStream } from "node:fs";
15
+ import { createHash } from "node:crypto";
16
+ import os from "node:os";
17
+ import { messageFileAttachments } from "./file-attachments.js";
13
18
  import path from "node:path";
14
19
  import { existsSync, readFileSync } from "node:fs";
15
20
  import { dockerEnabled } from "../execution/docker.js";
21
+ import { executionFs } from "../execution/filesystem.js";
16
22
  import { fileURLToPath } from "node:url";
17
23
  import { createRequire } from "node:module";
18
24
  import { readSessionPrompt, updateSessionPrompt, SessionPromptError } from "./session-prompt-protocol.js";
@@ -49,6 +55,8 @@ import { createAgentContentDetailResolver } from "./agent-content-detail.js";
49
55
  import { toolDetailFieldsFromDetail } from "./tool-detail-fields.js";
50
56
  import { WEB_HTML } from "./html.js";
51
57
  import { openDirectory } from "../open-directory.js";
58
+ import { validateImageInput } from "../core/image-input.js";
59
+ export { validateImageBytes } from "../core/image-input.js";
52
60
  import { resolveImageBlockDataResultSync, resolveImageBlockDataSync } from "../core/image-storage.js";
53
61
  import { isWebPlanPayload, serializeWebPlanPayload, webPlanBodyTitle } from "./plan-payload.js";
54
62
  import { createWebRuntimeContextPayload } from "./runtime-context-protocol.js";
@@ -1090,10 +1098,10 @@ export class WebRepl {
1090
1098
  this.foregroundRun = undefined;
1091
1099
  }).catch(() => undefined);
1092
1100
  }
1093
- async listSessions() {
1101
+ async listSessions(options) {
1094
1102
  const sessions = await this.runtime.engine.listSessions(Number.POSITIVE_INFINITY);
1095
1103
  const runningSessionIds = [...this.backgroundSessionRuns.keys()];
1096
- return { sessions, runningSessionIds };
1104
+ return { ...(options ? paginateSessions(sessions, options) : { sessions }), runningSessionIds };
1097
1105
  }
1098
1106
  async resumeSession(sessionId) {
1099
1107
  if (!sessionId)
@@ -1207,6 +1215,13 @@ export class WebRepl {
1207
1215
  return actionFailure("PROMPT_UPDATE_FAILED", message);
1208
1216
  }
1209
1217
  }
1218
+ fileAttachment(messageId, index) {
1219
+ for (const entry of this.runtime.engine.getDisplayEntries()) {
1220
+ if (entry.type === "message" && entry.message.id === messageId)
1221
+ return messageFileAttachments(entry.message)[index];
1222
+ }
1223
+ return undefined;
1224
+ }
1210
1225
  imagePayload(messageId, blockIndex) {
1211
1226
  if (!messageId || !Number.isInteger(blockIndex) || blockIndex < 0)
1212
1227
  return undefined;
@@ -1333,11 +1348,15 @@ export class WebRepl {
1333
1348
  if (showProgress) {
1334
1349
  this.compactingSession = engine;
1335
1350
  this.busy = true;
1336
- this.setStatus({ ...this.status, phase: "compacting", detail: "manualcompact: generating context summary", activityTick: this.status.activityTick + 1 });
1351
+ this.setStatus({ ...this.status, phase: "compacting", compactionText: "", detail: "manualcompact: generating context summary", activityTick: this.status.activityTick + 1 });
1337
1352
  }
1338
1353
  try {
1339
1354
  // An idle click executes now through the settings barrier, not the chat/input queue.
1340
- const result = await engine.updateSessionSettings({ compact: true }, { abortSignal: controller?.signal });
1355
+ const result = await engine.updateSessionSettings({ compact: true }, { abortSignal: controller?.signal, onCompactionDelta: text => {
1356
+ if (showProgress && this.runtime.engine === engine && this.foregroundRunToken === runToken && !controller?.signal.aborted) {
1357
+ this.handleEvent({ type: "context.compaction.delta", text });
1358
+ }
1359
+ } });
1341
1360
  if (this.runtime.engine === engine && this.foregroundRunToken === runToken) {
1342
1361
  if (result.compaction?.report)
1343
1362
  this.appendCompaction(result.compaction.report);
@@ -1531,6 +1550,13 @@ export class WebRepl {
1531
1550
  this.broadcastSync();
1532
1551
  }
1533
1552
  setStatus(next) {
1553
+ if (next.phase !== "compacting")
1554
+ next = { ...next, compactionText: undefined };
1555
+ const waiting = next.phase === "calling_model" && !next.modelOutput;
1556
+ const wasWaiting = this.status.phase === "calling_model" && !this.status.modelOutput;
1557
+ next = { ...next, responseWaitStartedAt: waiting
1558
+ ? (wasWaiting ? this.status.responseWaitStartedAt ?? Date.now() : Date.now())
1559
+ : undefined };
1534
1560
  this.status = next;
1535
1561
  this.broadcastSync();
1536
1562
  }
@@ -1983,6 +2009,10 @@ export class WebRepl {
1983
2009
  this.liveToolLineIds.set(event.toolUse.id, this.append(patch));
1984
2010
  return;
1985
2011
  }
2012
+ if (event.type === "context.compaction.delta") {
2013
+ this.queueDeltaStatus();
2014
+ return;
2015
+ }
1986
2016
  if (event.type === "tool_call.delta") {
1987
2017
  this.queueDeltaStatus();
1988
2018
  return;
@@ -2247,7 +2277,17 @@ export class WebRepl {
2247
2277
  stopAfterTurn: () => this.queuedInput !== undefined,
2248
2278
  };
2249
2279
  const stream = continuationOnly ? engine.continueExecution(options) : engine.sendUserText(promptPayload.text, options);
2280
+ let attachedDisplay = false;
2250
2281
  for await (const event of stream) {
2282
+ if (!attachedDisplay && attachments.length && !continuationOnly && this.runtime.engine === engine) {
2283
+ const stored = [...engine.getDisplayEntries()].reverse().find(entry => entry.type === "message" && entry.message.role === "user" && !entry.message.isMeta);
2284
+ const optimistic = this.lines.find(line => line.messageId === optimisticMessageId);
2285
+ if (stored?.type === "message" && optimistic) {
2286
+ this.replaceLine(optimistic.id, { messageId: stored.message.id, files: messageFileAttachments(stored.message) });
2287
+ renderMessageImages(stored.message, line => this.append(line));
2288
+ attachedDisplay = true;
2289
+ }
2290
+ }
2251
2291
  if (this.foregroundRunToken !== runToken)
2252
2292
  continue;
2253
2293
  if (this.runtime.engine !== engine)
@@ -2307,10 +2347,13 @@ export class WebRepl {
2307
2347
  this.activeAbortController = abortController;
2308
2348
  this.interruptArmed = false;
2309
2349
  this.setBusy(true);
2310
- this.setStatus({ ...this.status, phase: "compacting", detail: type === "compact" ? "manual compact" : "pure compact", activityTick: this.status.activityTick + 1 });
2350
+ this.setStatus({ ...this.status, phase: "compacting", compactionText: "", detail: type === "compact" ? "manual compact" : "pure compact", activityTick: this.status.activityTick + 1 });
2311
2351
  try {
2312
2352
  const result = type === "compact"
2313
- ? await this.runtime.engine.compact({ abortSignal: abortController.signal })
2353
+ ? await this.runtime.engine.compact({ abortSignal: abortController.signal, onCompactionDelta: text => {
2354
+ if (this.foregroundRunToken === runToken && !abortController.signal.aborted)
2355
+ this.handleEvent({ type: "context.compaction.delta", text });
2356
+ } })
2314
2357
  : await this.runtime.engine.pureCompact({ abortSignal: abortController.signal });
2315
2358
  if (this.foregroundRunToken !== runToken)
2316
2359
  return;
@@ -2624,15 +2667,46 @@ export async function handleWebRequest(req, res, router) {
2624
2667
  const body = await readJsonBody(req);
2625
2668
  return sendJson(res, await repl.setSessionPlugins(body.overrides));
2626
2669
  }
2670
+ const fileMatch = /^\/api\/message-files\/([^/]+)\/(\d+)$/u.exec(url.pathname);
2671
+ if ((req.method === "GET" || req.method === "HEAD") && fileMatch) {
2672
+ const file = repl.fileAttachment(decodeURIComponent(fileMatch[1]), Number(fileMatch[2]));
2673
+ if (!file)
2674
+ return sendJson(res, { error: "attachment not found" }, 404);
2675
+ try {
2676
+ const stat = await executionFs.stat(file.absolutePath);
2677
+ if (!stat.isFile())
2678
+ throw new Error("not a file");
2679
+ if (url.searchParams.get("preview") === "1") {
2680
+ const body = await executionFs.readFile(file.absolutePath);
2681
+ const actual = validateImageInput(body.toString("base64"));
2682
+ 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) });
2683
+ res.end(req.method === "HEAD" ? undefined : body);
2684
+ return;
2685
+ }
2686
+ res.writeHead(200, { "Content-Type": "application/octet-stream", "Content-Length": String(stat.size),
2687
+ "Content-Disposition": `attachment; filename*=UTF-8''${encodeURIComponent(file.name)}`,
2688
+ "X-Content-Type-Options": "nosniff", "Cache-Control": "private, no-store", ...nativeResourceHeaders(req, file.absolutePath) });
2689
+ if (req.method === "HEAD")
2690
+ res.end();
2691
+ else if (dockerEnabled())
2692
+ res.end(await executionFs.readFile(file.absolutePath));
2693
+ else
2694
+ createReadStream(file.absolutePath).on("error", () => res.destroy()).pipe(res);
2695
+ }
2696
+ catch {
2697
+ sendJson(res, { error: "attachment unavailable" }, 404);
2698
+ }
2699
+ return;
2700
+ }
2627
2701
  const imageIdMatch = /^\/api\/images\/by-id\/([^/]+)$/u.exec(url.pathname);
2628
- if (req.method === "GET" && imageIdMatch) {
2702
+ if ((req.method === "GET" || req.method === "HEAD") && imageIdMatch) {
2629
2703
  const payload = repl.imagePayloadById(decodeURIComponent(imageIdMatch[1]));
2630
- return payload ? sendImage(res, payload) : sendJson(res, { error: "image not found" }, 404);
2704
+ return payload ? sendImage(res, payload, req) : sendJson(res, { error: "image not found" }, 404);
2631
2705
  }
2632
2706
  const imageMatch = /^\/api\/images\/([^/]+)\/(\d+)$/u.exec(url.pathname);
2633
- if (req.method === "GET" && imageMatch) {
2707
+ if ((req.method === "GET" || req.method === "HEAD") && imageMatch) {
2634
2708
  const payload = repl.imagePayload(decodeURIComponent(imageMatch[1]), Number(imageMatch[2]));
2635
- return payload ? sendImage(res, payload) : sendJson(res, { error: "image not found" }, 404);
2709
+ return payload ? sendImage(res, payload, req) : sendJson(res, { error: "image not found" }, 404);
2636
2710
  }
2637
2711
  if (req.method === "GET" && url.pathname === "/api/app-prompt")
2638
2712
  return sendJson(res, repl.appPrompt());
@@ -2695,7 +2769,7 @@ export async function handleWebRequest(req, res, router) {
2695
2769
  if (req.method === "POST" && url.pathname === "/api/queue/send-now")
2696
2770
  return sendJson(res, await repl.sendQueuedNow());
2697
2771
  if (req.method === "GET" && url.pathname === "/api/sessions")
2698
- return sendJson(res, await repl.listSessions());
2772
+ return sendJson(res, await repl.listSessions(sessionPageOptions(url.searchParams)));
2699
2773
  if (req.method === "POST" && url.pathname === "/api/sessions/resume") {
2700
2774
  const body = await readJsonBody(req);
2701
2775
  return sendJson(res, await repl.resumeSession(String(body.sessionId ?? "")));
@@ -2753,15 +2827,47 @@ function imagePayloadForBlock(block) {
2753
2827
  if (!base64 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(base64))
2754
2828
  return undefined;
2755
2829
  const body = Buffer.from(base64, "base64");
2756
- return body.length ? { body, mimeType } : undefined;
2830
+ try {
2831
+ return body.length ? { body, mimeType: validateImageInput(base64).mimeType } : undefined;
2832
+ }
2833
+ catch {
2834
+ return undefined;
2835
+ }
2757
2836
  }
2758
- function sendImage(res, payload) {
2837
+ function nativeResourceHeaders(req, filePath) {
2838
+ if (process.env.NEO_DESKTOP_LOCAL_RESOURCES !== "1" || dockerEnabled() || req.method !== "HEAD" || req.headers["x-neo-resource-action"] !== "reveal")
2839
+ return {};
2840
+ if (!["127.0.0.1", "::1", "::ffff:127.0.0.1"].includes(req.socket.remoteAddress ?? "") || req.headers["sec-fetch-site"] === "cross-site")
2841
+ return {};
2842
+ if (req.headers.origin) {
2843
+ try {
2844
+ if (new URL(req.headers.origin).host !== req.headers.host)
2845
+ return {};
2846
+ }
2847
+ catch {
2848
+ return {};
2849
+ }
2850
+ }
2851
+ return { "X-Neo-Resource-Path": encodeURIComponent(filePath), Vary: "X-Neo-Resource-Action" };
2852
+ }
2853
+ async function sendImage(res, payload, req) {
2854
+ let headers = {};
2855
+ if (Object.keys(nativeResourceHeaders(req, "probe")).length) {
2856
+ const directory = path.join(os.tmpdir(), "neo-desktop-images");
2857
+ await fs.mkdir(directory, { recursive: true });
2858
+ const name = createHash("sha256").update(payload.body).digest("hex") + "." + payload.mimeType.split("/")[1];
2859
+ const target = path.join(directory, name);
2860
+ await fs.writeFile(target, payload.body);
2861
+ headers = nativeResourceHeaders(req, target);
2862
+ }
2759
2863
  res.writeHead(200, {
2864
+ ...headers,
2865
+ "X-Content-Type-Options": "nosniff",
2760
2866
  "Content-Type": payload.mimeType,
2761
2867
  "Content-Length": String(payload.body.length),
2762
2868
  "Cache-Control": "private, max-age=31536000, immutable",
2763
2869
  });
2764
- res.end(payload.body);
2870
+ res.end(req.method === "HEAD" ? undefined : payload.body);
2765
2871
  }
2766
2872
  async function readJsonBody(req) {
2767
2873
  const chunks = [];
@@ -2779,7 +2885,8 @@ function sanitizeWebAttachments(value) {
2779
2885
  return [];
2780
2886
  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") {
2781
2887
  const imageId = typeof item.imageId === "string" && /^image_[0-9a-f-]{36}$/iu.test(item.imageId) ? item.imageId : createImageId();
2782
- return [{ kind: "image", imageId, label: item.label, mimeType: item.mimeType, data: item.data }];
2888
+ const image = validateImageInput(item.data);
2889
+ return [{ kind: "image", imageId, label: item.label, mimeType: image.mimeType, data: image.data }];
2783
2890
  }
2784
2891
  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)) {
2785
2892
  return [{
@@ -2899,7 +3006,7 @@ function buildWebPromptPayload(displayText, attachments) {
2899
3006
  const activeAttachments = candidateAttachments;
2900
3007
  const fileManifest = buildWebFileAttachmentManifest(attachments.filter((attachment) => attachment.kind === "file"));
2901
3008
  if (activeAttachments.length === 0) {
2902
- const text = [displayText.trim(), fileManifest].filter(Boolean).join("\n\n");
3009
+ const text = [displayText, fileManifest].filter(Boolean).join("\n\n");
2903
3010
  return { text, displayText };
2904
3011
  }
2905
3012
  const blocks = [];
@@ -3022,8 +3129,10 @@ function toolStreamStepStatus(phase) {
3022
3129
  return "running";
3023
3130
  }
3024
3131
  function reduceStatus(status, event) {
3132
+ if (event.type === "context.compaction.delta")
3133
+ return { ...status, phase: "compacting", compactionText: (status.compactionText || "") + event.text, activityTick: status.activityTick + 1 };
3025
3134
  if (event.type === "state")
3026
- return { ...status, phase: event.phase, detail: event.detail, modelOutput: undefined, currentTool: event.phase === "running_tools" ? status.currentTool : undefined, usage: event.phase === "preparing" ? undefined : status.usage, streamedOutputTokens: event.phase === "preparing" ? 0 : status.streamedOutputTokens, inputTokenUpdatedAt: event.phase === "preparing" ? undefined : status.inputTokenUpdatedAt, outputTokenUpdatedAt: event.phase === "preparing" ? undefined : status.outputTokenUpdatedAt, retryCooldownUntil: event.phase === "preparing" ? undefined : status.retryCooldownUntil, activityTick: status.activityTick + 1 };
3135
+ return { ...status, phase: event.phase, detail: event.detail, compactionText: event.phase === "compacting" && status.phase === "compacting" ? status.compactionText : undefined, modelOutput: undefined, currentTool: event.phase === "running_tools" ? status.currentTool : undefined, usage: event.phase === "preparing" ? undefined : status.usage, streamedOutputTokens: event.phase === "preparing" ? 0 : status.streamedOutputTokens, inputTokenUpdatedAt: event.phase === "preparing" ? undefined : status.inputTokenUpdatedAt, outputTokenUpdatedAt: event.phase === "preparing" ? undefined : status.outputTokenUpdatedAt, retryCooldownUntil: event.phase === "preparing" ? undefined : status.retryCooldownUntil, activityTick: status.activityTick + 1 };
3027
3136
  if (event.type === "context.compacted")
3028
3137
  return { ...status, phase: "compacting", detail: formatCompactionReportSummary(event.compaction), activityTick: status.activityTick + 1 };
3029
3138
  if (event.type === "context.metrics")
@@ -3374,7 +3483,7 @@ function renderMessage(message, append, activeAssistantId, options = {}) {
3374
3483
  if (kind === "system")
3375
3484
  append({ kind, title: titleForRole(message.role), text: block.text, messageId: message.id, previewStyle: "summary" });
3376
3485
  else
3377
- append({ kind, text: block.text, messageId: message.id });
3486
+ append({ kind, text: block.text, messageId: message.id, ...(kind === "user" ? { files: messageFileAttachments(message) } : {}) });
3378
3487
  rendered = true;
3379
3488
  }
3380
3489
  else if (block.type === "image") {
@@ -3413,6 +3522,11 @@ function renderToolResultMessage(message, append, presentToolResult) {
3413
3522
  }
3414
3523
  function renderMessageImages(message, append, messageId = message.id) {
3415
3524
  let rendered = false;
3525
+ const files = messageFileAttachments(message);
3526
+ if (files.length) {
3527
+ append({ kind: "user", text: "", messageId, files });
3528
+ rendered = true;
3529
+ }
3416
3530
  const parentToolName = typeof message.metadata?.tool === "string" ? message.metadata.tool : undefined;
3417
3531
  const parentToolUseId = message.blocks.find((block) => block.type === "tool_result")?.toolUseId;
3418
3532
  for (const [blockIndex, block] of message.blocks.entries()) {
@@ -3451,6 +3565,7 @@ function imageLineForBlock(role, block, messageId, blockIndex) {
3451
3565
  mimeType: block.mimeType,
3452
3566
  available: resolution.available,
3453
3567
  error: resolution.available ? undefined : resolution.error,
3568
+ sizeBytes: resolution.available ? Buffer.from(resolution.data.replace(/^data:[^;,]+;base64,/iu, ""), "base64").length : undefined,
3454
3569
  blockIndex,
3455
3570
  },
3456
3571
  };