@useorgx/wizard 0.1.11 → 0.1.12
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 +12 -10
- package/dist/cli.js +81 -60
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,27 +17,27 @@ For local development, use `pnpm dev -- --help`.
|
|
|
17
17
|
The wizard modifies local tool configuration only. Depending on the command, it can:
|
|
18
18
|
|
|
19
19
|
- add OrgX MCP server entries to Claude, Cursor, Codex, VS Code, Windsurf, and Zed;
|
|
20
|
-
- install OrgX skills/rules into Cursor and Claude Code;
|
|
21
|
-
- install companion OrgX plugins
|
|
20
|
+
- install standalone OrgX skills/rules into Cursor and Claude Code;
|
|
21
|
+
- install companion OrgX plugins for Cursor, Claude Code, Codex, and OpenClaw so those tools receive OrgX skills, rules, MCP config, commands, hooks, and agent prompts through their plugin systems.
|
|
22
22
|
|
|
23
23
|
## Commands
|
|
24
24
|
|
|
25
|
-
- `setup` adds OrgX MCP configs, skills/rules, and companion plugins
|
|
25
|
+
- `setup` adds OrgX MCP configs, standalone skills/rules, and companion plugins to detected AI tools. When OrgX auth is available in an interactive shell, it also guides workspace selection or creation, optional onboarding extras, and optional companion plugin installs for detected Cursor, Claude Code, Codex, and OpenClaw hosts. The founder preset preplans plugin installs before it writes standalone skills so plugin-backed hosts do not get duplicate standalone assets in the same run.
|
|
26
26
|
- `surface list` shows supported surfaces and current status.
|
|
27
27
|
- `surface add <name>` patches a specific surface.
|
|
28
28
|
- `surface remove <name>` removes OrgX-managed config from a specific surface.
|
|
29
29
|
- `mcp add [surface]` and `mcp remove [surface]` manage OrgX MCP entries in Claude, Cursor, Codex, VS Code, Windsurf, and Zed tool configs.
|
|
30
|
-
- `plugins list` shows
|
|
31
|
-
- `plugins add [target...]` installs managed Cursor
|
|
32
|
-
- `plugins remove [target...]` uninstalls managed Cursor
|
|
33
|
-
- `uninstall` removes OrgX-managed tool config,
|
|
30
|
+
- `plugins list` shows companion plugin availability and install status for Cursor, Claude Code, Codex, and OpenClaw.
|
|
31
|
+
- `plugins add [target...]` installs the managed Cursor plugin bundle and managed OrgX companion plugins into Claude Code, Codex, and/or OpenClaw. Cursor, Claude Code, and Codex companion plugins carry their own OrgX skills/rules/MCP config and become the source of truth for those hosts.
|
|
32
|
+
- `plugins remove [target...]` uninstalls the managed Cursor plugin bundle, legacy managed Cursor rules, and managed OrgX companion plugins from Claude Code, Codex, and/or OpenClaw.
|
|
33
|
+
- `uninstall` removes OrgX-managed tool config, companion plugins, legacy managed Cursor rules, wizard-local auth, and wizard-local setup state. Use `--keep-auth`, `--keep-state`, `--skip-plugins`, or `--skip-surfaces` to preserve specific pieces.
|
|
34
34
|
- `doctor` verifies local config, hosted MCP reachability, npm registry readiness, current-workspace connectivity, local OpenClaw health, and optionally the remote setup status API. Hosted MCP tools are OAuth-scoped inside the client connector, so the wizard does not preflight them with `oxk_` API keys. It exits non-zero when blocking connectivity issues remain.
|
|
35
35
|
- `auth status` shows the resolved OrgX API key source and verifies it against `POST /api/client/sync`.
|
|
36
36
|
- `auth login [--base-url <url>]` starts browser pairing against OrgX, waits for approval, saves the returned per-user key to the wizard auth store, and bootstraps OpenClaw auth if OpenClaw is detected. Use `--api-key <oxk_...>` for CI or blocked-browser fallback.
|
|
37
37
|
- `auth set-key <oxk_...> [--base-url <url>]` verifies a per-user OrgX key, saves it to the wizard auth store, and bootstraps OpenClaw auth if OpenClaw is detected.
|
|
38
38
|
- `auth clear` removes the wizard-local saved OrgX API key.
|
|
39
39
|
- `workspace current`, `workspace list`, `workspace create <name>`, and `workspace set-default <id>` inspect and manage OrgX workspaces.
|
|
40
|
-
- `skills add [pack...]` writes OrgX skills/rules into supported local tools: `.cursor/rules/orgx.md`, `.claude/skills/orgx/SKILL.md`, and available OrgX Claude skill packs from `useorgx/skills`. If
|
|
40
|
+
- `skills add [pack...]` writes standalone OrgX skills/rules into supported local tools: `.cursor/rules/orgx.md`, `.claude/skills/orgx/SKILL.md`, and available OrgX Claude skill packs from `useorgx/skills`. If a companion plugin already owns a tool's OrgX skills/rules, the wizard skips those overlapping standalone assets and only installs the remaining standalone pieces.
|
|
41
41
|
- `skills sync [pack...]` recomposes generated skill/rule files from the OrgX-managed core plus any enabled local skill extensions.
|
|
42
42
|
- `skills status` shows local extension files and generated skill files tracked for drift protection.
|
|
43
43
|
- `skills extensions add|edit|enable|disable|list` manages user-editable skill extensions without changing the OrgX-managed core skill source.
|
|
@@ -65,12 +65,14 @@ The wizard modifies local tool configuration only. Depending on the command, it
|
|
|
65
65
|
- `wizard workspace create "Founders" --description "Initial OrgX workspace"` creates a new workspace through `POST /api/entities`.
|
|
66
66
|
- `wizard workspace set-default <id>` updates the default workspace through the generic entity API.
|
|
67
67
|
|
|
68
|
-
## Editor Rules And
|
|
68
|
+
## Editor Rules, Skills, And Plugins
|
|
69
69
|
|
|
70
70
|
- `wizard skills add` writes the OrgX Cursor rule file at `.cursor/rules/orgx.md`.
|
|
71
|
+
- `wizard plugins add cursor` installs the full Cursor local plugin bundle at `.cursor/plugins/local/cursor-plugin`; it includes OrgX skills, rules, MCP config, commands, hooks, and agent prompts.
|
|
71
72
|
- `wizard skills add` also generates a hosted OrgX Claude skill at `.claude/skills/orgx/SKILL.md`.
|
|
72
73
|
- The same command installs available OrgX Claude skill packs by pulling their source files from `useorgx/skills`; pass specific pack names to limit what is installed.
|
|
73
74
|
- `wizard skills add` and `wizard skills sync` both compose generated outputs from OrgX-managed core skills plus any enabled extension files from the wizard skill-extension store.
|
|
75
|
+
- When the Cursor companion plugin is installed, that plugin owns Cursor-side OrgX skills, rules, MCP config, commands, hooks, and agent prompts. In that case `wizard skills add` remains the standalone rules fallback for Cursor installs that are not using the plugin.
|
|
74
76
|
- When the Claude Code companion plugin is installed, that plugin owns Claude-side OrgX skills and skill sync. In that case `wizard skills add` skips overlapping Claude assets instead of writing duplicate copies.
|
|
75
77
|
- The Codex companion plugin also bundles its own OrgX skills, so `wizard skills add` does not try to manage Codex skill files at all.
|
|
76
78
|
- Those generated rules expect artifact proof to use durable sources such as GitHub permalinks, public URLs, or absolute file paths / `file://...`, not OrgX wrapper routes like `/live/...`, `/artifacts/...`, or `/console/...`.
|
|
@@ -88,7 +90,7 @@ OrgX core skills are treated as managed upstream content. User behavior lives in
|
|
|
88
90
|
## Release Flow
|
|
89
91
|
|
|
90
92
|
- GitHub Actions publishes to npm on pushes of version tags matching `v*`.
|
|
91
|
-
- The publish workflow installs dependencies with pnpm, runs `pnpm typecheck`, `pnpm test`, and `pnpm build`, then runs `pnpm publish --no-git-checks
|
|
93
|
+
- The publish workflow installs dependencies with pnpm, runs `pnpm typecheck`, `pnpm test`, and `pnpm build`, then runs `pnpm publish --no-git-checks`.
|
|
92
94
|
- The workflow expects an `NPM_TOKEN` repository secret.
|
|
93
95
|
|
|
94
96
|
## Troubleshooting
|
package/dist/cli.js
CHANGED
|
@@ -82,6 +82,8 @@ var CLAUDE_ORGX_SKILL_DIR = join(CLAUDE_SKILLS_DIR, "orgx");
|
|
|
82
82
|
var CLAUDE_ORGX_SKILL_PATH = join(CLAUDE_ORGX_SKILL_DIR, "SKILL.md");
|
|
83
83
|
var CURSOR_RULES_DIR = join(CURSOR_DIR, "rules");
|
|
84
84
|
var CURSOR_ORGX_RULE_PATH = join(CURSOR_RULES_DIR, "orgx.md");
|
|
85
|
+
var CURSOR_PLUGINS_DIR = join(CURSOR_DIR, "plugins", "local");
|
|
86
|
+
var CURSOR_ORGX_PLUGIN_DIR = join(CURSOR_PLUGINS_DIR, "cursor-plugin");
|
|
85
87
|
var CODEX_PLUGINS_DIR = join(CODEX_DIR, "plugins");
|
|
86
88
|
var CODEX_ORGX_PLUGIN_DIR = join(CODEX_PLUGINS_DIR, "orgx-codex-plugin");
|
|
87
89
|
var CODEX_MARKETPLACE_DIR = join(AGENTS_DIR, "plugins");
|
|
@@ -3652,6 +3654,7 @@ var ORGX_PLUGIN_GITHUB_REF = "main";
|
|
|
3652
3654
|
var ORGX_CLAUDE_PLUGIN_NAME = "orgx-claude-code-plugin";
|
|
3653
3655
|
var ORGX_CLAUDE_MARKETPLACE_NAME = "orgx-local";
|
|
3654
3656
|
var ORGX_CODEX_PLUGIN_NAME = "orgx-codex-plugin";
|
|
3657
|
+
var ORGX_CURSOR_PLUGIN_NAME = "cursor-plugin";
|
|
3655
3658
|
var ORGX_OPENCLAW_PLUGIN_ID = "orgx";
|
|
3656
3659
|
var ORGX_OPENCLAW_PLUGIN_PACKAGE_NAME = "@useorgx/openclaw-plugin";
|
|
3657
3660
|
var CLAUDE_PLUGIN_SYNC_SPEC = {
|
|
@@ -3679,6 +3682,22 @@ var CODEX_PLUGIN_SYNC_SPEC = {
|
|
|
3679
3682
|
{ localPath: "skills", remotePath: "skills" }
|
|
3680
3683
|
]
|
|
3681
3684
|
};
|
|
3685
|
+
var CURSOR_PLUGIN_SYNC_SPEC = {
|
|
3686
|
+
owner: ORGX_PLUGIN_GITHUB_OWNER,
|
|
3687
|
+
repo: ORGX_CURSOR_PLUGIN_NAME,
|
|
3688
|
+
ref: ORGX_PLUGIN_GITHUB_REF,
|
|
3689
|
+
include: [
|
|
3690
|
+
{ localPath: ".cursor-plugin", remotePath: ".cursor-plugin" },
|
|
3691
|
+
{ localPath: ".mcp.json", remotePath: ".mcp.json" },
|
|
3692
|
+
{ localPath: "agents", remotePath: "agents" },
|
|
3693
|
+
{ localPath: "assets", remotePath: "assets" },
|
|
3694
|
+
{ localPath: "commands", remotePath: "commands" },
|
|
3695
|
+
{ localPath: "hooks", remotePath: "hooks" },
|
|
3696
|
+
{ localPath: "rules", remotePath: "rules" },
|
|
3697
|
+
{ localPath: "scripts", remotePath: "scripts" },
|
|
3698
|
+
{ localPath: "skills", remotePath: "skills" }
|
|
3699
|
+
]
|
|
3700
|
+
};
|
|
3682
3701
|
function defaultPluginPaths() {
|
|
3683
3702
|
return {
|
|
3684
3703
|
claudeMarketplaceDir: CLAUDE_MANAGED_MARKETPLACE_DIR,
|
|
@@ -3686,6 +3705,7 @@ function defaultPluginPaths() {
|
|
|
3686
3705
|
claudePluginDir: CLAUDE_MANAGED_PLUGIN_DIR,
|
|
3687
3706
|
codexMarketplacePath: CODEX_MARKETPLACE_PATH,
|
|
3688
3707
|
codexPluginDir: CODEX_ORGX_PLUGIN_DIR,
|
|
3708
|
+
cursorPluginDir: CURSOR_ORGX_PLUGIN_DIR,
|
|
3689
3709
|
cursorRulePath: CURSOR_ORGX_RULE_PATH
|
|
3690
3710
|
};
|
|
3691
3711
|
}
|
|
@@ -4106,15 +4126,36 @@ async function getOpenclawInstallState(runner) {
|
|
|
4106
4126
|
installed: extractOpenclawPluginIds(result.stdout).includes(ORGX_OPENCLAW_PLUGIN_ID)
|
|
4107
4127
|
};
|
|
4108
4128
|
}
|
|
4129
|
+
function cursorPluginManifestPath(paths) {
|
|
4130
|
+
return join3(paths.cursorPluginDir, ".cursor-plugin", "plugin.json");
|
|
4131
|
+
}
|
|
4132
|
+
function cursorPluginMcpPath(paths) {
|
|
4133
|
+
return join3(paths.cursorPluginDir, ".mcp.json");
|
|
4134
|
+
}
|
|
4135
|
+
function isCursorPluginInstalled(paths) {
|
|
4136
|
+
return existsSync4(cursorPluginManifestPath(paths)) && existsSync4(cursorPluginMcpPath(paths));
|
|
4137
|
+
}
|
|
4138
|
+
function isCursorPluginAvailable(paths) {
|
|
4139
|
+
return detectSurface("cursor").detected || existsSync4(paths.cursorPluginDir) || existsSync4(dirname3(paths.cursorPluginDir)) || readTextIfExists(paths.cursorRulePath) !== null;
|
|
4140
|
+
}
|
|
4109
4141
|
function buildCursorStatus(paths) {
|
|
4110
4142
|
const existingRules = readTextIfExists(paths.cursorRulePath);
|
|
4111
|
-
const available =
|
|
4112
|
-
|
|
4143
|
+
const available = isCursorPluginAvailable(paths);
|
|
4144
|
+
const installed = isCursorPluginInstalled(paths);
|
|
4145
|
+
if (installed) {
|
|
4113
4146
|
return {
|
|
4114
4147
|
target: "cursor",
|
|
4115
4148
|
available: true,
|
|
4116
4149
|
installed: true,
|
|
4117
|
-
message: "Cursor OrgX
|
|
4150
|
+
message: "Cursor OrgX plugin bundle is installed."
|
|
4151
|
+
};
|
|
4152
|
+
}
|
|
4153
|
+
if (existingRules === CURSOR_RULES_CONTENT) {
|
|
4154
|
+
return {
|
|
4155
|
+
target: "cursor",
|
|
4156
|
+
available: true,
|
|
4157
|
+
installed: false,
|
|
4158
|
+
message: "Legacy Cursor OrgX rules are installed; run plugins add cursor to install the full plugin bundle."
|
|
4118
4159
|
};
|
|
4119
4160
|
}
|
|
4120
4161
|
if (existingRules !== null) {
|
|
@@ -4122,14 +4163,14 @@ function buildCursorStatus(paths) {
|
|
|
4122
4163
|
target: "cursor",
|
|
4123
4164
|
available: true,
|
|
4124
4165
|
installed: false,
|
|
4125
|
-
message: "Cursor
|
|
4166
|
+
message: "Cursor rules file exists, but the OrgX plugin bundle is missing."
|
|
4126
4167
|
};
|
|
4127
4168
|
}
|
|
4128
4169
|
return {
|
|
4129
4170
|
target: "cursor",
|
|
4130
4171
|
available,
|
|
4131
4172
|
installed: false,
|
|
4132
|
-
message: available ? "Cursor is available and ready for OrgX
|
|
4173
|
+
message: available ? "Cursor is available and ready for OrgX plugin install." : "Cursor was not detected."
|
|
4133
4174
|
};
|
|
4134
4175
|
}
|
|
4135
4176
|
async function buildClaudeStatus(paths, runner) {
|
|
@@ -4247,28 +4288,19 @@ async function resolveOpenclawTarball(fetchImpl) {
|
|
|
4247
4288
|
version: latestVersion
|
|
4248
4289
|
};
|
|
4249
4290
|
}
|
|
4250
|
-
function installCursorPlugin(paths) {
|
|
4251
|
-
|
|
4252
|
-
const available = detectSurface("cursor").detected || existingRules !== null;
|
|
4253
|
-
if (!available) {
|
|
4291
|
+
async function installCursorPlugin(paths, fetchImpl) {
|
|
4292
|
+
if (!isCursorPluginAvailable(paths)) {
|
|
4254
4293
|
return {
|
|
4255
4294
|
target: "cursor",
|
|
4256
4295
|
changed: false,
|
|
4257
4296
|
message: "Cursor is not available on this machine."
|
|
4258
4297
|
};
|
|
4259
4298
|
}
|
|
4260
|
-
|
|
4261
|
-
return {
|
|
4262
|
-
target: "cursor",
|
|
4263
|
-
changed: false,
|
|
4264
|
-
message: "Cursor OrgX rules are already installed."
|
|
4265
|
-
};
|
|
4266
|
-
}
|
|
4267
|
-
writeTextFile(paths.cursorRulePath, CURSOR_RULES_CONTENT);
|
|
4299
|
+
const syncResult = await syncManagedRepoTree(CURSOR_PLUGIN_SYNC_SPEC, paths.cursorPluginDir, fetchImpl);
|
|
4268
4300
|
return {
|
|
4269
4301
|
target: "cursor",
|
|
4270
|
-
changed:
|
|
4271
|
-
message:
|
|
4302
|
+
changed: syncResult.changed,
|
|
4303
|
+
message: syncResult.changed ? `Synced ${syncResult.fileCount} Cursor plugin files into ${paths.cursorPluginDir}. Reload Cursor to finish loading the plugin.` : "Cursor plugin bundle is already installed and up to date."
|
|
4272
4304
|
};
|
|
4273
4305
|
}
|
|
4274
4306
|
async function installClaudePlugin(paths, fetchImpl, runner) {
|
|
@@ -4379,25 +4411,13 @@ async function installOpenclawPlugin(fetchImpl, runner) {
|
|
|
4379
4411
|
}
|
|
4380
4412
|
function uninstallCursorPlugin(paths) {
|
|
4381
4413
|
const existingRules = readTextIfExists(paths.cursorRulePath);
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
changed: false,
|
|
4386
|
-
message: "Cursor OrgX rules were not installed."
|
|
4387
|
-
};
|
|
4388
|
-
}
|
|
4389
|
-
if (existingRules !== CURSOR_RULES_CONTENT) {
|
|
4390
|
-
return {
|
|
4391
|
-
target: "cursor",
|
|
4392
|
-
changed: false,
|
|
4393
|
-
message: "Cursor rules file differs from the managed OrgX rules, so it was left in place."
|
|
4394
|
-
};
|
|
4395
|
-
}
|
|
4396
|
-
const changed = deleteFileIfExists(paths.cursorRulePath);
|
|
4414
|
+
const removedPluginDir = removePathIfExists(paths.cursorPluginDir);
|
|
4415
|
+
const removedLegacyRules = existingRules === CURSOR_RULES_CONTENT ? deleteFileIfExists(paths.cursorRulePath) : false;
|
|
4416
|
+
const changed = removedPluginDir || removedLegacyRules;
|
|
4397
4417
|
return {
|
|
4398
4418
|
target: "cursor",
|
|
4399
4419
|
changed,
|
|
4400
|
-
message: changed ? "Removed the managed Cursor OrgX rules." : "Cursor OrgX rules were not installed."
|
|
4420
|
+
message: changed ? existingRules !== null && existingRules !== CURSOR_RULES_CONTENT ? "Removed the managed Cursor OrgX plugin bundle. Existing Cursor rules differ from managed OrgX rules, so they were left in place." : "Removed the managed Cursor OrgX plugin bundle and legacy managed Cursor rules." : existingRules !== null && existingRules !== CURSOR_RULES_CONTENT ? "Cursor plugin was not installed. Existing Cursor rules differ from managed OrgX rules, so they were left in place." : "Cursor plugin was not installed."
|
|
4401
4421
|
};
|
|
4402
4422
|
}
|
|
4403
4423
|
async function uninstallClaudePlugin(paths, runner) {
|
|
@@ -4513,7 +4533,7 @@ async function installOrgxPlugins(options = {}) {
|
|
|
4513
4533
|
for (const target of targets) {
|
|
4514
4534
|
switch (target) {
|
|
4515
4535
|
case "cursor":
|
|
4516
|
-
results.push(installCursorPlugin(paths));
|
|
4536
|
+
results.push(await installCursorPlugin(paths, fetchImpl));
|
|
4517
4537
|
break;
|
|
4518
4538
|
case "claude":
|
|
4519
4539
|
results.push(await installClaudePlugin(paths, fetchImpl, runner));
|
|
@@ -5005,7 +5025,7 @@ function formatAuthSource(source) {
|
|
|
5005
5025
|
function formatPluginTargetLabel(target) {
|
|
5006
5026
|
switch (target) {
|
|
5007
5027
|
case "cursor":
|
|
5008
|
-
return "Cursor
|
|
5028
|
+
return "Cursor plugin";
|
|
5009
5029
|
case "claude":
|
|
5010
5030
|
return "Claude Code";
|
|
5011
5031
|
case "codex":
|
|
@@ -5051,10 +5071,10 @@ function printPluginMutationReport(report) {
|
|
|
5051
5071
|
}
|
|
5052
5072
|
}
|
|
5053
5073
|
async function printPluginStatusSection() {
|
|
5054
|
-
const spinner = createOrgxSpinner("Checking OrgX plugin
|
|
5074
|
+
const spinner = createOrgxSpinner("Checking OrgX companion plugin status");
|
|
5055
5075
|
spinner.start();
|
|
5056
5076
|
const statuses = await listOrgxPluginStatuses();
|
|
5057
|
-
spinner.succeed("OrgX plugin
|
|
5077
|
+
spinner.succeed("OrgX companion plugin status checked");
|
|
5058
5078
|
console.log("");
|
|
5059
5079
|
console.log(pc3.dim(" plugins"));
|
|
5060
5080
|
printPluginStatusReport(statuses);
|
|
@@ -5413,17 +5433,18 @@ async function promptOptionalCompanionPluginTargets(input) {
|
|
|
5413
5433
|
}
|
|
5414
5434
|
let statuses = input.statuses;
|
|
5415
5435
|
if (!statuses) {
|
|
5416
|
-
const spinner = createOrgxSpinner("Checking optional OrgX plugin
|
|
5436
|
+
const spinner = createOrgxSpinner("Checking optional OrgX companion plugin status");
|
|
5417
5437
|
spinner.start();
|
|
5418
5438
|
statuses = await listOrgxPluginStatuses();
|
|
5419
|
-
spinner.succeed("Optional OrgX plugin
|
|
5439
|
+
spinner.succeed("Optional OrgX companion plugin status checked");
|
|
5420
5440
|
}
|
|
5421
5441
|
const installable = statuses.filter((status) => status.available && !status.installed);
|
|
5422
5442
|
if (installable.length === 0) {
|
|
5423
5443
|
return [];
|
|
5424
5444
|
}
|
|
5425
5445
|
const selection = await multiselectPrompt({
|
|
5426
|
-
|
|
5446
|
+
initialValues: installable.map((status) => status.target),
|
|
5447
|
+
message: "Install OrgX companion plugins into your detected AI tools?",
|
|
5427
5448
|
options: installable.map((status) => ({
|
|
5428
5449
|
value: status.target,
|
|
5429
5450
|
label: `Install ${formatPluginTargetLabel(status.target)}`,
|
|
@@ -5438,12 +5459,12 @@ async function promptOptionalCompanionPluginTargets(input) {
|
|
|
5438
5459
|
return selection;
|
|
5439
5460
|
}
|
|
5440
5461
|
function printPluginSkillOwnershipNote(targets) {
|
|
5441
|
-
if (!targets.some((target) => target === "claude" || target === "codex")) {
|
|
5462
|
+
if (!targets.some((target) => target === "cursor" || target === "claude" || target === "codex")) {
|
|
5442
5463
|
return;
|
|
5443
5464
|
}
|
|
5444
5465
|
console.log(
|
|
5445
5466
|
` ${ICON.skip} ${pc3.dim(
|
|
5446
|
-
"Claude Code and Codex companion plugins carry their own OrgX skills. Use 'wizard skills add' for
|
|
5467
|
+
"Cursor, Claude Code, and Codex companion plugins carry their own OrgX skills, rules, MCP config, commands, hooks, and agent prompts. Use 'wizard skills add' only for standalone rules or skills when those plugins are not in play."
|
|
5447
5468
|
)}`
|
|
5448
5469
|
);
|
|
5449
5470
|
}
|
|
@@ -5451,10 +5472,10 @@ async function installSelectedCompanionPlugins(input) {
|
|
|
5451
5472
|
if (input.targets.length === 0) {
|
|
5452
5473
|
return "skipped";
|
|
5453
5474
|
}
|
|
5454
|
-
const spinner = createOrgxSpinner("Installing OrgX companion plugins
|
|
5475
|
+
const spinner = createOrgxSpinner("Installing OrgX companion plugins");
|
|
5455
5476
|
spinner.start();
|
|
5456
5477
|
const report = await installOrgxPlugins({ targets: input.targets });
|
|
5457
|
-
spinner.succeed("OrgX companion plugins
|
|
5478
|
+
spinner.succeed("OrgX companion plugins processed");
|
|
5458
5479
|
printPluginMutationReport(report);
|
|
5459
5480
|
printPluginSkillOwnershipNote(input.targets);
|
|
5460
5481
|
await safeTrackWizardTelemetry("plugins_installed", {
|
|
@@ -5557,7 +5578,7 @@ function printDoctorReport(report, assessment) {
|
|
|
5557
5578
|
async function main() {
|
|
5558
5579
|
const program = new Command();
|
|
5559
5580
|
program.name("orgx-wizard").description("Add OrgX MCP configs, skills/rules, and companion plugins to your local AI tools.").showHelpAfterError();
|
|
5560
|
-
const pkgVersion = true ? "0.1.
|
|
5581
|
+
const pkgVersion = true ? "0.1.12" : void 0;
|
|
5561
5582
|
program.version(pkgVersion ?? "unknown", "-V, --version");
|
|
5562
5583
|
program.hook("preAction", () => {
|
|
5563
5584
|
console.log(renderBanner(pkgVersion));
|
|
@@ -5928,7 +5949,7 @@ async function main() {
|
|
|
5928
5949
|
);
|
|
5929
5950
|
}
|
|
5930
5951
|
});
|
|
5931
|
-
program.command("uninstall").description("Remove OrgX-managed MCP tool configs, companion plugins
|
|
5952
|
+
program.command("uninstall").description("Remove OrgX-managed MCP tool configs, companion plugins, auth, and wizard state from this machine.").option("--keep-auth", "Keep the wizard-local saved OrgX API key.").option("--keep-state", "Keep wizard-local setup state.").option("--skip-plugins", "Skip companion plugin and legacy Cursor rules removal.").option("--skip-surfaces", "Skip MCP tool config removal.").action(async (options) => {
|
|
5932
5953
|
await safeTrackWizardTelemetry("wizard_uninstalled", {
|
|
5933
5954
|
keep_auth: Boolean(options.keepAuth),
|
|
5934
5955
|
keep_state: Boolean(options.keepState),
|
|
@@ -5949,10 +5970,10 @@ async function main() {
|
|
|
5949
5970
|
} else {
|
|
5950
5971
|
console.log("");
|
|
5951
5972
|
console.log(pc3.dim(" plugins"));
|
|
5952
|
-
const spinner = createOrgxSpinner("Removing OrgX companion plugins and rules");
|
|
5973
|
+
const spinner = createOrgxSpinner("Removing OrgX companion plugins and legacy Cursor rules");
|
|
5953
5974
|
spinner.start();
|
|
5954
5975
|
const pluginReport = await uninstallOrgxPlugins({ targets: ["all"] });
|
|
5955
|
-
spinner.succeed("OrgX companion plugins and rules processed");
|
|
5976
|
+
spinner.succeed("OrgX companion plugins and legacy Cursor rules processed");
|
|
5956
5977
|
printPluginMutationReport(pluginReport);
|
|
5957
5978
|
}
|
|
5958
5979
|
console.log("");
|
|
@@ -5994,19 +6015,19 @@ async function main() {
|
|
|
5994
6015
|
const results = removeMcpSurface(names);
|
|
5995
6016
|
printMutationResults(results);
|
|
5996
6017
|
});
|
|
5997
|
-
const plugins = program.command("plugins").description("Install or remove OrgX companion plugins
|
|
5998
|
-
plugins.command("list").description("Show companion plugin
|
|
5999
|
-
const spinner = createOrgxSpinner("Checking OrgX plugin
|
|
6018
|
+
const plugins = program.command("plugins").description("Install or remove OrgX companion plugins in Cursor, Claude Code, Codex, and OpenClaw.");
|
|
6019
|
+
plugins.command("list").description("Show companion plugin availability and install status in your tools.").action(async () => {
|
|
6020
|
+
const spinner = createOrgxSpinner("Checking OrgX companion plugin status");
|
|
6000
6021
|
spinner.start();
|
|
6001
6022
|
const statuses = await listOrgxPluginStatuses();
|
|
6002
|
-
spinner.succeed("OrgX plugin
|
|
6023
|
+
spinner.succeed("OrgX companion plugin status checked");
|
|
6003
6024
|
printPluginStatusReport(statuses);
|
|
6004
6025
|
});
|
|
6005
|
-
plugins.command("add").description("Install OrgX companion plugins
|
|
6006
|
-
const spinner = createOrgxSpinner("Installing OrgX companion plugins
|
|
6026
|
+
plugins.command("add").description("Install OrgX companion plugins into Cursor, Claude Code, Codex, and OpenClaw.").argument("[targets...]", "cursor, claude, codex, openclaw, or all", ["all"]).action(async (targets) => {
|
|
6027
|
+
const spinner = createOrgxSpinner("Installing OrgX companion plugins");
|
|
6007
6028
|
spinner.start();
|
|
6008
6029
|
const report = await installOrgxPlugins({ targets });
|
|
6009
|
-
spinner.succeed("OrgX companion plugins
|
|
6030
|
+
spinner.succeed("OrgX companion plugins processed");
|
|
6010
6031
|
printPluginMutationReport(report);
|
|
6011
6032
|
printPluginSkillOwnershipNote(report.results.map((result) => result.target));
|
|
6012
6033
|
await safeTrackWizardTelemetry("plugins_installed", {
|
|
@@ -6016,11 +6037,11 @@ async function main() {
|
|
|
6016
6037
|
target_count: report.results.length
|
|
6017
6038
|
});
|
|
6018
6039
|
});
|
|
6019
|
-
plugins.command("remove").description("Uninstall managed OrgX companion plugins
|
|
6020
|
-
const spinner = createOrgxSpinner("Removing OrgX companion plugins
|
|
6040
|
+
plugins.command("remove").description("Uninstall managed OrgX companion plugins and legacy managed Cursor rules from Cursor, Claude Code, Codex, and OpenClaw.").argument("[targets...]", "cursor, claude, codex, openclaw, or all", ["all"]).action(async (targets) => {
|
|
6041
|
+
const spinner = createOrgxSpinner("Removing OrgX companion plugins and legacy Cursor rules");
|
|
6021
6042
|
spinner.start();
|
|
6022
6043
|
const report = await uninstallOrgxPlugins({ targets });
|
|
6023
|
-
spinner.succeed("OrgX companion plugins
|
|
6044
|
+
spinner.succeed("OrgX companion plugins and legacy Cursor rules processed");
|
|
6024
6045
|
printPluginMutationReport(report);
|
|
6025
6046
|
await safeTrackWizardTelemetry("plugins_removed", {
|
|
6026
6047
|
changed_count: countPluginReportChanges(report),
|