@askexenow/exe-os 0.8.83 → 0.8.86
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/dist/bin/backfill-conversations.js +746 -595
- package/dist/bin/backfill-responses.js +745 -594
- package/dist/bin/backfill-vectors.js +312 -226
- package/dist/bin/cleanup-stale-review-tasks.js +154 -21
- package/dist/bin/cli.js +14678 -12676
- package/dist/bin/exe-agent-config.js +242 -0
- package/dist/bin/exe-agent.js +100 -91
- package/dist/bin/exe-assign.js +1003 -854
- package/dist/bin/exe-boot.js +1420 -485
- package/dist/bin/exe-call.js +10 -0
- package/dist/bin/exe-cloud.js +29 -6
- package/dist/bin/exe-dispatch.js +572 -271
- package/dist/bin/exe-doctor.js +403 -6
- package/dist/bin/exe-export-behaviors.js +175 -72
- package/dist/bin/exe-forget.js +102 -3
- package/dist/bin/exe-gateway.js +796 -292
- package/dist/bin/exe-healthcheck.js +134 -1
- package/dist/bin/exe-heartbeat.js +172 -36
- package/dist/bin/exe-kill.js +175 -72
- package/dist/bin/exe-launch-agent.js +189 -76
- package/dist/bin/exe-link.js +927 -82
- package/dist/bin/exe-new-employee.js +60 -8
- package/dist/bin/exe-pending-messages.js +151 -19
- package/dist/bin/exe-pending-notifications.js +97 -2
- package/dist/bin/exe-pending-reviews.js +155 -22
- package/dist/bin/exe-rename.js +564 -23
- package/dist/bin/exe-review.js +231 -73
- package/dist/bin/exe-search.js +995 -228
- package/dist/bin/exe-session-cleanup.js +4930 -1664
- package/dist/bin/exe-settings.js +20 -5
- package/dist/bin/exe-start-codex.js +2598 -0
- package/dist/bin/exe-start.sh +15 -3
- package/dist/bin/exe-status.js +154 -21
- package/dist/bin/exe-team.js +97 -2
- package/dist/bin/git-sweep.js +1180 -363
- package/dist/bin/graph-backfill.js +175 -72
- package/dist/bin/graph-export.js +175 -72
- package/dist/bin/install.js +60 -7
- package/dist/bin/list-providers.js +1 -0
- package/dist/bin/scan-tasks.js +1185 -367
- package/dist/bin/setup.js +914 -270
- package/dist/bin/shard-migrate.js +175 -72
- package/dist/bin/update.js +1 -0
- package/dist/bin/wiki-sync.js +175 -72
- package/dist/gateway/index.js +792 -285
- package/dist/hooks/bug-report-worker.js +445 -135
- package/dist/hooks/commit-complete.js +1178 -361
- package/dist/hooks/error-recall.js +994 -228
- package/dist/hooks/ingest-worker.js +1799 -1234
- package/dist/hooks/ingest.js +3 -0
- package/dist/hooks/instructions-loaded.js +707 -97
- package/dist/hooks/notification.js +699 -89
- package/dist/hooks/post-compact.js +757 -109
- package/dist/hooks/pre-compact.js +1061 -244
- package/dist/hooks/pre-tool-use.js +787 -130
- package/dist/hooks/prompt-ingest-worker.js +242 -101
- package/dist/hooks/prompt-submit.js +1121 -299
- package/dist/hooks/response-ingest-worker.js +242 -101
- package/dist/hooks/session-end.js +4063 -397
- package/dist/hooks/session-start.js +1071 -254
- package/dist/hooks/stop.js +768 -120
- package/dist/hooks/subagent-stop.js +757 -109
- package/dist/hooks/summary-worker.js +1706 -1011
- package/dist/index.js +1821 -1098
- package/dist/lib/agent-config.js +167 -0
- package/dist/lib/cloud-sync.js +932 -88
- package/dist/lib/consolidation.js +2 -1
- package/dist/lib/database.js +642 -87
- package/dist/lib/db-daemon-client.js +503 -0
- package/dist/lib/device-registry.js +547 -7
- package/dist/lib/embedder.js +14 -28
- package/dist/lib/employee-templates.js +84 -74
- package/dist/lib/employees.js +9 -0
- package/dist/lib/exe-daemon-client.js +16 -29
- package/dist/lib/exe-daemon.js +2733 -1575
- package/dist/lib/hybrid-search.js +995 -228
- package/dist/lib/identity.js +87 -67
- package/dist/lib/keychain.js +9 -1
- package/dist/lib/messaging.js +103 -40
- package/dist/lib/reminders.js +91 -74
- package/dist/lib/runtime-table.js +16 -0
- package/dist/lib/schedules.js +96 -2
- package/dist/lib/session-wrappers.js +22 -0
- package/dist/lib/skill-learning.js +103 -85
- package/dist/lib/store.js +234 -73
- package/dist/lib/tasks.js +348 -134
- package/dist/lib/tmux-routing.js +422 -208
- package/dist/lib/token-spend.js +273 -0
- package/dist/lib/ws-client.js +11 -0
- package/dist/mcp/server.js +5742 -696
- package/dist/mcp/tools/complete-reminder.js +94 -77
- package/dist/mcp/tools/create-reminder.js +94 -77
- package/dist/mcp/tools/create-task.js +375 -152
- package/dist/mcp/tools/deactivate-behavior.js +95 -77
- package/dist/mcp/tools/list-reminders.js +94 -77
- package/dist/mcp/tools/list-tasks.js +99 -31
- package/dist/mcp/tools/send-message.js +108 -45
- package/dist/mcp/tools/update-task.js +162 -77
- package/dist/runtime/index.js +1075 -258
- package/dist/tui/App.js +1333 -506
- package/package.json +6 -1
- package/src/commands/exe/agent-config.md +27 -0
- package/src/commands/exe/cc-doctor.md +10 -0
|
@@ -316,6 +316,12 @@ function getClient() {
|
|
|
316
316
|
if (!_resilientClient) {
|
|
317
317
|
throw new Error("Database client not initialized. Call initDatabase() first.");
|
|
318
318
|
}
|
|
319
|
+
if (process.env.EXE_IS_DAEMON === "1") {
|
|
320
|
+
return _resilientClient;
|
|
321
|
+
}
|
|
322
|
+
if (_daemonClient && _daemonClient._isDaemonActive()) {
|
|
323
|
+
return _daemonClient;
|
|
324
|
+
}
|
|
319
325
|
return _resilientClient;
|
|
320
326
|
}
|
|
321
327
|
function getRawClient() {
|
|
@@ -804,6 +810,12 @@ async function ensureSchema() {
|
|
|
804
810
|
} catch {
|
|
805
811
|
}
|
|
806
812
|
}
|
|
813
|
+
try {
|
|
814
|
+
await client.execute(
|
|
815
|
+
`CREATE INDEX IF NOT EXISTS idx_memories_content_hash ON memories(content_hash, agent_id)`
|
|
816
|
+
);
|
|
817
|
+
} catch {
|
|
818
|
+
}
|
|
807
819
|
await client.executeMultiple(`
|
|
808
820
|
CREATE TABLE IF NOT EXISTS entities (
|
|
809
821
|
id TEXT PRIMARY KEY,
|
|
@@ -856,7 +868,30 @@ async function ensureSchema() {
|
|
|
856
868
|
entity_id TEXT NOT NULL,
|
|
857
869
|
PRIMARY KEY (hyperedge_id, entity_id)
|
|
858
870
|
);
|
|
871
|
+
|
|
872
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS entities_fts USING fts5(
|
|
873
|
+
name,
|
|
874
|
+
content=entities,
|
|
875
|
+
content_rowid=rowid
|
|
876
|
+
);
|
|
877
|
+
|
|
878
|
+
CREATE TRIGGER IF NOT EXISTS entities_fts_ai AFTER INSERT ON entities BEGIN
|
|
879
|
+
INSERT INTO entities_fts(rowid, name) VALUES (new.rowid, new.name);
|
|
880
|
+
END;
|
|
881
|
+
|
|
882
|
+
CREATE TRIGGER IF NOT EXISTS entities_fts_ad AFTER DELETE ON entities BEGIN
|
|
883
|
+
INSERT INTO entities_fts(entities_fts, rowid, name) VALUES('delete', old.rowid, old.name);
|
|
884
|
+
END;
|
|
885
|
+
|
|
886
|
+
CREATE TRIGGER IF NOT EXISTS entities_fts_au AFTER UPDATE ON entities BEGIN
|
|
887
|
+
INSERT INTO entities_fts(entities_fts, rowid, name) VALUES('delete', old.rowid, old.name);
|
|
888
|
+
INSERT INTO entities_fts(rowid, name) VALUES (new.rowid, new.name);
|
|
889
|
+
END;
|
|
859
890
|
`);
|
|
891
|
+
try {
|
|
892
|
+
await client.execute("INSERT INTO entities_fts(entities_fts) VALUES('rebuild')");
|
|
893
|
+
} catch {
|
|
894
|
+
}
|
|
860
895
|
await client.executeMultiple(`
|
|
861
896
|
CREATE TABLE IF NOT EXISTS entity_aliases (
|
|
862
897
|
alias TEXT NOT NULL PRIMARY KEY,
|
|
@@ -1037,6 +1072,33 @@ async function ensureSchema() {
|
|
|
1037
1072
|
CREATE INDEX IF NOT EXISTS idx_conversations_channel
|
|
1038
1073
|
ON conversations(channel_id);
|
|
1039
1074
|
`);
|
|
1075
|
+
await client.executeMultiple(`
|
|
1076
|
+
CREATE TABLE IF NOT EXISTS session_agent_map (
|
|
1077
|
+
session_uuid TEXT PRIMARY KEY,
|
|
1078
|
+
agent_id TEXT NOT NULL,
|
|
1079
|
+
session_name TEXT,
|
|
1080
|
+
task_id TEXT,
|
|
1081
|
+
project_name TEXT,
|
|
1082
|
+
started_at TEXT NOT NULL
|
|
1083
|
+
);
|
|
1084
|
+
|
|
1085
|
+
CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
|
|
1086
|
+
ON session_agent_map(agent_id);
|
|
1087
|
+
`);
|
|
1088
|
+
try {
|
|
1089
|
+
const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
|
|
1090
|
+
if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
|
|
1091
|
+
await client.execute({
|
|
1092
|
+
sql: `INSERT OR IGNORE INTO session_agent_map (session_uuid, agent_id, session_name, started_at)
|
|
1093
|
+
SELECT session_id, agent_id, '', MIN(timestamp)
|
|
1094
|
+
FROM memories
|
|
1095
|
+
WHERE session_id IS NOT NULL AND session_id != '' AND agent_id IS NOT NULL AND agent_id != ''
|
|
1096
|
+
GROUP BY session_id, agent_id`,
|
|
1097
|
+
args: []
|
|
1098
|
+
});
|
|
1099
|
+
}
|
|
1100
|
+
} catch {
|
|
1101
|
+
}
|
|
1040
1102
|
try {
|
|
1041
1103
|
await client.execute({
|
|
1042
1104
|
sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
|
|
@@ -1170,8 +1232,30 @@ async function ensureSchema() {
|
|
|
1170
1232
|
});
|
|
1171
1233
|
} catch {
|
|
1172
1234
|
}
|
|
1235
|
+
for (const col of [
|
|
1236
|
+
"ALTER TABLE memories ADD COLUMN intent TEXT",
|
|
1237
|
+
"ALTER TABLE memories ADD COLUMN outcome TEXT",
|
|
1238
|
+
"ALTER TABLE memories ADD COLUMN domain TEXT",
|
|
1239
|
+
"ALTER TABLE memories ADD COLUMN referenced_entities TEXT",
|
|
1240
|
+
"ALTER TABLE memories ADD COLUMN retrieval_count INTEGER DEFAULT 0",
|
|
1241
|
+
"ALTER TABLE memories ADD COLUMN chain_position TEXT",
|
|
1242
|
+
"ALTER TABLE memories ADD COLUMN review_status TEXT",
|
|
1243
|
+
"ALTER TABLE memories ADD COLUMN context_window_pct INTEGER",
|
|
1244
|
+
"ALTER TABLE memories ADD COLUMN file_paths TEXT",
|
|
1245
|
+
"ALTER TABLE memories ADD COLUMN commit_hash TEXT",
|
|
1246
|
+
"ALTER TABLE memories ADD COLUMN duration_ms INTEGER",
|
|
1247
|
+
"ALTER TABLE memories ADD COLUMN token_cost REAL",
|
|
1248
|
+
"ALTER TABLE memories ADD COLUMN audience TEXT",
|
|
1249
|
+
"ALTER TABLE memories ADD COLUMN language_type TEXT",
|
|
1250
|
+
"ALTER TABLE memories ADD COLUMN parent_memory_id TEXT"
|
|
1251
|
+
]) {
|
|
1252
|
+
try {
|
|
1253
|
+
await client.execute(col);
|
|
1254
|
+
} catch {
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1173
1257
|
}
|
|
1174
|
-
var _client, _resilientClient, initTurso;
|
|
1258
|
+
var _client, _resilientClient, _daemonClient, initTurso;
|
|
1175
1259
|
var init_database = __esm({
|
|
1176
1260
|
"src/lib/database.ts"() {
|
|
1177
1261
|
"use strict";
|
|
@@ -1179,6 +1263,7 @@ var init_database = __esm({
|
|
|
1179
1263
|
init_employees();
|
|
1180
1264
|
_client = null;
|
|
1181
1265
|
_resilientClient = null;
|
|
1266
|
+
_daemonClient = null;
|
|
1182
1267
|
initTurso = initDatabase;
|
|
1183
1268
|
}
|
|
1184
1269
|
});
|
|
@@ -1846,39 +1931,75 @@ var init_provider_table = __esm({
|
|
|
1846
1931
|
}
|
|
1847
1932
|
});
|
|
1848
1933
|
|
|
1849
|
-
// src/lib/
|
|
1850
|
-
|
|
1934
|
+
// src/lib/runtime-table.ts
|
|
1935
|
+
var RUNTIME_TABLE;
|
|
1936
|
+
var init_runtime_table = __esm({
|
|
1937
|
+
"src/lib/runtime-table.ts"() {
|
|
1938
|
+
"use strict";
|
|
1939
|
+
RUNTIME_TABLE = {
|
|
1940
|
+
codex: {
|
|
1941
|
+
binary: "codex",
|
|
1942
|
+
launchMode: "exec",
|
|
1943
|
+
autoApproveFlag: "--full-auto",
|
|
1944
|
+
inlineFlag: "--no-alt-screen",
|
|
1945
|
+
apiKeyEnv: "OPENAI_API_KEY",
|
|
1946
|
+
defaultModel: "gpt-5.4"
|
|
1947
|
+
}
|
|
1948
|
+
};
|
|
1949
|
+
}
|
|
1950
|
+
});
|
|
1951
|
+
|
|
1952
|
+
// src/lib/agent-config.ts
|
|
1953
|
+
import { readFileSync as readFileSync3, writeFileSync as writeFileSync2, existsSync as existsSync5, mkdirSync as mkdirSync2 } from "fs";
|
|
1851
1954
|
import path6 from "path";
|
|
1955
|
+
var AGENT_CONFIG_PATH, DEFAULT_MODELS;
|
|
1956
|
+
var init_agent_config = __esm({
|
|
1957
|
+
"src/lib/agent-config.ts"() {
|
|
1958
|
+
"use strict";
|
|
1959
|
+
init_config();
|
|
1960
|
+
init_runtime_table();
|
|
1961
|
+
AGENT_CONFIG_PATH = path6.join(EXE_AI_DIR, "agent-config.json");
|
|
1962
|
+
DEFAULT_MODELS = {
|
|
1963
|
+
claude: "claude-opus-4",
|
|
1964
|
+
codex: RUNTIME_TABLE.codex?.defaultModel ?? "gpt-5.4",
|
|
1965
|
+
opencode: "minimax-m2.7"
|
|
1966
|
+
};
|
|
1967
|
+
}
|
|
1968
|
+
});
|
|
1969
|
+
|
|
1970
|
+
// src/lib/intercom-queue.ts
|
|
1971
|
+
import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, renameSync as renameSync3, existsSync as existsSync6, mkdirSync as mkdirSync3 } from "fs";
|
|
1972
|
+
import path7 from "path";
|
|
1852
1973
|
import os5 from "os";
|
|
1853
1974
|
var QUEUE_PATH, TTL_MS, INTERCOM_LOG;
|
|
1854
1975
|
var init_intercom_queue = __esm({
|
|
1855
1976
|
"src/lib/intercom-queue.ts"() {
|
|
1856
1977
|
"use strict";
|
|
1857
|
-
QUEUE_PATH =
|
|
1978
|
+
QUEUE_PATH = path7.join(os5.homedir(), ".exe-os", "intercom-queue.json");
|
|
1858
1979
|
TTL_MS = 60 * 60 * 1e3;
|
|
1859
|
-
INTERCOM_LOG =
|
|
1980
|
+
INTERCOM_LOG = path7.join(os5.homedir(), ".exe-os", "intercom.log");
|
|
1860
1981
|
}
|
|
1861
1982
|
});
|
|
1862
1983
|
|
|
1863
1984
|
// src/lib/license.ts
|
|
1864
|
-
import { readFileSync as
|
|
1985
|
+
import { readFileSync as readFileSync5, writeFileSync as writeFileSync4, existsSync as existsSync7, mkdirSync as mkdirSync4 } from "fs";
|
|
1865
1986
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
1866
|
-
import
|
|
1987
|
+
import path8 from "path";
|
|
1867
1988
|
import { jwtVerify, importSPKI } from "jose";
|
|
1868
1989
|
var LICENSE_PATH, CACHE_PATH, DEVICE_ID_PATH;
|
|
1869
1990
|
var init_license = __esm({
|
|
1870
1991
|
"src/lib/license.ts"() {
|
|
1871
1992
|
"use strict";
|
|
1872
1993
|
init_config();
|
|
1873
|
-
LICENSE_PATH =
|
|
1874
|
-
CACHE_PATH =
|
|
1875
|
-
DEVICE_ID_PATH =
|
|
1994
|
+
LICENSE_PATH = path8.join(EXE_AI_DIR, "license.key");
|
|
1995
|
+
CACHE_PATH = path8.join(EXE_AI_DIR, "license-cache.json");
|
|
1996
|
+
DEVICE_ID_PATH = path8.join(EXE_AI_DIR, "device-id");
|
|
1876
1997
|
}
|
|
1877
1998
|
});
|
|
1878
1999
|
|
|
1879
2000
|
// src/lib/plan-limits.ts
|
|
1880
|
-
import { readFileSync as
|
|
1881
|
-
import
|
|
2001
|
+
import { readFileSync as readFileSync6, existsSync as existsSync8 } from "fs";
|
|
2002
|
+
import path9 from "path";
|
|
1882
2003
|
var CACHE_PATH2;
|
|
1883
2004
|
var init_plan_limits = __esm({
|
|
1884
2005
|
"src/lib/plan-limits.ts"() {
|
|
@@ -1887,13 +2008,13 @@ var init_plan_limits = __esm({
|
|
|
1887
2008
|
init_employees();
|
|
1888
2009
|
init_license();
|
|
1889
2010
|
init_config();
|
|
1890
|
-
CACHE_PATH2 =
|
|
2011
|
+
CACHE_PATH2 = path9.join(EXE_AI_DIR, "license-cache.json");
|
|
1891
2012
|
}
|
|
1892
2013
|
});
|
|
1893
2014
|
|
|
1894
2015
|
// src/lib/tmux-routing.ts
|
|
1895
|
-
import { readFileSync as
|
|
1896
|
-
import
|
|
2016
|
+
import { readFileSync as readFileSync7, writeFileSync as writeFileSync5, mkdirSync as mkdirSync5, existsSync as existsSync9, appendFileSync } from "fs";
|
|
2017
|
+
import path10 from "path";
|
|
1897
2018
|
import os6 from "os";
|
|
1898
2019
|
import { fileURLToPath } from "url";
|
|
1899
2020
|
function getMySession() {
|
|
@@ -1907,7 +2028,7 @@ function extractRootExe(name) {
|
|
|
1907
2028
|
}
|
|
1908
2029
|
function getParentExe(sessionKey) {
|
|
1909
2030
|
try {
|
|
1910
|
-
const data = JSON.parse(
|
|
2031
|
+
const data = JSON.parse(readFileSync7(path10.join(SESSION_CACHE, `parent-exe-${sessionKey}.json`), "utf8"));
|
|
1911
2032
|
return data.parentExe || null;
|
|
1912
2033
|
} catch {
|
|
1913
2034
|
return null;
|
|
@@ -1936,13 +2057,15 @@ var init_tmux_routing = __esm({
|
|
|
1936
2057
|
init_cc_agent_support();
|
|
1937
2058
|
init_mcp_prefix();
|
|
1938
2059
|
init_provider_table();
|
|
2060
|
+
init_agent_config();
|
|
2061
|
+
init_runtime_table();
|
|
1939
2062
|
init_intercom_queue();
|
|
1940
2063
|
init_plan_limits();
|
|
1941
2064
|
init_employees();
|
|
1942
|
-
SPAWN_LOCK_DIR =
|
|
1943
|
-
SESSION_CACHE =
|
|
1944
|
-
INTERCOM_LOG2 =
|
|
1945
|
-
DEBOUNCE_FILE =
|
|
2065
|
+
SPAWN_LOCK_DIR = path10.join(os6.homedir(), ".exe-os", "spawn-locks");
|
|
2066
|
+
SESSION_CACHE = path10.join(os6.homedir(), ".exe-os", "session-cache");
|
|
2067
|
+
INTERCOM_LOG2 = path10.join(os6.homedir(), ".exe-os", "intercom.log");
|
|
2068
|
+
DEBOUNCE_FILE = path10.join(SESSION_CACHE, "intercom-debounce.json");
|
|
1946
2069
|
DEBOUNCE_CLEANUP_AGE_MS = 5 * 60 * 1e3;
|
|
1947
2070
|
}
|
|
1948
2071
|
});
|
|
@@ -1972,6 +2095,7 @@ var init_task_scope = __esm({
|
|
|
1972
2095
|
});
|
|
1973
2096
|
|
|
1974
2097
|
// src/lib/store.ts
|
|
2098
|
+
import { createHash } from "crypto";
|
|
1975
2099
|
init_database();
|
|
1976
2100
|
|
|
1977
2101
|
// src/lib/keychain.ts
|
|
@@ -2007,12 +2131,20 @@ async function getMasterKey() {
|
|
|
2007
2131
|
}
|
|
2008
2132
|
const keyPath = getKeyPath();
|
|
2009
2133
|
if (!existsSync3(keyPath)) {
|
|
2134
|
+
process.stderr.write(
|
|
2135
|
+
`[keychain] Key not found at ${keyPath} (HOME=${os3.homedir()}, EXE_OS_DIR=${process.env.EXE_OS_DIR ?? "unset"})
|
|
2136
|
+
`
|
|
2137
|
+
);
|
|
2010
2138
|
return null;
|
|
2011
2139
|
}
|
|
2012
2140
|
try {
|
|
2013
2141
|
const content = await readFile3(keyPath, "utf-8");
|
|
2014
2142
|
return Buffer.from(content.trim(), "base64");
|
|
2015
|
-
} catch {
|
|
2143
|
+
} catch (err) {
|
|
2144
|
+
process.stderr.write(
|
|
2145
|
+
`[keychain] Key read failed at ${keyPath}: ${err instanceof Error ? err.message : String(err)}
|
|
2146
|
+
`
|
|
2147
|
+
);
|
|
2016
2148
|
return null;
|
|
2017
2149
|
}
|
|
2018
2150
|
}
|
|
@@ -2106,6 +2238,7 @@ import { realpathSync } from "fs";
|
|
|
2106
2238
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
2107
2239
|
function isMainModule(importMetaUrl) {
|
|
2108
2240
|
if (process.argv[1] == null) return false;
|
|
2241
|
+
if (process.argv[1].includes("mcp/server")) return false;
|
|
2109
2242
|
try {
|
|
2110
2243
|
const scriptPath = realpathSync(process.argv[1]);
|
|
2111
2244
|
const modulePath = realpathSync(fileURLToPath2(importMetaUrl));
|