@turmind/halo 1.3.2 → 1.3.4-c3090bf

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/index.js CHANGED
@@ -8,7 +8,7 @@ var __export = (target, all) => {
8
8
  __defProp(target, name, { get: all[name], enumerable: true });
9
9
  };
10
10
 
11
- // packages/cli/src/server-supervisor.ts
11
+ // src/server-supervisor.ts
12
12
  var server_supervisor_exports = {};
13
13
  __export(server_supervisor_exports, {
14
14
  MAX_RESTARTS: () => MAX_RESTARTS,
@@ -114,7 +114,7 @@ async function superviseServer() {
114
114
  }
115
115
  var SUPERVISE_ENV, MAX_RESTARTS, RESTART_WINDOW_MS, RESTART_DELAY_MS, INTENTIONAL_SIGNALS;
116
116
  var init_server_supervisor = __esm({
117
- "packages/cli/src/server-supervisor.ts"() {
117
+ "src/server-supervisor.ts"() {
118
118
  "use strict";
119
119
  SUPERVISE_ENV = "HALO_SUPERVISE";
120
120
  MAX_RESTARTS = 5;
@@ -124,7 +124,7 @@ var init_server_supervisor = __esm({
124
124
  }
125
125
  });
126
126
 
127
- // packages/server/dist/prompts/md-vars.js
127
+ // ../server/dist/prompts/md-vars.js
128
128
  var md_vars_exports = {};
129
129
  __export(md_vars_exports, {
130
130
  buildRenderContext: () => buildRenderContext,
@@ -294,7 +294,7 @@ async function buildRenderContext(opts) {
294
294
  }
295
295
  var PATTERN, ENV_PATTERN, ARG_PATTERN, PARAM_PATH;
296
296
  var init_md_vars = __esm({
297
- "packages/server/dist/prompts/md-vars.js"() {
297
+ "../server/dist/prompts/md-vars.js"() {
298
298
  "use strict";
299
299
  PATTERN = /\{\{\s*([\w-][\w.-]*)\s*\}\}/g;
300
300
  ENV_PATTERN = /<<([A-Z_][A-Z0-9_]*)>>/g;
@@ -303,7 +303,7 @@ var init_md_vars = __esm({
303
303
  }
304
304
  });
305
305
 
306
- // packages/server/dist/prompts/md-loader.js
306
+ // ../server/dist/prompts/md-loader.js
307
307
  import fs3 from "node:fs/promises";
308
308
  import fsSync from "node:fs";
309
309
  import path3 from "node:path";
@@ -448,14 +448,14 @@ function resolveMdFilePath(agentId, fileType, scope, workspaceRoot) {
448
448
  }
449
449
  var HALO_HOME;
450
450
  var init_md_loader = __esm({
451
- "packages/server/dist/prompts/md-loader.js"() {
451
+ "../server/dist/prompts/md-loader.js"() {
452
452
  "use strict";
453
453
  init_md_vars();
454
454
  HALO_HOME = path3.join(homedir3(), ".halo", "global");
455
455
  }
456
456
  });
457
457
 
458
- // packages/server/dist/settings-schema.js
458
+ // ../server/dist/settings-schema.js
459
459
  import fs4 from "node:fs";
460
460
  import path4 from "node:path";
461
461
  import { homedir as homedir4 } from "node:os";
@@ -718,7 +718,7 @@ function loadSettingsSchema(workspaceRoot) {
718
718
  }
719
719
  var GLOBAL_MODELS_DIR, GLOBAL_SKILLS_DIR, GLOBAL_AGENTS_DIR, VALID_TYPES;
720
720
  var init_settings_schema = __esm({
721
- "packages/server/dist/settings-schema.js"() {
721
+ "../server/dist/settings-schema.js"() {
722
722
  "use strict";
723
723
  GLOBAL_MODELS_DIR = path4.join(homedir4(), ".halo", "global", "models");
724
724
  GLOBAL_SKILLS_DIR = path4.join(homedir4(), ".halo", "global", "skills");
@@ -727,7 +727,7 @@ var init_settings_schema = __esm({
727
727
  }
728
728
  });
729
729
 
730
- // packages/server/dist/config.js
730
+ // ../server/dist/config.js
731
731
  var config_exports = {};
732
732
  __export(config_exports, {
733
733
  HALO_GLOBAL_DIR: () => HALO_GLOBAL_DIR,
@@ -1033,7 +1033,7 @@ function getModelsRegistry() {
1033
1033
  }
1034
1034
  var HALO_HOME2, HALO_GLOBAL_DIR, HALO_SECRETS_DIR, _modelsRegistryCache, SYSTEM_CONFIG_PATH, _systemConfigCache, SETTINGS_PATH, _settingsCache, _schemaDefaultsCache, ENV_PATTERN2, _wsSettingsCache, config, HIDDEN_DIRS_DEFAULT, HIDDEN_FILES_DEFAULT;
1035
1035
  var init_config = __esm({
1036
- "packages/server/dist/config.js"() {
1036
+ "../server/dist/config.js"() {
1037
1037
  "use strict";
1038
1038
  init_settings_schema();
1039
1039
  HALO_HOME2 = path5.join(homedir5(), ".halo");
@@ -1259,7 +1259,7 @@ var init_config = __esm({
1259
1259
  }
1260
1260
  });
1261
1261
 
1262
- // packages/server/dist/agents/conversation-repair.js
1262
+ // ../server/dist/agents/conversation-repair.js
1263
1263
  function getToolUseId(block) {
1264
1264
  const b = block;
1265
1265
  if (b.type === "tool_use" && typeof b.id === "string")
@@ -1377,12 +1377,12 @@ function repairConversationMessages(raw, label = "[Repair]") {
1377
1377
  return messages2;
1378
1378
  }
1379
1379
  var init_conversation_repair = __esm({
1380
- "packages/server/dist/agents/conversation-repair.js"() {
1380
+ "../server/dist/agents/conversation-repair.js"() {
1381
1381
  "use strict";
1382
1382
  }
1383
1383
  });
1384
1384
 
1385
- // packages/server/dist/agents/model-error.js
1385
+ // ../server/dist/agents/model-error.js
1386
1386
  function classifyModelError(err) {
1387
1387
  const msg = err instanceof Error ? err.message : String(err);
1388
1388
  const errName = err instanceof Error ? err.name : "";
@@ -1420,12 +1420,12 @@ function classifyKind(msg, errName, httpStatus) {
1420
1420
  return "fatal";
1421
1421
  }
1422
1422
  var init_model_error = __esm({
1423
- "packages/server/dist/agents/model-error.js"() {
1423
+ "../server/dist/agents/model-error.js"() {
1424
1424
  "use strict";
1425
1425
  }
1426
1426
  });
1427
1427
 
1428
- // packages/server/dist/agents/compact.js
1428
+ // ../server/dist/agents/compact.js
1429
1429
  function splitForCompact(messages2) {
1430
1430
  const keepCount = config.compact.keep_messages;
1431
1431
  let cut = Math.max(0, messages2.length - keepCount);
@@ -1472,13 +1472,13 @@ ${summaryText}` }]
1472
1472
  return { compacted: true, messages: [summaryMsg, ...recentMsgs] };
1473
1473
  }
1474
1474
  var init_compact = __esm({
1475
- "packages/server/dist/agents/compact.js"() {
1475
+ "../server/dist/agents/compact.js"() {
1476
1476
  "use strict";
1477
1477
  init_config();
1478
1478
  }
1479
1479
  });
1480
1480
 
1481
- // packages/server/dist/agents/micro-compact.js
1481
+ // ../server/dist/agents/micro-compact.js
1482
1482
  function microCompactMessages(messages2, keepRecent = DEFAULT_KEEP_RECENT) {
1483
1483
  if (!messages2 || messages2.length === 0) {
1484
1484
  return { compacted: false, cleared: 0, messages: messages2 };
@@ -1526,7 +1526,7 @@ function microCompactMessages(messages2, keepRecent = DEFAULT_KEEP_RECENT) {
1526
1526
  }
1527
1527
  var MICRO_COMPACT_PLACEHOLDER, COMPACTABLE_TOOLS, DEFAULT_KEEP_RECENT;
1528
1528
  var init_micro_compact = __esm({
1529
- "packages/server/dist/agents/micro-compact.js"() {
1529
+ "../server/dist/agents/micro-compact.js"() {
1530
1530
  "use strict";
1531
1531
  MICRO_COMPACT_PLACEHOLDER = "[Old tool result content cleared]";
1532
1532
  COMPACTABLE_TOOLS = /* @__PURE__ */ new Set([
@@ -1543,10 +1543,10 @@ var init_micro_compact = __esm({
1543
1543
  }
1544
1544
  });
1545
1545
 
1546
- // packages/server/dist/agents/agent-loop.js
1546
+ // ../server/dist/agents/agent-loop.js
1547
1547
  var TOOL_ERROR_MARKER, TOOL_WARN_MARKER, MODEL_TIMEOUT_ERROR, AgentLoop;
1548
1548
  var init_agent_loop = __esm({
1549
- "packages/server/dist/agents/agent-loop.js"() {
1549
+ "../server/dist/agents/agent-loop.js"() {
1550
1550
  "use strict";
1551
1551
  init_config();
1552
1552
  TOOL_ERROR_MARKER = "__TOOL_ERROR__";
@@ -1627,83 +1627,90 @@ var init_agent_loop = __esm({
1627
1627
  return;
1628
1628
  const toolResults = [];
1629
1629
  let shouldEndTurn = false;
1630
- for (const tu of toolUseBlocks) {
1631
- if (options?.cancelSignal?.aborted)
1632
- return;
1633
- const toolDef = this.toolMap.get(tu.name);
1634
- if (toolDef?.forceEndTurn)
1635
- shouldEndTurn = true;
1636
- const startTime = Date.now();
1637
- let resultContent;
1638
- let resultText;
1639
- let isError = false;
1640
- if (!toolDef) {
1641
- resultContent = `${TOOL_ERROR_MARKER}
1642
- Error: unknown tool "${tu.name}"`;
1643
- resultText = resultContent;
1644
- isError = true;
1645
- } else {
1646
- try {
1647
- const raw = await toolDef.callback(tu.input, options?.cancelSignal);
1648
- if (typeof raw === "string") {
1649
- resultContent = raw;
1650
- resultText = raw;
1651
- } else {
1652
- resultContent = raw;
1653
- resultText = raw.map((b) => b.type === "text" ? b.text : `[image ${b.source.media_type}]`).join("\n");
1654
- }
1655
- } catch (err) {
1630
+ try {
1631
+ for (const tu of toolUseBlocks) {
1632
+ if (options?.cancelSignal?.aborted)
1633
+ return;
1634
+ const toolDef = this.toolMap.get(tu.name);
1635
+ if (toolDef?.forceEndTurn)
1636
+ shouldEndTurn = true;
1637
+ const startTime = Date.now();
1638
+ let resultContent;
1639
+ let resultText;
1640
+ let isError = false;
1641
+ if (!toolDef) {
1656
1642
  resultContent = `${TOOL_ERROR_MARKER}
1657
- Error: ${err instanceof Error ? err.message : String(err)}`;
1643
+ Error: unknown tool "${tu.name}"`;
1658
1644
  resultText = resultContent;
1659
1645
  isError = true;
1646
+ } else {
1647
+ try {
1648
+ const raw = await toolDef.callback(tu.input, options?.cancelSignal);
1649
+ if (typeof raw === "string") {
1650
+ resultContent = raw;
1651
+ resultText = raw;
1652
+ } else {
1653
+ resultContent = raw;
1654
+ resultText = raw.map((b) => b.type === "text" ? b.text : `[image ${b.source.media_type}]`).join("\n");
1655
+ }
1656
+ } catch (err) {
1657
+ resultContent = `${TOOL_ERROR_MARKER}
1658
+ Error: ${err instanceof Error ? err.message : String(err)}`;
1659
+ resultText = resultContent;
1660
+ isError = true;
1661
+ }
1660
1662
  }
1661
- }
1662
- const uiCap = config.limits.toolResultUiMax;
1663
- const resultTextFull = resultText.length > uiCap ? resultText.slice(0, uiCap) + `
1663
+ if (options?.cancelSignal?.aborted)
1664
+ return;
1665
+ const uiCap = config.limits.toolResultUiMax;
1666
+ const resultTextFull = resultText.length > uiCap ? resultText.slice(0, uiCap) + `
1664
1667
 
1665
1668
  [Content truncated: ${resultText.length} chars total, showing first ${uiCap}. Use file_read for the complete content.]` : resultText;
1666
- const cap2 = tu.name === "activate_skill" ? Infinity : config.limits.toolResultMax;
1667
- const truncationNote = (origLen) => `
1669
+ const cap2 = tu.name === "activate_skill" ? Infinity : config.limits.toolResultMax;
1670
+ const truncationNote = (origLen) => `
1668
1671
 
1669
1672
  [Content truncated: ${origLen} chars total, showing first ${cap2}. Re-run with narrower scope (e.g. grep / file_read with offset+limit) to see specific sections.]`;
1670
- if (typeof resultContent === "string" && resultContent.length > cap2) {
1671
- const orig = resultContent.length;
1672
- resultContent = resultContent.slice(0, cap2) + truncationNote(orig);
1673
- resultText = resultContent;
1674
- } else if (Array.isArray(resultContent)) {
1675
- let mutated = false;
1676
- resultContent = resultContent.map((b) => {
1677
- if (b.type === "text" && b.text.length > cap2) {
1678
- mutated = true;
1679
- return { type: "text", text: b.text.slice(0, cap2) + truncationNote(b.text.length) };
1673
+ if (typeof resultContent === "string" && resultContent.length > cap2) {
1674
+ const orig = resultContent.length;
1675
+ resultContent = resultContent.slice(0, cap2) + truncationNote(orig);
1676
+ resultText = resultContent;
1677
+ } else if (Array.isArray(resultContent)) {
1678
+ let mutated = false;
1679
+ resultContent = resultContent.map((b) => {
1680
+ if (b.type === "text" && b.text.length > cap2) {
1681
+ mutated = true;
1682
+ return { type: "text", text: b.text.slice(0, cap2) + truncationNote(b.text.length) };
1683
+ }
1684
+ return b;
1685
+ });
1686
+ if (mutated) {
1687
+ resultText = resultContent.map((b) => b.type === "text" ? b.text : `[image ${b.source.media_type}]`).join("\n");
1680
1688
  }
1681
- return b;
1682
- });
1683
- if (mutated) {
1684
- resultText = resultContent.map((b) => b.type === "text" ? b.text : `[image ${b.source.media_type}]`).join("\n");
1685
1689
  }
1690
+ const durationMs = Date.now() - startTime;
1691
+ toolResults.push({
1692
+ type: "tool_result",
1693
+ tool_use_id: tu.id,
1694
+ content: resultContent,
1695
+ // truncated — LLM-facing only
1696
+ ...isError ? { is_error: true } : {}
1697
+ });
1698
+ yield {
1699
+ type: "tool_result",
1700
+ toolName: tu.name,
1701
+ toolUseId: tu.id,
1702
+ toolResult: resultText,
1703
+ // truncated (LLM cap applied)
1704
+ toolResultFull: resultTextFull,
1705
+ // full — for UI display
1706
+ durationMs
1707
+ };
1708
+ }
1709
+ } finally {
1710
+ if (toolResults.length > 0) {
1711
+ this.messages.push({ role: "user", content: toolResults });
1686
1712
  }
1687
- const durationMs = Date.now() - startTime;
1688
- toolResults.push({
1689
- type: "tool_result",
1690
- tool_use_id: tu.id,
1691
- content: resultContent,
1692
- // truncated — LLM-facing only
1693
- ...isError ? { is_error: true } : {}
1694
- });
1695
- yield {
1696
- type: "tool_result",
1697
- toolName: tu.name,
1698
- toolUseId: tu.id,
1699
- toolResult: resultText,
1700
- // truncated (LLM cap applied)
1701
- toolResultFull: resultTextFull,
1702
- // full — for UI display
1703
- durationMs
1704
- };
1705
1713
  }
1706
- this.messages.push({ role: "user", content: toolResults });
1707
1714
  if (shouldEndTurn) {
1708
1715
  yield { type: "stop", stopReason: "end_turn" };
1709
1716
  return;
@@ -1714,7 +1721,7 @@ Error: ${err instanceof Error ? err.message : String(err)}`;
1714
1721
  }
1715
1722
  });
1716
1723
 
1717
- // packages/server/dist/agents/agent-loader.js
1724
+ // ../server/dist/agents/agent-loader.js
1718
1725
  import fs6 from "node:fs/promises";
1719
1726
  import fsSync2 from "node:fs";
1720
1727
  import path6 from "node:path";
@@ -1997,7 +2004,7 @@ function isTeamMember(team, targetId) {
1997
2004
  }
1998
2005
  var GLOBAL_AGENTS_DIR2, GLOBAL_SKILLS_DIR2, SKILL_ID_RE, ACCESS_RANK;
1999
2006
  var init_agent_loader = __esm({
2000
- "packages/server/dist/agents/agent-loader.js"() {
2007
+ "../server/dist/agents/agent-loader.js"() {
2001
2008
  "use strict";
2002
2009
  init_agent_loop();
2003
2010
  GLOBAL_AGENTS_DIR2 = path6.join(homedir6(), ".halo", "global", "agents");
@@ -2012,7 +2019,7 @@ var init_agent_loader = __esm({
2012
2019
  }
2013
2020
  });
2014
2021
 
2015
- // packages/server/dist/ws/broadcast.js
2022
+ // ../server/dist/ws/broadcast.js
2016
2023
  import path7 from "node:path";
2017
2024
  function setBroadcastWss(wss2) {
2018
2025
  _wss = wss2;
@@ -2058,14 +2065,14 @@ function broadcastToWorkspace(workspacePath, event) {
2058
2065
  }
2059
2066
  var _wss, _workspaceOfClient;
2060
2067
  var init_broadcast = __esm({
2061
- "packages/server/dist/ws/broadcast.js"() {
2068
+ "../server/dist/ws/broadcast.js"() {
2062
2069
  "use strict";
2063
2070
  _wss = null;
2064
2071
  _workspaceOfClient = null;
2065
2072
  }
2066
2073
  });
2067
2074
 
2068
- // packages/server/dist/db/schema.js
2075
+ // ../server/dist/db/schema.js
2069
2076
  var schema_exports = {};
2070
2077
  __export(schema_exports, {
2071
2078
  agentSessions: () => agentSessions,
@@ -2074,7 +2081,7 @@ __export(schema_exports, {
2074
2081
  import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
2075
2082
  var agentSessions, disabledItems;
2076
2083
  var init_schema = __esm({
2077
- "packages/server/dist/db/schema.js"() {
2084
+ "../server/dist/db/schema.js"() {
2078
2085
  "use strict";
2079
2086
  agentSessions = sqliteTable("agent_sessions", {
2080
2087
  id: text("id").primaryKey(),
@@ -2115,7 +2122,7 @@ var init_schema = __esm({
2115
2122
  }
2116
2123
  });
2117
2124
 
2118
- // packages/server/dist/init.js
2125
+ // ../server/dist/init.js
2119
2126
  var init_exports = {};
2120
2127
  __export(init_exports, {
2121
2128
  TEMPLATES_DIR: () => TEMPLATES_DIR,
@@ -2482,7 +2489,7 @@ function ensureWorkspaceHalo(workspaceRoot) {
2482
2489
  }
2483
2490
  var __dirname, TEMPLATES_DIR, DOCS_SRC_CANDIDATES, TEMPLATE_VERSION, VERSION_FILE, SKIP_NAMES, BUILTIN_AGENT_IDS, BUILTIN_SKILL_IDS, BUNDLED_DOCS, INSTALLED_OPTIONAL_SKILLS_FILE;
2484
2491
  var init_init = __esm({
2485
- "packages/server/dist/init.js"() {
2492
+ "../server/dist/init.js"() {
2486
2493
  "use strict";
2487
2494
  __dirname = path8.dirname(fileURLToPath(import.meta.url));
2488
2495
  TEMPLATES_DIR = path8.resolve(__dirname, "..", "templates");
@@ -2490,7 +2497,7 @@ var init_init = __esm({
2490
2497
  path8.resolve(__dirname, "..", "bundled-docs"),
2491
2498
  path8.resolve(__dirname, "..", "..", "..", ".halo", "docs")
2492
2499
  ];
2493
- TEMPLATE_VERSION = 59;
2500
+ TEMPLATE_VERSION = 60;
2494
2501
  VERSION_FILE = ".template-version";
2495
2502
  SKIP_NAMES = /* @__PURE__ */ new Set([".DS_Store", "schema.sql", "__pycache__", ".pytest_cache"]);
2496
2503
  BUILTIN_AGENT_IDS = /* @__PURE__ */ new Set([
@@ -2555,7 +2562,7 @@ var init_init = __esm({
2555
2562
  }
2556
2563
  });
2557
2564
 
2558
- // packages/server/dist/db/migrate.js
2565
+ // ../server/dist/db/migrate.js
2559
2566
  function runMigrations(sqlite, migrations) {
2560
2567
  const current = sqlite.pragma("user_version", { simple: true });
2561
2568
  if (current > migrations.length) {
@@ -2576,12 +2583,12 @@ function addColumnIfMissing(sqlite, table, column, decl) {
2576
2583
  sqlite.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${decl}`);
2577
2584
  }
2578
2585
  var init_migrate = __esm({
2579
- "packages/server/dist/db/migrate.js"() {
2586
+ "../server/dist/db/migrate.js"() {
2580
2587
  "use strict";
2581
2588
  }
2582
2589
  });
2583
2590
 
2584
- // packages/server/dist/db/index.js
2591
+ // ../server/dist/db/index.js
2585
2592
  import Database from "better-sqlite3";
2586
2593
  import { drizzle } from "drizzle-orm/better-sqlite3";
2587
2594
  import { eq, and } from "drizzle-orm";
@@ -2644,7 +2651,7 @@ function toggleDisabled(db, itemType, itemId, scope) {
2644
2651
  }
2645
2652
  var SCHEMA_SQL_PATH, HALO_MIGRATIONS, dbCache;
2646
2653
  var init_db = __esm({
2647
- "packages/server/dist/db/index.js"() {
2654
+ "../server/dist/db/index.js"() {
2648
2655
  "use strict";
2649
2656
  init_schema();
2650
2657
  init_init();
@@ -2670,7 +2677,7 @@ var init_db = __esm({
2670
2677
  }
2671
2678
  });
2672
2679
 
2673
- // packages/server/dist/agents/session-tools.js
2680
+ // ../server/dist/agents/session-tools.js
2674
2681
  async function callerTeamFor(sm, sessionId) {
2675
2682
  const callerId = sm.sessions.get(sessionId)?.agentId;
2676
2683
  if (!callerId)
@@ -2932,8 +2939,25 @@ ${skillInfo}` : ""
2932
2939
  queryAgentTool
2933
2940
  ];
2934
2941
  }
2942
+ function buildContinueTaskTool(sm, sessionId) {
2943
+ return {
2944
+ name: "continue_task",
2945
+ description: "Call this when your turn was started by an interruption (a user or parent message arrived while you were working) and the task you were doing is NOT finished yet. After your current reply ends, the session automatically resumes the interrupted task. Do NOT call it if the task is done, if the user told you to stop, or in a normal (uninterrupted) turn \u2014 it does nothing there. The flag lasts one turn: if you get interrupted again before resuming, call it again.",
2946
+ inputSchema: { type: "object", properties: {} },
2947
+ callback: async () => {
2948
+ switch (sm.requestSelfKick(sessionId)) {
2949
+ case "set":
2950
+ return JSON.stringify({ code: 0, message: "Continue flag set. Finish your current reply \u2014 the interrupted task resumes automatically right after." });
2951
+ case "not_interrupted":
2952
+ return JSON.stringify({ code: 0, message: "This turn was not started by an interruption \u2014 nothing to resume. Just keep working normally; do not call this again this turn." });
2953
+ case "no_turn":
2954
+ return JSON.stringify({ code: 1, error: "Turn already ended (stopped) \u2014 flag not set." });
2955
+ }
2956
+ }
2957
+ };
2958
+ }
2935
2959
  var init_session_tools = __esm({
2936
- "packages/server/dist/agents/session-tools.js"() {
2960
+ "../server/dist/agents/session-tools.js"() {
2937
2961
  "use strict";
2938
2962
  init_config();
2939
2963
  init_agent_loader();
@@ -2941,7 +2965,7 @@ var init_session_tools = __esm({
2941
2965
  }
2942
2966
  });
2943
2967
 
2944
- // packages/server/dist/sessions/session-archive.js
2968
+ // ../server/dist/sessions/session-archive.js
2945
2969
  import fsSync3 from "node:fs";
2946
2970
  import fs9 from "node:fs/promises";
2947
2971
  import path10 from "node:path";
@@ -3004,13 +3028,13 @@ async function deleteArchiveSegments(dir, seg) {
3004
3028
  }
3005
3029
  var ARCHIVE_SIZE_THRESHOLD;
3006
3030
  var init_session_archive = __esm({
3007
- "packages/server/dist/sessions/session-archive.js"() {
3031
+ "../server/dist/sessions/session-archive.js"() {
3008
3032
  "use strict";
3009
3033
  ARCHIVE_SIZE_THRESHOLD = 3 * 1024 * 1024;
3010
3034
  }
3011
3035
  });
3012
3036
 
3013
- // packages/server/dist/sessions/session-store.js
3037
+ // ../server/dist/sessions/session-store.js
3014
3038
  import fsSync4 from "node:fs";
3015
3039
  import fs10 from "node:fs/promises";
3016
3040
  import path11 from "node:path";
@@ -3254,13 +3278,13 @@ function findAndUpdateSessionTitle(sessionId, title, projectPath) {
3254
3278
  return false;
3255
3279
  }
3256
3280
  var init_session_store = __esm({
3257
- "packages/server/dist/sessions/session-store.js"() {
3281
+ "../server/dist/sessions/session-store.js"() {
3258
3282
  "use strict";
3259
3283
  init_session_archive();
3260
3284
  }
3261
3285
  });
3262
3286
 
3263
- // packages/server/dist/agents/goal-mode.js
3287
+ // ../server/dist/agents/goal-mode.js
3264
3288
  import fs11 from "node:fs";
3265
3289
  import path12 from "node:path";
3266
3290
  import { createHash } from "node:crypto";
@@ -3732,7 +3756,7 @@ function sweepActiveGoals(host) {
3732
3756
  }
3733
3757
  var GOAL_AGENT_ID, DEFAULT_GOAL_CAPS, NO_PROGRESS_LIMIT, DELEGATED_DECISION_CAP, WORKER_RECENT_MAX_MESSAGES, WORKER_RECENT_MSG_CHARS, WORKER_RECENT_TOTAL_CHARS, NEED_INPUT_MARKER;
3734
3758
  var init_goal_mode = __esm({
3735
- "packages/server/dist/agents/goal-mode.js"() {
3759
+ "../server/dist/agents/goal-mode.js"() {
3736
3760
  "use strict";
3737
3761
  init_schema();
3738
3762
  init_session_store();
@@ -3753,7 +3777,7 @@ var init_goal_mode = __esm({
3753
3777
  }
3754
3778
  });
3755
3779
 
3756
- // packages/server/dist/channels/shared/i18n.js
3780
+ // ../server/dist/channels/shared/i18n.js
3757
3781
  function getLang(account) {
3758
3782
  const v = account.language;
3759
3783
  return v === "en" || v === "zh" ? v : "en";
@@ -3772,7 +3796,7 @@ function t(key, lang, params) {
3772
3796
  }
3773
3797
  var messages;
3774
3798
  var init_i18n = __esm({
3775
- "packages/server/dist/channels/shared/i18n.js"() {
3799
+ "../server/dist/channels/shared/i18n.js"() {
3776
3800
  "use strict";
3777
3801
  messages = {
3778
3802
  // ── /help ──
@@ -3941,10 +3965,10 @@ var init_i18n = __esm({
3941
3965
  }
3942
3966
  });
3943
3967
 
3944
- // packages/server/dist/commands/registry.js
3968
+ // ../server/dist/commands/registry.js
3945
3969
  var CommandRegistry;
3946
3970
  var init_registry = __esm({
3947
- "packages/server/dist/commands/registry.js"() {
3971
+ "../server/dist/commands/registry.js"() {
3948
3972
  "use strict";
3949
3973
  CommandRegistry = class {
3950
3974
  descriptors = /* @__PURE__ */ new Map();
@@ -3958,13 +3982,13 @@ var init_registry = __esm({
3958
3982
  }
3959
3983
  });
3960
3984
 
3961
- // packages/server/dist/commands/index.js
3985
+ // ../server/dist/commands/index.js
3962
3986
  function builtinCommandNames() {
3963
3987
  return commandRegistry.listDescriptors().filter((d) => d.source === "builtin").map((d) => d.name);
3964
3988
  }
3965
3989
  var commandRegistry;
3966
3990
  var init_commands = __esm({
3967
- "packages/server/dist/commands/index.js"() {
3991
+ "../server/dist/commands/index.js"() {
3968
3992
  "use strict";
3969
3993
  init_registry();
3970
3994
  commandRegistry = new CommandRegistry();
@@ -4014,7 +4038,7 @@ var init_commands = __esm({
4014
4038
  }
4015
4039
  });
4016
4040
 
4017
- // packages/server/dist/commands/skill-command.js
4041
+ // ../server/dist/commands/skill-command.js
4018
4042
  import fs12 from "node:fs/promises";
4019
4043
  import path13 from "node:path";
4020
4044
  async function scanDir(dir) {
@@ -4157,7 +4181,7 @@ ${body}`;
4157
4181
  return "ok";
4158
4182
  }
4159
4183
  var init_skill_command = __esm({
4160
- "packages/server/dist/commands/skill-command.js"() {
4184
+ "../server/dist/commands/skill-command.js"() {
4161
4185
  "use strict";
4162
4186
  init_commands();
4163
4187
  init_agent_loader();
@@ -4167,7 +4191,7 @@ var init_skill_command = __esm({
4167
4191
  }
4168
4192
  });
4169
4193
 
4170
- // packages/server/dist/db/evo-db.js
4194
+ // ../server/dist/db/evo-db.js
4171
4195
  import Database2 from "better-sqlite3";
4172
4196
  import { drizzle as drizzle2 } from "drizzle-orm/better-sqlite3";
4173
4197
  import { sqliteTable as sqliteTable2, text as text2, integer as integer2 } from "drizzle-orm/sqlite-core";
@@ -4192,7 +4216,7 @@ function getEvoDb() {
4192
4216
  }
4193
4217
  var evolutionRuns, evolutionApplies, CREATE_SQL, _evoDb;
4194
4218
  var init_evo_db = __esm({
4195
- "packages/server/dist/db/evo-db.js"() {
4219
+ "../server/dist/db/evo-db.js"() {
4196
4220
  "use strict";
4197
4221
  init_migrate();
4198
4222
  evolutionRuns = sqliteTable2("evolution_runs", {
@@ -4275,7 +4299,7 @@ CREATE INDEX IF NOT EXISTS idx_evo_applies_archived ON evolution_applies(archive
4275
4299
  }
4276
4300
  });
4277
4301
 
4278
- // packages/server/dist/paths.js
4302
+ // ../server/dist/paths.js
4279
4303
  import path15 from "node:path";
4280
4304
  import { homedir as homedir8 } from "node:os";
4281
4305
  function haloHome() {
@@ -4321,12 +4345,12 @@ function evoApplyLogFile(applyId) {
4321
4345
  return path15.join(evoLogsDir(), `apply-${applyId}.log`);
4322
4346
  }
4323
4347
  var init_paths = __esm({
4324
- "packages/server/dist/paths.js"() {
4348
+ "../server/dist/paths.js"() {
4325
4349
  "use strict";
4326
4350
  }
4327
4351
  });
4328
4352
 
4329
- // packages/server/dist/evolution/enqueue.js
4353
+ // ../server/dist/evolution/enqueue.js
4330
4354
  import fs14 from "node:fs";
4331
4355
  import path16 from "node:path";
4332
4356
  import { homedir as homedir9 } from "node:os";
@@ -4611,14 +4635,14 @@ function enqueueEvoRun(input) {
4611
4635
  return { ok: true, runId, runDir };
4612
4636
  }
4613
4637
  var init_enqueue = __esm({
4614
- "packages/server/dist/evolution/enqueue.js"() {
4638
+ "../server/dist/evolution/enqueue.js"() {
4615
4639
  "use strict";
4616
4640
  init_evo_db();
4617
4641
  init_paths();
4618
4642
  }
4619
4643
  });
4620
4644
 
4621
- // packages/server/dist/channels/shared/commands.js
4645
+ // ../server/dist/channels/shared/commands.js
4622
4646
  import fs15 from "node:fs";
4623
4647
  import path17 from "node:path";
4624
4648
  import os from "node:os";
@@ -5344,7 +5368,7 @@ function execWsSwitch(ctx, arg) {
5344
5368
  }
5345
5369
  var ALIASES_FILE, aliasCache, CHANNEL_LIST_LIMIT, DISPATCH_COMMANDS, NOT_ROUTED, SUBCOMMAND_ROUTES;
5346
5370
  var init_commands2 = __esm({
5347
- "packages/server/dist/channels/shared/commands.js"() {
5371
+ "../server/dist/channels/shared/commands.js"() {
5348
5372
  "use strict";
5349
5373
  init_agent_loader();
5350
5374
  init_init();
@@ -5419,7 +5443,7 @@ var init_commands2 = __esm({
5419
5443
  }
5420
5444
  });
5421
5445
 
5422
- // packages/server/dist/agents/relay.js
5446
+ // ../server/dist/agents/relay.js
5423
5447
  import fs16 from "node:fs";
5424
5448
  import path18 from "node:path";
5425
5449
  import { and as and3, eq as eq3, isNull as isNull2 } from "drizzle-orm";
@@ -5656,7 +5680,7 @@ ${params.message}`;
5656
5680
  }
5657
5681
  var _registry, WORKSPACE_SESSION_PROPS;
5658
5682
  var init_relay = __esm({
5659
- "packages/server/dist/agents/relay.js"() {
5683
+ "../server/dist/agents/relay.js"() {
5660
5684
  "use strict";
5661
5685
  init_schema();
5662
5686
  init_config();
@@ -5669,7 +5693,7 @@ var init_relay = __esm({
5669
5693
  }
5670
5694
  });
5671
5695
 
5672
- // packages/server/dist/db/runs-db.js
5696
+ // ../server/dist/db/runs-db.js
5673
5697
  import Database3 from "better-sqlite3";
5674
5698
  import { drizzle as drizzle3 } from "drizzle-orm/better-sqlite3";
5675
5699
  import { sqliteTable as sqliteTable3, text as text3, integer as integer3, primaryKey } from "drizzle-orm/sqlite-core";
@@ -5711,7 +5735,7 @@ function listRunningWorkspaces() {
5711
5735
  }
5712
5736
  var runningSessions, CREATE_SQL2, _runsDb;
5713
5737
  var init_runs_db = __esm({
5714
- "packages/server/dist/db/runs-db.js"() {
5738
+ "../server/dist/db/runs-db.js"() {
5715
5739
  "use strict";
5716
5740
  init_migrate();
5717
5741
  runningSessions = sqliteTable3("running_sessions", {
@@ -5733,7 +5757,7 @@ CREATE TABLE IF NOT EXISTS running_sessions (
5733
5757
  }
5734
5758
  });
5735
5759
 
5736
- // packages/server/dist/agents/run-ledger.js
5760
+ // ../server/dist/agents/run-ledger.js
5737
5761
  import fs18 from "node:fs";
5738
5762
  import path20 from "node:path";
5739
5763
  import YAML7 from "yaml";
@@ -5764,7 +5788,7 @@ function sweepInterruptedRuns(host) {
5764
5788
  continue;
5765
5789
  if (isInternalAgent2(row.agentId, host.workspaceRoot))
5766
5790
  continue;
5767
- const nudge = `[System] The server restarted at ${restartedAt} while you were mid-run. Any sub-agents you had running were cut off and are now marked stopped \u2014 no further reports will arrive from them. Their partial work is on disk. Review your own transcript and decide whether to resume: re-dispatch with query_session("<id>", ...) to revive a stopped sub-agent with its context intact, or drop the task.`;
5791
+ const nudge = `[System] The server restarted at ${restartedAt} while you were mid-turn. Your conversation history up to your last completed tool call is intact; the tool call that was in flight when the process died was cut off, and its result may or may not have landed on disk \u2014 check before repeating anything with side effects. Look at what you were doing right before this message and continue the task from there; do not start over or wait for more input. If you had sub-agents running, they were cut off too (marked stopped, no further reports will arrive) \u2014 re-dispatch with query_session("<id>", ...) to revive one with its context intact.`;
5768
5792
  host.appendUserMessage(rootId, nudge);
5769
5793
  host.sendUserMessage(rootId, nudge).catch((err) => {
5770
5794
  console.error(`[RunLedger] Restart nudge failed for ${rootId}: ${err instanceof Error ? err.message : String(err)}`);
@@ -5774,7 +5798,7 @@ function sweepInterruptedRuns(host) {
5774
5798
  console.log(`[RunLedger] Boot sweep (${host.workspaceRoot}): nudged ${nudged} interrupted root(s)`);
5775
5799
  }
5776
5800
  var init_run_ledger = __esm({
5777
- "packages/server/dist/agents/run-ledger.js"() {
5801
+ "../server/dist/agents/run-ledger.js"() {
5778
5802
  "use strict";
5779
5803
  init_schema();
5780
5804
  init_runs_db();
@@ -5783,7 +5807,7 @@ var init_run_ledger = __esm({
5783
5807
  }
5784
5808
  });
5785
5809
 
5786
- // packages/server/dist/agents/workspace-runtime-lock.js
5810
+ // ../server/dist/agents/workspace-runtime-lock.js
5787
5811
  import fs19 from "node:fs";
5788
5812
  import path21 from "node:path";
5789
5813
  function isPidAlive(pid) {
@@ -5831,19 +5855,19 @@ function claimWorkspaceRuntime(workspaceRoot) {
5831
5855
  }
5832
5856
  var RUNTIME_LOCK_FILE;
5833
5857
  var init_workspace_runtime_lock = __esm({
5834
- "packages/server/dist/agents/workspace-runtime-lock.js"() {
5858
+ "../server/dist/agents/workspace-runtime-lock.js"() {
5835
5859
  "use strict";
5836
5860
  RUNTIME_LOCK_FILE = "runtime.lock";
5837
5861
  }
5838
5862
  });
5839
5863
 
5840
- // packages/core/dist/workspace/workspace.js
5864
+ // ../core/dist/workspace/workspace.js
5841
5865
  import { readFile, writeFile, mkdir } from "node:fs/promises";
5842
5866
  import { realpathSync } from "node:fs";
5843
5867
  import { resolve, isAbsolute, sep } from "node:path";
5844
5868
  var WorkspaceError, Workspace;
5845
5869
  var init_workspace = __esm({
5846
- "packages/core/dist/workspace/workspace.js"() {
5870
+ "../core/dist/workspace/workspace.js"() {
5847
5871
  "use strict";
5848
5872
  WorkspaceError = class extends Error {
5849
5873
  constructor(message) {
@@ -5888,13 +5912,13 @@ var init_workspace = __esm({
5888
5912
  }
5889
5913
  });
5890
5914
 
5891
- // packages/core/dist/workspace/git-manager.js
5915
+ // ../core/dist/workspace/git-manager.js
5892
5916
  import path22 from "node:path";
5893
5917
  import { promises as fs20 } from "node:fs";
5894
5918
  import simpleGit from "simple-git";
5895
5919
  var GitManagerError, GitManager;
5896
5920
  var init_git_manager = __esm({
5897
- "packages/core/dist/workspace/git-manager.js"() {
5921
+ "../core/dist/workspace/git-manager.js"() {
5898
5922
  "use strict";
5899
5923
  GitManagerError = class extends Error {
5900
5924
  constructor(message) {
@@ -6263,7 +6287,7 @@ var init_git_manager = __esm({
6263
6287
  }
6264
6288
  });
6265
6289
 
6266
- // packages/core/dist/media/mime.js
6290
+ // ../core/dist/media/mime.js
6267
6291
  function normalizeExt(ext) {
6268
6292
  const lower = ext.toLowerCase();
6269
6293
  return lower.startsWith(".") ? lower : `.${lower}`;
@@ -6276,7 +6300,7 @@ function extFromImageMime(mime) {
6276
6300
  }
6277
6301
  var PHOTO_MIME_BY_EXT, SERVE_ONLY_MIME_BY_EXT, IMAGE_MIME_BY_EXT, EXT_BY_PHOTO_MIME, IMAGE_EXTS;
6278
6302
  var init_mime = __esm({
6279
- "packages/core/dist/media/mime.js"() {
6303
+ "../core/dist/media/mime.js"() {
6280
6304
  "use strict";
6281
6305
  PHOTO_MIME_BY_EXT = {
6282
6306
  ".png": "image/png",
@@ -6300,9 +6324,9 @@ var init_mime = __esm({
6300
6324
  }
6301
6325
  });
6302
6326
 
6303
- // packages/core/dist/index.js
6327
+ // ../core/dist/index.js
6304
6328
  var init_dist = __esm({
6305
- "packages/core/dist/index.js"() {
6329
+ "../core/dist/index.js"() {
6306
6330
  "use strict";
6307
6331
  init_workspace();
6308
6332
  init_git_manager();
@@ -6310,7 +6334,7 @@ var init_dist = __esm({
6310
6334
  }
6311
6335
  });
6312
6336
 
6313
- // packages/server/dist/channels/shared/media-store.js
6337
+ // ../server/dist/channels/shared/media-store.js
6314
6338
  import fs21 from "node:fs/promises";
6315
6339
  import path23 from "node:path";
6316
6340
  import { randomBytes } from "node:crypto";
@@ -6371,7 +6395,7 @@ async function saveInboundMedia(params) {
6371
6395
  }
6372
6396
  var VISION_IMAGE_MIME_TYPES, EXT_BY_AV_MIME;
6373
6397
  var init_media_store = __esm({
6374
- "packages/server/dist/channels/shared/media-store.js"() {
6398
+ "../server/dist/channels/shared/media-store.js"() {
6375
6399
  "use strict";
6376
6400
  init_dist();
6377
6401
  VISION_IMAGE_MIME_TYPES = ["image/jpeg", "image/png", "image/gif", "image/webp"];
@@ -6389,7 +6413,7 @@ var init_media_store = __esm({
6389
6413
  }
6390
6414
  });
6391
6415
 
6392
- // packages/server/dist/sessions/ui-log-builder.js
6416
+ // ../server/dist/sessions/ui-log-builder.js
6393
6417
  import { randomUUID } from "node:crypto";
6394
6418
  function createEmptyUIState() {
6395
6419
  return {
@@ -6793,19 +6817,19 @@ function applyEvent(state, event) {
6793
6817
  }
6794
6818
  var msgCounter;
6795
6819
  var init_ui_log_builder = __esm({
6796
- "packages/server/dist/sessions/ui-log-builder.js"() {
6820
+ "../server/dist/sessions/ui-log-builder.js"() {
6797
6821
  "use strict";
6798
6822
  msgCounter = 0;
6799
6823
  }
6800
6824
  });
6801
6825
 
6802
- // packages/server/dist/agents/session-ui-store.js
6826
+ // ../server/dist/agents/session-ui-store.js
6803
6827
  import fsSync5 from "node:fs";
6804
6828
  import path24 from "node:path";
6805
6829
  import { eq as eq6 } from "drizzle-orm";
6806
6830
  var UI_STATE_IDLE_TTL_MS, UI_STATE_SWEEP_PERIOD_MS, SessionUIStore;
6807
6831
  var init_session_ui_store = __esm({
6808
- "packages/server/dist/agents/session-ui-store.js"() {
6832
+ "../server/dist/agents/session-ui-store.js"() {
6809
6833
  "use strict";
6810
6834
  init_broadcast();
6811
6835
  init_schema();
@@ -7319,11 +7343,11 @@ var init_session_ui_store = __esm({
7319
7343
  }
7320
7344
  });
7321
7345
 
7322
- // packages/server/dist/agents/session-query-store.js
7346
+ // ../server/dist/agents/session-query-store.js
7323
7347
  import { eq as eq7, and as and5, isNull as isNull3, desc, lt, gte, inArray } from "drizzle-orm";
7324
7348
  var SessionQueryStore;
7325
7349
  var init_session_query_store = __esm({
7326
- "packages/server/dist/agents/session-query-store.js"() {
7350
+ "../server/dist/agents/session-query-store.js"() {
7327
7351
  "use strict";
7328
7352
  init_schema();
7329
7353
  init_session_store();
@@ -7550,7 +7574,7 @@ var init_session_query_store = __esm({
7550
7574
  }
7551
7575
  });
7552
7576
 
7553
- // packages/server/dist/agents/bedrock-agent.js
7577
+ // ../server/dist/agents/bedrock-agent.js
7554
7578
  import { BedrockRuntimeClient, InvokeModelCommand } from "@aws-sdk/client-bedrock-runtime";
7555
7579
  function effortToBudget(effort, maxTokens) {
7556
7580
  const table = {
@@ -7572,7 +7596,7 @@ function extractRegionFromEndpoint(endpoint) {
7572
7596
  }
7573
7597
  var BedrockAgent;
7574
7598
  var init_bedrock_agent = __esm({
7575
- "packages/server/dist/agents/bedrock-agent.js"() {
7599
+ "../server/dist/agents/bedrock-agent.js"() {
7576
7600
  "use strict";
7577
7601
  init_config();
7578
7602
  init_agent_loop();
@@ -7702,7 +7726,7 @@ var init_bedrock_agent = __esm({
7702
7726
  }
7703
7727
  });
7704
7728
 
7705
- // packages/server/dist/agents/deepseek-agent.js
7729
+ // ../server/dist/agents/deepseek-agent.js
7706
7730
  function safeParse(json) {
7707
7731
  try {
7708
7732
  return JSON.parse(json || "{}");
@@ -7712,7 +7736,7 @@ function safeParse(json) {
7712
7736
  }
7713
7737
  var DeepSeekAgent;
7714
7738
  var init_deepseek_agent = __esm({
7715
- "packages/server/dist/agents/deepseek-agent.js"() {
7739
+ "../server/dist/agents/deepseek-agent.js"() {
7716
7740
  "use strict";
7717
7741
  init_config();
7718
7742
  init_agent_loop();
@@ -7841,10 +7865,25 @@ var init_deepseek_agent = __esm({
7841
7865
  }
7842
7866
  return results;
7843
7867
  }
7868
+ /** Block arrays become OpenAI content parts — text as-is, image blocks as
7869
+ * `image_url` data URLs (same shape as Kimi). Only `deepseek-flash`
7870
+ * actually sees images — the registry has `image: false` on v4-pro, so the
7871
+ * session manager strips them before they reach here for that model. */
7844
7872
  convertUserContent(content) {
7845
7873
  if (typeof content === "string")
7846
7874
  return content;
7847
- return content.filter((b) => b.type === "text").map((b) => b.text).join("\n");
7875
+ const parts = [];
7876
+ for (const block of content) {
7877
+ if (block.type === "text") {
7878
+ parts.push({ type: "text", text: block.text });
7879
+ } else if (block.type === "image") {
7880
+ parts.push({
7881
+ type: "image_url",
7882
+ image_url: { url: `data:${block.source.media_type};base64,${block.source.data}` }
7883
+ });
7884
+ }
7885
+ }
7886
+ return parts;
7848
7887
  }
7849
7888
  convertAssistantMessage(msg) {
7850
7889
  const results = [];
@@ -7892,7 +7931,7 @@ var init_deepseek_agent = __esm({
7892
7931
  }
7893
7932
  });
7894
7933
 
7895
- // packages/server/dist/agents/kimi-agent.js
7934
+ // ../server/dist/agents/kimi-agent.js
7896
7935
  function safeParse2(json) {
7897
7936
  try {
7898
7937
  return JSON.parse(json || "{}");
@@ -7902,7 +7941,7 @@ function safeParse2(json) {
7902
7941
  }
7903
7942
  var KimiAgent;
7904
7943
  var init_kimi_agent = __esm({
7905
- "packages/server/dist/agents/kimi-agent.js"() {
7944
+ "../server/dist/agents/kimi-agent.js"() {
7906
7945
  "use strict";
7907
7946
  init_config();
7908
7947
  init_agent_loop();
@@ -8098,7 +8137,7 @@ var init_kimi_agent = __esm({
8098
8137
  }
8099
8138
  });
8100
8139
 
8101
- // packages/server/dist/agents/minimax-agent.js
8140
+ // ../server/dist/agents/minimax-agent.js
8102
8141
  function effortToBudget2(effort, maxTokens) {
8103
8142
  const table = {
8104
8143
  low: 2048,
@@ -8115,7 +8154,7 @@ function effortToBudget2(effort, maxTokens) {
8115
8154
  }
8116
8155
  var MiniMaxAgent;
8117
8156
  var init_minimax_agent = __esm({
8118
- "packages/server/dist/agents/minimax-agent.js"() {
8157
+ "../server/dist/agents/minimax-agent.js"() {
8119
8158
  "use strict";
8120
8159
  init_config();
8121
8160
  init_agent_loop();
@@ -8237,7 +8276,7 @@ var init_minimax_agent = __esm({
8237
8276
  }
8238
8277
  });
8239
8278
 
8240
- // packages/server/dist/agents/qwen-agent.js
8279
+ // ../server/dist/agents/qwen-agent.js
8241
8280
  function effortToBudget3(effort, maxTokens) {
8242
8281
  const table = {
8243
8282
  low: 2048,
@@ -8254,7 +8293,7 @@ function effortToBudget3(effort, maxTokens) {
8254
8293
  }
8255
8294
  var QwenAgent;
8256
8295
  var init_qwen_agent = __esm({
8257
- "packages/server/dist/agents/qwen-agent.js"() {
8296
+ "../server/dist/agents/qwen-agent.js"() {
8258
8297
  "use strict";
8259
8298
  init_config();
8260
8299
  init_agent_loop();
@@ -8372,7 +8411,7 @@ var init_qwen_agent = __esm({
8372
8411
  }
8373
8412
  });
8374
8413
 
8375
- // packages/server/dist/agents/hunyuan-agent.js
8414
+ // ../server/dist/agents/hunyuan-agent.js
8376
8415
  function safeParse3(json) {
8377
8416
  try {
8378
8417
  return JSON.parse(json || "{}");
@@ -8382,7 +8421,7 @@ function safeParse3(json) {
8382
8421
  }
8383
8422
  var HunyuanAgent;
8384
8423
  var init_hunyuan_agent = __esm({
8385
- "packages/server/dist/agents/hunyuan-agent.js"() {
8424
+ "../server/dist/agents/hunyuan-agent.js"() {
8386
8425
  "use strict";
8387
8426
  init_config();
8388
8427
  init_agent_loop();
@@ -8553,7 +8592,7 @@ var init_hunyuan_agent = __esm({
8553
8592
  }
8554
8593
  });
8555
8594
 
8556
- // packages/server/dist/agents/doubao-agent.js
8595
+ // ../server/dist/agents/doubao-agent.js
8557
8596
  function safeParse4(json) {
8558
8597
  try {
8559
8598
  return JSON.parse(json || "{}");
@@ -8563,7 +8602,7 @@ function safeParse4(json) {
8563
8602
  }
8564
8603
  var DoubaoAgent;
8565
8604
  var init_doubao_agent = __esm({
8566
- "packages/server/dist/agents/doubao-agent.js"() {
8605
+ "../server/dist/agents/doubao-agent.js"() {
8567
8606
  "use strict";
8568
8607
  init_config();
8569
8608
  init_agent_loop();
@@ -8734,7 +8773,7 @@ var init_doubao_agent = __esm({
8734
8773
  }
8735
8774
  });
8736
8775
 
8737
- // packages/server/dist/agents/openai-agent.js
8776
+ // ../server/dist/agents/openai-agent.js
8738
8777
  function safeParse5(json) {
8739
8778
  try {
8740
8779
  return JSON.parse(json || "{}");
@@ -8744,7 +8783,7 @@ function safeParse5(json) {
8744
8783
  }
8745
8784
  var OpenAIAgent;
8746
8785
  var init_openai_agent = __esm({
8747
- "packages/server/dist/agents/openai-agent.js"() {
8786
+ "../server/dist/agents/openai-agent.js"() {
8748
8787
  "use strict";
8749
8788
  init_config();
8750
8789
  init_agent_loop();
@@ -8916,13 +8955,13 @@ var init_openai_agent = __esm({
8916
8955
  }
8917
8956
  });
8918
8957
 
8919
- // packages/server/dist/agents/mantle-agent.js
8958
+ // ../server/dist/agents/mantle-agent.js
8920
8959
  import { SignatureV4 } from "@smithy/signature-v4";
8921
8960
  import { Sha256 } from "@aws-crypto/sha256-js";
8922
8961
  import { defaultProvider } from "@aws-sdk/credential-provider-node";
8923
8962
  function extractRegionFromHost(hostname) {
8924
- const m = hostname.match(/bedrock-mantle\.([a-z0-9-]+)\.api\.aws/);
8925
- return m?.[1] ?? "us-east-2";
8963
+ const m = hostname.match(/^bedrock-(?:mantle|runtime)\.([a-z0-9-]+)\./);
8964
+ return m?.[1] ?? "us-east-1";
8926
8965
  }
8927
8966
  function safeParse6(json) {
8928
8967
  try {
@@ -8933,7 +8972,7 @@ function safeParse6(json) {
8933
8972
  }
8934
8973
  var MantleAgent;
8935
8974
  var init_mantle_agent = __esm({
8936
- "packages/server/dist/agents/mantle-agent.js"() {
8975
+ "../server/dist/agents/mantle-agent.js"() {
8937
8976
  "use strict";
8938
8977
  init_config();
8939
8978
  init_agent_loop();
@@ -9152,10 +9191,10 @@ var init_mantle_agent = __esm({
9152
9191
  }
9153
9192
  });
9154
9193
 
9155
- // packages/server/dist/agents/anthropic-agent.js
9194
+ // ../server/dist/agents/anthropic-agent.js
9156
9195
  var AnthropicAgent;
9157
9196
  var init_anthropic_agent = __esm({
9158
- "packages/server/dist/agents/anthropic-agent.js"() {
9197
+ "../server/dist/agents/anthropic-agent.js"() {
9159
9198
  "use strict";
9160
9199
  init_config();
9161
9200
  init_agent_loop();
@@ -9279,7 +9318,7 @@ var init_anthropic_agent = __esm({
9279
9318
  }
9280
9319
  });
9281
9320
 
9282
- // packages/server/dist/agents/model-runtime.js
9321
+ // ../server/dist/agents/model-runtime.js
9283
9322
  function createModelRuntime(providerId, cfg) {
9284
9323
  switch (providerId) {
9285
9324
  case "aws-bedrock-claude-invoke":
@@ -9371,10 +9410,15 @@ function createModelRuntime(providerId, cfg) {
9371
9410
  maxTokens: cfg.maxTokens,
9372
9411
  thinking: cfg.thinking
9373
9412
  });
9413
+ // aws-bedrock-openai is the same OpenAI Responses wire format on the
9414
+ // bedrock-runtime host (/openai/v1, cross-Region profile ids only) —
9415
+ // Grok 4.6 / Kimi K3 live there and not (or not everywhere) on Mantle.
9416
+ // See aws-bedrock-openai.yaml.
9374
9417
  case "aws-bedrock-mantle":
9418
+ case "aws-bedrock-openai":
9375
9419
  return new MantleAgent({
9376
9420
  modelId: cfg.modelId,
9377
- endpoint: cfg.endpoint ?? "https://bedrock-mantle.us-east-2.api.aws/openai/v1",
9421
+ endpoint: cfg.endpoint ?? (providerId === "aws-bedrock-openai" ? "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1" : "https://bedrock-mantle.us-east-1.api.aws/openai/v1"),
9378
9422
  // No bearer token → MantleAgent falls back to SigV4 IAM auth using
9379
9423
  // these creds (or the SDK default chain when also empty).
9380
9424
  apiKey: cfg.apiKey ?? "",
@@ -9414,7 +9458,7 @@ function createModelRuntime(providerId, cfg) {
9414
9458
  }
9415
9459
  }
9416
9460
  var init_model_runtime = __esm({
9417
- "packages/server/dist/agents/model-runtime.js"() {
9461
+ "../server/dist/agents/model-runtime.js"() {
9418
9462
  "use strict";
9419
9463
  init_bedrock_agent();
9420
9464
  init_deepseek_agent();
@@ -9429,7 +9473,7 @@ var init_model_runtime = __esm({
9429
9473
  }
9430
9474
  });
9431
9475
 
9432
- // packages/server/dist/child-env.js
9476
+ // ../server/dist/child-env.js
9433
9477
  function cleanChildEnv() {
9434
9478
  const env = { ...process.env };
9435
9479
  delete env.HALO_PASSWORD;
@@ -9437,12 +9481,12 @@ function cleanChildEnv() {
9437
9481
  return env;
9438
9482
  }
9439
9483
  var init_child_env = __esm({
9440
- "packages/server/dist/child-env.js"() {
9484
+ "../server/dist/child-env.js"() {
9441
9485
  "use strict";
9442
9486
  }
9443
9487
  });
9444
9488
 
9445
- // packages/server/dist/tools/sandbox.js
9489
+ // ../server/dist/tools/sandbox.js
9446
9490
  import { exec, execFile, spawn as spawn2 } from "node:child_process";
9447
9491
  import { promisify } from "node:util";
9448
9492
  import path25 from "node:path";
@@ -9917,7 +9961,7 @@ async function sandboxReaddir(dirPath, opts) {
9917
9961
  }
9918
9962
  var execAsync, execFileAsync, HOME, HALO_HOME3, GLOBAL_DIR, KILL_GRACE_MS, _bwrapAvailable, DEFAULT_HIDDEN_DIRS, DEFAULT_HIDDEN_FILES, WORKSPACE_HIDDEN_DIRS, WORKSPACE_HIDDEN_FILES, _hiddenDirs, _hiddenFiles, _writableDirs;
9919
9963
  var init_sandbox = __esm({
9920
- "packages/server/dist/tools/sandbox.js"() {
9964
+ "../server/dist/tools/sandbox.js"() {
9921
9965
  "use strict";
9922
9966
  init_child_env();
9923
9967
  execAsync = promisify(exec);
@@ -9970,7 +10014,7 @@ var init_sandbox = __esm({
9970
10014
  }
9971
10015
  });
9972
10016
 
9973
- // packages/server/dist/tools/workspace-tools.js
10017
+ // ../server/dist/tools/workspace-tools.js
9974
10018
  import fs22 from "node:fs/promises";
9975
10019
  import path26 from "node:path";
9976
10020
  import crypto from "node:crypto";
@@ -10689,7 +10733,7 @@ function imageDimensions(buf, mediaType) {
10689
10733
  }
10690
10734
  var SKIP_DIRS, SKIP_HALO_SUBDIRS, GLOB_MAX_RESULTS, HOME2, PARAMS_PATTERN, ENV_PATTERN3;
10691
10735
  var init_workspace_tools = __esm({
10692
- "packages/server/dist/tools/workspace-tools.js"() {
10736
+ "../server/dist/tools/workspace-tools.js"() {
10693
10737
  "use strict";
10694
10738
  init_config();
10695
10739
  init_sandbox();
@@ -10706,7 +10750,7 @@ var init_workspace_tools = __esm({
10706
10750
  }
10707
10751
  });
10708
10752
 
10709
- // packages/server/dist/tools/draft-tool.js
10753
+ // ../server/dist/tools/draft-tool.js
10710
10754
  function createDraftTool() {
10711
10755
  let drafts = 0;
10712
10756
  const tool = {
@@ -10741,7 +10785,7 @@ Error: draft requires non-empty \`content\` \u2014 put your full draft answer th
10741
10785
  }
10742
10786
  var MAX_DRAFTS, REVIEW_CHECKLIST;
10743
10787
  var init_draft_tool = __esm({
10744
- "packages/server/dist/tools/draft-tool.js"() {
10788
+ "../server/dist/tools/draft-tool.js"() {
10745
10789
  "use strict";
10746
10790
  init_agent_loop();
10747
10791
  MAX_DRAFTS = 3;
@@ -10755,7 +10799,7 @@ If the draft clears all three, write the final answer now. If not, fix it (gathe
10755
10799
  }
10756
10800
  });
10757
10801
 
10758
- // packages/server/dist/prompts/system-prompts.js
10802
+ // ../server/dist/prompts/system-prompts.js
10759
10803
  import fs23 from "node:fs/promises";
10760
10804
  import path27 from "node:path";
10761
10805
  import { homedir as homedir12 } from "node:os";
@@ -10841,17 +10885,17 @@ async function loadSystemPrompts(workspaceRoot) {
10841
10885
  }
10842
10886
  var GLOBAL_PROMPTS_DIR;
10843
10887
  var init_system_prompts = __esm({
10844
- "packages/server/dist/prompts/system-prompts.js"() {
10888
+ "../server/dist/prompts/system-prompts.js"() {
10845
10889
  "use strict";
10846
10890
  GLOBAL_PROMPTS_DIR = path27.join(homedir12(), ".halo", "global", "prompts");
10847
10891
  }
10848
10892
  });
10849
10893
 
10850
- // packages/server/dist/agents/session-agent-builder.js
10894
+ // ../server/dist/agents/session-agent-builder.js
10851
10895
  import path28 from "node:path";
10852
10896
  var SessionAgentBuilder;
10853
10897
  var init_session_agent_builder = __esm({
10854
- "packages/server/dist/agents/session-agent-builder.js"() {
10898
+ "../server/dist/agents/session-agent-builder.js"() {
10855
10899
  "use strict";
10856
10900
  init_model_runtime();
10857
10901
  init_workspace_tools();
@@ -10960,6 +11004,7 @@ var init_session_agent_builder = __esm({
10960
11004
  const nameSet = new Set(yamlConfig?.tools ?? []);
10961
11005
  const delegates = canDelegate(yamlConfig);
10962
11006
  const sessionTools = delegates ? this.host.createSessionTools(sessionId) : agentId === GOAL_AGENT_ID ? this.host.createGoalTools(sessionId) : [];
11007
+ sessionTools.push(this.host.createContinueTaskTool(sessionId));
10963
11008
  let draftReset = null;
10964
11009
  if (nameSet.has("draft")) {
10965
11010
  const { tool, reset } = createDraftTool();
@@ -11222,7 +11267,7 @@ ${roster}`;
11222
11267
  }
11223
11268
  });
11224
11269
 
11225
- // packages/server/dist/agents/session-skill-commands.js
11270
+ // ../server/dist/agents/session-skill-commands.js
11226
11271
  import { eq as eq8 } from "drizzle-orm";
11227
11272
  function commandVisibilityGate(d) {
11228
11273
  if (!d.verbs || d.verbs.length === 0)
@@ -11239,7 +11284,7 @@ function commandVisibilityGate(d) {
11239
11284
  }
11240
11285
  var SessionSkillCommands;
11241
11286
  var init_session_skill_commands = __esm({
11242
- "packages/server/dist/agents/session-skill-commands.js"() {
11287
+ "../server/dist/agents/session-skill-commands.js"() {
11243
11288
  "use strict";
11244
11289
  init_db();
11245
11290
  init_schema();
@@ -11304,12 +11349,12 @@ var init_session_skill_commands = __esm({
11304
11349
  }
11305
11350
  });
11306
11351
 
11307
- // packages/server/dist/agents/session-state-store.js
11352
+ // ../server/dist/agents/session-state-store.js
11308
11353
  import fsSync6 from "node:fs";
11309
11354
  import path29 from "node:path";
11310
11355
  var SessionStateStore;
11311
11356
  var init_session_state_store = __esm({
11312
- "packages/server/dist/agents/session-state-store.js"() {
11357
+ "../server/dist/agents/session-state-store.js"() {
11313
11358
  "use strict";
11314
11359
  init_session_store();
11315
11360
  SessionStateStore = class {
@@ -11373,7 +11418,7 @@ var init_session_state_store = __esm({
11373
11418
  }
11374
11419
  });
11375
11420
 
11376
- // packages/server/dist/observability/otel-sdk.js
11421
+ // ../server/dist/observability/otel-sdk.js
11377
11422
  var otel_sdk_exports = {};
11378
11423
  __export(otel_sdk_exports, {
11379
11424
  registerSdk: () => registerSdk
@@ -11412,12 +11457,12 @@ function registerSdk(serviceName, serviceVersion) {
11412
11457
  return [tracerProvider, meterProvider, loggerProvider];
11413
11458
  }
11414
11459
  var init_otel_sdk = __esm({
11415
- "packages/server/dist/observability/otel-sdk.js"() {
11460
+ "../server/dist/observability/otel-sdk.js"() {
11416
11461
  "use strict";
11417
11462
  }
11418
11463
  });
11419
11464
 
11420
- // packages/server/dist/observability/otel.js
11465
+ // ../server/dist/observability/otel.js
11421
11466
  import { trace, metrics as metrics2, ProxyTracerProvider } from "@opentelemetry/api";
11422
11467
  import { logs as logs2 } from "@opentelemetry/api-logs";
11423
11468
  function externalSdkRegistered() {
@@ -11442,7 +11487,7 @@ async function initObservability() {
11442
11487
  return true;
11443
11488
  }
11444
11489
  const { registerSdk: registerSdk2 } = await Promise.resolve().then(() => (init_otel_sdk(), otel_sdk_exports));
11445
- providers = registerSdk2(process.env.OTEL_SERVICE_NAME, "1.3.2");
11490
+ providers = registerSdk2(process.env.OTEL_SERVICE_NAME, "1.3.4-c3090bf");
11446
11491
  console.log(`[Observability] OTLP export \u2192 ${process.env.OTEL_EXPORTER_OTLP_ENDPOINT} (service.name=${process.env.OTEL_SERVICE_NAME}, capture_content=${config.observability.captureContent})`);
11447
11492
  return true;
11448
11493
  }
@@ -11463,7 +11508,7 @@ async function shutdownObservability() {
11463
11508
  }
11464
11509
  var SCOPE, enabled, tracer, getMeter, otelLogger, captureContent, providers;
11465
11510
  var init_otel = __esm({
11466
- "packages/server/dist/observability/otel.js"() {
11511
+ "../server/dist/observability/otel.js"() {
11467
11512
  "use strict";
11468
11513
  init_config();
11469
11514
  SCOPE = "opentelemetry.instrumentation.halo";
@@ -11476,7 +11521,7 @@ var init_otel = __esm({
11476
11521
  }
11477
11522
  });
11478
11523
 
11479
- // packages/server/dist/observability/genai-spans.js
11524
+ // ../server/dist/observability/genai-spans.js
11480
11525
  import { context, trace as trace2, SpanStatusCode } from "@opentelemetry/api";
11481
11526
  function instruments() {
11482
11527
  const meter = getMeter();
@@ -11702,7 +11747,7 @@ function recordRetry(kind) {
11702
11747
  }
11703
11748
  var turns, SYSTEM, PART_CAP, SYSTEM_PROMPT_CAP, ATTR_CAP, cachedInstruments, metricsFor;
11704
11749
  var init_genai_spans = __esm({
11705
- "packages/server/dist/observability/genai-spans.js"() {
11750
+ "../server/dist/observability/genai-spans.js"() {
11706
11751
  "use strict";
11707
11752
  init_otel();
11708
11753
  turns = /* @__PURE__ */ new Map();
@@ -11715,7 +11760,7 @@ var init_genai_spans = __esm({
11715
11760
  }
11716
11761
  });
11717
11762
 
11718
- // packages/server/dist/agents/session-manager.js
11763
+ // ../server/dist/agents/session-manager.js
11719
11764
  import fsSync7 from "node:fs";
11720
11765
  import path30 from "node:path";
11721
11766
  import { eq as eq9, and as and6, isNull as isNull4, isNotNull as isNotNull2 } from "drizzle-orm";
@@ -11816,9 +11861,9 @@ function generateSessionId() {
11816
11861
  const rand = Math.random().toString(36).slice(2, 8);
11817
11862
  return `sid_${ts}_${rand}`;
11818
11863
  }
11819
- var SessionManager;
11864
+ var CONTINUE_TASK_KICK, SessionManager;
11820
11865
  var init_session_manager = __esm({
11821
- "packages/server/dist/agents/session-manager.js"() {
11866
+ "../server/dist/agents/session-manager.js"() {
11822
11867
  "use strict";
11823
11868
  init_md_loader();
11824
11869
  init_config();
@@ -11847,6 +11892,7 @@ var init_session_manager = __esm({
11847
11892
  init_session_skill_commands();
11848
11893
  init_session_state_store();
11849
11894
  init_genai_spans();
11895
+ CONTINUE_TASK_KICK = `[System] You called continue_task: the task interrupted earlier is not finished. Resume it now from where it stopped. Any tool call marked "[tool execution interrupted \u2014 no result]" did not run \u2014 re-issue it if you still need the result (this overrides the marker's do-not-retry note \u2014 you explicitly asked to continue).`;
11850
11896
  SessionManager = class _SessionManager {
11851
11897
  // The fields below are marked `internal:` because they're consumed by
11852
11898
  // helpers in this directory (session-tools.ts). Treat them as
@@ -12063,6 +12109,11 @@ var init_session_manager = __esm({
12063
12109
  createSessionTools(sessionId) {
12064
12110
  return buildSessionTools(this, sessionId);
12065
12111
  }
12112
+ /** Built-in continue_task tool (every agent, no yaml opt-in) — see
12113
+ * session-agent-builder / requestSelfKick / drainQueue. */
12114
+ createContinueTaskTool(sessionId) {
12115
+ return buildContinueTaskTool(this, sessionId);
12116
+ }
12066
12117
  /** Goal-mode tool set — injected only for the `goal` agent (see
12067
12118
  * session-agent-builder / goal-mode.ts). */
12068
12119
  createGoalTools(sessionId) {
@@ -12104,6 +12155,8 @@ var init_session_manager = __esm({
12104
12155
  warnedToolHashes: /* @__PURE__ */ new Set(),
12105
12156
  turnStartTime: 0,
12106
12157
  interruptRequested: false,
12158
+ selfKick: false,
12159
+ resumedAfterInterrupt: false,
12107
12160
  isCompacting: false,
12108
12161
  compactAbortController: null,
12109
12162
  compactedThisTurn: false,
@@ -12473,6 +12526,7 @@ var init_session_manager = __esm({
12473
12526
  }
12474
12527
  case "tool_call": {
12475
12528
  session.lastActivityAt = (/* @__PURE__ */ new Date()).toISOString();
12529
+ this.saveAgentState(session);
12476
12530
  const loopStatus = this.checkLoop(session, event.toolName, event.toolInput);
12477
12531
  if (loopStatus === "warn") {
12478
12532
  this.emitEvent(session.id, { type: "system", text: `\u26A0\uFE0F Tool "${event.toolName}" called repeatedly with identical input. Consider a different approach.` });
@@ -12553,7 +12607,10 @@ var init_session_manager = __esm({
12553
12607
  session.turnStartTime = Date.now();
12554
12608
  const iter = session.agent.run(input, {
12555
12609
  cancelSignal: signal,
12556
- beforeCallModel: () => this.maybeAutoCompact(session)
12610
+ beforeCallModel: async () => {
12611
+ await this.maybeAutoCompact(session);
12612
+ this.saveAgentState(session);
12613
+ }
12557
12614
  });
12558
12615
  for await (const event of iter) {
12559
12616
  if (signal.aborted)
@@ -12703,6 +12760,8 @@ var init_session_manager = __esm({
12703
12760
  session.toolCallLog = [];
12704
12761
  session.warnedToolHashes.clear();
12705
12762
  session.interruptRequested = false;
12763
+ session.resumedAfterInterrupt = false;
12764
+ session.selfKick = false;
12706
12765
  result = await this.runAgentTurn(session, message);
12707
12766
  console.debug(`[SessionManager] runSession ${sessionId} first turn done \u2014 result: ${result.slice(0, 150)}`);
12708
12767
  }
@@ -12843,6 +12902,9 @@ ${list}`;
12843
12902
  async drainQueue(session) {
12844
12903
  while (session.messageQueue.length > 0) {
12845
12904
  const batch = session.messageQueue.splice(0);
12905
+ session.resumedAfterInterrupt = session.interruptRequested;
12906
+ const kickFlagReset = session.selfKick;
12907
+ session.selfKick = false;
12846
12908
  session.interruptRequested = false;
12847
12909
  session.toolCallLog = [];
12848
12910
  session.warnedToolHashes.clear();
@@ -12857,7 +12919,8 @@ ${q.text}` : q.text).join("\n\n");
12857
12919
  if (suffix && session.parentId === null) {
12858
12920
  this.emitEvent(session.id, { type: "system", text: suffix.trim(), agentName: session.agentName });
12859
12921
  }
12860
- const input = this.buildInput(merged + suffix, images.length > 0 ? images : void 0, session.supportsImage);
12922
+ const kickNote = kickFlagReset ? "\n\n[System] The continue_task flag you set last turn was reset by this interrupt. If the interrupted task is still unfinished after you answer, call continue_task again." : "";
12923
+ const input = this.buildInput(merged + suffix + kickNote, images.length > 0 ? images : void 0, session.supportsImage);
12861
12924
  try {
12862
12925
  await this.runAgentTurn(session, input);
12863
12926
  } catch (err) {
@@ -12865,6 +12928,15 @@ ${q.text}` : q.text).join("\n\n");
12865
12928
  console.error(`[SessionManager] Drain run error for ${session.id}: ${errMsg}`);
12866
12929
  throw err;
12867
12930
  }
12931
+ if (session.messageQueue.length === 0) {
12932
+ if (session.selfKick && !session.interruptRequested) {
12933
+ session.messageQueue.push({ text: CONTINUE_TASK_KICK });
12934
+ const taskId = session.parentId !== null ? session.id : void 0;
12935
+ this.emitEvent(session.id, { type: "user", text: CONTINUE_TASK_KICK, agentName: "user", report: true, taskId });
12936
+ console.debug(`[SessionManager] continue_task kick for ${session.id}`);
12937
+ }
12938
+ session.selfKick = false;
12939
+ }
12868
12940
  if (session.parentId === null && session.messageQueue.length > 0) {
12869
12941
  this.emitEvent(session.id, { type: "complete", batchBoundary: true });
12870
12942
  }
@@ -12940,6 +13012,18 @@ ${q.text}` : q.text).join("\n\n");
12940
13012
  this.markPendingToolCallsInterrupted(sessionId);
12941
13013
  console.debug(`[SessionManager] Interrupted session ${sessionId}`);
12942
13014
  }
13015
+ /** continue_task tool backend. Arms the one-turn selfKick flag that drainQueue
13016
+ * turns into a synthetic resume turn — but only in a turn that itself started
13017
+ * after an interrupt (resumedAfterInterrupt), so kicks ≤ interrupts. */
13018
+ requestSelfKick(sessionId) {
13019
+ const session = this.sessions.get(sessionId);
13020
+ if (!session || session.abortController === null)
13021
+ return "no_turn";
13022
+ if (!session.resumedAfterInterrupt)
13023
+ return "not_interrupted";
13024
+ session.selfKick = true;
13025
+ return "set";
13026
+ }
12943
13027
  /** Append text as a user turn to a session's agent.messages, coalescing into
12944
13028
  * a trailing user message if one exists. Two invariants drive this:
12945
13029
  * 1. Anthropic rejects consecutive same-role messages, and the next
@@ -12977,6 +13061,7 @@ ${q.text}` : q.text);
12977
13061
  }
12978
13062
  session.messageQueue = [];
12979
13063
  session.interruptRequested = false;
13064
+ session.selfKick = false;
12980
13065
  if (session.abortController) {
12981
13066
  session.abortController.abort(abortReason("stop"));
12982
13067
  session.abortController = null;
@@ -13698,6 +13783,7 @@ ${result.summary}`, agentName: "user", report: true, taskId });
13698
13783
  session.abortController.abort(abortReason("delete"));
13699
13784
  session.abortController = null;
13700
13785
  }
13786
+ session.selfKick = false;
13701
13787
  if (session.promise) {
13702
13788
  try {
13703
13789
  await session.promise;
@@ -13714,6 +13800,7 @@ ${result.summary}`, agentName: "user", report: true, taskId });
13714
13800
  childSession.abortController.abort(abortReason("delete"));
13715
13801
  childSession.abortController = null;
13716
13802
  }
13803
+ childSession.selfKick = false;
13717
13804
  this.sessions.delete(id);
13718
13805
  }
13719
13806
  }
@@ -13758,6 +13845,7 @@ ${result.summary}`, agentName: "user", report: true, taskId });
13758
13845
  session.abortController.abort(abortReason("archive"));
13759
13846
  session.abortController = null;
13760
13847
  }
13848
+ session.selfKick = false;
13761
13849
  if (session.promise) {
13762
13850
  try {
13763
13851
  await session.promise;
@@ -13844,8 +13932,10 @@ ${result.summary}`, agentName: "user", report: true, taskId });
13844
13932
  * message), and requests a SOFT interrupt so a busy turn yields after its
13845
13933
  * current tool — same effect as sendUserMessage's busy branch, minus the
13846
13934
  * idle/run path (the caller already established the session is busy or
13847
- * compacting). When compacting, the flag is harmless (no live turn) and
13848
- * endCompact drains the queue. */
13935
+ * compacting). When compacting there is no live turn to interrupt, so the
13936
+ * flag is NOT set (mirrors sendUserMessage's compacting branch): endCompact's
13937
+ * drain would snapshot it into resumedAfterInterrupt and let continue_task
13938
+ * arm a kick in a turn that interrupted nothing. endCompact drains the queue. */
13849
13939
  async enqueueUserMessage(sessionId, text6, images) {
13850
13940
  const session = this.sessions.get(sessionId);
13851
13941
  if (!session)
@@ -13855,7 +13945,8 @@ ${result.summary}`, agentName: "user", report: true, taskId });
13855
13945
  this.emitEvent(sessionId, { type: "system", text: `\u26A0 ${w}` });
13856
13946
  }
13857
13947
  session.messageQueue.push({ text: scoped.text, images });
13858
- session.interruptRequested = true;
13948
+ if (!session.isCompacting)
13949
+ session.interruptRequested = true;
13859
13950
  console.debug(`[SessionManager] User message enqueued for ${sessionId} (${session.messageQueue.length} in queue)`);
13860
13951
  }
13861
13952
  /** Hard stop — abort immediately (for explicit user stop button).
@@ -13876,6 +13967,7 @@ ${q.text}` : q.text);
13876
13967
  }
13877
13968
  session.messageQueue = [];
13878
13969
  session.interruptRequested = false;
13970
+ session.selfKick = false;
13879
13971
  if (session.abortController) {
13880
13972
  session.abortController.abort();
13881
13973
  session.abortController = null;
@@ -13888,11 +13980,11 @@ ${q.text}` : q.text);
13888
13980
  }
13889
13981
  });
13890
13982
 
13891
- // packages/server/dist/agents/session-manager-registry.js
13983
+ // ../server/dist/agents/session-manager-registry.js
13892
13984
  import fs24 from "node:fs";
13893
13985
  var SessionManagerRegistry;
13894
13986
  var init_session_manager_registry = __esm({
13895
- "packages/server/dist/agents/session-manager-registry.js"() {
13987
+ "../server/dist/agents/session-manager-registry.js"() {
13896
13988
  "use strict";
13897
13989
  init_session_manager();
13898
13990
  init_init();
@@ -13947,7 +14039,7 @@ var init_session_manager_registry = __esm({
13947
14039
  }
13948
14040
  });
13949
14041
 
13950
- // packages/server/dist/logger.js
14042
+ // ../server/dist/logger.js
13951
14043
  import fs25 from "node:fs";
13952
14044
  import path31 from "node:path";
13953
14045
  import { homedir as homedir13 } from "node:os";
@@ -14067,7 +14159,7 @@ function initLogger() {
14067
14159
  }
14068
14160
  var LOG_FILENAME, logDir, logFile, currentSize, LEVEL_ORDER, OTEL_SEVERITY;
14069
14161
  var init_logger = __esm({
14070
- "packages/server/dist/logger.js"() {
14162
+ "../server/dist/logger.js"() {
14071
14163
  "use strict";
14072
14164
  init_config();
14073
14165
  init_otel();
@@ -14085,7 +14177,7 @@ var init_logger = __esm({
14085
14177
  }
14086
14178
  });
14087
14179
 
14088
- // packages/cli/src/harness.ts
14180
+ // src/harness.ts
14089
14181
  var harness_exports = {};
14090
14182
  __export(harness_exports, {
14091
14183
  createHarness: () => createHarness,
@@ -14326,7 +14418,7 @@ async function createHarness(opts) {
14326
14418
  }
14327
14419
  var SESSION_PREFIX, USER_ID;
14328
14420
  var init_harness = __esm({
14329
- "packages/cli/src/harness.ts"() {
14421
+ "src/harness.ts"() {
14330
14422
  "use strict";
14331
14423
  init_session_manager();
14332
14424
  init_session_manager_registry();
@@ -14343,7 +14435,7 @@ var init_harness = __esm({
14343
14435
  }
14344
14436
  });
14345
14437
 
14346
- // packages/server/dist/middleware/password-hash.js
14438
+ // ../server/dist/middleware/password-hash.js
14347
14439
  var password_hash_exports = {};
14348
14440
  __export(password_hash_exports, {
14349
14441
  generateJwtSecret: () => generateJwtSecret,
@@ -14393,7 +14485,7 @@ function generateJwtSecret() {
14393
14485
  }
14394
14486
  var scryptAsync, COST, KEY_LEN;
14395
14487
  var init_password_hash = __esm({
14396
- "packages/server/dist/middleware/password-hash.js"() {
14488
+ "../server/dist/middleware/password-hash.js"() {
14397
14489
  "use strict";
14398
14490
  scryptAsync = promisify2(crypto2.scrypt);
14399
14491
  COST = { N: 16384, r: 8, p: 1 };
@@ -14401,7 +14493,7 @@ var init_password_hash = __esm({
14401
14493
  }
14402
14494
  });
14403
14495
 
14404
- // packages/server/dist/setup-config.js
14496
+ // ../server/dist/setup-config.js
14405
14497
  var setup_config_exports = {};
14406
14498
  __export(setup_config_exports, {
14407
14499
  configLeafSet: () => configLeafSet,
@@ -14442,13 +14534,13 @@ function configLeafSet(dotPath) {
14442
14534
  }
14443
14535
  var CONFIG_PATH;
14444
14536
  var init_setup_config = __esm({
14445
- "packages/server/dist/setup-config.js"() {
14537
+ "../server/dist/setup-config.js"() {
14446
14538
  "use strict";
14447
14539
  CONFIG_PATH = path33.join(homedir14(), ".halo", "secrets", "config.yaml");
14448
14540
  }
14449
14541
  });
14450
14542
 
14451
- // packages/server/dist/setup-settings.js
14543
+ // ../server/dist/setup-settings.js
14452
14544
  var setup_settings_exports = {};
14453
14545
  __export(setup_settings_exports, {
14454
14546
  maskSecret: () => maskSecret,
@@ -14527,13 +14619,13 @@ function maskSecret(value) {
14527
14619
  }
14528
14620
  var SETTINGS_PATH2;
14529
14621
  var init_setup_settings = __esm({
14530
- "packages/server/dist/setup-settings.js"() {
14622
+ "../server/dist/setup-settings.js"() {
14531
14623
  "use strict";
14532
14624
  SETTINGS_PATH2 = path34.join(homedir15(), ".halo", "secrets", "settings.yaml");
14533
14625
  }
14534
14626
  });
14535
14627
 
14536
- // packages/server/dist/setup-providers.js
14628
+ // ../server/dist/setup-providers.js
14537
14629
  var setup_providers_exports = {};
14538
14630
  __export(setup_providers_exports, {
14539
14631
  AWS_CREDENTIAL_CHAIN_PROVIDER: () => AWS_CREDENTIAL_CHAIN_PROVIDER,
@@ -14739,7 +14831,7 @@ function listRequiredSkillsWithSecrets() {
14739
14831
  }
14740
14832
  var AWS_CREDENTIAL_CHAIN_PROVIDER, REBIND_BUILTIN_AGENT_IDS, GLOBAL_AGENTS_DIR3;
14741
14833
  var init_setup_providers = __esm({
14742
- "packages/server/dist/setup-providers.js"() {
14834
+ "../server/dist/setup-providers.js"() {
14743
14835
  "use strict";
14744
14836
  init_init();
14745
14837
  init_setup_settings();
@@ -14749,7 +14841,7 @@ var init_setup_providers = __esm({
14749
14841
  }
14750
14842
  });
14751
14843
 
14752
- // packages/cli/src/setup-bind-provider.ts
14844
+ // src/setup-bind-provider.ts
14753
14845
  var setup_bind_provider_exports = {};
14754
14846
  __export(setup_bind_provider_exports, {
14755
14847
  AWS_CHAIN_PROVIDER: () => AWS_CHAIN_PROVIDER,
@@ -14789,14 +14881,14 @@ function buildBindProviderPlan(configured, currentProvider, currentProviderHasKe
14789
14881
  }
14790
14882
  var AWS_CHAIN_PROVIDER, KEEP_CURRENT;
14791
14883
  var init_setup_bind_provider = __esm({
14792
- "packages/cli/src/setup-bind-provider.ts"() {
14884
+ "src/setup-bind-provider.ts"() {
14793
14885
  "use strict";
14794
14886
  AWS_CHAIN_PROVIDER = "aws-bedrock-claude-invoke";
14795
14887
  KEEP_CURRENT = "__keep__";
14796
14888
  }
14797
14889
  });
14798
14890
 
14799
- // packages/cli/src/setup-prompts.ts
14891
+ // src/setup-prompts.ts
14800
14892
  var setup_prompts_exports = {};
14801
14893
  __export(setup_prompts_exports, {
14802
14894
  promptMultiSelect: () => promptMultiSelect,
@@ -15082,12 +15174,12 @@ function promptMultiSelectRich(question, options) {
15082
15174
  });
15083
15175
  }
15084
15176
  var init_setup_prompts = __esm({
15085
- "packages/cli/src/setup-prompts.ts"() {
15177
+ "src/setup-prompts.ts"() {
15086
15178
  "use strict";
15087
15179
  }
15088
15180
  });
15089
15181
 
15090
- // packages/cli/src/upgrade-verify.ts
15182
+ // src/upgrade-verify.ts
15091
15183
  var upgrade_verify_exports = {};
15092
15184
  __export(upgrade_verify_exports, {
15093
15185
  ALLOW_SCRIPTS: () => ALLOW_SCRIPTS,
@@ -15112,7 +15204,7 @@ function verifyNativeModules(pkgRoot) {
15112
15204
  }
15113
15205
  var NATIVE_MODULE_SMOKES, ALLOW_SCRIPTS;
15114
15206
  var init_upgrade_verify = __esm({
15115
- "packages/cli/src/upgrade-verify.ts"() {
15207
+ "src/upgrade-verify.ts"() {
15116
15208
  "use strict";
15117
15209
  NATIVE_MODULE_SMOKES = [
15118
15210
  { name: "better-sqlite3", smoke: "new (require(process.argv[1]))(':memory:')" },
@@ -15122,7 +15214,7 @@ var init_upgrade_verify = __esm({
15122
15214
  }
15123
15215
  });
15124
15216
 
15125
- // packages/cli/src/render-md.ts
15217
+ // src/render-md.ts
15126
15218
  import { marked } from "marked";
15127
15219
  import { markedTerminal } from "marked-terminal";
15128
15220
  function renderMarkdown(text6) {
@@ -15130,14 +15222,14 @@ function renderMarkdown(text6) {
15130
15222
  return rendered.replace(/\n{3,}/g, "\n\n").trimEnd();
15131
15223
  }
15132
15224
  var init_render_md = __esm({
15133
- "packages/cli/src/render-md.ts"() {
15225
+ "src/render-md.ts"() {
15134
15226
  "use strict";
15135
15227
  marked.use(markedTerminal({ reflowText: true, width: Math.min(process.stdout.columns || 80, 120) }));
15136
15228
  marked.use({ breaks: true });
15137
15229
  }
15138
15230
  });
15139
15231
 
15140
- // packages/cli/src/resolve-refs.ts
15232
+ // src/resolve-refs.ts
15141
15233
  import fs31 from "node:fs";
15142
15234
  import path37 from "node:path";
15143
15235
  function resolveRefs(input, workspace) {
@@ -15216,7 +15308,7 @@ ${content}
15216
15308
  }
15217
15309
  var MAX_FILE_BYTES, MAX_IMAGE_BYTES, REF_PATTERN;
15218
15310
  var init_resolve_refs = __esm({
15219
- "packages/cli/src/resolve-refs.ts"() {
15311
+ "src/resolve-refs.ts"() {
15220
15312
  "use strict";
15221
15313
  init_dist();
15222
15314
  MAX_FILE_BYTES = 100 * 1024;
@@ -15225,7 +15317,7 @@ var init_resolve_refs = __esm({
15225
15317
  }
15226
15318
  });
15227
15319
 
15228
- // packages/cli/src/format-usage.ts
15320
+ // src/format-usage.ts
15229
15321
  function fmtK(n) {
15230
15322
  return `${(n / 1e3).toFixed(1)}K`;
15231
15323
  }
@@ -15269,7 +15361,7 @@ function formatUsageLine(event) {
15269
15361
  }
15270
15362
  var ANSI;
15271
15363
  var init_format_usage = __esm({
15272
- "packages/cli/src/format-usage.ts"() {
15364
+ "src/format-usage.ts"() {
15273
15365
  "use strict";
15274
15366
  ANSI = {
15275
15367
  reset: "\x1B[0m",
@@ -15283,7 +15375,7 @@ var init_format_usage = __esm({
15283
15375
  }
15284
15376
  });
15285
15377
 
15286
- // packages/cli/src/tui/components/banner.tsx
15378
+ // src/tui/components/banner.tsx
15287
15379
  import { Box, Text } from "ink";
15288
15380
  import { jsx } from "react/jsx-runtime";
15289
15381
  function Banner() {
@@ -15291,7 +15383,7 @@ function Banner() {
15291
15383
  }
15292
15384
  var LINES, COLORS;
15293
15385
  var init_banner = __esm({
15294
- "packages/cli/src/tui/components/banner.tsx"() {
15386
+ "src/tui/components/banner.tsx"() {
15295
15387
  "use strict";
15296
15388
  LINES = [
15297
15389
  " \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 ",
@@ -15305,7 +15397,7 @@ var init_banner = __esm({
15305
15397
  }
15306
15398
  });
15307
15399
 
15308
- // packages/cli/src/tui/components/messages.tsx
15400
+ // src/tui/components/messages.tsx
15309
15401
  import { Box as Box2, Static, Text as Text2 } from "ink";
15310
15402
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
15311
15403
  function Messages({ blocks }) {
@@ -15363,7 +15455,7 @@ function Block({ block }) {
15363
15455
  }
15364
15456
  var BANNER_ID;
15365
15457
  var init_messages = __esm({
15366
- "packages/cli/src/tui/components/messages.tsx"() {
15458
+ "src/tui/components/messages.tsx"() {
15367
15459
  "use strict";
15368
15460
  init_format_usage();
15369
15461
  init_banner();
@@ -15371,7 +15463,7 @@ var init_messages = __esm({
15371
15463
  }
15372
15464
  });
15373
15465
 
15374
- // packages/cli/src/tui/terminal-text.ts
15466
+ // src/tui/terminal-text.ts
15375
15467
  function sanitizeToolOutput(s) {
15376
15468
  return s.replace(ESCAPE_SEQ_RE, "").replace(/\r\n?/g, "\n").replace(/\t/g, " ").replace(C0_RE, "");
15377
15469
  }
@@ -15401,14 +15493,14 @@ function tailByRows(text6, cols, maxRows) {
15401
15493
  }
15402
15494
  var ESCAPE_SEQ_RE, C0_RE;
15403
15495
  var init_terminal_text = __esm({
15404
- "packages/cli/src/tui/terminal-text.ts"() {
15496
+ "src/tui/terminal-text.ts"() {
15405
15497
  "use strict";
15406
15498
  ESCAPE_SEQ_RE = /\x1b\][^\x07\n]*\x07|\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b[@-Z\\-_]/g;
15407
15499
  C0_RE = /[\x00-\x09\x0b-\x1f\x7f]/g;
15408
15500
  }
15409
15501
  });
15410
15502
 
15411
- // packages/cli/src/tui/components/streaming.tsx
15503
+ // src/tui/components/streaming.tsx
15412
15504
  import { useEffect, useState } from "react";
15413
15505
  import { Box as Box3, Text as Text3, useStdout } from "ink";
15414
15506
  import Spinner from "ink-spinner";
@@ -15461,13 +15553,13 @@ function Streaming({ spinnerLabel, liveText, liveThinking, activeSubs, turnStart
15461
15553
  ] });
15462
15554
  }
15463
15555
  var init_streaming = __esm({
15464
- "packages/cli/src/tui/components/streaming.tsx"() {
15556
+ "src/tui/components/streaming.tsx"() {
15465
15557
  "use strict";
15466
15558
  init_terminal_text();
15467
15559
  }
15468
15560
  });
15469
15561
 
15470
- // packages/cli/src/tui/history.ts
15562
+ // src/tui/history.ts
15471
15563
  import fs32 from "node:fs";
15472
15564
  import path38 from "node:path";
15473
15565
  import os2 from "node:os";
@@ -15493,14 +15585,14 @@ function appendHistory(entry) {
15493
15585
  }
15494
15586
  var HISTORY_FILE, MAX_ENTRIES;
15495
15587
  var init_history = __esm({
15496
- "packages/cli/src/tui/history.ts"() {
15588
+ "src/tui/history.ts"() {
15497
15589
  "use strict";
15498
15590
  HISTORY_FILE = path38.join(os2.homedir(), ".halo", "global", "tui-history.json");
15499
15591
  MAX_ENTRIES = 100;
15500
15592
  }
15501
15593
  });
15502
15594
 
15503
- // packages/cli/src/tui/components/status-bar.tsx
15595
+ // src/tui/components/status-bar.tsx
15504
15596
  import { Box as Box4, Text as Text4 } from "ink";
15505
15597
  import { Fragment, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
15506
15598
  function shortModel(modelId) {
@@ -15536,12 +15628,12 @@ function StatusBar({ agentName, modelId, contextPercent, workspace, sessionId, v
15536
15628
  ] });
15537
15629
  }
15538
15630
  var init_status_bar = __esm({
15539
- "packages/cli/src/tui/components/status-bar.tsx"() {
15631
+ "src/tui/components/status-bar.tsx"() {
15540
15632
  "use strict";
15541
15633
  }
15542
15634
  });
15543
15635
 
15544
- // packages/cli/src/tui/components/slash-suggest.tsx
15636
+ // src/tui/components/slash-suggest.tsx
15545
15637
  import { Box as Box5, Text as Text5 } from "ink";
15546
15638
  import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
15547
15639
  function SlashSuggest({ items, selectedIdx, maxWidth = 80 }) {
@@ -15568,12 +15660,12 @@ function SlashSuggest({ items, selectedIdx, maxWidth = 80 }) {
15568
15660
  ] });
15569
15661
  }
15570
15662
  var init_slash_suggest = __esm({
15571
- "packages/cli/src/tui/components/slash-suggest.tsx"() {
15663
+ "src/tui/components/slash-suggest.tsx"() {
15572
15664
  "use strict";
15573
15665
  }
15574
15666
  });
15575
15667
 
15576
- // packages/cli/src/tui/components/path-suggest.tsx
15668
+ // src/tui/components/path-suggest.tsx
15577
15669
  import { Box as Box6, Text as Text6 } from "ink";
15578
15670
  import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
15579
15671
  function PathSuggest({ items, selectedIdx, cwdLabel }) {
@@ -15600,12 +15692,12 @@ function PathSuggest({ items, selectedIdx, cwdLabel }) {
15600
15692
  ] });
15601
15693
  }
15602
15694
  var init_path_suggest = __esm({
15603
- "packages/cli/src/tui/components/path-suggest.tsx"() {
15695
+ "src/tui/components/path-suggest.tsx"() {
15604
15696
  "use strict";
15605
15697
  }
15606
15698
  });
15607
15699
 
15608
- // packages/cli/src/tui/path-suggest-engine.ts
15700
+ // src/tui/path-suggest-engine.ts
15609
15701
  import fs33 from "node:fs";
15610
15702
  import path39 from "node:path";
15611
15703
  function detectActiveRef(value) {
@@ -15691,13 +15783,13 @@ function applyPathPick(value, ref, pick) {
15691
15783
  return `${before}@${kind} ${path70}`;
15692
15784
  }
15693
15785
  var init_path_suggest_engine = __esm({
15694
- "packages/cli/src/tui/path-suggest-engine.ts"() {
15786
+ "src/tui/path-suggest-engine.ts"() {
15695
15787
  "use strict";
15696
15788
  init_dist();
15697
15789
  }
15698
15790
  });
15699
15791
 
15700
- // packages/cli/src/tui/line-editor.ts
15792
+ // src/tui/line-editor.ts
15701
15793
  function toGraphemes(s) {
15702
15794
  if (s === "") return [];
15703
15795
  return [...segmenter.segment(s)].map((seg) => seg.segment);
@@ -15751,13 +15843,13 @@ function deleteToEnd(e) {
15751
15843
  }
15752
15844
  var segmenter;
15753
15845
  var init_line_editor = __esm({
15754
- "packages/cli/src/tui/line-editor.ts"() {
15846
+ "src/tui/line-editor.ts"() {
15755
15847
  "use strict";
15756
15848
  segmenter = new Intl.Segmenter();
15757
15849
  }
15758
15850
  });
15759
15851
 
15760
- // packages/cli/src/tui/components/text-input.tsx
15852
+ // src/tui/components/text-input.tsx
15761
15853
  import { Text as Text7 } from "ink";
15762
15854
  import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
15763
15855
  function TextInputView({ value, cursor, placeholder }) {
@@ -15782,13 +15874,13 @@ function TextInputView({ value, cursor, placeholder }) {
15782
15874
  ] });
15783
15875
  }
15784
15876
  var init_text_input = __esm({
15785
- "packages/cli/src/tui/components/text-input.tsx"() {
15877
+ "src/tui/components/text-input.tsx"() {
15786
15878
  "use strict";
15787
15879
  init_line_editor();
15788
15880
  }
15789
15881
  });
15790
15882
 
15791
- // packages/cli/src/tui/components/input-box.tsx
15883
+ // src/tui/components/input-box.tsx
15792
15884
  import { useState as useState2, useEffect as useEffect2, useMemo, useRef } from "react";
15793
15885
  import { Box as Box7, Text as Text8, useInput, usePaste } from "ink";
15794
15886
  import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
@@ -16039,7 +16131,7 @@ function InputBox({ enabled: enabled2, placeholder, history, onSubmit, hint, com
16039
16131
  ] });
16040
16132
  }
16041
16133
  var init_input_box = __esm({
16042
- "packages/cli/src/tui/components/input-box.tsx"() {
16134
+ "src/tui/components/input-box.tsx"() {
16043
16135
  "use strict";
16044
16136
  init_slash_suggest();
16045
16137
  init_path_suggest();
@@ -16049,7 +16141,7 @@ var init_input_box = __esm({
16049
16141
  }
16050
16142
  });
16051
16143
 
16052
- // packages/cli/src/tui/components/log-navigator.tsx
16144
+ // src/tui/components/log-navigator.tsx
16053
16145
  import { useState as useState3, useMemo as useMemo2, useEffect as useEffect3 } from "react";
16054
16146
  import { Box as Box8, Text as Text9, useInput as useInput2 } from "ink";
16055
16147
  import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
@@ -16128,12 +16220,12 @@ function LogNavigator({ tree, onPick, onCancel }) {
16128
16220
  ] });
16129
16221
  }
16130
16222
  var init_log_navigator = __esm({
16131
- "packages/cli/src/tui/components/log-navigator.tsx"() {
16223
+ "src/tui/components/log-navigator.tsx"() {
16132
16224
  "use strict";
16133
16225
  }
16134
16226
  });
16135
16227
 
16136
- // packages/cli/src/tui/components/log-viewer.tsx
16228
+ // src/tui/components/log-viewer.tsx
16137
16229
  import { useState as useState4, useMemo as useMemo3, useEffect as useEffect4, useRef as useRef2 } from "react";
16138
16230
  import { Box as Box9, Text as Text10, useInput as useInput3, useStdout as useStdout2 } from "ink";
16139
16231
  import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
@@ -16206,12 +16298,12 @@ function LogViewer({ title, lines, live, onClose }) {
16206
16298
  ] });
16207
16299
  }
16208
16300
  var init_log_viewer = __esm({
16209
- "packages/cli/src/tui/components/log-viewer.tsx"() {
16301
+ "src/tui/components/log-viewer.tsx"() {
16210
16302
  "use strict";
16211
16303
  }
16212
16304
  });
16213
16305
 
16214
- // packages/cli/src/tui/app.tsx
16306
+ // src/tui/app.tsx
16215
16307
  import { useEffect as useEffect5, useMemo as useMemo4, useReducer, useState as useState5, useRef as useRef3 } from "react";
16216
16308
  import { Box as Box10, useApp, useInput as useInput4 } from "ink";
16217
16309
  import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
@@ -16921,7 +17013,7 @@ ${lines.join("\n")}` });
16921
17013
  }
16922
17014
  var MAX_CONTEXT_TOKENS_FALLBACK, blockSeq, ANSI2;
16923
17015
  var init_app = __esm({
16924
- "packages/cli/src/tui/app.tsx"() {
17016
+ "src/tui/app.tsx"() {
16925
17017
  "use strict";
16926
17018
  init_render_md();
16927
17019
  init_resolve_refs();
@@ -16949,7 +17041,7 @@ var init_app = __esm({
16949
17041
  }
16950
17042
  });
16951
17043
 
16952
- // packages/cli/src/tui.tsx
17044
+ // src/tui.tsx
16953
17045
  var tui_exports = {};
16954
17046
  __export(tui_exports, {
16955
17047
  runTui: () => runTui
@@ -16964,13 +17056,13 @@ async function runTui(harness, opts = {}) {
16964
17056
  await instance.waitUntilExit();
16965
17057
  }
16966
17058
  var init_tui = __esm({
16967
- "packages/cli/src/tui.tsx"() {
17059
+ "src/tui.tsx"() {
16968
17060
  "use strict";
16969
17061
  init_app();
16970
17062
  }
16971
17063
  });
16972
17064
 
16973
- // packages/cli/src/cli.ts
17065
+ // src/cli.ts
16974
17066
  var cli_exports = {};
16975
17067
  __export(cli_exports, {
16976
17068
  runCli: () => runCli
@@ -17154,7 +17246,7 @@ ${tag}${formatUsageLine(event)}
17154
17246
  return errorText ? 1 : 0;
17155
17247
  }
17156
17248
  var init_cli = __esm({
17157
- "packages/cli/src/cli.ts"() {
17249
+ "src/cli.ts"() {
17158
17250
  "use strict";
17159
17251
  init_render_md();
17160
17252
  init_resolve_refs();
@@ -17162,7 +17254,7 @@ var init_cli = __esm({
17162
17254
  }
17163
17255
  });
17164
17256
 
17165
- // packages/server/dist/channels/shared/media.js
17257
+ // ../server/dist/channels/shared/media.js
17166
17258
  import path40 from "node:path";
17167
17259
  import os3 from "node:os";
17168
17260
  function tempDir() {
@@ -17203,7 +17295,7 @@ function classifyMedia(filePath) {
17203
17295
  }
17204
17296
  var MEDIA_MARKER_RE, VIDEO_EXTS, VOICE_EXTS;
17205
17297
  var init_media = __esm({
17206
- "packages/server/dist/channels/shared/media.js"() {
17298
+ "../server/dist/channels/shared/media.js"() {
17207
17299
  "use strict";
17208
17300
  init_dist();
17209
17301
  MEDIA_MARKER_RE = /^MEDIA:\s*(\S.*?)\s*$/gm;
@@ -17212,7 +17304,7 @@ var init_media = __esm({
17212
17304
  }
17213
17305
  });
17214
17306
 
17215
- // packages/server/dist/routes/workspace-path.js
17307
+ // ../server/dist/routes/workspace-path.js
17216
17308
  import fs34 from "node:fs/promises";
17217
17309
  import { existsSync as existsSync2, realpathSync as realpathSync3 } from "node:fs";
17218
17310
  import path41 from "node:path";
@@ -17256,12 +17348,12 @@ function isSafeIdSegment(id) {
17256
17348
  return /^[\w.:>\u4e00-\u9fff-]+$/.test(id);
17257
17349
  }
17258
17350
  var init_workspace_path = __esm({
17259
- "packages/server/dist/routes/workspace-path.js"() {
17351
+ "../server/dist/routes/workspace-path.js"() {
17260
17352
  "use strict";
17261
17353
  }
17262
17354
  });
17263
17355
 
17264
- // packages/server/dist/routes/files.js
17356
+ // ../server/dist/routes/files.js
17265
17357
  import { Hono } from "hono";
17266
17358
  import fs35 from "node:fs/promises";
17267
17359
  import { createReadStream } from "node:fs";
@@ -17801,7 +17893,7 @@ function createFileRoutes() {
17801
17893
  return app2;
17802
17894
  }
17803
17895
  var init_files = __esm({
17804
- "packages/server/dist/routes/files.js"() {
17896
+ "../server/dist/routes/files.js"() {
17805
17897
  "use strict";
17806
17898
  init_dist();
17807
17899
  init_media();
@@ -17809,7 +17901,7 @@ var init_files = __esm({
17809
17901
  }
17810
17902
  });
17811
17903
 
17812
- // packages/server/dist/routes/data-preview.js
17904
+ // ../server/dist/routes/data-preview.js
17813
17905
  import { Hono as Hono2 } from "hono";
17814
17906
  import fs36 from "node:fs/promises";
17815
17907
  import { createReadStream as createReadStream2 } from "node:fs";
@@ -18034,7 +18126,7 @@ function createDataPreviewRoutes() {
18034
18126
  }
18035
18127
  var DEFAULT_LIMIT, MAX_LIMIT, MAX_ROW_CHARS, QUOTE, CR, LF, COMMA, SEMI, TAB, CsvScanner;
18036
18128
  var init_data_preview = __esm({
18037
- "packages/server/dist/routes/data-preview.js"() {
18129
+ "../server/dist/routes/data-preview.js"() {
18038
18130
  "use strict";
18039
18131
  init_workspace_path();
18040
18132
  DEFAULT_LIMIT = 100;
@@ -18135,7 +18227,7 @@ var init_data_preview = __esm({
18135
18227
  }
18136
18228
  });
18137
18229
 
18138
- // packages/server/dist/git-credentials.js
18230
+ // ../server/dist/git-credentials.js
18139
18231
  import fs37 from "node:fs";
18140
18232
  import path44 from "node:path";
18141
18233
  import { homedir as homedir18 } from "node:os";
@@ -18201,13 +18293,13 @@ function deleteGitCredential(host) {
18201
18293
  }
18202
18294
  var GIT_CREDENTIALS_PATH;
18203
18295
  var init_git_credentials = __esm({
18204
- "packages/server/dist/git-credentials.js"() {
18296
+ "../server/dist/git-credentials.js"() {
18205
18297
  "use strict";
18206
18298
  GIT_CREDENTIALS_PATH = path44.join(homedir18(), ".git-credentials");
18207
18299
  }
18208
18300
  });
18209
18301
 
18210
- // packages/server/dist/git-ssh.js
18302
+ // ../server/dist/git-ssh.js
18211
18303
  import fs38 from "node:fs";
18212
18304
  import os4 from "node:os";
18213
18305
  import path45 from "node:path";
@@ -18384,7 +18476,7 @@ function getRemoteProtocol(projectRoot) {
18384
18476
  }
18385
18477
  var SSH_DIR, NON_KEY_NAMES, ownedAgentPid, ASKPASS_SCRIPT;
18386
18478
  var init_git_ssh = __esm({
18387
- "packages/server/dist/git-ssh.js"() {
18479
+ "../server/dist/git-ssh.js"() {
18388
18480
  "use strict";
18389
18481
  SSH_DIR = path45.join(os4.homedir(), ".ssh");
18390
18482
  NON_KEY_NAMES = /* @__PURE__ */ new Set(["known_hosts", "known_hosts2", "authorized_keys", "config"]);
@@ -18397,7 +18489,7 @@ printf '%s\\n' "$HALO_SSH_PASSPHRASE"
18397
18489
  }
18398
18490
  });
18399
18491
 
18400
- // packages/server/dist/routes/git.js
18492
+ // ../server/dist/routes/git.js
18401
18493
  import { Hono as Hono3 } from "hono";
18402
18494
  import os5 from "node:os";
18403
18495
  import path46 from "node:path";
@@ -18763,7 +18855,7 @@ function createGitRoutes() {
18763
18855
  return app2;
18764
18856
  }
18765
18857
  var init_git = __esm({
18766
- "packages/server/dist/routes/git.js"() {
18858
+ "../server/dist/routes/git.js"() {
18767
18859
  "use strict";
18768
18860
  init_dist();
18769
18861
  init_workspace_path();
@@ -18773,7 +18865,7 @@ var init_git = __esm({
18773
18865
  }
18774
18866
  });
18775
18867
 
18776
- // packages/server/dist/routes/mtime-cache.js
18868
+ // ../server/dist/routes/mtime-cache.js
18777
18869
  function createMtimeCache() {
18778
18870
  const entries = /* @__PURE__ */ new Map();
18779
18871
  return {
@@ -18788,12 +18880,12 @@ function createMtimeCache() {
18788
18880
  };
18789
18881
  }
18790
18882
  var init_mtime_cache = __esm({
18791
- "packages/server/dist/routes/mtime-cache.js"() {
18883
+ "../server/dist/routes/mtime-cache.js"() {
18792
18884
  "use strict";
18793
18885
  }
18794
18886
  });
18795
18887
 
18796
- // packages/server/dist/routes/agent-configs.js
18888
+ // ../server/dist/routes/agent-configs.js
18797
18889
  import { Hono as Hono4 } from "hono";
18798
18890
  import fs39 from "node:fs/promises";
18799
18891
  import path47 from "node:path";
@@ -19327,7 +19419,7 @@ ${body.description ?? ""}
19327
19419
  }
19328
19420
  var _cachedTools, GLOBAL_AGENTS_DIR4, FALLBACK_SCAFFOLD_PROVIDER, _yamlCache;
19329
19421
  var init_agent_configs = __esm({
19330
- "packages/server/dist/routes/agent-configs.js"() {
19422
+ "../server/dist/routes/agent-configs.js"() {
19331
19423
  "use strict";
19332
19424
  init_workspace_tools();
19333
19425
  init_draft_tool();
@@ -19344,7 +19436,7 @@ var init_agent_configs = __esm({
19344
19436
  }
19345
19437
  });
19346
19438
 
19347
- // packages/server/dist/routes/skills.js
19439
+ // ../server/dist/routes/skills.js
19348
19440
  import { Hono as Hono5 } from "hono";
19349
19441
  import fs40 from "node:fs/promises";
19350
19442
  import path48 from "node:path";
@@ -19539,7 +19631,7 @@ function createSkillRoutes() {
19539
19631
  }
19540
19632
  var GLOBAL_SETTINGS_PATH, _skillMdCache;
19541
19633
  var init_skills = __esm({
19542
- "packages/server/dist/routes/skills.js"() {
19634
+ "../server/dist/routes/skills.js"() {
19543
19635
  "use strict";
19544
19636
  init_agent_loader();
19545
19637
  init_db();
@@ -19550,7 +19642,7 @@ var init_skills = __esm({
19550
19642
  }
19551
19643
  });
19552
19644
 
19553
- // packages/server/dist/routes/settings.js
19645
+ // ../server/dist/routes/settings.js
19554
19646
  import { Hono as Hono6 } from "hono";
19555
19647
  import fs41 from "node:fs/promises";
19556
19648
  import path49 from "node:path";
@@ -19819,7 +19911,7 @@ function createSettingsRoutes() {
19819
19911
  }
19820
19912
  var GLOBAL_SETTINGS_PATH2, _changeListeners;
19821
19913
  var init_settings = __esm({
19822
- "packages/server/dist/routes/settings.js"() {
19914
+ "../server/dist/routes/settings.js"() {
19823
19915
  "use strict";
19824
19916
  init_settings_schema();
19825
19917
  init_workspace_path();
@@ -19828,7 +19920,7 @@ var init_settings = __esm({
19828
19920
  }
19829
19921
  });
19830
19922
 
19831
- // packages/server/dist/evolution/archive.js
19923
+ // ../server/dist/evolution/archive.js
19832
19924
  import fs42 from "node:fs";
19833
19925
  import path50 from "node:path";
19834
19926
  import { pipeline } from "node:stream/promises";
@@ -19995,7 +20087,7 @@ function stopArchiveDaemon() {
19995
20087
  }
19996
20088
  var TERMINAL_RUN_STATUSES, TERMINAL_APPLY_STATUSES, DAY_MS, ARCHIVE_AFTER_MS, PURGE_AFTER_MS, _archiveTimer, _startupTimer;
19997
20089
  var init_archive = __esm({
19998
- "packages/server/dist/evolution/archive.js"() {
20090
+ "../server/dist/evolution/archive.js"() {
19999
20091
  "use strict";
20000
20092
  init_evo_db();
20001
20093
  init_paths();
@@ -20009,7 +20101,7 @@ var init_archive = __esm({
20009
20101
  }
20010
20102
  });
20011
20103
 
20012
- // packages/server/dist/db/raw-sqlite.js
20104
+ // ../server/dist/db/raw-sqlite.js
20013
20105
  function rawSqlite(db) {
20014
20106
  const withClient = db;
20015
20107
  const client = withClient.$client ?? withClient.session?.client;
@@ -20018,12 +20110,12 @@ function rawSqlite(db) {
20018
20110
  return client;
20019
20111
  }
20020
20112
  var init_raw_sqlite = __esm({
20021
- "packages/server/dist/db/raw-sqlite.js"() {
20113
+ "../server/dist/db/raw-sqlite.js"() {
20022
20114
  "use strict";
20023
20115
  }
20024
20116
  });
20025
20117
 
20026
- // packages/server/dist/routes/evolution.js
20118
+ // ../server/dist/routes/evolution.js
20027
20119
  import { Hono as Hono7 } from "hono";
20028
20120
  import { eq as eq11, desc as desc2, lt as lt3, and as and8, or, sql } from "drizzle-orm";
20029
20121
  import fs43 from "node:fs/promises";
@@ -20281,7 +20373,7 @@ function extractText(content) {
20281
20373
  }
20282
20374
  var UNDELETABLE_RUN_STATUSES;
20283
20375
  var init_evolution = __esm({
20284
- "packages/server/dist/routes/evolution.js"() {
20376
+ "../server/dist/routes/evolution.js"() {
20285
20377
  "use strict";
20286
20378
  init_evo_db();
20287
20379
  init_archive();
@@ -20292,7 +20384,7 @@ var init_evolution = __esm({
20292
20384
  }
20293
20385
  });
20294
20386
 
20295
- // packages/server/dist/routes/sessions.js
20387
+ // ../server/dist/routes/sessions.js
20296
20388
  import { Hono as Hono8 } from "hono";
20297
20389
  import { and as and9, eq as eq12, gte as gte2, lt as lt4 } from "drizzle-orm";
20298
20390
  function rawId() {
@@ -20547,7 +20639,7 @@ function createSessionRoutes(smRegistry) {
20547
20639
  }
20548
20640
  var msgCounter2;
20549
20641
  var init_sessions = __esm({
20550
- "packages/server/dist/routes/sessions.js"() {
20642
+ "../server/dist/routes/sessions.js"() {
20551
20643
  "use strict";
20552
20644
  init_db();
20553
20645
  init_schema();
@@ -20559,7 +20651,7 @@ var init_sessions = __esm({
20559
20651
  }
20560
20652
  });
20561
20653
 
20562
- // packages/server/dist/routes/session-archive.js
20654
+ // ../server/dist/routes/session-archive.js
20563
20655
  import { Hono as Hono9 } from "hono";
20564
20656
  function createSessionArchiveRoutes(smRegistry) {
20565
20657
  const app2 = new Hono9();
@@ -20592,7 +20684,7 @@ function createSessionArchiveRoutes(smRegistry) {
20592
20684
  return app2;
20593
20685
  }
20594
20686
  var init_session_archive2 = __esm({
20595
- "packages/server/dist/routes/session-archive.js"() {
20687
+ "../server/dist/routes/session-archive.js"() {
20596
20688
  "use strict";
20597
20689
  init_db();
20598
20690
  init_session_store();
@@ -20601,7 +20693,7 @@ var init_session_archive2 = __esm({
20601
20693
  }
20602
20694
  });
20603
20695
 
20604
- // packages/server/dist/db/channel-db.js
20696
+ // ../server/dist/db/channel-db.js
20605
20697
  import Database5 from "better-sqlite3";
20606
20698
  import { drizzle as drizzle4 } from "drizzle-orm/better-sqlite3";
20607
20699
  import { sqliteTable as sqliteTable4, text as text4, integer as integer4 } from "drizzle-orm/sqlite-core";
@@ -20627,7 +20719,7 @@ function getChannelDb() {
20627
20719
  }
20628
20720
  var channelAccounts, CREATE_SQL3, _channelDb;
20629
20721
  var init_channel_db = __esm({
20630
- "packages/server/dist/db/channel-db.js"() {
20722
+ "../server/dist/db/channel-db.js"() {
20631
20723
  "use strict";
20632
20724
  init_migrate();
20633
20725
  channelAccounts = sqliteTable4("channel_accounts", {
@@ -20661,7 +20753,7 @@ CREATE INDEX IF NOT EXISTS idx_channel_accounts_type ON channel_accounts(channel
20661
20753
  }
20662
20754
  });
20663
20755
 
20664
- // packages/server/dist/channels/shared/accounts.js
20756
+ // ../server/dist/channels/shared/accounts.js
20665
20757
  import fs45 from "node:fs";
20666
20758
  import path53 from "node:path";
20667
20759
  import { eq as eq13, and as and10 } from "drizzle-orm";
@@ -20782,7 +20874,7 @@ function deleteAccount(db, accountId) {
20782
20874
  }
20783
20875
  var ACCOUNT_ACCESS_LEVELS, CHAT_ACCESS_LEVELS, _lastActiveChatCache, _wechatContextTokenCache;
20784
20876
  var init_accounts = __esm({
20785
- "packages/server/dist/channels/shared/accounts.js"() {
20877
+ "../server/dist/channels/shared/accounts.js"() {
20786
20878
  "use strict";
20787
20879
  init_channel_db();
20788
20880
  init_init();
@@ -20793,7 +20885,7 @@ var init_accounts = __esm({
20793
20885
  }
20794
20886
  });
20795
20887
 
20796
- // packages/server/dist/channels/web/accounts.js
20888
+ // ../server/dist/channels/web/accounts.js
20797
20889
  function toWeb(a) {
20798
20890
  const c = a.config;
20799
20891
  return {
@@ -20856,14 +20948,14 @@ function deleteAccount2(db, accountId) {
20856
20948
  }
20857
20949
  var CH;
20858
20950
  var init_accounts2 = __esm({
20859
- "packages/server/dist/channels/web/accounts.js"() {
20951
+ "../server/dist/channels/web/accounts.js"() {
20860
20952
  "use strict";
20861
20953
  init_accounts();
20862
20954
  CH = "web";
20863
20955
  }
20864
20956
  });
20865
20957
 
20866
- // packages/server/dist/middleware/brute-force.js
20958
+ // ../server/dist/middleware/brute-force.js
20867
20959
  import { getConnInfo } from "@hono/node-server/conninfo";
20868
20960
  function bucket(name) {
20869
20961
  let b = buckets.get(name);
@@ -20914,7 +21006,7 @@ function clearFailures(bucketName, ip) {
20914
21006
  }
20915
21007
  var MAX_ATTEMPTS, LOCKOUT_MS, buckets;
20916
21008
  var init_brute_force = __esm({
20917
- "packages/server/dist/middleware/brute-force.js"() {
21009
+ "../server/dist/middleware/brute-force.js"() {
20918
21010
  "use strict";
20919
21011
  init_config();
20920
21012
  MAX_ATTEMPTS = 5;
@@ -20923,7 +21015,7 @@ var init_brute_force = __esm({
20923
21015
  }
20924
21016
  });
20925
21017
 
20926
- // packages/server/dist/middleware/web-token.js
21018
+ // ../server/dist/middleware/web-token.js
20927
21019
  function resolveTokenAuth(c, db) {
20928
21020
  const ip = getClientIp(c);
20929
21021
  if (isLockedOut(TOKEN_BUCKET, ip))
@@ -20945,7 +21037,7 @@ function tokenAuthJsonError(c, reason) {
20945
21037
  }
20946
21038
  var TOKEN_BUCKET, TOKEN_AUTH_STATUS, JSON_ERROR;
20947
21039
  var init_web_token = __esm({
20948
- "packages/server/dist/middleware/web-token.js"() {
21040
+ "../server/dist/middleware/web-token.js"() {
20949
21041
  "use strict";
20950
21042
  init_accounts2();
20951
21043
  init_brute_force();
@@ -20963,17 +21055,17 @@ var init_web_token = __esm({
20963
21055
  }
20964
21056
  });
20965
21057
 
20966
- // packages/server/dist/channels/shared/session-prefix.js
21058
+ // ../server/dist/channels/shared/session-prefix.js
20967
21059
  function sessionPrefix(channel, userId) {
20968
21060
  return `${channel}_${userId}_`;
20969
21061
  }
20970
21062
  var init_session_prefix = __esm({
20971
- "packages/server/dist/channels/shared/session-prefix.js"() {
21063
+ "../server/dist/channels/shared/session-prefix.js"() {
20972
21064
  "use strict";
20973
21065
  }
20974
21066
  });
20975
21067
 
20976
- // packages/server/dist/channels/web/handler.js
21068
+ // ../server/dist/channels/web/handler.js
20977
21069
  function buildWebSessionPrefix(accountId) {
20978
21070
  return sessionPrefix("web", accountId);
20979
21071
  }
@@ -21390,7 +21482,7 @@ function createMediaBuffer() {
21390
21482
  };
21391
21483
  }
21392
21484
  var init_handler = __esm({
21393
- "packages/server/dist/channels/web/handler.js"() {
21485
+ "../server/dist/channels/web/handler.js"() {
21394
21486
  "use strict";
21395
21487
  init_ui_log_builder();
21396
21488
  init_accounts2();
@@ -21407,7 +21499,7 @@ var init_handler = __esm({
21407
21499
  }
21408
21500
  });
21409
21501
 
21410
- // packages/core/dist/protocol/session-message.js
21502
+ // ../core/dist/protocol/session-message.js
21411
21503
  function inferMessageType(msg) {
21412
21504
  if (msg.type)
21413
21505
  return msg.type;
@@ -21426,20 +21518,20 @@ function inferMessageType(msg) {
21426
21518
  return "notification";
21427
21519
  }
21428
21520
  var init_session_message = __esm({
21429
- "packages/core/dist/protocol/session-message.js"() {
21521
+ "../core/dist/protocol/session-message.js"() {
21430
21522
  "use strict";
21431
21523
  }
21432
21524
  });
21433
21525
 
21434
- // packages/core/dist/protocol/index.js
21526
+ // ../core/dist/protocol/index.js
21435
21527
  var init_protocol = __esm({
21436
- "packages/core/dist/protocol/index.js"() {
21528
+ "../core/dist/protocol/index.js"() {
21437
21529
  "use strict";
21438
21530
  init_session_message();
21439
21531
  }
21440
21532
  });
21441
21533
 
21442
- // packages/server/dist/sessions/session-types.js
21534
+ // ../server/dist/sessions/session-types.js
21443
21535
  function messageToolCalls(msg) {
21444
21536
  if (msg.contentBlocks) {
21445
21537
  return msg.contentBlocks.filter((b) => b.type === "tool_call").map((b) => b.toolCall);
@@ -21447,13 +21539,13 @@ function messageToolCalls(msg) {
21447
21539
  return msg.toolCalls ?? [];
21448
21540
  }
21449
21541
  var init_session_types = __esm({
21450
- "packages/server/dist/sessions/session-types.js"() {
21542
+ "../server/dist/sessions/session-types.js"() {
21451
21543
  "use strict";
21452
21544
  init_protocol();
21453
21545
  }
21454
21546
  });
21455
21547
 
21456
- // packages/server/dist/routes/halo-city.js
21548
+ // ../server/dist/routes/halo-city.js
21457
21549
  import { Hono as Hono10 } from "hono";
21458
21550
  import fs46 from "node:fs";
21459
21551
  import path54 from "node:path";
@@ -21840,7 +21932,7 @@ function createShowRoutes(registry2) {
21840
21932
  }
21841
21933
  var SESSIONS_PER_WS, _skillCache, _metaCache, _roReaders, SESSION_LOG_MAX_MSGS, _birthCache;
21842
21934
  var init_halo_city = __esm({
21843
- "packages/server/dist/routes/halo-city.js"() {
21935
+ "../server/dist/routes/halo-city.js"() {
21844
21936
  "use strict";
21845
21937
  init_channel_db();
21846
21938
  init_web_token();
@@ -21858,7 +21950,7 @@ var init_halo_city = __esm({
21858
21950
  }
21859
21951
  });
21860
21952
 
21861
- // packages/server/dist/routes/metrics.js
21953
+ // ../server/dist/routes/metrics.js
21862
21954
  import { Hono as Hono11 } from "hono";
21863
21955
  function family(name, type, help, samples) {
21864
21956
  const lines = [`# HELP ${name} ${help}`, `# TYPE ${name} ${type}`];
@@ -21937,7 +22029,7 @@ function createMetricsRoutes(registry2) {
21937
22029
  }
21938
22030
  var TEXT_ERROR, SESSIONS_PER_WS2;
21939
22031
  var init_metrics = __esm({
21940
- "packages/server/dist/routes/metrics.js"() {
22032
+ "../server/dist/routes/metrics.js"() {
21941
22033
  "use strict";
21942
22034
  init_channel_db();
21943
22035
  init_web_token();
@@ -21951,7 +22043,7 @@ var init_metrics = __esm({
21951
22043
  }
21952
22044
  });
21953
22045
 
21954
- // packages/server/dist/routes/commands.js
22046
+ // ../server/dist/routes/commands.js
21955
22047
  import { Hono as Hono12 } from "hono";
21956
22048
  function createCommandRoutes(registry2, smRegistry) {
21957
22049
  const app2 = new Hono12();
@@ -21976,12 +22068,12 @@ function createCommandRoutes(registry2, smRegistry) {
21976
22068
  return app2;
21977
22069
  }
21978
22070
  var init_commands3 = __esm({
21979
- "packages/server/dist/routes/commands.js"() {
22071
+ "../server/dist/routes/commands.js"() {
21980
22072
  "use strict";
21981
22073
  }
21982
22074
  });
21983
22075
 
21984
- // packages/server/dist/routes/agentcore.js
22076
+ // ../server/dist/routes/agentcore.js
21985
22077
  import { Hono as Hono13 } from "hono";
21986
22078
  import path55 from "node:path";
21987
22079
  import fs47 from "node:fs";
@@ -22330,7 +22422,7 @@ ${fullText}`, images.length > 0 ? images : void 0);
22330
22422
  }
22331
22423
  var SESSION_HEADER, MAX_IMAGES_PER_MESSAGE, MAX_IMAGE_BASE64_LENGTH, MAX_PENDING_UPLOADS, MAX_CHUNKS_PER_UPLOAD, activeOverrides;
22332
22424
  var init_agentcore = __esm({
22333
- "packages/server/dist/routes/agentcore.js"() {
22425
+ "../server/dist/routes/agentcore.js"() {
22334
22426
  "use strict";
22335
22427
  init_commands2();
22336
22428
  init_ui_log_builder();
@@ -22345,7 +22437,7 @@ var init_agentcore = __esm({
22345
22437
  }
22346
22438
  });
22347
22439
 
22348
- // packages/server/dist/ws/file-watcher.js
22440
+ // ../server/dist/ws/file-watcher.js
22349
22441
  import fs48 from "node:fs";
22350
22442
  import path56 from "node:path";
22351
22443
  function enqueueNativeOp(op) {
@@ -22367,7 +22459,7 @@ function isUnwatchablePath(absPath) {
22367
22459
  }
22368
22460
  var IGNORED_SEGMENTS, IS_WIN32, IGNORED_SEGMENT_SET, NATIVE_IGNORE, nativeOpChain, WorkspaceWatcher;
22369
22461
  var init_file_watcher = __esm({
22370
- "packages/server/dist/ws/file-watcher.js"() {
22462
+ "../server/dist/ws/file-watcher.js"() {
22371
22463
  "use strict";
22372
22464
  IGNORED_SEGMENTS = [
22373
22465
  // VCS
@@ -22589,12 +22681,12 @@ var init_file_watcher = __esm({
22589
22681
  }
22590
22682
  });
22591
22683
 
22592
- // packages/server/dist/ws/git-dir-watcher.js
22684
+ // ../server/dist/ws/git-dir-watcher.js
22593
22685
  import fs49 from "node:fs";
22594
22686
  import path57 from "node:path";
22595
22687
  var GitDirWatcher;
22596
22688
  var init_git_dir_watcher = __esm({
22597
- "packages/server/dist/ws/git-dir-watcher.js"() {
22689
+ "../server/dist/ws/git-dir-watcher.js"() {
22598
22690
  "use strict";
22599
22691
  GitDirWatcher = class {
22600
22692
  watcher = null;
@@ -22713,7 +22805,7 @@ var init_git_dir_watcher = __esm({
22713
22805
  }
22714
22806
  });
22715
22807
 
22716
- // packages/server/dist/ws/event-processor.js
22808
+ // ../server/dist/ws/event-processor.js
22717
22809
  function sendJson(ws, data) {
22718
22810
  if (ws.readyState === ws.OPEN) {
22719
22811
  try {
@@ -22812,16 +22904,16 @@ function bufferDetachedNotification(event, pendingEvents) {
22812
22904
  }
22813
22905
  }
22814
22906
  var init_event_processor = __esm({
22815
- "packages/server/dist/ws/event-processor.js"() {
22907
+ "../server/dist/ws/event-processor.js"() {
22816
22908
  "use strict";
22817
22909
  init_ui_log_builder();
22818
22910
  }
22819
22911
  });
22820
22912
 
22821
- // packages/server/dist/ws/watcher-pool.js
22913
+ // ../server/dist/ws/watcher-pool.js
22822
22914
  var WatcherPool;
22823
22915
  var init_watcher_pool = __esm({
22824
- "packages/server/dist/ws/watcher-pool.js"() {
22916
+ "../server/dist/ws/watcher-pool.js"() {
22825
22917
  "use strict";
22826
22918
  init_file_watcher();
22827
22919
  init_git_dir_watcher();
@@ -22879,7 +22971,7 @@ var init_watcher_pool = __esm({
22879
22971
  }
22880
22972
  });
22881
22973
 
22882
- // packages/server/dist/ws/terminal-manager.js
22974
+ // ../server/dist/ws/terminal-manager.js
22883
22975
  import { homedir as homedir22 } from "node:os";
22884
22976
  import { basename } from "node:path";
22885
22977
  import { createRequire } from "node:module";
@@ -22910,7 +23002,7 @@ function attachListenersOnce(t2) {
22910
23002
  }
22911
23003
  var requireFromHere, ptyModule, TERMINAL_GRACE_MS, terminals, TerminalManager;
22912
23004
  var init_terminal_manager = __esm({
22913
- "packages/server/dist/ws/terminal-manager.js"() {
23005
+ "../server/dist/ws/terminal-manager.js"() {
22914
23006
  "use strict";
22915
23007
  init_config();
22916
23008
  init_child_env();
@@ -23058,7 +23150,7 @@ var init_terminal_manager = __esm({
23058
23150
  }
23059
23151
  });
23060
23152
 
23061
- // packages/server/dist/ws/handler.js
23153
+ // ../server/dist/ws/handler.js
23062
23154
  import path58 from "node:path";
23063
23155
  function setupWebSocketHandler(deps) {
23064
23156
  const { wss: wss2, registry: registry2 } = deps;
@@ -23674,7 +23766,7 @@ ${msg.message}` : markers.join("\n");
23674
23766
  }
23675
23767
  var CLIENT_SILENCE_LIMIT_MS, detachedSessions;
23676
23768
  var init_handler2 = __esm({
23677
- "packages/server/dist/ws/handler.js"() {
23769
+ "../server/dist/ws/handler.js"() {
23678
23770
  "use strict";
23679
23771
  init_ui_log_builder();
23680
23772
  init_config();
@@ -23692,7 +23784,7 @@ var init_handler2 = __esm({
23692
23784
  }
23693
23785
  });
23694
23786
 
23695
- // packages/server/dist/db/cron-db.js
23787
+ // ../server/dist/db/cron-db.js
23696
23788
  import Database7 from "better-sqlite3";
23697
23789
  import { drizzle as drizzle5 } from "drizzle-orm/better-sqlite3";
23698
23790
  import { sqliteTable as sqliteTable5, text as text5, integer as integer5 } from "drizzle-orm/sqlite-core";
@@ -23717,7 +23809,7 @@ function getCronDb() {
23717
23809
  }
23718
23810
  var cronJobs, cronRuns, CREATE_SQL4, CRON_MIGRATIONS, _cronDb;
23719
23811
  var init_cron_db = __esm({
23720
- "packages/server/dist/db/cron-db.js"() {
23812
+ "../server/dist/db/cron-db.js"() {
23721
23813
  "use strict";
23722
23814
  init_migrate();
23723
23815
  cronJobs = sqliteTable5("cron_jobs", {
@@ -23837,7 +23929,7 @@ CREATE INDEX IF NOT EXISTS idx_cron_runs_status ON cron_runs(status);
23837
23929
  }
23838
23930
  });
23839
23931
 
23840
- // packages/server/dist/cron/dispatcher.js
23932
+ // ../server/dist/cron/dispatcher.js
23841
23933
  function registerCronDispatcher(d) {
23842
23934
  _registry2.set(d.channelType, d);
23843
23935
  }
@@ -23884,14 +23976,14 @@ async function dispatchToTargets(rawText, targets, workspacePath) {
23884
23976
  }
23885
23977
  var _registry2;
23886
23978
  var init_dispatcher = __esm({
23887
- "packages/server/dist/cron/dispatcher.js"() {
23979
+ "../server/dist/cron/dispatcher.js"() {
23888
23980
  "use strict";
23889
23981
  init_media();
23890
23982
  _registry2 = /* @__PURE__ */ new Map();
23891
23983
  }
23892
23984
  });
23893
23985
 
23894
- // packages/server/dist/cron/runner.js
23986
+ // ../server/dist/cron/runner.js
23895
23987
  import { spawn as spawn3, execFileSync } from "node:child_process";
23896
23988
  import fs51 from "node:fs";
23897
23989
  import path60 from "node:path";
@@ -24418,7 +24510,7 @@ function pruneOldLogs() {
24418
24510
  }
24419
24511
  var DAY_MS2, CLI_TIMEOUT_SEC, KILL_GRACE_SEC, UNATTENDED_PREAMBLE, RUNS_PER_JOB_KEEP, LOG_RETENTION_DAYS, _active, _inflight, _fingerprint, _daemonTimers, _lastCronDataVersion;
24420
24512
  var init_runner = __esm({
24421
- "packages/server/dist/cron/runner.js"() {
24513
+ "../server/dist/cron/runner.js"() {
24422
24514
  "use strict";
24423
24515
  init_cron_db();
24424
24516
  init_raw_sqlite();
@@ -24439,7 +24531,7 @@ var init_runner = __esm({
24439
24531
  }
24440
24532
  });
24441
24533
 
24442
- // packages/server/dist/routes/cron.js
24534
+ // ../server/dist/routes/cron.js
24443
24535
  import { Hono as Hono14 } from "hono";
24444
24536
  import { eq as eq15, desc as desc3, lt as lt6, and as and11 } from "drizzle-orm";
24445
24537
  import fs52 from "node:fs/promises";
@@ -24711,7 +24803,7 @@ function computeNextRun(j) {
24711
24803
  }
24712
24804
  var TIMEOUT_SEC_MIN, TIMEOUT_SEC_MAX;
24713
24805
  var init_cron = __esm({
24714
- "packages/server/dist/routes/cron.js"() {
24806
+ "../server/dist/routes/cron.js"() {
24715
24807
  "use strict";
24716
24808
  init_cron_db();
24717
24809
  init_runner();
@@ -24722,7 +24814,7 @@ var init_cron = __esm({
24722
24814
  }
24723
24815
  });
24724
24816
 
24725
- // packages/server/dist/evolution/ticker.js
24817
+ // ../server/dist/evolution/ticker.js
24726
24818
  import { eq as eq16, and as and12, or as or2, asc, isNull as isNull6, sql as sql2 } from "drizzle-orm";
24727
24819
  function setEvoSpawner(fn) {
24728
24820
  _spawner = fn;
@@ -24948,7 +25040,7 @@ function claimApply(id) {
24948
25040
  }
24949
25041
  var _lastRunStatus, _lastApplyStatus, _spawner, TICK_INTERVAL_MS, _interval, _startupTimer2;
24950
25042
  var init_ticker = __esm({
24951
- "packages/server/dist/evolution/ticker.js"() {
25043
+ "../server/dist/evolution/ticker.js"() {
24952
25044
  "use strict";
24953
25045
  init_config();
24954
25046
  init_evo_db();
@@ -24964,13 +25056,13 @@ var init_ticker = __esm({
24964
25056
  }
24965
25057
  });
24966
25058
 
24967
- // packages/server/dist/evolution/spawn.js
25059
+ // ../server/dist/evolution/spawn.js
24968
25060
  import path61 from "node:path";
24969
25061
  import { spawn as spawn4 } from "node:child_process";
24970
25062
  import { fileURLToPath as fileURLToPath2 } from "node:url";
24971
25063
  var __dirname2, WRAPPER_PATH, realEvoSpawner;
24972
25064
  var init_spawn = __esm({
24973
- "packages/server/dist/evolution/spawn.js"() {
25065
+ "../server/dist/evolution/spawn.js"() {
24974
25066
  "use strict";
24975
25067
  init_child_env();
24976
25068
  __dirname2 = path61.dirname(fileURLToPath2(import.meta.url));
@@ -24992,7 +25084,7 @@ var init_spawn = __esm({
24992
25084
  }
24993
25085
  });
24994
25086
 
24995
- // packages/server/dist/channels/registry.js
25087
+ // ../server/dist/channels/registry.js
24996
25088
  function bootChannels(app2, descriptors, deps) {
24997
25089
  for (const d of descriptors) {
24998
25090
  if (d.registerCronDispatcher)
@@ -25017,13 +25109,13 @@ async function shutdownChannels() {
25017
25109
  }
25018
25110
  var _running;
25019
25111
  var init_registry2 = __esm({
25020
- "packages/server/dist/channels/registry.js"() {
25112
+ "../server/dist/channels/registry.js"() {
25021
25113
  "use strict";
25022
25114
  _running = [];
25023
25115
  }
25024
25116
  });
25025
25117
 
25026
- // packages/server/dist/channels/telegram/accounts.js
25118
+ // ../server/dist/channels/telegram/accounts.js
25027
25119
  function toTelegram(a) {
25028
25120
  const c = a.config;
25029
25121
  return {
@@ -25097,14 +25189,14 @@ function deleteAccount3(db, accountId) {
25097
25189
  }
25098
25190
  var CH2;
25099
25191
  var init_accounts3 = __esm({
25100
- "packages/server/dist/channels/telegram/accounts.js"() {
25192
+ "../server/dist/channels/telegram/accounts.js"() {
25101
25193
  "use strict";
25102
25194
  init_accounts();
25103
25195
  CH2 = "telegram";
25104
25196
  }
25105
25197
  });
25106
25198
 
25107
- // packages/server/dist/channels/shared/chunk.js
25199
+ // ../server/dist/channels/shared/chunk.js
25108
25200
  function splitText(text6, limit) {
25109
25201
  const out = [];
25110
25202
  let rest = text6;
@@ -25120,15 +25212,15 @@ function splitText(text6, limit) {
25120
25212
  return out;
25121
25213
  }
25122
25214
  var init_chunk = __esm({
25123
- "packages/server/dist/channels/shared/chunk.js"() {
25215
+ "../server/dist/channels/shared/chunk.js"() {
25124
25216
  "use strict";
25125
25217
  }
25126
25218
  });
25127
25219
 
25128
- // packages/server/dist/channels/telegram/event-adapter.js
25220
+ // ../server/dist/channels/telegram/event-adapter.js
25129
25221
  var HARD_CHARS, TelegramResponder;
25130
25222
  var init_event_adapter = __esm({
25131
- "packages/server/dist/channels/telegram/event-adapter.js"() {
25223
+ "../server/dist/channels/telegram/event-adapter.js"() {
25132
25224
  "use strict";
25133
25225
  init_chunk();
25134
25226
  init_media();
@@ -25211,7 +25303,7 @@ var init_event_adapter = __esm({
25211
25303
  }
25212
25304
  });
25213
25305
 
25214
- // packages/server/dist/channels/shared/busy-hint.js
25306
+ // ../server/dist/channels/shared/busy-hint.js
25215
25307
  function busyHint(sm, sessionId, lang) {
25216
25308
  if (sm.isSessionCompacting(sessionId))
25217
25309
  return t("handler.compacting", lang);
@@ -25220,13 +25312,13 @@ function busyHint(sm, sessionId, lang) {
25220
25312
  return null;
25221
25313
  }
25222
25314
  var init_busy_hint = __esm({
25223
- "packages/server/dist/channels/shared/busy-hint.js"() {
25315
+ "../server/dist/channels/shared/busy-hint.js"() {
25224
25316
  "use strict";
25225
25317
  init_i18n();
25226
25318
  }
25227
25319
  });
25228
25320
 
25229
- // packages/server/dist/channels/shared/inbound.js
25321
+ // ../server/dist/channels/shared/inbound.js
25230
25322
  function sessionAccess(accountAccessLevel) {
25231
25323
  return accountAccessLevel === "full" ? null : accountAccessLevel === "workspace" ? "workspace" : "readonly";
25232
25324
  }
@@ -25284,7 +25376,7 @@ async function dispatchChannelCommand(ctx, command, arg, opts) {
25284
25376
  }
25285
25377
  var InboundBridge;
25286
25378
  var init_inbound = __esm({
25287
- "packages/server/dist/channels/shared/inbound.js"() {
25379
+ "../server/dist/channels/shared/inbound.js"() {
25288
25380
  "use strict";
25289
25381
  init_goal_mode();
25290
25382
  init_accounts();
@@ -25354,7 +25446,7 @@ var init_inbound = __esm({
25354
25446
  }
25355
25447
  });
25356
25448
 
25357
- // packages/server/dist/channels/telegram/handler.js
25449
+ // ../server/dist/channels/telegram/handler.js
25358
25450
  import { Bot, InputFile } from "grammy";
25359
25451
  function inferMediaKind(filePath) {
25360
25452
  const cls = classifyMedia(filePath);
@@ -25741,7 +25833,7 @@ async function handleUserMessage(args) {
25741
25833
  }
25742
25834
  var MAX_TG_DOWNLOAD_BYTES;
25743
25835
  var init_handler3 = __esm({
25744
- "packages/server/dist/channels/telegram/handler.js"() {
25836
+ "../server/dist/channels/telegram/handler.js"() {
25745
25837
  "use strict";
25746
25838
  init_accounts3();
25747
25839
  init_event_adapter();
@@ -25756,7 +25848,7 @@ var init_handler3 = __esm({
25756
25848
  }
25757
25849
  });
25758
25850
 
25759
- // packages/server/dist/routes/telegram.js
25851
+ // ../server/dist/routes/telegram.js
25760
25852
  import { Hono as Hono15 } from "hono";
25761
25853
  import { Bot as Bot2 } from "grammy";
25762
25854
  import fs53 from "node:fs";
@@ -25875,14 +25967,14 @@ function createTelegramRoutes(deps) {
25875
25967
  return app2;
25876
25968
  }
25877
25969
  var init_telegram = __esm({
25878
- "packages/server/dist/routes/telegram.js"() {
25970
+ "../server/dist/routes/telegram.js"() {
25879
25971
  "use strict";
25880
25972
  init_accounts3();
25881
25973
  init_accounts();
25882
25974
  }
25883
25975
  });
25884
25976
 
25885
- // packages/server/dist/channels/telegram/cron-dispatcher.js
25977
+ // ../server/dist/channels/telegram/cron-dispatcher.js
25886
25978
  import { Bot as Bot3 } from "grammy";
25887
25979
  async function dispatch(accountId, text6, explicitChatId) {
25888
25980
  const acct = getAccount3(getChannelDb(), accountId);
@@ -25931,7 +26023,7 @@ function registerTelegramCronDispatcher() {
25931
26023
  registerCronDispatcher({ channelType: "telegram", dispatch, listTargets });
25932
26024
  }
25933
26025
  var init_cron_dispatcher = __esm({
25934
- "packages/server/dist/channels/telegram/cron-dispatcher.js"() {
26026
+ "../server/dist/channels/telegram/cron-dispatcher.js"() {
25935
26027
  "use strict";
25936
26028
  init_channel_db();
25937
26029
  init_accounts3();
@@ -25939,10 +26031,10 @@ var init_cron_dispatcher = __esm({
25939
26031
  }
25940
26032
  });
25941
26033
 
25942
- // packages/server/dist/channels/telegram/descriptor.js
26034
+ // ../server/dist/channels/telegram/descriptor.js
25943
26035
  var telegramDescriptor;
25944
26036
  var init_descriptor = __esm({
25945
- "packages/server/dist/channels/telegram/descriptor.js"() {
26037
+ "../server/dist/channels/telegram/descriptor.js"() {
25946
26038
  "use strict";
25947
26039
  init_handler3();
25948
26040
  init_telegram();
@@ -25957,7 +26049,7 @@ var init_descriptor = __esm({
25957
26049
  }
25958
26050
  });
25959
26051
 
25960
- // packages/server/dist/channels/wechat/api.js
26052
+ // ../server/dist/channels/wechat/api.js
25961
26053
  import crypto3 from "node:crypto";
25962
26054
  function buildClientVersion(version) {
25963
26055
  const [ma, mi, pa] = version.split(".").map((p) => parseInt(p, 10));
@@ -26146,7 +26238,7 @@ async function notifyStop(params) {
26146
26238
  }
26147
26239
  var QR_BASE_URL, DEFAULT_BOT_TYPE, CHANNEL_VERSION, ILINK_APP_ID, ILINK_APP_CLIENT_VERSION, DEFAULT_LONG_POLL_TIMEOUT_MS, DEFAULT_API_TIMEOUT_MS;
26148
26240
  var init_api = __esm({
26149
- "packages/server/dist/channels/wechat/api.js"() {
26241
+ "../server/dist/channels/wechat/api.js"() {
26150
26242
  "use strict";
26151
26243
  QR_BASE_URL = "https://ilinkai.weixin.qq.com";
26152
26244
  DEFAULT_BOT_TYPE = "3";
@@ -26158,10 +26250,10 @@ var init_api = __esm({
26158
26250
  }
26159
26251
  });
26160
26252
 
26161
- // packages/server/dist/channels/wechat/types.js
26253
+ // ../server/dist/channels/wechat/types.js
26162
26254
  var MessageItemType, MessageType, MessageState, UploadMediaType;
26163
26255
  var init_types = __esm({
26164
- "packages/server/dist/channels/wechat/types.js"() {
26256
+ "../server/dist/channels/wechat/types.js"() {
26165
26257
  "use strict";
26166
26258
  MessageItemType = {
26167
26259
  NONE: 0,
@@ -26190,7 +26282,7 @@ var init_types = __esm({
26190
26282
  }
26191
26283
  });
26192
26284
 
26193
- // packages/server/dist/channels/wechat/accounts.js
26285
+ // ../server/dist/channels/wechat/accounts.js
26194
26286
  function toWechat(a) {
26195
26287
  const c = a.config;
26196
26288
  return {
@@ -26272,17 +26364,17 @@ function saveSyncBuf(db, accountId, syncBuf) {
26272
26364
  }
26273
26365
  var CH3;
26274
26366
  var init_accounts4 = __esm({
26275
- "packages/server/dist/channels/wechat/accounts.js"() {
26367
+ "../server/dist/channels/wechat/accounts.js"() {
26276
26368
  "use strict";
26277
26369
  init_accounts();
26278
26370
  CH3 = "wechat";
26279
26371
  }
26280
26372
  });
26281
26373
 
26282
- // packages/server/dist/channels/wechat/event-adapter.js
26374
+ // ../server/dist/channels/wechat/event-adapter.js
26283
26375
  var WECHAT_TEXT_LIMIT, WechatResponder;
26284
26376
  var init_event_adapter2 = __esm({
26285
- "packages/server/dist/channels/wechat/event-adapter.js"() {
26377
+ "../server/dist/channels/wechat/event-adapter.js"() {
26286
26378
  "use strict";
26287
26379
  init_chunk();
26288
26380
  init_media();
@@ -26386,7 +26478,7 @@ var init_event_adapter2 = __esm({
26386
26478
  }
26387
26479
  });
26388
26480
 
26389
- // packages/server/dist/channels/wechat/cdn.js
26481
+ // ../server/dist/channels/wechat/cdn.js
26390
26482
  import { createDecipheriv, createCipheriv, randomBytes as randomBytes2, createHash as createHash2 } from "node:crypto";
26391
26483
  function decryptAesEcb(ciphertext, key) {
26392
26484
  const decipher = createDecipheriv("aes-128-ecb", key, null);
@@ -26485,14 +26577,14 @@ async function uploadCiphertext(params) {
26485
26577
  }
26486
26578
  var CDN_BASE_URL, UPLOAD_MAX_RETRIES;
26487
26579
  var init_cdn = __esm({
26488
- "packages/server/dist/channels/wechat/cdn.js"() {
26580
+ "../server/dist/channels/wechat/cdn.js"() {
26489
26581
  "use strict";
26490
26582
  CDN_BASE_URL = "https://novac2c.cdn.weixin.qq.com/c2c";
26491
26583
  UPLOAD_MAX_RETRIES = 3;
26492
26584
  }
26493
26585
  });
26494
26586
 
26495
- // packages/server/dist/channels/wechat/send-media.js
26587
+ // ../server/dist/channels/wechat/send-media.js
26496
26588
  import fs54 from "node:fs/promises";
26497
26589
  import path62 from "node:path";
26498
26590
  function inferKind(filePath) {
@@ -26586,7 +26678,7 @@ function buildMessageItem(args) {
26586
26678
  };
26587
26679
  }
26588
26680
  var init_send_media = __esm({
26589
- "packages/server/dist/channels/wechat/send-media.js"() {
26681
+ "../server/dist/channels/wechat/send-media.js"() {
26590
26682
  "use strict";
26591
26683
  init_api();
26592
26684
  init_cdn();
@@ -26595,7 +26687,7 @@ var init_send_media = __esm({
26595
26687
  }
26596
26688
  });
26597
26689
 
26598
- // packages/server/dist/channels/wechat/login.js
26690
+ // ../server/dist/channels/wechat/login.js
26599
26691
  import { randomUUID as randomUUID2 } from "node:crypto";
26600
26692
  function isFresh(l) {
26601
26693
  return Date.now() - l.startedAt < ACTIVE_TTL_MS;
@@ -26697,7 +26789,7 @@ async function waitLogin(params) {
26697
26789
  }
26698
26790
  var ACTIVE_TTL_MS, MAX_QR_REFRESH, activeLogins;
26699
26791
  var init_login = __esm({
26700
- "packages/server/dist/channels/wechat/login.js"() {
26792
+ "../server/dist/channels/wechat/login.js"() {
26701
26793
  "use strict";
26702
26794
  init_api();
26703
26795
  ACTIVE_TTL_MS = 5 * 6e4;
@@ -26706,7 +26798,7 @@ var init_login = __esm({
26706
26798
  }
26707
26799
  });
26708
26800
 
26709
- // packages/server/dist/channels/wechat/handler.js
26801
+ // ../server/dist/channels/wechat/handler.js
26710
26802
  import fs55 from "node:fs";
26711
26803
  import path63 from "node:path";
26712
26804
  import QRCode from "qrcode";
@@ -27164,7 +27256,7 @@ function sleep2(ms, signal) {
27164
27256
  }
27165
27257
  var MAX_CONSECUTIVE_FAILURES, BACKOFF_DELAY_MS, RETRY_DELAY_MS;
27166
27258
  var init_handler4 = __esm({
27167
- "packages/server/dist/channels/wechat/handler.js"() {
27259
+ "../server/dist/channels/wechat/handler.js"() {
27168
27260
  "use strict";
27169
27261
  init_api();
27170
27262
  init_types();
@@ -27186,7 +27278,7 @@ var init_handler4 = __esm({
27186
27278
  }
27187
27279
  });
27188
27280
 
27189
- // packages/server/dist/routes/wechat.js
27281
+ // ../server/dist/routes/wechat.js
27190
27282
  import { Hono as Hono16 } from "hono";
27191
27283
  import path64 from "node:path";
27192
27284
  import fs56 from "node:fs";
@@ -27301,7 +27393,7 @@ function stripSecrets(acc) {
27301
27393
  return rest;
27302
27394
  }
27303
27395
  var init_wechat = __esm({
27304
- "packages/server/dist/routes/wechat.js"() {
27396
+ "../server/dist/routes/wechat.js"() {
27305
27397
  "use strict";
27306
27398
  init_login();
27307
27399
  init_accounts4();
@@ -27309,7 +27401,7 @@ var init_wechat = __esm({
27309
27401
  }
27310
27402
  });
27311
27403
 
27312
- // packages/server/dist/channels/wechat/cron-dispatcher.js
27404
+ // ../server/dist/channels/wechat/cron-dispatcher.js
27313
27405
  function readLastActiveChatId(accountId) {
27314
27406
  const acct = getAccount(getChannelDb(), accountId);
27315
27407
  if (!acct)
@@ -27390,7 +27482,7 @@ function registerWechatCronDispatcher() {
27390
27482
  registerCronDispatcher({ channelType: "wechat", supportsMedia: true, dispatch: dispatch2, listTargets: listTargets2 });
27391
27483
  }
27392
27484
  var init_cron_dispatcher2 = __esm({
27393
- "packages/server/dist/channels/wechat/cron-dispatcher.js"() {
27485
+ "../server/dist/channels/wechat/cron-dispatcher.js"() {
27394
27486
  "use strict";
27395
27487
  init_channel_db();
27396
27488
  init_accounts();
@@ -27404,10 +27496,10 @@ var init_cron_dispatcher2 = __esm({
27404
27496
  }
27405
27497
  });
27406
27498
 
27407
- // packages/server/dist/channels/wechat/descriptor.js
27499
+ // ../server/dist/channels/wechat/descriptor.js
27408
27500
  var wechatDescriptor;
27409
27501
  var init_descriptor2 = __esm({
27410
- "packages/server/dist/channels/wechat/descriptor.js"() {
27502
+ "../server/dist/channels/wechat/descriptor.js"() {
27411
27503
  "use strict";
27412
27504
  init_handler4();
27413
27505
  init_wechat();
@@ -27422,7 +27514,7 @@ var init_descriptor2 = __esm({
27422
27514
  }
27423
27515
  });
27424
27516
 
27425
- // packages/server/dist/routes/web.js
27517
+ // ../server/dist/routes/web.js
27426
27518
  import { Hono as Hono17 } from "hono";
27427
27519
  import { streamSSE } from "hono/streaming";
27428
27520
  import crypto4 from "node:crypto";
@@ -27659,7 +27751,7 @@ function createWebRoutes(deps) {
27659
27751
  return app2;
27660
27752
  }
27661
27753
  var init_web = __esm({
27662
- "packages/server/dist/routes/web.js"() {
27754
+ "../server/dist/routes/web.js"() {
27663
27755
  "use strict";
27664
27756
  init_dist();
27665
27757
  init_handler();
@@ -27671,10 +27763,10 @@ var init_web = __esm({
27671
27763
  }
27672
27764
  });
27673
27765
 
27674
- // packages/server/dist/channels/web/descriptor.js
27766
+ // ../server/dist/channels/web/descriptor.js
27675
27767
  var webDescriptor;
27676
27768
  var init_descriptor3 = __esm({
27677
- "packages/server/dist/channels/web/descriptor.js"() {
27769
+ "../server/dist/channels/web/descriptor.js"() {
27678
27770
  "use strict";
27679
27771
  init_handler();
27680
27772
  init_web();
@@ -27690,7 +27782,7 @@ var init_descriptor3 = __esm({
27690
27782
  }
27691
27783
  });
27692
27784
 
27693
- // packages/server/dist/channels/slack/accounts.js
27785
+ // ../server/dist/channels/slack/accounts.js
27694
27786
  function toSlack(a) {
27695
27787
  const c = a.config;
27696
27788
  return {
@@ -27766,14 +27858,14 @@ function deleteAccount5(db, accountId) {
27766
27858
  }
27767
27859
  var CH4;
27768
27860
  var init_accounts5 = __esm({
27769
- "packages/server/dist/channels/slack/accounts.js"() {
27861
+ "../server/dist/channels/slack/accounts.js"() {
27770
27862
  "use strict";
27771
27863
  init_accounts();
27772
27864
  CH4 = "slack";
27773
27865
  }
27774
27866
  });
27775
27867
 
27776
- // packages/server/dist/channels/shared/markdown.js
27868
+ // ../server/dist/channels/shared/markdown.js
27777
27869
  function formatForSlack(input) {
27778
27870
  if (!input)
27779
27871
  return "";
@@ -27852,15 +27944,15 @@ function stripCommonMark(line) {
27852
27944
  return line;
27853
27945
  }
27854
27946
  var init_markdown = __esm({
27855
- "packages/server/dist/channels/shared/markdown.js"() {
27947
+ "../server/dist/channels/shared/markdown.js"() {
27856
27948
  "use strict";
27857
27949
  }
27858
27950
  });
27859
27951
 
27860
- // packages/server/dist/channels/slack/event-adapter.js
27952
+ // ../server/dist/channels/slack/event-adapter.js
27861
27953
  var HARD_CHARS2, SlackResponder;
27862
27954
  var init_event_adapter3 = __esm({
27863
- "packages/server/dist/channels/slack/event-adapter.js"() {
27955
+ "../server/dist/channels/slack/event-adapter.js"() {
27864
27956
  "use strict";
27865
27957
  init_chunk();
27866
27958
  init_markdown();
@@ -27953,7 +28045,7 @@ var init_event_adapter3 = __esm({
27953
28045
  }
27954
28046
  });
27955
28047
 
27956
- // packages/server/dist/channels/slack/api.js
28048
+ // ../server/dist/channels/slack/api.js
27957
28049
  async function slackPost(endpoint, token, body) {
27958
28050
  const isForm = body instanceof FormData;
27959
28051
  const res = await fetch(`${SLACK_API}/${endpoint}`, {
@@ -28141,13 +28233,13 @@ async function downloadFile(botToken, urlPrivate) {
28141
28233
  }
28142
28234
  var SLACK_API;
28143
28235
  var init_api2 = __esm({
28144
- "packages/server/dist/channels/slack/api.js"() {
28236
+ "../server/dist/channels/slack/api.js"() {
28145
28237
  "use strict";
28146
28238
  SLACK_API = "https://slack.com/api";
28147
28239
  }
28148
28240
  });
28149
28241
 
28150
- // packages/server/dist/channels/slack/handler.js
28242
+ // ../server/dist/channels/slack/handler.js
28151
28243
  import path65 from "node:path";
28152
28244
  import { WebSocket } from "ws";
28153
28245
  function slashToBang(text6, commandNames) {
@@ -28510,7 +28602,7 @@ function buildCmdCtx(args) {
28510
28602
  }
28511
28603
  var SLACK_EXTRA_COMMANDS, SEEN_EVENT_IDS, SEEN_EVENT_IDS_MAX;
28512
28604
  var init_handler5 = __esm({
28513
- "packages/server/dist/channels/slack/handler.js"() {
28605
+ "../server/dist/channels/slack/handler.js"() {
28514
28606
  "use strict";
28515
28607
  init_accounts5();
28516
28608
  init_event_adapter3();
@@ -28530,7 +28622,7 @@ var init_handler5 = __esm({
28530
28622
  }
28531
28623
  });
28532
28624
 
28533
- // packages/server/dist/routes/slack.js
28625
+ // ../server/dist/routes/slack.js
28534
28626
  import { Hono as Hono18 } from "hono";
28535
28627
  import fs58 from "node:fs";
28536
28628
  function createSlackRoutes(deps) {
@@ -28664,7 +28756,7 @@ function createSlackRoutes(deps) {
28664
28756
  return app2;
28665
28757
  }
28666
28758
  var init_slack = __esm({
28667
- "packages/server/dist/routes/slack.js"() {
28759
+ "../server/dist/routes/slack.js"() {
28668
28760
  "use strict";
28669
28761
  init_accounts5();
28670
28762
  init_accounts();
@@ -28672,7 +28764,7 @@ var init_slack = __esm({
28672
28764
  }
28673
28765
  });
28674
28766
 
28675
- // packages/server/dist/channels/slack/cron-dispatcher.js
28767
+ // ../server/dist/channels/slack/cron-dispatcher.js
28676
28768
  function parseChatId(raw) {
28677
28769
  const idx = raw.indexOf(":");
28678
28770
  if (idx < 0)
@@ -28736,7 +28828,7 @@ function registerSlackCronDispatcher() {
28736
28828
  registerCronDispatcher({ channelType: "slack", supportsMedia: true, dispatch: dispatch3, listTargets: listTargets3 });
28737
28829
  }
28738
28830
  var init_cron_dispatcher3 = __esm({
28739
- "packages/server/dist/channels/slack/cron-dispatcher.js"() {
28831
+ "../server/dist/channels/slack/cron-dispatcher.js"() {
28740
28832
  "use strict";
28741
28833
  init_channel_db();
28742
28834
  init_accounts5();
@@ -28746,10 +28838,10 @@ var init_cron_dispatcher3 = __esm({
28746
28838
  }
28747
28839
  });
28748
28840
 
28749
- // packages/server/dist/channels/slack/descriptor.js
28841
+ // ../server/dist/channels/slack/descriptor.js
28750
28842
  var slackDescriptor;
28751
28843
  var init_descriptor4 = __esm({
28752
- "packages/server/dist/channels/slack/descriptor.js"() {
28844
+ "../server/dist/channels/slack/descriptor.js"() {
28753
28845
  "use strict";
28754
28846
  init_handler5();
28755
28847
  init_slack();
@@ -28764,7 +28856,7 @@ var init_descriptor4 = __esm({
28764
28856
  }
28765
28857
  });
28766
28858
 
28767
- // packages/server/dist/channels/feishu/accounts.js
28859
+ // ../server/dist/channels/feishu/accounts.js
28768
28860
  function toFeishu(a) {
28769
28861
  const c = a.config;
28770
28862
  return {
@@ -28842,17 +28934,17 @@ function deleteAccount6(db, accountId) {
28842
28934
  }
28843
28935
  var CH5;
28844
28936
  var init_accounts6 = __esm({
28845
- "packages/server/dist/channels/feishu/accounts.js"() {
28937
+ "../server/dist/channels/feishu/accounts.js"() {
28846
28938
  "use strict";
28847
28939
  init_accounts();
28848
28940
  CH5 = "feishu";
28849
28941
  }
28850
28942
  });
28851
28943
 
28852
- // packages/server/dist/channels/feishu/event-adapter.js
28944
+ // ../server/dist/channels/feishu/event-adapter.js
28853
28945
  var HARD_CHARS3, FeishuResponder;
28854
28946
  var init_event_adapter4 = __esm({
28855
- "packages/server/dist/channels/feishu/event-adapter.js"() {
28947
+ "../server/dist/channels/feishu/event-adapter.js"() {
28856
28948
  "use strict";
28857
28949
  init_chunk();
28858
28950
  init_markdown();
@@ -28945,7 +29037,7 @@ var init_event_adapter4 = __esm({
28945
29037
  }
28946
29038
  });
28947
29039
 
28948
- // packages/server/dist/channels/feishu/api.js
29040
+ // ../server/dist/channels/feishu/api.js
28949
29041
  async function getTenantAccessToken(args) {
28950
29042
  const cached = tokenCache.get(args.appId);
28951
29043
  if (cached && cached.expiresAt - Date.now() > 6e4)
@@ -29209,14 +29301,14 @@ async function searchFeishuTargets(args) {
29209
29301
  }
29210
29302
  var FEISHU_BASE, tokenCache;
29211
29303
  var init_api3 = __esm({
29212
- "packages/server/dist/channels/feishu/api.js"() {
29304
+ "../server/dist/channels/feishu/api.js"() {
29213
29305
  "use strict";
29214
29306
  FEISHU_BASE = "https://open.feishu.cn";
29215
29307
  tokenCache = /* @__PURE__ */ new Map();
29216
29308
  }
29217
29309
  });
29218
29310
 
29219
- // packages/server/dist/channels/feishu/handler.js
29311
+ // ../server/dist/channels/feishu/handler.js
29220
29312
  import path66 from "node:path";
29221
29313
  import * as Lark from "@larksuiteoapi/node-sdk";
29222
29314
  function buildSessionPrefixForThread2(chatId, rootId) {
@@ -29689,7 +29781,7 @@ function buildCmdCtx2(args) {
29689
29781
  }
29690
29782
  var MAX_FEISHU_DOWNLOAD_BYTES;
29691
29783
  var init_handler6 = __esm({
29692
- "packages/server/dist/channels/feishu/handler.js"() {
29784
+ "../server/dist/channels/feishu/handler.js"() {
29693
29785
  "use strict";
29694
29786
  init_accounts6();
29695
29787
  init_event_adapter4();
@@ -29705,7 +29797,7 @@ var init_handler6 = __esm({
29705
29797
  }
29706
29798
  });
29707
29799
 
29708
- // packages/server/dist/routes/feishu.js
29800
+ // ../server/dist/routes/feishu.js
29709
29801
  import { Hono as Hono19 } from "hono";
29710
29802
  import fs59 from "node:fs";
29711
29803
  function createFeishuRoutes(deps) {
@@ -29842,7 +29934,7 @@ function createFeishuRoutes(deps) {
29842
29934
  return app2;
29843
29935
  }
29844
29936
  var init_feishu = __esm({
29845
- "packages/server/dist/routes/feishu.js"() {
29937
+ "../server/dist/routes/feishu.js"() {
29846
29938
  "use strict";
29847
29939
  init_accounts6();
29848
29940
  init_accounts();
@@ -29850,7 +29942,7 @@ var init_feishu = __esm({
29850
29942
  }
29851
29943
  });
29852
29944
 
29853
- // packages/server/dist/channels/feishu/cron-dispatcher.js
29945
+ // ../server/dist/channels/feishu/cron-dispatcher.js
29854
29946
  function parseChatId2(raw) {
29855
29947
  const idx = raw.indexOf(":");
29856
29948
  return { chatId: idx < 0 ? raw : raw.slice(0, idx) };
@@ -29900,7 +29992,7 @@ function registerFeishuCronDispatcher() {
29900
29992
  registerCronDispatcher({ channelType: "feishu", dispatch: dispatch4, listTargets: listTargets4 });
29901
29993
  }
29902
29994
  var init_cron_dispatcher4 = __esm({
29903
- "packages/server/dist/channels/feishu/cron-dispatcher.js"() {
29995
+ "../server/dist/channels/feishu/cron-dispatcher.js"() {
29904
29996
  "use strict";
29905
29997
  init_channel_db();
29906
29998
  init_accounts6();
@@ -29909,10 +30001,10 @@ var init_cron_dispatcher4 = __esm({
29909
30001
  }
29910
30002
  });
29911
30003
 
29912
- // packages/server/dist/channels/feishu/descriptor.js
30004
+ // ../server/dist/channels/feishu/descriptor.js
29913
30005
  var feishuDescriptor;
29914
30006
  var init_descriptor5 = __esm({
29915
- "packages/server/dist/channels/feishu/descriptor.js"() {
30007
+ "../server/dist/channels/feishu/descriptor.js"() {
29916
30008
  "use strict";
29917
30009
  init_handler6();
29918
30010
  init_feishu();
@@ -29927,7 +30019,7 @@ var init_descriptor5 = __esm({
29927
30019
  }
29928
30020
  });
29929
30021
 
29930
- // packages/server/dist/channels/wecom/accounts.js
30022
+ // ../server/dist/channels/wecom/accounts.js
29931
30023
  function toWecom(a) {
29932
30024
  const c = a.config;
29933
30025
  return {
@@ -30002,17 +30094,17 @@ function deleteAccount7(db, accountId) {
30002
30094
  }
30003
30095
  var CH6;
30004
30096
  var init_accounts7 = __esm({
30005
- "packages/server/dist/channels/wecom/accounts.js"() {
30097
+ "../server/dist/channels/wecom/accounts.js"() {
30006
30098
  "use strict";
30007
30099
  init_accounts();
30008
30100
  CH6 = "wecom";
30009
30101
  }
30010
30102
  });
30011
30103
 
30012
- // packages/server/dist/channels/wecom/event-adapter.js
30104
+ // ../server/dist/channels/wecom/event-adapter.js
30013
30105
  var HARD_CHARS4, WecomResponder;
30014
30106
  var init_event_adapter5 = __esm({
30015
- "packages/server/dist/channels/wecom/event-adapter.js"() {
30107
+ "../server/dist/channels/wecom/event-adapter.js"() {
30016
30108
  "use strict";
30017
30109
  init_chunk();
30018
30110
  init_media();
@@ -30103,7 +30195,7 @@ var init_event_adapter5 = __esm({
30103
30195
  }
30104
30196
  });
30105
30197
 
30106
- // packages/server/dist/channels/wecom/handler.js
30198
+ // ../server/dist/channels/wecom/handler.js
30107
30199
  import path67 from "node:path";
30108
30200
  import fs60 from "node:fs/promises";
30109
30201
  import { WSClient as WSClient2, generateReqId } from "@wecom/aibot-node-sdk";
@@ -30472,7 +30564,7 @@ function buildCmdCtx3(args) {
30472
30564
  }
30473
30565
  var liveClients, DEDUPE_CAP, MAX_WECOM_DOWNLOAD_BYTES;
30474
30566
  var init_handler7 = __esm({
30475
- "packages/server/dist/channels/wecom/handler.js"() {
30567
+ "../server/dist/channels/wecom/handler.js"() {
30476
30568
  "use strict";
30477
30569
  init_accounts7();
30478
30570
  init_event_adapter5();
@@ -30488,7 +30580,7 @@ var init_handler7 = __esm({
30488
30580
  }
30489
30581
  });
30490
30582
 
30491
- // packages/server/dist/routes/wecom.js
30583
+ // ../server/dist/routes/wecom.js
30492
30584
  import { Hono as Hono20 } from "hono";
30493
30585
  import fs61 from "node:fs";
30494
30586
  function createWecomRoutes(deps) {
@@ -30595,14 +30687,14 @@ function createWecomRoutes(deps) {
30595
30687
  return app2;
30596
30688
  }
30597
30689
  var init_wecom = __esm({
30598
- "packages/server/dist/routes/wecom.js"() {
30690
+ "../server/dist/routes/wecom.js"() {
30599
30691
  "use strict";
30600
30692
  init_accounts7();
30601
30693
  init_accounts();
30602
30694
  }
30603
30695
  });
30604
30696
 
30605
- // packages/server/dist/channels/wecom/cron-dispatcher.js
30697
+ // ../server/dist/channels/wecom/cron-dispatcher.js
30606
30698
  async function dispatch5(accountId, text6, explicitChatId) {
30607
30699
  const acct = getAccount7(getChannelDb(), accountId);
30608
30700
  if (!acct)
@@ -30644,7 +30736,7 @@ function registerWecomCronDispatcher() {
30644
30736
  registerCronDispatcher({ channelType: "wecom", dispatch: dispatch5, listTargets: listTargets5 });
30645
30737
  }
30646
30738
  var init_cron_dispatcher5 = __esm({
30647
- "packages/server/dist/channels/wecom/cron-dispatcher.js"() {
30739
+ "../server/dist/channels/wecom/cron-dispatcher.js"() {
30648
30740
  "use strict";
30649
30741
  init_channel_db();
30650
30742
  init_accounts7();
@@ -30653,10 +30745,10 @@ var init_cron_dispatcher5 = __esm({
30653
30745
  }
30654
30746
  });
30655
30747
 
30656
- // packages/server/dist/channels/wecom/descriptor.js
30748
+ // ../server/dist/channels/wecom/descriptor.js
30657
30749
  var wecomDescriptor;
30658
30750
  var init_descriptor6 = __esm({
30659
- "packages/server/dist/channels/wecom/descriptor.js"() {
30751
+ "../server/dist/channels/wecom/descriptor.js"() {
30660
30752
  "use strict";
30661
30753
  init_handler7();
30662
30754
  init_wecom();
@@ -30671,10 +30763,10 @@ var init_descriptor6 = __esm({
30671
30763
  }
30672
30764
  });
30673
30765
 
30674
- // packages/server/dist/channels/descriptors.js
30766
+ // ../server/dist/channels/descriptors.js
30675
30767
  var defaultChannelDescriptors;
30676
30768
  var init_descriptors = __esm({
30677
- "packages/server/dist/channels/descriptors.js"() {
30769
+ "../server/dist/channels/descriptors.js"() {
30678
30770
  "use strict";
30679
30771
  init_descriptor();
30680
30772
  init_descriptor2();
@@ -30693,7 +30785,7 @@ var init_descriptors = __esm({
30693
30785
  }
30694
30786
  });
30695
30787
 
30696
- // packages/server/dist/middleware/auth.js
30788
+ // ../server/dist/middleware/auth.js
30697
30789
  import { Hono as Hono21 } from "hono";
30698
30790
  import { getCookie, setCookie } from "hono/cookie";
30699
30791
  import crypto5 from "node:crypto";
@@ -30886,7 +30978,7 @@ function authMiddleware() {
30886
30978
  }
30887
30979
  var TOKEN_MAX_AGE, REFRESH_AFTER, COOKIE_NAME, ADMIN_LOGIN_BUCKET, isLockedOut2, recordFailure2, clearFailures2, PUBLIC_PATHS;
30888
30980
  var init_auth = __esm({
30889
- "packages/server/dist/middleware/auth.js"() {
30981
+ "../server/dist/middleware/auth.js"() {
30890
30982
  "use strict";
30891
30983
  init_config();
30892
30984
  init_password_hash();
@@ -30903,7 +30995,7 @@ var init_auth = __esm({
30903
30995
  }
30904
30996
  });
30905
30997
 
30906
- // packages/server/dist/index.js
30998
+ // ../server/dist/index.js
30907
30999
  var dist_exports = {};
30908
31000
  import { Hono as Hono22 } from "hono";
30909
31001
  import { cors } from "hono/cors";
@@ -31032,7 +31124,7 @@ async function gracefulShutdown(signal) {
31032
31124
  }
31033
31125
  var __dirname3, PORT, HALO_VERSION, PROJECT_ROOT, HALO_HOME4, GIT_SHA, AGENTCORE, app, allowlist, authRoutes, fileRoutes, dataPreviewRoutes, gitRoutes, agentConfigRoutes, skillRoutes, settingsRoutes, evolutionRoutes, cronRoutes, channelDb, registry, sessionRoutes, sessionArchiveRoutes, showRoutes, metricsRoutes, commandRoutes, FRONTEND_DIR, server, wss;
31034
31126
  var init_dist2 = __esm({
31035
- async "packages/server/dist/index.js"() {
31127
+ async "../server/dist/index.js"() {
31036
31128
  "use strict";
31037
31129
  init_files();
31038
31130
  init_data_preview();
@@ -31074,7 +31166,7 @@ var init_dist2 = __esm({
31074
31166
  init_git_ssh();
31075
31167
  __dirname3 = path68.dirname(fileURLToPath3(import.meta.url));
31076
31168
  PORT = config.server.port;
31077
- HALO_VERSION = "1.3.2";
31169
+ HALO_VERSION = "1.3.4-c3090bf";
31078
31170
  PROJECT_ROOT = findProjectRoot();
31079
31171
  HALO_HOME4 = path68.join(homedir24(), ".halo");
31080
31172
  GIT_SHA = readGitSha();
@@ -31265,7 +31357,7 @@ var init_dist2 = __esm({
31265
31357
  }
31266
31358
  });
31267
31359
 
31268
- // packages/acp-adapter/dist/halo-client.js
31360
+ // ../acp-adapter/dist/halo-client.js
31269
31361
  async function safeText(res) {
31270
31362
  try {
31271
31363
  return (await res.text()).slice(0, 500);
@@ -31308,7 +31400,7 @@ async function* parseSseStream(body) {
31308
31400
  }
31309
31401
  var HaloClient;
31310
31402
  var init_halo_client = __esm({
31311
- "packages/acp-adapter/dist/halo-client.js"() {
31403
+ "../acp-adapter/dist/halo-client.js"() {
31312
31404
  "use strict";
31313
31405
  HaloClient = class {
31314
31406
  opts;
@@ -31408,7 +31500,7 @@ var init_halo_client = __esm({
31408
31500
  }
31409
31501
  });
31410
31502
 
31411
- // packages/acp-adapter/dist/adapter.js
31503
+ // ../acp-adapter/dist/adapter.js
31412
31504
  function newError(message, code = -32603) {
31413
31505
  const e = new Error(message);
31414
31506
  e.code = code;
@@ -31416,7 +31508,7 @@ function newError(message, code = -32603) {
31416
31508
  }
31417
31509
  var AcpAdapter;
31418
31510
  var init_adapter = __esm({
31419
- "packages/acp-adapter/dist/adapter.js"() {
31511
+ "../acp-adapter/dist/adapter.js"() {
31420
31512
  "use strict";
31421
31513
  init_halo_client();
31422
31514
  AcpAdapter = class {
@@ -31703,10 +31795,10 @@ var init_adapter = __esm({
31703
31795
  }
31704
31796
  });
31705
31797
 
31706
- // packages/acp-adapter/dist/jsonrpc.js
31798
+ // ../acp-adapter/dist/jsonrpc.js
31707
31799
  var ERROR_PARSE, ERROR_METHOD_NOT_FOUND, ERROR_INTERNAL, JsonRpcConnection;
31708
31800
  var init_jsonrpc = __esm({
31709
- "packages/acp-adapter/dist/jsonrpc.js"() {
31801
+ "../acp-adapter/dist/jsonrpc.js"() {
31710
31802
  "use strict";
31711
31803
  ERROR_PARSE = -32700;
31712
31804
  ERROR_METHOD_NOT_FOUND = -32601;
@@ -31839,7 +31931,7 @@ var init_jsonrpc = __esm({
31839
31931
  }
31840
31932
  });
31841
31933
 
31842
- // packages/acp-adapter/dist/index.js
31934
+ // ../acp-adapter/dist/index.js
31843
31935
  var dist_exports2 = {};
31844
31936
  __export(dist_exports2, {
31845
31937
  main: () => main
@@ -31955,7 +32047,7 @@ function main(argv = process.argv.slice(2)) {
31955
32047
  }
31956
32048
  var HELP;
31957
32049
  var init_dist3 = __esm({
31958
- "packages/acp-adapter/dist/index.js"() {
32050
+ "../acp-adapter/dist/index.js"() {
31959
32051
  "use strict";
31960
32052
  init_adapter();
31961
32053
  init_jsonrpc();
@@ -31994,7 +32086,7 @@ Stdio:
31994
32086
  }
31995
32087
  });
31996
32088
 
31997
- // packages/cli/src/silence-warnings.ts
32089
+ // src/silence-warnings.ts
31998
32090
  var emit = process.emitWarning.bind(process);
31999
32091
  process.emitWarning = (warning, ...args) => {
32000
32092
  const opt = args[0];
@@ -32003,13 +32095,13 @@ process.emitWarning = (warning, ...args) => {
32003
32095
  return emit(warning, ...args);
32004
32096
  };
32005
32097
 
32006
- // packages/cli/src/index.ts
32098
+ // src/index.ts
32007
32099
  init_server_supervisor();
32008
32100
  import path69 from "node:path";
32009
32101
  import fs63 from "node:fs";
32010
32102
  import { homedir as homedir25 } from "node:os";
32011
32103
  import { parseArgs as parseArgs2 } from "node:util";
32012
- var VERSION = "1.3.2";
32104
+ var VERSION = "1.3.4-c3090bf";
32013
32105
  var HELP_TOP = `Usage: halo <command> [options]
32014
32106
 
32015
32107
  Commands: