@blade-ai/orca 0.1.21 → 0.1.22-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 +7 -4
- package/package.json +14 -19
- package/vendor/aarch64-apple-darwin/bin/orca +0 -0
- package/bin/orca.js +0 -101
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ Set `INSTALL_DIR` to choose a destination and `ORCA_VERSION` to pin a version:
|
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
curl -fsSL https://orcaagent.dev/install.sh | \
|
|
36
|
-
INSTALL_DIR=/usr/local/bin ORCA_VERSION=0.1.
|
|
36
|
+
INSTALL_DIR=/usr/local/bin ORCA_VERSION=0.1.22 sh
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
### GitHub Releases
|
|
@@ -189,7 +189,7 @@ TUI sessions support Codex-style persistent goals with `/goal`. A goal is stored
|
|
|
189
189
|
/goal clear # delete the goal for this session
|
|
190
190
|
```
|
|
191
191
|
|
|
192
|
-
While a goal is active, Orca automatically starts another turn after a successful turn and injects goal-mode instructions as pinned context. The loop stops when the goal is paused, cleared, blocked, completed, budget-limited, interrupted, or reaches the continuation cap.
|
|
192
|
+
While a goal is active, Orca automatically starts another turn after a successful turn and injects goal-mode instructions as pinned context. The loop stops when the goal is paused, cleared, blocked, completed, budget-limited, interrupted, or reaches the continuation cap. Goal turns expose `get_goal`, `create_goal`, and `update_goal`; the model can only use `update_goal` to mark the active goal `complete` or `blocked`, while `/goal` commands own pause, resume, edit, and clear.
|
|
193
193
|
|
|
194
194
|
Persistent goals require recorded history. If history is disabled with `--no-history`, `/goal` reports an error instead of creating ephemeral goal state.
|
|
195
195
|
|
|
@@ -211,7 +211,9 @@ Built-in tools:
|
|
|
211
211
|
| `subagent` | Run a synchronous child agent for a delegated task |
|
|
212
212
|
| `Workflow` | Launch a background dynamic workflow |
|
|
213
213
|
| `update_plan` | Update the visible task plan |
|
|
214
|
-
| `
|
|
214
|
+
| `get_goal` | Read active persistent goal state during goal mode |
|
|
215
|
+
| `create_goal` | Create a persistent goal during goal mode when no unfinished goal exists |
|
|
216
|
+
| `update_goal` | Mark active persistent goal complete or blocked from goal mode |
|
|
215
217
|
| `request_user_input` | Ask a structured clarification question; TUI answers continue the same turn |
|
|
216
218
|
| `list_skills` | List Markdown skills from user and project skill directories |
|
|
217
219
|
| `read_skill` | Read a skill's Markdown instructions by id |
|
|
@@ -226,13 +228,14 @@ MCP tools and custom external tools can be added at startup. External tools live
|
|
|
226
228
|
|
|
227
229
|
- **Agent Loop**: prompt → model → tool_call → execute → feed result → next turn (up to 128 turns)
|
|
228
230
|
- **Subagents**: Synchronous child agent loops share the parent workspace, provider/model config, and approval policy, then return a concise result to the parent
|
|
229
|
-
- **Persistent Goal Mode**: TUI sessions can persist a long-running objective, auto-continue successful turns, and stop through `/goal` controls or
|
|
231
|
+
- **Persistent Goal Mode**: TUI sessions can persist a long-running objective, auto-continue successful turns, and stop through `/goal` controls or goal-mode tools
|
|
230
232
|
- **SSE Streaming**: Real-time reasoning and content deltas via Server-Sent Events
|
|
231
233
|
- **Context Window**: DeepSeek V4 1M-token context, 80% threshold compaction with response reserve (preserves system + recent messages)
|
|
232
234
|
- **Conversation History**: Local JSONL transcripts support listing, inspection, resume/fork, full-text search, archive/delete/rename, and zstd compression
|
|
233
235
|
- **HTTP Client**: Singleton with 30s connect / 120s request / 300s streaming timeouts, exponential backoff retry (3 attempts, handles 429/5xx)
|
|
234
236
|
- **Approval Policy**: Tool capabilities drive approval; read operations are allowed, `suggest` asks for write/network/agent/shell, `auto-edit` allows writes but asks for network/agent/shell, and `full-auto` allows all
|
|
235
237
|
- **Verification**: Optional post-completion verifier command with pass/fail status
|
|
238
|
+
- **Release Gate**: `scripts/release/verify-published.mjs` checks the GitHub Release, npm registry, and `npm exec` smoke path after publishing
|
|
236
239
|
|
|
237
240
|
## Event Stream (JSONL)
|
|
238
241
|
|
package/package.json
CHANGED
|
@@ -1,28 +1,23 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@blade-ai/orca",
|
|
3
|
-
"version": "0.1.21",
|
|
4
|
-
"description": "Orca CLI: a DeepSeek-native coding agent.",
|
|
5
2
|
"license": "MIT",
|
|
6
|
-
"bin": {
|
|
7
|
-
"orca": "bin/orca.js"
|
|
8
|
-
},
|
|
9
|
-
"type": "module",
|
|
10
|
-
"engines": {
|
|
11
|
-
"node": ">=16"
|
|
12
|
-
},
|
|
13
3
|
"files": [
|
|
14
|
-
"
|
|
4
|
+
"vendor",
|
|
15
5
|
"README.md"
|
|
16
6
|
],
|
|
17
7
|
"repository": {
|
|
18
8
|
"type": "git",
|
|
19
|
-
"url": "git+https://github.com/echoVic/blade-deepseek.git"
|
|
20
|
-
"directory": "npm/orca"
|
|
9
|
+
"url": "git+https://github.com/echoVic/blade-deepseek.git"
|
|
21
10
|
},
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=16"
|
|
13
|
+
},
|
|
14
|
+
"name": "@blade-ai/orca",
|
|
15
|
+
"version": "0.1.22-darwin-arm64",
|
|
16
|
+
"description": "Native Orca binary for darwin/arm64.",
|
|
17
|
+
"os": [
|
|
18
|
+
"darwin"
|
|
19
|
+
],
|
|
20
|
+
"cpu": [
|
|
21
|
+
"arm64"
|
|
22
|
+
]
|
|
28
23
|
}
|
|
Binary file
|
package/bin/orca.js
DELETED
|
@@ -1,101 +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
|
-
},
|
|
18
|
-
"darwin:x64": {
|
|
19
|
-
packageName: "@blade-ai/orca-darwin-x64",
|
|
20
|
-
targetTriple: "x86_64-apple-darwin"
|
|
21
|
-
},
|
|
22
|
-
"linux:arm64": {
|
|
23
|
-
packageName: "@blade-ai/orca-linux-arm64",
|
|
24
|
-
targetTriple: "aarch64-unknown-linux-gnu"
|
|
25
|
-
},
|
|
26
|
-
"linux:x64": {
|
|
27
|
-
packageName: "@blade-ai/orca-linux-x64",
|
|
28
|
-
targetTriple: "x86_64-unknown-linux-gnu"
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const target = TARGETS[`${process.platform}:${process.arch}`];
|
|
33
|
-
if (!target) {
|
|
34
|
-
throw new Error(`Unsupported platform: ${process.platform} (${process.arch})`);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function findExecutable() {
|
|
38
|
-
let vendorRoot;
|
|
39
|
-
try {
|
|
40
|
-
const packageJsonPath = require.resolve(`${target.packageName}/package.json`);
|
|
41
|
-
vendorRoot = path.join(path.dirname(packageJsonPath), "vendor");
|
|
42
|
-
} catch {
|
|
43
|
-
vendorRoot = path.join(__dirname, "..", "vendor");
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const executable = path.join(vendorRoot, target.targetTriple, "bin", "orca");
|
|
47
|
-
if (existsSync(executable)) {
|
|
48
|
-
return executable;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
throw new Error(
|
|
52
|
-
`Missing optional dependency ${target.packageName}. Reinstall with: npm install -g @blade-ai/orca`
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const binaryPath = findExecutable();
|
|
57
|
-
const env = {
|
|
58
|
-
...process.env,
|
|
59
|
-
ORCA_MANAGED_BY_NPM: "1",
|
|
60
|
-
ORCA_MANAGED_PACKAGE_ROOT: realpathSync(path.join(__dirname, ".."))
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const child = spawn(binaryPath, process.argv.slice(2), {
|
|
64
|
-
stdio: "inherit",
|
|
65
|
-
env
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
child.on("error", (error) => {
|
|
69
|
-
console.error(error);
|
|
70
|
-
process.exit(1);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
const handledSignals = ["SIGINT", "SIGTERM", "SIGHUP"];
|
|
74
|
-
const forwardSignal = (signal) => {
|
|
75
|
-
if (!child.killed) {
|
|
76
|
-
child.kill(signal);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
for (const signal of handledSignals) {
|
|
81
|
-
process.on(signal, () => forwardSignal(signal));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const result = await new Promise((resolve) => {
|
|
85
|
-
child.on("exit", (code, signal) => {
|
|
86
|
-
if (signal) {
|
|
87
|
-
resolve({ type: "signal", signal });
|
|
88
|
-
} else {
|
|
89
|
-
resolve({ type: "code", exitCode: code ?? 1 });
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
if (result.type === "signal") {
|
|
95
|
-
for (const signal of handledSignals) {
|
|
96
|
-
process.removeAllListeners(signal);
|
|
97
|
-
}
|
|
98
|
-
process.kill(process.pid, result.signal);
|
|
99
|
-
} else {
|
|
100
|
-
process.exit(result.exitCode);
|
|
101
|
-
}
|