@blade-ai/orca 0.4.32 → 0.5.0-darwin-x64
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.
- package/README.md +99 -64
- package/package.json +15 -22
- package/vendor/x86_64-apple-darwin/bin/orca +4 -0
- package/bin/orca.js +0 -118
package/README.md
CHANGED
|
@@ -50,51 +50,81 @@ re-parsing; legacy string commands use the resolved shell dialect.
|
|
|
50
50
|
```bash
|
|
51
51
|
export DEEPSEEK_API_KEY=sk-...
|
|
52
52
|
|
|
53
|
-
orca # open the
|
|
53
|
+
orca # open the terminal UI
|
|
54
54
|
orca exec "fix the failing test" # run headlessly
|
|
55
|
+
printf '%s' "$INSTRUCTION" | orca exec # keep arbitrary prompt text out of argv
|
|
55
56
|
orca exec --verifier "cargo test" "fix it" # verify before finishing
|
|
56
57
|
orca exec resume SESSION_ID "continue" # resume a headless session
|
|
57
58
|
orca exec resume --last "continue" # resume the most recent session
|
|
58
59
|
orca exec resume SID --resume-at MID "continue" # resume up to a message boundary
|
|
59
|
-
orca --mode=acp # connect an ACP client
|
|
60
60
|
orca --resume [SESSION_ID] # resume a saved conversation
|
|
61
61
|
orca --fork SESSION_ID # fork a saved conversation
|
|
62
|
+
orca --mode=acp # connect an ACP client
|
|
63
|
+
orca doctor # check the key, trust, and sandbox locally
|
|
62
64
|
```
|
|
63
65
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
On Windows PowerShell, set the key with `$env:DEEPSEEK_API_KEY = "sk-..."`;
|
|
67
|
+
the `orca` commands are the same. The positional prompt form remains
|
|
68
|
+
supported. When the prompt may contain tokens that a task later searches for or
|
|
69
|
+
kills in the process table, pipe it on stdin so it is not exposed in `orca`'s
|
|
70
|
+
command line.
|
|
71
|
+
|
|
72
|
+
Orca also offers opt-in [shared ACP sessions](docs/acp-daemon.md) on Unix
|
|
73
|
+
(`orca daemon`, `orca attach`, and `orca acp-bridge`),
|
|
66
74
|
[file-defined subagents](docs/subagents.md), and
|
|
67
75
|
[persistent terminal output pages](docs/architecture/adr/0006-unified-exec-terminal-service.md).
|
|
68
|
-
These additions are available in v0.4.27 and later.
|
|
69
76
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
and
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
77
|
+
### The terminal UI
|
|
78
|
+
|
|
79
|
+
Run `orca` in a project. The first run in a folder asks you to trust it or
|
|
80
|
+
continue untrusted: trust lets Orca load the project's configuration,
|
|
81
|
+
instructions, skills, agents, and workflows, and never enables or bypasses the
|
|
82
|
+
OS sandbox. Then type a task and press `Enter`.
|
|
83
|
+
|
|
84
|
+
- **Mention and command.** `@` mentions files, skills, plugins, and MCP
|
|
85
|
+
resources; `$` inserts a skill; `/` opens the command menu; `?` lists every
|
|
86
|
+
key. `Ctrl+V` attaches a clipboard image.
|
|
87
|
+
- **Follow along.** Replies are marked `●`, reasoning collapses to one
|
|
88
|
+
`⋯ thinking` line, and each tool call shows its output under a `│` rail.
|
|
89
|
+
`e` expands the latest collapsed output and `Shift+E` all of them. The
|
|
90
|
+
status bar shows the approval mode, the model and reasoning effort, the
|
|
91
|
+
context left, and usage.
|
|
92
|
+
- **Steer a running turn.** `Esc` interrupts. `Enter` queues a follow-up for
|
|
93
|
+
the next turn, `Ctrl+Enter` sends it into the running turn (in terminals
|
|
94
|
+
with the kitty keyboard protocol), and `Ctrl+B` moves the turn to the
|
|
95
|
+
background.
|
|
96
|
+
- **Approve tool calls.** A call that needs approval turns the input into an
|
|
97
|
+
approval panel: allow once, allow this exact call, allow the tool for the
|
|
98
|
+
session, or deny (`Esc`). `Shift+Tab` cycles `suggest` → `auto-edit` →
|
|
99
|
+
`full-auto` → `plan`. Entering `full-auto` asks for an explicit Full Access
|
|
100
|
+
confirmation; the running task picks it up at its next tool call, while tools
|
|
101
|
+
already running and subagents already launched keep their original policy.
|
|
102
|
+
Mode changes last for the session and are never saved.
|
|
103
|
+
- **Background work.** `/tasks` shows the tasks dock under the conversation,
|
|
104
|
+
where background turns, subagents, commands, monitors, and workflow children
|
|
105
|
+
appear. `/agents` opens the Agent Workspace with each task's live
|
|
106
|
+
conversation or transcript and the controls it can safely take: stop,
|
|
107
|
+
resume, retry, or a follow-up. When background agents finish while you are
|
|
108
|
+
idle, Orca continues with their results. `/workflows` keeps the workflow run
|
|
109
|
+
tree.
|
|
110
|
+
- **Plan, goals, and recap.** `/plan` investigates read-only and ends with a
|
|
111
|
+
plan to approve; `/goal` sets a persistent objective; `/recap` summarizes the
|
|
112
|
+
session, and Orca writes one itself when you return after a quiet spell;
|
|
113
|
+
`/side` opens a side conversation for a quick question.
|
|
114
|
+
- **Sessions.** `/new`, `/resume` (grouped by project, with fork, rename,
|
|
115
|
+
archive, delete, and copy ID), `/fork [name]`, `/rename [name]`, `/model`,
|
|
116
|
+
`/config`, and `/copy [N]`. Model and reasoning-effort choices are saved to
|
|
117
|
+
the user `config.toml`, so new sessions use them too. `/status` reports the effective execution profile,
|
|
118
|
+
shell sandbox, and permission profile. `Ctrl+L` clears the screen but keeps
|
|
119
|
+
the conversation, and on exit Orca prints the `orca --resume <SESSION_ID>`
|
|
120
|
+
command.
|
|
121
|
+
|
|
122
|
+
The [Terminal UI guide](https://orcaagent.dev/docs/#terminal-ui) walks through
|
|
123
|
+
the screen and every key.
|
|
124
|
+
|
|
125
|
+
Automatic project memory is on for recorded sessions; use `/remember` for
|
|
126
|
+
explicit user or project facts. See [Memory](docs/memory.md) for capture,
|
|
127
|
+
recall, storage, privacy, and deletion.
|
|
98
128
|
|
|
99
129
|
### Use Orca from Pilion Browser
|
|
100
130
|
|
|
@@ -134,9 +164,9 @@ deletion.
|
|
|
134
164
|
accepted overflow queues without creating a worker, and parents waiting for
|
|
135
165
|
children yield their lease before re-entering the fair queue.
|
|
136
166
|
- Keeps up to four active child summaries visible in the conversation and up to
|
|
137
|
-
eight durable activity entries per child. `/
|
|
138
|
-
exposes only controls the selected child can safely
|
|
139
|
-
retry, or a revision-fenced follow-up.
|
|
167
|
+
eight durable activity entries per child. `/agents` opens live conversations
|
|
168
|
+
and transcripts and exposes only controls the selected child can safely
|
|
169
|
+
perform: stop, resume, retry, or a revision-fenced follow-up.
|
|
140
170
|
- Learns a bounded set of durable project facts after successfully committed
|
|
141
171
|
turns and retrieves only prompt-relevant facts on later turns.
|
|
142
172
|
- Runs with no implicit turn ceiling; optional `[budget]` limits
|
|
@@ -157,37 +187,40 @@ then defaults. Run `orca --help` or `orca exec --help` for the full command
|
|
|
157
187
|
surface. User configuration lives at `~/.orca/config.toml`; trusted projects
|
|
158
188
|
can also provide `.orca/config.toml`, `AGENTS.md`, rules, skills, and workflows.
|
|
159
189
|
|
|
160
|
-
|
|
161
|
-
`
|
|
162
|
-
`
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
`deepseek-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
`
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
190
|
+
An unset or `auto` model uses `deepseek-flash` (DeepSeek-V4.1-Flash). Choose
|
|
191
|
+
`deepseek-v4-pro` with `/model`, `--model`, or `model = "deepseek-v4-pro"` in
|
|
192
|
+
`config.toml`; releases before 0.5.0 routed `auto` to Pro. Both models use a
|
|
193
|
+
1M-token context window and allow up to 384K output tokens. The retired
|
|
194
|
+
`deepseek-v4-flash` and `deepseek-v4-flash-vision-exp` names remain accepted
|
|
195
|
+
and normalize to `deepseek-flash`, including Flash pricing. DeepSeek thinking is
|
|
196
|
+
enabled explicitly: set `reasoning_effort` to `low`, `high`, or `max` (the
|
|
197
|
+
default) in `config.toml`, or use `ORCA_REASONING_EFFORT`.
|
|
198
|
+
|
|
199
|
+
JPEG, PNG, GIF, and WebP inputs are accepted from ACP clients and the TUI with
|
|
200
|
+
every model selection. Flash consumes images directly; Pro uses Flash for
|
|
201
|
+
task-aware visual analysis before continuing with Pro. In the TUI, use `Ctrl+V`
|
|
202
|
+
to attach the current clipboard image (`Alt+V` is also available on Windows),
|
|
203
|
+
drag or paste image paths and `file://` URLs, or select an image through
|
|
204
|
+
`@file`. Each attachment appears as an atomic `[Image #N]` item that can be
|
|
205
|
+
deleted, cleared, queued, edited, and restored after a rejected submission.
|
|
206
|
+
`Cmd+V` works when the terminal forwards it as `Super+V`; terminals that
|
|
207
|
+
consume `Cmd+V` should use `Ctrl+V`. Clipboard reads run in the background, and
|
|
208
|
+
pressing Enter while one is pending waits for the image before submitting.
|
|
209
|
+
Place the cursor on an image item and press Enter to open its preview;
|
|
210
|
+
submitted images also render in the message area and can be clicked. The viewer
|
|
211
|
+
supports `+`/`-` zoom, arrow-key panning, `0` to fit, and Esc to close. Kitty
|
|
212
|
+
and Ghostty use the Kitty graphics protocol for native-pixel previews; iTerm2
|
|
213
|
+
and WezTerm use the inline-image protocol. Terminals without an image protocol,
|
|
214
|
+
including Apple Terminal, fall back to low-resolution true-color cells. SSH
|
|
215
|
+
sessions without a graphical clipboard should paste or mention a path on the
|
|
216
|
+
remote host. Inline attachments share a 5 MiB total limit. Orca keeps the Chat
|
|
217
|
+
Completions transport and fully replays any returned `reasoning_content` across
|
|
218
|
+
tool turns as required by DeepSeek.
|
|
188
219
|
|
|
189
220
|
More detail:
|
|
190
221
|
|
|
222
|
+
- [Documentation](https://orcaagent.dev/docs/) and the
|
|
223
|
+
[Terminal UI guide](https://orcaagent.dev/docs/#terminal-ui)
|
|
191
224
|
- [Persistent Goal Mode](docs/goal-mode.md)
|
|
192
225
|
- [Memory](docs/memory.md)
|
|
193
226
|
- [Harness and app-server contract](docs/harness-contract.md)
|
|
@@ -221,6 +254,8 @@ More detail:
|
|
|
221
254
|
cleanup before the Goal mutation commits. Alt+Up queue editing commits a
|
|
222
255
|
revision-checked runtime delete, failed queue admission restores the prompt,
|
|
223
256
|
and queued previews remain bounded instead of copying the full body per frame.
|
|
257
|
+
- Detached background workers never hold the terminal open, and they end once
|
|
258
|
+
their task is gone or their lease is lost.
|
|
224
259
|
- Session switches start the replacement before closing the current runtime.
|
|
225
260
|
Rename, fork, archive, and delete commit through revision-checked and durable
|
|
226
261
|
paths, and stale events from a previous attachment are ignored.
|
package/package.json
CHANGED
|
@@ -1,32 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@blade-ai/orca",
|
|
3
|
-
"version": "0.4.32",
|
|
4
|
-
"description": "Orca CLI: a DeepSeek-native coding agent.",
|
|
5
|
-
"homepage": "https://orcaagent.dev/",
|
|
6
2
|
"license": "MIT",
|
|
7
|
-
"
|
|
8
|
-
"orca": "bin/orca.js"
|
|
9
|
-
},
|
|
10
|
-
"type": "module",
|
|
11
|
-
"engines": {
|
|
12
|
-
"node": ">=16"
|
|
13
|
-
},
|
|
3
|
+
"homepage": "https://orcaagent.dev/",
|
|
14
4
|
"files": [
|
|
15
|
-
"
|
|
5
|
+
"vendor",
|
|
16
6
|
"README.md",
|
|
17
7
|
"LICENSE"
|
|
18
8
|
],
|
|
19
9
|
"repository": {
|
|
20
10
|
"type": "git",
|
|
21
|
-
"url": "git+https://github.com/echoVic/orca-agent.git"
|
|
22
|
-
|
|
11
|
+
"url": "git+https://github.com/echoVic/orca-agent.git"
|
|
12
|
+
},
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=16"
|
|
23
15
|
},
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
16
|
+
"name": "@blade-ai/orca",
|
|
17
|
+
"version": "0.5.0-darwin-x64",
|
|
18
|
+
"description": "Native Orca binary for darwin/x64.",
|
|
19
|
+
"os": [
|
|
20
|
+
"darwin"
|
|
21
|
+
],
|
|
22
|
+
"cpu": [
|
|
23
|
+
"x64"
|
|
24
|
+
]
|
|
32
25
|
}
|
package/bin/orca.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { spawn } from "node:child_process";
|
|
4
|
-
import { existsSync, realpathSync } from "node:fs";
|
|
5
|
-
import { createRequire } from "node:module";
|
|
6
|
-
import path from "node:path";
|
|
7
|
-
import { fileURLToPath } from "node:url";
|
|
8
|
-
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
const __dirname = path.dirname(__filename);
|
|
11
|
-
const require = createRequire(import.meta.url);
|
|
12
|
-
|
|
13
|
-
const TARGETS = {
|
|
14
|
-
"darwin:arm64": {
|
|
15
|
-
packageName: "@blade-ai/orca-darwin-arm64",
|
|
16
|
-
targetTriple: "aarch64-apple-darwin",
|
|
17
|
-
binaryName: "orca"
|
|
18
|
-
},
|
|
19
|
-
"darwin:x64": {
|
|
20
|
-
packageName: "@blade-ai/orca-darwin-x64",
|
|
21
|
-
targetTriple: "x86_64-apple-darwin",
|
|
22
|
-
binaryName: "orca"
|
|
23
|
-
},
|
|
24
|
-
"linux:arm64": {
|
|
25
|
-
packageName: "@blade-ai/orca-linux-arm64",
|
|
26
|
-
targetTriple: "aarch64-unknown-linux-gnu",
|
|
27
|
-
binaryName: "orca"
|
|
28
|
-
},
|
|
29
|
-
"linux:x64": {
|
|
30
|
-
packageName: "@blade-ai/orca-linux-x64",
|
|
31
|
-
targetTriple: "x86_64-unknown-linux-gnu",
|
|
32
|
-
binaryName: "orca"
|
|
33
|
-
},
|
|
34
|
-
"win32:arm64": {
|
|
35
|
-
packageName: "@blade-ai/orca-win32-arm64",
|
|
36
|
-
targetTriple: "aarch64-pc-windows-msvc",
|
|
37
|
-
binaryName: "orca.exe"
|
|
38
|
-
},
|
|
39
|
-
"win32:x64": {
|
|
40
|
-
packageName: "@blade-ai/orca-win32-x64",
|
|
41
|
-
targetTriple: "x86_64-pc-windows-msvc",
|
|
42
|
-
binaryName: "orca.exe"
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const target = TARGETS[`${process.platform}:${process.arch}`];
|
|
47
|
-
if (!target) {
|
|
48
|
-
throw new Error(`Unsupported platform: ${process.platform} (${process.arch})`);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function findExecutable() {
|
|
52
|
-
let vendorRoot;
|
|
53
|
-
try {
|
|
54
|
-
const packageJsonPath = require.resolve(`${target.packageName}/package.json`);
|
|
55
|
-
vendorRoot = path.join(path.dirname(packageJsonPath), "vendor");
|
|
56
|
-
} catch {
|
|
57
|
-
vendorRoot = path.join(__dirname, "..", "vendor");
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const executable = path.join(vendorRoot, target.targetTriple, "bin", target.binaryName);
|
|
61
|
-
if (existsSync(executable)) {
|
|
62
|
-
return executable;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
throw new Error(
|
|
66
|
-
`Missing optional dependency ${target.packageName}. Reinstall with: npm install -g @blade-ai/orca`
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const binaryPath = findExecutable();
|
|
71
|
-
const env = {
|
|
72
|
-
...process.env,
|
|
73
|
-
ORCA_MANAGED_BY_NPM: "1",
|
|
74
|
-
ORCA_MANAGED_PACKAGE_ROOT: realpathSync(path.join(__dirname, "..")),
|
|
75
|
-
ORCA_NODE_PATH: process.env.ORCA_NODE_PATH || process.execPath
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const child = spawn(binaryPath, process.argv.slice(2), {
|
|
79
|
-
stdio: "inherit",
|
|
80
|
-
env
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
child.on("error", (error) => {
|
|
84
|
-
console.error(error);
|
|
85
|
-
process.exit(1);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
const handledSignals = process.platform === "win32"
|
|
89
|
-
? ["SIGINT", "SIGTERM"]
|
|
90
|
-
: ["SIGINT", "SIGTERM", "SIGHUP"];
|
|
91
|
-
const forwardSignal = (signal) => {
|
|
92
|
-
if (!child.killed) {
|
|
93
|
-
child.kill(signal);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
for (const signal of handledSignals) {
|
|
98
|
-
process.on(signal, () => forwardSignal(signal));
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const result = await new Promise((resolve) => {
|
|
102
|
-
child.on("exit", (code, signal) => {
|
|
103
|
-
if (signal) {
|
|
104
|
-
resolve({ type: "signal", signal });
|
|
105
|
-
} else {
|
|
106
|
-
resolve({ type: "code", exitCode: code ?? 1 });
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
if (result.type === "signal") {
|
|
112
|
-
for (const signal of handledSignals) {
|
|
113
|
-
process.removeAllListeners(signal);
|
|
114
|
-
}
|
|
115
|
-
process.kill(process.pid, result.signal);
|
|
116
|
-
} else {
|
|
117
|
-
process.exit(result.exitCode);
|
|
118
|
-
}
|