oh-my-codex 0.16.4 → 0.17.1
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/Cargo.lock +5 -5
- package/Cargo.toml +1 -1
- package/dist/catalog/__tests__/generator.test.js +2 -0
- package/dist/catalog/__tests__/generator.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +80 -7
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +17 -11
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/mcp-serve.test.js +4 -0
- package/dist/cli/__tests__/mcp-serve.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +3 -0
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
- package/dist/cli/__tests__/ralph.test.js +0 -124
- package/dist/cli/__tests__/ralph.test.js.map +1 -1
- package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js +8 -3
- package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +183 -4
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +3 -3
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +166 -42
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/ultragoal.test.js +22 -0
- package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +75 -14
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +8 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +17 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp-serve.d.ts.map +1 -1
- package/dist/cli/mcp-serve.js +4 -0
- package/dist/cli/mcp-serve.js.map +1 -1
- package/dist/cli/plugin-marketplace.d.ts +25 -1
- package/dist/cli/plugin-marketplace.d.ts.map +1 -1
- package/dist/cli/plugin-marketplace.js +146 -3
- package/dist/cli/plugin-marketplace.js.map +1 -1
- package/dist/cli/question.d.ts +1 -1
- package/dist/cli/question.d.ts.map +1 -1
- package/dist/cli/question.js +98 -4
- package/dist/cli/question.js.map +1 -1
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +1 -49
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/setup.d.ts +1 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +103 -18
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +21 -29
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/ultragoal.d.ts.map +1 -1
- package/dist/cli/ultragoal.js +7 -1
- package/dist/cli/ultragoal.js.map +1 -1
- package/dist/config/__tests__/codex-hooks.test.js +136 -9
- package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +15 -0
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/codex-hooks.d.ts +13 -14
- package/dist/config/codex-hooks.d.ts.map +1 -1
- package/dist/config/codex-hooks.js +85 -7
- package/dist/config/codex-hooks.js.map +1 -1
- package/dist/config/generator.d.ts +8 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +73 -9
- package/dist/config/generator.js.map +1 -1
- package/dist/config/omx-first-party-mcp.d.ts.map +1 -1
- package/dist/config/omx-first-party-mcp.js +7 -0
- package/dist/config/omx-first-party-mcp.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +29 -0
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/design-skill.test.d.ts +2 -0
- package/dist/hooks/__tests__/design-skill.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/design-skill.test.js +55 -0
- package/dist/hooks/__tests__/design-skill.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +265 -0
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
- package/dist/hooks/__tests__/session.test.js +126 -1
- package/dist/hooks/__tests__/session.test.js.map +1 -1
- package/dist/hooks/__tests__/skill-catalog-hygiene.test.js +1 -1
- package/dist/hooks/__tests__/skill-catalog-hygiene.test.js.map +1 -1
- package/dist/hooks/__tests__/skill-guidance-contract.test.js +41 -0
- package/dist/hooks/__tests__/skill-guidance-contract.test.js.map +1 -1
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +6 -3
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +5 -1
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +2 -0
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +47 -2
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hooks/session.d.ts +11 -3
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +68 -6
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +63 -0
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.d.ts +2 -0
- package/dist/hud/__tests__/tmux.test.d.ts.map +1 -0
- package/dist/hud/__tests__/tmux.test.js +92 -0
- package/dist/hud/__tests__/tmux.test.js.map +1 -0
- package/dist/hud/reconcile.d.ts +2 -0
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +14 -1
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/tmux.d.ts +12 -0
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +88 -0
- package/dist/hud/tmux.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.js +3 -0
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
- package/dist/mcp/__tests__/hermes-bridge.test.d.ts +2 -0
- package/dist/mcp/__tests__/hermes-bridge.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/hermes-bridge.test.js +441 -0
- package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -0
- package/dist/mcp/__tests__/state-paths.test.js +96 -13
- package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +1 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +2 -0
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/hermes-bridge.d.ts +111 -0
- package/dist/mcp/hermes-bridge.d.ts.map +1 -0
- package/dist/mcp/hermes-bridge.js +474 -0
- package/dist/mcp/hermes-bridge.js.map +1 -0
- package/dist/mcp/hermes-server.d.ts +374 -0
- package/dist/mcp/hermes-server.d.ts.map +1 -0
- package/dist/mcp/hermes-server.js +158 -0
- package/dist/mcp/hermes-server.js.map +1 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +41 -9
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/modes/__tests__/base-tmux-pane.test.js +31 -1
- package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +18 -9
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/stages/team-exec.d.ts.map +1 -1
- package/dist/pipeline/stages/team-exec.js +2 -7
- package/dist/pipeline/stages/team-exec.js.map +1 -1
- package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js +111 -269
- package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js.map +1 -1
- package/dist/planning/__tests__/approved-launch-hint-lineage-matrix.test.js +31 -72
- package/dist/planning/__tests__/approved-launch-hint-lineage-matrix.test.js.map +1 -1
- package/dist/planning/__tests__/artifacts.test.js +27 -372
- package/dist/planning/__tests__/artifacts.test.js.map +1 -1
- package/dist/planning/artifacts.d.ts +1 -14
- package/dist/planning/artifacts.d.ts.map +1 -1
- package/dist/planning/artifacts.js +11 -31
- package/dist/planning/artifacts.js.map +1 -1
- package/dist/question/__tests__/state.test.js +287 -1
- package/dist/question/__tests__/state.test.js.map +1 -1
- package/dist/question/__tests__/ui.test.js +8 -8
- package/dist/question/__tests__/ui.test.js.map +1 -1
- package/dist/question/events.d.ts +53 -0
- package/dist/question/events.d.ts.map +1 -0
- package/dist/question/events.js +201 -0
- package/dist/question/events.js.map +1 -0
- package/dist/question/state.d.ts +25 -1
- package/dist/question/state.d.ts.map +1 -1
- package/dist/question/state.js +259 -3
- package/dist/question/state.js.map +1 -1
- package/dist/question/types.d.ts +1 -0
- package/dist/question/types.d.ts.map +1 -1
- package/dist/question/types.js.map +1 -1
- package/dist/question/ui.d.ts.map +1 -1
- package/dist/question/ui.js +1 -18
- package/dist/question/ui.js.map +1 -1
- package/dist/ralph/__tests__/completion-audit.test.js +39 -0
- package/dist/ralph/__tests__/completion-audit.test.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +298 -3
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/run-test-files.test.js +22 -0
- package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts +1 -0
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +137 -18
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +12 -6
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.js +91 -2
- package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
- package/dist/scripts/run-test-files.js +12 -1
- package/dist/scripts/run-test-files.js.map +1 -1
- package/dist/state/mode-state-context.d.ts +2 -0
- package/dist/state/mode-state-context.d.ts.map +1 -1
- package/dist/state/mode-state-context.js +21 -0
- package/dist/state/mode-state-context.js.map +1 -1
- package/dist/team/__tests__/approved-execution.test.js +25 -24
- package/dist/team/__tests__/approved-execution.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +173 -26
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +66 -17
- package/dist/team/__tests__/scaling.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +42 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +205 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/approved-execution.d.ts +13 -0
- package/dist/team/approved-execution.d.ts.map +1 -1
- package/dist/team/approved-execution.js +65 -30
- package/dist/team/approved-execution.js.map +1 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +28 -24
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +7 -8
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +48 -2
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/ultragoal-context.d.ts +35 -0
- package/dist/team/ultragoal-context.d.ts.map +1 -0
- package/dist/team/ultragoal-context.js +191 -0
- package/dist/team/ultragoal-context.js.map +1 -0
- package/dist/ultragoal/__tests__/artifacts.test.js +121 -0
- package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
- package/dist/ultragoal/__tests__/docs-contract.test.js +19 -0
- package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
- package/dist/ultragoal/artifacts.d.ts +9 -1
- package/dist/ultragoal/artifacts.d.ts.map +1 -1
- package/dist/ultragoal/artifacts.js +105 -3
- package/dist/ultragoal/artifacts.js.map +1 -1
- package/dist/utils/__tests__/paths.test.js +31 -1
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/paths.d.ts +6 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +18 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/wiki/lifecycle.js +3 -3
- package/dist/wiki/lifecycle.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/.mcp.json +8 -0
- package/plugins/oh-my-codex/skills/design/SKILL.md +180 -0
- package/plugins/oh-my-codex/skills/plan/SKILL.md +3 -3
- package/plugins/oh-my-codex/skills/ralph/SKILL.md +2 -2
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/skill/SKILL.md +2 -1
- package/plugins/oh-my-codex/skills/team/SKILL.md +6 -0
- package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +11 -0
- package/plugins/oh-my-codex/skills/ultraqa/SKILL.md +161 -47
- package/plugins/oh-my-codex/skills/visual-ralph/SKILL.md +2 -2
- package/skills/design/SKILL.md +180 -0
- package/skills/frontend-ui-ux/SKILL.md +6 -2
- package/skills/plan/SKILL.md +3 -3
- package/skills/ralph/SKILL.md +2 -2
- package/skills/ralplan/SKILL.md +1 -1
- package/skills/skill/SKILL.md +2 -1
- package/skills/team/SKILL.md +6 -0
- package/skills/ultragoal/SKILL.md +11 -0
- package/skills/ultraqa/SKILL.md +161 -47
- package/skills/visual-ralph/SKILL.md +2 -2
- package/src/scripts/__tests__/codex-native-hook.test.ts +339 -2
- package/src/scripts/__tests__/run-test-files.test.ts +32 -0
- package/src/scripts/codex-native-hook.ts +166 -20
- package/src/scripts/codex-native-pre-post.ts +12 -6
- package/src/scripts/notify-hook/tmux-injection.ts +110 -3
- package/src/scripts/run-test-files.ts +13 -2
- package/templates/catalog-manifest.json +9 -2
- package/dist/planning/__tests__/context-pack-status.test.d.ts +0 -2
- package/dist/planning/__tests__/context-pack-status.test.d.ts.map +0 -1
- package/dist/planning/__tests__/context-pack-status.test.js +0 -795
- package/dist/planning/__tests__/context-pack-status.test.js.map +0 -1
- package/dist/planning/__tests__/ready-context-pack-role-refs.test.d.ts +0 -2
- package/dist/planning/__tests__/ready-context-pack-role-refs.test.d.ts.map +0 -1
- package/dist/planning/__tests__/ready-context-pack-role-refs.test.js +0 -612
- package/dist/planning/__tests__/ready-context-pack-role-refs.test.js.map +0 -1
- package/dist/planning/context-pack-status.d.ts +0 -73
- package/dist/planning/context-pack-status.d.ts.map +0 -1
- package/dist/planning/context-pack-status.js +0 -745
- package/dist/planning/context-pack-status.js.map +0 -1
package/dist/cli/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/setup.js
CHANGED
|
@@ -9,8 +9,8 @@ import { spawnSync } from "child_process";
|
|
|
9
9
|
import { createInterface } from "readline/promises";
|
|
10
10
|
import { homedir } from "os";
|
|
11
11
|
import { codexHome, codexConfigPath, codexPromptsDir, codexAgentsDir, userSkillsDir, omxStateDir, detectLegacySkillRootOverlap, omxPlansDir, omxLogsDir, } from "../utils/paths.js";
|
|
12
|
-
import { buildMergedConfig, getRootModelName, getRootTomlArray, hasLegacyOmxTeamRunTable, isOmxManagedNotifyCommand, sanitizePreviousNotifyCommand, stripExistingOmxBlocks, stripExistingSharedMcpRegistryBlock, mergeSharedMcpRegistryBlock, stripOmxEnvSettings, stripOmxFeatureFlags, stripOmxSeededBehavioralDefaults, upsertPluginModeRuntimeFeatureFlags, upsertManagedCodexHookTrustState, stripManagedCodexHookTrustState, OMX_PLUGIN_DEVELOPER_INSTRUCTIONS, } from "../config/generator.js";
|
|
13
|
-
import { mergeManagedCodexHooksConfig } from "../config/codex-hooks.js";
|
|
12
|
+
import { buildMergedConfig, getRootModelName, getRootTomlArray, hasLegacyOmxTeamRunTable, isOmxManagedNotifyCommand, sanitizePreviousNotifyCommand, stripExistingOmxBlocks, stripExistingSharedMcpRegistryBlock, mergeSharedMcpRegistryBlock, stripOmxEnvSettings, stripOmxFeatureFlags, stripOmxSeededBehavioralDefaults, upsertPluginModeRuntimeFeatureFlags, upsertManagedCodexHookTrustState, stripManagedCodexHookTrustState, OMX_PLUGIN_DEVELOPER_INSTRUCTIONS, hasFirstPartyOmxMcpRegistrations, extractFirstPartyOmxMcpSections, stripFirstPartyOmxMcpSections, } from "../config/generator.js";
|
|
13
|
+
import { buildManagedCodexNativeHookWindowsShimContent, buildManagedCodexNativeHookWindowsShimPath, mergeManagedCodexHooksConfig, } from "../config/codex-hooks.js";
|
|
14
14
|
import { getLegacyUnifiedMcpRegistryCandidate, getUnifiedMcpRegistryCandidates, loadUnifiedMcpRegistry, planClaudeCodeMcpSettingsSync, } from "../config/mcp-registry.js";
|
|
15
15
|
import { generateAgentToml } from "../agents/native-config.js";
|
|
16
16
|
import { AGENT_DEFINITIONS } from "../agents/definitions.js";
|
|
@@ -23,7 +23,7 @@ import { DEFAULT_FRONTIER_MODEL } from "../config/models.js";
|
|
|
23
23
|
import { addGeneratedAgentsMarker, hasOmxManagedAgentsSections, isOmxGeneratedAgentsMd, upsertManagedAgentsBlock, } from "../utils/agents-md.js";
|
|
24
24
|
import { DEFAULT_HUD_CONFIG } from "../hud/types.js";
|
|
25
25
|
import { SETUP_INSTALL_MODES, SETUP_MCP_MODES, SETUP_SCOPES, getSetupScopeFilePath, readPersistedSetupPreferences, } from "./setup-preferences.js";
|
|
26
|
-
import { OMX_LOCAL_MARKETPLACE_NAME, resolvePackagedOmxMarketplace, upsertLocalOmxMarketplaceRegistration, upsertLocalOmxPluginEnablement, upsertLocalOmxPluginMcpServerEnablement, } from "./plugin-marketplace.js";
|
|
26
|
+
import { OMX_LOCAL_MARKETPLACE_NAME, OMX_PLUGIN_NAME, materializePackagedOmxPluginCache, resolvePackagedOmxMarketplace, upsertLocalOmxMarketplaceRegistration, upsertLocalOmxPluginEnablement, upsertLocalOmxPluginMcpServerEnablement, hasLocalOmxPluginMcpServerRegistrations, } from "./plugin-marketplace.js";
|
|
27
27
|
import { resolveCodexHookFeatureFlagForCli } from "./codex-feature-probe.js";
|
|
28
28
|
async function resolveStatusLinePresetForSetup(projectRoot, options) {
|
|
29
29
|
if (options.force) {
|
|
@@ -349,6 +349,28 @@ async function promptForSetupInstallMode(defaultMode) {
|
|
|
349
349
|
rl.close();
|
|
350
350
|
}
|
|
351
351
|
}
|
|
352
|
+
async function promptForFirstPartyMcpRemoval(configPath, registrationKinds) {
|
|
353
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
const rl = createInterface({
|
|
357
|
+
input: process.stdin,
|
|
358
|
+
output: process.stdout,
|
|
359
|
+
});
|
|
360
|
+
try {
|
|
361
|
+
console.log("Deprecated first-party OMX MCP registration detected:");
|
|
362
|
+
console.log(` ${configPath}`);
|
|
363
|
+
console.log(` ${registrationKinds.join(", ")}`);
|
|
364
|
+
console.log(" OMX is CLI-first by default now; first-party MCP compatibility is legacy/explicit.");
|
|
365
|
+
const answer = (await rl.question("Remove first-party OMX MCP registrations now? [y/N]: "))
|
|
366
|
+
.trim()
|
|
367
|
+
.toLowerCase();
|
|
368
|
+
return answer === "y" || answer === "yes";
|
|
369
|
+
}
|
|
370
|
+
finally {
|
|
371
|
+
rl.close();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
352
374
|
function hasPersistedSetupPreferences(preferences) {
|
|
353
375
|
return Boolean(preferences?.scope || preferences?.installMode);
|
|
354
376
|
}
|
|
@@ -585,7 +607,7 @@ async function discoverOmxPluginCacheDirs(cacheRoot = join(codexHome(), "plugins
|
|
|
585
607
|
async function discoverOmxPluginCacheDir(cacheRoot = join(codexHome(), "plugins", "cache")) {
|
|
586
608
|
return (await discoverOmxPluginCacheDirs(cacheRoot))[0] ?? null;
|
|
587
609
|
}
|
|
588
|
-
async function refreshOmxPluginDiscoveryCache(pkgRoot, options) {
|
|
610
|
+
async function refreshOmxPluginDiscoveryCache(pkgRoot, options, codexHomeDir = codexHome()) {
|
|
589
611
|
const packagedMarketplace = await resolvePackagedOmxMarketplace(pkgRoot);
|
|
590
612
|
if (!packagedMarketplace) {
|
|
591
613
|
return { status: "unavailable", staleDirs: [] };
|
|
@@ -593,7 +615,7 @@ async function refreshOmxPluginDiscoveryCache(pkgRoot, options) {
|
|
|
593
615
|
const [pkg, expectedSkillNames, cachedDirs] = await Promise.all([
|
|
594
616
|
readFile(join(pkgRoot, "package.json"), "utf-8").then((raw) => JSON.parse(raw)),
|
|
595
617
|
listChildDirectoryNames(join(packagedMarketplace.pluginRoot, "skills")),
|
|
596
|
-
discoverOmxPluginCacheDirs(),
|
|
618
|
+
discoverOmxPluginCacheDirs(join(codexHomeDir, "plugins", "cache")),
|
|
597
619
|
]);
|
|
598
620
|
const expectedVersion = typeof pkg.version === "string" ? pkg.version : null;
|
|
599
621
|
const staleDirs = [];
|
|
@@ -902,7 +924,7 @@ function insertRootTomlKey(config, line) {
|
|
|
902
924
|
const after = lines.slice(firstTableIndex);
|
|
903
925
|
return [...before, line, "", ...after].join("\n") + "\n";
|
|
904
926
|
}
|
|
905
|
-
async function ensurePluginMarketplaceRegistration(configPath, pkgRoot, mcpMode, backupContext, summary, options) {
|
|
927
|
+
async function ensurePluginMarketplaceRegistration(configPath, pkgRoot, mcpMode, removeFirstPartyMcp, backupContext, summary, options) {
|
|
906
928
|
const packagedMarketplace = await resolvePackagedOmxMarketplace(pkgRoot);
|
|
907
929
|
if (!packagedMarketplace) {
|
|
908
930
|
summary.skipped += 1;
|
|
@@ -911,7 +933,7 @@ async function ensurePluginMarketplaceRegistration(configPath, pkgRoot, mcpMode,
|
|
|
911
933
|
const existingConfig = existsSync(configPath)
|
|
912
934
|
? await readFile(configPath, "utf-8")
|
|
913
935
|
: "";
|
|
914
|
-
const nextConfig = upsertLocalOmxMarketplaceRegistration(upsertLocalOmxPluginMcpServerEnablement(upsertLocalOmxPluginEnablement(existingConfig), mcpMode === "compat"), pkgRoot);
|
|
936
|
+
const nextConfig = upsertLocalOmxMarketplaceRegistration(upsertLocalOmxPluginMcpServerEnablement(upsertLocalOmxPluginEnablement(existingConfig), mcpMode === "compat", { removeWhenDisabled: removeFirstPartyMcp }), pkgRoot);
|
|
915
937
|
const destinationExists = existsSync(configPath);
|
|
916
938
|
if (nextConfig === existingConfig) {
|
|
917
939
|
summary.unchanged += 1;
|
|
@@ -930,11 +952,11 @@ async function ensurePluginMarketplaceRegistration(configPath, pkgRoot, mcpMode,
|
|
|
930
952
|
}
|
|
931
953
|
return "updated";
|
|
932
954
|
}
|
|
933
|
-
async function applyPluginModeHooksConfig(configPath, hooksPath, pkgRoot, backupContext, summary, options) {
|
|
955
|
+
async function applyPluginModeHooksConfig(configPath, hooksPath, pkgRoot, codexHomeDir, backupContext, summary, options) {
|
|
934
956
|
const existingConfig = existsSync(configPath)
|
|
935
957
|
? await readFile(configPath, "utf-8")
|
|
936
958
|
: "";
|
|
937
|
-
const nextConfig = upsertManagedCodexHookTrustState(upsertPluginModeRuntimeFeatureFlags(stripManagedCodexHookTrustState(existingConfig), options.codexHookFeatureFlag), pkgRoot, hooksPath);
|
|
959
|
+
const nextConfig = upsertManagedCodexHookTrustState(upsertPluginModeRuntimeFeatureFlags(stripManagedCodexHookTrustState(existingConfig), options.codexHookFeatureFlag), pkgRoot, hooksPath, { platform: process.platform, codexHomeDir });
|
|
938
960
|
if (nextConfig !== existingConfig) {
|
|
939
961
|
if (await ensureBackup(configPath, existsSync(configPath), backupContext, options)) {
|
|
940
962
|
summary.backedUp += 1;
|
|
@@ -951,8 +973,9 @@ async function applyPluginModeHooksConfig(configPath, hooksPath, pkgRoot, backup
|
|
|
951
973
|
const existingHooksContent = existsSync(hooksPath)
|
|
952
974
|
? await readFile(hooksPath, "utf-8")
|
|
953
975
|
: null;
|
|
954
|
-
const hooksConfig = mergeManagedCodexHooksConfig(existingHooksContent, pkgRoot, hooksPath);
|
|
976
|
+
const hooksConfig = mergeManagedCodexHooksConfig(existingHooksContent, pkgRoot, hooksPath, { platform: process.platform, codexHomeDir });
|
|
955
977
|
await syncManagedContent(hooksConfig, hooksPath, summary, backupContext, options, `native hooks ${hooksPath}`);
|
|
978
|
+
await syncManagedWindowsNativeHookShim(codexHomeDir, pkgRoot, summary, backupContext, options);
|
|
956
979
|
if (options.verbose) {
|
|
957
980
|
console.log(` ${options.dryRun ? "would configure" : "configured"} plugin-mode native hooks and runtime feature flags at ${hooksPath}`);
|
|
958
981
|
}
|
|
@@ -996,7 +1019,11 @@ async function cleanupPluginModeLegacyConfig(configPath, backupContext, options)
|
|
|
996
1019
|
if (!existsSync(configPath))
|
|
997
1020
|
return false;
|
|
998
1021
|
const original = await readFile(configPath, "utf-8");
|
|
1022
|
+
const preservedFirstPartyMcp = options.preserveFirstPartyMcp
|
|
1023
|
+
? extractFirstPartyOmxMcpSections(original)
|
|
1024
|
+
: "";
|
|
999
1025
|
let config = original;
|
|
1026
|
+
config = stripFirstPartyOmxMcpSections(config);
|
|
1000
1027
|
config = stripExistingOmxBlocks(config).cleaned;
|
|
1001
1028
|
config = stripExistingSharedMcpRegistryBlock(config).cleaned;
|
|
1002
1029
|
config = stripPluginModeLegacyRootDefaults(config);
|
|
@@ -1004,6 +1031,9 @@ async function cleanupPluginModeLegacyConfig(configPath, backupContext, options)
|
|
|
1004
1031
|
config = stripOmxFeatureFlags(config);
|
|
1005
1032
|
config = stripManagedCodexHookTrustState(config);
|
|
1006
1033
|
config = stripOmxEnvSettings(config);
|
|
1034
|
+
if (preservedFirstPartyMcp) {
|
|
1035
|
+
config = `${config.trimEnd()}\n\n${preservedFirstPartyMcp}\n`;
|
|
1036
|
+
}
|
|
1007
1037
|
config = config.trim();
|
|
1008
1038
|
const nextConfig = config.length > 0 ? `${config}\n` : "";
|
|
1009
1039
|
if (nextConfig === original)
|
|
@@ -1042,7 +1072,7 @@ async function cleanupPluginModeLegacyAgentsMd(agentsMdPath, backupContext, opti
|
|
|
1042
1072
|
return true;
|
|
1043
1073
|
}
|
|
1044
1074
|
export async function setup(options = {}) {
|
|
1045
|
-
const { force = false, dryRun = false, installMode: requestedInstallMode, mcpMode: requestedMcpMode, scope: requestedScope, verbose = false, setupScopePrompt, persistedSetupReviewPrompt, installModePrompt, modelUpgradePrompt, pluginAgentsMdPrompt, pluginDeveloperInstructionsPrompt, pluginDeveloperInstructionsOverwritePrompt, } = options;
|
|
1075
|
+
const { force = false, dryRun = false, installMode: requestedInstallMode, mcpMode: requestedMcpMode, scope: requestedScope, verbose = false, setupScopePrompt, persistedSetupReviewPrompt, installModePrompt, modelUpgradePrompt, pluginAgentsMdPrompt, pluginDeveloperInstructionsPrompt, pluginDeveloperInstructionsOverwritePrompt, firstPartyMcpRemovalPrompt, } = options;
|
|
1046
1076
|
const pkgRoot = getPackageRoot();
|
|
1047
1077
|
const projectRoot = process.cwd();
|
|
1048
1078
|
const persistedPreferences = await readPersistedSetupPreferences(projectRoot, { warnOnLegacyScope: true });
|
|
@@ -1071,6 +1101,29 @@ export async function setup(options = {}) {
|
|
|
1071
1101
|
const resolvedInstallMode = await resolveSetupInstallMode(projectRoot, resolvedScope.scope, requestedInstallMode, installModePrompt, persistedReviewDecision, persistedPreferences);
|
|
1072
1102
|
const resolvedMcpMode = resolveSetupMcpMode(resolvedScope.scope, requestedMcpMode, persistedReviewDecision, persistedPreferences);
|
|
1073
1103
|
const scopeDirs = resolveScopeDirectories(resolvedScope.scope, projectRoot);
|
|
1104
|
+
const existingConfigForMcpMigration = existsSync(scopeDirs.codexConfigFile)
|
|
1105
|
+
? await readFile(scopeDirs.codexConfigFile, "utf-8")
|
|
1106
|
+
: "";
|
|
1107
|
+
const firstPartyMcpRegistrationKinds = [
|
|
1108
|
+
hasFirstPartyOmxMcpRegistrations(existingConfigForMcpMigration)
|
|
1109
|
+
? "config.toml [mcp_servers.omx_*]"
|
|
1110
|
+
: null,
|
|
1111
|
+
hasLocalOmxPluginMcpServerRegistrations(existingConfigForMcpMigration)
|
|
1112
|
+
? "plugin mcp_servers overrides"
|
|
1113
|
+
: null,
|
|
1114
|
+
].filter((kind) => typeof kind === "string");
|
|
1115
|
+
let removeFirstPartyMcpRegistrations = false;
|
|
1116
|
+
const shouldOfferFirstPartyMcpRemoval = resolvedMcpMode.mcpMode !== "compat" &&
|
|
1117
|
+
firstPartyMcpRegistrationKinds.length > 0;
|
|
1118
|
+
if (shouldOfferFirstPartyMcpRemoval) {
|
|
1119
|
+
const canPrompt = typeof firstPartyMcpRemovalPrompt === "function" ||
|
|
1120
|
+
(process.stdin.isTTY && process.stdout.isTTY);
|
|
1121
|
+
if (canPrompt) {
|
|
1122
|
+
removeFirstPartyMcpRegistrations = firstPartyMcpRemovalPrompt
|
|
1123
|
+
? await firstPartyMcpRemovalPrompt(scopeDirs.codexConfigFile, firstPartyMcpRegistrationKinds)
|
|
1124
|
+
: await promptForFirstPartyMcpRemoval(scopeDirs.codexConfigFile, firstPartyMcpRegistrationKinds);
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1074
1127
|
const scopeSourceMessage = resolvedScope.source === "persisted" ? " (from .omx/setup-scope.json)" : "";
|
|
1075
1128
|
const backupContext = getBackupContext(resolvedScope.scope, projectRoot);
|
|
1076
1129
|
const isPluginInstallMode = resolvedInstallMode?.installMode === "plugin";
|
|
@@ -1100,6 +1153,14 @@ export async function setup(options = {}) {
|
|
|
1100
1153
|
? " (from .omx/setup-scope.json)"
|
|
1101
1154
|
: "";
|
|
1102
1155
|
console.log(`Using setup MCP mode: ${resolvedMcpMode.mcpMode}${mcpModeSourceMessage}\n`);
|
|
1156
|
+
if (shouldOfferFirstPartyMcpRemoval) {
|
|
1157
|
+
if (removeFirstPartyMcpRegistrations) {
|
|
1158
|
+
console.log("Deprecated first-party OMX MCP registrations will be removed from config.toml during this setup run.\n");
|
|
1159
|
+
}
|
|
1160
|
+
else {
|
|
1161
|
+
console.log("warning: deprecated first-party OMX MCP registrations were detected but preserved. OMX supports CLI-first setup by default; rerun interactively and answer yes to remove them, or use --mcp compat only when explicit MCP compatibility is required.\n");
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1103
1164
|
// Step 1: Ensure directories exist
|
|
1104
1165
|
console.log("[1/8] Creating directories...");
|
|
1105
1166
|
const dirs = isPluginInstallMode
|
|
@@ -1269,14 +1330,19 @@ export async function setup(options = {}) {
|
|
|
1269
1330
|
console.log(` warning: ${warning}`);
|
|
1270
1331
|
}
|
|
1271
1332
|
if (isPluginInstallMode) {
|
|
1272
|
-
const configCleaned = await cleanupPluginModeLegacyConfig(scopeDirs.codexConfigFile, backupContext, {
|
|
1333
|
+
const configCleaned = await cleanupPluginModeLegacyConfig(scopeDirs.codexConfigFile, backupContext, {
|
|
1334
|
+
dryRun,
|
|
1335
|
+
verbose,
|
|
1336
|
+
preserveFirstPartyMcp: shouldOfferFirstPartyMcpRemoval &&
|
|
1337
|
+
!removeFirstPartyMcpRegistrations,
|
|
1338
|
+
});
|
|
1273
1339
|
if (configCleaned)
|
|
1274
1340
|
summary.config.removed += 1;
|
|
1275
1341
|
console.log(configCleaned
|
|
1276
1342
|
? ` ${dryRun ? "Would clean" : "Cleaned"} legacy OMX config entries for plugin mode.\n`
|
|
1277
1343
|
: " Config refresh skipped; no legacy OMX config entries found.\n");
|
|
1278
|
-
await applyPluginModeHooksConfig(scopeDirs.codexConfigFile, scopeDirs.codexHooksFile, pkgRoot, backupContext, summary.config, { dryRun, verbose, codexHookFeatureFlag });
|
|
1279
|
-
const pluginMarketplaceResult = await ensurePluginMarketplaceRegistration(scopeDirs.codexConfigFile, pkgRoot, resolvedMcpMode.mcpMode, backupContext, summary.config, { dryRun, verbose });
|
|
1344
|
+
await applyPluginModeHooksConfig(scopeDirs.codexConfigFile, scopeDirs.codexHooksFile, pkgRoot, scopeDirs.codexHomeDir, backupContext, summary.config, { dryRun, verbose, codexHookFeatureFlag });
|
|
1345
|
+
const pluginMarketplaceResult = await ensurePluginMarketplaceRegistration(scopeDirs.codexConfigFile, pkgRoot, resolvedMcpMode.mcpMode, removeFirstPartyMcpRegistrations, backupContext, summary.config, { dryRun, verbose });
|
|
1280
1346
|
if (pluginMarketplaceResult === "unavailable") {
|
|
1281
1347
|
console.log(` warning: packaged ${OMX_LOCAL_MARKETPLACE_NAME} Codex plugin marketplace metadata not found; /skills plugin discovery was not registered.`);
|
|
1282
1348
|
}
|
|
@@ -1286,16 +1352,24 @@ export async function setup(options = {}) {
|
|
|
1286
1352
|
else {
|
|
1287
1353
|
console.log(` Local Codex plugin marketplace ${OMX_LOCAL_MARKETPLACE_NAME} already registered (${pkgRoot}).`);
|
|
1288
1354
|
}
|
|
1355
|
+
const packagedMarketplace = await resolvePackagedOmxMarketplace(pkgRoot);
|
|
1289
1356
|
const pluginCacheRefresh = await refreshOmxPluginDiscoveryCache(pkgRoot, {
|
|
1290
1357
|
dryRun,
|
|
1291
1358
|
verbose,
|
|
1292
|
-
});
|
|
1359
|
+
}, scopeDirs.codexHomeDir);
|
|
1293
1360
|
if (pluginCacheRefresh.status === "refreshed") {
|
|
1294
1361
|
console.log(` ${dryRun ? "Would invalidate" : "Invalidated"} ${pluginCacheRefresh.staleDirs.length} stale Codex plugin discovery cache entr${pluginCacheRefresh.staleDirs.length === 1 ? "y" : "ies"} so plugin skills refresh from the packaged manifest.`);
|
|
1295
1362
|
}
|
|
1296
1363
|
else if (pluginCacheRefresh.status === "unchanged") {
|
|
1297
1364
|
console.log(" Codex plugin discovery cache already matches packaged plugin metadata.");
|
|
1298
1365
|
}
|
|
1366
|
+
const pluginCacheMaterialize = await materializePackagedOmxPluginCache(scopeDirs.codexHomeDir, packagedMarketplace, { dryRun });
|
|
1367
|
+
if (pluginCacheMaterialize.status === "materialized") {
|
|
1368
|
+
console.log(` ${dryRun ? "Would install" : "Installed"} local Codex plugin cache for ${OMX_LOCAL_MARKETPLACE_NAME}/${OMX_PLUGIN_NAME} at ${pluginCacheMaterialize.cacheDir}.`);
|
|
1369
|
+
}
|
|
1370
|
+
else if (pluginCacheMaterialize.status === "unchanged") {
|
|
1371
|
+
console.log(" Local Codex plugin cache already exposes packaged OMX skills.");
|
|
1372
|
+
}
|
|
1299
1373
|
if (shouldSyncSharedMcpRegistry) {
|
|
1300
1374
|
resolvedConfig = await syncSharedMcpRegistryIntoConfig(scopeDirs.codexConfigFile, sharedMcpRegistry, summary.config, backupContext, { dryRun, verbose });
|
|
1301
1375
|
if (resolvedScope.scope === "user") {
|
|
@@ -1328,7 +1402,7 @@ export async function setup(options = {}) {
|
|
|
1328
1402
|
}
|
|
1329
1403
|
else {
|
|
1330
1404
|
const statusLinePreset = await resolveStatusLinePresetForSetup(projectRoot, { force });
|
|
1331
|
-
const managedConfig = await updateManagedConfig(scopeDirs.codexConfigFile, scopeDirs.codexHooksFile, pkgRoot, sharedMcpRegistry, resolvedMcpMode.mcpMode, resolvedScope.scope, scopeDirs.codexHomeDir, summary.config, backupContext, {
|
|
1405
|
+
const managedConfig = await updateManagedConfig(scopeDirs.codexConfigFile, scopeDirs.codexHooksFile, pkgRoot, sharedMcpRegistry, resolvedMcpMode.mcpMode, shouldOfferFirstPartyMcpRemoval && !removeFirstPartyMcpRegistrations, resolvedScope.scope, scopeDirs.codexHomeDir, summary.config, backupContext, {
|
|
1332
1406
|
dryRun,
|
|
1333
1407
|
modelUpgradePrompt,
|
|
1334
1408
|
verbose,
|
|
@@ -1348,8 +1422,9 @@ export async function setup(options = {}) {
|
|
|
1348
1422
|
const existingHooksContent = existsSync(scopeDirs.codexHooksFile)
|
|
1349
1423
|
? await readFile(scopeDirs.codexHooksFile, "utf-8")
|
|
1350
1424
|
: null;
|
|
1351
|
-
const hooksConfig = mergeManagedCodexHooksConfig(existingHooksContent, pkgRoot);
|
|
1425
|
+
const hooksConfig = mergeManagedCodexHooksConfig(existingHooksContent, pkgRoot, scopeDirs.codexHooksFile, { platform: process.platform, codexHomeDir: scopeDirs.codexHomeDir });
|
|
1352
1426
|
await syncManagedContent(hooksConfig, scopeDirs.codexHooksFile, summary.config, backupContext, { dryRun, verbose }, `native hooks ${scopeDirs.codexHooksFile}`);
|
|
1427
|
+
await syncManagedWindowsNativeHookShim(scopeDirs.codexHomeDir, pkgRoot, summary.config, backupContext, { dryRun, verbose });
|
|
1353
1428
|
console.log(` Native Codex hooks refresh complete (${scopeDirs.codexHooksFile}).\n`);
|
|
1354
1429
|
}
|
|
1355
1430
|
// Step 5.5: Verify team CLI interop surface is available.
|
|
@@ -1656,6 +1731,13 @@ async function syncManagedContent(content, dstPath, summary, backupContext, opti
|
|
|
1656
1731
|
console.log(` ${options.dryRun ? "would update" : "updated"} ${verboseLabel}`);
|
|
1657
1732
|
}
|
|
1658
1733
|
}
|
|
1734
|
+
async function syncManagedWindowsNativeHookShim(codexHomeDir, pkgRoot, summary, backupContext, options) {
|
|
1735
|
+
if (process.platform !== "win32")
|
|
1736
|
+
return;
|
|
1737
|
+
const shimPath = buildManagedCodexNativeHookWindowsShimPath(codexHomeDir);
|
|
1738
|
+
const shimContent = buildManagedCodexNativeHookWindowsShimContent(pkgRoot);
|
|
1739
|
+
await syncManagedContent(shimContent, shimPath, summary, backupContext, options, `native hook Windows shim ${shimPath}`);
|
|
1740
|
+
}
|
|
1659
1741
|
async function syncManagedAgentsContent(content, dstPath, summary, backupContext, options) {
|
|
1660
1742
|
const destinationExists = existsSync(dstPath);
|
|
1661
1743
|
let existing = "";
|
|
@@ -2133,7 +2215,7 @@ async function buildNotifyMergePlan(existingConfig, pkgRoot, codexHomeDir, scope
|
|
|
2133
2215
|
},
|
|
2134
2216
|
};
|
|
2135
2217
|
}
|
|
2136
|
-
async function updateManagedConfig(configPath, hooksPath, pkgRoot, sharedMcpRegistry, mcpMode, scope, codexHomeDir, summary, backupContext, options) {
|
|
2218
|
+
async function updateManagedConfig(configPath, hooksPath, pkgRoot, sharedMcpRegistry, mcpMode, preserveExistingFirstPartyMcp, scope, codexHomeDir, summary, backupContext, options) {
|
|
2137
2219
|
const existing = existsSync(configPath)
|
|
2138
2220
|
? await readFile(configPath, "utf-8")
|
|
2139
2221
|
: "";
|
|
@@ -2157,6 +2239,8 @@ async function updateManagedConfig(configPath, hooksPath, pkgRoot, sharedMcpRegi
|
|
|
2157
2239
|
const finalConfig = buildMergedConfig(existing, pkgRoot, {
|
|
2158
2240
|
includeTui: omxManagesTui,
|
|
2159
2241
|
codexHooksFile: hooksPath,
|
|
2242
|
+
codexHomeDir,
|
|
2243
|
+
hookCommandPlatform: process.platform,
|
|
2160
2244
|
codexHookFeatureFlag: options.codexHookFeatureFlag,
|
|
2161
2245
|
modelOverride,
|
|
2162
2246
|
sharedMcpServers: sharedMcpRegistry.servers,
|
|
@@ -2166,6 +2250,7 @@ async function updateManagedConfig(configPath, hooksPath, pkgRoot, sharedMcpRegi
|
|
|
2166
2250
|
forceStatusLinePreset: options.forceStatusLinePreset,
|
|
2167
2251
|
notifyCommand: notifyPlan.notifyCommand,
|
|
2168
2252
|
includeFirstPartyMcp: mcpMode === "compat",
|
|
2253
|
+
preserveExistingFirstPartyMcp,
|
|
2169
2254
|
});
|
|
2170
2255
|
const changed = existing !== finalConfig;
|
|
2171
2256
|
if (!changed) {
|