codex-orchestrator 0.1.0
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/LICENSE +21 -0
- package/README.md +94 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +253 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/codex/command-adapter.d.ts +27 -0
- package/dist/src/codex/command-adapter.d.ts.map +1 -0
- package/dist/src/codex/command-adapter.js +49 -0
- package/dist/src/codex/command-adapter.js.map +1 -0
- package/dist/src/config/constants.d.ts +6 -0
- package/dist/src/config/constants.d.ts.map +1 -0
- package/dist/src/config/constants.js +13 -0
- package/dist/src/config/constants.js.map +1 -0
- package/dist/src/config/schema.d.ts +87 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +180 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/git/worktree.d.ts +50 -0
- package/dist/src/git/worktree.d.ts.map +1 -0
- package/dist/src/git/worktree.js +139 -0
- package/dist/src/git/worktree.js.map +1 -0
- package/dist/src/github/gh-cli.d.ts +11 -0
- package/dist/src/github/gh-cli.d.ts.map +1 -0
- package/dist/src/github/gh-cli.js +28 -0
- package/dist/src/github/gh-cli.js.map +1 -0
- package/dist/src/github/gh-issue-adapter.d.ts +15 -0
- package/dist/src/github/gh-issue-adapter.d.ts.map +1 -0
- package/dist/src/github/gh-issue-adapter.js +193 -0
- package/dist/src/github/gh-issue-adapter.js.map +1 -0
- package/dist/src/github/gh-pull-request-adapter.d.ts +9 -0
- package/dist/src/github/gh-pull-request-adapter.d.ts.map +1 -0
- package/dist/src/github/gh-pull-request-adapter.js +39 -0
- package/dist/src/github/gh-pull-request-adapter.js.map +1 -0
- package/dist/src/github/issues.d.ts +80 -0
- package/dist/src/github/issues.d.ts.map +1 -0
- package/dist/src/github/issues.js +122 -0
- package/dist/src/github/issues.js.map +1 -0
- package/dist/src/github/pull-requests.d.ts +24 -0
- package/dist/src/github/pull-requests.d.ts.map +1 -0
- package/dist/src/github/pull-requests.js +21 -0
- package/dist/src/github/pull-requests.js.map +1 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +17 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/package-info.d.ts +6 -0
- package/dist/src/package-info.d.ts.map +1 -0
- package/dist/src/package-info.js +13 -0
- package/dist/src/package-info.js.map +1 -0
- package/dist/src/process/command.d.ts +15 -0
- package/dist/src/process/command.d.ts.map +1 -0
- package/dist/src/process/command.js +34 -0
- package/dist/src/process/command.js.map +1 -0
- package/dist/src/runner/command-utils.d.ts +5 -0
- package/dist/src/runner/command-utils.d.ts.map +1 -0
- package/dist/src/runner/command-utils.js +19 -0
- package/dist/src/runner/command-utils.js.map +1 -0
- package/dist/src/runner/issue-state-machine.d.ts +39 -0
- package/dist/src/runner/issue-state-machine.d.ts.map +1 -0
- package/dist/src/runner/issue-state-machine.js +119 -0
- package/dist/src/runner/issue-state-machine.js.map +1 -0
- package/dist/src/runner/issue-tree.d.ts +62 -0
- package/dist/src/runner/issue-tree.d.ts.map +1 -0
- package/dist/src/runner/issue-tree.js +376 -0
- package/dist/src/runner/issue-tree.js.map +1 -0
- package/dist/src/runner/local-state.d.ts +31 -0
- package/dist/src/runner/local-state.d.ts.map +1 -0
- package/dist/src/runner/local-state.js +125 -0
- package/dist/src/runner/local-state.js.map +1 -0
- package/dist/src/runner/plan-auto-command.d.ts +30 -0
- package/dist/src/runner/plan-auto-command.d.ts.map +1 -0
- package/dist/src/runner/plan-auto-command.js +611 -0
- package/dist/src/runner/plan-auto-command.js.map +1 -0
- package/dist/src/runner/prompt.d.ts +108 -0
- package/dist/src/runner/prompt.d.ts.map +1 -0
- package/dist/src/runner/prompt.js +322 -0
- package/dist/src/runner/prompt.js.map +1 -0
- package/dist/src/runner/recovery.d.ts +24 -0
- package/dist/src/runner/recovery.d.ts.map +1 -0
- package/dist/src/runner/recovery.js +62 -0
- package/dist/src/runner/recovery.js.map +1 -0
- package/dist/src/runner/safety.d.ts +14 -0
- package/dist/src/runner/safety.d.ts.map +1 -0
- package/dist/src/runner/safety.js +46 -0
- package/dist/src/runner/safety.js.map +1 -0
- package/dist/src/runner/scoped-auto-command.d.ts +29 -0
- package/dist/src/runner/scoped-auto-command.d.ts.map +1 -0
- package/dist/src/runner/scoped-auto-command.js +262 -0
- package/dist/src/runner/scoped-auto-command.js.map +1 -0
- package/dist/src/runner/status-command.d.ts +17 -0
- package/dist/src/runner/status-command.d.ts.map +1 -0
- package/dist/src/runner/status-command.js +72 -0
- package/dist/src/runner/status-command.js.map +1 -0
- package/dist/src/setup/github-label-adapter.d.ts +13 -0
- package/dist/src/setup/github-label-adapter.d.ts.map +1 -0
- package/dist/src/setup/github-label-adapter.js +28 -0
- package/dist/src/setup/github-label-adapter.js.map +1 -0
- package/dist/src/setup/labels.d.ts +27 -0
- package/dist/src/setup/labels.d.ts.map +1 -0
- package/dist/src/setup/labels.js +42 -0
- package/dist/src/setup/labels.js.map +1 -0
- package/dist/src/setup/project-config.d.ts +15 -0
- package/dist/src/setup/project-config.d.ts.map +1 -0
- package/dist/src/setup/project-config.js +124 -0
- package/dist/src/setup/project-config.js.map +1 -0
- package/dist/src/setup/setup-command.d.ts +22 -0
- package/dist/src/setup/setup-command.d.ts.map +1 -0
- package/dist/src/setup/setup-command.js +104 -0
- package/dist/src/setup/setup-command.js.map +1 -0
- package/dist/src/setup/workflows.d.ts +11 -0
- package/dist/src/setup/workflows.d.ts.map +1 -0
- package/dist/src/setup/workflows.js +60 -0
- package/dist/src/setup/workflows.js.map +1 -0
- package/package.json +45 -0
- package/prompts/setup-skill.md +11 -0
- package/prompts/workflows/breakdown-review.md +4 -0
- package/prompts/workflows/issue-breakdown.md +4 -0
- package/prompts/workflows/issue-tree-orchestration.md +4 -0
- package/prompts/workflows/prd.md +4 -0
- package/prompts/workflows/scoped-implementation.md +4 -0
- package/prompts/workflows/triage.md +4 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { forbiddenRuntimeKeys } from '../config/constants.js';
|
|
4
|
+
import { validateConfig } from '../config/schema.js';
|
|
5
|
+
export const defaultLabels = {
|
|
6
|
+
auto: label('agent:auto', '0E8A16', 'Scoped autonomous Codex implementation'),
|
|
7
|
+
planAuto: label('agent:plan-auto', '5319E7', 'Autonomous Codex planning and issue-tree execution'),
|
|
8
|
+
running: label('agent:running', '1D76DB', 'Codex orchestration is currently running'),
|
|
9
|
+
blocked: label('agent:blocked', 'B60205', 'Codex orchestration is blocked and needs maintainer input'),
|
|
10
|
+
manual: label('agent:manual', 'BFDADC', 'Issue is reserved for manual work'),
|
|
11
|
+
review: label('agent:review', 'FBCA04', 'Codex work is ready for human review'),
|
|
12
|
+
child: label('agent:child', 'C2E0C6', 'Child issue owned by an autonomous parent issue tree'),
|
|
13
|
+
};
|
|
14
|
+
export function buildProjectConfig(input) {
|
|
15
|
+
return {
|
|
16
|
+
version: 1,
|
|
17
|
+
github: {
|
|
18
|
+
owner: input.owner,
|
|
19
|
+
repo: input.repo,
|
|
20
|
+
prepareLabels: input.prepareLabels,
|
|
21
|
+
labels: defaultLabels,
|
|
22
|
+
},
|
|
23
|
+
runner: {
|
|
24
|
+
workspaceRoot: '.codex-orchestrator/workspaces',
|
|
25
|
+
maxParallelChildren: 3,
|
|
26
|
+
stateDir: '.codex-orchestrator/state',
|
|
27
|
+
},
|
|
28
|
+
codex: {
|
|
29
|
+
adapter: 'codex-cli',
|
|
30
|
+
command: 'codex',
|
|
31
|
+
args: [
|
|
32
|
+
'exec',
|
|
33
|
+
'--cd',
|
|
34
|
+
'${worktreePath}',
|
|
35
|
+
'--sandbox',
|
|
36
|
+
'workspace-write',
|
|
37
|
+
'--add-dir',
|
|
38
|
+
'${stateDir}',
|
|
39
|
+
'--ignore-user-config',
|
|
40
|
+
'--output-last-message',
|
|
41
|
+
'${reportPath}',
|
|
42
|
+
'-',
|
|
43
|
+
],
|
|
44
|
+
promptFileEnv: 'CODEX_ORCHESTRATOR_PROMPT_FILE',
|
|
45
|
+
reportFileEnv: 'CODEX_ORCHESTRATOR_REPORT_FILE',
|
|
46
|
+
},
|
|
47
|
+
project: {
|
|
48
|
+
configDir: '.codex-orchestrator',
|
|
49
|
+
promptsDir: '.codex-orchestrator/prompts',
|
|
50
|
+
},
|
|
51
|
+
workflows: input.workflows,
|
|
52
|
+
checks: {
|
|
53
|
+
typecheck: 'npm run typecheck',
|
|
54
|
+
test: 'npm test',
|
|
55
|
+
},
|
|
56
|
+
deny: {
|
|
57
|
+
secretFiles: ['.env', '.env.*'],
|
|
58
|
+
destructiveDbOrCache: true,
|
|
59
|
+
productionDeployOrRelease: true,
|
|
60
|
+
additionalPathGlobs: [],
|
|
61
|
+
},
|
|
62
|
+
branches: {
|
|
63
|
+
base: 'main',
|
|
64
|
+
scopedIssue: 'codex/issue-${issueNumber}',
|
|
65
|
+
issueTree: 'codex/tree-${parentIssueNumber}',
|
|
66
|
+
},
|
|
67
|
+
pullRequests: {
|
|
68
|
+
scopedIssueTitle: 'Codex: issue #${issueNumber}',
|
|
69
|
+
issueTreeTitle: 'Codex: parent issue #${parentIssueNumber}',
|
|
70
|
+
},
|
|
71
|
+
issueClassification: {
|
|
72
|
+
promotionCriteria: [
|
|
73
|
+
'api-contract',
|
|
74
|
+
'dto-or-schema',
|
|
75
|
+
'persistence',
|
|
76
|
+
'auth-or-permissions',
|
|
77
|
+
'billing',
|
|
78
|
+
'background-job',
|
|
79
|
+
'shared-state',
|
|
80
|
+
'multi-service',
|
|
81
|
+
'three-or-more-runtime-files',
|
|
82
|
+
],
|
|
83
|
+
clarificationGate: 'block-and-comment',
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export async function readExistingConfig(configPath) {
|
|
88
|
+
try {
|
|
89
|
+
const content = await readFile(configPath, 'utf8');
|
|
90
|
+
return JSON.parse(content);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function assertNoRuntimeState(value) {
|
|
100
|
+
if (!value) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const forbiddenKey = forbiddenRuntimeKeys.find((key) => key in value);
|
|
104
|
+
if (forbiddenKey) {
|
|
105
|
+
throw new Error(`${forbiddenKey} is runtime state and must not be committed config`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export async function writeProjectConfig(targetRoot, config) {
|
|
109
|
+
const configPath = projectConfigPath(targetRoot);
|
|
110
|
+
const validation = validateConfig(config);
|
|
111
|
+
if (!validation.ok) {
|
|
112
|
+
throw new Error(`Generated config is invalid: ${validation.errors.join('; ')}`);
|
|
113
|
+
}
|
|
114
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
115
|
+
await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, 'utf8');
|
|
116
|
+
return configPath;
|
|
117
|
+
}
|
|
118
|
+
export function projectConfigPath(targetRoot) {
|
|
119
|
+
return join(targetRoot, '.codex-orchestrator', 'config.json');
|
|
120
|
+
}
|
|
121
|
+
function label(name, color, description) {
|
|
122
|
+
return { name, color, description };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=project-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../../src/setup/project-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CodexOrchestratorConfig } from '../config/schema.js';
|
|
2
|
+
import type { GitHubLabelAdapter, LabelPlan } from './labels.js';
|
|
3
|
+
export interface SetupCommandOptions {
|
|
4
|
+
targetRoot: string;
|
|
5
|
+
githubOwner?: string;
|
|
6
|
+
githubRepo?: string;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
prepareLabels?: boolean;
|
|
9
|
+
skillsRoot?: string;
|
|
10
|
+
replacePackageSkills?: boolean;
|
|
11
|
+
labelAdapter?: GitHubLabelAdapter;
|
|
12
|
+
}
|
|
13
|
+
export interface SetupCommandResult {
|
|
14
|
+
config: CodexOrchestratorConfig;
|
|
15
|
+
configPath: string;
|
|
16
|
+
dryRun: boolean;
|
|
17
|
+
labelPlan: LabelPlan;
|
|
18
|
+
promptFiles: string[];
|
|
19
|
+
output: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function runSetupCommand(options: SetupCommandOptions): Promise<SetupCommandResult>;
|
|
22
|
+
//# sourceMappingURL=setup-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-command.d.ts","sourceRoot":"","sources":["../../../src/setup/setup-command.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWjE,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,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;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,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+C/F"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { cp, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { validateConfig } from '../config/schema.js';
|
|
4
|
+
import { GhCliLabelAdapter } from './github-label-adapter.js';
|
|
5
|
+
import { planLabels } from './labels.js';
|
|
6
|
+
import { assertNoRuntimeState, buildProjectConfig, projectConfigPath, readExistingConfig, writeProjectConfig, } from './project-config.js';
|
|
7
|
+
import { defaultSkillsRoot, resolveWorkflowConfigs, workflowDefinitions } from './workflows.js';
|
|
8
|
+
export async function runSetupCommand(options) {
|
|
9
|
+
const dryRun = options.dryRun ?? false;
|
|
10
|
+
const configPath = projectConfigPath(options.targetRoot);
|
|
11
|
+
const existingConfig = await readExistingConfig(configPath);
|
|
12
|
+
assertNoRuntimeState(existingConfig);
|
|
13
|
+
const owner = options.githubOwner ?? readExistingString(existingConfig, 'github', 'owner');
|
|
14
|
+
const repo = options.githubRepo ?? readExistingString(existingConfig, 'github', 'repo');
|
|
15
|
+
if (!owner || !repo) {
|
|
16
|
+
throw new Error('setup requires --github-owner and --github-repo unless existing config provides them');
|
|
17
|
+
}
|
|
18
|
+
const prepareLabels = options.prepareLabels ? 'create-missing' : 'report-only';
|
|
19
|
+
const workflows = await resolveWorkflowConfigs(options.skillsRoot ?? defaultSkillsRoot());
|
|
20
|
+
const config = buildProjectConfig({
|
|
21
|
+
owner,
|
|
22
|
+
repo,
|
|
23
|
+
prepareLabels,
|
|
24
|
+
workflows,
|
|
25
|
+
});
|
|
26
|
+
const validation = validateConfig(config);
|
|
27
|
+
if (!validation.ok) {
|
|
28
|
+
throw new Error(`Generated config is invalid: ${validation.errors.join('; ')}`);
|
|
29
|
+
}
|
|
30
|
+
const adapter = options.labelAdapter ?? new GhCliLabelAdapter(owner, repo);
|
|
31
|
+
const labelPlan = await planLabels(adapter, config.github.labels, prepareLabels, dryRun);
|
|
32
|
+
const promptFiles = workflowDefinitions.map((definition) => join(options.targetRoot, definition.promptPath));
|
|
33
|
+
if (!dryRun) {
|
|
34
|
+
await writeProjectConfig(options.targetRoot, config);
|
|
35
|
+
await copyPromptFiles(options.targetRoot, options.replacePackageSkills ?? false);
|
|
36
|
+
}
|
|
37
|
+
const output = formatSetupOutput(configPath, labelPlan, config, promptFiles, dryRun);
|
|
38
|
+
return {
|
|
39
|
+
config,
|
|
40
|
+
configPath,
|
|
41
|
+
dryRun,
|
|
42
|
+
labelPlan,
|
|
43
|
+
promptFiles,
|
|
44
|
+
output,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function formatSetupOutput(configPath, labelPlan, config, promptFiles, dryRun) {
|
|
48
|
+
const workflowLines = Object.entries(config.workflows)
|
|
49
|
+
.map(([id, workflow]) => ` - ${id}: ${workflow.source}`)
|
|
50
|
+
.join('\n');
|
|
51
|
+
const missingLabels = labelPlan.missing.map((label) => label.name).join(', ') || 'none';
|
|
52
|
+
const promptSummary = promptFiles.map((file) => ` - ${file}`).join('\n');
|
|
53
|
+
return [
|
|
54
|
+
`config: ${configPath}`,
|
|
55
|
+
`mode: ${dryRun ? 'dry-run' : 'write'}`,
|
|
56
|
+
`labels: ${labelPlan.policy}`,
|
|
57
|
+
`missing labels: ${missingLabels}`,
|
|
58
|
+
'workflows:',
|
|
59
|
+
workflowLines,
|
|
60
|
+
'prompts:',
|
|
61
|
+
promptSummary,
|
|
62
|
+
`checks: ${Object.keys(config.checks).join(', ')}`,
|
|
63
|
+
`codex command: ${config.codex.command} ${config.codex.args.join(' ')}`,
|
|
64
|
+
`branches: base ${config.branches.base}, ${config.branches.scopedIssue}, ${config.branches.issueTree}`,
|
|
65
|
+
`pull requests: ${config.pullRequests.scopedIssueTitle}, ${config.pullRequests.issueTreeTitle}`,
|
|
66
|
+
'Codex will not be launched',
|
|
67
|
+
'setup will not commit or open a pull request',
|
|
68
|
+
].join('\n');
|
|
69
|
+
}
|
|
70
|
+
async function copyPromptFiles(targetRoot, replacePackageSkills) {
|
|
71
|
+
await copyPrompt('setup-skill.md', join(targetRoot, '.codex-orchestrator', 'prompts', 'setup-skill.md'), replacePackageSkills);
|
|
72
|
+
for (const definition of workflowDefinitions) {
|
|
73
|
+
const sourceName = definition.promptPath.replace('.codex-orchestrator/prompts/workflows/', '');
|
|
74
|
+
await copyPrompt(join('workflows', sourceName), join(targetRoot, definition.promptPath), replacePackageSkills);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function copyPrompt(relativePromptPath, destination, replacePackageSkills) {
|
|
78
|
+
await mkdir(dirname(destination), { recursive: true });
|
|
79
|
+
const source = new URL(`../../../prompts/${relativePromptPath}`, import.meta.url);
|
|
80
|
+
if (replacePackageSkills) {
|
|
81
|
+
await cp(source, destination, { force: true });
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
await readFile(destination, 'utf8');
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
89
|
+
const content = await readFile(source, 'utf8');
|
|
90
|
+
await writeFile(destination, content, 'utf8');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function readExistingString(config, section, key) {
|
|
97
|
+
const sectionValue = config?.[section];
|
|
98
|
+
if (typeof sectionValue !== 'object' || sectionValue === null || Array.isArray(sectionValue)) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
const value = sectionValue[key];
|
|
102
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=setup-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-command.js","sourceRoot":"","sources":["../../../src/setup/setup-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { WorkflowConfig, WorkflowId } from '../config/schema.js';
|
|
2
|
+
export interface WorkflowDefinition {
|
|
3
|
+
id: WorkflowId;
|
|
4
|
+
skillName: string;
|
|
5
|
+
promptPath: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const workflowDefinitions: readonly WorkflowDefinition[];
|
|
8
|
+
export type WorkflowConfigMap = Record<WorkflowId, WorkflowConfig>;
|
|
9
|
+
export declare function defaultSkillsRoot(env?: NodeJS.ProcessEnv): string;
|
|
10
|
+
export declare function resolveWorkflowConfigs(skillsRoot: string): Promise<WorkflowConfigMap>;
|
|
11
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../src/setup/workflows.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAS,kBAAkB,EAuBnD,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAEnE,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE9E;AAED,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuB3F"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { access } from 'node:fs/promises';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
export const workflowDefinitions = [
|
|
5
|
+
{ id: 'prd', skillName: 'to-prd', promptPath: '.codex-orchestrator/prompts/workflows/prd.md' },
|
|
6
|
+
{
|
|
7
|
+
id: 'issueBreakdown',
|
|
8
|
+
skillName: 'to-issues',
|
|
9
|
+
promptPath: '.codex-orchestrator/prompts/workflows/issue-breakdown.md',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: 'breakdownReview',
|
|
13
|
+
skillName: 'issue-breakdown-review',
|
|
14
|
+
promptPath: '.codex-orchestrator/prompts/workflows/breakdown-review.md',
|
|
15
|
+
},
|
|
16
|
+
{ id: 'triage', skillName: 'triage', promptPath: '.codex-orchestrator/prompts/workflows/triage.md' },
|
|
17
|
+
{
|
|
18
|
+
id: 'scopedImplementation',
|
|
19
|
+
skillName: 'spec-implementer',
|
|
20
|
+
promptPath: '.codex-orchestrator/prompts/workflows/scoped-implementation.md',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'issueTreeOrchestration',
|
|
24
|
+
skillName: 'issue-orchestrator',
|
|
25
|
+
promptPath: '.codex-orchestrator/prompts/workflows/issue-tree-orchestration.md',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export function defaultSkillsRoot(env = process.env) {
|
|
29
|
+
return env.CODEX_HOME ? join(env.CODEX_HOME, 'skills') : join(homedir(), '.codex', 'skills');
|
|
30
|
+
}
|
|
31
|
+
export async function resolveWorkflowConfigs(skillsRoot) {
|
|
32
|
+
const entries = await Promise.all(workflowDefinitions.map(async (definition) => {
|
|
33
|
+
const skillPath = join(skillsRoot, definition.skillName, 'SKILL.md');
|
|
34
|
+
const exists = await pathExists(skillPath);
|
|
35
|
+
const config = exists
|
|
36
|
+
? {
|
|
37
|
+
skillName: definition.skillName,
|
|
38
|
+
source: 'existing-skill',
|
|
39
|
+
skillPath,
|
|
40
|
+
promptPath: definition.promptPath,
|
|
41
|
+
}
|
|
42
|
+
: {
|
|
43
|
+
skillName: definition.skillName,
|
|
44
|
+
source: 'package-owned-prompt-fallback',
|
|
45
|
+
promptPath: definition.promptPath,
|
|
46
|
+
};
|
|
47
|
+
return [definition.id, config];
|
|
48
|
+
}));
|
|
49
|
+
return Object.fromEntries(entries);
|
|
50
|
+
}
|
|
51
|
+
async function pathExists(path) {
|
|
52
|
+
try {
|
|
53
|
+
await access(path);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../../src/setup/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC,MAAM,CAAC,MAAM,mBAAmB,GAAkC;IAChE,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,8CAA8C,EAAE;IAC9F;QACE,EAAE,EAAE,gBAAgB;QACpB,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,0DAA0D;KACvE;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,SAAS,EAAE,wBAAwB;QACnC,UAAU,EAAE,2DAA2D;KACxE;IACD,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,iDAAiD,EAAE;IACpG;QACE,EAAE,EAAE,sBAAsB;QAC1B,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,gEAAgE;KAC7E;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,SAAS,EAAE,oBAAoB;QAC/B,UAAU,EAAE,mEAAmE;KAChF;CACO,CAAC;AAIX,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,UAAkB;IAC7D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAmB,MAAM;YACnC,CAAC,CAAC;gBACE,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,MAAM,EAAE,gBAAgB;gBACxB,SAAS;gBACT,UAAU,EAAE,UAAU,CAAC,UAAU;aAClC;YACH,CAAC,CAAC;gBACE,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,MAAM,EAAE,+BAA+B;gBACvC,UAAU,EAAE,UAAU,CAAC,UAAU;aAClC,CAAC;QAEN,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAU,CAAC;IAC1C,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAsB,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "codex-orchestrator",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Reusable GitHub Issues runner for Codex.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "./dist/src/index.js",
|
|
8
|
+
"types": "./dist/src/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/src/index.d.ts",
|
|
12
|
+
"import": "./dist/src/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./config/schema": {
|
|
15
|
+
"types": "./dist/src/config/schema.d.ts",
|
|
16
|
+
"import": "./dist/src/config/schema.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"codex-orchestrator": "dist/src/cli.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist/src",
|
|
24
|
+
"prompts",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18"
|
|
30
|
+
},
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "git+https://github.com/SergiiMytakii/codex-orchestrator.git"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc -p tsconfig.json",
|
|
37
|
+
"test": "npm run build && node --test \"dist/test/**/*.test.js\"",
|
|
38
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
39
|
+
"prepack": "npm run build"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^24.0.0",
|
|
43
|
+
"typescript": "^5.9.0"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Codex Orchestrator Setup
|
|
2
|
+
|
|
3
|
+
Use this prompt to help a maintainer install `codex-orchestrator` in a repository.
|
|
4
|
+
|
|
5
|
+
1. Confirm the GitHub owner, repository name, and target repository path.
|
|
6
|
+
2. Run `codex-orchestrator setup --target <path> --github-owner <owner> --github-repo <repo> --dry-run`.
|
|
7
|
+
3. Review the generated config plan, label report, workflow sources, and checks.
|
|
8
|
+
4. Run setup without `--dry-run` only after the maintainer agrees.
|
|
9
|
+
5. Use `--prepare-labels` only when the maintainer wants missing GitHub labels created.
|
|
10
|
+
6. Do not launch Codex implementation from setup.
|
|
11
|
+
7. Do not commit, push, or open a pull request from setup.
|