@claudexor/cli 3.25.1 → 4.0.0
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/dist/account-reset-services.d.ts +2 -2
- package/dist/account-reset-services.d.ts.map +1 -1
- package/dist/account-reset-services.js.map +1 -1
- package/dist/account-resource-query.d.ts +2 -2
- package/dist/account-resource-query.d.ts.map +1 -1
- package/dist/account-resource-query.js +3 -3
- package/dist/account-resource-query.js.map +1 -1
- package/dist/claude-statusline.d.ts +2 -4
- package/dist/claude-statusline.d.ts.map +1 -1
- package/dist/claude-statusline.js +6 -5
- package/dist/claude-statusline.js.map +1 -1
- package/dist/claudexord-entry.d.ts +7 -2
- package/dist/claudexord-entry.d.ts.map +1 -1
- package/dist/claudexord-entry.js +10 -3
- package/dist/claudexord-entry.js.map +1 -1
- package/dist/claudexord.d.ts +0 -1
- package/dist/claudexord.d.ts.map +1 -1
- package/dist/claudexord.js +308 -240
- package/dist/claudexord.js.map +1 -1
- package/dist/cli-error.js +3 -3
- package/dist/cli-error.js.map +1 -1
- package/dist/cli.js +4 -49
- package/dist/cli.js.map +1 -1
- package/dist/codex-quota-source.js +2 -2
- package/dist/codex-quota-source.js.map +1 -1
- package/dist/command-flags.d.ts.map +1 -1
- package/dist/command-flags.js +1 -0
- package/dist/command-flags.js.map +1 -1
- package/dist/command-registry.js +1 -1
- package/dist/command-registry.js.map +1 -1
- package/dist/continue-from-run.d.ts +7 -8
- package/dist/continue-from-run.d.ts.map +1 -1
- package/dist/continue-from-run.js +3 -4
- package/dist/continue-from-run.js.map +1 -1
- package/dist/control-api-address.d.ts +6 -0
- package/dist/control-api-address.d.ts.map +1 -0
- package/dist/control-api-address.js +53 -0
- package/dist/control-api-address.js.map +1 -0
- package/dist/control-services.d.ts +139 -115
- package/dist/control-services.d.ts.map +1 -1
- package/dist/control-services.js +11 -32
- package/dist/control-services.js.map +1 -1
- package/dist/daemon-admission-runtime.d.ts +0 -60
- package/dist/daemon-admission-runtime.d.ts.map +1 -1
- package/dist/daemon-admission-runtime.js +3 -168
- package/dist/daemon-admission-runtime.js.map +1 -1
- package/dist/daemon-agent-runner.d.ts +6 -3
- package/dist/daemon-agent-runner.d.ts.map +1 -1
- package/dist/daemon-agent-runner.js +2 -1
- package/dist/daemon-agent-runner.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +10 -3
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +16 -7
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/daemon-owner.d.ts +7 -0
- package/dist/daemon-owner.d.ts.map +1 -0
- package/dist/daemon-owner.js +39 -0
- package/dist/daemon-owner.js.map +1 -0
- package/dist/daemon-run.d.ts +8 -1
- package/dist/daemon-run.d.ts.map +1 -1
- package/dist/daemon-run.js +31 -3
- package/dist/daemon-run.js.map +1 -1
- package/dist/daemon-runtime-shutdown.d.ts +1 -1
- package/dist/daemon-runtime-shutdown.d.ts.map +1 -1
- package/dist/daemon-runtime-shutdown.js +2 -2
- package/dist/daemon-runtime-shutdown.js.map +1 -1
- package/dist/daemon-startup.d.ts +5 -42
- package/dist/daemon-startup.d.ts.map +1 -1
- package/dist/daemon-startup.js +7 -85
- package/dist/daemon-startup.js.map +1 -1
- package/dist/daemon-status-report.d.ts +4 -0
- package/dist/daemon-status-report.d.ts.map +1 -0
- package/dist/daemon-status-report.js +39 -0
- package/dist/daemon-status-report.js.map +1 -0
- package/dist/engine-skew.d.ts +1 -0
- package/dist/engine-skew.d.ts.map +1 -1
- package/dist/engine-skew.js +6 -2
- package/dist/engine-skew.js.map +1 -1
- package/dist/harness-maintenance-service.d.ts +9 -222
- package/dist/harness-maintenance-service.d.ts.map +1 -1
- package/dist/harness-maintenance-service.js +7 -37
- package/dist/harness-maintenance-service.js.map +1 -1
- package/dist/live.d.ts +2 -5
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +2 -44
- package/dist/live.js.map +1 -1
- package/dist/mcp-catalog-query.d.ts +2 -1
- package/dist/mcp-catalog-query.d.ts.map +1 -1
- package/dist/mcp-catalog-query.js +6 -5
- package/dist/mcp-catalog-query.js.map +1 -1
- package/dist/mcp-daemon-unavailable.d.ts.map +1 -1
- package/dist/mcp-daemon-unavailable.js +4 -3
- package/dist/mcp-daemon-unavailable.js.map +1 -1
- package/dist/mcp-journal-recovery.d.ts.map +1 -1
- package/dist/mcp-journal-recovery.js +4 -4
- package/dist/mcp-journal-recovery.js.map +1 -1
- package/dist/mcp-runner.d.ts +1 -1
- package/dist/mcp-runner.d.ts.map +1 -1
- package/dist/mcp-runner.js +8 -6
- package/dist/mcp-runner.js.map +1 -1
- package/dist/mcp-thread-query.d.ts +1 -1
- package/dist/mcp-thread-query.d.ts.map +1 -1
- package/dist/mcp-thread-query.js +2 -2
- package/dist/mcp-thread-query.js.map +1 -1
- package/dist/model-operation-control.d.ts +375 -0
- package/dist/model-operation-control.d.ts.map +1 -0
- package/dist/model-operation-control.js +16 -0
- package/dist/model-operation-control.js.map +1 -0
- package/dist/model-services.d.ts +302 -91
- package/dist/model-services.d.ts.map +1 -1
- package/dist/model-services.js +5 -7
- package/dist/model-services.js.map +1 -1
- package/dist/ops-commands.d.ts +1 -8
- package/dist/ops-commands.d.ts.map +1 -1
- package/dist/ops-commands.js +13 -16
- package/dist/ops-commands.js.map +1 -1
- package/dist/orphan-reaper.d.ts +18 -0
- package/dist/orphan-reaper.d.ts.map +1 -1
- package/dist/orphan-reaper.js +50 -0
- package/dist/orphan-reaper.js.map +1 -1
- package/dist/plugin-cli.d.ts +3 -0
- package/dist/plugin-cli.d.ts.map +1 -0
- package/dist/plugin-cli.js +57 -0
- package/dist/plugin-cli.js.map +1 -0
- package/dist/plugin-mcp.d.ts +3 -0
- package/dist/plugin-mcp.d.ts.map +1 -0
- package/dist/plugin-mcp.js +116 -0
- package/dist/plugin-mcp.js.map +1 -0
- package/dist/plugin-runtime.d.ts +24 -0
- package/dist/plugin-runtime.d.ts.map +1 -0
- package/dist/plugin-runtime.js +113 -0
- package/dist/plugin-runtime.js.map +1 -0
- package/dist/plugins.d.ts +2 -0
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +92 -184
- package/dist/plugins.js.map +1 -1
- package/dist/project-command.d.ts +4 -1
- package/dist/project-command.d.ts.map +1 -1
- package/dist/project-command.js +14 -5
- package/dist/project-command.js.map +1 -1
- package/dist/quota-services.d.ts +6 -4
- package/dist/quota-services.d.ts.map +1 -1
- package/dist/quota-services.js +58 -23
- package/dist/quota-services.js.map +1 -1
- package/dist/recovery-control-services.d.ts +99 -0
- package/dist/recovery-control-services.d.ts.map +1 -0
- package/dist/recovery-control-services.js +32 -0
- package/dist/recovery-control-services.js.map +1 -0
- package/dist/remote-filesystem.d.ts +3 -3
- package/dist/remote-filesystem.d.ts.map +1 -1
- package/dist/remote-filesystem.js.map +1 -1
- package/dist/request-preflight.d.ts +2 -2
- package/dist/request-preflight.d.ts.map +1 -1
- package/dist/request-preflight.js.map +1 -1
- package/dist/retention-service.d.ts +3 -3
- package/dist/retention-service.d.ts.map +1 -1
- package/dist/settings-command.d.ts.map +1 -1
- package/dist/settings-command.js +7 -2
- package/dist/settings-command.js.map +1 -1
- package/dist/settings-service.d.ts +66 -6
- package/dist/settings-service.d.ts.map +1 -1
- package/dist/settings-service.js +1 -1
- package/dist/settings-service.js.map +1 -1
- package/dist/setup-client-pty.js +1 -1
- package/dist/setup-client-pty.js.map +1 -1
- package/dist/setup-credential-window.d.ts +4 -4
- package/dist/setup-credential-window.d.ts.map +1 -1
- package/dist/setup-credential-window.js +1 -1
- package/dist/setup-credential-window.js.map +1 -1
- package/dist/setup-device-code-disclosure.js +1 -1
- package/dist/setup-device-code-disclosure.js.map +1 -1
- package/dist/setup-job-persistence.d.ts +30 -0
- package/dist/setup-job-persistence.d.ts.map +1 -0
- package/dist/setup-job-persistence.js +3 -0
- package/dist/setup-job-persistence.js.map +1 -0
- package/dist/{setup-job-store.d.ts → setup-job-projection.d.ts} +9 -17
- package/dist/setup-job-projection.d.ts.map +1 -0
- package/dist/{setup-job-store.js → setup-job-projection.js} +29 -68
- package/dist/setup-job-projection.js.map +1 -0
- package/dist/setup-job-support.js +1 -1
- package/dist/setup-job-support.js.map +1 -1
- package/dist/setup-jobs.d.ts +3 -4
- package/dist/setup-jobs.d.ts.map +1 -1
- package/dist/setup-jobs.js +3 -3
- package/dist/setup-jobs.js.map +1 -1
- package/dist/setup-lifecycle-binding.js +1 -1
- package/dist/setup-lifecycle-binding.js.map +1 -1
- package/dist/setup-login-completion.js +1 -1
- package/dist/setup-login-completion.js.map +1 -1
- package/dist/sql-daemon-queries.d.ts +24 -0
- package/dist/sql-daemon-queries.d.ts.map +1 -0
- package/dist/sql-daemon-queries.js +41 -0
- package/dist/sql-daemon-queries.js.map +1 -0
- package/dist/sql-daemon-runtime.d.ts +1415 -0
- package/dist/sql-daemon-runtime.d.ts.map +1 -0
- package/dist/sql-daemon-runtime.js +94 -0
- package/dist/sql-daemon-runtime.js.map +1 -0
- package/dist/sql-daemon-storage.d.ts +40 -0
- package/dist/sql-daemon-storage.d.ts.map +1 -0
- package/dist/sql-daemon-storage.js +203 -0
- package/dist/sql-daemon-storage.js.map +1 -0
- package/dist/sql-import-publication.d.ts +19 -0
- package/dist/sql-import-publication.d.ts.map +1 -0
- package/dist/sql-import-publication.js +54 -0
- package/dist/sql-import-publication.js.map +1 -0
- package/dist/sql-setup-lifecycle.d.ts +15 -0
- package/dist/sql-setup-lifecycle.d.ts.map +1 -0
- package/dist/sql-setup-lifecycle.js +28 -0
- package/dist/sql-setup-lifecycle.js.map +1 -0
- package/dist/sql-setup-store.d.ts +7 -0
- package/dist/sql-setup-store.d.ts.map +1 -0
- package/dist/sql-setup-store.js +102 -0
- package/dist/sql-setup-store.js.map +1 -0
- package/dist/sql-startup-storage.d.ts +15 -0
- package/dist/sql-startup-storage.d.ts.map +1 -0
- package/dist/sql-startup-storage.js +75 -0
- package/dist/sql-startup-storage.js.map +1 -0
- package/dist/thread-delivery.d.ts +2 -2
- package/dist/thread-purge.d.ts +8 -2
- package/dist/thread-purge.d.ts.map +1 -1
- package/dist/thread-purge.js +37 -8
- package/dist/thread-purge.js.map +1 -1
- package/dist/thread-turn-services.d.ts +2 -2
- package/dist/thread-turn-services.d.ts.map +1 -1
- package/dist/thread-turn-services.js.map +1 -1
- package/package.json +25 -26
- package/dist/setup-job-store.d.ts.map +0 -1
- package/dist/setup-job-store.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-runtime.js","sourceRoot":"","sources":["../src/plugin-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/plugins.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ExternalHostBinding } from "@claudexor/schema";
|
|
1
2
|
export type PluginHost = "cursor" | "claude" | "codex" | "opencode";
|
|
2
3
|
export type PluginTarget = PluginHost | "all";
|
|
3
4
|
export type PluginVerb = "install" | "status" | "doctor" | "repair" | "uninstall";
|
|
@@ -34,6 +35,7 @@ export interface PluginCommandErrorResult {
|
|
|
34
35
|
error: string;
|
|
35
36
|
}
|
|
36
37
|
export interface PluginCommandOptions {
|
|
38
|
+
hostBinding?: ExternalHostBinding;
|
|
37
39
|
dryRun?: boolean;
|
|
38
40
|
force?: boolean;
|
|
39
41
|
json?: boolean;
|
package/dist/plugins.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAa7D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC;AAC9C,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAClF,MAAM,MAAM,kBAAkB,GAC5B,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7E,eAAO,MAAM,YAAY,EAAE,UAAU,EAA8C,CAAC;AACpF,eAAO,MAAM,cAAc,EAAE,YAAY,EAA6B,CAAC;AACvE,eAAO,MAAM,YAAY,EAAE,UAAU,EAA2D,CAAC;AA2DjG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,EAAE,CAAC;IACZ,EAAE,EAAE,KAAK,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA2hDD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA2F9B;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAWtE;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,wBAAwB,CAU1B"}
|
package/dist/plugins.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { copyFileSync, existsSync, lstatSync, readFileSync, readdirSync, realpathSync, rmSync,
|
|
3
|
-
import { dirname, isAbsolute, join, relative
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
1
|
+
import { mcpSelfTest } from "./plugin-mcp.js";
|
|
2
|
+
import { copyFileSync, existsSync, lstatSync, readFileSync, readdirSync, realpathSync, rmSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { dirname, isAbsolute, join, relative } from "node:path";
|
|
5
4
|
import { hostFallbackExamples, recoveryVerbs } from "./command-registry.js";
|
|
6
5
|
import { manageClaudeStatusline } from "./claude-statusline.js";
|
|
7
|
-
import { CLAUDEXOR_VERSION,
|
|
6
|
+
import { CLAUDEXOR_VERSION, ensureDir, sha256, userConfigDir, userHomeDir, writeJson, } from "@claudexor/util";
|
|
7
|
+
import { HOST_PLUGIN_MARKER, bindingFromMcpEntry, generatedMcpEnv, launchCommand, launchShellCommand, parseHostBinding, runtimePaths, } from "./plugin-runtime.js";
|
|
8
|
+
import { CliError } from "./cli-error.js";
|
|
8
9
|
export const PLUGIN_HOSTS = ["cursor", "claude", "codex", "opencode"];
|
|
9
10
|
export const PLUGIN_TARGETS = [...PLUGIN_HOSTS, "all"];
|
|
10
11
|
export const PLUGIN_VERBS = ["install", "status", "doctor", "repair", "uninstall"];
|
|
11
12
|
const STATE_VERSION = 1;
|
|
12
|
-
const MARKER =
|
|
13
|
+
const MARKER = HOST_PLUGIN_MARKER;
|
|
13
14
|
const MCP_NAME = "claudexor";
|
|
14
15
|
function managedComment(kind = "md") {
|
|
15
16
|
return kind === "js"
|
|
@@ -19,30 +20,13 @@ function managedComment(kind = "md") {
|
|
|
19
20
|
function jsonText(value) {
|
|
20
21
|
return JSON.stringify(value, null, 2) + "\n";
|
|
21
22
|
}
|
|
22
|
-
function generatedMcpEnv(runtime) {
|
|
23
|
-
const env = {
|
|
24
|
-
CLAUDEXOR_MANAGED: MARKER,
|
|
25
|
-
CLAUDEXOR_PLUGIN_VERSION: CLAUDEXOR_VERSION,
|
|
26
|
-
};
|
|
27
|
-
// A DEFAULT-root install serializes NO config root: every generation of the
|
|
28
|
-
// CLI self-selects its own versioned default at serve time, so a stale
|
|
29
|
-
// artifact can never freeze a newer runtime onto an older data root
|
|
30
|
-
// (2026-07-21 incident: a 1.0.0 artifact drove 3.0.2 code against the v1
|
|
31
|
-
// root). An EXPLICIT operator override stays serialized WITH a provenance
|
|
32
|
-
// marker so the serve-time skew check can tell an intentional override from
|
|
33
|
-
// a legacy frozen root.
|
|
34
|
-
if (resolve(runtime.configDir) !== resolve(defaultUserConfigDir())) {
|
|
35
|
-
env.CLAUDEXOR_CONFIG_DIR = runtime.configDir;
|
|
36
|
-
env.CLAUDEXOR_ROOT_MODE = "explicit";
|
|
37
|
-
}
|
|
38
|
-
return env;
|
|
39
|
-
}
|
|
40
23
|
function mcpServers(runtime) {
|
|
24
|
+
const [command, ...args] = launchCommand(runtime);
|
|
41
25
|
return {
|
|
42
26
|
mcpServers: {
|
|
43
27
|
[MCP_NAME]: {
|
|
44
|
-
command
|
|
45
|
-
args: [
|
|
28
|
+
command,
|
|
29
|
+
args: [...args, "mcp", "serve"],
|
|
46
30
|
env: generatedMcpEnv(runtime),
|
|
47
31
|
},
|
|
48
32
|
},
|
|
@@ -51,7 +35,7 @@ function mcpServers(runtime) {
|
|
|
51
35
|
function opencodeMcpEntry(runtime) {
|
|
52
36
|
return {
|
|
53
37
|
type: "local",
|
|
54
|
-
command: [runtime
|
|
38
|
+
command: [...launchCommand(runtime), "mcp", "serve"],
|
|
55
39
|
environment: generatedMcpEnv(runtime),
|
|
56
40
|
enabled: true,
|
|
57
41
|
timeout: 5000,
|
|
@@ -65,18 +49,9 @@ function recoveryVerbLine() {
|
|
|
65
49
|
? `${parts.slice(0, -1).join(", ")}, or ${parts[parts.length - 1]}`
|
|
66
50
|
: (parts[0] ?? "");
|
|
67
51
|
}
|
|
68
|
-
/**
|
|
69
|
-
function shellQuote(value) {
|
|
70
|
-
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
71
|
-
}
|
|
72
|
-
/** QA-029B: validated bundled Node + CLI prefix, never a PATH-dependent bare command. */
|
|
73
|
-
function absoluteCliPrefix(runtime) {
|
|
74
|
-
return `${shellQuote(runtime.nodePath)} ${shellQuote(runtime.cliPath)}`;
|
|
75
|
-
}
|
|
76
|
-
/** Make registry fallback templates executable with the validated absolute CLI prefix. */
|
|
52
|
+
/** CLI fallbacks share the MCP launch binding, including root and lifecycle. */
|
|
77
53
|
function hostFallbackCommands(runtime) {
|
|
78
|
-
|
|
79
|
-
return hostFallbackExamples().map((example) => example.replace(/^claudexor\b/, () => prefix));
|
|
54
|
+
return hostFallbackExamples().map((example) => launchShellCommand(runtime, example.replace(/^claudexor\s+/, "")));
|
|
80
55
|
}
|
|
81
56
|
/** Exact Claude plugin skill invocation; plain `/claudexor` is not an alias (QA-029A). */
|
|
82
57
|
const CLAUDE_SLASH_COMMAND = "/claudexor:claudexor";
|
|
@@ -110,6 +85,7 @@ function skillText(host, runtime) {
|
|
|
110
85
|
"",
|
|
111
86
|
"When the host cannot call MCP tools, ask the user to run the local CLI explicitly (these are the exact executable commands for this install — not a bare `claudexor`, which may not be on the terminal PATH):",
|
|
112
87
|
"",
|
|
88
|
+
...(process.platform === "win32" ? ["Run these commands in PowerShell:"] : []),
|
|
113
89
|
...hostFallbackCommands(runtime).map((command) => `\`${command}\``),
|
|
114
90
|
"",
|
|
115
91
|
MCP_RUN_HANDLE_GUIDANCE,
|
|
@@ -154,6 +130,7 @@ function commandText(host, runtime) {
|
|
|
154
130
|
"",
|
|
155
131
|
"First prefer the available MCP tools named `claudexor_*`. If MCP tools are unavailable, tell the user the exact executable local CLI command to run (absolute paths for this install — never a bare `claudexor`, which may not be on the terminal PATH), such as:",
|
|
156
132
|
"",
|
|
133
|
+
...(process.platform === "win32" ? ["Run these commands in PowerShell:"] : []),
|
|
157
134
|
...hostFallbackCommands(runtime).map((command) => `- \`${command.replace('"..."', '"$ARGUMENTS"')}\``),
|
|
158
135
|
"",
|
|
159
136
|
MCP_RUN_HANDLE_GUIDANCE,
|
|
@@ -255,7 +232,7 @@ function manifest(kind) {
|
|
|
255
232
|
}
|
|
256
233
|
function opencodePluginText(runtime) {
|
|
257
234
|
const hint = "Use Claudexor MCP tools or run `claudexor plan/agent/best-of` when cross-harness orchestration, review, or evidence-backed execution is useful.";
|
|
258
|
-
return `${managedComment("js")}export const ClaudexorPlugin = async () => {\n const hint = ${JSON.stringify(hint)};\n return {\n \"experimental.chat.system.transform\": async (_input, output) => {\n if (!output || typeof output !== \"object\") return;\n const current = typeof output.system === \"string\" ? output.system : typeof output.prompt === \"string\" ? output.prompt : \"\";\n if (current.includes(\"Claudexor\")) return;\n if (typeof output.system === \"string\") output.system = output.system + \"\\n\\n\" + hint;\n else if (typeof output.prompt === \"string\") output.prompt = output.prompt + \"\\n\\n\" + hint;\n },\n };\n};\n\nexport default ClaudexorPlugin;\n\n// OpenCode hook note: uses experimental.chat.system.transform because OpenCode does not expose tui.prompt.append as a plugin hook.\n// MCP command: ${runtime
|
|
235
|
+
return `${managedComment("js")}export const ClaudexorPlugin = async () => {\n const hint = ${JSON.stringify(hint)};\n return {\n \"experimental.chat.system.transform\": async (_input, output) => {\n if (!output || typeof output !== \"object\") return;\n const current = typeof output.system === \"string\" ? output.system : typeof output.prompt === \"string\" ? output.prompt : \"\";\n if (current.includes(\"Claudexor\")) return;\n if (typeof output.system === \"string\") output.system = output.system + \"\\n\\n\" + hint;\n else if (typeof output.prompt === \"string\") output.prompt = output.prompt + \"\\n\\n\" + hint;\n },\n };\n};\n\nexport default ClaudexorPlugin;\n\n// OpenCode hook note: uses experimental.chat.system.transform because OpenCode does not expose tui.prompt.append as a plugin hook.\n// MCP command: ${launchShellCommand(runtime, "mcp serve")}\n`;
|
|
259
236
|
}
|
|
260
237
|
const HOST_DEFINITIONS = {
|
|
261
238
|
claude: {
|
|
@@ -283,6 +260,7 @@ const HOST_DEFINITIONS = {
|
|
|
283
260
|
},
|
|
284
261
|
{
|
|
285
262
|
path: join(root, ".mcp.json"),
|
|
263
|
+
mcp: true,
|
|
286
264
|
content: jsonText(mcpServers(runtime)),
|
|
287
265
|
description: "Claude MCP config",
|
|
288
266
|
},
|
|
@@ -323,6 +301,7 @@ const HOST_DEFINITIONS = {
|
|
|
323
301
|
},
|
|
324
302
|
{
|
|
325
303
|
path: join(root, ".mcp.json"),
|
|
304
|
+
mcp: true,
|
|
326
305
|
content: jsonText(mcpServers(runtime)),
|
|
327
306
|
description: "Codex MCP config",
|
|
328
307
|
},
|
|
@@ -369,6 +348,7 @@ const HOST_DEFINITIONS = {
|
|
|
369
348
|
},
|
|
370
349
|
{
|
|
371
350
|
path: join(root, "mcp.json"),
|
|
351
|
+
mcp: true,
|
|
372
352
|
content: jsonText(mcpServers(runtime)),
|
|
373
353
|
description: "Cursor MCP config",
|
|
374
354
|
},
|
|
@@ -426,32 +406,6 @@ const HOST_DEFINITIONS = {
|
|
|
426
406
|
reloadNote: "Restart OpenCode; global plugins, commands, skills, and MCP config load from ~/.config/opencode. The JS plugin uses OpenCode's experimental.chat.system.transform hook.",
|
|
427
407
|
},
|
|
428
408
|
};
|
|
429
|
-
function runtimePaths() {
|
|
430
|
-
const home = userHomeDir();
|
|
431
|
-
const configDir = userConfigDir();
|
|
432
|
-
const warnings = [];
|
|
433
|
-
const allowTestOverrides = process.env.VITEST === "true" || process.env.NODE_ENV === "test";
|
|
434
|
-
const envNode = allowTestOverrides ? process.env.CLAUDEXOR_NODE_PATH?.trim() : undefined;
|
|
435
|
-
const bundledNode = join(home, ".claudexor", "node", "bin", "node");
|
|
436
|
-
const nodePath = envNode || (existsSync(bundledNode) ? bundledNode : process.execPath);
|
|
437
|
-
if (!isAbsolute(nodePath) || !existsSync(nodePath) || !statSync(nodePath).isFile()) {
|
|
438
|
-
throw new Error(`unable to resolve a safe Node executable for plugin MCP config: ${nodePath}`);
|
|
439
|
-
}
|
|
440
|
-
if (!envNode && nodePath !== bundledNode)
|
|
441
|
-
warnings.push(`using current node instead of ${bundledNode}`);
|
|
442
|
-
if (!allowTestOverrides && process.env.CLAUDEXOR_NODE_PATH?.trim())
|
|
443
|
-
warnings.push("ignored CLAUDEXOR_NODE_PATH outside tests");
|
|
444
|
-
const envCli = allowTestOverrides ? process.env.CLAUDEXOR_CLI_PATH?.trim() : undefined;
|
|
445
|
-
const distCli = join(dirname(fileURLToPath(import.meta.url)), "cli.js");
|
|
446
|
-
const argvCli = process.argv[1] && existsSync(resolve(process.argv[1])) ? resolve(process.argv[1]) : "";
|
|
447
|
-
const cliPath = envCli || (existsSync(distCli) ? distCli : argvCli);
|
|
448
|
-
if (!cliPath || !isAbsolute(cliPath) || !existsSync(cliPath) || !statSync(cliPath).isFile()) {
|
|
449
|
-
throw new Error("unable to resolve a safe absolute claudexor CLI entrypoint");
|
|
450
|
-
}
|
|
451
|
-
if (!allowTestOverrides && process.env.CLAUDEXOR_CLI_PATH?.trim())
|
|
452
|
-
warnings.push("ignored CLAUDEXOR_CLI_PATH outside tests");
|
|
453
|
-
return { home, configDir, nodePath, cliPath, backupStamp: safeTimestamp(), warnings };
|
|
454
|
-
}
|
|
455
409
|
function stateFilePath(configDir = userConfigDir()) {
|
|
456
410
|
return join(configDir, "plugins", "state.json");
|
|
457
411
|
}
|
|
@@ -477,6 +431,10 @@ function loadState(configDir = userConfigDir()) {
|
|
|
477
431
|
}
|
|
478
432
|
const state = parsed;
|
|
479
433
|
state.hosts ??= {};
|
|
434
|
+
for (const entry of Object.values(state.hosts)) {
|
|
435
|
+
if (entry?.binding !== undefined)
|
|
436
|
+
entry.binding = parseHostBinding(entry.binding);
|
|
437
|
+
}
|
|
480
438
|
return state;
|
|
481
439
|
}
|
|
482
440
|
function saveState(state, configDir = userConfigDir()) {
|
|
@@ -780,9 +738,6 @@ function isLegacyOwned(target) {
|
|
|
780
738
|
function backupRoot(def, runtime) {
|
|
781
739
|
return join(def.root(runtime.home), ".claudexor-backups", runtime.backupStamp);
|
|
782
740
|
}
|
|
783
|
-
function safeTimestamp() {
|
|
784
|
-
return new Date().toISOString().replace(/[:.]/g, "-");
|
|
785
|
-
}
|
|
786
741
|
function backupFile(def, runtime, path) {
|
|
787
742
|
assertSafeLeaf(path);
|
|
788
743
|
const dest = join(backupRoot(def, runtime), relative(runtime.home, path));
|
|
@@ -1276,117 +1231,6 @@ function removeVerifiedLegacy(def, dryRun, res) {
|
|
|
1276
1231
|
}
|
|
1277
1232
|
return true;
|
|
1278
1233
|
}
|
|
1279
|
-
async function mcpSelfTest(runtime) {
|
|
1280
|
-
return await new Promise((resolve) => {
|
|
1281
|
-
const child = spawn(runtime.nodePath, [runtime.cliPath, "mcp", "serve"], {
|
|
1282
|
-
cwd: process.cwd(),
|
|
1283
|
-
env: mcpSelfTestEnv(runtime),
|
|
1284
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
1285
|
-
});
|
|
1286
|
-
let stdout = "";
|
|
1287
|
-
let pending = "";
|
|
1288
|
-
const lines = [];
|
|
1289
|
-
let stderr = "";
|
|
1290
|
-
let sentToolsList = false;
|
|
1291
|
-
let settled = false;
|
|
1292
|
-
const timer = setTimeout(() => {
|
|
1293
|
-
settled = true;
|
|
1294
|
-
child.kill("SIGKILL");
|
|
1295
|
-
resolve("MCP self-test timed out");
|
|
1296
|
-
}, 5000);
|
|
1297
|
-
child.stdout.on("data", (d) => {
|
|
1298
|
-
if (settled)
|
|
1299
|
-
return;
|
|
1300
|
-
const chunk = String(d);
|
|
1301
|
-
stdout += chunk;
|
|
1302
|
-
pending += chunk;
|
|
1303
|
-
const frames = pending.split("\n");
|
|
1304
|
-
pending = frames.pop() ?? "";
|
|
1305
|
-
try {
|
|
1306
|
-
for (const frame of frames.filter(Boolean))
|
|
1307
|
-
lines.push(JSON.parse(frame));
|
|
1308
|
-
const init = lines.find((line) => line && typeof line === "object" && line.id === 1);
|
|
1309
|
-
if (init?.result?.serverInfo?.name && !sentToolsList) {
|
|
1310
|
-
sentToolsList = true;
|
|
1311
|
-
child.stdin.write(JSON.stringify({ jsonrpc: "2.0", method: "notifications/initialized", params: {} }) +
|
|
1312
|
-
"\n");
|
|
1313
|
-
child.stdin.write(JSON.stringify({ jsonrpc: "2.0", id: 2, method: "tools/list", params: {} }) + "\n");
|
|
1314
|
-
}
|
|
1315
|
-
const tools = lines.find((line) => line && typeof line === "object" && line.id === 2);
|
|
1316
|
-
if (tools && !settled) {
|
|
1317
|
-
settled = true;
|
|
1318
|
-
const listed = tools.result?.tools;
|
|
1319
|
-
clearTimeout(timer);
|
|
1320
|
-
child.kill("SIGTERM");
|
|
1321
|
-
if (Array.isArray(listed) &&
|
|
1322
|
-
listed.some((t) => t.name === "claudexor_status")) {
|
|
1323
|
-
resolve(null);
|
|
1324
|
-
}
|
|
1325
|
-
else {
|
|
1326
|
-
resolve("MCP self-test returned an unexpected tools-list response");
|
|
1327
|
-
}
|
|
1328
|
-
}
|
|
1329
|
-
}
|
|
1330
|
-
catch (err) {
|
|
1331
|
-
if (!settled && stdout.includes("\n")) {
|
|
1332
|
-
settled = true;
|
|
1333
|
-
clearTimeout(timer);
|
|
1334
|
-
child.kill("SIGTERM");
|
|
1335
|
-
resolve(`MCP self-test response parse failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1336
|
-
}
|
|
1337
|
-
}
|
|
1338
|
-
});
|
|
1339
|
-
child.stderr.on("data", (d) => {
|
|
1340
|
-
stderr += String(d);
|
|
1341
|
-
});
|
|
1342
|
-
child.on("error", (err) => {
|
|
1343
|
-
if (settled)
|
|
1344
|
-
return;
|
|
1345
|
-
settled = true;
|
|
1346
|
-
clearTimeout(timer);
|
|
1347
|
-
resolve(`MCP self-test failed to start: ${err.message}`);
|
|
1348
|
-
});
|
|
1349
|
-
child.on("exit", (code) => {
|
|
1350
|
-
if (settled)
|
|
1351
|
-
return;
|
|
1352
|
-
settled = true;
|
|
1353
|
-
clearTimeout(timer);
|
|
1354
|
-
if (!stdout)
|
|
1355
|
-
resolve(`MCP self-test exited before response (${code ?? "signal"}): ${stderr.trim()}`);
|
|
1356
|
-
else
|
|
1357
|
-
resolve(`MCP self-test exited before tools-list completed (${code ?? "signal"}): ${stderr.trim()}`);
|
|
1358
|
-
});
|
|
1359
|
-
child.stdin.write(JSON.stringify({
|
|
1360
|
-
jsonrpc: "2.0",
|
|
1361
|
-
id: 1,
|
|
1362
|
-
method: "initialize",
|
|
1363
|
-
params: {
|
|
1364
|
-
protocolVersion: "2025-06-18",
|
|
1365
|
-
capabilities: {},
|
|
1366
|
-
clientInfo: { name: "claudexor-plugin-doctor", version: CLAUDEXOR_VERSION },
|
|
1367
|
-
},
|
|
1368
|
-
}) + "\n");
|
|
1369
|
-
});
|
|
1370
|
-
}
|
|
1371
|
-
function mcpSelfTestEnv(runtime) {
|
|
1372
|
-
const env = {};
|
|
1373
|
-
for (const key of [
|
|
1374
|
-
"HOME",
|
|
1375
|
-
"PATH",
|
|
1376
|
-
"CLAUDEXOR_CONFIG_DIR",
|
|
1377
|
-
"TMPDIR",
|
|
1378
|
-
"TMP",
|
|
1379
|
-
"TEMP",
|
|
1380
|
-
"LANG",
|
|
1381
|
-
"LC_ALL",
|
|
1382
|
-
]) {
|
|
1383
|
-
const value = process.env[key];
|
|
1384
|
-
if (value)
|
|
1385
|
-
env[key] = value;
|
|
1386
|
-
}
|
|
1387
|
-
Object.assign(env, generatedMcpEnv(runtime));
|
|
1388
|
-
return env;
|
|
1389
|
-
}
|
|
1390
1234
|
function verbNote(def, verb) {
|
|
1391
1235
|
if (verb === "uninstall")
|
|
1392
1236
|
return `${def.displayName} integration removed from managed Claudexor files/config; restart the host to unload cached plugin state.`;
|
|
@@ -1526,14 +1370,78 @@ export async function runPluginCommand(verb, target, options = {}) {
|
|
|
1526
1370
|
throw new Error(`unknown plugin command '${verb}'`);
|
|
1527
1371
|
if (!PLUGIN_TARGETS.includes(target))
|
|
1528
1372
|
throw new Error(`unknown plugin target '${target}' (expected ${PLUGIN_TARGETS.join("|")})`);
|
|
1529
|
-
|
|
1530
|
-
|
|
1373
|
+
if (options.hostBinding && verb !== "install" && verb !== "repair")
|
|
1374
|
+
throw new CliError("usage", "--host-binding-json is supported by plugin install and repair", {
|
|
1375
|
+
code: "invalid_argument",
|
|
1376
|
+
});
|
|
1377
|
+
const explicit = options.hostBinding === undefined ? undefined : parseHostBinding(options.hostBinding);
|
|
1378
|
+
const runtime = runtimePaths(explicit);
|
|
1379
|
+
const states = new Map();
|
|
1380
|
+
const stateAt = (root) => {
|
|
1381
|
+
let state = states.get(root);
|
|
1382
|
+
if (!state) {
|
|
1383
|
+
state = loadState(root);
|
|
1384
|
+
states.set(root, state);
|
|
1385
|
+
}
|
|
1386
|
+
return state;
|
|
1387
|
+
};
|
|
1531
1388
|
const results = [];
|
|
1532
1389
|
for (const host of targets(target)) {
|
|
1533
|
-
|
|
1390
|
+
const def = HOST_DEFINITIONS[host];
|
|
1391
|
+
try {
|
|
1392
|
+
const artifacts = def.artifacts(runtime.home, runtime);
|
|
1393
|
+
const path = def.config === "opencode-mcp"
|
|
1394
|
+
? chooseOpenCodeConfigPath()
|
|
1395
|
+
: artifacts.find((artifact) => artifact.mcp)?.path;
|
|
1396
|
+
let source;
|
|
1397
|
+
try {
|
|
1398
|
+
source = path ? readJsonFile(path) : undefined;
|
|
1399
|
+
}
|
|
1400
|
+
catch (error) {
|
|
1401
|
+
// Existing artifact ownership can repair damaged JSON, but an unrelated
|
|
1402
|
+
// invocation cannot infer a lost external root from malformed bytes.
|
|
1403
|
+
if (!explicit && !stateAt(runtime.configDir).hosts[host])
|
|
1404
|
+
throw error;
|
|
1405
|
+
}
|
|
1406
|
+
let installed;
|
|
1407
|
+
try {
|
|
1408
|
+
installed = bindingFromMcpEntry(def.config === "opencode-mcp" ? source?.mcp?.[MCP_NAME] : source?.mcpServers?.[MCP_NAME]);
|
|
1409
|
+
}
|
|
1410
|
+
catch (error) {
|
|
1411
|
+
if (!explicit)
|
|
1412
|
+
throw error;
|
|
1413
|
+
}
|
|
1414
|
+
const priorState = stateAt(installed?.configDir ?? runtime.configDir);
|
|
1415
|
+
const recorded = priorState.hosts[host]?.binding;
|
|
1416
|
+
const binding = explicit ?? recorded ?? installed;
|
|
1417
|
+
if (!binding &&
|
|
1418
|
+
artifacts.some((artifact) => {
|
|
1419
|
+
const text = readText(artifact.path);
|
|
1420
|
+
return text?.includes(MARKER) && text.includes("CLAUDEXOR_DAEMON_OWNER='external'");
|
|
1421
|
+
}))
|
|
1422
|
+
throw new CliError("usage", "external host binding is missing; register it with --host-binding-json", { code: "host_binding_missing" });
|
|
1423
|
+
const selected = binding ? runtimePaths(binding) : runtime;
|
|
1424
|
+
if (installed && installed.configDir !== selected.configDir)
|
|
1425
|
+
selected.previousConfigDir = installed.configDir;
|
|
1426
|
+
const state = stateAt(selected.configDir);
|
|
1427
|
+
if (state !== priorState && !state.hosts[host] && priorState.hosts[host])
|
|
1428
|
+
state.hosts[host] = structuredClone(priorState.hosts[host]);
|
|
1429
|
+
const res = await runHost(def, verb, options, state, selected);
|
|
1430
|
+
if (installed && !recorded && !explicit)
|
|
1431
|
+
res.notes.push("recovered external host binding from the installed MCP configuration");
|
|
1432
|
+
if (!options.dryRun && (verb === "install" || verb === "repair") && res.ok && binding)
|
|
1433
|
+
hostState(state, host).binding = binding;
|
|
1434
|
+
results.push(res);
|
|
1435
|
+
if (!options.dryRun && (verb === "install" || verb === "repair" || verb === "uninstall"))
|
|
1436
|
+
saveState(state, selected.configDir);
|
|
1437
|
+
}
|
|
1438
|
+
catch (error) {
|
|
1439
|
+
const res = initialResult(def, verb, runtime);
|
|
1440
|
+
res.state = "blocked";
|
|
1441
|
+
res.errors.push(error instanceof Error ? error.message : String(error));
|
|
1442
|
+
results.push(res);
|
|
1443
|
+
}
|
|
1534
1444
|
}
|
|
1535
|
-
if (!options.dryRun && (verb === "install" || verb === "repair" || verb === "uninstall"))
|
|
1536
|
-
saveState(state, runtime.configDir);
|
|
1537
1445
|
const result = {
|
|
1538
1446
|
verb,
|
|
1539
1447
|
target,
|