cofounder-crew 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/README.md +206 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +249 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/codex.d.ts +8 -0
- package/dist/src/codex.js +335 -0
- package/dist/src/codex.js.map +1 -0
- package/dist/src/codexConfig.d.ts +10 -0
- package/dist/src/codexConfig.js +136 -0
- package/dist/src/codexConfig.js.map +1 -0
- package/dist/src/codexSessions.d.ts +5 -0
- package/dist/src/codexSessions.js +100 -0
- package/dist/src/codexSessions.js.map +1 -0
- package/dist/src/config.d.ts +14 -0
- package/dist/src/config.js +154 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/errors.d.ts +4 -0
- package/dist/src/errors.js +12 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/git.d.ts +15 -0
- package/dist/src/git.js +151 -0
- package/dist/src/git.js.map +1 -0
- package/dist/src/init.d.ts +8 -0
- package/dist/src/init.js +43 -0
- package/dist/src/init.js.map +1 -0
- package/dist/src/mcp.d.ts +4 -0
- package/dist/src/mcp.js +159 -0
- package/dist/src/mcp.js.map +1 -0
- package/dist/src/memberRuntime.d.ts +13 -0
- package/dist/src/memberRuntime.js +70 -0
- package/dist/src/memberRuntime.js.map +1 -0
- package/dist/src/paths.d.ts +7 -0
- package/dist/src/paths.js +36 -0
- package/dist/src/paths.js.map +1 -0
- package/dist/src/prompt.d.ts +2 -0
- package/dist/src/prompt.js +59 -0
- package/dist/src/prompt.js.map +1 -0
- package/dist/src/runtime.d.ts +50 -0
- package/dist/src/runtime.js +362 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/setup.d.ts +6 -0
- package/dist/src/setup.js +48 -0
- package/dist/src/setup.js.map +1 -0
- package/dist/src/tasks.d.ts +10 -0
- package/dist/src/tasks.js +130 -0
- package/dist/src/tasks.js.map +1 -0
- package/dist/src/templates.d.ts +15 -0
- package/dist/src/templates.js +158 -0
- package/dist/src/templates.js.map +1 -0
- package/dist/src/types.d.ts +141 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/worker.d.ts +2 -0
- package/dist/src/worker.js +17 -0
- package/dist/src/worker.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { stringify as stringifyToml } from "smol-toml";
|
|
4
|
+
import { prepareCodexConfig } from "./codexConfig.js";
|
|
5
|
+
import { getMemberPaths, loadMemberSettings } from "./config.js";
|
|
6
|
+
export async function prepareMemberRuntime(project, member) {
|
|
7
|
+
const settings = await loadMemberSettings(project, member);
|
|
8
|
+
const paths = getMemberPaths(project, member);
|
|
9
|
+
let effectiveConfigPath = null;
|
|
10
|
+
let codexConfigPath = null;
|
|
11
|
+
if (paths.homeAbsolutePath) {
|
|
12
|
+
await mkdir(paths.homeAbsolutePath, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
const codexConfig = await prepareCodexConfig(project, member, settings, paths.homeAbsolutePath);
|
|
15
|
+
codexConfigPath = codexConfig.config_path;
|
|
16
|
+
if (paths.homeAbsolutePath) {
|
|
17
|
+
const effectiveConfigAbsolutePath = path.join(paths.homeAbsolutePath, "cofounder.effective.toml");
|
|
18
|
+
await writeFile(effectiveConfigAbsolutePath, buildEffectiveConfig(member, settings, codexConfig), "utf8");
|
|
19
|
+
effectiveConfigPath = path.relative(project.projectRoot, effectiveConfigAbsolutePath);
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
member,
|
|
23
|
+
settings,
|
|
24
|
+
member_home_path: paths.homePath,
|
|
25
|
+
member_prompt_path: paths.promptPath,
|
|
26
|
+
member_settings_path: paths.settingsPath,
|
|
27
|
+
member_effective_config_path: effectiveConfigPath,
|
|
28
|
+
member_codex_config_path: codexConfigPath,
|
|
29
|
+
codex_config: codexConfig
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function buildEffectiveConfig(member, settings, codexConfig) {
|
|
33
|
+
const codex = {};
|
|
34
|
+
if (settings.model) {
|
|
35
|
+
codex.model = settings.model;
|
|
36
|
+
}
|
|
37
|
+
if (settings.reasoning_effort) {
|
|
38
|
+
codex.model_reasoning_effort = settings.reasoning_effort;
|
|
39
|
+
}
|
|
40
|
+
const cofounder = {
|
|
41
|
+
member: member.id,
|
|
42
|
+
runner: member.runner,
|
|
43
|
+
codex_config_path: codexConfig.config_path ?? "",
|
|
44
|
+
mcp_mode: codexConfig.mode,
|
|
45
|
+
mcp_allowed_servers: codexConfig.allowed_servers,
|
|
46
|
+
mcp_isolated: codexConfig.isolated,
|
|
47
|
+
work_mode: settings.write?.mode ?? "direct"
|
|
48
|
+
};
|
|
49
|
+
if (settings.sandbox) {
|
|
50
|
+
cofounder.sandbox = settings.sandbox;
|
|
51
|
+
}
|
|
52
|
+
if (settings.approval) {
|
|
53
|
+
cofounder.approval = settings.approval;
|
|
54
|
+
}
|
|
55
|
+
if (settings.live_interrupt !== undefined) {
|
|
56
|
+
cofounder.live_interrupt = settings.live_interrupt;
|
|
57
|
+
}
|
|
58
|
+
const runnerCodex = settings.runner?.codex ?? {};
|
|
59
|
+
const config = {
|
|
60
|
+
codex,
|
|
61
|
+
cofounder,
|
|
62
|
+
write: settings.write ?? { mode: "direct" },
|
|
63
|
+
memory: settings.memory ?? {},
|
|
64
|
+
runner: {
|
|
65
|
+
codex: runnerCodex
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
return `# Generated by Cofounder. Inspectable runtime settings; not used as Codex auth storage.\n${stringifyToml(config)}\n`;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=memberRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memberRuntime.js","sourceRoot":"","sources":["../../src/memberRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const CONFIG_DIR = ".cofounder";
|
|
2
|
+
export declare const TEAM_FILE = "team.yaml";
|
|
3
|
+
export declare function pathExists(filePath: string): Promise<boolean>;
|
|
4
|
+
export declare function findProjectRoot(startDir?: string): Promise<string | null>;
|
|
5
|
+
export declare function configRoot(projectRoot: string): string;
|
|
6
|
+
export declare function fromConfigRoot(projectRoot: string, relativePath: string): string;
|
|
7
|
+
export declare function relativeToProject(projectRoot: string, absolutePath: string): string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { access } from "node:fs/promises";
|
|
3
|
+
export const CONFIG_DIR = ".cofounder";
|
|
4
|
+
export const TEAM_FILE = "team.yaml";
|
|
5
|
+
export async function pathExists(filePath) {
|
|
6
|
+
try {
|
|
7
|
+
await access(filePath);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export async function findProjectRoot(startDir = process.cwd()) {
|
|
15
|
+
let current = path.resolve(startDir);
|
|
16
|
+
while (true) {
|
|
17
|
+
if (await pathExists(path.join(current, CONFIG_DIR, TEAM_FILE))) {
|
|
18
|
+
return current;
|
|
19
|
+
}
|
|
20
|
+
const parent = path.dirname(current);
|
|
21
|
+
if (parent === current) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
current = parent;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function configRoot(projectRoot) {
|
|
28
|
+
return path.join(projectRoot, CONFIG_DIR);
|
|
29
|
+
}
|
|
30
|
+
export function fromConfigRoot(projectRoot, relativePath) {
|
|
31
|
+
return path.resolve(configRoot(projectRoot), relativePath);
|
|
32
|
+
}
|
|
33
|
+
export function relativeToProject(projectRoot, absolutePath) {
|
|
34
|
+
return path.relative(projectRoot, absolutePath);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5D,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,YAAoB;IACtE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,YAAoB;IACzE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { summarizeTeam } from "./config.js";
|
|
4
|
+
import { fromConfigRoot, pathExists } from "./paths.js";
|
|
5
|
+
export async function assemblePrompt(project, member, settings, caller, task) {
|
|
6
|
+
const memberPrompt = await readFile(fromConfigRoot(project.projectRoot, member.prompt), "utf8");
|
|
7
|
+
const memory = await loadMemory(project, member, settings);
|
|
8
|
+
return `# Cofounder Delegated Task
|
|
9
|
+
|
|
10
|
+
## Member
|
|
11
|
+
|
|
12
|
+
You are ${member.id}: ${member.title}.
|
|
13
|
+
|
|
14
|
+
## Member Instructions
|
|
15
|
+
|
|
16
|
+
${memberPrompt.trim()}
|
|
17
|
+
|
|
18
|
+
## Team Roster
|
|
19
|
+
|
|
20
|
+
${summarizeTeam(project)}
|
|
21
|
+
|
|
22
|
+
## Delegation Context
|
|
23
|
+
|
|
24
|
+
- Caller: ${caller}
|
|
25
|
+
- Assignee: ${member.id}
|
|
26
|
+
- Project cwd: ${project.projectRoot}
|
|
27
|
+
- Allowed delegation targets: ${member.can_call.length > 0 ? member.can_call.join(", ") : "none"}
|
|
28
|
+
|
|
29
|
+
## Memory
|
|
30
|
+
|
|
31
|
+
${memory.length > 0 ? memory.join("\n\n") : "No memory was injected."}
|
|
32
|
+
|
|
33
|
+
## Task
|
|
34
|
+
|
|
35
|
+
${task}
|
|
36
|
+
`;
|
|
37
|
+
}
|
|
38
|
+
async function loadMemory(project, member, settings) {
|
|
39
|
+
const snippets = [];
|
|
40
|
+
const maxSnippets = settings.memory?.max_snippets ?? 5;
|
|
41
|
+
if (settings.memory?.project) {
|
|
42
|
+
const projectMemoryPath = path.join(project.configRoot, "memory/project.md");
|
|
43
|
+
if (await pathExists(projectMemoryPath)) {
|
|
44
|
+
snippets.push(await memorySnippet("Project memory", projectMemoryPath));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (settings.memory?.member && snippets.length < maxSnippets) {
|
|
48
|
+
const memberMemoryPath = path.join(project.configRoot, `memory/members/${member.id}.md`);
|
|
49
|
+
if (await pathExists(memberMemoryPath)) {
|
|
50
|
+
snippets.push(await memorySnippet(`${member.id} memory`, memberMemoryPath));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return snippets.slice(0, maxSnippets);
|
|
54
|
+
}
|
|
55
|
+
async function memorySnippet(label, filePath) {
|
|
56
|
+
const content = await readFile(filePath, "utf8");
|
|
57
|
+
return `### ${label}\n\n${content.trim() || "(empty)"}`;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAsB,EACtB,MAAwB,EACxB,QAAwB,EACxB,MAAc,EACd,IAAY;IAEZ,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAChG,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE3D,OAAO;;;;UAIC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK;;;;EAIlC,YAAY,CAAC,IAAI,EAAE;;;;EAInB,aAAa,CAAC,OAAO,CAAC;;;;YAIZ,MAAM;cACJ,MAAM,CAAC,EAAE;iBACN,OAAO,CAAC,WAAW;gCACJ,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;;;;EAI9F,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,yBAAyB;;;;EAInE,IAAI;CACL,CAAC;AACF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAsB,EAAE,MAAwB,EAAE,QAAwB;IAClG,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC,CAAC;IAEvD,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAC7E,IAAI,MAAM,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;QAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,kBAAkB,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;QACzF,IAAI,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,GAAG,MAAM,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,QAAgB;IAC1D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,OAAO,KAAK,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { RunnerCapabilities, TaskEvent, TaskRecord } from "./types.js";
|
|
2
|
+
export interface TeamMemberSummary {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
runner: "codex";
|
|
6
|
+
home_path: string | null;
|
|
7
|
+
settings_path: string;
|
|
8
|
+
responsibilities: string[];
|
|
9
|
+
can_call: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface TeamSummary {
|
|
12
|
+
id?: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
project_root: string;
|
|
15
|
+
members: TeamMemberSummary[];
|
|
16
|
+
}
|
|
17
|
+
export interface LogEntry extends TaskEvent {
|
|
18
|
+
raw_line: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ApplyTaskResult {
|
|
21
|
+
task: TaskRecord;
|
|
22
|
+
files: string[];
|
|
23
|
+
patch_path: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function getCapabilities(): RunnerCapabilities[];
|
|
26
|
+
export declare function listTeam(startDir?: string): Promise<TeamSummary>;
|
|
27
|
+
export declare function runMember(memberId: string, task: string, options?: {
|
|
28
|
+
caller?: string;
|
|
29
|
+
startDir?: string;
|
|
30
|
+
streamToConsole?: boolean;
|
|
31
|
+
}): Promise<TaskRecord>;
|
|
32
|
+
export declare function delegateMember(memberId: string, task: string, options?: {
|
|
33
|
+
caller?: string;
|
|
34
|
+
startDir?: string;
|
|
35
|
+
}): Promise<TaskRecord>;
|
|
36
|
+
export declare function runWorkerTask(taskId: string, startDir?: string): Promise<TaskRecord>;
|
|
37
|
+
export declare function getTask(taskId: string, startDir?: string): Promise<TaskRecord>;
|
|
38
|
+
export declare function readTaskLogs(taskId: string, options?: {
|
|
39
|
+
startDir?: string;
|
|
40
|
+
tail?: number;
|
|
41
|
+
}): Promise<LogEntry[]>;
|
|
42
|
+
export declare function readTaskEventContent(taskId: string, startDir?: string): Promise<string>;
|
|
43
|
+
export declare function readTaskResult(taskId: string, startDir?: string): Promise<string>;
|
|
44
|
+
export declare function readTaskPatch(taskId: string, startDir?: string): Promise<string>;
|
|
45
|
+
export declare function applyTaskPatch(taskId: string, startDir?: string): Promise<ApplyTaskResult>;
|
|
46
|
+
export declare function cancelTask(taskId: string, startDir?: string): Promise<TaskRecord>;
|
|
47
|
+
export declare function interruptTask(taskId: string, message: string, startDir?: string): Promise<TaskRecord>;
|
|
48
|
+
export declare function formatTaskStatus(task: TaskRecord): string;
|
|
49
|
+
export declare function formatLogEntry(entry: LogEntry): string;
|
|
50
|
+
export declare function formatTeam(summary: TeamSummary): string;
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { assertCanCall, getMember, getMemberPaths, loadProject } from "./config.js";
|
|
6
|
+
import { CofounderError } from "./errors.js";
|
|
7
|
+
import { applyGitPatch, checkGitPatch, createWorktreePatch } from "./git.js";
|
|
8
|
+
import { findRecentCodexSessionId } from "./codexSessions.js";
|
|
9
|
+
import { prepareMemberRuntime } from "./memberRuntime.js";
|
|
10
|
+
import { assemblePrompt } from "./prompt.js";
|
|
11
|
+
import { pathExists } from "./paths.js";
|
|
12
|
+
import { appendTaskEvent, createTask, markTaskStatus, readTask, resolveTaskRecordPath, updateTask } from "./tasks.js";
|
|
13
|
+
import { CODEX_CAPABILITIES, runCodexTask } from "./codex.js";
|
|
14
|
+
export function getCapabilities() {
|
|
15
|
+
return [CODEX_CAPABILITIES];
|
|
16
|
+
}
|
|
17
|
+
export async function listTeam(startDir = process.cwd()) {
|
|
18
|
+
const project = await loadProject(startDir);
|
|
19
|
+
return {
|
|
20
|
+
id: project.team.team?.id,
|
|
21
|
+
name: project.team.team?.name,
|
|
22
|
+
project_root: project.projectRoot,
|
|
23
|
+
members: Object.values(project.team.members).map((member) => {
|
|
24
|
+
const paths = getMemberPaths(project, member);
|
|
25
|
+
return {
|
|
26
|
+
id: member.id,
|
|
27
|
+
title: member.title,
|
|
28
|
+
runner: member.runner,
|
|
29
|
+
home_path: paths.homePath,
|
|
30
|
+
settings_path: paths.settingsPath,
|
|
31
|
+
responsibilities: member.responsibilities,
|
|
32
|
+
can_call: member.can_call
|
|
33
|
+
};
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export async function runMember(memberId, task, options = {}) {
|
|
38
|
+
const project = await loadProject(options.startDir);
|
|
39
|
+
const caller = options.caller ?? "lead";
|
|
40
|
+
const member = getMember(project, memberId);
|
|
41
|
+
const runtime = await prepareMemberRuntime(project, member);
|
|
42
|
+
const workMode = getWorkMode(runtime.settings);
|
|
43
|
+
const prompt = await assemblePrompt(project, runtime.member, runtime.settings, caller, task);
|
|
44
|
+
const record = await createTask(project, {
|
|
45
|
+
caller,
|
|
46
|
+
assignee: memberId,
|
|
47
|
+
task,
|
|
48
|
+
mode: "run",
|
|
49
|
+
member_home_path: runtime.member_home_path,
|
|
50
|
+
member_prompt_path: runtime.member_prompt_path,
|
|
51
|
+
member_settings_path: runtime.member_settings_path,
|
|
52
|
+
member_effective_config_path: runtime.member_effective_config_path,
|
|
53
|
+
member_codex_config_path: runtime.member_codex_config_path,
|
|
54
|
+
work_mode: workMode
|
|
55
|
+
}, prompt);
|
|
56
|
+
return await runCodexTask(record, runtime.member, runtime.settings, { streamToConsole: options.streamToConsole, codexConfig: runtime.codex_config });
|
|
57
|
+
}
|
|
58
|
+
export async function delegateMember(memberId, task, options = {}) {
|
|
59
|
+
const project = await loadProject(options.startDir);
|
|
60
|
+
const caller = options.caller ?? "lead";
|
|
61
|
+
assertCanCall(project, caller, memberId);
|
|
62
|
+
const member = getMember(project, memberId);
|
|
63
|
+
const runtime = await prepareMemberRuntime(project, member);
|
|
64
|
+
const workMode = getWorkMode(runtime.settings);
|
|
65
|
+
const prompt = await assemblePrompt(project, runtime.member, runtime.settings, caller, task);
|
|
66
|
+
const record = await createTask(project, {
|
|
67
|
+
caller,
|
|
68
|
+
assignee: memberId,
|
|
69
|
+
task,
|
|
70
|
+
mode: "delegate",
|
|
71
|
+
member_home_path: runtime.member_home_path,
|
|
72
|
+
member_prompt_path: runtime.member_prompt_path,
|
|
73
|
+
member_settings_path: runtime.member_settings_path,
|
|
74
|
+
member_effective_config_path: runtime.member_effective_config_path,
|
|
75
|
+
member_codex_config_path: runtime.member_codex_config_path,
|
|
76
|
+
work_mode: workMode
|
|
77
|
+
}, prompt);
|
|
78
|
+
await startWorker(project, record);
|
|
79
|
+
return await readTask(project.projectRoot, record.id);
|
|
80
|
+
}
|
|
81
|
+
export async function runWorkerTask(taskId, startDir = process.cwd()) {
|
|
82
|
+
const project = await loadProject(startDir);
|
|
83
|
+
const task = await readTask(project.projectRoot, taskId);
|
|
84
|
+
const member = getMember(project, task.assignee);
|
|
85
|
+
const runtime = await prepareMemberRuntime(project, member);
|
|
86
|
+
return await runCodexTask(task, runtime.member, runtime.settings, { codexConfig: runtime.codex_config });
|
|
87
|
+
}
|
|
88
|
+
export async function getTask(taskId, startDir = process.cwd()) {
|
|
89
|
+
const project = await loadProject(startDir);
|
|
90
|
+
return await readTask(project.projectRoot, taskId);
|
|
91
|
+
}
|
|
92
|
+
export async function readTaskLogs(taskId, options = {}) {
|
|
93
|
+
const project = await loadProject(options.startDir);
|
|
94
|
+
const task = await readTask(project.projectRoot, taskId);
|
|
95
|
+
const content = await readFile(resolveTaskRecordPath(project.projectRoot, task, "events_path"), "utf8");
|
|
96
|
+
const entries = content
|
|
97
|
+
.split("\n")
|
|
98
|
+
.filter(Boolean)
|
|
99
|
+
.map((line) => parseLogLine(line));
|
|
100
|
+
return entries.slice(-(options.tail ?? 50));
|
|
101
|
+
}
|
|
102
|
+
export async function readTaskEventContent(taskId, startDir = process.cwd()) {
|
|
103
|
+
const project = await loadProject(startDir);
|
|
104
|
+
const task = await readTask(project.projectRoot, taskId);
|
|
105
|
+
return await readFile(resolveTaskRecordPath(project.projectRoot, task, "events_path"), "utf8");
|
|
106
|
+
}
|
|
107
|
+
export async function readTaskResult(taskId, startDir = process.cwd()) {
|
|
108
|
+
const project = await loadProject(startDir);
|
|
109
|
+
const task = await readTask(project.projectRoot, taskId);
|
|
110
|
+
return await readFile(resolveTaskRecordPath(project.projectRoot, task, "result_path"), "utf8");
|
|
111
|
+
}
|
|
112
|
+
export async function readTaskPatch(taskId, startDir = process.cwd()) {
|
|
113
|
+
const project = await loadProject(startDir);
|
|
114
|
+
const task = await readTask(project.projectRoot, taskId);
|
|
115
|
+
assertWorktreeTask(task);
|
|
116
|
+
const generated = await createWorktreePatch(task.execution_cwd);
|
|
117
|
+
return generated.patch;
|
|
118
|
+
}
|
|
119
|
+
export async function applyTaskPatch(taskId, startDir = process.cwd()) {
|
|
120
|
+
const project = await loadProject(startDir);
|
|
121
|
+
const task = await readTask(project.projectRoot, taskId);
|
|
122
|
+
assertWorktreeTask(task);
|
|
123
|
+
const generated = await createWorktreePatch(task.execution_cwd);
|
|
124
|
+
if (generated.patch.trim().length === 0) {
|
|
125
|
+
throw new CofounderError(`No worktree changes to apply for task ${taskId}`);
|
|
126
|
+
}
|
|
127
|
+
const patchPath = path.join(".cofounder", "runs", task.id, "apply.patch");
|
|
128
|
+
await writeFile(path.join(project.projectRoot, patchPath), generated.patch, "utf8");
|
|
129
|
+
await checkGitPatch(project.projectRoot, generated.patch);
|
|
130
|
+
await applyGitPatch(project.projectRoot, generated.patch);
|
|
131
|
+
const updated = await updateTask(project.projectRoot, task.id, {
|
|
132
|
+
apply_patch_path: patchPath,
|
|
133
|
+
applied_at: new Date().toISOString(),
|
|
134
|
+
applied_files: generated.files
|
|
135
|
+
});
|
|
136
|
+
await appendTaskEvent(project.projectRoot, updated, {
|
|
137
|
+
time: new Date().toISOString(),
|
|
138
|
+
task_id: updated.id,
|
|
139
|
+
type: "git.worktree.applied",
|
|
140
|
+
message: generated.files.length > 0 ? generated.files.join(", ") : "patch applied",
|
|
141
|
+
raw: {
|
|
142
|
+
files: generated.files,
|
|
143
|
+
patch_path: patchPath
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
task: updated,
|
|
148
|
+
files: generated.files,
|
|
149
|
+
patch_path: patchPath
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
export async function cancelTask(taskId, startDir = process.cwd()) {
|
|
153
|
+
const project = await loadProject(startDir);
|
|
154
|
+
const task = await readTask(project.projectRoot, taskId);
|
|
155
|
+
if (["succeeded", "failed", "cancelled"].includes(task.status)) {
|
|
156
|
+
return task;
|
|
157
|
+
}
|
|
158
|
+
tryKill(task.runner_pid);
|
|
159
|
+
tryKill(task.worker_pid);
|
|
160
|
+
tryKillProcessGroup(task.worker_pid);
|
|
161
|
+
return await markTaskStatus(project.projectRoot, task, "cancelled", "Task cancelled");
|
|
162
|
+
}
|
|
163
|
+
export async function interruptTask(taskId, message, startDir = process.cwd()) {
|
|
164
|
+
const project = await loadProject(startDir);
|
|
165
|
+
let task = await readTask(project.projectRoot, taskId);
|
|
166
|
+
if (!["queued", "running", "waiting"].includes(task.status)) {
|
|
167
|
+
throw new CofounderError(`Task ${taskId} is already ${task.status}`);
|
|
168
|
+
}
|
|
169
|
+
if (!task.codex_session_id) {
|
|
170
|
+
const discoveredSessionId = await findRecentCodexSessionId({
|
|
171
|
+
cwd: task.execution_cwd,
|
|
172
|
+
since: task.started_at ?? task.created_at
|
|
173
|
+
});
|
|
174
|
+
if (discoveredSessionId) {
|
|
175
|
+
task = await updateTask(project.projectRoot, task.id, { codex_session_id: discoveredSessionId });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (!task.codex_session_id) {
|
|
179
|
+
throw new CofounderError(`Task ${taskId} has no Codex session id yet; try again after Codex starts`);
|
|
180
|
+
}
|
|
181
|
+
const member = getMember(project, task.assignee);
|
|
182
|
+
const runtime = await prepareMemberRuntime(project, member);
|
|
183
|
+
await cancelTask(taskId, startDir);
|
|
184
|
+
const record = await createTask(project, {
|
|
185
|
+
caller: task.caller,
|
|
186
|
+
assignee: task.assignee,
|
|
187
|
+
task: message,
|
|
188
|
+
mode: "interrupt",
|
|
189
|
+
member_home_path: runtime.member_home_path,
|
|
190
|
+
member_prompt_path: runtime.member_prompt_path,
|
|
191
|
+
member_settings_path: runtime.member_settings_path,
|
|
192
|
+
member_effective_config_path: runtime.member_effective_config_path,
|
|
193
|
+
member_codex_config_path: runtime.member_codex_config_path,
|
|
194
|
+
work_mode: task.work_mode,
|
|
195
|
+
execution_cwd: task.execution_cwd,
|
|
196
|
+
worktree_path: task.worktree_path,
|
|
197
|
+
codex_resume_session_id: task.codex_session_id,
|
|
198
|
+
interrupted_task_id: task.id,
|
|
199
|
+
interrupt_message: message
|
|
200
|
+
}, buildInterruptPrompt(task, message));
|
|
201
|
+
await startWorker(project, record);
|
|
202
|
+
return await readTask(project.projectRoot, record.id);
|
|
203
|
+
}
|
|
204
|
+
export function formatTaskStatus(task) {
|
|
205
|
+
const lines = [
|
|
206
|
+
`${task.id} ${task.status}`,
|
|
207
|
+
`assignee: ${task.assignee}`,
|
|
208
|
+
`caller: ${task.caller}`,
|
|
209
|
+
`created: ${task.created_at}`
|
|
210
|
+
];
|
|
211
|
+
if (task.started_at) {
|
|
212
|
+
lines.push(`started: ${task.started_at}`);
|
|
213
|
+
}
|
|
214
|
+
if (task.finished_at) {
|
|
215
|
+
lines.push(`finished: ${task.finished_at}`);
|
|
216
|
+
}
|
|
217
|
+
if (task.exit_code !== undefined) {
|
|
218
|
+
lines.push(`exit_code: ${task.exit_code}`);
|
|
219
|
+
}
|
|
220
|
+
if (task.error) {
|
|
221
|
+
lines.push(`error: ${task.error}`);
|
|
222
|
+
}
|
|
223
|
+
if (task.codex_session_id) {
|
|
224
|
+
lines.push(`codex_session_id: ${task.codex_session_id}`);
|
|
225
|
+
}
|
|
226
|
+
if (task.codex_resume_session_id) {
|
|
227
|
+
lines.push(`codex_resume_session_id: ${task.codex_resume_session_id}`);
|
|
228
|
+
}
|
|
229
|
+
if (task.interrupted_task_id) {
|
|
230
|
+
lines.push(`interrupted_task_id: ${task.interrupted_task_id}`);
|
|
231
|
+
}
|
|
232
|
+
if (task.applied_at) {
|
|
233
|
+
lines.push(`applied: ${task.applied_at}`);
|
|
234
|
+
lines.push(`applied_files: ${task.applied_files.length > 0 ? task.applied_files.join(", ") : "none"}`);
|
|
235
|
+
lines.push(`apply_patch: ${task.apply_patch_path ?? "none"}`);
|
|
236
|
+
}
|
|
237
|
+
lines.push(`git_available: ${task.git_available === null ? "unknown" : String(task.git_available)}`);
|
|
238
|
+
lines.push(`work_mode: ${task.work_mode}`);
|
|
239
|
+
lines.push(`execution_cwd: ${task.execution_cwd}`);
|
|
240
|
+
if (task.worktree_path) {
|
|
241
|
+
lines.push(`worktree: ${task.worktree_path}`);
|
|
242
|
+
}
|
|
243
|
+
lines.push(`changed_files: ${task.changed_files.length > 0 ? task.changed_files.join(", ") : "none"}`);
|
|
244
|
+
lines.push(`new_changed_files: ${task.new_changed_files.length > 0 ? task.new_changed_files.join(", ") : "none"}`);
|
|
245
|
+
lines.push(`conflict_risk: ${task.conflict_risk ? "yes" : "no"}`);
|
|
246
|
+
lines.push(`result: ${task.result_path}`);
|
|
247
|
+
lines.push(`events: ${task.events_path}`);
|
|
248
|
+
lines.push(`cwd: ${task.cwd}`);
|
|
249
|
+
lines.push(`member_home: ${task.member_home_path ?? "none"}`);
|
|
250
|
+
lines.push(`member_settings: ${task.member_settings_path}`);
|
|
251
|
+
lines.push(`member_effective_config: ${task.member_effective_config_path ?? "none"}`);
|
|
252
|
+
lines.push(`member_codex_config: ${task.member_codex_config_path ?? "none"}`);
|
|
253
|
+
return lines.join("\n");
|
|
254
|
+
}
|
|
255
|
+
function getWorkMode(settings) {
|
|
256
|
+
const mode = settings.write?.mode ?? "direct";
|
|
257
|
+
if (mode !== "direct" && mode !== "worktree") {
|
|
258
|
+
throw new CofounderError(`Unsupported write.mode "${String(mode)}"; expected "direct" or "worktree"`);
|
|
259
|
+
}
|
|
260
|
+
return mode;
|
|
261
|
+
}
|
|
262
|
+
function assertWorktreeTask(task) {
|
|
263
|
+
if (task.work_mode !== "worktree" || !task.worktree_path) {
|
|
264
|
+
throw new CofounderError(`Task ${task.id} was not run in worktree mode`);
|
|
265
|
+
}
|
|
266
|
+
if (["queued", "running", "waiting"].includes(task.status)) {
|
|
267
|
+
throw new CofounderError(`Task ${task.id} is still ${task.status}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function buildInterruptPrompt(task, message) {
|
|
271
|
+
return `# Cofounder Interrupt
|
|
272
|
+
|
|
273
|
+
The previous task ${task.id} was cancelled by the caller.
|
|
274
|
+
|
|
275
|
+
Continue the same Codex session with this revised instruction:
|
|
276
|
+
|
|
277
|
+
${message}
|
|
278
|
+
`;
|
|
279
|
+
}
|
|
280
|
+
export function formatLogEntry(entry) {
|
|
281
|
+
const message = entry.message ? ` ${entry.message.replace(/\n+$/g, "")}` : "";
|
|
282
|
+
return `[${entry.time ?? "unknown"}] ${entry.type ?? "event"}${message}`;
|
|
283
|
+
}
|
|
284
|
+
export function formatTeam(summary) {
|
|
285
|
+
const lines = [summary.name ?? summary.id ?? "Team"];
|
|
286
|
+
for (const member of summary.members) {
|
|
287
|
+
lines.push("");
|
|
288
|
+
lines.push(`${member.id}: ${member.title}`);
|
|
289
|
+
lines.push(` runner: ${member.runner}`);
|
|
290
|
+
lines.push(` home: ${member.home_path ?? "none"}`);
|
|
291
|
+
lines.push(` settings: ${member.settings_path}`);
|
|
292
|
+
lines.push(` can_call: ${member.can_call.length > 0 ? member.can_call.join(", ") : "none"}`);
|
|
293
|
+
lines.push(" responsibilities:");
|
|
294
|
+
for (const responsibility of member.responsibilities) {
|
|
295
|
+
lines.push(` - ${responsibility}`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return lines.join("\n");
|
|
299
|
+
}
|
|
300
|
+
async function startWorker(project, record) {
|
|
301
|
+
const worker = await resolveWorkerCommand(record.id);
|
|
302
|
+
const child = spawn(worker.command, worker.args, {
|
|
303
|
+
cwd: project.projectRoot,
|
|
304
|
+
env: process.env,
|
|
305
|
+
detached: true,
|
|
306
|
+
stdio: "ignore"
|
|
307
|
+
});
|
|
308
|
+
child.unref();
|
|
309
|
+
await updateTask(project.projectRoot, record.id, { worker_pid: child.pid });
|
|
310
|
+
}
|
|
311
|
+
async function resolveWorkerCommand(taskId) {
|
|
312
|
+
const workerJs = fileURLToPath(new URL("./worker.js", import.meta.url));
|
|
313
|
+
if (await pathExists(workerJs)) {
|
|
314
|
+
return { command: process.execPath, args: [workerJs, taskId] };
|
|
315
|
+
}
|
|
316
|
+
const workerTs = fileURLToPath(new URL("./worker.ts", import.meta.url));
|
|
317
|
+
const tsxBin = path.resolve(path.dirname(workerTs), "../node_modules/.bin/tsx");
|
|
318
|
+
if (await pathExists(workerTs) && await pathExists(tsxBin)) {
|
|
319
|
+
return { command: tsxBin, args: [workerTs, taskId] };
|
|
320
|
+
}
|
|
321
|
+
throw new CofounderError("Could not resolve Cofounder worker entrypoint");
|
|
322
|
+
}
|
|
323
|
+
function parseLogLine(line) {
|
|
324
|
+
try {
|
|
325
|
+
return {
|
|
326
|
+
...JSON.parse(line),
|
|
327
|
+
raw_line: line
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
return {
|
|
332
|
+
time: new Date(0).toISOString(),
|
|
333
|
+
task_id: "unknown",
|
|
334
|
+
type: "raw",
|
|
335
|
+
message: line,
|
|
336
|
+
raw_line: line
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
function tryKill(pid) {
|
|
341
|
+
if (!pid || pid <= 0) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
try {
|
|
345
|
+
process.kill(pid, "SIGTERM");
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
// The process may have already exited; cancellation remains idempotent.
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
function tryKillProcessGroup(pid) {
|
|
352
|
+
if (!pid || pid <= 0 || process.platform === "win32") {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
process.kill(-pid, "SIGTERM");
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
// Detached workers may already have exited, and direct process kill above is enough then.
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const DEFAULT_PUBLISHED_PACKAGE = "cofounder-crew";
|
|
2
|
+
export interface CodexSetupOptions {
|
|
3
|
+
packageName?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function formatCodexSetup(options?: CodexSetupOptions): string;
|
|
6
|
+
export declare function installCodexMcp(options?: CodexSetupOptions): Promise<string>;
|