executor 1.4.28-windows-x64 → 1.4.28

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 ADDED
@@ -0,0 +1,154 @@
1
+ # executor
2
+
3
+ [https://github.com/user-attachments/assets/11225f83-e848-42ba-99b2-a993bcc88dad](https://github.com/user-attachments/assets/11225f83-e848-42ba-99b2-a993bcc88dad)
4
+
5
+ The integration layer for AI agents. One catalog for every tool, shared across every agent you use.
6
+
7
+ [Ask DeepWiki](https://deepwiki.com/RhysSullivan/executor)
8
+
9
+ ## Quick start
10
+
11
+ ```bash
12
+ npm install -g executor
13
+ executor web
14
+ ```
15
+
16
+ This starts a local runtime with a web UI at `http://127.0.0.1:4788`. From there, add your first source and start using tools.
17
+
18
+ ### Use as an MCP server
19
+
20
+ Point any MCP-compatible agent (Cursor, Claude Code, OpenCode, etc.) at Executor to share your tool catalog, auth, and policies across all of them.
21
+
22
+ ```bash
23
+
24
+ executor mcp
25
+ ```
26
+
27
+ Example `mcp.json` for Claude Code / Cursor:
28
+
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "executor": {
33
+ "command": "executor",
34
+ "args": ["mcp"]
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## Add a source
41
+
42
+ If you can represent it with a JSON schema, it can be an integration. Executor has first-party support for OpenAPI, GraphQL, MCP, and Google Discovery — but the plugin system is open to any source type.
43
+
44
+ ### Via the web UI
45
+
46
+ Open `http://127.0.0.1:4788`, go to **Add Source**, paste a URL, and Executor will detect the type, index the tools, and handle auth.
47
+
48
+ ### Via the CLI
49
+
50
+ ```bash
51
+ executor call executor openapi addSource '{
52
+ "spec": "https://petstore3.swagger.io/api/v3/openapi.json",
53
+ "namespace": "petstore",
54
+ "baseUrl": "https://petstore3.swagger.io/api/v3"
55
+ }'
56
+ ```
57
+
58
+ Use `baseUrl` when the OpenAPI document has relative `servers` entries (for example `"/api/v3"`).
59
+
60
+ ## Use tools
61
+
62
+ Agents discover and call tools through a typed TypeScript runtime:
63
+
64
+ ```ts
65
+ // discover by intent
66
+ const matches = await tools.discover({ query: "github issues", limit: 5 });
67
+
68
+ // inspect the schema
69
+ const detail = await tools.describe.tool({
70
+ path: matches.bestPath,
71
+ includeSchemas: true,
72
+ });
73
+
74
+ // call with type safety
75
+ const issues = await tools.github.issues.list({
76
+ owner: "vercel",
77
+ repo: "next.js",
78
+ });
79
+ ```
80
+
81
+ Use tools via the CLI:
82
+
83
+ ```bash
84
+ executor tools search "send email"
85
+ executor call --help
86
+ executor call github --help
87
+ executor call github issues --help
88
+ executor call cloudflare --help --match dns --limit 20
89
+ executor call github issues create '{"owner":"octocat","repo":"Hello-World","title":"Hi"}'
90
+ executor call gmail send '{"to":"alice@example.com","subject":"Hi"}'
91
+ ```
92
+
93
+ `executor call`, `executor resume`, and `executor tools ...` commands auto-start a local daemon if needed.
94
+ If the default port is busy, the CLI will pick an available local port and track it automatically.
95
+
96
+ If an execution pauses for auth or approval, resume it:
97
+
98
+ ```bash
99
+ executor resume --execution-id exec_123
100
+ ```
101
+
102
+ ## CLI reference
103
+
104
+ ```bash
105
+ executor web # start runtime + web UI
106
+ executor daemon run # start persistent local daemon in background
107
+ executor daemon status # show daemon status
108
+ executor daemon stop # stop daemon
109
+ executor daemon restart # restart daemon
110
+ executor mcp # start MCP endpoint
111
+ executor call <path...> '{"k":"v"}' # invoke a tool by path segments
112
+ executor call <path...> --help # browse namespaces/resources/methods
113
+ executor call <path...> --help --match "<text>" --limit <n> # narrow huge namespaces
114
+ executor resume --execution-id <id> # resume paused execution
115
+ executor tools search "<query>" # search tools by intent
116
+ executor tools sources # list configured sources + tool counts
117
+ executor tools describe <path> # show tool TypeScript/JSON schema
118
+ ```
119
+
120
+ ## Developing locally
121
+
122
+ ```bash
123
+ bun install
124
+ bun dev
125
+ ```
126
+
127
+ The dev server starts at `http://127.0.0.1:4788`.
128
+
129
+ ## Community
130
+
131
+ Join the Discord: [https://discord.gg/eF29HBHwM6](https://discord.gg/eF29HBHwM6)
132
+
133
+ ## Learn more
134
+
135
+ Visit [executor.sh](https://executor.sh) to learn more.
136
+
137
+ ## Attribution
138
+
139
+ - Thank you to [Crystian](https://www.linkedin.com/in/crystian/) for providing the npm package name `executor`.
140
+
141
+ ## References
142
+
143
+ As part of my coding process, I give my agent access to references to other codebases to understand patterns and how other people have implemented systems.
144
+
145
+ A non exhaustive list of references are:
146
+
147
+ - [Better Auth](https://github.com/better-auth/better-auth) - Storage adapter reference
148
+ - [Effect](https://github.com/Effect-TS/effect) - General code patterns
149
+ - [OpenCode](https://github.com/anomalyco/opencode) - Plugin system reference
150
+ - [OpenClaw](https://github.com/openclaw/openclaw) - Plugin system reference
151
+ - [Emdash](https://github.com/emdash-cms/emdash) - Plugin system reference
152
+ - [Pi](https://github.com/badlogic/pi-mono) - Plugin system reference
153
+
154
+ It's encouraged also that you can use this codebase as a reference to understand how it's implemented
package/bin/executor ADDED
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env node
2
+ const childProcess = require("child_process");
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+ const os = require("os");
6
+
7
+ function spawnAndExit(target) {
8
+ const child = childProcess.spawn(target, process.argv.slice(2), { stdio: "inherit" });
9
+ child.on("error", (err) => { console.error(err.message); process.exit(1); });
10
+ const forward = (signal) => { if (!child.killed) { try { child.kill(signal); } catch {} } };
11
+ ["SIGINT", "SIGTERM", "SIGHUP"].forEach((sig) => process.on(sig, () => forward(sig)));
12
+ child.on("exit", (code, signal) => {
13
+ if (signal) process.kill(process.pid, signal);
14
+ else process.exit(typeof code === "number" ? code : 0);
15
+ });
16
+ }
17
+
18
+ if (process.env.EXECUTOR_BIN_PATH) {
19
+ spawnAndExit(process.env.EXECUTOR_BIN_PATH);
20
+ return;
21
+ }
22
+
23
+ const isWin = process.platform === "win32";
24
+ const binary = isWin ? "executor.exe" : "executor";
25
+
26
+ // Package names use "windows" (not "win32") to match what the build script emits.
27
+ const platformMap = { darwin: "darwin", linux: "linux", win32: "windows" };
28
+ const archMap = { x64: "x64", arm64: "arm64" };
29
+ const platform = platformMap[os.platform()] || os.platform();
30
+ const arch = archMap[os.arch()] || os.arch();
31
+
32
+ const isMusl = (() => {
33
+ if (platform !== "linux") return false;
34
+ try { if (fs.existsSync("/etc/alpine-release")) return true; } catch {}
35
+ try {
36
+ const r = childProcess.spawnSync("ldd", ["--version"], { encoding: "utf8" });
37
+ if (((r.stdout || "") + (r.stderr || "")).toLowerCase().includes("musl")) return true;
38
+ } catch {}
39
+ return false;
40
+ })();
41
+
42
+ // Candidate package names in preference order. On linux a system might match
43
+ // glibc or musl; try musl first if detected, glibc first otherwise.
44
+ const candidates = (() => {
45
+ const base = "executor-" + platform + "-" + arch;
46
+ if (platform === "linux") {
47
+ return isMusl ? [base + "-musl", base] : [base, base + "-musl"];
48
+ }
49
+ return [base];
50
+ })();
51
+
52
+ function detectPackageManager() {
53
+ const ua = process.env.npm_config_user_agent || "";
54
+ if (/\bbun\//.test(ua)) return "bun";
55
+ const execPath = process.env.npm_execpath || "";
56
+ if (execPath.includes("bun")) return "bun";
57
+ if (__dirname.includes(".bun/install/global") || __dirname.includes(".bun\\install\\global")) {
58
+ return "bun";
59
+ }
60
+ return ua ? "npm" : null;
61
+ }
62
+
63
+ for (const name of candidates) {
64
+ try {
65
+ const pkgJson = require.resolve(name + "/package.json");
66
+ const candidate = path.join(path.dirname(pkgJson), "bin", binary);
67
+ if (fs.existsSync(candidate)) {
68
+ spawnAndExit(candidate);
69
+ return;
70
+ }
71
+ } catch {
72
+ // package not installed for this platform; try next candidate
73
+ }
74
+ }
75
+
76
+ // Preview wrapper compat: pkg.pr.new previews download the platform binary
77
+ // to bin/runtime/ rather than via optionalDependencies.
78
+ const scriptDir = path.dirname(fs.realpathSync(__filename));
79
+ const previewBinary = path.join(scriptDir, "runtime", binary);
80
+ if (fs.existsSync(previewBinary)) {
81
+ spawnAndExit(previewBinary);
82
+ return;
83
+ }
84
+
85
+ const pm = detectPackageManager();
86
+ const reinstall = pm === "bun"
87
+ ? "bun install -g executor"
88
+ : pm === "npm"
89
+ ? "npm install -g executor"
90
+ : "reinstall executor";
91
+ console.error(
92
+ "executor: could not locate a platform binary for " + os.platform() + "-" + os.arch() + ".\n" +
93
+ "Tried optionalDependencies: " + candidates.map((n) => '"' + n + '"').join(", ") + "\n" +
94
+ "To fix: " + reinstall
95
+ );
96
+ process.exit(1);
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "executor",
3
- "version": "1.4.28-windows-x64",
4
- "description": "Local AI executor with a CLI, local API server, and web UI. (windows-x64)",
5
- "os": [
6
- "win32"
7
- ],
8
- "cpu": [
9
- "x64"
3
+ "version": "1.4.28",
4
+ "description": "Local AI executor with a CLI, local API server, and web UI.",
5
+ "keywords": [
6
+ "agent",
7
+ "ai",
8
+ "automation",
9
+ "cli",
10
+ "executor",
11
+ "local-first"
10
12
  ],
11
13
  "homepage": "https://github.com/RhysSullivan/executor",
12
14
  "bugs": {
@@ -16,5 +18,21 @@
16
18
  "type": "git",
17
19
  "url": "git+https://github.com/RhysSullivan/executor.git"
18
20
  },
19
- "license": "MIT"
21
+ "license": "MIT",
22
+ "bin": {
23
+ "executor": "bin/executor"
24
+ },
25
+ "optionalDependencies": {
26
+ "executor-linux-x64": "npm:executor@1.4.28-linux-x64",
27
+ "executor-linux-arm64": "npm:executor@1.4.28-linux-arm64",
28
+ "executor-linux-x64-musl": "npm:executor@1.4.28-linux-x64-musl",
29
+ "executor-linux-arm64-musl": "npm:executor@1.4.28-linux-arm64-musl",
30
+ "executor-darwin-x64": "npm:executor@1.4.28-darwin-x64",
31
+ "executor-darwin-arm64": "npm:executor@1.4.28-darwin-arm64",
32
+ "executor-windows-x64": "npm:executor@1.4.28-windows-x64",
33
+ "executor-windows-arm64": "npm:executor@1.4.28-windows-arm64"
34
+ },
35
+ "engines": {
36
+ "node": ">=20"
37
+ }
20
38
  }
Binary file
package/bin/executor.exe DELETED
Binary file
package/bin/keyring.node DELETED
Binary file