oh-my-codex 0.4.2 → 0.4.4
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/dist/agents/native-config.d.ts +19 -0
- package/dist/agents/native-config.d.ts.map +1 -0
- package/dist/agents/native-config.js +89 -0
- package/dist/agents/native-config.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +11 -0
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/star-prompt.test.d.ts +2 -0
- package/dist/cli/__tests__/star-prompt.test.d.ts.map +1 -0
- package/dist/cli/__tests__/star-prompt.test.js +82 -0
- package/dist/cli/__tests__/star-prompt.test.js.map +1 -0
- package/dist/cli/__tests__/update.test.d.ts +2 -0
- package/dist/cli/__tests__/update.test.d.ts.map +1 -0
- package/dist/cli/__tests__/update.test.js +66 -0
- package/dist/cli/__tests__/update.test.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +13 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +22 -15
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/star-prompt.d.ts +11 -0
- package/dist/cli/star-prompt.d.ts.map +1 -0
- package/dist/cli/star-prompt.js +74 -0
- package/dist/cli/star-prompt.js.map +1 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +7 -29
- package/dist/cli/update.js.map +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +28 -0
- package/dist/config/generator.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/notifications/__tests__/tmux-detector.test.js +69 -1
- package/dist/notifications/__tests__/tmux-detector.test.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts +1 -1
- package/dist/notifications/reply-listener.js +1 -1
- package/dist/notifications/tmux-detector.d.ts +16 -0
- package/dist/notifications/tmux-detector.d.ts.map +1 -1
- package/dist/notifications/tmux-detector.js +37 -22
- package/dist/notifications/tmux-detector.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +106 -2
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +117 -1
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +30 -25
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/state.d.ts +4 -0
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js.map +1 -1
- package/dist/team/tmux-session.d.ts +18 -2
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +53 -6
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/utils/paths.d.ts +2 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +4 -0
- package/dist/utils/paths.js.map +1 -1
- package/package.json +1 -1
- package/prompts/code-simplifier.md +91 -0
- package/scripts/notify-hook.js +36 -1
package/dist/cli/setup.js
CHANGED
|
@@ -6,8 +6,9 @@ import { mkdir, copyFile, readdir, readFile, writeFile, stat, rm } from 'fs/prom
|
|
|
6
6
|
import { join } from 'path';
|
|
7
7
|
import { existsSync } from 'fs';
|
|
8
8
|
import { spawnSync } from 'child_process';
|
|
9
|
-
import { codexHome, codexConfigPath, codexPromptsDir, userSkillsDir, omxStateDir, omxPlansDir, omxLogsDir, } from '../utils/paths.js';
|
|
9
|
+
import { codexHome, codexConfigPath, codexPromptsDir, userSkillsDir, omxStateDir, omxPlansDir, omxLogsDir, omxAgentsConfigDir, } from '../utils/paths.js';
|
|
10
10
|
import { mergeConfig } from '../config/generator.js';
|
|
11
|
+
import { installNativeAgentConfigs } from '../agents/native-config.js';
|
|
11
12
|
import { getPackageRoot } from '../utils/package.js';
|
|
12
13
|
import { readSessionState, isSessionStale } from '../hooks/session.js';
|
|
13
14
|
const REQUIRED_TEAM_COMM_MCP_TOOLS = [
|
|
@@ -22,7 +23,7 @@ export async function setup(options = {}) {
|
|
|
22
23
|
console.log('oh-my-codex setup');
|
|
23
24
|
console.log('=================\n');
|
|
24
25
|
// Step 1: Ensure directories exist
|
|
25
|
-
console.log('[1/
|
|
26
|
+
console.log('[1/8] Creating directories...');
|
|
26
27
|
const dirs = [
|
|
27
28
|
codexHome(),
|
|
28
29
|
codexPromptsDir(),
|
|
@@ -30,6 +31,7 @@ export async function setup(options = {}) {
|
|
|
30
31
|
omxStateDir(),
|
|
31
32
|
omxPlansDir(),
|
|
32
33
|
omxLogsDir(),
|
|
34
|
+
omxAgentsConfigDir(),
|
|
33
35
|
];
|
|
34
36
|
for (const dir of dirs) {
|
|
35
37
|
if (!dryRun) {
|
|
@@ -40,7 +42,7 @@ export async function setup(options = {}) {
|
|
|
40
42
|
}
|
|
41
43
|
console.log(' Done.\n');
|
|
42
44
|
// Step 2: Install agent prompts
|
|
43
|
-
console.log('[2/
|
|
45
|
+
console.log('[2/8] Installing agent prompts...');
|
|
44
46
|
const promptsSrc = join(pkgRoot, 'prompts');
|
|
45
47
|
const promptsDst = codexPromptsDir();
|
|
46
48
|
const promptCount = await installDirectory(promptsSrc, promptsDst, '.md', { force, dryRun, verbose });
|
|
@@ -57,20 +59,24 @@ export async function setup(options = {}) {
|
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
console.log(` Installed ${promptCount} agent prompts.\n`);
|
|
60
|
-
// Step 3: Install
|
|
61
|
-
console.log('[3/
|
|
62
|
+
// Step 3: Install native agent configs
|
|
63
|
+
console.log('[3/8] Installing native agent configs...');
|
|
64
|
+
const agentConfigCount = await installNativeAgentConfigs(pkgRoot, { force, dryRun, verbose });
|
|
65
|
+
console.log(` Installed ${agentConfigCount} native agent configs to ~/.omx/agents/.\n`);
|
|
66
|
+
// Step 4: Install skills
|
|
67
|
+
console.log('[4/8] Installing skills...');
|
|
62
68
|
const skillsSrc = join(pkgRoot, 'skills');
|
|
63
69
|
const skillsDst = userSkillsDir();
|
|
64
70
|
const skillCount = await installSkills(skillsSrc, skillsDst, { force, dryRun, verbose });
|
|
65
71
|
console.log(` Installed ${skillCount} skills.\n`);
|
|
66
|
-
// Step
|
|
67
|
-
console.log('[
|
|
72
|
+
// Step 5: Update config.toml
|
|
73
|
+
console.log('[5/8] Updating config.toml...');
|
|
68
74
|
if (!dryRun) {
|
|
69
75
|
await mergeConfig(codexConfigPath(), pkgRoot, { verbose });
|
|
70
76
|
}
|
|
71
77
|
console.log(' Done.\n');
|
|
72
|
-
// Step
|
|
73
|
-
console.log('[
|
|
78
|
+
// Step 5.5: Verify team comm MCP tools are available via omx_state server.
|
|
79
|
+
console.log('[5.5/8] Verifying Team MCP comm tools...');
|
|
74
80
|
const teamToolsCheck = await verifyTeamCommMcpTools(pkgRoot);
|
|
75
81
|
if (teamToolsCheck.ok) {
|
|
76
82
|
console.log(` omx_state exports: ${REQUIRED_TEAM_COMM_MCP_TOOLS.join(', ')}`);
|
|
@@ -80,8 +86,8 @@ export async function setup(options = {}) {
|
|
|
80
86
|
console.log(' Run `npm run build` and then re-run `omx setup`.');
|
|
81
87
|
}
|
|
82
88
|
console.log();
|
|
83
|
-
// Step
|
|
84
|
-
console.log('[
|
|
89
|
+
// Step 6: Generate AGENTS.md
|
|
90
|
+
console.log('[6/8] Generating AGENTS.md...');
|
|
85
91
|
const agentsMdSrc = join(pkgRoot, 'templates', 'AGENTS.md');
|
|
86
92
|
const agentsMdDst = join(process.cwd(), 'AGENTS.md');
|
|
87
93
|
// Guard: refuse to overwrite AGENTS.md during active session
|
|
@@ -108,12 +114,12 @@ export async function setup(options = {}) {
|
|
|
108
114
|
console.log(' AGENTS.md template not found, skipping.');
|
|
109
115
|
}
|
|
110
116
|
console.log();
|
|
111
|
-
// Step
|
|
112
|
-
console.log('[
|
|
117
|
+
// Step 7: Set up notify hook
|
|
118
|
+
console.log('[7/8] Configuring notification hook...');
|
|
113
119
|
await setupNotifyHook(pkgRoot, { dryRun, verbose });
|
|
114
120
|
console.log(' Done.\n');
|
|
115
|
-
// Step
|
|
116
|
-
console.log('[
|
|
121
|
+
// Step 8: Configure HUD
|
|
122
|
+
console.log('[8/8] Configuring HUD...');
|
|
117
123
|
const hudConfigPath = join(process.cwd(), '.omx', 'hud-config.json');
|
|
118
124
|
if (force || !existsSync(hudConfigPath)) {
|
|
119
125
|
if (!dryRun) {
|
|
@@ -135,6 +141,7 @@ export async function setup(options = {}) {
|
|
|
135
141
|
console.log(' 2. Use /prompts:architect, /prompts:executor, /prompts:planner as slash commands');
|
|
136
142
|
console.log(' 3. Skills are available via /skills or implicit matching');
|
|
137
143
|
console.log(' 4. The AGENTS.md orchestration brain is loaded automatically');
|
|
144
|
+
console.log(' 5. Native agent roles registered in config.toml [agents.*]');
|
|
138
145
|
if (isGitHubCliConfigured()) {
|
|
139
146
|
console.log('\nSupport the project: gh repo star Yeachan-Heo/oh-my-codex');
|
|
140
147
|
}
|
package/dist/cli/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,IAAI,EAAW,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,SAAS,EAAE,eAAe,EAAE,eAAe,EAC3C,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time GitHub star prompt shown at OMX startup.
|
|
3
|
+
* Skipped when no TTY or when gh CLI is not installed.
|
|
4
|
+
* State stored globally (~/.omx/state/star-prompt.json) so it shows once per user.
|
|
5
|
+
*/
|
|
6
|
+
export declare function starPromptStatePath(): string;
|
|
7
|
+
export declare function hasBeenPrompted(): Promise<boolean>;
|
|
8
|
+
export declare function markPrompted(): Promise<void>;
|
|
9
|
+
export declare function isGhInstalled(): boolean;
|
|
10
|
+
export declare function maybePromptGithubStar(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=star-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"star-prompt.d.ts","sourceRoot":"","sources":["../../src/cli/star-prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAUxD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAOvC;AAoBD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAa3D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time GitHub star prompt shown at OMX startup.
|
|
3
|
+
* Skipped when no TTY or when gh CLI is not installed.
|
|
4
|
+
* State stored globally (~/.omx/state/star-prompt.json) so it shows once per user.
|
|
5
|
+
*/
|
|
6
|
+
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
7
|
+
import { existsSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
import { spawnSync } from 'child_process';
|
|
11
|
+
import { createInterface } from 'readline/promises';
|
|
12
|
+
const REPO = 'Yeachan-Heo/oh-my-codex';
|
|
13
|
+
export function starPromptStatePath() {
|
|
14
|
+
return join(homedir(), '.omx', 'state', 'star-prompt.json');
|
|
15
|
+
}
|
|
16
|
+
export async function hasBeenPrompted() {
|
|
17
|
+
const path = starPromptStatePath();
|
|
18
|
+
if (!existsSync(path))
|
|
19
|
+
return false;
|
|
20
|
+
try {
|
|
21
|
+
const content = await readFile(path, 'utf-8');
|
|
22
|
+
const state = JSON.parse(content);
|
|
23
|
+
return typeof state.prompted_at === 'string';
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export async function markPrompted() {
|
|
30
|
+
const stateDir = join(homedir(), '.omx', 'state');
|
|
31
|
+
await mkdir(stateDir, { recursive: true });
|
|
32
|
+
await writeFile(starPromptStatePath(), JSON.stringify({ prompted_at: new Date().toISOString() }, null, 2));
|
|
33
|
+
}
|
|
34
|
+
export function isGhInstalled() {
|
|
35
|
+
const result = spawnSync('gh', ['--version'], {
|
|
36
|
+
encoding: 'utf-8',
|
|
37
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
38
|
+
timeout: 3000,
|
|
39
|
+
});
|
|
40
|
+
return !result.error && result.status === 0;
|
|
41
|
+
}
|
|
42
|
+
function starRepo() {
|
|
43
|
+
spawnSync('gh', ['api', '-X', 'PUT', `/user/starred/${REPO}`], {
|
|
44
|
+
encoding: 'utf-8',
|
|
45
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
46
|
+
timeout: 10000,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async function askYesNo(question) {
|
|
50
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
51
|
+
try {
|
|
52
|
+
const answer = (await rl.question(question)).trim().toLowerCase();
|
|
53
|
+
return answer === '' || answer === 'y' || answer === 'yes';
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
rl.close();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export async function maybePromptGithubStar() {
|
|
60
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY)
|
|
61
|
+
return;
|
|
62
|
+
if (await hasBeenPrompted())
|
|
63
|
+
return;
|
|
64
|
+
if (!isGhInstalled())
|
|
65
|
+
return;
|
|
66
|
+
// Mark as prompted before asking so we never prompt again even if interrupted.
|
|
67
|
+
await markPrompted();
|
|
68
|
+
const approved = await askYesNo('[omx] Enjoying oh-my-codex? Star it on GitHub? [Y/n] ');
|
|
69
|
+
if (!approved)
|
|
70
|
+
return;
|
|
71
|
+
starRepo();
|
|
72
|
+
console.log('[omx] Thanks for the star!');
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=star-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"star-prompt.js","sourceRoot":"","sources":["../../src/cli/star-prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,UAAU,WAAW;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAeD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOvE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,UAAU,SAAoB,GAC7B,OAAO,CAKT;AA6ED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,UAAU,WAAW;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAeD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOvE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,UAAU,SAAoB,GAC7B,OAAO,CAKT;AA6ED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B1E"}
|
package/dist/cli/update.js
CHANGED
|
@@ -8,7 +8,6 @@ import { join } from 'path';
|
|
|
8
8
|
import { spawnSync } from 'child_process';
|
|
9
9
|
import { createInterface } from 'readline/promises';
|
|
10
10
|
import { getPackageRoot } from '../utils/package.js';
|
|
11
|
-
import { notify } from '../notifications/notifier.js';
|
|
12
11
|
const PACKAGE_NAME = 'oh-my-codex';
|
|
13
12
|
const CHECK_INTERVAL_MS = 12 * 60 * 60 * 1000; // 12h
|
|
14
13
|
function parseSemver(version) {
|
|
@@ -114,7 +113,8 @@ async function askYesNo(question) {
|
|
|
114
113
|
export async function maybeCheckAndPromptUpdate(cwd) {
|
|
115
114
|
if (process.env.OMX_AUTO_UPDATE === '0')
|
|
116
115
|
return;
|
|
117
|
-
|
|
116
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY)
|
|
117
|
+
return;
|
|
118
118
|
const now = Date.now();
|
|
119
119
|
const state = await readUpdateState(cwd);
|
|
120
120
|
if (!shouldCheckForUpdates(now, state))
|
|
@@ -129,38 +129,16 @@ export async function maybeCheckAndPromptUpdate(cwd) {
|
|
|
129
129
|
});
|
|
130
130
|
if (!current || !latest || !isNewerVersion(current, latest))
|
|
131
131
|
return;
|
|
132
|
-
|
|
133
|
-
if (
|
|
134
|
-
|
|
135
|
-
if (!approved) {
|
|
136
|
-
await notify({
|
|
137
|
-
title: 'OMX Update Available',
|
|
138
|
-
message: `New version available: v${current} -> v${latest}.`,
|
|
139
|
-
type: 'info',
|
|
140
|
-
projectPath: cwd,
|
|
141
|
-
});
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
132
|
+
const approved = await askYesNo(`[omx] Update available: v${current} → v${latest}. Update now? [Y/n] `);
|
|
133
|
+
if (!approved)
|
|
134
|
+
return;
|
|
145
135
|
console.log(`[omx] Running: npm install -g ${PACKAGE_NAME}@latest`);
|
|
146
136
|
const result = runGlobalUpdate();
|
|
147
137
|
if (result.ok) {
|
|
148
|
-
console.log(`[omx]
|
|
149
|
-
await notify({
|
|
150
|
-
title: 'OMX Updated',
|
|
151
|
-
message: `Updated ${PACKAGE_NAME} from v${current} to v${latest}. Restart sessions to use new code.`,
|
|
152
|
-
type: 'success',
|
|
153
|
-
projectPath: cwd,
|
|
154
|
-
});
|
|
138
|
+
console.log(`[omx] Updated to v${latest}. Restart to use new code.`);
|
|
155
139
|
}
|
|
156
140
|
else {
|
|
157
|
-
console.log('[omx]
|
|
158
|
-
await notify({
|
|
159
|
-
title: 'OMX Update Available',
|
|
160
|
-
message: `v${current} -> v${latest}. Auto-update failed: ${result.stderr || 'unknown error'}`,
|
|
161
|
-
type: 'warning',
|
|
162
|
-
projectPath: cwd,
|
|
163
|
-
});
|
|
141
|
+
console.log('[omx] Update failed. Run manually: npm install -g oh-my-codex@latest');
|
|
164
142
|
}
|
|
165
143
|
}
|
|
166
144
|
//# sourceMappingURL=update.js.map
|
package/dist/cli/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/config/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/config/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmPD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAiCf"}
|
package/dist/config/generator.js
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
import { readFile, writeFile } from 'fs/promises';
|
|
13
13
|
import { existsSync } from 'fs';
|
|
14
14
|
import { join } from 'path';
|
|
15
|
+
import { AGENT_DEFINITIONS } from '../agents/definitions.js';
|
|
16
|
+
import { omxAgentsConfigDir } from '../utils/paths.js';
|
|
15
17
|
// ---------------------------------------------------------------------------
|
|
16
18
|
// Top-level OMX keys (must live before any [table] header)
|
|
17
19
|
// ---------------------------------------------------------------------------
|
|
@@ -142,6 +144,31 @@ function stripExistingOmxBlocks(config) {
|
|
|
142
144
|
}
|
|
143
145
|
return { cleaned, removed };
|
|
144
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Generate [agents.<name>] entries for Codex native multi-agent support.
|
|
149
|
+
* Each agent gets a description and config_file pointing to ~/.omx/agents/<name>.toml
|
|
150
|
+
*/
|
|
151
|
+
function getAgentEntries() {
|
|
152
|
+
const SKIP_AGENTS = new Set(['deep-executor']);
|
|
153
|
+
const entries = [
|
|
154
|
+
'',
|
|
155
|
+
'# OMX Native Agent Roles (Codex multi-agent)',
|
|
156
|
+
];
|
|
157
|
+
for (const [name, agent] of Object.entries(AGENT_DEFINITIONS)) {
|
|
158
|
+
if (SKIP_AGENTS.has(name))
|
|
159
|
+
continue;
|
|
160
|
+
// TOML table headers with special chars need quoting
|
|
161
|
+
const tableKey = name.includes('-') ? `agents."${name}"` : `agents.${name}`;
|
|
162
|
+
const configFile = join(omxAgentsConfigDir(), `${name}.toml`)
|
|
163
|
+
.replace(/\\/g, '\\\\')
|
|
164
|
+
.replace(/"/g, '\\"');
|
|
165
|
+
entries.push('');
|
|
166
|
+
entries.push(`[${tableKey}]`);
|
|
167
|
+
entries.push(`description = "${agent.description}"`);
|
|
168
|
+
entries.push(`config_file = "${configFile}"`);
|
|
169
|
+
}
|
|
170
|
+
return entries;
|
|
171
|
+
}
|
|
145
172
|
/**
|
|
146
173
|
* OMX table-section block (MCP servers, TUI).
|
|
147
174
|
* Contains ONLY [table] sections — no bare keys.
|
|
@@ -185,6 +212,7 @@ function getOmxTablesBlock(pkgRoot) {
|
|
|
185
212
|
`args = ["${traceServerPath}"]`,
|
|
186
213
|
'enabled = true',
|
|
187
214
|
'startup_timeout_sec = 5',
|
|
215
|
+
...getAgentEntries(),
|
|
188
216
|
'',
|
|
189
217
|
'# OMX TUI StatusLine (Codex CLI v0.101.0+)',
|
|
190
218
|
'[tui]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/config/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/config/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,5 +14,6 @@ export { doctor } from './cli/doctor.js';
|
|
|
14
14
|
export { version } from './cli/version.js';
|
|
15
15
|
export { mergeConfig } from './config/generator.js';
|
|
16
16
|
export { AGENT_DEFINITIONS, type AgentDefinition } from './agents/definitions.js';
|
|
17
|
+
export { generateAgentToml, installNativeAgentConfigs } from './agents/native-config.js';
|
|
17
18
|
export { hudCommand } from './hud/index.js';
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,5 +14,6 @@ export { doctor } from './cli/doctor.js';
|
|
|
14
14
|
export { version } from './cli/version.js';
|
|
15
15
|
export { mergeConfig } from './config/generator.js';
|
|
16
16
|
export { AGENT_DEFINITIONS } from './agents/definitions.js';
|
|
17
|
+
export { generateAgentToml, installNativeAgentConfigs } from './agents/native-config.js';
|
|
17
18
|
export { hudCommand } from './hud/index.js';
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from 'node:test';
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
|
-
import { analyzePaneContent } from '../tmux-detector.js';
|
|
3
|
+
import { analyzePaneContent, buildSendPaneArgvs } from '../tmux-detector.js';
|
|
4
4
|
describe('analyzePaneContent', () => {
|
|
5
5
|
it('returns zero confidence for empty content', () => {
|
|
6
6
|
const result = analyzePaneContent('');
|
|
@@ -74,4 +74,72 @@ describe('analyzePaneContent', () => {
|
|
|
74
74
|
assert.ok(result.confidence > 0);
|
|
75
75
|
});
|
|
76
76
|
});
|
|
77
|
+
// issue #107: Enter/C-m must be sent in an isolated, separate send-keys call —
|
|
78
|
+
// never bundled with text — to prevent Shift+Enter injection.
|
|
79
|
+
describe('buildSendPaneArgvs', () => {
|
|
80
|
+
it('sends text with -l (literal) flag so key names in text are not interpreted', () => {
|
|
81
|
+
const argvs = buildSendPaneArgvs('%3', 'hello world', false);
|
|
82
|
+
const textArgv = argvs[0];
|
|
83
|
+
assert.ok(textArgv.includes('-l'), 'text argv must include -l flag');
|
|
84
|
+
assert.ok(textArgv.includes('hello world'), 'text argv must include the text');
|
|
85
|
+
});
|
|
86
|
+
it('uses -- separator so text starting with - is not parsed as a flag', () => {
|
|
87
|
+
const argvs = buildSendPaneArgvs('%3', '-flag-like', false);
|
|
88
|
+
const textArgv = argvs[0];
|
|
89
|
+
const sepIdx = textArgv.indexOf('--');
|
|
90
|
+
assert.ok(sepIdx !== -1, '-- separator must be present');
|
|
91
|
+
assert.equal(textArgv[sepIdx + 1], '-flag-like', 'text must come immediately after --');
|
|
92
|
+
});
|
|
93
|
+
it('sends Enter as an isolated separate argv — never bundled with text', () => {
|
|
94
|
+
const argvs = buildSendPaneArgvs('%3', 'hello', true);
|
|
95
|
+
assert.ok(argvs.length >= 2, 'must have at least text argv + one C-m argv');
|
|
96
|
+
// The text argv must NOT contain C-m
|
|
97
|
+
const textArgv = argvs[0];
|
|
98
|
+
assert.ok(!textArgv.includes('C-m'), 'text argv must not contain C-m');
|
|
99
|
+
// Submit argvs must NOT use -l (they are key names, not literal text)
|
|
100
|
+
for (const submitArgv of argvs.slice(1)) {
|
|
101
|
+
assert.ok(!submitArgv.includes('-l'), 'C-m argv must not use -l flag');
|
|
102
|
+
assert.ok(submitArgv.includes('C-m'), 'C-m argv must include C-m');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
it('sends C-m twice when pressEnter is true', () => {
|
|
106
|
+
const argvs = buildSendPaneArgvs('%3', 'hello', true);
|
|
107
|
+
const submitArgvs = argvs.slice(1);
|
|
108
|
+
assert.equal(submitArgvs.length, 2, 'must send C-m exactly twice');
|
|
109
|
+
for (const argv of submitArgvs) {
|
|
110
|
+
assert.equal(argv[argv.length - 1], 'C-m');
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
it('omits C-m entirely when pressEnter is false', () => {
|
|
114
|
+
const argvs = buildSendPaneArgvs('%3', 'hello', false);
|
|
115
|
+
assert.equal(argvs.length, 1, 'must have only the text argv when pressEnter=false');
|
|
116
|
+
assert.ok(!argvs[0].includes('C-m'), 'no C-m when pressEnter=false');
|
|
117
|
+
});
|
|
118
|
+
it('strips newlines from text to prevent literal Enter injection via -l', () => {
|
|
119
|
+
const argvs = buildSendPaneArgvs('%3', 'line1\nline2\r\nline3', false);
|
|
120
|
+
const textArgv = argvs[0];
|
|
121
|
+
const text = textArgv[textArgv.length - 1];
|
|
122
|
+
assert.ok(!text.includes('\n'), 'newline must be stripped');
|
|
123
|
+
assert.ok(!text.includes('\r'), 'carriage return must be stripped');
|
|
124
|
+
assert.ok(text.includes('line1'), 'text content must be preserved');
|
|
125
|
+
});
|
|
126
|
+
it('targets the correct pane in every argv', () => {
|
|
127
|
+
const argvs = buildSendPaneArgvs('%42', 'hello', true);
|
|
128
|
+
for (const argv of argvs) {
|
|
129
|
+
const tIdx = argv.indexOf('-t');
|
|
130
|
+
assert.ok(tIdx !== -1, 'every argv must have -t flag');
|
|
131
|
+
assert.equal(argv[tIdx + 1], '%42', 'pane target must be %42');
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
it('matches the two-step pattern of buildSendKeysArgv from tmux-hook-engine', () => {
|
|
135
|
+
// Regression guard: the structure must be [typeArgv, submitArgv, submitArgv]
|
|
136
|
+
// consistent with the established pattern across the codebase.
|
|
137
|
+
const argvs = buildSendPaneArgvs('%5', 'continue', true);
|
|
138
|
+
assert.deepEqual(argvs, [
|
|
139
|
+
['send-keys', '-t', '%5', '-l', '--', 'continue'],
|
|
140
|
+
['send-keys', '-t', '%5', 'C-m'],
|
|
141
|
+
['send-keys', '-t', '%5', 'C-m'],
|
|
142
|
+
]);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
77
145
|
//# sourceMappingURL=tmux-detector.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-detector.test.js","sourceRoot":"","sources":["../../../src/notifications/__tests__/tmux-detector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"tmux-detector.test.js","sourceRoot":"","sources":["../../../src/notifications/__tests__/tmux-detector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Security considerations:
|
|
8
8
|
* - State/PID/log files use restrictive permissions (0600)
|
|
9
9
|
* - Bot tokens stored in state file, NOT in environment variables
|
|
10
|
-
* - Two-layer input sanitization (sanitizeReplyInput +
|
|
10
|
+
* - Two-layer input sanitization (sanitizeReplyInput + newline stripping in buildSendPaneArgvs)
|
|
11
11
|
* - Pane verification via analyzePaneContent before every injection
|
|
12
12
|
* - Authorization: only configured user IDs (Discord) / chat ID (Telegram) can inject
|
|
13
13
|
* - Rate limiting to prevent spam/abuse
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Security considerations:
|
|
8
8
|
* - State/PID/log files use restrictive permissions (0600)
|
|
9
9
|
* - Bot tokens stored in state file, NOT in environment variables
|
|
10
|
-
* - Two-layer input sanitization (sanitizeReplyInput +
|
|
10
|
+
* - Two-layer input sanitization (sanitizeReplyInput + newline stripping in buildSendPaneArgvs)
|
|
11
11
|
* - Pane verification via analyzePaneContent before every injection
|
|
12
12
|
* - Authorization: only configured user IDs (Discord) / chat ID (Telegram) can inject
|
|
13
13
|
* - Rate limiting to prevent spam/abuse
|
|
@@ -13,5 +13,21 @@ export interface PaneAnalysis {
|
|
|
13
13
|
confidence: number;
|
|
14
14
|
}
|
|
15
15
|
export declare function analyzePaneContent(content: string): PaneAnalysis;
|
|
16
|
+
/**
|
|
17
|
+
* Builds the ordered list of tmux send-keys argv arrays needed to type text
|
|
18
|
+
* into a pane and optionally submit it.
|
|
19
|
+
*
|
|
20
|
+
* Enter (C-m) is always sent in its own dedicated send-keys call, never
|
|
21
|
+
* bundled with the text payload. This prevents Shift+Enter injection: without
|
|
22
|
+
* this isolation a C-m (or any other tmux key name) embedded in the text
|
|
23
|
+
* could be interpreted as a key press by tmux when sent without -l (issue #107).
|
|
24
|
+
*
|
|
25
|
+
* @param paneId tmux pane identifier, e.g. "%3"
|
|
26
|
+
* @param text text to type; embedded newlines are replaced with spaces
|
|
27
|
+
* to prevent them from acting as Enter when sent literally
|
|
28
|
+
* @param pressEnter when true, appends two isolated C-m submit calls
|
|
29
|
+
* @returns array of argv arrays, one per send-keys invocation
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildSendPaneArgvs(paneId: string, text: string, pressEnter?: boolean): string[][];
|
|
16
32
|
export declare function sendToPane(paneId: string, text: string, pressEnter?: boolean): boolean;
|
|
17
33
|
//# sourceMappingURL=tmux-detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-detector.d.ts","sourceRoot":"","sources":["../../src/notifications/tmux-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,wBAAgB,eAAe,IAAI,OAAO,CAOzC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAU7E;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA0BhE;
|
|
1
|
+
{"version":3,"file":"tmux-detector.d.ts","sourceRoot":"","sources":["../../src/notifications/tmux-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,wBAAgB,eAAe,IAAI,OAAO,CAOzC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAU7E;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA0BhE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,OAAc,GACzB,MAAM,EAAE,EAAE,CAoBZ;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,GAAG,OAAO,CAU5F"}
|