oh-my-codex 0.18.7 → 0.18.9
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 +12 -12
- package/Cargo.toml +1 -1
- package/README.md +5 -5
- package/crates/omx-sparkshell/tests/execution.rs +1 -1
- package/dist/agents/__tests__/native-config.test.js +42 -1
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/definitions.d.ts +8 -0
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +1 -0
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/native-config.d.ts +5 -1
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +17 -2
- package/dist/agents/native-config.js.map +1 -1
- package/dist/autopilot/__tests__/fsm.test.js +3 -0
- package/dist/autopilot/__tests__/fsm.test.js.map +1 -1
- package/dist/autopilot/fsm.js +2 -2
- package/dist/autopilot/fsm.js.map +1 -1
- package/dist/cli/__tests__/auth.test.js +4 -2
- package/dist/cli/__tests__/auth.test.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +512 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +39 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +98 -6
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/package-bin-contract.test.js +28 -8
- package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js +26 -9
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +13 -0
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
- package/dist/cli/__tests__/ralph.test.js +14 -0
- package/dist/cli/__tests__/ralph.test.js.map +1 -1
- package/dist/cli/__tests__/resume.test.js +50 -1
- package/dist/cli/__tests__/resume.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +89 -0
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +65 -0
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/state.test.js +21 -0
- package/dist/cli/__tests__/state.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +2 -2
- package/dist/cli/__tests__/update.test.js +323 -18
- package/dist/cli/__tests__/update.test.js.map +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +8 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +21 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +143 -28
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plugin-marketplace.d.ts +14 -2
- package/dist/cli/plugin-marketplace.d.ts.map +1 -1
- package/dist/cli/plugin-marketplace.js +62 -15
- package/dist/cli/plugin-marketplace.js.map +1 -1
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +3 -1
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/setup-preferences.d.ts +2 -0
- package/dist/cli/setup-preferences.d.ts.map +1 -1
- package/dist/cli/setup-preferences.js +4 -0
- package/dist/cli/setup-preferences.js.map +1 -1
- package/dist/cli/setup.d.ts +3 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +166 -27
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/state.d.ts.map +1 -1
- package/dist/cli/state.js +8 -1
- package/dist/cli/state.js.map +1 -1
- package/dist/cli/tmux-hook.d.ts.map +1 -1
- package/dist/cli/tmux-hook.js +16 -0
- package/dist/cli/tmux-hook.js.map +1 -1
- package/dist/cli/update.d.ts +22 -3
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +312 -26
- package/dist/cli/update.js.map +1 -1
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +5 -9
- package/dist/cli/version.js.map +1 -1
- package/dist/compat/__tests__/doctor-contract.test.js +12 -1
- package/dist/compat/__tests__/doctor-contract.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +1 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/generator.d.ts +2 -2
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +2 -2
- package/dist/config/generator.js.map +1 -1
- package/dist/config/team-mode.d.ts +12 -0
- package/dist/config/team-mode.d.ts.map +1 -0
- package/dist/config/team-mode.js +91 -0
- package/dist/config/team-mode.js.map +1 -0
- package/dist/hooks/__tests__/agents-overlay.test.js +88 -0
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/code-review-skill-contract.test.js +12 -0
- package/dist/hooks/__tests__/code-review-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +30 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +423 -3
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +189 -0
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +35 -2
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +3 -3
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
- package/dist/hooks/__tests__/skill-guidance-contract.test.js +21 -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 +36 -50
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/plugin-runner.test.js +31 -0
- package/dist/hooks/extensibility/__tests__/plugin-runner.test.js.map +1 -1
- package/dist/hooks/extensibility/plugin-runner.js +17 -21
- package/dist/hooks/extensibility/plugin-runner.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +258 -12
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +6 -0
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hooks/session.d.ts +1 -0
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/__tests__/authority.test.js +435 -32
- package/dist/hud/__tests__/authority.test.js.map +1 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js +2 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
- package/dist/hud/__tests__/index.test.js +42 -0
- package/dist/hud/__tests__/index.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +642 -15
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/render.test.js +61 -0
- package/dist/hud/__tests__/render.test.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +160 -4
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +180 -21
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/authority.d.ts +5 -0
- package/dist/hud/authority.d.ts.map +1 -1
- package/dist/hud/authority.js +324 -28
- package/dist/hud/authority.js.map +1 -1
- package/dist/hud/index.d.ts +3 -2
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +42 -19
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/reconcile.d.ts +3 -3
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +128 -19
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +35 -0
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +65 -80
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/tmux.d.ts +24 -6
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +136 -38
- package/dist/hud/tmux.js.map +1 -1
- package/dist/hud/types.d.ts +11 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js.map +1 -1
- package/dist/mcp/__tests__/state-paths.test.js +71 -1
- package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
- package/dist/mcp/state-paths.d.ts +32 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +113 -17
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts +4 -4
- package/dist/question/__tests__/renderer.test.js +566 -1
- package/dist/question/__tests__/renderer.test.js.map +1 -1
- package/dist/question/renderer.d.ts +9 -1
- package/dist/question/renderer.d.ts.map +1 -1
- package/dist/question/renderer.js +246 -70
- package/dist/question/renderer.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +837 -101
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/notify-state-io.test.js +72 -1
- package/dist/scripts/__tests__/notify-state-io.test.js.map +1 -1
- package/dist/scripts/__tests__/notify-tmux-injection.test.d.ts +2 -0
- package/dist/scripts/__tests__/notify-tmux-injection.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/notify-tmux-injection.test.js +57 -0
- package/dist/scripts/__tests__/notify-tmux-injection.test.js.map +1 -0
- package/dist/scripts/__tests__/run-test-files.test.js +74 -0
- package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
- package/dist/scripts/__tests__/verify-native-agents.test.js +65 -0
- package/dist/scripts/__tests__/verify-native-agents.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +107 -39
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/eval/eval-parity-smoke.js +1 -1
- package/dist/scripts/eval/eval-parity-smoke.js.map +1 -1
- package/dist/scripts/notify-hook/auto-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/auto-nudge.js +3 -1
- package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/ralph-session-resume.d.ts.map +1 -1
- package/dist/scripts/notify-hook/ralph-session-resume.js +3 -10
- package/dist/scripts/notify-hook/ralph-session-resume.js.map +1 -1
- package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
- package/dist/scripts/notify-hook/state-io.js +62 -38
- package/dist/scripts/notify-hook/state-io.js.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.js +7 -0
- package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.d.ts +7 -0
- package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.js +24 -18
- package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
- package/dist/scripts/notify-hook.js +75 -11
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/scripts/run-test-files.js +193 -22
- package/dist/scripts/run-test-files.js.map +1 -1
- package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
- package/dist/scripts/sync-plugin-mirror.js +61 -3
- package/dist/scripts/sync-plugin-mirror.js.map +1 -1
- package/dist/scripts/verify-native-agents.d.ts.map +1 -1
- package/dist/scripts/verify-native-agents.js +58 -1
- package/dist/scripts/verify-native-agents.js.map +1 -1
- package/dist/state/__tests__/operations.test.js +113 -0
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/skill-active.test.js +3 -16
- package/dist/state/__tests__/skill-active.test.js.map +1 -1
- package/dist/state/__tests__/workflow-transition.test.js +25 -0
- package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +57 -2
- package/dist/state/operations.js.map +1 -1
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +7 -39
- package/dist/state/skill-active.js.map +1 -1
- package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
- package/dist/state/workflow-transition-reconcile.js +10 -14
- package/dist/state/workflow-transition-reconcile.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +1 -1
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +9 -4
- package/dist/team/__tests__/scaling.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +195 -2
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-runtime-identity.test.js +4 -2
- package/dist/team/__tests__/worker-runtime-identity.test.js.map +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +3 -2
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/tmux-session.d.ts +2 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +142 -12
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/utils/__tests__/platform-command.test.js +16 -1
- package/dist/utils/__tests__/platform-command.test.js.map +1 -1
- package/dist/utils/__tests__/version.test.d.ts +2 -0
- package/dist/utils/__tests__/version.test.d.ts.map +1 -0
- package/dist/utils/__tests__/version.test.js +51 -0
- package/dist/utils/__tests__/version.test.js.map +1 -0
- package/dist/utils/paths.d.ts +8 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +16 -4
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform-command.d.ts +9 -0
- package/dist/utils/platform-command.d.ts.map +1 -1
- package/dist/utils/platform-command.js +15 -0
- package/dist/utils/platform-command.js.map +1 -1
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +67 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/verification/__tests__/ci-rust-gates.test.js +89 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js +16 -2
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js.map +1 -1
- package/package.json +11 -10
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +334 -21
- package/plugins/oh-my-codex/hooks/hooks.json +1 -2
- package/plugins/oh-my-codex/skills/autopilot/SKILL.md +3 -1
- package/plugins/oh-my-codex/skills/code-review/SKILL.md +7 -7
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +51 -11
- package/plugins/oh-my-codex/skills/ralph/SKILL.md +22 -22
- package/plugins/oh-my-codex/skills/ultraqa/SKILL.md +9 -0
- package/skills/autopilot/SKILL.md +3 -1
- package/skills/code-review/SKILL.md +7 -7
- package/skills/deep-interview/SKILL.md +51 -11
- package/skills/ralph/SKILL.md +22 -22
- package/skills/ultraqa/SKILL.md +9 -0
- package/src/scripts/__tests__/codex-native-hook.test.ts +946 -98
- package/src/scripts/__tests__/notify-state-io.test.ts +95 -0
- package/src/scripts/__tests__/notify-tmux-injection.test.ts +82 -0
- package/src/scripts/__tests__/run-test-files.test.ts +102 -0
- package/src/scripts/__tests__/verify-native-agents.test.ts +75 -0
- package/src/scripts/codex-native-hook.ts +123 -34
- package/src/scripts/demo-team-e2e.sh +10 -7
- package/src/scripts/eval/eval-parity-smoke.ts +1 -1
- package/src/scripts/notify-hook/auto-nudge.ts +3 -1
- package/src/scripts/notify-hook/ralph-session-resume.ts +2 -8
- package/src/scripts/notify-hook/state-io.ts +75 -37
- package/src/scripts/notify-hook/team-leader-nudge.ts +7 -0
- package/src/scripts/notify-hook/tmux-injection.ts +35 -19
- package/src/scripts/notify-hook.ts +91 -4
- package/src/scripts/prepare-build.js +83 -0
- package/src/scripts/run-test-files.ts +192 -22
- package/src/scripts/sync-plugin-mirror.ts +98 -9
- package/src/scripts/verify-native-agents.ts +65 -1
- package/src/scripts/postinstall-bootstrap.js +0 -23
package/dist/cli/setup.js
CHANGED
|
@@ -20,10 +20,11 @@ import { readSessionState, isSessionStale } from "../hooks/session.js";
|
|
|
20
20
|
import { getCatalogHeadlineCounts } from "./catalog-contract.js";
|
|
21
21
|
import { tryReadCatalogManifest } from "../catalog/reader.js";
|
|
22
22
|
import { DEFAULT_FRONTIER_MODEL } from "../config/models.js";
|
|
23
|
+
import { teamModeEnabled, } from "../config/team-mode.js";
|
|
23
24
|
import { addGeneratedAgentsMarker, hasOmxAgentsContract, hasOmxManagedAgentsSections, isOmxGeneratedAgentsMd, upsertManagedAgentsBlock, } from "../utils/agents-md.js";
|
|
24
25
|
import { DEFAULT_HUD_CONFIG } from "../hud/types.js";
|
|
25
26
|
import { SETUP_INSTALL_MODES, SETUP_MCP_MODES, SETUP_SCOPES, getSetupScopeFilePath, readPersistedSetupPreferences, } from "./setup-preferences.js";
|
|
26
|
-
import { OMX_LOCAL_MARKETPLACE_NAME, OMX_PLUGIN_NAME, materializePackagedOmxPluginCache, resolvePackagedOmxMarketplace, upsertLocalOmxMarketplaceRegistration, upsertLocalOmxPluginEnablement, upsertLocalOmxPluginMcpServerEnablement, hasLocalOmxPluginMcpServerRegistrations, } from "./plugin-marketplace.js";
|
|
27
|
+
import { OMX_LOCAL_MARKETPLACE_NAME, OMX_PLUGIN_NAME, materializePackagedOmxPluginCache, resolvePackagedOmxMarketplace, upsertLocalOmxMarketplaceRegistration, upsertLocalOmxPluginEnablement, upsertLocalOmxPluginMcpServerEnablement, hasLocalOmxPluginMcpServerRegistrations, pluginHookCacheMatchesPackaged, } from "./plugin-marketplace.js";
|
|
27
28
|
import { resolveCodexHookFeatureSupportForCli } from "./codex-feature-probe.js";
|
|
28
29
|
async function resolveStatusLinePresetForSetup(projectRoot, options) {
|
|
29
30
|
if (options.force) {
|
|
@@ -46,6 +47,7 @@ async function resolveStatusLinePresetForSetup(projectRoot, options) {
|
|
|
46
47
|
}
|
|
47
48
|
import { resolveAgentsModelTableContext, upsertAgentsModelTable, } from "../utils/agents-model-table.js";
|
|
48
49
|
export { SETUP_INSTALL_MODES, SETUP_MCP_MODES, SETUP_SCOPES };
|
|
50
|
+
export { SETUP_TEAM_MODES } from "../config/team-mode.js";
|
|
49
51
|
const PROJECT_GITIGNORE_ENTRIES = [
|
|
50
52
|
".omx/",
|
|
51
53
|
".codex/*",
|
|
@@ -61,6 +63,9 @@ const LEGACY_PROJECT_GITIGNORE_ENTRIES = [".codex/"];
|
|
|
61
63
|
const SETUP_ONLY_INSTALLABLE_SKILLS = new Set(["wiki"]);
|
|
62
64
|
const DEFAULT_SETUP_MCP_MODE = "none";
|
|
63
65
|
const HARD_DEPRECATED_SKILL_NAMES = new Set(["web-clone"]);
|
|
66
|
+
const TEAM_MODE_SKILL_NAMES = new Set(["team", "worker"]);
|
|
67
|
+
const TEAM_MODE_PROMPT_NAMES = new Set(["team-executor"]);
|
|
68
|
+
const TEAM_MODE_NATIVE_AGENT_NAMES = new Set(["team-executor"]);
|
|
64
69
|
function isCatalogInstallableStatus(status) {
|
|
65
70
|
return status === "active" || status === "internal";
|
|
66
71
|
}
|
|
@@ -85,6 +90,65 @@ function applyPluginModeWordingToAgentsTemplate(content, scope) {
|
|
|
85
90
|
: "`~/.codex/skills`";
|
|
86
91
|
return scopedContent.replace(/Role prompts under `prompts\/\*\.md` are narrower execution surfaces\. They must follow this file, not override it\.\nWhen OMX is installed, load the installed prompt\/skill\/agent surfaces from [^\n]+active\)\./, `Registered Codex plugin marketplace surfaces supply OMX workflows and plugin-scoped companion resources when the plugin is installed. Native agent roles are installed as setup-owned Codex agent TOML files in plugin mode so agent_type routing works. They must follow this file, not override it.\nUser-installed skills may still live under ${userSkillPath}.`);
|
|
87
92
|
}
|
|
93
|
+
function stripNamedXmlSection(content, sectionName) {
|
|
94
|
+
return content.replace(new RegExp(`\\n?<${sectionName}>[\\s\\S]*?<\\/${sectionName}>\\n?`, "g"), "\n");
|
|
95
|
+
}
|
|
96
|
+
function applyTeamModeToAgentsTemplate(content, teamMode) {
|
|
97
|
+
if (teamModeEnabled(teamMode))
|
|
98
|
+
return content;
|
|
99
|
+
let next = content;
|
|
100
|
+
for (const section of ["team_compositions", "team_pipeline", "team_model_resolution"]) {
|
|
101
|
+
next = stripNamedXmlSection(next, section);
|
|
102
|
+
}
|
|
103
|
+
return next
|
|
104
|
+
.replace(/\(\+ \$team if needed\)/g, "")
|
|
105
|
+
.replace(/- `\$team` when[^\n]*\n/g, "")
|
|
106
|
+
.replace(/,?\s*`team`,?/g, "")
|
|
107
|
+
.replace(/\s*\|\s*`\$team ".*?"`\s*\|.*\|\n/g, "\n")
|
|
108
|
+
.replace(/,?\s*`\$team`/g, "")
|
|
109
|
+
.replace(/`\$team`,?\s*/g, "")
|
|
110
|
+
.replace(/\/?\s*`team`\/`swarm`/g, "`swarm`")
|
|
111
|
+
.split("\n")
|
|
112
|
+
.filter((line) => {
|
|
113
|
+
const normalized = line.toLowerCase();
|
|
114
|
+
if (normalized.includes("team mode"))
|
|
115
|
+
return false;
|
|
116
|
+
if (normalized.includes("team runtime"))
|
|
117
|
+
return false;
|
|
118
|
+
if (normalized.includes("team orchestration"))
|
|
119
|
+
return false;
|
|
120
|
+
if (normalized.includes("team/swarm"))
|
|
121
|
+
return false;
|
|
122
|
+
if (normalized.includes("team pipeline"))
|
|
123
|
+
return false;
|
|
124
|
+
if (normalized.includes("runtime/team"))
|
|
125
|
+
return false;
|
|
126
|
+
if (normalized.includes("team overlays"))
|
|
127
|
+
return false;
|
|
128
|
+
if (normalized.includes("team pane"))
|
|
129
|
+
return false;
|
|
130
|
+
if (normalized.startsWith("- teams may "))
|
|
131
|
+
return false;
|
|
132
|
+
if (normalized.includes("outside active `team`"))
|
|
133
|
+
return false;
|
|
134
|
+
if (normalized.includes("reserve `worker`"))
|
|
135
|
+
return false;
|
|
136
|
+
if (normalized.includes("worker` is a team-runtime"))
|
|
137
|
+
return false;
|
|
138
|
+
if (normalized.includes("team-plan"))
|
|
139
|
+
return false;
|
|
140
|
+
if (normalized.includes("omx team"))
|
|
141
|
+
return false;
|
|
142
|
+
return true;
|
|
143
|
+
})
|
|
144
|
+
.join("\n")
|
|
145
|
+
.replace(/\n{3,}/g, "\n\n");
|
|
146
|
+
}
|
|
147
|
+
function getAgentsModelTableDefinitionsForTeamMode(teamMode) {
|
|
148
|
+
if (teamModeEnabled(teamMode))
|
|
149
|
+
return AGENT_DEFINITIONS;
|
|
150
|
+
return Object.fromEntries(Object.entries(AGENT_DEFINITIONS).filter(([name]) => !TEAM_MODE_NATIVE_AGENT_NAMES.has(name)));
|
|
151
|
+
}
|
|
88
152
|
const REQUIRED_TEAM_CLI_API_MARKERS = [
|
|
89
153
|
"if (subcommand === 'api')",
|
|
90
154
|
"executeTeamApiOperation",
|
|
@@ -372,14 +436,17 @@ async function promptForFirstPartyMcpRemoval(configPath, registrationKinds) {
|
|
|
372
436
|
}
|
|
373
437
|
}
|
|
374
438
|
function hasPersistedSetupPreferences(preferences) {
|
|
375
|
-
return Boolean(preferences?.scope || preferences?.installMode);
|
|
439
|
+
return Boolean(preferences?.scope || preferences?.installMode || preferences?.teamMode);
|
|
376
440
|
}
|
|
377
441
|
function formatPersistedSetupPreferenceSummary(preferences) {
|
|
378
|
-
|
|
442
|
+
const summary = [
|
|
379
443
|
`scope=${preferences.scope ?? "not recorded"}`,
|
|
380
444
|
`installMode=${preferences.installMode ?? "not recorded"}`,
|
|
381
445
|
`mcpMode=${preferences.mcpMode ?? "not recorded"}`,
|
|
382
|
-
]
|
|
446
|
+
];
|
|
447
|
+
if (preferences.teamMode)
|
|
448
|
+
summary.push(`teamMode=${preferences.teamMode}`);
|
|
449
|
+
return summary.join(", ");
|
|
383
450
|
}
|
|
384
451
|
async function promptForPersistedSetupReview(preferences) {
|
|
385
452
|
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
@@ -631,6 +698,8 @@ async function refreshOmxPluginDiscoveryCache(pkgRoot, options, codexHomeDir = c
|
|
|
631
698
|
const hookFilesMissing = !existsSync(join(cacheDir, "hooks", "hooks.json"))
|
|
632
699
|
|| !existsSync(join(cacheDir, "hooks", "codex-native-hook.mjs"))
|
|
633
700
|
|| !existsSync(join(cacheDir, "hooks", "omx-command.json"));
|
|
701
|
+
const hookFilesChanged = !hookFilesMissing
|
|
702
|
+
&& !(await pluginHookCacheMatchesPackaged(cacheDir, packagedMarketplace));
|
|
634
703
|
const skillListChanged = expectedSkillNames !== null &&
|
|
635
704
|
cachedSkillNames !== null &&
|
|
636
705
|
JSON.stringify(cachedSkillNames) !== JSON.stringify(expectedSkillNames);
|
|
@@ -638,6 +707,7 @@ async function refreshOmxPluginDiscoveryCache(pkgRoot, options, codexHomeDir = c
|
|
|
638
707
|
!skillsPointerChanged &&
|
|
639
708
|
!hooksPointerChanged &&
|
|
640
709
|
!hookFilesMissing &&
|
|
710
|
+
!hookFilesChanged &&
|
|
641
711
|
!skillListChanged)
|
|
642
712
|
continue;
|
|
643
713
|
staleDirs.push(cacheDir);
|
|
@@ -656,6 +726,7 @@ async function refreshOmxPluginDiscoveryCache(pkgRoot, options, codexHomeDir = c
|
|
|
656
726
|
? `hooks pointer ${manifest.hooks ?? "missing"} -> ./hooks/hooks.json`
|
|
657
727
|
: null,
|
|
658
728
|
hookFilesMissing ? "plugin hook files missing" : null,
|
|
729
|
+
hookFilesChanged ? "plugin hook files changed" : null,
|
|
659
730
|
skillListChanged ? "skill directory list changed" : null,
|
|
660
731
|
].filter(Boolean);
|
|
661
732
|
console.log(` ${options.dryRun ? "would invalidate" : "invalidated"} Codex plugin discovery cache ${cacheDir} (${reasons.join(", ")})`);
|
|
@@ -1082,7 +1153,7 @@ async function cleanupPluginModeLegacyAgentsMd(agentsMdPath, backupContext, opti
|
|
|
1082
1153
|
return true;
|
|
1083
1154
|
}
|
|
1084
1155
|
export async function setup(options = {}) {
|
|
1085
|
-
const { force = false, dryRun = false, installMode: requestedInstallMode, mcpMode: requestedMcpMode, scope: requestedScope, verbose = false, setupScopePrompt, persistedSetupReviewPrompt, installModePrompt, modelUpgradePrompt, pluginAgentsMdPrompt, pluginDeveloperInstructionsPrompt, pluginDeveloperInstructionsOverwritePrompt, firstPartyMcpRemovalPrompt, } = options;
|
|
1156
|
+
const { force = false, dryRun = false, installMode: requestedInstallMode, mcpMode: requestedMcpMode, teamMode: requestedTeamMode, scope: requestedScope, verbose = false, setupScopePrompt, persistedSetupReviewPrompt, installModePrompt, modelUpgradePrompt, pluginAgentsMdPrompt, pluginDeveloperInstructionsPrompt, pluginDeveloperInstructionsOverwritePrompt, firstPartyMcpRemovalPrompt, } = options;
|
|
1086
1157
|
const pkgRoot = getPackageRoot();
|
|
1087
1158
|
const projectRoot = process.cwd();
|
|
1088
1159
|
const persistedPreferences = await readPersistedSetupPreferences(projectRoot, { warnOnLegacyScope: true });
|
|
@@ -1097,8 +1168,12 @@ export async function setup(options = {}) {
|
|
|
1097
1168
|
Boolean(persistedPreferences?.mcpMode) &&
|
|
1098
1169
|
(!persistedPreferences?.scope ||
|
|
1099
1170
|
persistedPreferences.scope === effectiveScopeForInstallMode);
|
|
1171
|
+
const wouldUsePersistedTeamMode = !requestedTeamMode &&
|
|
1172
|
+
Boolean(persistedPreferences?.teamMode) &&
|
|
1173
|
+
(!persistedPreferences?.scope ||
|
|
1174
|
+
persistedPreferences.scope === effectiveScopeForInstallMode);
|
|
1100
1175
|
const shouldReviewPersistedSetup = hasPersistedSetupPreferences(persistedPreferences) &&
|
|
1101
|
-
(wouldUsePersistedScope || wouldUsePersistedInstallMode || wouldUsePersistedMcpMode) &&
|
|
1176
|
+
(wouldUsePersistedScope || wouldUsePersistedInstallMode || wouldUsePersistedMcpMode || wouldUsePersistedTeamMode) &&
|
|
1102
1177
|
(typeof persistedSetupReviewPrompt === "function" ||
|
|
1103
1178
|
(process.stdin.isTTY && process.stdout.isTTY));
|
|
1104
1179
|
if (shouldReviewPersistedSetup) {
|
|
@@ -1110,6 +1185,13 @@ export async function setup(options = {}) {
|
|
|
1110
1185
|
const resolvedScope = await resolveSetupScope(projectRoot, requestedScope, persistedReviewDecision, persistedPreferences, setupScopePrompt);
|
|
1111
1186
|
const resolvedInstallMode = await resolveSetupInstallMode(projectRoot, resolvedScope.scope, requestedInstallMode, installModePrompt, persistedReviewDecision, persistedPreferences);
|
|
1112
1187
|
const resolvedMcpMode = resolveSetupMcpMode(resolvedScope.scope, requestedMcpMode, persistedReviewDecision, persistedPreferences);
|
|
1188
|
+
const resolvedTeamMode = requestedTeamMode
|
|
1189
|
+
?? (persistedReviewDecision !== "reset" &&
|
|
1190
|
+
(!persistedPreferences?.scope || persistedPreferences.scope === resolvedScope.scope)
|
|
1191
|
+
? persistedPreferences?.teamMode
|
|
1192
|
+
: undefined)
|
|
1193
|
+
?? "enabled";
|
|
1194
|
+
const isTeamModeEnabled = teamModeEnabled(resolvedTeamMode);
|
|
1113
1195
|
const scopeDirs = resolveScopeDirectories(resolvedScope.scope, projectRoot);
|
|
1114
1196
|
const existingConfigForMcpMigration = existsSync(scopeDirs.codexConfigFile)
|
|
1115
1197
|
? await readFile(scopeDirs.codexConfigFile, "utf-8")
|
|
@@ -1163,6 +1245,7 @@ export async function setup(options = {}) {
|
|
|
1163
1245
|
? " (from .omx/setup-scope.json)"
|
|
1164
1246
|
: "";
|
|
1165
1247
|
console.log(`Using setup MCP mode: ${resolvedMcpMode.mcpMode}${mcpModeSourceMessage}\n`);
|
|
1248
|
+
console.log(`Using setup Team mode: ${resolvedTeamMode}\n`);
|
|
1166
1249
|
if (shouldOfferFirstPartyMcpRemoval) {
|
|
1167
1250
|
if (removeFirstPartyMcpRegistrations) {
|
|
1168
1251
|
console.log("Deprecated first-party OMX MCP registrations will be removed from config.toml during this setup run.\n");
|
|
@@ -1200,6 +1283,9 @@ export async function setup(options = {}) {
|
|
|
1200
1283
|
const setupPreferencesToPersist = {
|
|
1201
1284
|
scope: resolvedScope.scope,
|
|
1202
1285
|
mcpMode: resolvedMcpMode.mcpMode,
|
|
1286
|
+
...(requestedTeamMode || persistedPreferences?.teamMode || resolvedTeamMode === "disabled"
|
|
1287
|
+
? { teamMode: resolvedTeamMode }
|
|
1288
|
+
: {}),
|
|
1203
1289
|
...(resolvedInstallMode &&
|
|
1204
1290
|
(resolvedScope.scope === "user" ||
|
|
1205
1291
|
resolvedInstallMode.installMode === "plugin")
|
|
@@ -1234,7 +1320,7 @@ export async function setup(options = {}) {
|
|
|
1234
1320
|
: " Prompt refresh skipped; no legacy OMX-managed prompt files found.\n");
|
|
1235
1321
|
}
|
|
1236
1322
|
else {
|
|
1237
|
-
summary.prompts = await installPrompts(promptsSrc, promptsDst, backupContext, { force, dryRun, verbose });
|
|
1323
|
+
summary.prompts = await installPrompts(promptsSrc, promptsDst, backupContext, { force, dryRun, verbose, teamMode: resolvedTeamMode });
|
|
1238
1324
|
const cleanedLegacyPromptShims = await cleanupLegacySkillPromptShims(promptsSrc, promptsDst, {
|
|
1239
1325
|
dryRun,
|
|
1240
1326
|
verbose,
|
|
@@ -1282,6 +1368,7 @@ export async function setup(options = {}) {
|
|
|
1282
1368
|
force,
|
|
1283
1369
|
dryRun,
|
|
1284
1370
|
verbose,
|
|
1371
|
+
teamMode: resolvedTeamMode,
|
|
1285
1372
|
});
|
|
1286
1373
|
}
|
|
1287
1374
|
if (catalogCounts) {
|
|
@@ -1299,6 +1386,7 @@ export async function setup(options = {}) {
|
|
|
1299
1386
|
dryRun,
|
|
1300
1387
|
verbose,
|
|
1301
1388
|
preserveUnmanagedObsoleteNativeAgents: true,
|
|
1389
|
+
teamMode: resolvedTeamMode,
|
|
1302
1390
|
});
|
|
1303
1391
|
console.log(` Native agent role refresh complete (${scopeDirs.nativeAgentsDir}); plugin mode still installs role TOML so agent_type routing works.\n`);
|
|
1304
1392
|
}
|
|
@@ -1307,6 +1395,7 @@ export async function setup(options = {}) {
|
|
|
1307
1395
|
force,
|
|
1308
1396
|
dryRun,
|
|
1309
1397
|
verbose,
|
|
1398
|
+
teamMode: resolvedTeamMode,
|
|
1310
1399
|
});
|
|
1311
1400
|
console.log(` Native agent refresh complete (${scopeDirs.nativeAgentsDir}).\n`);
|
|
1312
1401
|
}
|
|
@@ -1385,7 +1474,7 @@ export async function setup(options = {}) {
|
|
|
1385
1474
|
else if (pluginCacheRefresh.status === "unchanged") {
|
|
1386
1475
|
console.log(" Codex plugin discovery cache already matches packaged plugin metadata.");
|
|
1387
1476
|
}
|
|
1388
|
-
const pluginCacheMaterialize = await materializePackagedOmxPluginCache(scopeDirs.codexHomeDir, packagedMarketplace, { dryRun });
|
|
1477
|
+
const pluginCacheMaterialize = await materializePackagedOmxPluginCache(scopeDirs.codexHomeDir, packagedMarketplace, { dryRun, teamMode: resolvedTeamMode });
|
|
1389
1478
|
if (pluginCacheMaterialize.status === "materialized") {
|
|
1390
1479
|
console.log(` ${dryRun ? "Would install" : "Installed"} local Codex plugin cache for ${OMX_LOCAL_MARKETPLACE_NAME}/${OMX_PLUGIN_NAME} at ${pluginCacheMaterialize.cacheDir}.`);
|
|
1391
1480
|
}
|
|
@@ -1451,15 +1540,20 @@ export async function setup(options = {}) {
|
|
|
1451
1540
|
await syncManagedWindowsNativeHookShim(scopeDirs.codexHomeDir, pkgRoot, summary.config, backupContext, { dryRun, verbose });
|
|
1452
1541
|
console.log(` Native Codex hooks refresh complete (${scopeDirs.codexHooksFile}).\n`);
|
|
1453
1542
|
}
|
|
1454
|
-
// Step 5.5: Verify team CLI interop surface is available.
|
|
1543
|
+
// Step 5.5: Verify team CLI interop surface is available when Team is enabled.
|
|
1455
1544
|
console.log("[5.5/8] Verifying Team CLI API interop...");
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1545
|
+
if (isTeamModeEnabled) {
|
|
1546
|
+
const teamToolsCheck = await verifyTeamCliApiInterop(pkgRoot);
|
|
1547
|
+
if (teamToolsCheck.ok) {
|
|
1548
|
+
console.log(" omx team api command detected (CLI-first interop ready)");
|
|
1549
|
+
}
|
|
1550
|
+
else {
|
|
1551
|
+
console.log(` WARNING: ${teamToolsCheck.message}`);
|
|
1552
|
+
console.log(" Run `npm run build` and then re-run `omx setup`.");
|
|
1553
|
+
}
|
|
1459
1554
|
}
|
|
1460
1555
|
else {
|
|
1461
|
-
console.log(
|
|
1462
|
-
console.log(" Run `npm run build` and then re-run `omx setup`.");
|
|
1556
|
+
console.log(" Skipped because Team mode is disabled for this setup.");
|
|
1463
1557
|
}
|
|
1464
1558
|
console.log();
|
|
1465
1559
|
// Step 6: Generate AGENTS.md
|
|
@@ -1477,7 +1571,8 @@ export async function setup(options = {}) {
|
|
|
1477
1571
|
const modelTableContext = resolveAgentsModelTableContext(resolvedConfig, {
|
|
1478
1572
|
codexHomeOverride: scopeDirs.codexHomeDir,
|
|
1479
1573
|
});
|
|
1480
|
-
const
|
|
1574
|
+
const modelTableDefinitions = getAgentsModelTableDefinitionsForTeamMode(resolvedTeamMode);
|
|
1575
|
+
const rewritten = upsertAgentsModelTable(addGeneratedAgentsMarker(applyTeamModeToAgentsTemplate(applyPluginModeWordingToAgentsTemplate(content, resolvedScope.scope), resolvedTeamMode)), modelTableContext, modelTableDefinitions);
|
|
1481
1576
|
const result = await syncManagedAgentsContent(rewritten, pluginAgentsMdDst, summary.agentsMd, backupContext, {
|
|
1482
1577
|
agentsOverwritePrompt: options.agentsOverwritePrompt,
|
|
1483
1578
|
dryRun,
|
|
@@ -1526,9 +1621,11 @@ export async function setup(options = {}) {
|
|
|
1526
1621
|
const modelTableContext = resolveAgentsModelTableContext(resolvedConfig, {
|
|
1527
1622
|
codexHomeOverride: scopeDirs.codexHomeDir,
|
|
1528
1623
|
});
|
|
1529
|
-
const
|
|
1624
|
+
const modelTableDefinitions = getAgentsModelTableDefinitionsForTeamMode(resolvedTeamMode);
|
|
1625
|
+
const rewritten = upsertAgentsModelTable(addGeneratedAgentsMarker(applyTeamModeToAgentsTemplate(applyScopePathRewritesToAgentsTemplate(content, resolvedScope.scope), resolvedTeamMode)), modelTableContext, modelTableDefinitions);
|
|
1530
1626
|
let changed = true;
|
|
1531
1627
|
let canApplyManagedModelRefresh = false;
|
|
1628
|
+
let canApplyManagedRefreshDuringActiveSession = false;
|
|
1532
1629
|
let managedRefreshContent = "";
|
|
1533
1630
|
let canApplyManagedAgentsMerge = false;
|
|
1534
1631
|
let mergedAgentsContent = "";
|
|
@@ -1546,15 +1643,25 @@ export async function setup(options = {}) {
|
|
|
1546
1643
|
}
|
|
1547
1644
|
else {
|
|
1548
1645
|
if (hasOmxManagedAgentsSections(existing)) {
|
|
1549
|
-
|
|
1646
|
+
const existingIsGeneratedAgentsMd = isOmxGeneratedAgentsMd(existing);
|
|
1647
|
+
managedRefreshContent = teamModeEnabled(resolvedTeamMode)
|
|
1648
|
+
? upsertAgentsModelTable(existing, modelTableContext, modelTableDefinitions)
|
|
1649
|
+
: existingIsGeneratedAgentsMd
|
|
1650
|
+
? rewritten
|
|
1651
|
+
: upsertManagedAgentsBlock(existing, rewritten);
|
|
1550
1652
|
canApplyManagedModelRefresh = managedRefreshContent !== existing;
|
|
1653
|
+
canApplyManagedRefreshDuringActiveSession =
|
|
1654
|
+
canApplyManagedModelRefresh &&
|
|
1655
|
+
!teamModeEnabled(resolvedTeamMode) &&
|
|
1656
|
+
existingIsGeneratedAgentsMd;
|
|
1551
1657
|
}
|
|
1552
1658
|
}
|
|
1553
1659
|
}
|
|
1554
1660
|
if (resolvedScope.scope === "project" &&
|
|
1555
1661
|
sessionIsActive &&
|
|
1556
1662
|
agentsMdExists &&
|
|
1557
|
-
(changed || canApplyManagedAgentsMerge || canApplyManagedModelRefresh)
|
|
1663
|
+
(changed || canApplyManagedAgentsMerge || canApplyManagedModelRefresh) &&
|
|
1664
|
+
!canApplyManagedRefreshDuringActiveSession) {
|
|
1558
1665
|
summary.agentsMd.skipped += 1;
|
|
1559
1666
|
console.log(" WARNING: Active omx session detected (pid " +
|
|
1560
1667
|
activeSession?.pid +
|
|
@@ -1833,6 +1940,13 @@ async function installPrompts(srcDir, dstDir, backupContext, options) {
|
|
|
1833
1940
|
if (!file.endsWith(".md"))
|
|
1834
1941
|
continue;
|
|
1835
1942
|
const promptName = file.slice(0, -3);
|
|
1943
|
+
if (!teamModeEnabled(options.teamMode) && TEAM_MODE_PROMPT_NAMES.has(promptName)) {
|
|
1944
|
+
summary.skipped += 1;
|
|
1945
|
+
if (options.verbose) {
|
|
1946
|
+
console.log(` skipped ${file} (Team mode disabled)`);
|
|
1947
|
+
}
|
|
1948
|
+
continue;
|
|
1949
|
+
}
|
|
1836
1950
|
const status = agentStatusByName?.get(promptName);
|
|
1837
1951
|
if (manifest && !isSetupPromptAssetName(promptName, manifest)) {
|
|
1838
1952
|
summary.skipped += 1;
|
|
@@ -1849,14 +1963,17 @@ async function installPrompts(srcDir, dstDir, backupContext, options) {
|
|
|
1849
1963
|
continue;
|
|
1850
1964
|
await syncManagedFileFromDisk(src, dst, summary, backupContext, options, `prompt ${file}`);
|
|
1851
1965
|
}
|
|
1852
|
-
if (
|
|
1966
|
+
if (manifest && existsSync(dstDir)) {
|
|
1853
1967
|
const installedFiles = await readdir(dstDir);
|
|
1854
1968
|
for (const file of installedFiles) {
|
|
1855
1969
|
if (!file.endsWith(".md"))
|
|
1856
1970
|
continue;
|
|
1857
1971
|
const promptName = file.slice(0, -3);
|
|
1858
1972
|
const status = agentStatusByName?.get(promptName);
|
|
1859
|
-
|
|
1973
|
+
const disabledTeamPrompt = !teamModeEnabled(options.teamMode) && TEAM_MODE_PROMPT_NAMES.has(promptName);
|
|
1974
|
+
if (isSetupPromptAssetName(promptName, manifest) && !disabledTeamPrompt)
|
|
1975
|
+
continue;
|
|
1976
|
+
if (!options.force && !disabledTeamPrompt)
|
|
1860
1977
|
continue;
|
|
1861
1978
|
const stalePromptPath = join(dstDir, file);
|
|
1862
1979
|
if (!existsSync(stalePromptPath))
|
|
@@ -1873,7 +1990,8 @@ async function installPrompts(srcDir, dstDir, backupContext, options) {
|
|
|
1873
1990
|
? "would remove stale prompt"
|
|
1874
1991
|
: "removed stale prompt";
|
|
1875
1992
|
const label = status ?? "unlisted";
|
|
1876
|
-
|
|
1993
|
+
const reason = disabledTeamPrompt ? ", Team mode disabled" : "";
|
|
1994
|
+
console.log(` ${prefix} ${file} (status: ${label}${reason})`);
|
|
1877
1995
|
}
|
|
1878
1996
|
}
|
|
1879
1997
|
}
|
|
@@ -1943,6 +2061,13 @@ async function refreshNativeAgentConfigs(pkgRoot, agentsDir, backupContext, opti
|
|
|
1943
2061
|
: Object.keys(AGENT_DEFINITIONS).sort();
|
|
1944
2062
|
for (const name of nativeAgentNames) {
|
|
1945
2063
|
staleCandidateNativeAgentNames.add(name);
|
|
2064
|
+
if (!teamModeEnabled(options.teamMode) && TEAM_MODE_NATIVE_AGENT_NAMES.has(name)) {
|
|
2065
|
+
summary.skipped += 1;
|
|
2066
|
+
if (options.verbose) {
|
|
2067
|
+
console.log(` skipped native agent ${name}.toml (Team mode disabled)`);
|
|
2068
|
+
}
|
|
2069
|
+
continue;
|
|
2070
|
+
}
|
|
1946
2071
|
const agent = AGENT_DEFINITIONS[name];
|
|
1947
2072
|
if (!agent) {
|
|
1948
2073
|
if (options.verbose) {
|
|
@@ -1968,14 +2093,17 @@ async function refreshNativeAgentConfigs(pkgRoot, agentsDir, backupContext, opti
|
|
|
1968
2093
|
summary.backedUp += generatedCleanup.backedUp;
|
|
1969
2094
|
summary.removed += generatedCleanup.removed;
|
|
1970
2095
|
}
|
|
1971
|
-
if (
|
|
2096
|
+
if (manifest && existsSync(agentsDir)) {
|
|
1972
2097
|
const installedFiles = await readdir(agentsDir);
|
|
1973
2098
|
for (const file of installedFiles) {
|
|
1974
2099
|
if (!file.endsWith(".toml"))
|
|
1975
2100
|
continue;
|
|
1976
2101
|
const agentName = file.slice(0, -5);
|
|
1977
2102
|
const agentStatus = agentStatusByName?.get(agentName);
|
|
1978
|
-
|
|
2103
|
+
const disabledTeamAgent = !teamModeEnabled(options.teamMode) && TEAM_MODE_NATIVE_AGENT_NAMES.has(agentName);
|
|
2104
|
+
if (isNativeAgentInstallableStatus(agentStatus) && !disabledTeamAgent)
|
|
2105
|
+
continue;
|
|
2106
|
+
if (!options.force && !disabledTeamAgent)
|
|
1979
2107
|
continue;
|
|
1980
2108
|
if (!staleCandidateNativeAgentNames.has(agentName) &&
|
|
1981
2109
|
agentStatus === undefined)
|
|
@@ -1995,7 +2123,8 @@ async function refreshNativeAgentConfigs(pkgRoot, agentsDir, backupContext, opti
|
|
|
1995
2123
|
? "would remove stale native agent"
|
|
1996
2124
|
: "removed stale native agent";
|
|
1997
2125
|
const label = agentStatus ?? "unlisted";
|
|
1998
|
-
|
|
2126
|
+
const reason = disabledTeamAgent ? ", Team mode disabled" : "";
|
|
2127
|
+
console.log(` ${prefix} ${file} (status: ${label}${reason})`);
|
|
1999
2128
|
}
|
|
2000
2129
|
}
|
|
2001
2130
|
}
|
|
@@ -2060,6 +2189,13 @@ export async function installSkills(srcDir, dstDir, backupContext, options) {
|
|
|
2060
2189
|
if (!entry.isDirectory())
|
|
2061
2190
|
continue;
|
|
2062
2191
|
staleCandidateSkillNames.add(entry.name);
|
|
2192
|
+
if (!teamModeEnabled(options.teamMode) && TEAM_MODE_SKILL_NAMES.has(entry.name)) {
|
|
2193
|
+
summary.skipped += 1;
|
|
2194
|
+
if (options.verbose) {
|
|
2195
|
+
console.log(` skipped ${entry.name}/ (Team mode disabled)`);
|
|
2196
|
+
}
|
|
2197
|
+
continue;
|
|
2198
|
+
}
|
|
2063
2199
|
const status = skillStatusByName?.get(entry.name);
|
|
2064
2200
|
if (skillStatusByName && !isSetupInstallableSkill(entry.name, status)) {
|
|
2065
2201
|
summary.skipped += 1;
|
|
@@ -2107,10 +2243,11 @@ export async function installSkills(srcDir, dstDir, backupContext, options) {
|
|
|
2107
2243
|
if (manifest && existsSync(dstDir)) {
|
|
2108
2244
|
for (const staleSkill of staleCandidateSkillNames) {
|
|
2109
2245
|
const status = skillStatusByName?.get(staleSkill);
|
|
2110
|
-
|
|
2246
|
+
const disabledTeamSkill = !teamModeEnabled(options.teamMode) && TEAM_MODE_SKILL_NAMES.has(staleSkill);
|
|
2247
|
+
if (isSetupInstallableSkill(staleSkill, status) && !disabledTeamSkill)
|
|
2111
2248
|
continue;
|
|
2112
2249
|
const hardDeprecated = HARD_DEPRECATED_SKILL_NAMES.has(staleSkill);
|
|
2113
|
-
if (!options.force && !hardDeprecated)
|
|
2250
|
+
if (!options.force && !hardDeprecated && !disabledTeamSkill)
|
|
2114
2251
|
continue;
|
|
2115
2252
|
const staleSkillDir = join(dstDir, staleSkill);
|
|
2116
2253
|
if (!existsSync(staleSkillDir))
|
|
@@ -2124,7 +2261,9 @@ export async function installSkills(srcDir, dstDir, backupContext, options) {
|
|
|
2124
2261
|
? "would remove stale skill"
|
|
2125
2262
|
: "removed stale skill";
|
|
2126
2263
|
const label = status ?? "unlisted";
|
|
2127
|
-
const reason =
|
|
2264
|
+
const reason = disabledTeamSkill
|
|
2265
|
+
? ", Team mode disabled"
|
|
2266
|
+
: hardDeprecated ? ", hard-deprecated" : "";
|
|
2128
2267
|
console.log(` ${prefix} ${staleSkill}/ (status: ${label}${reason})`);
|
|
2129
2268
|
}
|
|
2130
2269
|
}
|