@blade-ai/orca 0.3.0 → 0.3.1-darwin-arm64
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 +20 -4
- package/package.json +15 -22
- package/vendor/aarch64-apple-darwin/bin/orca +0 -0
- package/bin/orca.js +0 -118
package/README.md
CHANGED
|
@@ -54,13 +54,22 @@ orca # open the TUI
|
|
|
54
54
|
orca exec "fix the failing test" # run headlessly
|
|
55
55
|
orca exec --verifier "cargo test" "fix it" # verify before finishing
|
|
56
56
|
orca --mode=acp # connect an ACP client
|
|
57
|
+
orca --resume [SESSION_ID] # resume a saved conversation
|
|
58
|
+
orca --fork SESSION_ID # fork a saved conversation
|
|
57
59
|
```
|
|
58
60
|
|
|
59
61
|
On Windows PowerShell, set the key with `$env:DEEPSEEK_API_KEY = "sk-..."`;
|
|
60
62
|
the `orca` commands are the same.
|
|
61
63
|
|
|
62
|
-
In the TUI, `@` searches files, skills, plugins, and MCP resources.
|
|
63
|
-
|
|
64
|
+
In the TUI, `@` searches files, skills, plugins, and MCP resources. Session
|
|
65
|
+
commands are `/new`, `/resume`, `/fork [name]`, `/rename [name]`, `/status`,
|
|
66
|
+
and `/copy [N]`. The resume picker also supports fork, rename, archive, delete,
|
|
67
|
+
and copying a session ID. `/history` is retired; `/clear` remains a hidden
|
|
68
|
+
compatibility alias for `/new`. `Ctrl+L` clears only the displayed transcript
|
|
69
|
+
and terminal scrollback, keeping the current conversation context. On exit,
|
|
70
|
+
Orca prints the exact `orca --resume <SESSION_ID>` command for the session.
|
|
71
|
+
|
|
72
|
+
Use `/plan` for read-only planning, `/goal` for a persistent objective,
|
|
64
73
|
`/workflows` for background work, and `/trust` to manage the current folder's
|
|
65
74
|
sandbox permissions.
|
|
66
75
|
|
|
@@ -72,8 +81,8 @@ sandbox permissions.
|
|
|
72
81
|
the result with a command you choose.
|
|
73
82
|
- Gates risky actions with `suggest`, sandboxed `auto-edit`, full-access
|
|
74
83
|
`full-auto`, and read-only `plan` modes, plus per-folder trust.
|
|
75
|
-
- Saves local
|
|
76
|
-
|
|
84
|
+
- Saves local conversations with `--resume` for continuation and `--fork` for
|
|
85
|
+
branching.
|
|
77
86
|
- Runs persistent goals without a fixed turn ceiling, plus subagents and
|
|
78
87
|
JavaScript workflows for longer tasks that need continuation or parallel work.
|
|
79
88
|
- Loads project instructions, skills, plugins, custom tools, MCP tools, and MCP
|
|
@@ -86,6 +95,13 @@ then defaults. Run `orca --help` or `orca exec --help` for the full command
|
|
|
86
95
|
surface. User configuration lives at `~/.orca/config.toml`; trusted projects
|
|
87
96
|
can also provide `.orca/config.toml`, `AGENTS.md`, rules, skills, and workflows.
|
|
88
97
|
|
|
98
|
+
DeepSeek V4 thinking is enabled explicitly. Set `reasoning_effort` to `low`,
|
|
99
|
+
`high`, or `max` (the default) in `config.toml`, or use
|
|
100
|
+
`ORCA_REASONING_EFFORT`. Both `deepseek-v4-flash` and `deepseek-v4-pro` use a
|
|
101
|
+
1M-token context window and allow up to 384K output tokens. Orca keeps the
|
|
102
|
+
Chat Completions transport and fully replays any returned `reasoning_content`
|
|
103
|
+
across tool turns as required by DeepSeek.
|
|
104
|
+
|
|
89
105
|
More detail:
|
|
90
106
|
|
|
91
107
|
- [Persistent Goal Mode](docs/goal-mode.md)
|
package/package.json
CHANGED
|
@@ -1,32 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@blade-ai/orca",
|
|
3
|
-
"version": "0.3.0",
|
|
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/
|
|
22
|
-
|
|
11
|
+
"url": "git+https://github.com/echoVic/blade-deepseek.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.3.1-darwin-arm64",
|
|
18
|
+
"description": "Native Orca binary for darwin/arm64.",
|
|
19
|
+
"os": [
|
|
20
|
+
"darwin"
|
|
21
|
+
],
|
|
22
|
+
"cpu": [
|
|
23
|
+
"arm64"
|
|
24
|
+
]
|
|
32
25
|
}
|
|
Binary file
|
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
|
-
}
|