@blade-ai/orca 0.1.46 → 0.1.48-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.46 sh
36
+ INSTALL_DIR=/usr/local/bin ORCA_VERSION=0.1.48 sh
37
37
  ```
38
38
 
39
39
  ### GitHub Releases
@@ -240,12 +240,14 @@ Built-in tools:
240
240
  | `request_user_input` | Ask a structured clarification question; TUI answers continue the same turn |
241
241
  | `list_skills` | List Markdown skills from user and project skill directories |
242
242
  | `read_skill` | Read a skill's Markdown instructions by id |
243
+ | `list_mcp_resources` | List read-only resources exposed by configured MCP servers |
244
+ | `read_mcp_resource` | Read a specific MCP resource by server name and URI |
243
245
 
244
246
  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. Tool arguments are validated before execution, including common JSON Schema object keywords plus `oneOf` and `anyOf`, so provider-advertised schemas and runtime rejection behavior stay aligned. `glob` is the model-facing file discovery tool and supports both normal glob patterns and `mode: "fuzzy"` path queries; `list_files` remains accepted for older prompts and saved sessions. `request_user_input` stays deterministic in headless runs and becomes interactive in TUI sessions.
245
247
 
246
248
  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.
247
249
 
248
- 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.
250
+ 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. MCP resources can also be listed and read through the read-only resource tools.
249
251
 
250
252
  ## Architecture
251
253
 
package/package.json CHANGED
@@ -1,28 +1,23 @@
1
1
  {
2
- "name": "@blade-ai/orca",
3
- "version": "0.1.46",
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.46-darwin-arm64",
24
- "@blade-ai/orca-darwin-x64": "npm:@blade-ai/orca@0.1.46-darwin-x64",
25
- "@blade-ai/orca-linux-arm64": "npm:@blade-ai/orca@0.1.46-linux-arm64",
26
- "@blade-ai/orca-linux-x64": "npm:@blade-ai/orca@0.1.46-linux-x64"
27
- }
11
+ "engines": {
12
+ "node": ">=16"
13
+ },
14
+ "name": "@blade-ai/orca",
15
+ "version": "0.1.48-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
- }