open-agents-ai 0.103.13 → 0.103.15

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 (2) hide show
  1. package/dist/index.js +83 -43
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -18258,10 +18258,10 @@ ${marker}` : marker);
18258
18258
  if (!this._workingDirectory)
18259
18259
  return;
18260
18260
  try {
18261
- const { mkdirSync: mkdirSync19, writeFileSync: writeFileSync18 } = __require("node:fs");
18261
+ const { mkdirSync: mkdirSync20, writeFileSync: writeFileSync18 } = __require("node:fs");
18262
18262
  const { join: join55 } = __require("node:path");
18263
18263
  const sessionDir = join55(this._workingDirectory, ".oa", "session", this._sessionId);
18264
- mkdirSync19(sessionDir, { recursive: true });
18264
+ mkdirSync20(sessionDir, { recursive: true });
18265
18265
  const checkpoint = {
18266
18266
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
18267
18267
  sessionId: this._sessionId,
@@ -26203,7 +26203,7 @@ import { EventEmitter as EventEmitter3 } from "node:events";
26203
26203
  import { randomBytes as randomBytes7 } from "node:crypto";
26204
26204
  import { URL as URL2 } from "node:url";
26205
26205
  import { loadavg, cpus, totalmem, freemem } from "node:os";
26206
- import { existsSync as existsSync26, readFileSync as readFileSync18, writeFileSync as writeFileSync8, unlinkSync as unlinkSync3 } from "node:fs";
26206
+ import { existsSync as existsSync26, readFileSync as readFileSync18, writeFileSync as writeFileSync8, unlinkSync as unlinkSync3, mkdirSync as mkdirSync8 } from "node:fs";
26207
26207
  import { join as join35 } from "node:path";
26208
26208
  function cleanForwardHeaders(raw, targetHost) {
26209
26209
  const out = {};
@@ -26239,6 +26239,7 @@ function readExposeState(stateDir) {
26239
26239
  }
26240
26240
  function writeExposeState(stateDir, state) {
26241
26241
  try {
26242
+ mkdirSync8(stateDir, { recursive: true });
26242
26243
  writeFileSync8(join35(stateDir, STATE_FILE_NAME), JSON.stringify(state, null, 2));
26243
26244
  } catch {
26244
26245
  }
@@ -26334,6 +26335,8 @@ var init_expose = __esm({
26334
26335
  cloudflaredProcess = null;
26335
26336
  /** PID of detached cloudflared (for killing on stop, even across OA restarts) */
26336
26337
  _cloudflaredPid = null;
26338
+ /** Periodic PID watchdog for reconnect mode (no ChildProcess close event) */
26339
+ _pidWatchdog = null;
26337
26340
  _tunnelUrl = null;
26338
26341
  _authKey;
26339
26342
  _targetUrl;
@@ -26425,9 +26428,11 @@ var init_expose = __esm({
26425
26428
  });
26426
26429
  this._stats.status = "active";
26427
26430
  this.emitStats();
26431
+ this.startPidWatchdog();
26428
26432
  return this._tunnelUrl;
26429
26433
  }
26430
26434
  async stop() {
26435
+ this.stopPidWatchdog();
26431
26436
  if (this._cloudflaredPid && isProcessAlive(this._cloudflaredPid)) {
26432
26437
  try {
26433
26438
  process.kill(this._cloudflaredPid, "SIGTERM");
@@ -26476,8 +26481,10 @@ var init_expose = __esm({
26476
26481
  });
26477
26482
  try {
26478
26483
  await gateway.reconnect(state);
26484
+ options.onInfo?.(`Expose tunnel reconnected: ${state.tunnelUrl}`);
26479
26485
  return gateway;
26480
- } catch {
26486
+ } catch (err) {
26487
+ options.onError?.(`Expose reconnect failed: ${err instanceof Error ? err.message : String(err)}`);
26481
26488
  return null;
26482
26489
  }
26483
26490
  }
@@ -26702,7 +26709,8 @@ var init_expose = __esm({
26702
26709
  this._tunnelUrl = await this.startCloudflared(this._proxyPort);
26703
26710
  this._stats.status = "active";
26704
26711
  this.emitStats();
26705
- this.options.onInfo?.(`Tunnel restarted: ${this._tunnelUrl}`);
26712
+ this.options.onInfo?.(`Tunnel restarted with new URL \u2014 share with consumers:
26713
+ ${this.formatConnectionInfo()}`);
26706
26714
  if (this._stateDir) {
26707
26715
  writeExposeState(this._stateDir, {
26708
26716
  pid: this._cloudflaredPid,
@@ -26718,6 +26726,32 @@ var init_expose = __esm({
26718
26726
  this.options.onError?.(`Tunnel restart failed: ${err instanceof Error ? err.message : String(err)}`);
26719
26727
  }
26720
26728
  }
26729
+ /**
26730
+ * Periodically check if the cloudflared PID is still alive.
26731
+ * Used in reconnect mode where we don't have a ChildProcess close event.
26732
+ * If cloudflared dies, triggers auto-restart.
26733
+ */
26734
+ startPidWatchdog() {
26735
+ this.stopPidWatchdog();
26736
+ this._pidWatchdog = setInterval(() => {
26737
+ if (!this._cloudflaredPid || !isProcessAlive(this._cloudflaredPid)) {
26738
+ this.stopPidWatchdog();
26739
+ if (this._stats.status === "active") {
26740
+ this.options.onInfo?.("Cloudflared tunnel died (detected by watchdog) \u2014 restarting...");
26741
+ this._stats.status = "error";
26742
+ this.emitStats();
26743
+ this.restartCloudflared();
26744
+ }
26745
+ }
26746
+ }, 1e4);
26747
+ this._pidWatchdog.unref();
26748
+ }
26749
+ stopPidWatchdog() {
26750
+ if (this._pidWatchdog) {
26751
+ clearInterval(this._pidWatchdog);
26752
+ this._pidWatchdog = null;
26753
+ }
26754
+ }
26721
26755
  // ── Helpers ─────────────────────────────────────────────────────────────
26722
26756
  findFreePort() {
26723
26757
  return new Promise((resolve31, reject) => {
@@ -26739,6 +26773,7 @@ var init_expose = __esm({
26739
26773
  }
26740
26774
  /** Format connection info for display */
26741
26775
  formatConnectionInfo() {
26776
+ const endpointCmd = `/endpoint ${this._tunnelUrl ?? "<tunnel-url>"} --auth ${this._authKey}`;
26742
26777
  const lines = [];
26743
26778
  lines.push(` ${c2.green("\u25CF")} Expose gateway active`);
26744
26779
  lines.push(` ${c2.cyan("Backend".padEnd(12))} ${this._kind} (${this._targetUrl})`);
@@ -26746,9 +26781,14 @@ var init_expose = __esm({
26746
26781
  lines.push(` ${c2.cyan("Auth Key".padEnd(12))} ${c2.bold(this._authKey)}`);
26747
26782
  lines.push("");
26748
26783
  lines.push(` ${c2.dim("Remote users connect with:")}`);
26749
- lines.push(` ${c2.bold(`/endpoint ${this._tunnelUrl ?? "<tunnel-url>"} --auth ${this._authKey}`)}`);
26784
+ lines.push(` ${c2.bold(endpointCmd)}`);
26750
26785
  lines.push("");
26751
26786
  lines.push(` ${c2.yellow("!")} ${c2.dim("Keep this key secure \u2014 it grants full access to your models.")}`);
26787
+ if ((process.stdout.isTTY ?? false) && this._tunnelUrl) {
26788
+ const b64 = Buffer.from(endpointCmd).toString("base64");
26789
+ lines.push(`\x1B]52;c;${b64}\x07`);
26790
+ lines.push(` ${c2.dim("(copied to clipboard)")}`);
26791
+ }
26752
26792
  return lines.join("\n");
26753
26793
  }
26754
26794
  /** Format usage stats for display */
@@ -26786,7 +26826,7 @@ var init_types = __esm({
26786
26826
 
26787
26827
  // packages/cli/dist/tui/p2p/secret-vault.js
26788
26828
  import { createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2, randomBytes as randomBytes8, scryptSync as scryptSync2, createHash as createHash2 } from "node:crypto";
26789
- import { readFileSync as readFileSync19, writeFileSync as writeFileSync9, existsSync as existsSync27, mkdirSync as mkdirSync8 } from "node:fs";
26829
+ import { readFileSync as readFileSync19, writeFileSync as writeFileSync9, existsSync as existsSync27, mkdirSync as mkdirSync9 } from "node:fs";
26790
26830
  import { join as join36, dirname as dirname13 } from "node:path";
26791
26831
  var PLACEHOLDER_PREFIX, PLACEHOLDER_SUFFIX, CIPHER_ALGO, SALT_LEN, IV_LEN, KEY_LEN, SecretVault;
26792
26832
  var init_secret_vault = __esm({
@@ -27000,7 +27040,7 @@ var init_secret_vault = __esm({
27000
27040
  const blob = Buffer.concat([salt, iv, tag, encrypted]);
27001
27041
  const dir = dirname13(this.storePath);
27002
27042
  if (!existsSync27(dir))
27003
- mkdirSync8(dir, { recursive: true });
27043
+ mkdirSync9(dir, { recursive: true });
27004
27044
  writeFileSync9(this.storePath, blob, { mode: 384 });
27005
27045
  }
27006
27046
  /**
@@ -28382,13 +28422,13 @@ var init_dist6 = __esm({
28382
28422
  });
28383
28423
 
28384
28424
  // packages/cli/dist/tui/oa-directory.js
28385
- import { existsSync as existsSync29, mkdirSync as mkdirSync9, readFileSync as readFileSync21, writeFileSync as writeFileSync10, readdirSync as readdirSync7, statSync as statSync9, unlinkSync as unlinkSync4 } from "node:fs";
28425
+ import { existsSync as existsSync29, mkdirSync as mkdirSync10, readFileSync as readFileSync21, writeFileSync as writeFileSync10, readdirSync as readdirSync7, statSync as statSync9, unlinkSync as unlinkSync4 } from "node:fs";
28386
28426
  import { join as join39, relative as relative2, basename as basename9, extname as extname8 } from "node:path";
28387
28427
  import { homedir as homedir9 } from "node:os";
28388
28428
  function initOaDirectory(repoRoot) {
28389
28429
  const oaPath = join39(repoRoot, OA_DIR);
28390
28430
  for (const sub of SUBDIRS) {
28391
- mkdirSync9(join39(oaPath, sub), { recursive: true });
28431
+ mkdirSync10(join39(oaPath, sub), { recursive: true });
28392
28432
  }
28393
28433
  try {
28394
28434
  const gitignorePath = join39(repoRoot, ".gitignore");
@@ -28418,7 +28458,7 @@ function loadProjectSettings(repoRoot) {
28418
28458
  }
28419
28459
  function saveProjectSettings(repoRoot, settings) {
28420
28460
  const oaPath = join39(repoRoot, OA_DIR);
28421
- mkdirSync9(oaPath, { recursive: true });
28461
+ mkdirSync10(oaPath, { recursive: true });
28422
28462
  const existing = loadProjectSettings(repoRoot);
28423
28463
  const merged = { ...existing, ...settings };
28424
28464
  writeFileSync10(join39(oaPath, "settings.json"), JSON.stringify(merged, null, 2) + "\n", { encoding: "utf-8", mode: 384 });
@@ -28435,7 +28475,7 @@ function loadGlobalSettings() {
28435
28475
  }
28436
28476
  function saveGlobalSettings(settings) {
28437
28477
  const dir = join39(homedir9(), ".open-agents");
28438
- mkdirSync9(dir, { recursive: true });
28478
+ mkdirSync10(dir, { recursive: true });
28439
28479
  const existing = loadGlobalSettings();
28440
28480
  const merged = { ...existing, ...settings };
28441
28481
  writeFileSync10(join39(dir, "settings.json"), JSON.stringify(merged, null, 2) + "\n", { encoding: "utf-8", mode: 384 });
@@ -28560,13 +28600,13 @@ ${tree}\`\`\`
28560
28600
  }
28561
28601
  const content = sections.join("\n");
28562
28602
  const contextDir = join39(repoRoot, OA_DIR, "context");
28563
- mkdirSync9(contextDir, { recursive: true });
28603
+ mkdirSync10(contextDir, { recursive: true });
28564
28604
  writeFileSync10(join39(contextDir, "project-map.md"), content, "utf-8");
28565
28605
  return content;
28566
28606
  }
28567
28607
  function saveSession(repoRoot, session) {
28568
28608
  const historyDir = join39(repoRoot, OA_DIR, "history");
28569
- mkdirSync9(historyDir, { recursive: true });
28609
+ mkdirSync10(historyDir, { recursive: true });
28570
28610
  writeFileSync10(join39(historyDir, `${session.id}.json`), JSON.stringify(session, null, 2), "utf-8");
28571
28611
  }
28572
28612
  function loadRecentSessions(repoRoot, limit = 5) {
@@ -28591,7 +28631,7 @@ function loadRecentSessions(repoRoot, limit = 5) {
28591
28631
  }
28592
28632
  function savePendingTask(repoRoot, task) {
28593
28633
  const historyDir = join39(repoRoot, OA_DIR, "history");
28594
- mkdirSync9(historyDir, { recursive: true });
28634
+ mkdirSync10(historyDir, { recursive: true });
28595
28635
  writeFileSync10(join39(historyDir, PENDING_TASK_FILE), JSON.stringify(task, null, 2) + "\n", "utf-8");
28596
28636
  }
28597
28637
  function loadPendingTask(repoRoot) {
@@ -28611,7 +28651,7 @@ function loadPendingTask(repoRoot) {
28611
28651
  }
28612
28652
  function saveSessionContext(repoRoot, entry) {
28613
28653
  const contextDir = join39(repoRoot, OA_DIR, "context");
28614
- mkdirSync9(contextDir, { recursive: true });
28654
+ mkdirSync10(contextDir, { recursive: true });
28615
28655
  const filePath = join39(contextDir, CONTEXT_SAVE_FILE);
28616
28656
  let ctx;
28617
28657
  try {
@@ -28768,7 +28808,7 @@ function loadUsageFile(filePath) {
28768
28808
  }
28769
28809
  function saveUsageFile(filePath, data) {
28770
28810
  const dir = join39(filePath, "..");
28771
- mkdirSync9(dir, { recursive: true });
28811
+ mkdirSync10(dir, { recursive: true });
28772
28812
  writeFileSync10(filePath, JSON.stringify(data, null, 2) + "\n", { encoding: "utf-8", mode: 384 });
28773
28813
  }
28774
28814
  function recordUsage(kind, value, opts) {
@@ -28874,7 +28914,7 @@ var init_oa_directory = __esm({
28874
28914
  import * as readline from "node:readline";
28875
28915
  import { execSync as execSync25, spawn as spawn15, exec as exec2 } from "node:child_process";
28876
28916
  import { promisify as promisify5 } from "node:util";
28877
- import { existsSync as existsSync30, writeFileSync as writeFileSync11, mkdirSync as mkdirSync10 } from "node:fs";
28917
+ import { existsSync as existsSync30, writeFileSync as writeFileSync11, mkdirSync as mkdirSync11 } from "node:fs";
28878
28918
  import { join as join40 } from "node:path";
28879
28919
  import { homedir as homedir10, platform } from "node:os";
28880
28920
  function detectSystemSpecs() {
@@ -29907,7 +29947,7 @@ async function doSetup(config, rl) {
29907
29947
  `PARAMETER stop "<|endoftext|>"`
29908
29948
  ].join("\n");
29909
29949
  const modelDir2 = join40(homedir10(), ".open-agents", "models");
29910
- mkdirSync10(modelDir2, { recursive: true });
29950
+ mkdirSync11(modelDir2, { recursive: true });
29911
29951
  const modelfilePath = join40(modelDir2, `Modelfile.${customName}`);
29912
29952
  writeFileSync11(modelfilePath, modelfileContent + "\n", "utf8");
29913
29953
  process.stdout.write(` ${c2.dim("Creating model...")} `);
@@ -30016,7 +30056,7 @@ function ensureVenv(log) {
30016
30056
  return null;
30017
30057
  }
30018
30058
  try {
30019
- mkdirSync10(join40(homedir10(), ".open-agents"), { recursive: true });
30059
+ mkdirSync11(join40(homedir10(), ".open-agents"), { recursive: true });
30020
30060
  execSync25(`python3 -m venv "${venvDir}"`, { stdio: "pipe", timeout: 3e4 });
30021
30061
  execSync25(`"${join40(venvDir, "bin", "pip")}" install --upgrade pip`, {
30022
30062
  stdio: "pipe",
@@ -30349,7 +30389,7 @@ async function createExpandedVariantAsync(baseModel, specs, sizeGB) {
30349
30389
  `PARAMETER stop "<|endoftext|>"`
30350
30390
  ].join("\n");
30351
30391
  const modelDir2 = join40(homedir10(), ".open-agents", "models");
30352
- mkdirSync10(modelDir2, { recursive: true });
30392
+ mkdirSync11(modelDir2, { recursive: true });
30353
30393
  const modelfilePath = join40(modelDir2, `Modelfile.${customName}`);
30354
30394
  writeFileSync11(modelfilePath, modelfileContent + "\n", "utf8");
30355
30395
  await execAsync(`ollama create ${customName} -f ${modelfilePath}`, {
@@ -33706,7 +33746,7 @@ var init_carousel = __esm({
33706
33746
  });
33707
33747
 
33708
33748
  // packages/cli/dist/tui/carousel-descriptors.js
33709
- import { existsSync as existsSync32, readFileSync as readFileSync23, writeFileSync as writeFileSync12, mkdirSync as mkdirSync11, readdirSync as readdirSync9 } from "node:fs";
33749
+ import { existsSync as existsSync32, readFileSync as readFileSync23, writeFileSync as writeFileSync12, mkdirSync as mkdirSync12, readdirSync as readdirSync9 } from "node:fs";
33710
33750
  import { join as join42, basename as basename11 } from "node:path";
33711
33751
  function loadToolProfile(repoRoot) {
33712
33752
  const filePath = join42(repoRoot, OA_DIR, "context", TOOL_PROFILE_FILE);
@@ -33720,7 +33760,7 @@ function loadToolProfile(repoRoot) {
33720
33760
  }
33721
33761
  function saveToolProfile(repoRoot, profile) {
33722
33762
  const contextDir = join42(repoRoot, OA_DIR, "context");
33723
- mkdirSync11(contextDir, { recursive: true });
33763
+ mkdirSync12(contextDir, { recursive: true });
33724
33764
  writeFileSync12(join42(contextDir, TOOL_PROFILE_FILE), JSON.stringify(profile, null, 2), "utf-8");
33725
33765
  }
33726
33766
  function categorizeToolCall(toolName) {
@@ -33791,7 +33831,7 @@ function loadCachedDescriptors(repoRoot) {
33791
33831
  }
33792
33832
  function saveCachedDescriptors(repoRoot, phrases, sourceHash) {
33793
33833
  const contextDir = join42(repoRoot, OA_DIR, "context");
33794
- mkdirSync11(contextDir, { recursive: true });
33834
+ mkdirSync12(contextDir, { recursive: true });
33795
33835
  const cached = {
33796
33836
  phrases,
33797
33837
  generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -34059,7 +34099,7 @@ var init_carousel_descriptors = __esm({
34059
34099
  });
34060
34100
 
34061
34101
  // packages/cli/dist/tui/voice.js
34062
- import { existsSync as existsSync33, mkdirSync as mkdirSync12, writeFileSync as writeFileSync13, readFileSync as readFileSync24, unlinkSync as unlinkSync5 } from "node:fs";
34102
+ import { existsSync as existsSync33, mkdirSync as mkdirSync13, writeFileSync as writeFileSync13, readFileSync as readFileSync24, unlinkSync as unlinkSync5 } from "node:fs";
34063
34103
  import { join as join43 } from "node:path";
34064
34104
  import { homedir as homedir12, tmpdir as tmpdir6, platform as platform3 } from "node:os";
34065
34105
  import { execSync as execSync27, spawn as nodeSpawn } from "node:child_process";
@@ -35330,7 +35370,7 @@ Error: ${err2 instanceof Error ? err2.message : String(err2)}`);
35330
35370
  if (this.ort)
35331
35371
  return;
35332
35372
  const arch = process.arch;
35333
- mkdirSync12(voiceDir(), { recursive: true });
35373
+ mkdirSync13(voiceDir(), { recursive: true });
35334
35374
  const pkgPath = join43(voiceDir(), "package.json");
35335
35375
  const expectedDeps = {
35336
35376
  "onnxruntime-node": "^1.21.0",
@@ -35424,7 +35464,7 @@ Error: ${err instanceof Error ? err.message : String(err)}`);
35424
35464
  const configPath = modelConfigPath(id);
35425
35465
  if (existsSync33(onnxPath) && existsSync33(configPath))
35426
35466
  return;
35427
- mkdirSync12(dir, { recursive: true });
35467
+ mkdirSync13(dir, { recursive: true });
35428
35468
  if (!existsSync33(configPath)) {
35429
35469
  renderInfo(`Downloading ${model.label} voice config...`);
35430
35470
  const configResp = await fetch(model.configUrl);
@@ -36334,13 +36374,13 @@ var init_stream_renderer = __esm({
36334
36374
  });
36335
36375
 
36336
36376
  // packages/cli/dist/tui/edit-history.js
36337
- import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync13 } from "node:fs";
36377
+ import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync14 } from "node:fs";
36338
36378
  import { join as join44 } from "node:path";
36339
36379
  function createEditHistoryLogger(repoRoot, sessionId) {
36340
36380
  const historyDir = join44(repoRoot, ".oa", "history");
36341
36381
  const logPath = join44(historyDir, "edits.jsonl");
36342
36382
  try {
36343
- mkdirSync13(historyDir, { recursive: true });
36383
+ mkdirSync14(historyDir, { recursive: true });
36344
36384
  } catch {
36345
36385
  }
36346
36386
  function logToolCall(toolName, toolArgs, success) {
@@ -36480,7 +36520,7 @@ var init_promptLoader3 = __esm({
36480
36520
  });
36481
36521
 
36482
36522
  // packages/cli/dist/tui/dream-engine.js
36483
- import { mkdirSync as mkdirSync14, writeFileSync as writeFileSync14, readFileSync as readFileSync26, existsSync as existsSync35, cpSync, rmSync, readdirSync as readdirSync10 } from "node:fs";
36523
+ import { mkdirSync as mkdirSync15, writeFileSync as writeFileSync14, readFileSync as readFileSync26, existsSync as existsSync35, cpSync, rmSync, readdirSync as readdirSync10 } from "node:fs";
36484
36524
  import { join as join46, basename as basename12 } from "node:path";
36485
36525
  import { execSync as execSync28 } from "node:child_process";
36486
36526
  function loadAutoresearchMemory(repoRoot) {
@@ -36684,7 +36724,7 @@ var init_dream_engine = __esm({
36684
36724
  }
36685
36725
  try {
36686
36726
  const dir = join46(targetPath, "..");
36687
- mkdirSync14(dir, { recursive: true });
36727
+ mkdirSync15(dir, { recursive: true });
36688
36728
  writeFileSync14(targetPath, content, "utf-8");
36689
36729
  return { success: true, output: `Wrote ${content.length} bytes to ${rawPath}`, durationMs: Date.now() - start };
36690
36730
  } catch (err) {
@@ -36773,7 +36813,7 @@ var init_dream_engine = __esm({
36773
36813
  }
36774
36814
  try {
36775
36815
  const dir = join46(targetPath, "..");
36776
- mkdirSync14(dir, { recursive: true });
36816
+ mkdirSync15(dir, { recursive: true });
36777
36817
  writeFileSync14(targetPath, content, "utf-8");
36778
36818
  return { success: true, output: `Wrote ${content.length} bytes to ${rawPath}`, durationMs: Date.now() - start };
36779
36819
  } catch (err) {
@@ -36900,7 +36940,7 @@ var init_dream_engine = __esm({
36900
36940
  startedAt: (/* @__PURE__ */ new Date()).toISOString(),
36901
36941
  results: []
36902
36942
  };
36903
- mkdirSync14(this.dreamsDir, { recursive: true });
36943
+ mkdirSync15(this.dreamsDir, { recursive: true });
36904
36944
  this.saveDreamState();
36905
36945
  try {
36906
36946
  for (let cycle = 1; cycle <= totalCycles; cycle++) {
@@ -37552,7 +37592,7 @@ ${summaryResult}
37552
37592
  *Generated by open-agents autoresearch swarm*
37553
37593
  `;
37554
37594
  try {
37555
- mkdirSync14(this.dreamsDir, { recursive: true });
37595
+ mkdirSync15(this.dreamsDir, { recursive: true });
37556
37596
  writeFileSync14(reportPath, report, "utf-8");
37557
37597
  } catch {
37558
37598
  }
@@ -37621,7 +37661,7 @@ ${summaryResult}
37621
37661
  saveVersionCheckpoint(cycle) {
37622
37662
  const checkpointDir = join46(this.dreamsDir, "checkpoints", `cycle-${cycle}`);
37623
37663
  try {
37624
- mkdirSync14(checkpointDir, { recursive: true });
37664
+ mkdirSync15(checkpointDir, { recursive: true });
37625
37665
  try {
37626
37666
  const gitStatus = execSync28("git status --porcelain", {
37627
37667
  cwd: this.repoRoot,
@@ -38088,7 +38128,7 @@ var init_bless_engine = __esm({
38088
38128
  });
38089
38129
 
38090
38130
  // packages/cli/dist/tui/dmn-engine.js
38091
- import { existsSync as existsSync36, readFileSync as readFileSync27, writeFileSync as writeFileSync15, mkdirSync as mkdirSync15, readdirSync as readdirSync11, unlinkSync as unlinkSync6 } from "node:fs";
38131
+ import { existsSync as existsSync36, readFileSync as readFileSync27, writeFileSync as writeFileSync15, mkdirSync as mkdirSync16, readdirSync as readdirSync11, unlinkSync as unlinkSync6 } from "node:fs";
38092
38132
  import { join as join47, basename as basename13 } from "node:path";
38093
38133
  function buildDMNGatherPrompt(recentTaskSummaries, dueReminders, attentionItems, memoryTopics, capabilities, competence, reflectionBuffer) {
38094
38134
  const competenceReport = competence.length > 0 ? competence.map((c3) => {
@@ -38204,7 +38244,7 @@ var init_dmn_engine = __esm({
38204
38244
  this.repoRoot = repoRoot;
38205
38245
  this.stateDir = join47(repoRoot, ".oa", "dmn");
38206
38246
  this.historyDir = join47(repoRoot, ".oa", "dmn", "cycles");
38207
- mkdirSync15(this.historyDir, { recursive: true });
38247
+ mkdirSync16(this.historyDir, { recursive: true });
38208
38248
  this.loadState();
38209
38249
  }
38210
38250
  get stats() {
@@ -39669,7 +39709,7 @@ var init_tool_policy = __esm({
39669
39709
  });
39670
39710
 
39671
39711
  // packages/cli/dist/tui/telegram-bridge.js
39672
- import { mkdirSync as mkdirSync16, existsSync as existsSync38, unlinkSync as unlinkSync7, readdirSync as readdirSync13, statSync as statSync10 } from "node:fs";
39712
+ import { mkdirSync as mkdirSync17, existsSync as existsSync38, unlinkSync as unlinkSync7, readdirSync as readdirSync13, statSync as statSync10 } from "node:fs";
39673
39713
  import { join as join49, resolve as resolve27 } from "node:path";
39674
39714
  import { writeFile as writeFileAsync } from "node:fs/promises";
39675
39715
  function convertMarkdownToTelegramHTML(md) {
@@ -39998,7 +40038,7 @@ with summary "no_reply" to silently skip without responding.
39998
40038
  this.polling = true;
39999
40039
  this.abortController = new AbortController();
40000
40040
  try {
40001
- mkdirSync16(this.mediaCacheDir, { recursive: true });
40041
+ mkdirSync17(this.mediaCacheDir, { recursive: true });
40002
40042
  } catch {
40003
40043
  }
40004
40044
  this.mediaCacheCleanupTimer = setInterval(() => this.cleanupMediaCache(), 5 * 60 * 1e3);
@@ -42271,7 +42311,7 @@ import { cwd } from "node:process";
42271
42311
  import { resolve as resolve28, join as join50, dirname as dirname17, extname as extname9 } from "node:path";
42272
42312
  import { createRequire as createRequire2 } from "node:module";
42273
42313
  import { fileURLToPath as fileURLToPath12 } from "node:url";
42274
- import { readFileSync as readFileSync29, writeFileSync as writeFileSync16, appendFileSync as appendFileSync3, rmSync as rmSync2, readdirSync as readdirSync14, mkdirSync as mkdirSync17 } from "node:fs";
42314
+ import { readFileSync as readFileSync29, writeFileSync as writeFileSync16, appendFileSync as appendFileSync3, rmSync as rmSync2, readdirSync as readdirSync14, mkdirSync as mkdirSync18 } from "node:fs";
42275
42315
  import { existsSync as existsSync39 } from "node:fs";
42276
42316
  import { homedir as homedir13 } from "node:os";
42277
42317
  function formatTimeAgo(date) {
@@ -43473,7 +43513,7 @@ Rationale: ${proposal.rationale}${provenanceNote}`;
43473
43513
  if (!line.trim())
43474
43514
  return;
43475
43515
  try {
43476
- mkdirSync17(HISTORY_DIR, { recursive: true });
43516
+ mkdirSync18(HISTORY_DIR, { recursive: true });
43477
43517
  appendFileSync3(HISTORY_FILE, line + "\n", "utf8");
43478
43518
  if (Math.random() < 0.02) {
43479
43519
  const all = readFileSync29(HISTORY_FILE, "utf8").trim().split("\n");
@@ -46108,7 +46148,7 @@ __export(eval_exports, {
46108
46148
  evalCommand: () => evalCommand
46109
46149
  });
46110
46150
  import { tmpdir as tmpdir7 } from "node:os";
46111
- import { mkdirSync as mkdirSync18, writeFileSync as writeFileSync17 } from "node:fs";
46151
+ import { mkdirSync as mkdirSync19, writeFileSync as writeFileSync17 } from "node:fs";
46112
46152
  import { join as join53 } from "node:path";
46113
46153
  async function evalCommand(opts, config) {
46114
46154
  const suiteName = opts.suite ?? "basic";
@@ -46235,7 +46275,7 @@ async function evalCommand(opts, config) {
46235
46275
  }
46236
46276
  function createTempEvalRepo() {
46237
46277
  const dir = join53(tmpdir7(), `open-agents-eval-${Date.now()}`);
46238
- mkdirSync18(dir, { recursive: true });
46278
+ mkdirSync19(dir, { recursive: true });
46239
46279
  writeFileSync17(join53(dir, "package.json"), JSON.stringify({ name: "eval-repo", version: "0.0.0" }, null, 2) + "\n", "utf8");
46240
46280
  return dir;
46241
46281
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.103.13",
3
+ "version": "0.103.15",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",