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.
Files changed (260) hide show
  1. package/README.de.md +4 -4
  2. package/README.es.md +4 -4
  3. package/README.fr.md +4 -4
  4. package/README.it.md +4 -4
  5. package/README.ja.md +4 -4
  6. package/README.ko.md +4 -4
  7. package/README.md +13 -7
  8. package/README.pt.md +4 -4
  9. package/README.ru.md +4 -4
  10. package/README.tr.md +4 -4
  11. package/README.vi.md +4 -4
  12. package/README.zh-TW.md +4 -4
  13. package/README.zh.md +4 -4
  14. package/dist/agents/__tests__/native-config.test.js +37 -33
  15. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  16. package/dist/agents/__tests__/skill-bridge.test.d.ts +2 -0
  17. package/dist/agents/__tests__/skill-bridge.test.d.ts.map +1 -0
  18. package/dist/agents/__tests__/skill-bridge.test.js +71 -0
  19. package/dist/agents/__tests__/skill-bridge.test.js.map +1 -0
  20. package/dist/agents/native-config.d.ts +18 -6
  21. package/dist/agents/native-config.d.ts.map +1 -1
  22. package/dist/agents/native-config.js +109 -92
  23. package/dist/agents/native-config.js.map +1 -1
  24. package/dist/agents/skill-bridge.d.ts +20 -0
  25. package/dist/agents/skill-bridge.d.ts.map +1 -0
  26. package/dist/agents/skill-bridge.js +150 -0
  27. package/dist/agents/skill-bridge.js.map +1 -0
  28. package/dist/autoresearch/__tests__/contracts.test.js +37 -1
  29. package/dist/autoresearch/__tests__/contracts.test.js.map +1 -1
  30. package/dist/autoresearch/__tests__/runtime-parity-extra.test.js +10 -10
  31. package/dist/autoresearch/__tests__/runtime-parity-extra.test.js.map +1 -1
  32. package/dist/autoresearch/__tests__/runtime.test.js +2 -2
  33. package/dist/autoresearch/__tests__/runtime.test.js.map +1 -1
  34. package/dist/autoresearch/contracts.d.ts.map +1 -1
  35. package/dist/autoresearch/contracts.js +17 -10
  36. package/dist/autoresearch/contracts.js.map +1 -1
  37. package/dist/autoresearch/runtime.d.ts.map +1 -1
  38. package/dist/autoresearch/runtime.js +71 -96
  39. package/dist/autoresearch/runtime.js.map +1 -1
  40. package/dist/cli/__tests__/agents-init.test.js +2 -0
  41. package/dist/cli/__tests__/agents-init.test.js.map +1 -1
  42. package/dist/cli/__tests__/agents.test.d.ts +2 -0
  43. package/dist/cli/__tests__/agents.test.d.ts.map +1 -0
  44. package/dist/cli/__tests__/agents.test.js +114 -0
  45. package/dist/cli/__tests__/agents.test.js.map +1 -0
  46. package/dist/cli/__tests__/autoresearch-guided.test.js +156 -1
  47. package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
  48. package/dist/cli/__tests__/autoresearch.test.js +195 -24
  49. package/dist/cli/__tests__/autoresearch.test.js.map +1 -1
  50. package/dist/cli/__tests__/cleanup.test.d.ts +2 -0
  51. package/dist/cli/__tests__/cleanup.test.d.ts.map +1 -0
  52. package/dist/cli/__tests__/cleanup.test.js +213 -0
  53. package/dist/cli/__tests__/cleanup.test.js.map +1 -0
  54. package/dist/cli/__tests__/error-handling-warnings.test.js +1 -1
  55. package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -1
  56. package/dist/cli/__tests__/explore.test.js +3 -3
  57. package/dist/cli/__tests__/explore.test.js.map +1 -1
  58. package/dist/cli/__tests__/index.test.js +521 -401
  59. package/dist/cli/__tests__/index.test.js.map +1 -1
  60. package/dist/cli/__tests__/native-assets.test.js +72 -9
  61. package/dist/cli/__tests__/native-assets.test.js.map +1 -1
  62. package/dist/cli/__tests__/ralphthon.test.d.ts +2 -0
  63. package/dist/cli/__tests__/ralphthon.test.d.ts.map +1 -0
  64. package/dist/cli/__tests__/ralphthon.test.js +28 -0
  65. package/dist/cli/__tests__/ralphthon.test.js.map +1 -0
  66. package/dist/cli/__tests__/setup-agents-overwrite.test.js +36 -1
  67. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
  68. package/dist/cli/__tests__/setup-prompts-overwrite.test.js +35 -5
  69. package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +1 -1
  70. package/dist/cli/__tests__/setup-refresh.test.js +2 -2
  71. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  72. package/dist/cli/__tests__/setup-scope.test.js +131 -161
  73. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  74. package/dist/cli/__tests__/setup-skills-overwrite.test.js +10 -10
  75. package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -1
  76. package/dist/cli/__tests__/sparkshell-cli.test.js +28 -2
  77. package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
  78. package/dist/cli/__tests__/team.test.js +1 -112
  79. package/dist/cli/__tests__/team.test.js.map +1 -1
  80. package/dist/cli/__tests__/uninstall.test.js +7 -20
  81. package/dist/cli/__tests__/uninstall.test.js.map +1 -1
  82. package/dist/cli/agents-init.d.ts.map +1 -1
  83. package/dist/cli/agents-init.js +99 -95
  84. package/dist/cli/agents-init.js.map +1 -1
  85. package/dist/cli/agents.d.ts +14 -0
  86. package/dist/cli/agents.d.ts.map +1 -0
  87. package/dist/cli/agents.js +261 -0
  88. package/dist/cli/agents.js.map +1 -0
  89. package/dist/cli/autoresearch-guided.d.ts +8 -0
  90. package/dist/cli/autoresearch-guided.d.ts.map +1 -1
  91. package/dist/cli/autoresearch-guided.js +104 -37
  92. package/dist/cli/autoresearch-guided.js.map +1 -1
  93. package/dist/cli/autoresearch-intake.d.ts +60 -0
  94. package/dist/cli/autoresearch-intake.d.ts.map +1 -0
  95. package/dist/cli/autoresearch-intake.js +318 -0
  96. package/dist/cli/autoresearch-intake.js.map +1 -0
  97. package/dist/cli/autoresearch.d.ts +3 -1
  98. package/dist/cli/autoresearch.d.ts.map +1 -1
  99. package/dist/cli/autoresearch.js +64 -10
  100. package/dist/cli/autoresearch.js.map +1 -1
  101. package/dist/cli/cleanup.d.ts +52 -0
  102. package/dist/cli/cleanup.d.ts.map +1 -0
  103. package/dist/cli/cleanup.js +302 -0
  104. package/dist/cli/cleanup.js.map +1 -0
  105. package/dist/cli/doctor.d.ts.map +1 -1
  106. package/dist/cli/doctor.js +9 -37
  107. package/dist/cli/doctor.js.map +1 -1
  108. package/dist/cli/explore.d.ts.map +1 -1
  109. package/dist/cli/explore.js +5 -4
  110. package/dist/cli/explore.js.map +1 -1
  111. package/dist/cli/index.d.ts +5 -7
  112. package/dist/cli/index.d.ts.map +1 -1
  113. package/dist/cli/index.js +610 -427
  114. package/dist/cli/index.js.map +1 -1
  115. package/dist/cli/native-assets.d.ts +15 -1
  116. package/dist/cli/native-assets.d.ts.map +1 -1
  117. package/dist/cli/native-assets.js +134 -32
  118. package/dist/cli/native-assets.js.map +1 -1
  119. package/dist/cli/ralph.d.ts.map +1 -1
  120. package/dist/cli/ralph.js +38 -1
  121. package/dist/cli/ralph.js.map +1 -1
  122. package/dist/cli/ralphthon.d.ts +14 -0
  123. package/dist/cli/ralphthon.d.ts.map +1 -0
  124. package/dist/cli/ralphthon.js +234 -0
  125. package/dist/cli/ralphthon.js.map +1 -0
  126. package/dist/cli/setup.d.ts +1 -4
  127. package/dist/cli/setup.d.ts.map +1 -1
  128. package/dist/cli/setup.js +111 -76
  129. package/dist/cli/setup.js.map +1 -1
  130. package/dist/cli/sparkshell.d.ts +3 -1
  131. package/dist/cli/sparkshell.d.ts.map +1 -1
  132. package/dist/cli/sparkshell.js +35 -16
  133. package/dist/cli/sparkshell.js.map +1 -1
  134. package/dist/cli/team.d.ts.map +1 -1
  135. package/dist/cli/team.js +1 -0
  136. package/dist/cli/team.js.map +1 -1
  137. package/dist/cli/uninstall.d.ts +1 -1
  138. package/dist/cli/uninstall.d.ts.map +1 -1
  139. package/dist/cli/uninstall.js +82 -64
  140. package/dist/cli/uninstall.js.map +1 -1
  141. package/dist/config/__tests__/generator-idempotent.test.js +10 -10
  142. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  143. package/dist/config/__tests__/generator-notify.test.js +15 -0
  144. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  145. package/dist/config/generator.d.ts +0 -1
  146. package/dist/config/generator.d.ts.map +1 -1
  147. package/dist/config/generator.js +53 -42
  148. package/dist/config/generator.js.map +1 -1
  149. package/dist/hooks/__tests__/agents-overlay.test.js +295 -230
  150. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  151. package/dist/hooks/__tests__/deep-interview-contract.test.js +49 -24
  152. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
  153. package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.d.ts +2 -0
  154. package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.d.ts.map +1 -0
  155. package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.js +193 -0
  156. package/dist/hooks/__tests__/notify-fallback-watcher-ralphthon.test.js.map +1 -0
  157. package/dist/hooks/agents-overlay.d.ts +1 -1
  158. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  159. package/dist/hooks/agents-overlay.js +109 -106
  160. package/dist/hooks/agents-overlay.js.map +1 -1
  161. package/dist/modes/base.d.ts +1 -1
  162. package/dist/modes/base.d.ts.map +1 -1
  163. package/dist/modes/base.js +1 -1
  164. package/dist/modes/base.js.map +1 -1
  165. package/dist/ralphthon/__tests__/bootstrap.test.d.ts +2 -0
  166. package/dist/ralphthon/__tests__/bootstrap.test.d.ts.map +1 -0
  167. package/dist/ralphthon/__tests__/bootstrap.test.js +23 -0
  168. package/dist/ralphthon/__tests__/bootstrap.test.js.map +1 -0
  169. package/dist/ralphthon/__tests__/orchestrator.test.d.ts +2 -0
  170. package/dist/ralphthon/__tests__/orchestrator.test.d.ts.map +1 -0
  171. package/dist/ralphthon/__tests__/orchestrator.test.js +309 -0
  172. package/dist/ralphthon/__tests__/orchestrator.test.js.map +1 -0
  173. package/dist/ralphthon/__tests__/prd.test.d.ts +2 -0
  174. package/dist/ralphthon/__tests__/prd.test.d.ts.map +1 -0
  175. package/dist/ralphthon/__tests__/prd.test.js +133 -0
  176. package/dist/ralphthon/__tests__/prd.test.js.map +1 -0
  177. package/dist/ralphthon/bootstrap.d.ts +3 -0
  178. package/dist/ralphthon/bootstrap.d.ts.map +1 -0
  179. package/dist/ralphthon/bootstrap.js +84 -0
  180. package/dist/ralphthon/bootstrap.js.map +1 -0
  181. package/dist/ralphthon/orchestrator.d.ts +50 -0
  182. package/dist/ralphthon/orchestrator.d.ts.map +1 -0
  183. package/dist/ralphthon/orchestrator.js +362 -0
  184. package/dist/ralphthon/orchestrator.js.map +1 -0
  185. package/dist/ralphthon/prd.d.ts +191 -0
  186. package/dist/ralphthon/prd.d.ts.map +1 -0
  187. package/dist/ralphthon/prd.js +355 -0
  188. package/dist/ralphthon/prd.js.map +1 -0
  189. package/dist/ralphthon/runtime.d.ts +31 -0
  190. package/dist/ralphthon/runtime.d.ts.map +1 -0
  191. package/dist/ralphthon/runtime.js +104 -0
  192. package/dist/ralphthon/runtime.js.map +1 -0
  193. package/dist/ralphthon/tmux.d.ts +3 -0
  194. package/dist/ralphthon/tmux.d.ts.map +1 -0
  195. package/dist/ralphthon/tmux.js +39 -0
  196. package/dist/ralphthon/tmux.js.map +1 -0
  197. package/dist/subagents/__tests__/tracker.test.d.ts +2 -0
  198. package/dist/subagents/__tests__/tracker.test.d.ts.map +1 -0
  199. package/dist/subagents/__tests__/tracker.test.js +47 -0
  200. package/dist/subagents/__tests__/tracker.test.js.map +1 -0
  201. package/dist/subagents/tracker.d.ts +52 -0
  202. package/dist/subagents/tracker.d.ts.map +1 -0
  203. package/dist/subagents/tracker.js +175 -0
  204. package/dist/subagents/tracker.js.map +1 -0
  205. package/dist/team/__tests__/worker-bootstrap.test.js +189 -163
  206. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  207. package/dist/team/__tests__/worktree.test.js +1 -1
  208. package/dist/team/__tests__/worktree.test.js.map +1 -1
  209. package/dist/team/worker-bootstrap.d.ts +1 -1
  210. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  211. package/dist/team/worker-bootstrap.js +58 -63
  212. package/dist/team/worker-bootstrap.js.map +1 -1
  213. package/dist/team/worktree.js +1 -1
  214. package/dist/team/worktree.js.map +1 -1
  215. package/dist/utils/__tests__/agents-md.test.d.ts +2 -0
  216. package/dist/utils/__tests__/agents-md.test.d.ts.map +1 -0
  217. package/dist/utils/__tests__/agents-md.test.js +32 -0
  218. package/dist/utils/__tests__/agents-md.test.js.map +1 -0
  219. package/dist/utils/__tests__/agents-model-table.test.d.ts +2 -0
  220. package/dist/utils/__tests__/agents-model-table.test.d.ts.map +1 -0
  221. package/dist/utils/__tests__/agents-model-table.test.js +84 -0
  222. package/dist/utils/__tests__/agents-model-table.test.js.map +1 -0
  223. package/dist/utils/__tests__/paths.test.js +78 -83
  224. package/dist/utils/__tests__/paths.test.js.map +1 -1
  225. package/dist/utils/agents-md.d.ts.map +1 -1
  226. package/dist/utils/agents-md.js +10 -0
  227. package/dist/utils/agents-md.js.map +1 -1
  228. package/dist/utils/agents-model-table.d.ts +16 -0
  229. package/dist/utils/agents-model-table.d.ts.map +1 -0
  230. package/dist/utils/agents-model-table.js +83 -0
  231. package/dist/utils/agents-model-table.js.map +1 -0
  232. package/dist/utils/paths.d.ts +6 -6
  233. package/dist/utils/paths.d.ts.map +1 -1
  234. package/dist/utils/paths.js +31 -31
  235. package/dist/utils/paths.js.map +1 -1
  236. package/dist/verification/__tests__/explore-harness-release-workflow.test.js +21 -3
  237. package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
  238. package/dist/verification/__tests__/native-release-manifest.test.d.ts +2 -0
  239. package/dist/verification/__tests__/native-release-manifest.test.d.ts.map +1 -0
  240. package/dist/verification/__tests__/native-release-manifest.test.js +80 -0
  241. package/dist/verification/__tests__/native-release-manifest.test.js.map +1 -0
  242. package/package.json +1 -1
  243. package/prompts/executor.md +15 -0
  244. package/scripts/__tests__/smoke-packed-install.test.mjs +137 -8
  245. package/scripts/eval-adaptive-sort-optimization.py +24 -0
  246. package/scripts/eval-in-action-cat-shellout-demo.js +31 -0
  247. package/scripts/eval-ml-kaggle-model-optimization.py +29 -0
  248. package/scripts/eval-noisy-bayesopt-highdim.py +44 -0
  249. package/scripts/eval-noisy-latent-subspace-discovery.py +44 -0
  250. package/scripts/generate-native-release-manifest.mjs +14 -3
  251. package/scripts/notify-fallback-watcher.js +308 -6
  252. package/scripts/notify-hook.js +20 -0
  253. package/scripts/run-autoresearch-showcase.sh +75 -0
  254. package/scripts/smoke-packed-install.mjs +142 -10
  255. package/skills/deep-interview/SKILL.md +30 -1
  256. package/skills/omx-setup/SKILL.md +2 -2
  257. package/skills/skill/SKILL.md +32 -32
  258. package/skills/team/SKILL.md +6 -0
  259. package/skills/worker/SKILL.md +2 -2
  260. 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 generator for Codex CLI multi-agent roles
3
- * Generates per-agent .toml files at ~/.omx/agents/<name>.toml
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 './definitions.js';
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
- * Generate TOML content for a single agent config file
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 ~/.omx/agents/
12
- * Returns the number of agents installed
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;AA2GtE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAavF;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACzF,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
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 generator for Codex CLI multi-agent roles
3
- * Generates per-agent .toml files at ~/.omx/agents/<name>.toml
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 'fs';
6
- import { mkdir, readFile, writeFile } from 'fs/promises';
7
- import { join } from 'path';
8
- import { AGENT_DEFINITIONS } from './definitions.js';
9
- import { omxAgentsConfigDir } from '../utils/paths.js';
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
- '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'),
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
- '<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'),
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
- '<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'),
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
- '<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'),
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
- `## OMX Agent Metadata`,
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('\n');
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
- // Replace sequences of 3+ double quotes with escaped versions
107
- return s.replace(/"{3,}/g, (match) => match.split('').join('\\'));
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 single agent config file
132
+ * Generate TOML content for a prompt-backed OMX role agent.
111
133
  */
112
134
  export function generateAgentToml(agent, promptContent) {
113
- const instructions = buildPromptInstructions(agent, promptContent);
114
- const effort = agent.reasoningEffort;
115
- const escaped = escapeTomlMultiline(instructions);
116
- return [
117
- `# oh-my-codex agent: ${agent.name}`,
118
- `model_reasoning_effort = "${effort}"`,
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 ~/.omx/agents/
127
- * Returns the number of agents installed
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 = omxAgentsConfigDir(), } = options;
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, 'prompts', `${name}.md`);
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, 'utf-8');
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":"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"}
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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"}