Files
orca/src/preload/api/shell-api.ts
T
81a1968bc6 feat(native-chat): attach several files from one picker selection (#23956)
* feat(native-chat): attach several files from one picker selection

Picks over 256 files are rejected whole, matching the drop limit.

Fixes #23905

* refactor(native-chat): name the composer action for the files it now attaches

The hook still returned `pickAttachment` after it started attaching a
whole selection. Also records why the plural IPC handler sits next to the
singular one, matching its siblings in the same file.

* test(native-chat): cover the paperclip forwarding every picked path

The one line that makes the feature work — the composer handing the whole
picker result to attachExternalPaths — had no test; reverting it to
paths[0] kept every existing test green. Adds a hook test for the
multi-path, canceled, and wrong-pane cases, plus the missing canceled
case for the shell:pickAttachments handler.

* test(native-chat): exercise multi-pick through renderHook

* test(settings): preserve label fallback and verify Spanish copy

Keep latest main's missing-label fixture and restore its translation namespace after cleanup, so later tests still load real catalogs. Independently assert the shipped Spanish resource and rendered supported-agents label.

---------

Co-authored-by: Neil <neil@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
2026-10-06 12:31:51 -07:00

35 lines
1.2 KiB
TypeScript

import type {
ShellOpenExternalEditorRequest,
ShellOpenExternalEditorResult,
ShellOpenLocalPathResult
} from '../../shared/shell-open-types'
export type {
ShellOpenExternalEditorRequest,
ShellOpenExternalEditorResult,
ShellOpenLocalPathResult
} from '../../shared/shell-open-types'
export type ShellApi = {
openPath: (path: string) => Promise<void>
openInFileManager: (path: string) => Promise<ShellOpenLocalPathResult>
openInExternalEditor: (
request: ShellOpenExternalEditorRequest
) => Promise<ShellOpenExternalEditorResult>
openUrl: (url: string) => Promise<void>
openFilePath: (path: string) => Promise<boolean>
openFileUri: (uri: string) => Promise<void>
pathsExist?: (paths: string[]) => Promise<boolean[]>
pathExists: (path: string) => Promise<boolean>
pickAttachment: () => Promise<string | null>
pickAttachments: () => Promise<string[]>
pickImage: () => Promise<string | null>
pickRepoIconImage: () => Promise<{
dataUrl: string
fileName: string
} | null>
pickAudio: () => Promise<string | null>
pickDirectory: (args: { defaultPath?: string }) => Promise<string | null>
copyFile: (args: { srcPath: string; destPath: string }) => Promise<void>
}