@blade-ai/orca 0.1.10 → 0.1.21-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
@@ -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.9 sh
36
+ INSTALL_DIR=/usr/local/bin ORCA_VERSION=0.1.21 sh
37
37
  ```
38
38
 
39
39
  ### GitHub Releases
@@ -99,6 +99,13 @@ schema = { target = { type = "string", description = "environment" } }
99
99
 
100
100
  External tool commands run from the workspace directory. The raw JSON arguments are provided on stdin and in `ORCA_TOOL_ARGS`.
101
101
 
102
+ Tool output truncation can be configured under `[tools]`. Byte mode preserves the historical 8 KiB default; token mode adds an explicit warning with original token and line counts before compacting large outputs:
103
+
104
+ ```toml
105
+ [tools]
106
+ output_truncation = { mode = "tokens", limit = 2000 }
107
+ ```
108
+
102
109
  ### Defaults
103
110
 
104
111
  - Model: `auto` (main loop uses `deepseek-v4-pro`, auxiliary tasks use `deepseek-v4-flash`)
@@ -193,7 +200,8 @@ Built-in tools:
193
200
  | Tool | Description |
194
201
  |------|-------------|
195
202
  | `read_file` | Read file contents (UTF-8, truncated at 8KB) |
196
- | `list_files` | List directory entries |
203
+ | `glob` | Find files and directories by glob pattern; preferred for file discovery |
204
+ | `list_files` | Compatibility alias for directory listing |
197
205
  | `grep` | Search with ripgrep (regex, line numbers) |
198
206
  | `bash` | Execute shell commands via `sh -c` |
199
207
  | `edit` | Exact text replacement in files |
@@ -204,6 +212,15 @@ Built-in tools:
204
212
  | `Workflow` | Launch a background dynamic workflow |
205
213
  | `update_plan` | Update the visible task plan |
206
214
  | `update_goal` | Update active persistent goal status from goal mode |
215
+ | `request_user_input` | Ask a structured clarification question; TUI answers continue the same turn |
216
+ | `list_skills` | List Markdown skills from user and project skill directories |
217
+ | `read_skill` | Read a skill's Markdown instructions by id |
218
+
219
+ Tools are registered through a canonical tool registry with capability metadata. Approval behavior is derived from those capabilities: read-only tools run directly, write tools follow write approval policy, shell tools follow shell approval policy, network tools follow network policy, and agent/workflow tools follow agent policy. `glob` is the model-facing file discovery tool; `list_files` remains accepted for older prompts and saved sessions. `request_user_input` stays deterministic in headless runs and becomes interactive in TUI sessions.
220
+
221
+ Markdown skills live under `$ORCA_HOME/skills/*/SKILL.md`, `~/.orca/skills/*/SKILL.md`, or project `.orca/skills/*/SKILL.md`. The model can inspect them with `list_skills` and `read_skill`; when a prompt explicitly mentions a skill id such as `$debugging`, Orca injects that skill's instructions into the model context for the turn.
222
+
223
+ MCP tools and custom external tools can be added at startup. External tools live under `~/.orca/tools/*.toml` or `$ORCA_HOME/tools/*.toml`, and configured MCP server tools are exposed with namespaced tool names.
207
224
 
208
225
  ## Architecture
209
226
 
@@ -214,7 +231,7 @@ Built-in tools:
214
231
  - **Context Window**: DeepSeek V4 1M-token context, 80% threshold compaction with response reserve (preserves system + recent messages)
215
232
  - **Conversation History**: Local JSONL transcripts support listing, inspection, resume/fork, full-text search, archive/delete/rename, and zstd compression
216
233
  - **HTTP Client**: Singleton with 30s connect / 120s request / 300s streaming timeouts, exponential backoff retry (3 attempts, handles 429/5xx)
217
- - **Approval Policy**: Read operations always allowed; write/shell actions require interactive confirmation (suggest mode) or auto-allowed based on mode
234
+ - **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
218
235
  - **Verification**: Optional post-completion verifier command with pass/fail status
219
236
 
220
237
  ## Event Stream (JSONL)
package/package.json CHANGED
@@ -1,28 +1,23 @@
1
1
  {
2
- "name": "@blade-ai/orca",
3
- "version": "0.1.10",
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
- "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.10-darwin-arm64",
24
- "@blade-ai/orca-darwin-x64": "npm:@blade-ai/orca@0.1.10-darwin-x64",
25
- "@blade-ai/orca-linux-arm64": "npm:@blade-ai/orca@0.1.10-linux-arm64",
26
- "@blade-ai/orca-linux-x64": "npm:@blade-ai/orca@0.1.10-linux-x64"
27
- }
11
+ "engines": {
12
+ "node": ">=16"
13
+ },
14
+ "name": "@blade-ai/orca",
15
+ "version": "0.1.21-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
- }