twinny 0.0.0-dev.260525150705
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 +264 -0
- package/README.zh-CN.md +252 -0
- package/configs/banner.png +0 -0
- package/configs/logo.png +0 -0
- package/dist/app/caffeinate.d.ts +28 -0
- package/dist/app/caffeinate.js +96 -0
- package/dist/app/caffeinate.js.map +1 -0
- package/dist/app/daemon.d.ts +1 -0
- package/dist/app/daemon.js +44 -0
- package/dist/app/daemon.js.map +1 -0
- package/dist/app/lark-assets.d.ts +25 -0
- package/dist/app/lark-assets.js +108 -0
- package/dist/app/lark-assets.js.map +1 -0
- package/dist/app/startup-probe.d.ts +17 -0
- package/dist/app/startup-probe.js +90 -0
- package/dist/app/startup-probe.js.map +1 -0
- package/dist/app/wiring.d.ts +122 -0
- package/dist/app/wiring.js +694 -0
- package/dist/app/wiring.js.map +1 -0
- package/dist/cli/commands.d.ts +1 -0
- package/dist/cli/commands.js +47 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/install-wizard.d.ts +41 -0
- package/dist/cli/install-wizard.js +629 -0
- package/dist/cli/install-wizard.js.map +1 -0
- package/dist/codex/appserver.d.ts +109 -0
- package/dist/codex/appserver.js +308 -0
- package/dist/codex/appserver.js.map +1 -0
- package/dist/codex/goal.d.ts +64 -0
- package/dist/codex/goal.js +433 -0
- package/dist/codex/goal.js.map +1 -0
- package/dist/codex/index.d.ts +6 -0
- package/dist/codex/index.js +7 -0
- package/dist/codex/index.js.map +1 -0
- package/dist/codex/protocol.d.ts +95 -0
- package/dist/codex/protocol.js +205 -0
- package/dist/codex/protocol.js.map +1 -0
- package/dist/codex/thread-name.d.ts +3 -0
- package/dist/codex/thread-name.js +27 -0
- package/dist/codex/thread-name.js.map +1 -0
- package/dist/codex/thread.d.ts +76 -0
- package/dist/codex/thread.js +80 -0
- package/dist/codex/thread.js.map +1 -0
- package/dist/codex/turn.d.ts +166 -0
- package/dist/codex/turn.js +746 -0
- package/dist/codex/turn.js.map +1 -0
- package/dist/config/bootstrap.d.ts +14 -0
- package/dist/config/bootstrap.js +56 -0
- package/dist/config/bootstrap.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +49 -0
- package/dist/config/loader.js +467 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +11 -0
- package/dist/config/paths.js +43 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/secrets.d.ts +33 -0
- package/dist/config/secrets.js +85 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/conversation/manager.d.ts +701 -0
- package/dist/conversation/manager.js +7673 -0
- package/dist/conversation/manager.js.map +1 -0
- package/dist/conversation/queue.d.ts +8 -0
- package/dist/conversation/queue.js +28 -0
- package/dist/conversation/queue.js.map +1 -0
- package/dist/conversation/routing.d.ts +11 -0
- package/dist/conversation/routing.js +55 -0
- package/dist/conversation/routing.js.map +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.js +17 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/lark/auth.d.ts +41 -0
- package/dist/lark/auth.js +132 -0
- package/dist/lark/auth.js.map +1 -0
- package/dist/lark/browser-auth.d.ts +68 -0
- package/dist/lark/browser-auth.js +258 -0
- package/dist/lark/browser-auth.js.map +1 -0
- package/dist/lark/cards.d.ts +140 -0
- package/dist/lark/cards.js +1150 -0
- package/dist/lark/cards.js.map +1 -0
- package/dist/lark/contact.d.ts +41 -0
- package/dist/lark/contact.js +122 -0
- package/dist/lark/contact.js.map +1 -0
- package/dist/lark/events.d.ts +65 -0
- package/dist/lark/events.js +218 -0
- package/dist/lark/events.js.map +1 -0
- package/dist/lark/files.d.ts +36 -0
- package/dist/lark/files.js +191 -0
- package/dist/lark/files.js.map +1 -0
- package/dist/lark/filters.d.ts +73 -0
- package/dist/lark/filters.js +678 -0
- package/dist/lark/filters.js.map +1 -0
- package/dist/lark/index.d.ts +10 -0
- package/dist/lark/index.js +11 -0
- package/dist/lark/index.js.map +1 -0
- package/dist/lark/messages.d.ts +87 -0
- package/dist/lark/messages.js +428 -0
- package/dist/lark/messages.js.map +1 -0
- package/dist/lark/openapi.d.ts +58 -0
- package/dist/lark/openapi.js +206 -0
- package/dist/lark/openapi.js.map +1 -0
- package/dist/lark/redactor.d.ts +5 -0
- package/dist/lark/redactor.js +68 -0
- package/dist/lark/redactor.js.map +1 -0
- package/dist/lark/types.d.ts +49 -0
- package/dist/lark/types.js +18 -0
- package/dist/lark/types.js.map +1 -0
- package/dist/launchd/install.d.ts +22 -0
- package/dist/launchd/install.js +114 -0
- package/dist/launchd/install.js.map +1 -0
- package/dist/launchd/plist.d.ts +10 -0
- package/dist/launchd/plist.js +61 -0
- package/dist/launchd/plist.js.map +1 -0
- package/dist/lock/index.d.ts +20 -0
- package/dist/lock/index.js +74 -0
- package/dist/lock/index.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +11 -0
- package/dist/main.js.map +1 -0
- package/dist/markdown.d.ts +12 -0
- package/dist/markdown.js +149 -0
- package/dist/markdown.js.map +1 -0
- package/dist/observability/health.d.ts +25 -0
- package/dist/observability/health.js +187 -0
- package/dist/observability/health.js.map +1 -0
- package/dist/observability/logs.d.ts +10 -0
- package/dist/observability/logs.js +34 -0
- package/dist/observability/logs.js.map +1 -0
- package/dist/observability/system-notifications.d.ts +25 -0
- package/dist/observability/system-notifications.js +33 -0
- package/dist/observability/system-notifications.js.map +1 -0
- package/dist/profiles/guest.d.ts +19 -0
- package/dist/profiles/guest.js +241 -0
- package/dist/profiles/guest.js.map +1 -0
- package/dist/profiles/index.d.ts +5 -0
- package/dist/profiles/index.js +14 -0
- package/dist/profiles/index.js.map +1 -0
- package/dist/profiles/owner.d.ts +1 -0
- package/dist/profiles/owner.js +6 -0
- package/dist/profiles/owner.js.map +1 -0
- package/dist/store/db.d.ts +10 -0
- package/dist/store/db.js +29 -0
- package/dist/store/db.js.map +1 -0
- package/dist/store/index.d.ts +3 -0
- package/dist/store/index.js +4 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/migrations.d.ts +13 -0
- package/dist/store/migrations.js +79 -0
- package/dist/store/migrations.js.map +1 -0
- package/dist/store/repositories.d.ts +227 -0
- package/dist/store/repositories.js +1384 -0
- package/dist/store/repositories.js.map +1 -0
- package/dist/telemetry/client.d.ts +60 -0
- package/dist/telemetry/client.js +204 -0
- package/dist/telemetry/client.js.map +1 -0
- package/dist/telemetry/hash.d.ts +1 -0
- package/dist/telemetry/hash.js +8 -0
- package/dist/telemetry/hash.js.map +1 -0
- package/dist/telemetry/index.d.ts +4 -0
- package/dist/telemetry/index.js +5 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/posthog.d.ts +27 -0
- package/dist/telemetry/posthog.js +45 -0
- package/dist/telemetry/posthog.js.map +1 -0
- package/dist/telemetry/reporter.d.ts +13 -0
- package/dist/telemetry/reporter.js +29 -0
- package/dist/telemetry/reporter.js.map +1 -0
- package/dist/types.d.ts +330 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +1 -0
- package/dist/version.js.map +1 -0
- package/dist/version.json +3 -0
- package/dist/workspace/index.d.ts +2 -0
- package/dist/workspace/index.js +3 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/manager.d.ts +14 -0
- package/dist/workspace/manager.js +69 -0
- package/dist/workspace/manager.js.map +1 -0
- package/dist/workspace/slug.d.ts +8 -0
- package/dist/workspace/slug.js +59 -0
- package/dist/workspace/slug.js.map +1 -0
- package/migrations/0001_initial.sql +102 -0
- package/package.json +85 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import { type CodexThreadNameUpdate, type ProfileName } from "../types.js";
|
|
3
|
+
import { CodexProtocolClient, type CodexNotificationMessage, type InitializeResponse } from "./protocol.js";
|
|
4
|
+
import { type GoalResumeOptions, type GoalRunOptions, type ThreadGoal } from "./goal.js";
|
|
5
|
+
import { type ThreadForkResponse, type ThreadResumeResponse, type ThreadStartResponse } from "./thread.js";
|
|
6
|
+
import { type CodexTurnInput, type ThreadCompactStartOptions, type TurnStartOptions } from "./turn.js";
|
|
7
|
+
export interface CodexAppServerOptions {
|
|
8
|
+
profile: ProfileName;
|
|
9
|
+
binary: string;
|
|
10
|
+
codexHome: string;
|
|
11
|
+
cwd?: string;
|
|
12
|
+
env?: NodeJS.ProcessEnv;
|
|
13
|
+
requestTimeoutMs?: number;
|
|
14
|
+
clientVersion?: string;
|
|
15
|
+
stopTimeoutMs?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ProfileCodexAppServerConfig {
|
|
18
|
+
profile: ProfileName;
|
|
19
|
+
codexHome: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ProfileCodexAppServerPoolOptions {
|
|
22
|
+
binary: string;
|
|
23
|
+
profiles: Record<ProfileName, {
|
|
24
|
+
codexHome: string;
|
|
25
|
+
}>;
|
|
26
|
+
requestTimeoutMs?: number;
|
|
27
|
+
clientVersion?: string;
|
|
28
|
+
env?: NodeJS.ProcessEnv;
|
|
29
|
+
}
|
|
30
|
+
export interface CodexAppServerEvents {
|
|
31
|
+
stderr: [chunk: string];
|
|
32
|
+
notification: [message: CodexNotificationMessage];
|
|
33
|
+
threadNameUpdated: [update: CodexThreadNameUpdate];
|
|
34
|
+
exit: [code: number | null, signal: NodeJS.Signals | null];
|
|
35
|
+
}
|
|
36
|
+
export declare interface CodexAppServer {
|
|
37
|
+
on<K extends keyof CodexAppServerEvents>(event: K, listener: (...args: CodexAppServerEvents[K]) => void): this;
|
|
38
|
+
once<K extends keyof CodexAppServerEvents>(event: K, listener: (...args: CodexAppServerEvents[K]) => void): this;
|
|
39
|
+
off<K extends keyof CodexAppServerEvents>(event: K, listener: (...args: CodexAppServerEvents[K]) => void): this;
|
|
40
|
+
emit<K extends keyof CodexAppServerEvents>(event: K, ...args: CodexAppServerEvents[K]): boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare class CodexAppServer extends EventEmitter {
|
|
43
|
+
private readonly options;
|
|
44
|
+
private child;
|
|
45
|
+
private protocolClient;
|
|
46
|
+
private initializeResponse;
|
|
47
|
+
private startPromise;
|
|
48
|
+
private codexVersion;
|
|
49
|
+
constructor(options: CodexAppServerOptions);
|
|
50
|
+
get protocol(): CodexProtocolClient;
|
|
51
|
+
get initialized(): InitializeResponse | undefined;
|
|
52
|
+
readCodexVersion(): string;
|
|
53
|
+
start(): Promise<InitializeResponse>;
|
|
54
|
+
private startFresh;
|
|
55
|
+
private attachProtocolNotifications;
|
|
56
|
+
startThread(cwd: string, options?: {
|
|
57
|
+
developerInstructions?: string;
|
|
58
|
+
}): Promise<ThreadStartResponse>;
|
|
59
|
+
resumeThread(threadId: string, cwd: string): Promise<ThreadResumeResponse>;
|
|
60
|
+
forkThread(threadId: string, cwd: string, options?: {
|
|
61
|
+
ephemeral?: boolean;
|
|
62
|
+
developerInstructions?: string;
|
|
63
|
+
model?: string;
|
|
64
|
+
effort?: string;
|
|
65
|
+
}): Promise<ThreadForkResponse>;
|
|
66
|
+
injectThreadItems(threadId: string, items: unknown[]): Promise<void>;
|
|
67
|
+
unsubscribeThread(threadId: string): Promise<void>;
|
|
68
|
+
setThreadName(threadId: string, name: string): Promise<void>;
|
|
69
|
+
startTurn(options: TurnStartOptions): Promise<import("../types.js").CodexTurnResult>;
|
|
70
|
+
compactThread(options: ThreadCompactStartOptions & {
|
|
71
|
+
cwd?: string;
|
|
72
|
+
}): Promise<import("../types.js").CodexTurnResult>;
|
|
73
|
+
steerTurn(options: {
|
|
74
|
+
threadId: string;
|
|
75
|
+
turnId: string;
|
|
76
|
+
text?: string;
|
|
77
|
+
input?: CodexTurnInput;
|
|
78
|
+
}): Promise<void>;
|
|
79
|
+
interruptTurn(options: {
|
|
80
|
+
threadId: string;
|
|
81
|
+
turnId: string;
|
|
82
|
+
}): Promise<void>;
|
|
83
|
+
readAccountRateLimits(): Promise<unknown>;
|
|
84
|
+
setThreadGoal(threadId: string, objective: string): Promise<ThreadGoal>;
|
|
85
|
+
getThreadGoal(threadId: string): Promise<ThreadGoal | null>;
|
|
86
|
+
clearThreadGoal(threadId: string): Promise<void>;
|
|
87
|
+
runGoal(options: GoalRunOptions): Promise<import("../types.js").CodexTurnResult>;
|
|
88
|
+
resumeGoal(options: GoalResumeOptions): Promise<import("../types.js").CodexTurnResult>;
|
|
89
|
+
stop(signal?: NodeJS.Signals): Promise<void>;
|
|
90
|
+
private prepareThreadWorkspace;
|
|
91
|
+
private profileName;
|
|
92
|
+
private readCodexBinaryVersionBestEffort;
|
|
93
|
+
}
|
|
94
|
+
export declare class ProfileCodexAppServerPool {
|
|
95
|
+
private readonly options;
|
|
96
|
+
private readonly servers;
|
|
97
|
+
constructor(options: ProfileCodexAppServerPoolOptions);
|
|
98
|
+
startAll(): Promise<Record<ProfileName, InitializeResponse>>;
|
|
99
|
+
get(profile: ProfileName): CodexAppServer;
|
|
100
|
+
listProfiles(): ProfileName[];
|
|
101
|
+
replace(profile: ProfileName, config: {
|
|
102
|
+
binary?: string;
|
|
103
|
+
codexHome: string;
|
|
104
|
+
}): CodexAppServer;
|
|
105
|
+
remove(profile: ProfileName, signal?: NodeJS.Signals): Promise<void>;
|
|
106
|
+
restart(profile: ProfileName): Promise<InitializeResponse>;
|
|
107
|
+
stopAll(signal?: NodeJS.Signals): Promise<void>;
|
|
108
|
+
}
|
|
109
|
+
export declare function buildCodexAppServerEnv(codexHome: string, source?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { EventEmitter } from "node:events";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { execa } from "execa";
|
|
5
|
+
import { ensureGuestWorkspaceTrust, ensureProjectTrust } from "../profiles/index.js";
|
|
6
|
+
import { GUEST_PROFILE_NAME } from "../types.js";
|
|
7
|
+
import { CodexProtocolClient, createInitializeParams } from "./protocol.js";
|
|
8
|
+
import { parseCodexThreadNameUpdatedNotification } from "./thread-name.js";
|
|
9
|
+
import { clearCodexThreadGoal, getCodexThreadGoal, resumeCodexThreadGoal, runCodexThreadGoal, setCodexThreadGoal } from "./goal.js";
|
|
10
|
+
import { forkCodexThread, injectCodexThreadItems, resumeCodexThread, setCodexThreadName, startCodexThread, unsubscribeCodexThread } from "./thread.js";
|
|
11
|
+
import { compactCodexThread, interruptCodexTurn, startCodexTurn, steerCodexTurn } from "./turn.js";
|
|
12
|
+
export class CodexAppServer extends EventEmitter {
|
|
13
|
+
options;
|
|
14
|
+
child;
|
|
15
|
+
protocolClient;
|
|
16
|
+
initializeResponse;
|
|
17
|
+
startPromise;
|
|
18
|
+
codexVersion;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
super();
|
|
21
|
+
this.options = options;
|
|
22
|
+
}
|
|
23
|
+
get protocol() {
|
|
24
|
+
if (!this.protocolClient) {
|
|
25
|
+
throw new Error("Codex app-server is not started");
|
|
26
|
+
}
|
|
27
|
+
return this.protocolClient;
|
|
28
|
+
}
|
|
29
|
+
get initialized() {
|
|
30
|
+
return this.initializeResponse;
|
|
31
|
+
}
|
|
32
|
+
readCodexVersion() {
|
|
33
|
+
return this.codexVersion ?? "不可用";
|
|
34
|
+
}
|
|
35
|
+
async start() {
|
|
36
|
+
if (this.protocolClient && this.initializeResponse) {
|
|
37
|
+
return this.initializeResponse;
|
|
38
|
+
}
|
|
39
|
+
if (this.startPromise) {
|
|
40
|
+
return this.startPromise;
|
|
41
|
+
}
|
|
42
|
+
this.startPromise = this.startFresh();
|
|
43
|
+
try {
|
|
44
|
+
return await this.startPromise;
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
this.startPromise = undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async startFresh() {
|
|
51
|
+
const codexVersion = await this.readCodexBinaryVersionBestEffort();
|
|
52
|
+
if (this.protocolClient) {
|
|
53
|
+
this.initializeResponse = await this.protocolClient.initialize(createInitializeParams(this.options.clientVersion));
|
|
54
|
+
this.codexVersion = codexVersion;
|
|
55
|
+
return this.initializeResponse;
|
|
56
|
+
}
|
|
57
|
+
const child = spawn(this.options.binary, ["app-server", "--listen", "stdio://"], {
|
|
58
|
+
cwd: this.options.cwd ?? process.cwd(),
|
|
59
|
+
env: buildCodexAppServerEnv(this.options.codexHome, this.options.env ?? process.env),
|
|
60
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
61
|
+
});
|
|
62
|
+
child.stderr.setEncoding("utf8");
|
|
63
|
+
child.stderr.on("data", (chunk) => this.emit("stderr", chunk));
|
|
64
|
+
const protocol = new CodexProtocolClient(child.stdout, child.stdin, {
|
|
65
|
+
requestTimeoutMs: this.options.requestTimeoutMs,
|
|
66
|
+
requestIdPrefix: `twinny-${this.profileName()}`
|
|
67
|
+
});
|
|
68
|
+
this.attachProtocolNotifications(protocol);
|
|
69
|
+
this.child = child;
|
|
70
|
+
this.protocolClient = protocol;
|
|
71
|
+
this.initializeResponse = undefined;
|
|
72
|
+
child.on("exit", (code, signal) => {
|
|
73
|
+
if (this.child === child) {
|
|
74
|
+
this.child = undefined;
|
|
75
|
+
}
|
|
76
|
+
if (this.protocolClient === protocol) {
|
|
77
|
+
this.protocolClient = undefined;
|
|
78
|
+
this.initializeResponse = undefined;
|
|
79
|
+
}
|
|
80
|
+
this.emit("exit", code, signal);
|
|
81
|
+
});
|
|
82
|
+
protocol.start();
|
|
83
|
+
this.initializeResponse = await protocol.initialize(createInitializeParams(this.options.clientVersion));
|
|
84
|
+
this.codexVersion = codexVersion;
|
|
85
|
+
return this.initializeResponse;
|
|
86
|
+
}
|
|
87
|
+
attachProtocolNotifications(protocol) {
|
|
88
|
+
protocol.on("notification", (message) => {
|
|
89
|
+
this.emit("notification", message);
|
|
90
|
+
const update = parseCodexThreadNameUpdatedNotification(message);
|
|
91
|
+
if (update) {
|
|
92
|
+
this.emit("threadNameUpdated", update);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async startThread(cwd, options = {}) {
|
|
97
|
+
await this.prepareThreadWorkspace(cwd);
|
|
98
|
+
return startCodexThread(this.protocol, { cwd, developerInstructions: options.developerInstructions });
|
|
99
|
+
}
|
|
100
|
+
async resumeThread(threadId, cwd) {
|
|
101
|
+
await this.prepareThreadWorkspace(cwd);
|
|
102
|
+
return resumeCodexThread(this.protocol, threadId, { cwd });
|
|
103
|
+
}
|
|
104
|
+
async forkThread(threadId, cwd, options = {}) {
|
|
105
|
+
await this.prepareThreadWorkspace(cwd);
|
|
106
|
+
return forkCodexThread(this.protocol, threadId, { cwd, ...options });
|
|
107
|
+
}
|
|
108
|
+
async injectThreadItems(threadId, items) {
|
|
109
|
+
await injectCodexThreadItems(this.protocol, { threadId, items });
|
|
110
|
+
}
|
|
111
|
+
async unsubscribeThread(threadId) {
|
|
112
|
+
await unsubscribeCodexThread(this.protocol, threadId);
|
|
113
|
+
}
|
|
114
|
+
async setThreadName(threadId, name) {
|
|
115
|
+
await setCodexThreadName(this.protocol, { threadId, name });
|
|
116
|
+
}
|
|
117
|
+
async startTurn(options) {
|
|
118
|
+
return startCodexTurn(this.protocol, options, { requestTimeoutMs: this.options.requestTimeoutMs });
|
|
119
|
+
}
|
|
120
|
+
async compactThread(options) {
|
|
121
|
+
if (options.cwd) {
|
|
122
|
+
await this.prepareThreadWorkspace(options.cwd);
|
|
123
|
+
}
|
|
124
|
+
return compactCodexThread(this.protocol, options, { requestTimeoutMs: this.options.requestTimeoutMs });
|
|
125
|
+
}
|
|
126
|
+
async steerTurn(options) {
|
|
127
|
+
await steerCodexTurn(this.protocol, options);
|
|
128
|
+
}
|
|
129
|
+
async interruptTurn(options) {
|
|
130
|
+
await interruptCodexTurn(this.protocol, options);
|
|
131
|
+
}
|
|
132
|
+
async readAccountRateLimits() {
|
|
133
|
+
return this.protocol.request("account/rateLimits/read");
|
|
134
|
+
}
|
|
135
|
+
async setThreadGoal(threadId, objective) {
|
|
136
|
+
return setCodexThreadGoal(this.protocol, { threadId, objective }, { requestTimeoutMs: this.options.requestTimeoutMs });
|
|
137
|
+
}
|
|
138
|
+
async getThreadGoal(threadId) {
|
|
139
|
+
return getCodexThreadGoal(this.protocol, threadId, { requestTimeoutMs: this.options.requestTimeoutMs });
|
|
140
|
+
}
|
|
141
|
+
async clearThreadGoal(threadId) {
|
|
142
|
+
await clearCodexThreadGoal(this.protocol, threadId, { requestTimeoutMs: this.options.requestTimeoutMs });
|
|
143
|
+
}
|
|
144
|
+
async runGoal(options) {
|
|
145
|
+
return runCodexThreadGoal(this.protocol, options, { requestTimeoutMs: this.options.requestTimeoutMs });
|
|
146
|
+
}
|
|
147
|
+
async resumeGoal(options) {
|
|
148
|
+
if (options.cwd) {
|
|
149
|
+
await this.prepareThreadWorkspace(options.cwd);
|
|
150
|
+
}
|
|
151
|
+
return resumeCodexThreadGoal(this.protocol, options, { requestTimeoutMs: this.options.requestTimeoutMs });
|
|
152
|
+
}
|
|
153
|
+
async stop(signal = "SIGTERM") {
|
|
154
|
+
const child = this.child;
|
|
155
|
+
this.protocolClient?.close();
|
|
156
|
+
this.protocolClient = undefined;
|
|
157
|
+
this.initializeResponse = undefined;
|
|
158
|
+
if (!child) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const gracefulExit = waitForChildExit(child, this.options.stopTimeoutMs ?? 3_000);
|
|
162
|
+
if (!hasExited(child) && !child.killed) {
|
|
163
|
+
child.kill(signal);
|
|
164
|
+
}
|
|
165
|
+
const stopped = await gracefulExit;
|
|
166
|
+
if (!stopped && !hasExited(child)) {
|
|
167
|
+
child.kill("SIGKILL");
|
|
168
|
+
await waitForChildExit(child, 2_000);
|
|
169
|
+
}
|
|
170
|
+
if (this.child === child) {
|
|
171
|
+
this.child = undefined;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async prepareThreadWorkspace(cwd) {
|
|
175
|
+
if (this.options.profile === GUEST_PROFILE_NAME) {
|
|
176
|
+
await ensureGuestWorkspaceTrust(this.options.codexHome, cwd);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
await ensureProjectTrust(this.options.codexHome, cwd);
|
|
180
|
+
}
|
|
181
|
+
profileName() {
|
|
182
|
+
return this.options.profile;
|
|
183
|
+
}
|
|
184
|
+
async readCodexBinaryVersionBestEffort() {
|
|
185
|
+
try {
|
|
186
|
+
const result = await execa(this.options.binary, ["--version"], {
|
|
187
|
+
env: buildCodexAppServerEnv(this.options.codexHome, this.options.env ?? process.env),
|
|
188
|
+
reject: false,
|
|
189
|
+
timeout: 1000
|
|
190
|
+
});
|
|
191
|
+
const version = result.stdout.trim() || result.stderr.trim();
|
|
192
|
+
return result.exitCode === 0 && version ? version : "不可用";
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return "不可用";
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
export class ProfileCodexAppServerPool {
|
|
200
|
+
options;
|
|
201
|
+
servers = new Map();
|
|
202
|
+
constructor(options) {
|
|
203
|
+
this.options = options;
|
|
204
|
+
const profiles = options.profiles;
|
|
205
|
+
for (const profile of Object.keys(profiles)) {
|
|
206
|
+
this.servers.set(profile, new CodexAppServer({
|
|
207
|
+
profile,
|
|
208
|
+
binary: options.binary,
|
|
209
|
+
codexHome: profiles[profile].codexHome,
|
|
210
|
+
env: options.env,
|
|
211
|
+
requestTimeoutMs: options.requestTimeoutMs,
|
|
212
|
+
clientVersion: options.clientVersion
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async startAll() {
|
|
217
|
+
const entries = await Promise.all(Array.from(this.servers.entries(), async ([profile, server]) => [profile, await server.start()]));
|
|
218
|
+
return Object.fromEntries(entries);
|
|
219
|
+
}
|
|
220
|
+
get(profile) {
|
|
221
|
+
const server = this.servers.get(profile);
|
|
222
|
+
if (!server) {
|
|
223
|
+
throw new Error(`No Codex app-server configured for profile ${profile}`);
|
|
224
|
+
}
|
|
225
|
+
return server;
|
|
226
|
+
}
|
|
227
|
+
listProfiles() {
|
|
228
|
+
return [...this.servers.keys()];
|
|
229
|
+
}
|
|
230
|
+
replace(profile, config) {
|
|
231
|
+
const server = new CodexAppServer({
|
|
232
|
+
profile,
|
|
233
|
+
binary: config.binary ?? this.options.binary,
|
|
234
|
+
codexHome: config.codexHome,
|
|
235
|
+
env: this.options.env,
|
|
236
|
+
requestTimeoutMs: this.options.requestTimeoutMs,
|
|
237
|
+
clientVersion: this.options.clientVersion
|
|
238
|
+
});
|
|
239
|
+
this.servers.set(profile, server);
|
|
240
|
+
return server;
|
|
241
|
+
}
|
|
242
|
+
async remove(profile, signal = "SIGTERM") {
|
|
243
|
+
const server = this.servers.get(profile);
|
|
244
|
+
if (!server) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
this.servers.delete(profile);
|
|
248
|
+
await server.stop(signal);
|
|
249
|
+
}
|
|
250
|
+
async restart(profile) {
|
|
251
|
+
const server = this.get(profile);
|
|
252
|
+
await server.stop();
|
|
253
|
+
return server.start();
|
|
254
|
+
}
|
|
255
|
+
async stopAll(signal = "SIGTERM") {
|
|
256
|
+
await Promise.all(Array.from(this.servers.values(), (server) => server.stop(signal)));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function hasExited(child) {
|
|
260
|
+
return child.exitCode !== null || child.signalCode !== null;
|
|
261
|
+
}
|
|
262
|
+
function waitForChildExit(child, timeoutMs) {
|
|
263
|
+
if (hasExited(child)) {
|
|
264
|
+
return Promise.resolve(true);
|
|
265
|
+
}
|
|
266
|
+
return new Promise((resolve) => {
|
|
267
|
+
const timeout = setTimeout(() => {
|
|
268
|
+
cleanup();
|
|
269
|
+
resolve(false);
|
|
270
|
+
}, timeoutMs);
|
|
271
|
+
timeout.unref?.();
|
|
272
|
+
const onExit = () => {
|
|
273
|
+
cleanup();
|
|
274
|
+
resolve(true);
|
|
275
|
+
};
|
|
276
|
+
const cleanup = () => {
|
|
277
|
+
clearTimeout(timeout);
|
|
278
|
+
child.off("exit", onExit);
|
|
279
|
+
};
|
|
280
|
+
child.once("exit", onExit);
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
export function buildCodexAppServerEnv(codexHome, source = process.env) {
|
|
284
|
+
const env = {};
|
|
285
|
+
copyEnv(source, env, "PATH");
|
|
286
|
+
copyEnv(source, env, "HOME");
|
|
287
|
+
copyEnv(source, env, "USER");
|
|
288
|
+
copyEnv(source, env, "LOGNAME");
|
|
289
|
+
copyEnv(source, env, "SHELL");
|
|
290
|
+
copyEnv(source, env, "TMPDIR");
|
|
291
|
+
copyEnv(source, env, "LANG");
|
|
292
|
+
copyEnv(source, env, "LC_ALL");
|
|
293
|
+
copyEnv(source, env, "LC_CTYPE");
|
|
294
|
+
copyEnv(source, env, "TERM");
|
|
295
|
+
env.PATH = env.PATH ?? defaultPath();
|
|
296
|
+
env.CODEX_HOME = path.resolve(codexHome);
|
|
297
|
+
env.NO_COLOR = source.NO_COLOR ?? "1";
|
|
298
|
+
return env;
|
|
299
|
+
}
|
|
300
|
+
function copyEnv(source, target, key) {
|
|
301
|
+
if (source[key] !== undefined) {
|
|
302
|
+
target[key] = source[key];
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function defaultPath() {
|
|
306
|
+
return ["/opt/homebrew/bin", "/usr/local/bin", "/usr/bin", "/bin", "/usr/sbin", "/sbin"].join(":");
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=appserver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appserver.js","sourceRoot":"","sources":["../../src/codex/appserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAgD,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAA0D,MAAM,eAAe,CAAC;AACpI,OAAO,EAAE,uCAAuC,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAInB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EAIvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,cAAc,EAIf,MAAM,WAAW,CAAC;AAiDnB,MAAM,OAAO,cAAe,SAAQ,YAAY;IAOjB;IANrB,KAAK,CAA6C;IAClD,cAAc,CAAkC;IAChD,kBAAkB,CAAiC;IACnD,YAAY,CAA0C;IACtD,YAAY,CAAqB;IAEzC,YAA6B,OAA8B;QACzD,KAAK,EAAE,CAAC;QADmB,YAAO,GAAP,OAAO,CAAuB;IAE3D,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC;QACjC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAEnE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YACnH,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACjC,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE;YAC/E,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YACtC,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;YACpF,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAEvE,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE;YAClE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAC/C,eAAe,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE,EAAE;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACzB,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;gBAChC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,IAAI,CAAC,kBAAkB,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAEO,2BAA2B,CAAC,QAA6B;QAC/D,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,uCAAuC,CAAC,OAAO,CAAC,CAAC;YAChE,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,UAA8C,EAAE;QAC7E,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACxG,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,GAAW;QAC9C,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,UAAU,CACd,QAAgB,EAChB,GAAW,EACX,UAAoG,EAAE;QAEtG,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,QAAgB,EAAE,KAAgB;QACxD,MAAM,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,QAAgB;QACtC,MAAM,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,IAAY;QAChD,MAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAyB;QACvC,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAqD;QACvE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAoF;QAClG,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAA6C;QAC/D,MAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,SAAiB;QACrD,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAA0B;QACzC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAyB,SAAS;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC;QAClF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,GAAW;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;YAChD,MAAM,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,gCAAgC;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;gBAC7D,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;gBACpF,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7D,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,yBAAyB;IAGP;IAFZ,OAAO,GAAG,IAAI,GAAG,EAA+B,CAAC;IAElE,YAA6B,OAAyC;QAAzC,YAAO,GAAP,OAAO,CAAkC;QACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,OAAO,EACP,IAAI,cAAc,CAAC;gBACjB,OAAO;gBACP,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS;gBACtC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAU,CAAC,CAC1G,CAAC;QACF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,OAAoB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8CAA8C,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,OAAoB,EAAE,MAA8C;QAC1E,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;YAChC,OAAO;YACP,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAC5C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;YACrB,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAC/C,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAoB,EAAE,SAAyB,SAAS;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAyB,SAAS;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;CACF;AAED,SAAS,SAAS,CAAC,KAAqC;IACtD,OAAO,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAqC,EAAE,SAAiB;IAChF,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAElB,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,SAAiB,EAAE,SAA4B,OAAO,CAAC,GAAG;IAC/F,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACjC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAE7B,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IACrC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,MAAyB,EAAE,MAAyB,EAAE,GAAW;IAChF,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { CodexAgentMessage, CodexRequestUserInputRequest, CodexThreadTokenUsageUpdate, CodexTurnResult } from "../types.js";
|
|
2
|
+
import type { CodexDynamicToolCallResponse, CodexRequestUserInputResponder, CodexSetThreadNameToolRequest } from "./turn.js";
|
|
3
|
+
import type { CodexProtocolClient } from "./protocol.js";
|
|
4
|
+
import { type ThreadRuntimeOptions } from "./thread.js";
|
|
5
|
+
export type ThreadGoalStatus = "active" | "paused" | "blocked" | "usageLimited" | "budgetLimited" | "complete";
|
|
6
|
+
export interface ThreadGoal {
|
|
7
|
+
threadId: string;
|
|
8
|
+
objective: string;
|
|
9
|
+
status: ThreadGoalStatus;
|
|
10
|
+
tokenBudget: number | null;
|
|
11
|
+
tokensUsed: number;
|
|
12
|
+
timeUsedSeconds: number;
|
|
13
|
+
createdAt: number;
|
|
14
|
+
updatedAt: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ThreadGoalSetParams {
|
|
17
|
+
threadId: string;
|
|
18
|
+
objective?: string | null;
|
|
19
|
+
status?: ThreadGoalStatus | null;
|
|
20
|
+
tokenBudget?: number | null;
|
|
21
|
+
}
|
|
22
|
+
export interface ThreadGoalSetResponse {
|
|
23
|
+
goal: ThreadGoal;
|
|
24
|
+
}
|
|
25
|
+
export interface ThreadGoalGetParams {
|
|
26
|
+
threadId: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ThreadGoalGetResponse {
|
|
29
|
+
goal: ThreadGoal | null;
|
|
30
|
+
}
|
|
31
|
+
export interface ThreadGoalClearParams {
|
|
32
|
+
threadId: string;
|
|
33
|
+
}
|
|
34
|
+
export interface GoalRunOptions {
|
|
35
|
+
threadId: string;
|
|
36
|
+
objective?: string;
|
|
37
|
+
onTurnStarted?: (turnId: string) => Promise<void> | void;
|
|
38
|
+
onAgentMessage?: (message: CodexAgentMessage) => Promise<void> | void;
|
|
39
|
+
onTokenUsage?: (usage: CodexThreadTokenUsageUpdate) => Promise<void> | void;
|
|
40
|
+
onGoalUpdated?: (goal: ThreadGoal, turnId: string | null) => Promise<void> | void;
|
|
41
|
+
onGoalCleared?: () => Promise<void> | void;
|
|
42
|
+
onRequestUserInput?: (request: CodexRequestUserInputRequest, responder: CodexRequestUserInputResponder) => Promise<void> | void;
|
|
43
|
+
onSetThreadName?: (request: CodexSetThreadNameToolRequest) => Promise<CodexDynamicToolCallResponse> | CodexDynamicToolCallResponse;
|
|
44
|
+
}
|
|
45
|
+
export interface GoalResumeOptions extends GoalRunOptions, ThreadRuntimeOptions {
|
|
46
|
+
objective?: undefined;
|
|
47
|
+
}
|
|
48
|
+
export interface GoalRequestOptions {
|
|
49
|
+
requestTimeoutMs?: number;
|
|
50
|
+
completionTimeoutMs?: number;
|
|
51
|
+
}
|
|
52
|
+
export declare function buildThreadGoalSetParams(options: {
|
|
53
|
+
threadId: string;
|
|
54
|
+
objective: string;
|
|
55
|
+
}): ThreadGoalSetParams;
|
|
56
|
+
export declare function setCodexThreadGoal(protocol: CodexProtocolClient, options: {
|
|
57
|
+
threadId: string;
|
|
58
|
+
objective: string;
|
|
59
|
+
}, requestOptions?: GoalRequestOptions): Promise<ThreadGoal>;
|
|
60
|
+
export declare function getCodexThreadGoal(protocol: CodexProtocolClient, threadId: string, requestOptions?: GoalRequestOptions): Promise<ThreadGoal | null>;
|
|
61
|
+
export declare function clearCodexThreadGoal(protocol: CodexProtocolClient, threadId: string, requestOptions?: GoalRequestOptions): Promise<void>;
|
|
62
|
+
export declare function runCodexThreadGoal(protocol: CodexProtocolClient, options: GoalRunOptions, requestOptions?: GoalRequestOptions): Promise<CodexTurnResult>;
|
|
63
|
+
export declare function resumeCodexThreadGoal(protocol: CodexProtocolClient, options: GoalResumeOptions, requestOptions?: GoalRequestOptions): Promise<CodexTurnResult>;
|
|
64
|
+
export declare function isThreadGoal(value: unknown): value is ThreadGoal;
|