codex-orchestrator 0.1.27 → 0.1.29
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/CHANGELOG.md +9 -0
- package/README.md +11 -2
- package/dist/src/cli.js +28 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/github/gh-issue-adapter.d.ts +2 -1
- package/dist/src/github/gh-issue-adapter.d.ts.map +1 -1
- package/dist/src/github/gh-issue-adapter.js +9 -0
- package/dist/src/github/gh-issue-adapter.js.map +1 -1
- package/dist/src/github/issues.d.ts +29 -0
- package/dist/src/github/issues.d.ts.map +1 -1
- package/dist/src/github/issues.js +75 -0
- package/dist/src/github/issues.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/runner/doctor-command.d.ts +2 -0
- package/dist/src/runner/doctor-command.d.ts.map +1 -1
- package/dist/src/runner/doctor-command.js +40 -10
- package/dist/src/runner/doctor-command.js.map +1 -1
- package/dist/src/runner/recovery.d.ts +1 -1
- package/dist/src/runner/recovery.d.ts.map +1 -1
- package/dist/src/runner/recovery.js +6 -3
- package/dist/src/runner/recovery.js.map +1 -1
- package/dist/src/setup/codex-command-resolver.d.ts +10 -0
- package/dist/src/setup/codex-command-resolver.d.ts.map +1 -0
- package/dist/src/setup/codex-command-resolver.js +91 -0
- package/dist/src/setup/codex-command-resolver.js.map +1 -0
- package/dist/src/setup/prompt-sync.d.ts +13 -0
- package/dist/src/setup/prompt-sync.d.ts.map +1 -0
- package/dist/src/setup/prompt-sync.js +219 -0
- package/dist/src/setup/prompt-sync.js.map +1 -0
- package/dist/src/setup/setup-command.d.ts +5 -0
- package/dist/src/setup/setup-command.d.ts.map +1 -1
- package/dist/src/setup/setup-command.js +41 -29
- package/dist/src/setup/setup-command.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { access, constants } from 'node:fs/promises';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
3
|
import { codexPhaseKeys } from '../config/schema.js';
|
|
4
|
+
import { resolveExecutableCommand } from '../setup/codex-command-resolver.js';
|
|
4
5
|
import { GhCliLabelAdapter } from '../setup/github-label-adapter.js';
|
|
6
|
+
import { checkPromptFiles } from '../setup/prompt-sync.js';
|
|
5
7
|
import { defaultShellCommandExecutor } from '../process/command.js';
|
|
6
8
|
import { readRunnerConfig } from './command-utils.js';
|
|
7
9
|
export async function runDoctorCommand(options) {
|
|
@@ -17,8 +19,9 @@ export async function runDoctorCommand(options) {
|
|
|
17
19
|
}
|
|
18
20
|
if (config) {
|
|
19
21
|
const shellExecutor = options.shellExecutor ?? defaultShellCommandExecutor;
|
|
22
|
+
const commandResolver = options.commandResolver ?? resolveExecutableCommand;
|
|
20
23
|
const labelAdapter = options.labelAdapter ?? new GhCliLabelAdapter(config.github.owner, config.github.repo);
|
|
21
|
-
checks.push(...await collectReadinessChecks(targetRoot, config, labelAdapter, shellExecutor));
|
|
24
|
+
checks.push(...await collectReadinessChecks(targetRoot, config, labelAdapter, shellExecutor, commandResolver));
|
|
22
25
|
}
|
|
23
26
|
const json = buildDoctorJson(targetRoot, config, checks);
|
|
24
27
|
return {
|
|
@@ -26,17 +29,18 @@ export async function runDoctorCommand(options) {
|
|
|
26
29
|
json,
|
|
27
30
|
};
|
|
28
31
|
}
|
|
29
|
-
async function collectReadinessChecks(targetRoot, config, labelAdapter, shellExecutor) {
|
|
32
|
+
async function collectReadinessChecks(targetRoot, config, labelAdapter, shellExecutor, commandResolver) {
|
|
30
33
|
const checks = [];
|
|
31
|
-
checks.push(await checkCommand(
|
|
34
|
+
checks.push(await checkCommand(commandResolver, 'git', 'git', 'Git command'));
|
|
32
35
|
checks.push(await checkShell(shellExecutor, 'git-repository', 'Git repository', 'git rev-parse --is-inside-work-tree', targetRoot));
|
|
33
36
|
checks.push(await checkShell(shellExecutor, 'base-branch', 'Base branch', `git rev-parse --verify ${shellQuote(config.branches.base)}`, targetRoot));
|
|
34
37
|
checks.push(await checkLabels(labelAdapter, Object.values(config.github.labels).map((label) => label.name)));
|
|
35
38
|
checks.push(await checkPath(targetRoot, 'target', 'Target directory'));
|
|
36
39
|
checks.push(await checkPath(resolve(targetRoot, config.runner.stateDir), 'state-dir', 'Runner state directory', 'warn'));
|
|
37
40
|
checks.push(await checkPath(resolve(targetRoot, config.runner.workspaceRoot), 'workspace-root', 'Runner workspace root', 'warn'));
|
|
38
|
-
checks.push(await
|
|
39
|
-
checks.push(
|
|
41
|
+
checks.push(await checkPromptUpdates(targetRoot));
|
|
42
|
+
checks.push(await checkCommand(commandResolver, config.codex.command, 'codex-command', 'Codex command'));
|
|
43
|
+
checks.push(...await checkProfileCommands(config, commandResolver));
|
|
40
44
|
checks.push(check('configured-checks', 'Configured checks', Object.keys(config.checks).length > 0 ? 'pass' : 'warn', Object.keys(config.checks).length > 0 ? `${Object.keys(config.checks).length} check(s) configured` : 'no configured checks'));
|
|
41
45
|
checks.push(check('phase-profiles', 'Phase profiles', 'pass', 'phase profile config is valid and missing profiles fall back to global Codex config'));
|
|
42
46
|
checks.push(check('visual-proof', 'Visual proof prerequisites', config.reviewGates.visualProof.enabled && !config.reviewGates.visualProof.runnerValidationCommand ? 'warn' : 'pass', config.reviewGates.visualProof.enabled
|
|
@@ -44,14 +48,25 @@ async function collectReadinessChecks(targetRoot, config, labelAdapter, shellExe
|
|
|
44
48
|
: 'visual proof gate is disabled'));
|
|
45
49
|
return checks;
|
|
46
50
|
}
|
|
47
|
-
async function
|
|
51
|
+
async function checkPromptUpdates(targetRoot) {
|
|
52
|
+
const result = await checkPromptFiles(targetRoot);
|
|
53
|
+
const pending = result.installed.length + result.updated.length + result.conflicts.length;
|
|
54
|
+
if (pending === 0) {
|
|
55
|
+
return check('prompt-sync', 'Prompt sync', 'pass', 'project prompts match bundled package prompts');
|
|
56
|
+
}
|
|
57
|
+
return check('prompt-sync', 'Prompt sync', 'warn', `prompt updates available: ${result.installed.length} missing, ${result.updated.length} safe update(s), ${result.conflicts.length} conflict(s)`, [
|
|
58
|
+
'Run codex-orchestrator setup --sync-prompts=auto to apply safe prompt updates.',
|
|
59
|
+
'Use --sync-prompts=replace to overwrite local prompt edits with bundled prompts.',
|
|
60
|
+
]);
|
|
61
|
+
}
|
|
62
|
+
async function checkProfileCommands(config, commandResolver) {
|
|
48
63
|
const checks = [];
|
|
49
64
|
for (const phase of codexPhaseKeys) {
|
|
50
65
|
const command = config.codex.profiles?.[phase]?.command;
|
|
51
66
|
if (!command || command === config.codex.command) {
|
|
52
67
|
continue;
|
|
53
68
|
}
|
|
54
|
-
checks.push(await checkCommand(
|
|
69
|
+
checks.push(await checkCommand(commandResolver, command, `codex-profile-${phase}`, `Codex profile ${phase}`));
|
|
55
70
|
}
|
|
56
71
|
return checks;
|
|
57
72
|
}
|
|
@@ -75,12 +90,24 @@ async function checkPath(path, id, title, missingStatus = 'fail') {
|
|
|
75
90
|
return check(id, title, missingStatus, `${path} is not readable`);
|
|
76
91
|
}
|
|
77
92
|
}
|
|
78
|
-
async function checkCommand(
|
|
79
|
-
|
|
93
|
+
async function checkCommand(commandResolver, command, id, title) {
|
|
94
|
+
const resolvedCommand = await commandResolver(command);
|
|
95
|
+
return check(id, title, resolvedCommand ? 'pass' : 'fail', resolvedCommand ? `${title} is ready` : unavailableCommandSummary(id, command));
|
|
80
96
|
}
|
|
81
97
|
async function checkShell(shellExecutor, id, title, command, cwd) {
|
|
82
98
|
const result = await shellExecutor(command, { cwd });
|
|
83
|
-
return check(id, title, result.exitCode === 0 ? 'pass' : 'fail', result.exitCode === 0
|
|
99
|
+
return check(id, title, result.exitCode === 0 ? 'pass' : 'fail', result.exitCode === 0
|
|
100
|
+
? `${title} is ready`
|
|
101
|
+
: (result.stderr || result.stdout || `${title} failed`));
|
|
102
|
+
}
|
|
103
|
+
function unavailableCommandSummary(id, command) {
|
|
104
|
+
if (id === 'codex-command') {
|
|
105
|
+
return `Codex command '${command}' is not available. Re-run setup so codex-orchestrator can persist a stable Codex CLI path.`;
|
|
106
|
+
}
|
|
107
|
+
if (id.startsWith('codex-profile-')) {
|
|
108
|
+
return `Codex profile command '${command}' is not available. Re-run setup or update the configured profile command.`;
|
|
109
|
+
}
|
|
110
|
+
return `Command '${command}' is not available.`;
|
|
84
111
|
}
|
|
85
112
|
function buildDoctorJson(targetRoot, config, checks) {
|
|
86
113
|
const pass = checks.filter((item) => item.status === 'pass');
|
|
@@ -118,6 +145,9 @@ function check(id, title, status, summary, details) {
|
|
|
118
145
|
return { id, title, status, summary, details };
|
|
119
146
|
}
|
|
120
147
|
function shellQuote(value) {
|
|
148
|
+
if (process.platform === 'win32') {
|
|
149
|
+
return `"${value.replaceAll('"', '""')}"`;
|
|
150
|
+
}
|
|
121
151
|
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
122
152
|
}
|
|
123
153
|
//# sourceMappingURL=doctor-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../../src/runner/doctor-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../../src/runner/doctor-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { CodexOrchestratorConfig } from '../config/schema.js';
|
|
|
2
2
|
import type { GitHubIssueAdapter } from '../github/issues.js';
|
|
3
3
|
import { type RunnerMode } from './issue-state-machine.js';
|
|
4
4
|
import type { RunnerStateStore } from './local-state.js';
|
|
5
|
-
export type RecoveryStatus = 'active' | 'stale' | 'missing' | 'completed' | 'waiting-for-clarification' | 'clarification-resumable';
|
|
5
|
+
export type RecoveryStatus = 'active' | 'stale' | 'missing' | 'completed' | 'closed-missing-evidence' | 'waiting-for-clarification' | 'clarification-resumable';
|
|
6
6
|
export interface RecoveryEntry {
|
|
7
7
|
issueNumber: number;
|
|
8
8
|
mode: RunnerMode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../src/runner/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../src/runner/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,OAAO,GACP,SAAS,GACT,WAAW,GACX,yBAAyB,GACzB,2BAA2B,GAC3B,yBAAyB,CAAC;AAE9B,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,EAAE,kBAAkB,CAAC;IACjC,MAAM,EAAE,uBAAuB,CAAC;IAChC,GAAG,EAAE,IAAI,CAAC;IACV,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAYD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAoCrG"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { hasIssueClosureEvidence } from '../github/issues.js';
|
|
1
2
|
import { clearClarificationGate, hasMaintainerResponseAfterLatestClarification, } from './issue-state-machine.js';
|
|
2
3
|
const recoveryReasons = {
|
|
3
4
|
active: 'GitHub still marks the issue running',
|
|
4
5
|
stale: 'local run exists but GitHub no longer marks it running',
|
|
5
6
|
missing: 'local run has no matching GitHub issue',
|
|
6
7
|
completed: 'GitHub marks the work completed',
|
|
8
|
+
'closed-missing-evidence': 'GitHub marks the issue closed without completion evidence',
|
|
7
9
|
'waiting-for-clarification': 'blocked clarification is waiting for maintainer response',
|
|
8
10
|
'clarification-resumable': 'maintainer clarification response detected',
|
|
9
11
|
};
|
|
@@ -44,9 +46,10 @@ function classifyIssue(issue, config) {
|
|
|
44
46
|
return 'missing';
|
|
45
47
|
}
|
|
46
48
|
const labels = new Set(issue.labels.map((label) => label.name));
|
|
47
|
-
if (issue.state === 'CLOSED'
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
if (issue.state === 'CLOSED') {
|
|
50
|
+
return hasIssueClosureEvidence(issue) ? 'completed' : 'closed-missing-evidence';
|
|
51
|
+
}
|
|
52
|
+
if (labels.has(config.github.labels.review.name) || issue.closedByPullRequestsReferences.length > 0) {
|
|
50
53
|
return 'completed';
|
|
51
54
|
}
|
|
52
55
|
if (labels.has(config.github.labels.blocked.name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../src/runner/recovery.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,6CAA6C,GAE9C,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../src/runner/recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type CodexCommandResolver = () => Promise<string | undefined>;
|
|
2
|
+
export type ExecutableCommandResolver = (command: string) => Promise<string | undefined>;
|
|
3
|
+
export interface ResolveCodexCommandOptions {
|
|
4
|
+
env?: NodeJS.ProcessEnv;
|
|
5
|
+
platform?: NodeJS.Platform;
|
|
6
|
+
canExecute?: (path: string) => Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveCodexCommand(options?: ResolveCodexCommandOptions): Promise<string | undefined>;
|
|
9
|
+
export declare function resolveExecutableCommand(command: string, options?: ResolveCodexCommandOptions): Promise<string | undefined>;
|
|
10
|
+
//# sourceMappingURL=codex-command-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-command-resolver.d.ts","sourceRoot":"","sources":["../../../src/setup/codex-command-resolver.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AACrE,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEzF,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjD;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiB/G;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { access, constants } from 'node:fs/promises';
|
|
2
|
+
import { posix, win32 } from 'node:path';
|
|
3
|
+
export async function resolveCodexCommand(options = {}) {
|
|
4
|
+
const platform = options.platform ?? process.platform;
|
|
5
|
+
const env = options.env ?? process.env;
|
|
6
|
+
const canExecute = options.canExecute ?? isExecutable;
|
|
7
|
+
const fromPath = await resolveExecutableCommand('codex', { env, platform, canExecute });
|
|
8
|
+
if (fromPath) {
|
|
9
|
+
return fromPath;
|
|
10
|
+
}
|
|
11
|
+
for (const candidate of knownFallbackCandidates(platform)) {
|
|
12
|
+
if (await canExecute(candidate)) {
|
|
13
|
+
return candidate;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
export async function resolveExecutableCommand(command, options = {}) {
|
|
19
|
+
const platform = options.platform ?? process.platform;
|
|
20
|
+
const env = options.env ?? process.env;
|
|
21
|
+
const canExecute = options.canExecute ?? isExecutable;
|
|
22
|
+
if (hasPathSegment(command, platform)) {
|
|
23
|
+
return await canExecute(command) ? command : undefined;
|
|
24
|
+
}
|
|
25
|
+
for (const candidate of pathCandidates(command, env, platform)) {
|
|
26
|
+
if (await canExecute(candidate)) {
|
|
27
|
+
return candidate;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
function pathCandidates(command, env, platform) {
|
|
33
|
+
const pathValue = readPathValue(env);
|
|
34
|
+
if (!pathValue) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
const pathModule = platform === 'win32' ? win32 : posix;
|
|
38
|
+
const commands = commandNames(command, platform, env);
|
|
39
|
+
const separator = platform === 'win32' ? ';' : ':';
|
|
40
|
+
const directories = pathValue.split(separator).filter((item) => item.length > 0);
|
|
41
|
+
return directories.flatMap((directory) => commands.map((command) => pathModule.join(directory, command)));
|
|
42
|
+
}
|
|
43
|
+
function commandNames(command, platform, env) {
|
|
44
|
+
if (platform !== 'win32') {
|
|
45
|
+
return [command];
|
|
46
|
+
}
|
|
47
|
+
if (win32.extname(command)) {
|
|
48
|
+
return [command];
|
|
49
|
+
}
|
|
50
|
+
const extensions = readPathExt(env);
|
|
51
|
+
return [command, ...extensions.map((extension) => `${command}${extension.toLowerCase()}`)];
|
|
52
|
+
}
|
|
53
|
+
function hasPathSegment(command, platform) {
|
|
54
|
+
if (platform === 'win32') {
|
|
55
|
+
return command.includes('\\') || command.includes('/') || win32.isAbsolute(command);
|
|
56
|
+
}
|
|
57
|
+
return command.includes('/') || posix.isAbsolute(command);
|
|
58
|
+
}
|
|
59
|
+
function readPathValue(env) {
|
|
60
|
+
return env.PATH ?? env.Path ?? env.path;
|
|
61
|
+
}
|
|
62
|
+
function readPathExt(env) {
|
|
63
|
+
const value = env.PATHEXT ?? '.COM;.EXE;.BAT;.CMD';
|
|
64
|
+
const seen = new Set();
|
|
65
|
+
const extensions = [];
|
|
66
|
+
for (const rawExtension of value.split(';')) {
|
|
67
|
+
const extension = rawExtension.trim();
|
|
68
|
+
if (!extension || seen.has(extension.toLowerCase())) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
seen.add(extension.toLowerCase());
|
|
72
|
+
extensions.push(extension);
|
|
73
|
+
}
|
|
74
|
+
return extensions;
|
|
75
|
+
}
|
|
76
|
+
function knownFallbackCandidates(platform) {
|
|
77
|
+
if (platform === 'darwin') {
|
|
78
|
+
return ['/Applications/Codex.app/Contents/Resources/codex'];
|
|
79
|
+
}
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
async function isExecutable(path) {
|
|
83
|
+
try {
|
|
84
|
+
await access(path, constants.X_OK);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=codex-command-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-command-resolver.js","sourceRoot":"","sources":["../../../src/setup/codex-command-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const promptSyncModes: readonly ["auto", "keep", "replace", "merge"];
|
|
2
|
+
export type PromptSyncMode = (typeof promptSyncModes)[number];
|
|
3
|
+
export interface PromptSyncResult {
|
|
4
|
+
manifestPath: string;
|
|
5
|
+
installed: string[];
|
|
6
|
+
updated: string[];
|
|
7
|
+
preserved: string[];
|
|
8
|
+
conflicts: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function promptManifestPath(targetRoot: string): string;
|
|
11
|
+
export declare function checkPromptFiles(targetRoot: string, mode?: PromptSyncMode): Promise<PromptSyncResult>;
|
|
12
|
+
export declare function syncPromptFiles(targetRoot: string, mode: PromptSyncMode): Promise<PromptSyncResult>;
|
|
13
|
+
//# sourceMappingURL=prompt-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-sync.d.ts","sourceRoot":"","sources":["../../../src/setup/prompt-sync.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe,+CAAgD,CAAC;AAC7E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAsBD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,cAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEnH;AAED,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEzG"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { cp, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { readPackageInfo } from '../package-info.js';
|
|
5
|
+
import { workflowDefinitions } from './workflows.js';
|
|
6
|
+
export const promptSyncModes = ['auto', 'keep', 'replace', 'merge'];
|
|
7
|
+
export function promptManifestPath(targetRoot) {
|
|
8
|
+
return join(targetRoot, '.codex-orchestrator', 'prompts', 'manifest.json');
|
|
9
|
+
}
|
|
10
|
+
export async function checkPromptFiles(targetRoot, mode = 'auto') {
|
|
11
|
+
return visitPromptFiles(targetRoot, mode, false);
|
|
12
|
+
}
|
|
13
|
+
export async function syncPromptFiles(targetRoot, mode) {
|
|
14
|
+
return visitPromptFiles(targetRoot, mode, true);
|
|
15
|
+
}
|
|
16
|
+
async function visitPromptFiles(targetRoot, mode, write) {
|
|
17
|
+
const packageInfo = await readPackageInfo();
|
|
18
|
+
const manifestPath = promptManifestPath(targetRoot);
|
|
19
|
+
const manifest = await readPromptManifest(manifestPath, packageInfo.name, packageInfo.version);
|
|
20
|
+
const result = {
|
|
21
|
+
manifestPath,
|
|
22
|
+
installed: [],
|
|
23
|
+
updated: [],
|
|
24
|
+
preserved: [],
|
|
25
|
+
conflicts: [],
|
|
26
|
+
};
|
|
27
|
+
for (const definition of promptDefinitions()) {
|
|
28
|
+
const destination = join(targetRoot, definition.destinationRelativePath);
|
|
29
|
+
const source = new URL(`../../../prompts/${definition.sourceRelativePath}`, import.meta.url);
|
|
30
|
+
const packageContent = await readFile(source, 'utf8');
|
|
31
|
+
const packageHash = sha256(packageContent);
|
|
32
|
+
const existingContent = await readOptionalFile(destination);
|
|
33
|
+
const existingHash = existingContent === undefined ? undefined : sha256(existingContent);
|
|
34
|
+
const entry = manifest.prompts[definition.manifestKey];
|
|
35
|
+
if (mode === 'replace' || existingContent === undefined) {
|
|
36
|
+
if (write) {
|
|
37
|
+
await mkdir(dirname(destination), { recursive: true });
|
|
38
|
+
await cp(source, destination, { force: true });
|
|
39
|
+
}
|
|
40
|
+
manifest.prompts[definition.manifestKey] = manifestEntry(packageHash, packageInfo.version);
|
|
41
|
+
result[existingContent === undefined ? 'installed' : 'updated'].push(definition.manifestKey);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (existingHash === packageHash) {
|
|
45
|
+
manifest.prompts[definition.manifestKey] = manifestEntry(packageHash, packageInfo.version);
|
|
46
|
+
result.preserved.push(definition.manifestKey);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (!entry) {
|
|
50
|
+
if (mode === 'merge') {
|
|
51
|
+
manifest.prompts[definition.manifestKey] = await mergePromptUpdate({
|
|
52
|
+
destination,
|
|
53
|
+
existingContent,
|
|
54
|
+
packageContent,
|
|
55
|
+
packageHash,
|
|
56
|
+
packageVersion: packageInfo.version,
|
|
57
|
+
promptKey: definition.manifestKey,
|
|
58
|
+
write,
|
|
59
|
+
});
|
|
60
|
+
result.updated.push(definition.manifestKey);
|
|
61
|
+
}
|
|
62
|
+
else if (mode === 'keep') {
|
|
63
|
+
result.preserved.push(definition.manifestKey);
|
|
64
|
+
manifest.prompts[definition.manifestKey] = manifestEntry(packageHash, packageInfo.version);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
result.conflicts.push(definition.manifestKey);
|
|
68
|
+
manifest.prompts[definition.manifestKey] = {
|
|
69
|
+
...manifestEntry(packageHash, packageInfo.version),
|
|
70
|
+
conflict: true,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (entry.conflict) {
|
|
76
|
+
if (mode === 'merge') {
|
|
77
|
+
manifest.prompts[definition.manifestKey] = await mergePromptUpdate({
|
|
78
|
+
destination,
|
|
79
|
+
existingContent,
|
|
80
|
+
packageContent,
|
|
81
|
+
packageHash,
|
|
82
|
+
packageVersion: packageInfo.version,
|
|
83
|
+
promptKey: definition.manifestKey,
|
|
84
|
+
write,
|
|
85
|
+
});
|
|
86
|
+
result.updated.push(definition.manifestKey);
|
|
87
|
+
}
|
|
88
|
+
else if (mode === 'keep') {
|
|
89
|
+
result.preserved.push(definition.manifestKey);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
result.conflicts.push(definition.manifestKey);
|
|
93
|
+
}
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const installedHash = entry?.installedHash ?? packageHash;
|
|
97
|
+
const previousPackageHash = entry?.packageHash ?? packageHash;
|
|
98
|
+
const localModified = existingHash !== installedHash;
|
|
99
|
+
const packageChanged = previousPackageHash !== packageHash;
|
|
100
|
+
const canAutoUpdate = !localModified && (mode === 'auto' || mode === 'merge');
|
|
101
|
+
if (canAutoUpdate) {
|
|
102
|
+
if (write) {
|
|
103
|
+
await writeFile(destination, packageContent, 'utf8');
|
|
104
|
+
}
|
|
105
|
+
manifest.prompts[definition.manifestKey] = manifestEntry(packageHash, packageInfo.version);
|
|
106
|
+
result.updated.push(definition.manifestKey);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (localModified && packageChanged && mode === 'merge') {
|
|
110
|
+
manifest.prompts[definition.manifestKey] = await mergePromptUpdate({
|
|
111
|
+
destination,
|
|
112
|
+
existingContent,
|
|
113
|
+
packageContent,
|
|
114
|
+
packageHash,
|
|
115
|
+
packageVersion: packageInfo.version,
|
|
116
|
+
promptKey: definition.manifestKey,
|
|
117
|
+
write,
|
|
118
|
+
});
|
|
119
|
+
result.updated.push(definition.manifestKey);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (localModified && packageChanged && mode === 'auto') {
|
|
123
|
+
result.conflicts.push(definition.manifestKey);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
result.preserved.push(definition.manifestKey);
|
|
127
|
+
}
|
|
128
|
+
manifest.prompts[definition.manifestKey] = {
|
|
129
|
+
installedHash,
|
|
130
|
+
packageHash,
|
|
131
|
+
packageVersion: packageInfo.version,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (write) {
|
|
135
|
+
await mkdir(dirname(manifestPath), { recursive: true });
|
|
136
|
+
await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
async function readPromptManifest(path, packageName, packageVersion) {
|
|
141
|
+
try {
|
|
142
|
+
const content = await readFile(path, 'utf8');
|
|
143
|
+
const parsed = JSON.parse(content);
|
|
144
|
+
if (parsed.version === 1 && typeof parsed.prompts === 'object' && parsed.prompts !== null) {
|
|
145
|
+
return {
|
|
146
|
+
version: 1,
|
|
147
|
+
packageName,
|
|
148
|
+
packageVersion,
|
|
149
|
+
prompts: parsed.prompts,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
if (!(error instanceof Error && 'code' in error && error.code === 'ENOENT')) {
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return { version: 1, packageName, packageVersion, prompts: {} };
|
|
159
|
+
}
|
|
160
|
+
async function readOptionalFile(path) {
|
|
161
|
+
try {
|
|
162
|
+
return await readFile(path, 'utf8');
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function promptDefinitions() {
|
|
172
|
+
return [
|
|
173
|
+
{
|
|
174
|
+
sourceRelativePath: 'setup-skill.md',
|
|
175
|
+
destinationRelativePath: '.codex-orchestrator/prompts/setup-skill.md',
|
|
176
|
+
manifestKey: 'setup-skill.md',
|
|
177
|
+
},
|
|
178
|
+
...workflowDefinitions.map((definition) => {
|
|
179
|
+
const name = definition.promptPath.replace('.codex-orchestrator/prompts/', '');
|
|
180
|
+
return {
|
|
181
|
+
sourceRelativePath: name,
|
|
182
|
+
destinationRelativePath: definition.promptPath,
|
|
183
|
+
manifestKey: name,
|
|
184
|
+
};
|
|
185
|
+
}),
|
|
186
|
+
];
|
|
187
|
+
}
|
|
188
|
+
function manifestEntry(packageHash, packageVersion) {
|
|
189
|
+
return {
|
|
190
|
+
installedHash: packageHash,
|
|
191
|
+
packageHash,
|
|
192
|
+
packageVersion,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
async function mergePromptUpdate(input) {
|
|
196
|
+
const mergedContent = appendPackagePromptUpdate(input.existingContent, input.promptKey, input.packageVersion, input.packageContent);
|
|
197
|
+
if (input.write) {
|
|
198
|
+
await writeFile(input.destination, mergedContent, 'utf8');
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
installedHash: sha256(mergedContent),
|
|
202
|
+
packageHash: input.packageHash,
|
|
203
|
+
packageVersion: input.packageVersion,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function appendPackagePromptUpdate(existingContent, promptKey, packageVersion, packageContent) {
|
|
207
|
+
return [
|
|
208
|
+
existingContent.trimEnd(),
|
|
209
|
+
'',
|
|
210
|
+
`<!-- codex-orchestrator package prompt update: ${promptKey} @ ${packageVersion} -->`,
|
|
211
|
+
packageContent.trimEnd(),
|
|
212
|
+
`<!-- end codex-orchestrator package prompt update: ${promptKey} @ ${packageVersion} -->`,
|
|
213
|
+
'',
|
|
214
|
+
].join('\n');
|
|
215
|
+
}
|
|
216
|
+
function sha256(value) {
|
|
217
|
+
return createHash('sha256').update(value).digest('hex');
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=prompt-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-sync.js","sourceRoot":"","sources":["../../../src/setup/prompt-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { CodexOrchestratorConfig } from '../config/schema.js';
|
|
2
|
+
import { type CodexCommandResolver } from './codex-command-resolver.js';
|
|
2
3
|
import type { GitHubLabelAdapter, LabelPlan } from './labels.js';
|
|
4
|
+
import { type PromptSyncMode, type PromptSyncResult } from './prompt-sync.js';
|
|
3
5
|
export interface SetupCommandOptions {
|
|
4
6
|
targetRoot: string;
|
|
5
7
|
githubOwner?: string;
|
|
@@ -7,7 +9,9 @@ export interface SetupCommandOptions {
|
|
|
7
9
|
dryRun?: boolean;
|
|
8
10
|
prepareLabels?: boolean;
|
|
9
11
|
replacePackageSkills?: boolean;
|
|
12
|
+
promptSyncMode?: PromptSyncMode;
|
|
10
13
|
labelAdapter?: GitHubLabelAdapter;
|
|
14
|
+
codexCommandResolver?: CodexCommandResolver;
|
|
11
15
|
}
|
|
12
16
|
export interface SetupCommandResult {
|
|
13
17
|
config: CodexOrchestratorConfig;
|
|
@@ -15,6 +19,7 @@ export interface SetupCommandResult {
|
|
|
15
19
|
dryRun: boolean;
|
|
16
20
|
labelPlan: LabelPlan;
|
|
17
21
|
promptFiles: string[];
|
|
22
|
+
promptSync?: PromptSyncResult;
|
|
18
23
|
output: string;
|
|
19
24
|
}
|
|
20
25
|
export declare function runSetupCommand(options: SetupCommandOptions): Promise<SetupCommandResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-command.d.ts","sourceRoot":"","sources":["../../../src/setup/setup-command.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-command.d.ts","sourceRoot":"","sources":["../../../src/setup/setup-command.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAE7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAUjE,OAAO,EAAqC,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKjH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0D/F"}
|