@antelopejs/dms-ai 0.0.6 → 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.
Files changed (214) hide show
  1. package/README.md +52 -2
  2. package/dist/routes/settings.d.ts +7 -0
  3. package/dist/routes/settings.js +2 -0
  4. package/dist/routes/settings.js.map +1 -1
  5. package/frontend-vue/app/components/SettingsView.vue +85 -3
  6. package/package.json +10 -1
  7. package/sidecar/chatbox/dist/assets/index-CEZ1NLp9.js +52 -0
  8. package/sidecar/chatbox/dist/assets/{index-pP_KOHIn.css → index-D_51Vqqk.css} +1 -1
  9. package/sidecar/chatbox/dist/index.html +2 -2
  10. package/sidecar/dist/agent/attachment-files.d.ts +5 -0
  11. package/sidecar/dist/agent/attachment-files.js +29 -0
  12. package/sidecar/dist/agent/attachment-files.js.map +1 -0
  13. package/sidecar/dist/agent/provider.d.ts +40 -0
  14. package/sidecar/dist/agent/provider.js +2 -0
  15. package/sidecar/dist/agent/provider.js.map +1 -0
  16. package/sidecar/dist/agent/{claude-runner.d.ts → runner.d.ts} +8 -11
  17. package/sidecar/dist/agent/runner.js +71 -0
  18. package/sidecar/dist/agent/runner.js.map +1 -0
  19. package/sidecar/dist/agent/session.d.ts +22 -0
  20. package/sidecar/dist/agent/{claude-session.js → session.js} +39 -47
  21. package/sidecar/dist/agent/session.js.map +1 -0
  22. package/sidecar/dist/agent/switching-runner.d.ts +6 -0
  23. package/sidecar/dist/agent/switching-runner.js +58 -0
  24. package/sidecar/dist/agent/switching-runner.js.map +1 -0
  25. package/sidecar/dist/constants/agent.d.ts +2 -12
  26. package/sidecar/dist/constants/agent.js +2 -11
  27. package/sidecar/dist/constants/agent.js.map +1 -1
  28. package/sidecar/dist/constants/claude.d.ts +10 -0
  29. package/sidecar/dist/constants/claude.js +10 -0
  30. package/sidecar/dist/constants/claude.js.map +1 -0
  31. package/sidecar/dist/constants/codex.d.ts +85 -0
  32. package/sidecar/dist/constants/codex.js +110 -0
  33. package/sidecar/dist/constants/codex.js.map +1 -0
  34. package/sidecar/dist/constants/http.d.ts +1 -0
  35. package/sidecar/dist/constants/http.js +1 -0
  36. package/sidecar/dist/constants/http.js.map +1 -1
  37. package/sidecar/dist/constants/mcp.d.ts +6 -0
  38. package/sidecar/dist/constants/mcp.js +11 -0
  39. package/sidecar/dist/constants/mcp.js.map +1 -1
  40. package/sidecar/dist/constants/paths.d.ts +5 -0
  41. package/sidecar/dist/constants/paths.js +5 -0
  42. package/sidecar/dist/constants/paths.js.map +1 -1
  43. package/sidecar/dist/constants/providers.d.ts +16 -0
  44. package/sidecar/dist/constants/providers.js +17 -0
  45. package/sidecar/dist/constants/providers.js.map +1 -0
  46. package/sidecar/dist/constants/settings.d.ts +1 -4
  47. package/sidecar/dist/constants/settings.js +2 -12
  48. package/sidecar/dist/constants/settings.js.map +1 -1
  49. package/sidecar/dist/constants/skills.d.ts +1 -0
  50. package/sidecar/dist/constants/skills.js +2 -0
  51. package/sidecar/dist/constants/skills.js.map +1 -0
  52. package/sidecar/dist/constants/timing.d.ts +1 -0
  53. package/sidecar/dist/constants/timing.js +1 -0
  54. package/sidecar/dist/constants/timing.js.map +1 -1
  55. package/sidecar/dist/constants/tool-lexicon.d.ts +7 -0
  56. package/sidecar/dist/constants/tool-lexicon.js +8 -0
  57. package/sidecar/dist/constants/tool-lexicon.js.map +1 -0
  58. package/sidecar/dist/index.js +28 -3
  59. package/sidecar/dist/index.js.map +1 -1
  60. package/sidecar/dist/mcp/define-tool.d.ts +23 -0
  61. package/sidecar/dist/mcp/define-tool.js +4 -0
  62. package/sidecar/dist/mcp/define-tool.js.map +1 -0
  63. package/sidecar/dist/mcp/http-binding.d.ts +9 -0
  64. package/sidecar/dist/mcp/http-binding.js +123 -0
  65. package/sidecar/dist/mcp/http-binding.js.map +1 -0
  66. package/sidecar/dist/mcp/sdk-binding.js +14 -0
  67. package/sidecar/dist/mcp/sdk-binding.js.map +1 -0
  68. package/sidecar/dist/mcp/tool-definitions.d.ts +3 -0
  69. package/sidecar/dist/mcp/{server.js → tool-definitions.js} +2 -11
  70. package/sidecar/dist/mcp/tool-definitions.js.map +1 -0
  71. package/sidecar/dist/mcp/tools/ask-user.d.ts +1 -1
  72. package/sidecar/dist/mcp/tools/ask-user.js +2 -2
  73. package/sidecar/dist/mcp/tools/ask-user.js.map +1 -1
  74. package/sidecar/dist/mcp/tools/builder.d.ts +19 -19
  75. package/sidecar/dist/mcp/tools/builder.js +26 -26
  76. package/sidecar/dist/mcp/tools/builder.js.map +1 -1
  77. package/sidecar/dist/mcp/tools/find-pages-using.d.ts +1 -1
  78. package/sidecar/dist/mcp/tools/find-pages-using.js +2 -2
  79. package/sidecar/dist/mcp/tools/find-pages-using.js.map +1 -1
  80. package/sidecar/dist/mcp/tools/get-current-page.d.ts +1 -1
  81. package/sidecar/dist/mcp/tools/get-current-page.js +2 -2
  82. package/sidecar/dist/mcp/tools/get-current-page.js.map +1 -1
  83. package/sidecar/dist/mcp/tools/list-pages.d.ts +1 -1
  84. package/sidecar/dist/mcp/tools/list-pages.js +2 -2
  85. package/sidecar/dist/mcp/tools/list-pages.js.map +1 -1
  86. package/sidecar/dist/mcp/tools/navigate-to-page.d.ts +1 -1
  87. package/sidecar/dist/mcp/tools/navigate-to-page.js +2 -2
  88. package/sidecar/dist/mcp/tools/navigate-to-page.js.map +1 -1
  89. package/sidecar/dist/mcp/tools/query-logs.d.ts +1 -1
  90. package/sidecar/dist/mcp/tools/query-logs.js +2 -2
  91. package/sidecar/dist/mcp/tools/query-logs.js.map +1 -1
  92. package/sidecar/dist/mcp/tools/typecheck.d.ts +1 -1
  93. package/sidecar/dist/mcp/tools/typecheck.js +2 -2
  94. package/sidecar/dist/mcp/tools/typecheck.js.map +1 -1
  95. package/sidecar/dist/mcp/types.d.ts +6 -2
  96. package/sidecar/dist/protocol/events.d.ts +37 -0
  97. package/sidecar/dist/protocol/events.js +8 -0
  98. package/sidecar/dist/protocol/events.js.map +1 -1
  99. package/sidecar/dist/protocol/messages.d.ts +8 -0
  100. package/sidecar/dist/protocol/messages.js +2 -0
  101. package/sidecar/dist/protocol/messages.js.map +1 -1
  102. package/sidecar/dist/providers/claude/adapter.d.ts +5 -0
  103. package/sidecar/dist/{agent/sdk-adapter.js → providers/claude/adapter.js} +20 -1
  104. package/sidecar/dist/providers/claude/adapter.js.map +1 -0
  105. package/sidecar/dist/{agent → providers/claude}/attachments.d.ts +1 -1
  106. package/sidecar/dist/{agent → providers/claude}/attachments.js +3 -27
  107. package/sidecar/dist/providers/claude/attachments.js.map +1 -0
  108. package/sidecar/dist/providers/claude/config.d.ts +4 -0
  109. package/sidecar/dist/providers/claude/config.js +13 -0
  110. package/sidecar/dist/providers/claude/config.js.map +1 -0
  111. package/sidecar/dist/providers/claude/input-queue.js.map +1 -0
  112. package/sidecar/dist/providers/claude/module.d.ts +2 -0
  113. package/sidecar/dist/providers/claude/module.js +25 -0
  114. package/sidecar/dist/providers/claude/module.js.map +1 -0
  115. package/sidecar/dist/providers/claude/provider.d.ts +11 -0
  116. package/sidecar/dist/{agent/claude-runner.js → providers/claude/provider.js} +118 -96
  117. package/sidecar/dist/providers/claude/provider.js.map +1 -0
  118. package/sidecar/dist/{agent/resolve-claude-binary.js → providers/claude/resolve-binary.js} +3 -3
  119. package/sidecar/dist/{agent/resolve-claude-binary.js.map → providers/claude/resolve-binary.js.map} +1 -1
  120. package/sidecar/dist/providers/claude/sdk-loader.js +16 -0
  121. package/sidecar/dist/providers/claude/sdk-loader.js.map +1 -0
  122. package/sidecar/dist/providers/codex/adapter.d.ts +7 -0
  123. package/sidecar/dist/providers/codex/adapter.js +147 -0
  124. package/sidecar/dist/providers/codex/adapter.js.map +1 -0
  125. package/sidecar/dist/providers/codex/attachments.d.ts +7 -0
  126. package/sidecar/dist/providers/codex/attachments.js +73 -0
  127. package/sidecar/dist/providers/codex/attachments.js.map +1 -0
  128. package/sidecar/dist/providers/codex/client.d.ts +34 -0
  129. package/sidecar/dist/providers/codex/client.js +128 -0
  130. package/sidecar/dist/providers/codex/client.js.map +1 -0
  131. package/sidecar/dist/providers/codex/config.d.ts +34 -0
  132. package/sidecar/dist/providers/codex/config.js +111 -0
  133. package/sidecar/dist/providers/codex/config.js.map +1 -0
  134. package/sidecar/dist/providers/codex/event-stream.d.ts +8 -0
  135. package/sidecar/dist/providers/codex/event-stream.js +53 -0
  136. package/sidecar/dist/providers/codex/event-stream.js.map +1 -0
  137. package/sidecar/dist/providers/codex/module.d.ts +2 -0
  138. package/sidecar/dist/providers/codex/module.js +54 -0
  139. package/sidecar/dist/providers/codex/module.js.map +1 -0
  140. package/sidecar/dist/providers/codex/permissions.d.ts +21 -0
  141. package/sidecar/dist/providers/codex/permissions.js +77 -0
  142. package/sidecar/dist/providers/codex/permissions.js.map +1 -0
  143. package/sidecar/dist/providers/codex/process.d.ts +23 -0
  144. package/sidecar/dist/providers/codex/process.js +208 -0
  145. package/sidecar/dist/providers/codex/process.js.map +1 -0
  146. package/sidecar/dist/providers/codex/protocol/common.d.ts +59 -0
  147. package/sidecar/dist/providers/codex/protocol/common.js +2 -0
  148. package/sidecar/dist/providers/codex/protocol/common.js.map +1 -0
  149. package/sidecar/dist/providers/codex/protocol/index.d.ts +3 -0
  150. package/sidecar/dist/providers/codex/protocol/index.js +3 -0
  151. package/sidecar/dist/providers/codex/protocol/index.js.map +1 -0
  152. package/sidecar/dist/providers/codex/protocol/serde_json.d.ts +3 -0
  153. package/sidecar/dist/providers/codex/protocol/serde_json.js +2 -0
  154. package/sidecar/dist/providers/codex/protocol/serde_json.js.map +1 -0
  155. package/sidecar/dist/providers/codex/protocol/v2.d.ts +481 -0
  156. package/sidecar/dist/providers/codex/protocol/v2.js +2 -0
  157. package/sidecar/dist/providers/codex/protocol/v2.js.map +1 -0
  158. package/sidecar/dist/providers/codex/provider.d.ts +14 -0
  159. package/sidecar/dist/providers/codex/provider.js +225 -0
  160. package/sidecar/dist/providers/codex/provider.js.map +1 -0
  161. package/sidecar/dist/providers/codex/resolve-binary.d.ts +10 -0
  162. package/sidecar/dist/providers/codex/resolve-binary.js +80 -0
  163. package/sidecar/dist/providers/codex/resolve-binary.js.map +1 -0
  164. package/sidecar/dist/providers/codex/skills.d.ts +10 -0
  165. package/sidecar/dist/providers/codex/skills.js +42 -0
  166. package/sidecar/dist/providers/codex/skills.js.map +1 -0
  167. package/sidecar/dist/providers/registry.d.ts +7 -0
  168. package/sidecar/dist/providers/registry.js +31 -0
  169. package/sidecar/dist/providers/registry.js.map +1 -0
  170. package/sidecar/dist/providers/types.d.ts +25 -0
  171. package/sidecar/dist/providers/types.js +5 -0
  172. package/sidecar/dist/providers/types.js.map +1 -0
  173. package/sidecar/dist/server/http.d.ts +2 -0
  174. package/sidecar/dist/server/http.js +26 -12
  175. package/sidecar/dist/server/http.js.map +1 -1
  176. package/sidecar/dist/server/routing.d.ts +4 -4
  177. package/sidecar/dist/server/routing.js +7 -1
  178. package/sidecar/dist/server/routing.js.map +1 -1
  179. package/sidecar/dist/server/ws.d.ts +2 -0
  180. package/sidecar/dist/server/ws.js +40 -17
  181. package/sidecar/dist/server/ws.js.map +1 -1
  182. package/sidecar/dist/skills/build-catalog.d.ts +2 -0
  183. package/sidecar/dist/skills/build-catalog.js +12 -1
  184. package/sidecar/dist/skills/build-catalog.js.map +1 -1
  185. package/sidecar/dist/state/conversations.d.ts +3 -1
  186. package/sidecar/dist/state/conversations.js +20 -0
  187. package/sidecar/dist/state/conversations.js.map +1 -1
  188. package/sidecar/dist/state/safe-segment.d.ts +1 -0
  189. package/sidecar/dist/state/safe-segment.js +17 -0
  190. package/sidecar/dist/state/safe-segment.js.map +1 -0
  191. package/sidecar/dist/state/settings-store.js +7 -0
  192. package/sidecar/dist/state/settings-store.js.map +1 -1
  193. package/sidecar/dist/state/settings-types.d.ts +2 -0
  194. package/sidecar/dist/state/settings-types.js.map +1 -1
  195. package/sidecar/dist/state/types.d.ts +11 -0
  196. package/sidecar/dist/state/types.js +7 -0
  197. package/sidecar/dist/state/types.js.map +1 -1
  198. package/sidecar/package.json +3 -0
  199. package/sidecar/chatbox/dist/assets/index-Cy2BwTG0.js +0 -50
  200. package/sidecar/dist/agent/attachments.js.map +0 -1
  201. package/sidecar/dist/agent/claude-runner.js.map +0 -1
  202. package/sidecar/dist/agent/claude-session.d.ts +0 -18
  203. package/sidecar/dist/agent/claude-session.js.map +0 -1
  204. package/sidecar/dist/agent/input-queue.js.map +0 -1
  205. package/sidecar/dist/agent/sdk-adapter.d.ts +0 -3
  206. package/sidecar/dist/agent/sdk-adapter.js.map +0 -1
  207. package/sidecar/dist/agent/sdk-loader.js +0 -14
  208. package/sidecar/dist/agent/sdk-loader.js.map +0 -1
  209. package/sidecar/dist/mcp/server.js.map +0 -1
  210. /package/sidecar/dist/mcp/{server.d.ts → sdk-binding.d.ts} +0 -0
  211. /package/sidecar/dist/{agent → providers/claude}/input-queue.d.ts +0 -0
  212. /package/sidecar/dist/{agent → providers/claude}/input-queue.js +0 -0
  213. /package/sidecar/dist/{agent/resolve-claude-binary.d.ts → providers/claude/resolve-binary.d.ts} +0 -0
  214. /package/sidecar/dist/{agent → providers/claude}/sdk-loader.d.ts +0 -0
@@ -0,0 +1,128 @@
1
+ import { CODEX_REQUEST_TIMEOUT_MESSAGE, CODEX_TRANSPORT_CLOSED_MESSAGE, JSONRPC_LINE_SEPARATOR, JSONRPC_VERSION, } from "../../constants/codex.js";
2
+ function isServerRequest(frame) {
3
+ return frame.id !== undefined && frame.method !== undefined;
4
+ }
5
+ function isResponse(frame) {
6
+ return frame.id !== undefined && frame.method === undefined;
7
+ }
8
+ function parseFrame(line) {
9
+ try {
10
+ const parsed = JSON.parse(line);
11
+ return typeof parsed === "object" && parsed !== null ? parsed : null;
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ export function createCodexClient(stdin, stdout, handlers) {
18
+ const pending = new Map();
19
+ let nextId = 1;
20
+ let buffer = "";
21
+ let aborted = null;
22
+ function write(payload) {
23
+ if (aborted !== null)
24
+ return;
25
+ stdin.write(`${JSON.stringify({ jsonrpc: JSONRPC_VERSION, ...payload })}${JSONRPC_LINE_SEPARATOR}`);
26
+ }
27
+ function abort(reason) {
28
+ if (aborted !== null)
29
+ return;
30
+ aborted = reason;
31
+ const waiters = [...pending.values()];
32
+ pending.clear();
33
+ for (const waiter of waiters)
34
+ waiter.reject(reason);
35
+ }
36
+ function settleResponse(frame) {
37
+ const id = Number(frame.id);
38
+ const waiter = pending.get(id);
39
+ if (waiter === undefined)
40
+ return;
41
+ pending.delete(id);
42
+ waiter.settle(frame);
43
+ }
44
+ function serveRequest(frame) {
45
+ const id = frame.id;
46
+ handlers
47
+ .onServerRequest({
48
+ id,
49
+ method: frame.method,
50
+ params: frame.params,
51
+ })
52
+ .then((result) => write({ id, result }))
53
+ .catch((error) => {
54
+ write({ id, error: { code: -32603, message: error.message } });
55
+ });
56
+ }
57
+ function dispatch(frame) {
58
+ if (isServerRequest(frame)) {
59
+ serveRequest(frame);
60
+ return;
61
+ }
62
+ if (isResponse(frame)) {
63
+ settleResponse(frame);
64
+ return;
65
+ }
66
+ if (frame.method === undefined)
67
+ return;
68
+ handlers.onNotification({ method: frame.method, params: frame.params });
69
+ }
70
+ function consume(chunk) {
71
+ buffer += chunk;
72
+ const lines = buffer.split(JSONRPC_LINE_SEPARATOR);
73
+ buffer = lines.pop() ?? "";
74
+ for (const line of lines) {
75
+ if (line.trim() === "")
76
+ continue;
77
+ const frame = parseFrame(line);
78
+ if (frame !== null)
79
+ dispatch(frame);
80
+ }
81
+ }
82
+ function trackRequest(id, options) {
83
+ return new Promise((resolve, reject) => {
84
+ const timer = options?.timeoutMs === undefined
85
+ ? null
86
+ : setTimeout(() => {
87
+ pending.delete(id);
88
+ reject(new Error(CODEX_REQUEST_TIMEOUT_MESSAGE));
89
+ }, options.timeoutMs);
90
+ const clear = () => {
91
+ if (timer !== null)
92
+ clearTimeout(timer);
93
+ };
94
+ pending.set(id, {
95
+ reject: (reason) => {
96
+ clear();
97
+ reject(reason);
98
+ },
99
+ settle: (frame) => {
100
+ clear();
101
+ if (frame.error !== undefined) {
102
+ reject(new Error(frame.error.message));
103
+ return;
104
+ }
105
+ resolve(frame.result);
106
+ },
107
+ });
108
+ });
109
+ }
110
+ stdout.setEncoding("utf8");
111
+ stdout.on("data", (chunk) => consume(chunk));
112
+ stdout.on("close", () => abort(new Error(CODEX_TRANSPORT_CLOSED_MESSAGE)));
113
+ return {
114
+ request(method, params, options) {
115
+ if (aborted !== null)
116
+ return Promise.reject(aborted);
117
+ const id = nextId++;
118
+ const settled = trackRequest(id, options);
119
+ write({ id, method, params: params ?? {} });
120
+ return settled;
121
+ },
122
+ notify(method, params) {
123
+ write({ method, params: params ?? {} });
124
+ },
125
+ abort,
126
+ };
127
+ }
128
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/codex/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { AppSettings, ChatboxMode, ThinkingLevel } from "../../state/settings-types.js";
2
+ import type { v2 } from "./protocol/index.js";
3
+ export interface CodexModePolicy {
4
+ approvalPolicy: v2.AskForApproval;
5
+ sandbox: v2.SandboxMode;
6
+ networkAccess: boolean;
7
+ writable: boolean;
8
+ autoDeclineEscalations: boolean;
9
+ }
10
+ export declare const CODEX_MODE_POLICIES: Record<ChatboxMode, CodexModePolicy>;
11
+ export declare const CODEX_EFFORT_BY_THINKING: Record<ThinkingLevel, string>;
12
+ export interface CodexTurnOverrides {
13
+ approvalPolicy: v2.AskForApproval;
14
+ sandboxPolicy: v2.SandboxPolicy;
15
+ effort: string;
16
+ }
17
+ export interface CodexWorkspace {
18
+ hostProjectRoot: string;
19
+ moduleRoots: readonly string[];
20
+ }
21
+ export declare function resolveModePolicy(settings: AppSettings): CodexModePolicy;
22
+ export declare function buildTurnOverrides(settings: AppSettings, workspace: CodexWorkspace): CodexTurnOverrides;
23
+ export interface CodexConfigInput {
24
+ mcpUrl: string;
25
+ hostProjectRoot: string;
26
+ }
27
+ export declare function buildConfigToml(input: CodexConfigInput): string;
28
+ export interface CodexAuthFile {
29
+ auth_mode: string;
30
+ OPENAI_API_KEY: string;
31
+ }
32
+ export declare function buildAuthFile(apiKey: string): CodexAuthFile;
33
+ export declare function buildDeveloperInstructions(settings: AppSettings): string | undefined;
34
+ export declare function buildDenialReminder(settings: AppSettings, consecutiveDenials: number): string | undefined;
@@ -0,0 +1,111 @@
1
+ import path from "node:path";
2
+ import { effectiveGenerationMode } from "../../builder/capability.js";
3
+ import { CODEX_AUTH_MODE_API_KEY, CODEX_DENIAL_REMINDER_COUNT_TOKEN, CODEX_DENIAL_REMINDER_TEMPLATE, CODEX_DENIAL_REMINDER_THRESHOLD, CODEX_MCP_SERVER_ID, CODEX_MCP_TOKEN_ENV_VAR, } from "../../constants/codex.js";
4
+ import { SAFE_MODE_DENIED_MESSAGE } from "../../constants/settings.js";
5
+ export const CODEX_MODE_POLICIES = {
6
+ normal: {
7
+ approvalPolicy: "on-request",
8
+ sandbox: "read-only",
9
+ networkAccess: false,
10
+ writable: false,
11
+ autoDeclineEscalations: false,
12
+ },
13
+ acceptEdits: {
14
+ approvalPolicy: "on-request",
15
+ sandbox: "workspace-write",
16
+ networkAccess: false,
17
+ writable: true,
18
+ autoDeclineEscalations: false,
19
+ },
20
+ plan: {
21
+ approvalPolicy: "on-request",
22
+ sandbox: "read-only",
23
+ networkAccess: false,
24
+ writable: false,
25
+ autoDeclineEscalations: true,
26
+ },
27
+ auto: {
28
+ approvalPolicy: "never",
29
+ sandbox: "danger-full-access",
30
+ networkAccess: true,
31
+ writable: true,
32
+ autoDeclineEscalations: false,
33
+ },
34
+ };
35
+ export const CODEX_EFFORT_BY_THINKING = {
36
+ off: "low",
37
+ low: "low",
38
+ medium: "medium",
39
+ high: "high",
40
+ };
41
+ function writableRoots(workspace) {
42
+ const roots = [workspace.hostProjectRoot, ...workspace.moduleRoots];
43
+ return [...new Set(roots.map((root) => path.resolve(root)))];
44
+ }
45
+ function buildSandboxPolicy(policy, workspace) {
46
+ if (policy.sandbox === "danger-full-access")
47
+ return { type: "dangerFullAccess" };
48
+ if (!policy.writable) {
49
+ return { type: "readOnly", networkAccess: policy.networkAccess };
50
+ }
51
+ return {
52
+ type: "workspaceWrite",
53
+ writableRoots: writableRoots(workspace),
54
+ networkAccess: policy.networkAccess,
55
+ excludeTmpdirEnvVar: false,
56
+ excludeSlashTmp: false,
57
+ };
58
+ }
59
+ export function resolveModePolicy(settings) {
60
+ const base = CODEX_MODE_POLICIES[settings.mode];
61
+ if (effectiveGenerationMode(settings.generationMode) !== "safe")
62
+ return base;
63
+ return {
64
+ ...base,
65
+ sandbox: "read-only",
66
+ writable: false,
67
+ networkAccess: false,
68
+ autoDeclineEscalations: true,
69
+ };
70
+ }
71
+ export function buildTurnOverrides(settings, workspace) {
72
+ const policy = resolveModePolicy(settings);
73
+ return {
74
+ approvalPolicy: policy.approvalPolicy,
75
+ sandboxPolicy: buildSandboxPolicy(policy, workspace),
76
+ effort: CODEX_EFFORT_BY_THINKING[settings.thinking],
77
+ };
78
+ }
79
+ function tomlString(value) {
80
+ return JSON.stringify(value);
81
+ }
82
+ export function buildConfigToml(input) {
83
+ return [
84
+ "project_doc_max_bytes = 0",
85
+ "",
86
+ `[mcp_servers.${CODEX_MCP_SERVER_ID}]`,
87
+ `url = ${tomlString(input.mcpUrl)}`,
88
+ `bearer_token_env_var = ${tomlString(CODEX_MCP_TOKEN_ENV_VAR)}`,
89
+ "",
90
+ `[projects.${tomlString(path.resolve(input.hostProjectRoot))}]`,
91
+ 'trust_level = "untrusted"',
92
+ "",
93
+ ].join("\n");
94
+ }
95
+ export function buildAuthFile(apiKey) {
96
+ return { auth_mode: CODEX_AUTH_MODE_API_KEY, OPENAI_API_KEY: apiKey };
97
+ }
98
+ function isSafeMode(settings) {
99
+ return effectiveGenerationMode(settings.generationMode) === "safe";
100
+ }
101
+ export function buildDeveloperInstructions(settings) {
102
+ return isSafeMode(settings) ? SAFE_MODE_DENIED_MESSAGE : undefined;
103
+ }
104
+ export function buildDenialReminder(settings, consecutiveDenials) {
105
+ if (!isSafeMode(settings))
106
+ return undefined;
107
+ if (consecutiveDenials < CODEX_DENIAL_REMINDER_THRESHOLD)
108
+ return undefined;
109
+ return CODEX_DENIAL_REMINDER_TEMPLATE.replace(CODEX_DENIAL_REMINDER_COUNT_TOKEN, String(consecutiveDenials));
110
+ }
111
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/codex/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { RunnerEvent } from "../../agent/runner-events.js";
2
+ export interface RunnerEventStream {
3
+ push(event: RunnerEvent): void;
4
+ end(): void;
5
+ fail(reason: Error): void;
6
+ iterator: AsyncIterator<RunnerEvent, void>;
7
+ }
8
+ export declare function createRunnerEventStream(): RunnerEventStream;
@@ -0,0 +1,53 @@
1
+ export function createRunnerEventStream() {
2
+ const buffered = [];
3
+ let waiter = null;
4
+ let ended = false;
5
+ let failure = null;
6
+ function takeWaiter() {
7
+ const pending = waiter;
8
+ waiter = null;
9
+ return pending;
10
+ }
11
+ return {
12
+ push(event) {
13
+ if (ended)
14
+ return;
15
+ const pending = takeWaiter();
16
+ if (pending !== null) {
17
+ pending.resolve({ value: event, done: false });
18
+ return;
19
+ }
20
+ buffered.push(event);
21
+ },
22
+ end() {
23
+ if (ended)
24
+ return;
25
+ ended = true;
26
+ takeWaiter()?.resolve({ value: undefined, done: true });
27
+ },
28
+ fail(reason) {
29
+ if (ended)
30
+ return;
31
+ ended = true;
32
+ failure = reason;
33
+ takeWaiter()?.reject(reason);
34
+ },
35
+ iterator: {
36
+ next: () => {
37
+ const queued = buffered.shift();
38
+ if (queued !== undefined) {
39
+ return Promise.resolve({ value: queued, done: false });
40
+ }
41
+ if (failure !== null)
42
+ return Promise.reject(failure);
43
+ if (ended) {
44
+ return Promise.resolve({ value: undefined, done: true });
45
+ }
46
+ return new Promise((resolve, reject) => {
47
+ waiter = { resolve, reject };
48
+ });
49
+ },
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=event-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../../../src/providers/codex/event-stream.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,uBAAuB;IACrC,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,OAAO,GAAiB,IAAI,CAAC;IAEjC,SAAS,UAAU;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC;QACvB,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK;YACR,IAAI,KAAK;gBAAE,OAAO;YAClB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,GAAG;YACD,IAAI,KAAK;gBAAE,OAAO;YAClB,KAAK,GAAG,IAAI,CAAC;YACb,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,MAAM;YACT,IAAI,KAAK;gBAAE,OAAO;YAClB,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,GAAG,MAAM,CAAC;YACjB,UAAU,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,GAAG,EAAE;gBACT,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzD,CAAC;gBACD,IAAI,OAAO,KAAK,IAAI;oBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,OAAO,IAAI,OAAO,CAChB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAClB,MAAM,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC/B,CAAC,CACF,CAAC;YACJ,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type ProviderModule } from "../types.js";
2
+ export declare const codexModule: ProviderModule;
@@ -0,0 +1,54 @@
1
+ import { CODEX_LOG_PREFIX, MOCK_CODEX_FLAG_ENABLED, MOCK_CODEX_FLAG_ENV, OPENAI_API_KEY_ENV_VAR, } from "../../constants/codex.js";
2
+ import { PROVIDER_UNAVAILABLE_REASONS } from "../../constants/providers.js";
3
+ import { AVAILABLE, unavailable, } from "../types.js";
4
+ import { reapOrphanCodexProcesses } from "./process.js";
5
+ import { createCodexProvider } from "./provider.js";
6
+ import { describeVersionMismatch, isCodexInstallationUsable, isVersionGateWaived, resolveCodexInstallation, } from "./resolve-binary.js";
7
+ let installVerdict = null;
8
+ function computeInstallVerdict() {
9
+ const installation = resolveCodexInstallation();
10
+ if (installation === undefined) {
11
+ return unavailable(PROVIDER_UNAVAILABLE_REASONS.CODEX_CLI_MISSING);
12
+ }
13
+ if (!isCodexInstallationUsable(installation)) {
14
+ return unavailable(describeVersionMismatch(installation));
15
+ }
16
+ if (isVersionGateWaived()) {
17
+ console.warn(`${CODEX_LOG_PREFIX} ${describeVersionMismatch(installation)}`);
18
+ }
19
+ return AVAILABLE;
20
+ }
21
+ function isMockCodex() {
22
+ return process.env[MOCK_CODEX_FLAG_ENV] === MOCK_CODEX_FLAG_ENABLED;
23
+ }
24
+ function readInstallVerdict() {
25
+ if (isMockCodex())
26
+ return computeInstallVerdict();
27
+ installVerdict ??= computeInstallVerdict();
28
+ return installVerdict;
29
+ }
30
+ function checkAvailability() {
31
+ const installed = readInstallVerdict();
32
+ if (!installed.available)
33
+ return installed;
34
+ if (process.env[OPENAI_API_KEY_ENV_VAR] === undefined) {
35
+ return unavailable(PROVIDER_UNAVAILABLE_REASONS.CODEX_API_KEY_MISSING);
36
+ }
37
+ return AVAILABLE;
38
+ }
39
+ export const codexModule = {
40
+ name: "codex",
41
+ create: (options, runtime) => createCodexProvider({
42
+ ...options,
43
+ stateDir: runtime.stateDir,
44
+ mcpHttpRegistry: runtime.mcpHttpRegistry,
45
+ getMcpUrl: runtime.getMcpUrl,
46
+ createMcpDeps: runtime.createMcpDeps,
47
+ getApiKey: () => process.env[OPENAI_API_KEY_ENV_VAR],
48
+ }),
49
+ checkAvailability,
50
+ reapOrphans: async (stateDir) => {
51
+ await reapOrphanCodexProcesses(stateDir);
52
+ },
53
+ };
54
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/providers/codex/module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EACL,SAAS,EAGT,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAM7B,IAAI,cAAc,GAAgC,IAAI,CAAC;AAEvD,SAAS,qBAAqB;IAC5B,MAAM,YAAY,GAAG,wBAAwB,EAAE,CAAC;IAChD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7C,OAAO,WAAW,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,CAAC;IAGD,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CACV,GAAG,gBAAgB,IAAI,uBAAuB,CAAC,YAAY,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,uBAAuB,CAAC;AACtE,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,WAAW,EAAE;QAAE,OAAO,qBAAqB,EAAE,CAAC;IAClD,cAAc,KAAK,qBAAqB,EAAE,CAAC;IAC3C,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,IAAI,CAAC,SAAS,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAG3C,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,WAAW,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAC3B,mBAAmB,CAAC;QAClB,GAAG,OAAO;QACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;QAGpC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;KACrD,CAAC;IACJ,iBAAiB;IAGjB,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC9B,MAAM,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { PermissionBus } from "../../agent/permission-bus.js";
2
+ import { type PermissionDecision } from "../../constants/permissions.js";
3
+ import type { AppSettings } from "../../state/settings-types.js";
4
+ import type { CodexServerRequest } from "./client.js";
5
+ export interface CodexApprovalDecisionResponse {
6
+ decision: string;
7
+ }
8
+ export interface CodexPermissionDeps {
9
+ conversationId: string;
10
+ permissionBus?: PermissionBus;
11
+ getSettings: () => AppSettings;
12
+ getChangedPaths: (itemId: string) => string[];
13
+ onPermissionDecision?: (toolName: string, decision: PermissionDecision) => void;
14
+ }
15
+ export interface CodexPermissionHandler {
16
+ handle(request: CodexServerRequest): Promise<CodexApprovalDecisionResponse>;
17
+ cancelPending(): void;
18
+ resume(): void;
19
+ consecutiveDenials(): number;
20
+ }
21
+ export declare function createCodexPermissionHandler(deps: CodexPermissionDeps): CodexPermissionHandler;
@@ -0,0 +1,77 @@
1
+ import { CODEX_APPROVAL_DECISIONS, CODEX_COMMAND_APPROVAL_METHOD, CODEX_FILE_CHANGE_APPROVAL_METHOD, CODEX_LOG_PREFIX, CODEX_UNKNOWN_APPROVAL_METHOD, } from "../../constants/codex.js";
2
+ import { PERMISSION_DECISIONS, } from "../../constants/permissions.js";
3
+ import { BASH_COMMAND_ARG, EDIT_FILE_PATH_ARG, TOOL_LEXICON, } from "../../constants/tool-lexicon.js";
4
+ import { resolveModePolicy } from "./config.js";
5
+ const ACCEPTING_DECISIONS = [
6
+ PERMISSION_DECISIONS.ALLOW_ONCE,
7
+ PERMISSION_DECISIONS.ALLOW_SESSION,
8
+ ];
9
+ function accept() {
10
+ return { decision: CODEX_APPROVAL_DECISIONS.ACCEPT };
11
+ }
12
+ function decline() {
13
+ return { decision: CODEX_APPROVAL_DECISIONS.DECLINE };
14
+ }
15
+ export function createCodexPermissionHandler(deps) {
16
+ let denials = 0;
17
+ let cancelled = false;
18
+ function describeCommand(params) {
19
+ const { command } = params;
20
+ return {
21
+ toolName: TOOL_LEXICON.BASH,
22
+ args: { [BASH_COMMAND_ARG]: command ?? "" },
23
+ };
24
+ }
25
+ function describeFileChange(params) {
26
+ const { itemId } = params;
27
+ const paths = itemId === undefined ? [] : deps.getChangedPaths(itemId);
28
+ return {
29
+ toolName: TOOL_LEXICON.EDIT,
30
+ args: { [EDIT_FILE_PATH_ARG]: paths[0] ?? "" },
31
+ };
32
+ }
33
+ const SUBJECT_BY_METHOD = {
34
+ [CODEX_COMMAND_APPROVAL_METHOD]: describeCommand,
35
+ [CODEX_FILE_CHANGE_APPROVAL_METHOD]: describeFileChange,
36
+ };
37
+ function record(subject, decision) {
38
+ deps.onPermissionDecision?.(subject.toolName, decision);
39
+ denials = decision === PERMISSION_DECISIONS.DENY ? denials + 1 : 0;
40
+ }
41
+ async function ask(subject) {
42
+ if (deps.permissionBus === undefined)
43
+ return decline();
44
+ const decision = await deps.permissionBus.requestPermission({
45
+ conversationId: deps.conversationId,
46
+ toolName: subject.toolName,
47
+ args: subject.args,
48
+ });
49
+ record(subject, decision);
50
+ return ACCEPTING_DECISIONS.includes(decision) ? accept() : decline();
51
+ }
52
+ return {
53
+ async handle(request) {
54
+ const describe = SUBJECT_BY_METHOD[request.method];
55
+ if (describe === undefined) {
56
+ console.warn(`${CODEX_LOG_PREFIX} ${CODEX_UNKNOWN_APPROVAL_METHOD} ${request.method}`);
57
+ return decline();
58
+ }
59
+ if (cancelled)
60
+ return decline();
61
+ const subject = describe(request.params);
62
+ if (resolveModePolicy(deps.getSettings()).autoDeclineEscalations) {
63
+ record(subject, PERMISSION_DECISIONS.DENY);
64
+ return decline();
65
+ }
66
+ return ask(subject);
67
+ },
68
+ cancelPending: () => {
69
+ cancelled = true;
70
+ },
71
+ resume: () => {
72
+ cancelled = false;
73
+ },
74
+ consecutiveDenials: () => denials,
75
+ };
76
+ }
77
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/providers/codex/permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { CodexClient, CodexClientHandlers } from "./client.js";
2
+ import type { CodexInstallation } from "./resolve-binary.js";
3
+ export interface CodexProcessOptions {
4
+ conversationId: string;
5
+ stateDir: string;
6
+ installation: CodexInstallation;
7
+ mcpUrl: string;
8
+ mcpToken: string;
9
+ hostProjectRoot: string;
10
+ apiKey: string;
11
+ handlers: CodexClientHandlers;
12
+ }
13
+ export interface CodexProcess {
14
+ client: CodexClient;
15
+ codexHome: string;
16
+ pid: number | undefined;
17
+ dispose: () => Promise<void>;
18
+ }
19
+ export declare function codexHomeFor(stateDir: string, conversationId: string): string;
20
+ export declare function readProcessCommand(pid: number): string | undefined;
21
+ export declare function isCodexProcess(pid: number): boolean;
22
+ export declare function reapOrphanCodexProcesses(stateDir: string): Promise<number[]>;
23
+ export declare function spawnCodexProcess(options: CodexProcessOptions): Promise<CodexProcess>;