@jungjaehoon/mama-os 0.8.3 → 0.9.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/CHANGELOG.md +10 -0
- package/dist/agent/agent-loop.d.ts +1 -8
- package/dist/agent/agent-loop.d.ts.map +1 -1
- package/dist/agent/agent-loop.js +44 -159
- package/dist/agent/agent-loop.js.map +1 -1
- package/dist/agent/claude-cli-wrapper.d.ts +6 -0
- package/dist/agent/claude-cli-wrapper.d.ts.map +1 -1
- package/dist/agent/claude-cli-wrapper.js +6 -0
- package/dist/agent/claude-cli-wrapper.js.map +1 -1
- package/dist/agent/codex-mcp-process.d.ts +85 -0
- package/dist/agent/codex-mcp-process.d.ts.map +1 -0
- package/dist/agent/codex-mcp-process.js +357 -0
- package/dist/agent/codex-mcp-process.js.map +1 -0
- package/dist/agent/session-pool.d.ts +17 -2
- package/dist/agent/session-pool.d.ts.map +1 -1
- package/dist/agent/session-pool.js +51 -26
- package/dist/agent/session-pool.js.map +1 -1
- package/dist/agent/types.d.ts +9 -24
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/graph-api.d.ts.map +1 -1
- package/dist/api/graph-api.js +133 -45
- package/dist/api/graph-api.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +14 -25
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +3 -10
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +143 -54
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +2 -7
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/config/config-manager.d.ts.map +1 -1
- package/dist/cli/config/config-manager.js +9 -17
- package/dist/cli/config/config-manager.js.map +1 -1
- package/dist/cli/config/types.d.ts +19 -25
- package/dist/cli/config/types.d.ts.map +1 -1
- package/dist/cli/config/types.js.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/gateways/context-injector.d.ts.map +1 -1
- package/dist/gateways/context-injector.js +6 -3
- package/dist/gateways/context-injector.js.map +1 -1
- package/dist/gateways/discord.d.ts +4 -0
- package/dist/gateways/discord.d.ts.map +1 -1
- package/dist/gateways/discord.js +39 -16
- package/dist/gateways/discord.js.map +1 -1
- package/dist/gateways/message-router.d.ts +6 -1
- package/dist/gateways/message-router.d.ts.map +1 -1
- package/dist/gateways/message-router.js +92 -7
- package/dist/gateways/message-router.js.map +1 -1
- package/dist/multi-agent/agent-process-manager.d.ts.map +1 -1
- package/dist/multi-agent/agent-process-manager.js +36 -9
- package/dist/multi-agent/agent-process-manager.js.map +1 -1
- package/dist/multi-agent/runtime-process.d.ts +4 -4
- package/dist/multi-agent/runtime-process.d.ts.map +1 -1
- package/dist/multi-agent/runtime-process.js +9 -20
- package/dist/multi-agent/runtime-process.js.map +1 -1
- package/dist/multi-agent/types.d.ts +13 -8
- package/dist/multi-agent/types.d.ts.map +1 -1
- package/dist/multi-agent/types.js.map +1 -1
- package/dist/setup/setup-prompt.d.ts +1 -1
- package/dist/setup/setup-prompt.d.ts.map +1 -1
- package/dist/setup/setup-prompt.js +19 -0
- package/dist/setup/setup-prompt.js.map +1 -1
- package/dist/setup/setup-server.d.ts.map +1 -1
- package/dist/setup/setup-server.js +39 -16
- package/dist/setup/setup-server.js.map +1 -1
- package/dist/skills/skill-registry.d.ts.map +1 -1
- package/dist/skills/skill-registry.js +5 -2
- package/dist/skills/skill-registry.js.map +1 -1
- package/package.json +5 -3
- package/public/setup.html +12 -1
- package/public/viewer/js/modules/chat.js +1760 -1976
- package/public/viewer/js/modules/dashboard.js +613 -695
- package/public/viewer/js/modules/graph.js +857 -970
- package/public/viewer/js/modules/memory.js +357 -312
- package/public/viewer/js/modules/settings.js +1009 -1026
- package/public/viewer/js/modules/skills.js +336 -355
- package/public/viewer/js/utils/api.js +255 -255
- package/public/viewer/js/utils/debug-logger.js +20 -26
- package/public/viewer/js/utils/dom.js +73 -60
- package/public/viewer/js/utils/format.js +182 -228
- package/public/viewer/js/utils/markdown.js +40 -0
- package/public/viewer/src/modules/chat.ts +2258 -0
- package/public/viewer/src/modules/dashboard.ts +1052 -0
- package/public/viewer/src/modules/graph.ts +1080 -0
- package/public/viewer/src/modules/memory.ts +453 -0
- package/public/viewer/src/modules/settings.ts +1398 -0
- package/public/viewer/src/modules/skills.ts +457 -0
- package/public/viewer/src/types/global.d.ts +168 -0
- package/public/viewer/src/utils/api.ts +650 -0
- package/public/viewer/src/utils/debug-logger.ts +36 -0
- package/public/viewer/src/utils/dom.ts +138 -0
- package/public/viewer/src/utils/format.ts +331 -0
- package/public/viewer/src/utils/markdown.ts +46 -0
- package/public/viewer/tsconfig.viewer.json +18 -0
- package/public/viewer/viewer.html +214 -311
- package/dist/agent/codex-cli-wrapper.d.ts +0 -85
- package/dist/agent/codex-cli-wrapper.d.ts.map +0 -1
- package/dist/agent/codex-cli-wrapper.js +0 -295
- package/dist/agent/codex-cli-wrapper.js.map +0 -1
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Codex CLI Subprocess Wrapper
|
|
3
|
-
*
|
|
4
|
-
* Uses Codex CLI as a backend runner (CLI mode).
|
|
5
|
-
* - Executes `codex exec --json` for new sessions
|
|
6
|
-
* - Executes `codex exec resume <session_id> --json` for resumed sessions
|
|
7
|
-
* - Captures final message via --output-last-message for reliable text extraction
|
|
8
|
-
*
|
|
9
|
-
* Notes:
|
|
10
|
-
* - Codex CLI does not provide token-level streaming in exec mode.
|
|
11
|
-
* - Tool use blocks are not supported in this wrapper.
|
|
12
|
-
*/
|
|
13
|
-
export interface CodexCLIWrapperOptions {
|
|
14
|
-
model?: string;
|
|
15
|
-
sessionId?: string;
|
|
16
|
-
systemPrompt?: string;
|
|
17
|
-
/** Codex home directory (config/sessions/skills) */
|
|
18
|
-
codexHome?: string;
|
|
19
|
-
/** Working directory for Codex process */
|
|
20
|
-
cwd?: string;
|
|
21
|
-
/** Sandbox mode for Codex CLI */
|
|
22
|
-
sandbox?: 'read-only' | 'workspace-write' | 'danger-full-access';
|
|
23
|
-
/** Codex profile from config.toml */
|
|
24
|
-
profile?: string;
|
|
25
|
-
/** Run Codex in ephemeral mode (no session persistence) */
|
|
26
|
-
ephemeral?: boolean;
|
|
27
|
-
/** Additional writable directories */
|
|
28
|
-
addDirs?: string[];
|
|
29
|
-
/** Raw -c key=value config overrides */
|
|
30
|
-
configOverrides?: string[];
|
|
31
|
-
/** Skip Git repo check in Codex CLI */
|
|
32
|
-
skipGitRepoCheck?: boolean;
|
|
33
|
-
/** Timeout for each request in ms (default: 120000) */
|
|
34
|
-
timeoutMs?: number;
|
|
35
|
-
}
|
|
36
|
-
export interface PromptCallbacks {
|
|
37
|
-
onDelta?: (text: string) => void;
|
|
38
|
-
onToolUse?: (name: string, input: Record<string, unknown>) => void;
|
|
39
|
-
onFinal?: (response: {
|
|
40
|
-
response: string;
|
|
41
|
-
}) => void;
|
|
42
|
-
onError?: (error: Error) => void;
|
|
43
|
-
}
|
|
44
|
-
export interface PromptResult {
|
|
45
|
-
response: string;
|
|
46
|
-
usage: {
|
|
47
|
-
input_tokens: number;
|
|
48
|
-
output_tokens: number;
|
|
49
|
-
cache_creation_input_tokens?: number;
|
|
50
|
-
cache_read_input_tokens?: number;
|
|
51
|
-
};
|
|
52
|
-
session_id?: string;
|
|
53
|
-
cost_usd?: number;
|
|
54
|
-
}
|
|
55
|
-
export declare class CodexCLIWrapper {
|
|
56
|
-
private sessionId;
|
|
57
|
-
private options;
|
|
58
|
-
constructor(options?: CodexCLIWrapperOptions);
|
|
59
|
-
/**
|
|
60
|
-
* Send a prompt to Codex CLI
|
|
61
|
-
*/
|
|
62
|
-
prompt(content: string, callbacks?: PromptCallbacks, options?: {
|
|
63
|
-
model?: string;
|
|
64
|
-
resumeSession?: boolean;
|
|
65
|
-
}): Promise<PromptResult>;
|
|
66
|
-
/**
|
|
67
|
-
* Get current session ID
|
|
68
|
-
*/
|
|
69
|
-
getSessionId(): string;
|
|
70
|
-
/**
|
|
71
|
-
* Set session ID (for channel-specific conversations)
|
|
72
|
-
*/
|
|
73
|
-
setSessionId(sessionId: string): void;
|
|
74
|
-
/**
|
|
75
|
-
* Set system prompt (prefixed to first prompt of a new session)
|
|
76
|
-
*/
|
|
77
|
-
setSystemPrompt(prompt: string): void;
|
|
78
|
-
private buildPrompt;
|
|
79
|
-
private buildArgs;
|
|
80
|
-
private execute;
|
|
81
|
-
private prepareCodexHome;
|
|
82
|
-
private readLastMessage;
|
|
83
|
-
private parseJsonl;
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=codex-cli-wrapper.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-cli-wrapper.d.ts","sourceRoot":"","sources":["../../src/agent/codex-cli-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;IACjE,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,2BAA2B,CAAC,EAAE,MAAM,CAAC;QACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,GAAE,sBAA2B;IAKhD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,eAAe,EAC3B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GACpD,OAAO,CAAC,YAAY,CAAC;IAgCxB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,SAAS;IAsFjB,OAAO,CAAC,OAAO;IAiDf,OAAO,CAAC,gBAAgB;IAoCxB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,UAAU;CAsCnB"}
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Codex CLI Subprocess Wrapper
|
|
4
|
-
*
|
|
5
|
-
* Uses Codex CLI as a backend runner (CLI mode).
|
|
6
|
-
* - Executes `codex exec --json` for new sessions
|
|
7
|
-
* - Executes `codex exec resume <session_id> --json` for resumed sessions
|
|
8
|
-
* - Captures final message via --output-last-message for reliable text extraction
|
|
9
|
-
*
|
|
10
|
-
* Notes:
|
|
11
|
-
* - Codex CLI does not provide token-level streaming in exec mode.
|
|
12
|
-
* - Tool use blocks are not supported in this wrapper.
|
|
13
|
-
*/
|
|
14
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
-
};
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.CodexCLIWrapper = void 0;
|
|
19
|
-
const child_process_1 = require("child_process");
|
|
20
|
-
const crypto_1 = require("crypto");
|
|
21
|
-
const fs_1 = require("fs");
|
|
22
|
-
const os_1 = __importDefault(require("os"));
|
|
23
|
-
const path_1 = require("path");
|
|
24
|
-
class CodexCLIWrapper {
|
|
25
|
-
sessionId;
|
|
26
|
-
options;
|
|
27
|
-
constructor(options = {}) {
|
|
28
|
-
this.options = options;
|
|
29
|
-
this.sessionId = options.sessionId || (0, crypto_1.randomUUID)();
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Send a prompt to Codex CLI
|
|
33
|
-
*/
|
|
34
|
-
async prompt(content, callbacks, options) {
|
|
35
|
-
const promptText = this.buildPrompt(content);
|
|
36
|
-
const useOutputFile = !options?.resumeSession;
|
|
37
|
-
const tmpFile = useOutputFile ? (0, path_1.join)(os_1.default.tmpdir(), `codex_last_${(0, crypto_1.randomUUID)()}.txt`) : '';
|
|
38
|
-
const args = this.buildArgs(options, tmpFile);
|
|
39
|
-
const stdout = await this.execute(args, promptText);
|
|
40
|
-
const parsed = this.parseJsonl(stdout);
|
|
41
|
-
const response = useOutputFile
|
|
42
|
-
? (this.readLastMessage(tmpFile) ?? parsed.lastMessage ?? '')
|
|
43
|
-
: (parsed.lastMessage ?? '');
|
|
44
|
-
if (parsed.threadId) {
|
|
45
|
-
this.sessionId = parsed.threadId;
|
|
46
|
-
}
|
|
47
|
-
callbacks?.onFinal?.({ response });
|
|
48
|
-
return {
|
|
49
|
-
response,
|
|
50
|
-
usage: {
|
|
51
|
-
input_tokens: parsed.usage?.input_tokens ?? 0,
|
|
52
|
-
output_tokens: parsed.usage?.output_tokens ?? 0,
|
|
53
|
-
cache_creation_input_tokens: parsed.usage?.cache_creation_input_tokens,
|
|
54
|
-
cache_read_input_tokens: parsed.usage?.cache_read_input_tokens ?? parsed.usage?.cached_input_tokens,
|
|
55
|
-
},
|
|
56
|
-
session_id: parsed.threadId,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Get current session ID
|
|
61
|
-
*/
|
|
62
|
-
getSessionId() {
|
|
63
|
-
return this.sessionId;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Set session ID (for channel-specific conversations)
|
|
67
|
-
*/
|
|
68
|
-
setSessionId(sessionId) {
|
|
69
|
-
this.sessionId = sessionId;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Set system prompt (prefixed to first prompt of a new session)
|
|
73
|
-
*/
|
|
74
|
-
setSystemPrompt(prompt) {
|
|
75
|
-
this.options.systemPrompt = prompt;
|
|
76
|
-
}
|
|
77
|
-
buildPrompt(content) {
|
|
78
|
-
if (this.options.systemPrompt) {
|
|
79
|
-
return `${this.options.systemPrompt}\n\n${content}`;
|
|
80
|
-
}
|
|
81
|
-
return content;
|
|
82
|
-
}
|
|
83
|
-
buildArgs(options, outputFile) {
|
|
84
|
-
const args = [];
|
|
85
|
-
const model = options?.model ?? this.options.model;
|
|
86
|
-
const skipGitRepoCheck = this.options.skipGitRepoCheck ?? true;
|
|
87
|
-
const sandbox = this.options.sandbox ?? 'read-only';
|
|
88
|
-
const profile = this.options.profile;
|
|
89
|
-
const ephemeral = this.options.ephemeral ?? false;
|
|
90
|
-
const addDirs = this.options.addDirs ?? [];
|
|
91
|
-
const configOverrides = this.options.configOverrides ?? [];
|
|
92
|
-
const cwd = this.options.cwd;
|
|
93
|
-
if (options?.resumeSession) {
|
|
94
|
-
args.push('exec', 'resume');
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
args.push('exec');
|
|
98
|
-
}
|
|
99
|
-
if (options?.resumeSession) {
|
|
100
|
-
// Codex resume supports a limited flag set
|
|
101
|
-
args.push('--json');
|
|
102
|
-
if (skipGitRepoCheck) {
|
|
103
|
-
args.push('--skip-git-repo-check');
|
|
104
|
-
}
|
|
105
|
-
if (sandbox === 'danger-full-access') {
|
|
106
|
-
args.push('--dangerously-bypass-approvals-and-sandbox');
|
|
107
|
-
}
|
|
108
|
-
// For `codex exec resume`, keep options before positional args so they are
|
|
109
|
-
// never parsed as PROMPT.
|
|
110
|
-
if (this.sessionId) {
|
|
111
|
-
args.push(this.sessionId);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
args.push('--last');
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
args.push('--json', '--output-last-message', outputFile, '--color', 'never');
|
|
119
|
-
// Apply sandbox mode based on configuration
|
|
120
|
-
if (sandbox === 'danger-full-access') {
|
|
121
|
-
args.push('--dangerously-bypass-approvals-and-sandbox');
|
|
122
|
-
}
|
|
123
|
-
else if (sandbox === 'workspace-write') {
|
|
124
|
-
args.push('--sandbox', 'workspace-write');
|
|
125
|
-
}
|
|
126
|
-
else if (sandbox === 'read-only') {
|
|
127
|
-
args.push('--sandbox', 'read-only');
|
|
128
|
-
}
|
|
129
|
-
if (skipGitRepoCheck) {
|
|
130
|
-
args.push('--skip-git-repo-check');
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// `codex exec resume` supports a narrower option set than `codex exec`.
|
|
134
|
-
if (!options?.resumeSession && profile) {
|
|
135
|
-
args.push('--profile', profile);
|
|
136
|
-
}
|
|
137
|
-
if (!options?.resumeSession && cwd) {
|
|
138
|
-
args.push('--cd', cwd);
|
|
139
|
-
}
|
|
140
|
-
if (ephemeral && !options?.resumeSession) {
|
|
141
|
-
args.push('--ephemeral');
|
|
142
|
-
}
|
|
143
|
-
if (!options?.resumeSession) {
|
|
144
|
-
for (const dir of addDirs) {
|
|
145
|
-
if (dir) {
|
|
146
|
-
args.push('--add-dir', dir);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// configOverrides and model are not supported in resume mode
|
|
150
|
-
for (const override of configOverrides) {
|
|
151
|
-
if (override) {
|
|
152
|
-
args.push('-c', override);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
if (model) {
|
|
156
|
-
args.push('--model', model);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// Read prompt from stdin to avoid arg length issues
|
|
160
|
-
args.push('-');
|
|
161
|
-
return args;
|
|
162
|
-
}
|
|
163
|
-
execute(args, promptText) {
|
|
164
|
-
return new Promise((resolve, reject) => {
|
|
165
|
-
this.prepareCodexHome();
|
|
166
|
-
const { CODEX_THREAD_ID: _ignoredThreadId, ...baseEnv } = process.env;
|
|
167
|
-
const spawnEnv = {
|
|
168
|
-
...baseEnv,
|
|
169
|
-
...(this.options.codexHome ? { CODEX_HOME: this.options.codexHome } : {}),
|
|
170
|
-
};
|
|
171
|
-
const child = (0, child_process_1.spawn)('codex', args, {
|
|
172
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
173
|
-
env: spawnEnv,
|
|
174
|
-
cwd: this.options.cwd ?? process.cwd(),
|
|
175
|
-
});
|
|
176
|
-
const stdoutChunks = [];
|
|
177
|
-
const stderrChunks = [];
|
|
178
|
-
const timeoutMs = this.options.timeoutMs ?? 120000;
|
|
179
|
-
const timeout = setTimeout(() => {
|
|
180
|
-
try {
|
|
181
|
-
child.kill('SIGKILL');
|
|
182
|
-
}
|
|
183
|
-
catch {
|
|
184
|
-
// ignore
|
|
185
|
-
}
|
|
186
|
-
reject(new Error(`Codex CLI timeout after ${timeoutMs}ms`));
|
|
187
|
-
}, timeoutMs);
|
|
188
|
-
child.stdout.on('data', (chunk) => stdoutChunks.push(Buffer.from(chunk)));
|
|
189
|
-
child.stderr.on('data', (chunk) => stderrChunks.push(Buffer.from(chunk)));
|
|
190
|
-
child.on('error', (error) => {
|
|
191
|
-
clearTimeout(timeout);
|
|
192
|
-
reject(new Error(`Failed to execute Codex CLI: ${error.message}`));
|
|
193
|
-
});
|
|
194
|
-
child.on('close', (code) => {
|
|
195
|
-
clearTimeout(timeout);
|
|
196
|
-
const stdout = Buffer.concat(stdoutChunks).toString('utf-8');
|
|
197
|
-
const stderr = Buffer.concat(stderrChunks).toString('utf-8').trim();
|
|
198
|
-
if (code !== 0) {
|
|
199
|
-
reject(new Error(stderr || `Codex CLI exited with code ${code}`));
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
resolve(stdout);
|
|
203
|
-
});
|
|
204
|
-
child.stdin.write(promptText);
|
|
205
|
-
child.stdin.end();
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
prepareCodexHome() {
|
|
209
|
-
const codexHome = this.options.codexHome;
|
|
210
|
-
if (!codexHome) {
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
try {
|
|
214
|
-
(0, fs_1.mkdirSync)(codexHome, { recursive: true });
|
|
215
|
-
const legacyHome = (0, path_1.join)(os_1.default.homedir(), '.codex');
|
|
216
|
-
const filesToMigrate = ['auth.json', 'config.toml', 'version.json'];
|
|
217
|
-
for (const relPath of filesToMigrate) {
|
|
218
|
-
const src = (0, path_1.join)(legacyHome, relPath);
|
|
219
|
-
const dest = (0, path_1.join)(codexHome, relPath);
|
|
220
|
-
if (!(0, fs_1.existsSync)(src)) {
|
|
221
|
-
continue;
|
|
222
|
-
}
|
|
223
|
-
let shouldCopy = !(0, fs_1.existsSync)(dest);
|
|
224
|
-
if (!shouldCopy) {
|
|
225
|
-
try {
|
|
226
|
-
shouldCopy = (0, fs_1.statSync)(src).mtimeMs > (0, fs_1.statSync)(dest).mtimeMs;
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
shouldCopy = true;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
if (shouldCopy) {
|
|
233
|
-
(0, fs_1.mkdirSync)((0, path_1.dirname)(dest), { recursive: true });
|
|
234
|
-
(0, fs_1.copyFileSync)(src, dest);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
catch {
|
|
239
|
-
// Non-fatal: Codex may still run with existing defaults.
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
readLastMessage(outputFile) {
|
|
243
|
-
try {
|
|
244
|
-
if (!(0, fs_1.existsSync)(outputFile)) {
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
const text = (0, fs_1.readFileSync)(outputFile, 'utf-8').trim();
|
|
248
|
-
if (!text) {
|
|
249
|
-
return null;
|
|
250
|
-
}
|
|
251
|
-
return text;
|
|
252
|
-
}
|
|
253
|
-
catch {
|
|
254
|
-
return null;
|
|
255
|
-
}
|
|
256
|
-
finally {
|
|
257
|
-
try {
|
|
258
|
-
if ((0, fs_1.existsSync)(outputFile))
|
|
259
|
-
(0, fs_1.unlinkSync)(outputFile);
|
|
260
|
-
}
|
|
261
|
-
catch {
|
|
262
|
-
// ignore cleanup errors
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
parseJsonl(stdout) {
|
|
267
|
-
const lines = stdout
|
|
268
|
-
.split('\n')
|
|
269
|
-
.map((line) => line.trim())
|
|
270
|
-
.filter((line) => line.length > 0);
|
|
271
|
-
let threadId;
|
|
272
|
-
let usage;
|
|
273
|
-
let lastMessage;
|
|
274
|
-
for (const line of lines) {
|
|
275
|
-
try {
|
|
276
|
-
const evt = JSON.parse(line);
|
|
277
|
-
if (evt.type === 'thread.started' && evt.thread_id) {
|
|
278
|
-
threadId = evt.thread_id;
|
|
279
|
-
}
|
|
280
|
-
if (evt.type === 'turn.completed' && evt.usage) {
|
|
281
|
-
usage = evt.usage;
|
|
282
|
-
}
|
|
283
|
-
if (evt.type === 'item.completed' && evt.item?.type === 'agent_message') {
|
|
284
|
-
lastMessage = evt.item.text;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
catch {
|
|
288
|
-
// Ignore malformed lines
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
return { threadId, usage, lastMessage };
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
exports.CodexCLIWrapper = CodexCLIWrapper;
|
|
295
|
-
//# sourceMappingURL=codex-cli-wrapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-cli-wrapper.js","sourceRoot":"","sources":["../../src/agent/codex-cli-wrapper.ts"],"names":[],"mappings":"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"}
|