@dexto/core 1.6.15 → 1.6.16

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.
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var codex_app_server_exports = {};
20
30
  __export(codex_app_server_exports, {
@@ -22,10 +32,13 @@ __export(codex_app_server_exports, {
22
32
  createCodexLanguageModel: () => createCodexLanguageModel
23
33
  });
24
34
  module.exports = __toCommonJS(codex_app_server_exports);
35
+ var fs = __toESM(require("node:fs"), 1);
25
36
  var import_node_child_process = require("node:child_process");
37
+ var import_node_path = __toESM(require("node:path"), 1);
26
38
  var import_node_readline = require("node:readline");
27
39
  var import_DextoRuntimeError = require("../../errors/DextoRuntimeError.js");
28
40
  var import_types = require("../../errors/types.js");
41
+ var import_path = require("../../utils/path.js");
29
42
  var import_safe_stringify = require("../../utils/safe-stringify.js");
30
43
  var import_error_codes = require("../error-codes.js");
31
44
  var import_errors = require("../errors.js");
@@ -66,6 +79,7 @@ const DEFAULT_CLIENT_INFO = {
66
79
  title: "Dexto",
67
80
  version: "1.0.0"
68
81
  };
82
+ const MANAGED_CODEX_BINARY = process.platform === "win32" ? "codex.cmd" : "codex";
69
83
  const CODEX_DEVELOPER_INSTRUCTIONS = [
70
84
  "You are providing model responses for a host application.",
71
85
  "Treat the provided input as the full conversation transcript.",
@@ -98,6 +112,39 @@ function getArray(value) {
98
112
  function normalizeError(error) {
99
113
  return error instanceof Error ? error : createCodexClientRuntimeError(String(error));
100
114
  }
115
+ function isMissingCodexCliError(error) {
116
+ const missingCodexError = error;
117
+ if (missingCodexError.isMissingCodexError === true) {
118
+ return true;
119
+ }
120
+ const code = missingCodexError.code;
121
+ return error.message.includes("Codex CLI not found on PATH") || code === "ENOENT" && (error.message.includes("spawn codex ENOENT") || error.message.includes("Codex CLI command '"));
122
+ }
123
+ function normalizeCodexStartupError(error, command) {
124
+ const normalized = normalizeError(error);
125
+ const errno = normalized;
126
+ if (errno.code !== "ENOENT" || !normalized.message.includes(`spawn ${command} ENOENT`)) {
127
+ return normalized;
128
+ }
129
+ const message = command === "codex" ? "Codex CLI not found on PATH. Install Codex to use ChatGPT Login in Dexto." : `Codex CLI command '${command}' not found on PATH. Install Codex to use ChatGPT Login in Dexto.`;
130
+ const startupError = new Error(message);
131
+ startupError.code = "ENOENT";
132
+ startupError.isMissingCodexError = true;
133
+ return startupError;
134
+ }
135
+ function getManagedCodexCommand() {
136
+ try {
137
+ const candidate = import_node_path.default.join(
138
+ (0, import_path.getDextoGlobalPath)("deps"),
139
+ "node_modules",
140
+ ".bin",
141
+ MANAGED_CODEX_BINARY
142
+ );
143
+ return fs.existsSync(candidate) ? candidate : null;
144
+ } catch {
145
+ return null;
146
+ }
147
+ }
101
148
  function parseCodexAccount(value) {
102
149
  if (!isRecord(value)) {
103
150
  return null;
@@ -543,7 +590,7 @@ function toCodexFailureMessage(error, modelId) {
543
590
  return error;
544
591
  }
545
592
  const normalized = normalizeError(error);
546
- if (normalized.message.includes("spawn codex ENOENT")) {
593
+ if (isMissingCodexCliError(normalized)) {
547
594
  return import_errors.LLMError.missingConfig(
548
595
  "openai-compatible",
549
596
  "the Codex CLI on PATH (install Codex to use ChatGPT Login in Dexto)"
@@ -632,7 +679,7 @@ class CodexAppServerClient {
632
679
  started = false;
633
680
  closed = false;
634
681
  constructor(options = {}) {
635
- this.command = options.command ?? "codex";
682
+ this.command = options.command ?? getManagedCodexCommand() ?? "codex";
636
683
  this.cwd = options.cwd;
637
684
  this.requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
638
685
  this.clientInfo = options.clientInfo ?? DEFAULT_CLIENT_INFO;
@@ -848,7 +895,7 @@ class CodexAppServerClient {
848
895
  const drainStderr = () => void 0;
849
896
  child.stderr.on("data", drainStderr);
850
897
  child.on("error", (error) => {
851
- this.rejectPending(error);
898
+ this.rejectPending(normalizeCodexStartupError(error, this.command));
852
899
  });
853
900
  child.on("exit", (code, signal) => {
854
901
  const wasClosed = this.closed;
@@ -1 +1 @@
1
- {"version":3,"file":"codex-app-server.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/codex-app-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-app-server.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/codex-app-server.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  import "../../chunk-PTJYTZNU.js";
2
+ import * as fs from "node:fs";
2
3
  import { spawn } from "node:child_process";
4
+ import path from "node:path";
3
5
  import { createInterface } from "node:readline";
4
6
  import { DextoRuntimeError } from "../../errors/DextoRuntimeError.js";
5
7
  import { ErrorScope, ErrorType } from "../../errors/types.js";
8
+ import { getDextoGlobalPath } from "../../utils/path.js";
6
9
  import { safeStringify } from "../../utils/safe-stringify.js";
7
10
  import { LLMErrorCode } from "../error-codes.js";
8
11
  import { LLMError } from "../errors.js";
@@ -43,6 +46,7 @@ const DEFAULT_CLIENT_INFO = {
43
46
  title: "Dexto",
44
47
  version: "1.0.0"
45
48
  };
49
+ const MANAGED_CODEX_BINARY = process.platform === "win32" ? "codex.cmd" : "codex";
46
50
  const CODEX_DEVELOPER_INSTRUCTIONS = [
47
51
  "You are providing model responses for a host application.",
48
52
  "Treat the provided input as the full conversation transcript.",
@@ -75,6 +79,39 @@ function getArray(value) {
75
79
  function normalizeError(error) {
76
80
  return error instanceof Error ? error : createCodexClientRuntimeError(String(error));
77
81
  }
82
+ function isMissingCodexCliError(error) {
83
+ const missingCodexError = error;
84
+ if (missingCodexError.isMissingCodexError === true) {
85
+ return true;
86
+ }
87
+ const code = missingCodexError.code;
88
+ return error.message.includes("Codex CLI not found on PATH") || code === "ENOENT" && (error.message.includes("spawn codex ENOENT") || error.message.includes("Codex CLI command '"));
89
+ }
90
+ function normalizeCodexStartupError(error, command) {
91
+ const normalized = normalizeError(error);
92
+ const errno = normalized;
93
+ if (errno.code !== "ENOENT" || !normalized.message.includes(`spawn ${command} ENOENT`)) {
94
+ return normalized;
95
+ }
96
+ const message = command === "codex" ? "Codex CLI not found on PATH. Install Codex to use ChatGPT Login in Dexto." : `Codex CLI command '${command}' not found on PATH. Install Codex to use ChatGPT Login in Dexto.`;
97
+ const startupError = new Error(message);
98
+ startupError.code = "ENOENT";
99
+ startupError.isMissingCodexError = true;
100
+ return startupError;
101
+ }
102
+ function getManagedCodexCommand() {
103
+ try {
104
+ const candidate = path.join(
105
+ getDextoGlobalPath("deps"),
106
+ "node_modules",
107
+ ".bin",
108
+ MANAGED_CODEX_BINARY
109
+ );
110
+ return fs.existsSync(candidate) ? candidate : null;
111
+ } catch {
112
+ return null;
113
+ }
114
+ }
78
115
  function parseCodexAccount(value) {
79
116
  if (!isRecord(value)) {
80
117
  return null;
@@ -520,7 +557,7 @@ function toCodexFailureMessage(error, modelId) {
520
557
  return error;
521
558
  }
522
559
  const normalized = normalizeError(error);
523
- if (normalized.message.includes("spawn codex ENOENT")) {
560
+ if (isMissingCodexCliError(normalized)) {
524
561
  return LLMError.missingConfig(
525
562
  "openai-compatible",
526
563
  "the Codex CLI on PATH (install Codex to use ChatGPT Login in Dexto)"
@@ -609,7 +646,7 @@ class CodexAppServerClient {
609
646
  started = false;
610
647
  closed = false;
611
648
  constructor(options = {}) {
612
- this.command = options.command ?? "codex";
649
+ this.command = options.command ?? getManagedCodexCommand() ?? "codex";
613
650
  this.cwd = options.cwd;
614
651
  this.requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
615
652
  this.clientInfo = options.clientInfo ?? DEFAULT_CLIENT_INFO;
@@ -825,7 +862,7 @@ class CodexAppServerClient {
825
862
  const drainStderr = () => void 0;
826
863
  child.stderr.on("data", drainStderr);
827
864
  child.on("error", (error) => {
828
- this.rejectPending(error);
865
+ this.rejectPending(normalizeCodexStartupError(error, this.command));
829
866
  });
830
867
  child.on("exit", (code, signal) => {
831
868
  const wasClosed = this.closed;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dexto/core",
3
- "version": "1.6.15",
3
+ "version": "1.6.16",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",