oh-my-codex 0.10.2 → 0.10.3
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.de.md +4 -4
- package/README.es.md +4 -4
- package/README.fr.md +4 -4
- package/README.it.md +4 -4
- package/README.ja.md +4 -4
- package/README.ko.md +4 -4
- package/README.md +13 -7
- package/README.pt.md +4 -4
- package/README.ru.md +4 -4
- package/README.tr.md +4 -4
- package/README.vi.md +4 -4
- package/README.zh-TW.md +4 -4
- package/README.zh.md +4 -4
- package/dist/agents/__tests__/native-config.test.js +37 -33
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/__tests__/skill-bridge.test.d.ts +2 -0
- package/dist/agents/__tests__/skill-bridge.test.d.ts.map +1 -0
- package/dist/agents/__tests__/skill-bridge.test.js +71 -0
- package/dist/agents/__tests__/skill-bridge.test.js.map +1 -0
- package/dist/agents/native-config.d.ts +18 -6
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +109 -92
- package/dist/agents/native-config.js.map +1 -1
- package/dist/agents/skill-bridge.d.ts +20 -0
- package/dist/agents/skill-bridge.d.ts.map +1 -0
- package/dist/agents/skill-bridge.js +150 -0
- package/dist/agents/skill-bridge.js.map +1 -0
- package/dist/autoresearch/__tests__/contracts.test.js +37 -1
- package/dist/autoresearch/__tests__/contracts.test.js.map +1 -1
- package/dist/autoresearch/__tests__/runtime-parity-extra.test.js +10 -10
- package/dist/autoresearch/__tests__/runtime-parity-extra.test.js.map +1 -1
- package/dist/autoresearch/__tests__/runtime.test.js +2 -2
- package/dist/autoresearch/__tests__/runtime.test.js.map +1 -1
- package/dist/autoresearch/contracts.d.ts.map +1 -1
- package/dist/autoresearch/contracts.js +17 -10
- package/dist/autoresearch/contracts.js.map +1 -1
- package/dist/autoresearch/runtime.d.ts.map +1 -1
- package/dist/autoresearch/runtime.js +71 -96
- package/dist/autoresearch/runtime.js.map +1 -1
- package/dist/cli/__tests__/agents-init.test.js +2 -0
- package/dist/cli/__tests__/agents-init.test.js.map +1 -1
- package/dist/cli/__tests__/agents.test.d.ts +2 -0
- package/dist/cli/__tests__/agents.test.d.ts.map +1 -0
- package/dist/cli/__tests__/agents.test.js +114 -0
- package/dist/cli/__tests__/agents.test.js.map +1 -0
- package/dist/cli/__tests__/autoresearch-guided.test.js +156 -1
- package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch.test.js +195 -24
- package/dist/cli/__tests__/autoresearch.test.js.map +1 -1
- package/dist/cli/__tests__/cleanup.test.d.ts +2 -0
- package/dist/cli/__tests__/cleanup.test.d.ts.map +1 -0
- package/dist/cli/__tests__/cleanup.test.js +213 -0
- package/dist/cli/__tests__/cleanup.test.js.map +1 -0
- package/dist/cli/__tests__/error-handling-warnings.test.js +1 -1
- package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +3 -3
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +521 -401
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/native-assets.test.js +72 -9
- package/dist/cli/__tests__/native-assets.test.js.map +1 -1
- package/dist/cli/__tests__/ralphthon.test.d.ts +2 -0
- package/dist/cli/__tests__/ralphthon.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralphthon.test.js +28 -0
- package/dist/cli/__tests__/ralphthon.test.js.map +1 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +36 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js +35 -5
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +2 -2
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +131 -161
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/setup-skills-overwrite.test.js +10 -10
- package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js +28 -2
- package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +1 -112
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/uninstall.test.js +7 -20
- package/dist/cli/__tests__/uninstall.test.js.map +1 -1
- package/dist/cli/agents-init.d.ts.map +1 -1
- package/dist/cli/agents-init.js +99 -95
- package/dist/cli/agents-init.js.map +1 -1
- package/dist/cli/agents.d.ts +14 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +261 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/autoresearch-guided.d.ts +8 -0
- package/dist/cli/autoresearch-guided.d.ts.map +1 -1
- package/dist/cli/autoresearch-guided.js +104 -37
- package/dist/cli/autoresearch-guided.js.map +1 -1
- package/dist/cli/autoresearch-intake.d.ts +60 -0
- package/dist/cli/autoresearch-intake.d.ts.map +1 -0
- package/dist/cli/autoresearch-intake.js +318 -0
- package/dist/cli/autoresearch-intake.js.map +1 -0
- package/dist/cli/autoresearch.d.ts +3 -1
- package/dist/cli/autoresearch.d.ts.map +1 -1
- package/dist/cli/autoresearch.js +64 -10
- package/dist/cli/autoresearch.js.map +1 -1
- package/dist/cli/cleanup.d.ts +52 -0
- package/dist/cli/cleanup.d.ts.map +1 -0
- package/dist/cli/cleanup.js +302 -0
- package/dist/cli/cleanup.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +9 -37
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +5 -4
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +5 -7
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +610 -427
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/native-assets.d.ts +15 -1
- package/dist/cli/native-assets.d.ts.map +1 -1
- package/dist/cli/native-assets.js +134 -32
- package/dist/cli/native-assets.js.map +1 -1
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +38 -1
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/ralphthon.d.ts +14 -0
- package/dist/cli/ralphthon.d.ts.map +1 -0
- package/dist/cli/ralphthon.js +234 -0
- package/dist/cli/ralphthon.js.map +1 -0
- package/dist/cli/setup.d.ts +1 -4
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +111 -76
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/sparkshell.d.ts +3 -1
- package/dist/cli/sparkshell.d.ts.map +1 -1
- package/dist/cli/sparkshell.js +35 -16
- package/dist/cli/sparkshell.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +1 -0
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/uninstall.d.ts +1 -1
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +82 -64
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +10 -10
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +15 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/generator.d.ts +0 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +53 -42
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +295 -230
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +49 -24
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.js +193 -0
- package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.js.map +1 -0
- package/dist/hooks/agents-overlay.d.ts +1 -1
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +109 -106
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/modes/base.d.ts +1 -1
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +1 -1
- package/dist/modes/base.js.map +1 -1
- package/dist/ralphthon/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/ralphthon/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/ralphthon/__tests__/bootstrap.test.js +23 -0
- package/dist/ralphthon/__tests__/bootstrap.test.js.map +1 -0
- package/dist/ralphthon/__tests__/orchestrator.test.d.ts +2 -0
- package/dist/ralphthon/__tests__/orchestrator.test.d.ts.map +1 -0
- package/dist/ralphthon/__tests__/orchestrator.test.js +309 -0
- package/dist/ralphthon/__tests__/orchestrator.test.js.map +1 -0
- package/dist/ralphthon/__tests__/prd.test.d.ts +2 -0
- package/dist/ralphthon/__tests__/prd.test.d.ts.map +1 -0
- package/dist/ralphthon/__tests__/prd.test.js +133 -0
- package/dist/ralphthon/__tests__/prd.test.js.map +1 -0
- package/dist/ralphthon/bootstrap.d.ts +3 -0
- package/dist/ralphthon/bootstrap.d.ts.map +1 -0
- package/dist/ralphthon/bootstrap.js +84 -0
- package/dist/ralphthon/bootstrap.js.map +1 -0
- package/dist/ralphthon/orchestrator.d.ts +50 -0
- package/dist/ralphthon/orchestrator.d.ts.map +1 -0
- package/dist/ralphthon/orchestrator.js +362 -0
- package/dist/ralphthon/orchestrator.js.map +1 -0
- package/dist/ralphthon/prd.d.ts +191 -0
- package/dist/ralphthon/prd.d.ts.map +1 -0
- package/dist/ralphthon/prd.js +355 -0
- package/dist/ralphthon/prd.js.map +1 -0
- package/dist/ralphthon/runtime.d.ts +31 -0
- package/dist/ralphthon/runtime.d.ts.map +1 -0
- package/dist/ralphthon/runtime.js +104 -0
- package/dist/ralphthon/runtime.js.map +1 -0
- package/dist/ralphthon/tmux.d.ts +3 -0
- package/dist/ralphthon/tmux.d.ts.map +1 -0
- package/dist/ralphthon/tmux.js +39 -0
- package/dist/ralphthon/tmux.js.map +1 -0
- package/dist/subagents/__tests__/tracker.test.d.ts +2 -0
- package/dist/subagents/__tests__/tracker.test.d.ts.map +1 -0
- package/dist/subagents/__tests__/tracker.test.js +47 -0
- package/dist/subagents/__tests__/tracker.test.js.map +1 -0
- package/dist/subagents/tracker.d.ts +52 -0
- package/dist/subagents/tracker.d.ts.map +1 -0
- package/dist/subagents/tracker.js +175 -0
- package/dist/subagents/tracker.js.map +1 -0
- package/dist/team/__tests__/worker-bootstrap.test.js +189 -163
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/__tests__/worktree.test.js +1 -1
- package/dist/team/__tests__/worktree.test.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +1 -1
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +58 -63
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/team/worktree.js +1 -1
- package/dist/team/worktree.js.map +1 -1
- package/dist/utils/__tests__/agents-md.test.d.ts +2 -0
- package/dist/utils/__tests__/agents-md.test.d.ts.map +1 -0
- package/dist/utils/__tests__/agents-md.test.js +32 -0
- package/dist/utils/__tests__/agents-md.test.js.map +1 -0
- package/dist/utils/__tests__/agents-model-table.test.d.ts +2 -0
- package/dist/utils/__tests__/agents-model-table.test.d.ts.map +1 -0
- package/dist/utils/__tests__/agents-model-table.test.js +84 -0
- package/dist/utils/__tests__/agents-model-table.test.js.map +1 -0
- package/dist/utils/__tests__/paths.test.js +78 -83
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/agents-md.d.ts.map +1 -1
- package/dist/utils/agents-md.js +10 -0
- package/dist/utils/agents-md.js.map +1 -1
- package/dist/utils/agents-model-table.d.ts +16 -0
- package/dist/utils/agents-model-table.d.ts.map +1 -0
- package/dist/utils/agents-model-table.js +83 -0
- package/dist/utils/agents-model-table.js.map +1 -0
- package/dist/utils/paths.d.ts +6 -6
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +31 -31
- package/dist/utils/paths.js.map +1 -1
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js +21 -3
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
- package/dist/verification/__tests__/native-release-manifest.test.d.ts +2 -0
- package/dist/verification/__tests__/native-release-manifest.test.d.ts.map +1 -0
- package/dist/verification/__tests__/native-release-manifest.test.js +80 -0
- package/dist/verification/__tests__/native-release-manifest.test.js.map +1 -0
- package/package.json +1 -1
- package/prompts/executor.md +15 -0
- package/scripts/__tests__/smoke-packed-install.test.mjs +137 -8
- package/scripts/eval-adaptive-sort-optimization.py +24 -0
- package/scripts/eval-in-action-cat-shellout-demo.js +31 -0
- package/scripts/eval-ml-kaggle-model-optimization.py +29 -0
- package/scripts/eval-noisy-bayesopt-highdim.py +44 -0
- package/scripts/eval-noisy-latent-subspace-discovery.py +44 -0
- package/scripts/generate-native-release-manifest.mjs +14 -3
- package/scripts/notify-fallback-watcher.js +308 -6
- package/scripts/notify-hook.js +20 -0
- package/scripts/run-autoresearch-showcase.sh +75 -0
- package/scripts/smoke-packed-install.mjs +142 -10
- package/skills/deep-interview/SKILL.md +30 -1
- package/skills/omx-setup/SKILL.md +2 -2
- package/skills/skill/SKILL.md +32 -32
- package/skills/team/SKILL.md +6 -0
- package/skills/worker/SKILL.md +2 -2
- package/templates/AGENTS.md +97 -16
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { buildSkillBridgeResolutionGuidance, generateSkillBridgeAgentToml, listInstalledSkillBridgeAgents, } from '../skill-bridge.js';
|
|
7
|
+
describe('agents/skill-bridge', () => {
|
|
8
|
+
it('generates lightweight bridge TOML without developer instructions', () => {
|
|
9
|
+
const toml = generateSkillBridgeAgentToml({
|
|
10
|
+
name: 'code-review',
|
|
11
|
+
description: 'Run a comprehensive code review',
|
|
12
|
+
skillRef: 'code-review',
|
|
13
|
+
});
|
|
14
|
+
assert.match(toml, /# oh-my-codex skill bridge agent: code-review/);
|
|
15
|
+
assert.match(toml, /^skill_ref = "code-review"$/m);
|
|
16
|
+
assert.doesNotMatch(toml, /developer_instructions\s*=/);
|
|
17
|
+
});
|
|
18
|
+
it('discovers installed skill bridge agents and emits Codex-home-first guidance', async () => {
|
|
19
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-skill-bridge-'));
|
|
20
|
+
const home = join(wd, 'home');
|
|
21
|
+
const previousHome = process.env.HOME;
|
|
22
|
+
const previousCodexHome = process.env.CODEX_HOME;
|
|
23
|
+
process.env.HOME = home;
|
|
24
|
+
process.env.CODEX_HOME = join(home, '.codex');
|
|
25
|
+
try {
|
|
26
|
+
const projectAgentsDir = join(wd, '.codex', 'agents');
|
|
27
|
+
const userAgentsDir = join(home, '.codex', 'agents');
|
|
28
|
+
const userSkillsPath = join(home, '.codex', 'skills', 'plan');
|
|
29
|
+
const legacyProjectSkillsPath = join(wd, '.agents', 'skills', 'code-review');
|
|
30
|
+
await mkdir(projectAgentsDir, { recursive: true });
|
|
31
|
+
await mkdir(userAgentsDir, { recursive: true });
|
|
32
|
+
await mkdir(userSkillsPath, { recursive: true });
|
|
33
|
+
await mkdir(legacyProjectSkillsPath, { recursive: true });
|
|
34
|
+
await writeFile(join(userSkillsPath, 'SKILL.md'), '# user plan\n');
|
|
35
|
+
await writeFile(join(legacyProjectSkillsPath, 'SKILL.md'), '# legacy project review\n');
|
|
36
|
+
await writeFile(join(projectAgentsDir, 'plan.toml'), generateSkillBridgeAgentToml({
|
|
37
|
+
name: 'plan',
|
|
38
|
+
description: 'Strategic planning',
|
|
39
|
+
skillRef: 'plan',
|
|
40
|
+
}));
|
|
41
|
+
await writeFile(join(userAgentsDir, 'code-review.toml'), generateSkillBridgeAgentToml({
|
|
42
|
+
name: 'code-review',
|
|
43
|
+
description: 'Review code',
|
|
44
|
+
skillRef: 'code-review',
|
|
45
|
+
}));
|
|
46
|
+
const bridges = await listInstalledSkillBridgeAgents(wd);
|
|
47
|
+
assert.deepEqual(bridges.map((item) => [item.scope, item.name, item.skillRef]), [
|
|
48
|
+
['project', 'plan', 'plan'],
|
|
49
|
+
['user', 'code-review', 'code-review'],
|
|
50
|
+
]);
|
|
51
|
+
const guidance = await buildSkillBridgeResolutionGuidance(wd);
|
|
52
|
+
assert.match(guidance, /Native Skill Bridge/);
|
|
53
|
+
assert.match(guidance, new RegExp(`${join(home, '.codex', 'skills').replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}/<skill>/SKILL\.md`));
|
|
54
|
+
assert.match(guidance, /primary Codex skills path/);
|
|
55
|
+
assert.match(guidance, /legacy project fallback/);
|
|
56
|
+
assert.match(guidance, /legacy compatibility fallback/);
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
if (typeof previousHome === 'string')
|
|
60
|
+
process.env.HOME = previousHome;
|
|
61
|
+
else
|
|
62
|
+
delete process.env.HOME;
|
|
63
|
+
if (typeof previousCodexHome === 'string')
|
|
64
|
+
process.env.CODEX_HOME = previousCodexHome;
|
|
65
|
+
else
|
|
66
|
+
delete process.env.CODEX_HOME;
|
|
67
|
+
await rm(wd, { recursive: true, force: true });
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=skill-bridge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-bridge.test.js","sourceRoot":"","sources":["../../../src/agents/__tests__/skill-bridge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Native agent config
|
|
3
|
-
*
|
|
2
|
+
* Native agent config generators for Codex CLI.
|
|
3
|
+
* Writes standalone TOML files under ~/.codex/agents/ or ./.codex/agents/.
|
|
4
4
|
*/
|
|
5
|
-
import { AgentDefinition } from
|
|
5
|
+
import { AgentDefinition } from "./definitions.js";
|
|
6
|
+
export interface GeneratedNativeAgentConfig {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
developerInstructions?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
reasoningEffort?: "low" | "medium" | "high" | "xhigh";
|
|
12
|
+
}
|
|
6
13
|
/**
|
|
7
|
-
*
|
|
14
|
+
* Strip YAML frontmatter (between --- markers) from markdown content.
|
|
15
|
+
*/
|
|
16
|
+
export declare function stripFrontmatter(content: string): string;
|
|
17
|
+
export declare function generateStandaloneAgentToml(config: GeneratedNativeAgentConfig): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate TOML content for a prompt-backed OMX role agent.
|
|
8
20
|
*/
|
|
9
21
|
export declare function generateAgentToml(agent: AgentDefinition, promptContent: string): string;
|
|
10
22
|
/**
|
|
11
|
-
* Install native agent config .toml files to ~/.
|
|
12
|
-
* Returns the number of
|
|
23
|
+
* Install prompt-backed native agent config .toml files to ~/.codex/agents/
|
|
24
|
+
* Returns the number of agent files written.
|
|
13
25
|
*/
|
|
14
26
|
export declare function installNativeAgentConfigs(pkgRoot: string, options?: {
|
|
15
27
|
force?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-config.d.ts","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAqB,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"native-config.d.ts","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAqB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAsEtE,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACvD;AAsBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMxD;AAcD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,0BAA0B,GACjC,MAAM,CAyBR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,CAOR;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
|
|
@@ -1,97 +1,97 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Native agent config
|
|
3
|
-
*
|
|
2
|
+
* Native agent config generators for Codex CLI.
|
|
3
|
+
* Writes standalone TOML files under ~/.codex/agents/ or ./.codex/agents/.
|
|
4
4
|
*/
|
|
5
|
-
import { existsSync } from
|
|
6
|
-
import { mkdir, readFile, writeFile } from
|
|
7
|
-
import { join } from
|
|
8
|
-
import { AGENT_DEFINITIONS } from
|
|
9
|
-
import {
|
|
5
|
+
import { existsSync } from "fs";
|
|
6
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
7
|
+
import { join } from "path";
|
|
8
|
+
import { AGENT_DEFINITIONS } from "./definitions.js";
|
|
9
|
+
import { codexAgentsDir } from "../utils/paths.js";
|
|
10
10
|
const POSTURE_OVERLAYS = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
].join(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
].join(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
].join(
|
|
11
|
+
"frontier-orchestrator": [
|
|
12
|
+
"<posture_overlay>",
|
|
13
|
+
"",
|
|
14
|
+
"You are operating in the frontier-orchestrator posture.",
|
|
15
|
+
"- Prioritize intent classification before implementation.",
|
|
16
|
+
"- Default to delegation and orchestration when specialists exist.",
|
|
17
|
+
"- Treat the first decision as a routing problem: research vs planning vs implementation vs verification.",
|
|
18
|
+
"- Challenge flawed user assumptions concisely before execution when the design is likely to cause avoidable problems.",
|
|
19
|
+
"- Preserve explicit executor handoff boundaries: do not absorb deep implementation work when a specialized executor is more appropriate.",
|
|
20
|
+
"",
|
|
21
|
+
"</posture_overlay>",
|
|
22
|
+
].join("\n"),
|
|
23
|
+
"deep-worker": [
|
|
24
|
+
"<posture_overlay>",
|
|
25
|
+
"",
|
|
26
|
+
"You are operating in the deep-worker posture.",
|
|
27
|
+
"- Once the task is clearly implementation-oriented, bias toward direct execution and end-to-end completion.",
|
|
28
|
+
"- Explore first, then implement minimal changes that match existing patterns.",
|
|
29
|
+
"- Keep verification strict: diagnostics, tests, and build evidence are mandatory before claiming completion.",
|
|
30
|
+
"- Escalate only after materially different approaches fail or when architecture tradeoffs exceed local implementation scope.",
|
|
31
|
+
"",
|
|
32
|
+
"</posture_overlay>",
|
|
33
|
+
].join("\n"),
|
|
34
|
+
"fast-lane": [
|
|
35
|
+
"<posture_overlay>",
|
|
36
|
+
"",
|
|
37
|
+
"You are operating in the fast-lane posture.",
|
|
38
|
+
"- Optimize for fast triage, search, lightweight synthesis, and narrow routing decisions.",
|
|
39
|
+
"- Do not start deep implementation unless the task is tightly bounded and obvious.",
|
|
40
|
+
"- If the task expands beyond quick classification or lightweight execution, escalate to a frontier-orchestrator or deep-worker role.",
|
|
41
|
+
"- Keep responses concise, scope-aware, and conservative under ambiguity.",
|
|
42
|
+
"",
|
|
43
|
+
"</posture_overlay>",
|
|
44
|
+
].join("\n"),
|
|
45
45
|
};
|
|
46
46
|
const MODEL_CLASS_OVERLAYS = {
|
|
47
47
|
frontier: [
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
].join(
|
|
48
|
+
"<model_class_guidance>",
|
|
49
|
+
"",
|
|
50
|
+
"This role is tuned for frontier-class models.",
|
|
51
|
+
"- Use the model's steerability for coordination, tradeoff reasoning, and precise delegation.",
|
|
52
|
+
"- Favor clean routing decisions over impulsive implementation.",
|
|
53
|
+
"",
|
|
54
|
+
"</model_class_guidance>",
|
|
55
|
+
].join("\n"),
|
|
56
56
|
standard: [
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
].join(
|
|
57
|
+
"<model_class_guidance>",
|
|
58
|
+
"",
|
|
59
|
+
"This role is tuned for standard-capability models.",
|
|
60
|
+
"- Balance autonomy with clear boundaries.",
|
|
61
|
+
"- Prefer explicit verification and narrow scope control over speculative reasoning.",
|
|
62
|
+
"",
|
|
63
|
+
"</model_class_guidance>",
|
|
64
|
+
].join("\n"),
|
|
65
65
|
fast: [
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
].join(
|
|
66
|
+
"<model_class_guidance>",
|
|
67
|
+
"",
|
|
68
|
+
"This role is tuned for fast/low-latency models.",
|
|
69
|
+
"- Prefer quick search, synthesis, and routing over prolonged reasoning.",
|
|
70
|
+
"- Escalate rather than bluff when deeper work is required.",
|
|
71
|
+
"",
|
|
72
|
+
"</model_class_guidance>",
|
|
73
|
+
].join("\n"),
|
|
74
74
|
};
|
|
75
75
|
function buildPromptInstructions(agent, promptContent) {
|
|
76
76
|
const instructions = stripFrontmatter(promptContent);
|
|
77
77
|
return [
|
|
78
78
|
instructions,
|
|
79
|
-
|
|
79
|
+
"",
|
|
80
80
|
POSTURE_OVERLAYS[agent.posture],
|
|
81
|
-
|
|
81
|
+
"",
|
|
82
82
|
MODEL_CLASS_OVERLAYS[agent.modelClass],
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
"",
|
|
84
|
+
"## OMX Agent Metadata",
|
|
85
85
|
`- role: ${agent.name}`,
|
|
86
86
|
`- posture: ${agent.posture}`,
|
|
87
87
|
`- model_class: ${agent.modelClass}`,
|
|
88
88
|
`- routing_role: ${agent.routingRole}`,
|
|
89
|
-
].join(
|
|
89
|
+
].join("\n");
|
|
90
90
|
}
|
|
91
91
|
/**
|
|
92
|
-
* Strip YAML frontmatter (between --- markers) from markdown content
|
|
92
|
+
* Strip YAML frontmatter (between --- markers) from markdown content.
|
|
93
93
|
*/
|
|
94
|
-
function stripFrontmatter(content) {
|
|
94
|
+
export function stripFrontmatter(content) {
|
|
95
95
|
const match = content.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);
|
|
96
96
|
if (match) {
|
|
97
97
|
return content.slice(match[0].length).trim();
|
|
@@ -103,37 +103,54 @@ function stripFrontmatter(content) {
|
|
|
103
103
|
* TOML """ strings only need to escape sequences of 3+ consecutive quotes.
|
|
104
104
|
*/
|
|
105
105
|
function escapeTomlMultiline(s) {
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
return s.replace(/"{3,}/g, (match) => match.split("").join("\\"));
|
|
107
|
+
}
|
|
108
|
+
function escapeTomlBasicString(s) {
|
|
109
|
+
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
110
|
+
}
|
|
111
|
+
export function generateStandaloneAgentToml(config) {
|
|
112
|
+
const lines = [
|
|
113
|
+
`# oh-my-codex agent: ${config.name}`,
|
|
114
|
+
`name = "${escapeTomlBasicString(config.name)}"`,
|
|
115
|
+
`description = "${escapeTomlBasicString(config.description)}"`,
|
|
116
|
+
];
|
|
117
|
+
if (config.model) {
|
|
118
|
+
lines.push(`model = "${escapeTomlBasicString(config.model)}"`);
|
|
119
|
+
}
|
|
120
|
+
if (config.reasoningEffort) {
|
|
121
|
+
lines.push(`model_reasoning_effort = "${config.reasoningEffort}"`);
|
|
122
|
+
}
|
|
123
|
+
if (typeof config.developerInstructions === "string" &&
|
|
124
|
+
config.developerInstructions.trim().length > 0) {
|
|
125
|
+
const escapedInstructions = escapeTomlMultiline(config.developerInstructions);
|
|
126
|
+
lines.push('developer_instructions = """', escapedInstructions, '"""');
|
|
127
|
+
}
|
|
128
|
+
lines.push("");
|
|
129
|
+
return lines.join("\n");
|
|
108
130
|
}
|
|
109
131
|
/**
|
|
110
|
-
* Generate TOML content for a
|
|
132
|
+
* Generate TOML content for a prompt-backed OMX role agent.
|
|
111
133
|
*/
|
|
112
134
|
export function generateAgentToml(agent, promptContent) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
`developer_instructions = """`,
|
|
120
|
-
escaped,
|
|
121
|
-
`"""`,
|
|
122
|
-
'',
|
|
123
|
-
].join('\n');
|
|
135
|
+
return generateStandaloneAgentToml({
|
|
136
|
+
name: agent.name,
|
|
137
|
+
description: agent.description,
|
|
138
|
+
developerInstructions: buildPromptInstructions(agent, promptContent),
|
|
139
|
+
reasoningEffort: agent.reasoningEffort,
|
|
140
|
+
});
|
|
124
141
|
}
|
|
125
142
|
/**
|
|
126
|
-
* Install native agent config .toml files to ~/.
|
|
127
|
-
* Returns the number of
|
|
143
|
+
* Install prompt-backed native agent config .toml files to ~/.codex/agents/
|
|
144
|
+
* Returns the number of agent files written.
|
|
128
145
|
*/
|
|
129
146
|
export async function installNativeAgentConfigs(pkgRoot, options = {}) {
|
|
130
|
-
const { force = false, dryRun = false, verbose = false, agentsDir =
|
|
147
|
+
const { force = false, dryRun = false, verbose = false, agentsDir = codexAgentsDir(), } = options;
|
|
131
148
|
if (!dryRun) {
|
|
132
149
|
await mkdir(agentsDir, { recursive: true });
|
|
133
150
|
}
|
|
134
151
|
let count = 0;
|
|
135
152
|
for (const [name, agent] of Object.entries(AGENT_DEFINITIONS)) {
|
|
136
|
-
const promptPath = join(pkgRoot,
|
|
153
|
+
const promptPath = join(pkgRoot, "prompts", `${name}.md`);
|
|
137
154
|
if (!existsSync(promptPath)) {
|
|
138
155
|
if (verbose)
|
|
139
156
|
console.log(` skip ${name} (no prompt file)`);
|
|
@@ -145,14 +162,14 @@ export async function installNativeAgentConfigs(pkgRoot, options = {}) {
|
|
|
145
162
|
console.log(` skip ${name} (already exists)`);
|
|
146
163
|
continue;
|
|
147
164
|
}
|
|
148
|
-
const promptContent = await readFile(promptPath,
|
|
165
|
+
const promptContent = await readFile(promptPath, "utf-8");
|
|
149
166
|
const toml = generateAgentToml(agent, promptContent);
|
|
150
167
|
if (!dryRun) {
|
|
151
168
|
await writeFile(dst, toml);
|
|
152
169
|
}
|
|
153
170
|
if (verbose)
|
|
154
171
|
console.log(` ${name}.toml`);
|
|
155
|
-
count
|
|
172
|
+
count += 1;
|
|
156
173
|
}
|
|
157
174
|
return count;
|
|
158
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-config.js","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAmB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"native-config.js","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface SkillBridgeAgentConfig {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
skillRef: string;
|
|
5
|
+
model?: string;
|
|
6
|
+
reasoningEffort?: 'low' | 'medium' | 'high' | 'xhigh';
|
|
7
|
+
}
|
|
8
|
+
export interface SkillBridgeAgentRecord {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
skillRef: string;
|
|
12
|
+
scope: 'project' | 'user';
|
|
13
|
+
path: string;
|
|
14
|
+
model?: string;
|
|
15
|
+
reasoningEffort?: 'low' | 'medium' | 'high' | 'xhigh';
|
|
16
|
+
}
|
|
17
|
+
export declare function generateSkillBridgeAgentToml(config: SkillBridgeAgentConfig): string;
|
|
18
|
+
export declare function listInstalledSkillBridgeAgents(projectRoot?: string): Promise<SkillBridgeAgentRecord[]>;
|
|
19
|
+
export declare function buildSkillBridgeResolutionGuidance(projectRoot?: string): Promise<string>;
|
|
20
|
+
//# sourceMappingURL=skill-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-bridge.d.ts","sourceRoot":"","sources":["../../src/agents/skill-bridge.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACvD;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACvD;AAoBD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAgBnF;AA+CD,wBAAsB,8BAA8B,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAc5G;AAoCD,wBAAsB,kCAAkC,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC9F"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import TOML from '@iarna/toml';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { codexAgentsDir, listInstalledSkillDirectories, projectCodexAgentsDir, projectSkillsDir, userSkillsDir, } from '../utils/paths.js';
|
|
6
|
+
function escapeTomlBasicString(s) {
|
|
7
|
+
return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
8
|
+
}
|
|
9
|
+
function normalizeNonEmptyString(value) {
|
|
10
|
+
if (typeof value !== 'string')
|
|
11
|
+
return undefined;
|
|
12
|
+
const trimmed = value.trim();
|
|
13
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
14
|
+
}
|
|
15
|
+
function normalizeReasoning(value) {
|
|
16
|
+
const normalized = normalizeNonEmptyString(value)?.toLowerCase();
|
|
17
|
+
if (normalized === 'low' || normalized === 'medium' || normalized === 'high' || normalized === 'xhigh') {
|
|
18
|
+
return normalized;
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
export function generateSkillBridgeAgentToml(config) {
|
|
23
|
+
const lines = [
|
|
24
|
+
`# oh-my-codex skill bridge agent: ${config.name}`,
|
|
25
|
+
`name = "${escapeTomlBasicString(config.name)}"`,
|
|
26
|
+
`description = "${escapeTomlBasicString(config.description)}"`,
|
|
27
|
+
];
|
|
28
|
+
if (config.model) {
|
|
29
|
+
lines.push(`model = "${escapeTomlBasicString(config.model)}"`);
|
|
30
|
+
}
|
|
31
|
+
if (config.reasoningEffort) {
|
|
32
|
+
lines.push(`model_reasoning_effort = "${config.reasoningEffort}"`);
|
|
33
|
+
}
|
|
34
|
+
lines.push(`skill_ref = "${escapeTomlBasicString(config.skillRef)}"`, '');
|
|
35
|
+
return lines.join('\n');
|
|
36
|
+
}
|
|
37
|
+
function parseSkillBridgeAgentRecord(content, path, scope) {
|
|
38
|
+
try {
|
|
39
|
+
const parsed = TOML.parse(content);
|
|
40
|
+
const skillRef = normalizeNonEmptyString(parsed.skill_ref);
|
|
41
|
+
const name = normalizeNonEmptyString(parsed.name);
|
|
42
|
+
const description = normalizeNonEmptyString(parsed.description);
|
|
43
|
+
if (!skillRef || !name || !description)
|
|
44
|
+
return null;
|
|
45
|
+
return {
|
|
46
|
+
name,
|
|
47
|
+
description,
|
|
48
|
+
skillRef,
|
|
49
|
+
scope,
|
|
50
|
+
path,
|
|
51
|
+
model: normalizeNonEmptyString(parsed.model),
|
|
52
|
+
reasoningEffort: normalizeReasoning(parsed.model_reasoning_effort),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function readSkillBridgeAgentsFromDir(dir, scope) {
|
|
60
|
+
if (!existsSync(dir))
|
|
61
|
+
return [];
|
|
62
|
+
const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
63
|
+
const bridges = [];
|
|
64
|
+
for (const entry of entries) {
|
|
65
|
+
if (!entry.isFile() || !entry.name.endsWith('.toml'))
|
|
66
|
+
continue;
|
|
67
|
+
const path = join(dir, entry.name);
|
|
68
|
+
const parsed = parseSkillBridgeAgentRecord(await readFile(path, 'utf-8'), path, scope);
|
|
69
|
+
if (parsed)
|
|
70
|
+
bridges.push(parsed);
|
|
71
|
+
}
|
|
72
|
+
return bridges.sort((a, b) => a.name.localeCompare(b.name));
|
|
73
|
+
}
|
|
74
|
+
export async function listInstalledSkillBridgeAgents(projectRoot) {
|
|
75
|
+
const [projectAgents, userAgents] = await Promise.all([
|
|
76
|
+
readSkillBridgeAgentsFromDir(projectCodexAgentsDir(projectRoot), 'project'),
|
|
77
|
+
readSkillBridgeAgentsFromDir(codexAgentsDir(), 'user'),
|
|
78
|
+
]);
|
|
79
|
+
const deduped = [];
|
|
80
|
+
const seenNames = new Set();
|
|
81
|
+
for (const item of [...projectAgents, ...userAgents]) {
|
|
82
|
+
if (seenNames.has(item.name))
|
|
83
|
+
continue;
|
|
84
|
+
seenNames.add(item.name);
|
|
85
|
+
deduped.push(item);
|
|
86
|
+
}
|
|
87
|
+
return deduped;
|
|
88
|
+
}
|
|
89
|
+
function listNames(items, limit = 8) {
|
|
90
|
+
if (items.length === 0)
|
|
91
|
+
return '- none';
|
|
92
|
+
const visible = items.slice(0, limit).map((item) => `- \`${item}\``);
|
|
93
|
+
if (items.length > limit)
|
|
94
|
+
visible.push(`- ...and ${items.length - limit} more`);
|
|
95
|
+
return visible.join('\n');
|
|
96
|
+
}
|
|
97
|
+
function buildSkillResolutionOrder(skillsByName, projectRoot) {
|
|
98
|
+
const projectScoped = [...skillsByName.values()].filter((item) => item.scope === 'project');
|
|
99
|
+
const userScoped = [...skillsByName.values()].filter((item) => item.scope === 'user');
|
|
100
|
+
const lines = [
|
|
101
|
+
'Resolution order for a referenced skill:',
|
|
102
|
+
`1. \`${userSkillsDir()}/<skill>/SKILL.md\` (primary Codex skills path)`,
|
|
103
|
+
`2. \`${projectSkillsDir(projectRoot)}/<skill>/SKILL.md\` (legacy project fallback)`,
|
|
104
|
+
'3. `~/.agents/skills/<skill>/SKILL.md` (legacy compatibility fallback)',
|
|
105
|
+
];
|
|
106
|
+
if (userScoped.length > 0 || projectScoped.length > 0) {
|
|
107
|
+
lines.push('');
|
|
108
|
+
if (userScoped.length > 0) {
|
|
109
|
+
lines.push(`Codex-installed skills (primary):\n${listNames(userScoped.map((item) => item.name))}`);
|
|
110
|
+
}
|
|
111
|
+
if (projectScoped.length > 0) {
|
|
112
|
+
lines.push(`Legacy project skills fallback:\n${listNames(projectScoped.map((item) => item.name))}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return lines;
|
|
116
|
+
}
|
|
117
|
+
export async function buildSkillBridgeResolutionGuidance(projectRoot) {
|
|
118
|
+
const bridges = await listInstalledSkillBridgeAgents(projectRoot);
|
|
119
|
+
if (bridges.length === 0)
|
|
120
|
+
return '';
|
|
121
|
+
const installedSkills = await listInstalledSkillDirectories(projectRoot);
|
|
122
|
+
const skillsByName = new Map(installedSkills.map((item) => [item.name, item]));
|
|
123
|
+
const bridgeLines = bridges.map((bridge) => {
|
|
124
|
+
const primaryCodexSkillPath = join(userSkillsDir(), bridge.skillRef, 'SKILL.md');
|
|
125
|
+
const legacyProjectSkillPath = join(projectSkillsDir(projectRoot), bridge.skillRef, 'SKILL.md');
|
|
126
|
+
const legacyUserSkillPath = join(process.env.HOME || '~', '.agents', 'skills', bridge.skillRef, 'SKILL.md');
|
|
127
|
+
const suffix = existsSync(primaryCodexSkillPath)
|
|
128
|
+
? ' -> Codex skills primary'
|
|
129
|
+
: existsSync(legacyProjectSkillPath)
|
|
130
|
+
? ' -> legacy project fallback'
|
|
131
|
+
: existsSync(legacyUserSkillPath)
|
|
132
|
+
? ' -> legacy user fallback'
|
|
133
|
+
: skillsByName.get(bridge.skillRef)
|
|
134
|
+
? ` -> ${skillsByName.get(bridge.skillRef)?.scope} skill`
|
|
135
|
+
: ' -> unresolved skill (keep fallback resolution order)';
|
|
136
|
+
return `- \`${bridge.name}\` => \`${bridge.skillRef}\`${suffix}`;
|
|
137
|
+
});
|
|
138
|
+
return [
|
|
139
|
+
'**Native Skill Bridge:**',
|
|
140
|
+
'Some lightweight native agent TOMLs declare `skill_ref` instead of embedding skill markdown.',
|
|
141
|
+
'When the active native agent includes `skill_ref`, resolve that reference at runtime and follow the installed SKILL.md instructions from disk.',
|
|
142
|
+
'Do not expect long `developer_instructions` blocks inside skill-bridge TOMLs.',
|
|
143
|
+
'',
|
|
144
|
+
'Installed skill bridge agents:',
|
|
145
|
+
...bridgeLines,
|
|
146
|
+
'',
|
|
147
|
+
...buildSkillResolutionOrder(skillsByName, projectRoot),
|
|
148
|
+
].join('\n');
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=skill-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-bridge.js","sourceRoot":"","sources":["../../src/agents/skill-bridge.ts"],"names":[],"mappings":"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"}
|