@blade-ai/orca 0.1.3 → 0.1.6-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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # Orca
2
2
 
3
- Orca is a DeepSeek-native coding agent runtime by Blade.
3
+ Orca is a DeepSeek-native coding agent.
4
4
 
5
5
  A local terminal coding agent built in Rust, focused on DeepSeek reasoning and tool-use semantics. It runs a multi-turn agent loop with SSE streaming, automatic context window management, and HTTP retry with exponential backoff.
6
6
 
@@ -25,15 +25,15 @@ Supported npm platforms:
25
25
  ### curl
26
26
 
27
27
  ```bash
28
- curl -fsSL https://raw.githubusercontent.com/echoVic/blade-deepseek/main/install.sh | sh
28
+ curl -fsSL https://orcaagent.dev/install.sh | sh
29
29
  ```
30
30
 
31
31
  The installer downloads the native binary for your platform from GitHub Releases.
32
32
  Set `INSTALL_DIR` to choose a destination and `ORCA_VERSION` to pin a version:
33
33
 
34
34
  ```bash
35
- curl -fsSL https://raw.githubusercontent.com/echoVic/blade-deepseek/main/install.sh | \
36
- INSTALL_DIR=/usr/local/bin ORCA_VERSION=0.1.3 sh
35
+ curl -fsSL https://orcaagent.dev/install.sh | \
36
+ INSTALL_DIR=/usr/local/bin ORCA_VERSION=0.1.6 sh
37
37
  ```
38
38
 
39
39
  ### GitHub Releases
@@ -159,6 +159,23 @@ orca --session-picker
159
159
 
160
160
  In the TUI, `Esc` during an idle composer backtracks to the previous user message and places that prompt back in the input box for editing and re-asking.
161
161
 
162
+ ## Persistent Goal Mode
163
+
164
+ TUI sessions support Codex-style persistent goals with `/goal`. A goal is stored by session id in `~/.orca/goals_1.json` or `$ORCA_HOME/goals_1.json`, so it survives process restarts when the session is saved.
165
+
166
+ ```text
167
+ /goal # show the current goal
168
+ /goal ship the refactor # create or replace the active goal and start it
169
+ /goal edit finish the parser # update the objective and reactivate it
170
+ /goal pause # stop automatic continuation
171
+ /goal resume # reactivate and continue when idle
172
+ /goal clear # delete the goal for this session
173
+ ```
174
+
175
+ 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. The model can stop the loop with the `update_goal` tool by setting status `complete` or `blocked`.
176
+
177
+ Persistent goals require recorded history. If history is disabled with `--no-history`, `/goal` reports an error instead of creating ephemeral goal state.
178
+
162
179
  ## Tools
163
180
 
164
181
  Built-in tools:
@@ -170,15 +187,21 @@ Built-in tools:
170
187
  | `grep` | Search with ripgrep (regex, line numbers) |
171
188
  | `bash` | Execute shell commands via `sh -c` |
172
189
  | `edit` | Exact text replacement in files |
190
+ | `write_file` | Create or overwrite a file |
173
191
  | `git_status` | Show git working tree status |
192
+ | `web_search` | Search the web for current information |
174
193
  | `subagent` | Run a synchronous child agent for a delegated task |
194
+ | `Workflow` | Launch a background dynamic workflow |
195
+ | `update_plan` | Update the visible task plan |
196
+ | `update_goal` | Update active persistent goal status from goal mode |
175
197
 
176
198
  ## Architecture
177
199
 
178
200
  - **Agent Loop**: prompt → model → tool_call → execute → feed result → next turn (up to 128 turns)
179
201
  - **Subagents**: Synchronous child agent loops share the parent workspace, provider/model config, and approval policy, then return a concise result to the parent
202
+ - **Persistent Goal Mode**: TUI sessions can persist a long-running objective, auto-continue successful turns, and stop through `/goal` controls or the `update_goal` tool
180
203
  - **SSE Streaming**: Real-time reasoning and content deltas via Server-Sent Events
181
- - **Context Window**: 128K tokens, 80% threshold compaction (preserves system + recent messages)
204
+ - **Context Window**: DeepSeek V4 1M-token context, 80% threshold compaction with response reserve (preserves system + recent messages)
182
205
  - **Conversation History**: Local JSONL transcripts support listing, inspection, resume/fork, full-text search, archive/delete/rename, and zstd compression
183
206
  - **HTTP Client**: Singleton with 30s connect / 120s request / 300s streaming timeouts, exponential backoff retry (3 attempts, handles 429/5xx)
184
207
  - **Approval Policy**: Read operations always allowed; write/shell actions require interactive confirmation (suggest mode) or auto-allowed based on mode
@@ -211,4 +234,4 @@ Event types: `session.started`, `turn.started`, `assistant.reasoning.delta`, `as
211
234
 
212
235
  ## Status
213
236
 
214
- Production-ready agent loop with DeepSeek streaming provider. All 7 tools implemented, multi-turn conversation with context management, subagents, approval policies, and verification support.
237
+ Production-ready agent loop with DeepSeek streaming provider. Core tools, multi-turn conversation, persistent goals, context management, subagents, workflows, approval policies, and verification support are implemented.
package/package.json CHANGED
@@ -1,28 +1,23 @@
1
1
  {
2
- "name": "@blade-ai/orca",
3
- "version": "0.1.3",
4
- "description": "Orca CLI: a DeepSeek-native coding agent runtime by Blade.",
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
- "bin/orca.js",
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
- "optionalDependencies": {
23
- "@blade-ai/orca-darwin-arm64": "npm:@blade-ai/orca@0.1.3-darwin-arm64",
24
- "@blade-ai/orca-darwin-x64": "npm:@blade-ai/orca@0.1.3-darwin-x64",
25
- "@blade-ai/orca-linux-arm64": "npm:@blade-ai/orca@0.1.3-linux-arm64",
26
- "@blade-ai/orca-linux-x64": "npm:@blade-ai/orca@0.1.3-linux-x64"
27
- }
11
+ "engines": {
12
+ "node": ">=16"
13
+ },
14
+ "name": "@blade-ai/orca",
15
+ "version": "0.1.6-darwin-arm64",
16
+ "description": "Native Orca binary for darwin/arm64.",
17
+ "os": [
18
+ "darwin"
19
+ ],
20
+ "cpu": [
21
+ "arm64"
22
+ ]
28
23
  }
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
- }