@askexenow/exe-os 0.8.80 → 0.8.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/bin/backfill-conversations.js +359 -267
  2. package/dist/bin/backfill-responses.js +357 -265
  3. package/dist/bin/backfill-vectors.js +339 -264
  4. package/dist/bin/cleanup-stale-review-tasks.js +315 -256
  5. package/dist/bin/cli.js +494 -240
  6. package/dist/bin/exe-agent.js +141 -46
  7. package/dist/bin/exe-assign.js +151 -63
  8. package/dist/bin/exe-boot.js +294 -115
  9. package/dist/bin/exe-call.js +76 -51
  10. package/dist/bin/exe-cloud.js +58 -45
  11. package/dist/bin/exe-dispatch.js +434 -277
  12. package/dist/bin/exe-doctor.js +317 -246
  13. package/dist/bin/exe-export-behaviors.js +328 -248
  14. package/dist/bin/exe-forget.js +314 -231
  15. package/dist/bin/exe-gateway.js +2676 -1402
  16. package/dist/bin/exe-heartbeat.js +329 -264
  17. package/dist/bin/exe-kill.js +324 -244
  18. package/dist/bin/exe-launch-agent.js +574 -463
  19. package/dist/bin/exe-link.js +1055 -95
  20. package/dist/bin/exe-new-employee.js +49 -54
  21. package/dist/bin/exe-pending-messages.js +310 -253
  22. package/dist/bin/exe-pending-notifications.js +299 -228
  23. package/dist/bin/exe-pending-reviews.js +314 -245
  24. package/dist/bin/exe-rename.js +259 -195
  25. package/dist/bin/exe-review.js +140 -64
  26. package/dist/bin/exe-search.js +543 -356
  27. package/dist/bin/exe-session-cleanup.js +463 -382
  28. package/dist/bin/exe-settings.js +129 -99
  29. package/dist/bin/exe-start.sh +6 -6
  30. package/dist/bin/exe-status.js +95 -36
  31. package/dist/bin/exe-team.js +116 -51
  32. package/dist/bin/git-sweep.js +482 -307
  33. package/dist/bin/graph-backfill.js +357 -245
  34. package/dist/bin/graph-export.js +324 -244
  35. package/dist/bin/install.js +33 -10
  36. package/dist/bin/scan-tasks.js +481 -307
  37. package/dist/bin/setup.js +1147 -140
  38. package/dist/bin/shard-migrate.js +321 -241
  39. package/dist/bin/update.js +1 -7
  40. package/dist/bin/wiki-sync.js +318 -238
  41. package/dist/gateway/index.js +2656 -1383
  42. package/dist/hooks/bug-report-worker.js +641 -472
  43. package/dist/hooks/commit-complete.js +482 -307
  44. package/dist/hooks/error-recall.js +363 -135
  45. package/dist/hooks/exe-heartbeat-hook.js +97 -27
  46. package/dist/hooks/ingest-worker.js +584 -397
  47. package/dist/hooks/ingest.js +123 -58
  48. package/dist/hooks/instructions-loaded.js +212 -82
  49. package/dist/hooks/notification.js +200 -70
  50. package/dist/hooks/post-compact.js +199 -81
  51. package/dist/hooks/pre-compact.js +352 -140
  52. package/dist/hooks/pre-tool-use.js +416 -278
  53. package/dist/hooks/prompt-ingest-worker.js +376 -299
  54. package/dist/hooks/prompt-submit.js +414 -188
  55. package/dist/hooks/response-ingest-worker.js +408 -338
  56. package/dist/hooks/session-end.js +209 -83
  57. package/dist/hooks/session-start.js +382 -158
  58. package/dist/hooks/stop.js +209 -83
  59. package/dist/hooks/subagent-stop.js +209 -85
  60. package/dist/hooks/summary-worker.js +606 -510
  61. package/dist/index.js +2133 -855
  62. package/dist/lib/cloud-sync.js +1175 -184
  63. package/dist/lib/config.js +1 -9
  64. package/dist/lib/consolidation.js +71 -34
  65. package/dist/lib/database.js +166 -14
  66. package/dist/lib/device-registry.js +189 -117
  67. package/dist/lib/embedder.js +6 -10
  68. package/dist/lib/employee-templates.js +134 -39
  69. package/dist/lib/employees.js +30 -7
  70. package/dist/lib/exe-daemon-client.js +5 -7
  71. package/dist/lib/exe-daemon.js +514 -152
  72. package/dist/lib/hybrid-search.js +543 -356
  73. package/dist/lib/identity-templates.js +15 -15
  74. package/dist/lib/identity.js +19 -15
  75. package/dist/lib/license.js +1 -7
  76. package/dist/lib/messaging.js +157 -135
  77. package/dist/lib/reminders.js +97 -0
  78. package/dist/lib/schedules.js +302 -231
  79. package/dist/lib/skill-learning.js +33 -27
  80. package/dist/lib/status-brief.js +11 -14
  81. package/dist/lib/store.js +326 -237
  82. package/dist/lib/task-router.js +105 -1
  83. package/dist/lib/tasks.js +233 -116
  84. package/dist/lib/tmux-routing.js +173 -56
  85. package/dist/lib/ws-client.js +13 -3
  86. package/dist/mcp/server.js +2009 -1015
  87. package/dist/mcp/tools/complete-reminder.js +97 -0
  88. package/dist/mcp/tools/create-reminder.js +97 -0
  89. package/dist/mcp/tools/create-task.js +426 -262
  90. package/dist/mcp/tools/deactivate-behavior.js +119 -44
  91. package/dist/mcp/tools/list-reminders.js +97 -0
  92. package/dist/mcp/tools/list-tasks.js +56 -57
  93. package/dist/mcp/tools/send-message.js +206 -143
  94. package/dist/mcp/tools/update-task.js +259 -85
  95. package/dist/runtime/index.js +495 -316
  96. package/dist/tui/App.js +1128 -919
  97. package/package.json +2 -10
  98. package/src/commands/exe/afk.md +8 -8
  99. package/src/commands/exe/assign.md +1 -1
  100. package/src/commands/exe/build-adv.md +1 -1
  101. package/src/commands/exe/call.md +10 -10
  102. package/src/commands/exe/employee-heartbeat.md +9 -6
  103. package/src/commands/exe/heartbeat.md +5 -5
  104. package/src/commands/exe/intercom.md +26 -15
  105. package/src/commands/exe/launch.md +2 -2
  106. package/src/commands/exe/new-employee.md +1 -1
  107. package/src/commands/exe/review.md +2 -2
  108. package/src/commands/exe/schedule.md +1 -1
  109. package/src/commands/exe/sessions.md +2 -2
  110. package/src/commands/exe.md +22 -20
@@ -8,6 +8,97 @@ var __export = (target, all) => {
8
8
  __defProp(target, name, { get: all[name], enumerable: true });
9
9
  };
10
10
 
11
+ // src/lib/config.ts
12
+ import { readFile, writeFile, mkdir, chmod } from "fs/promises";
13
+ import { readFileSync, existsSync, renameSync } from "fs";
14
+ import path from "path";
15
+ import os from "os";
16
+ function resolveDataDir() {
17
+ if (process.env.EXE_OS_DIR) return process.env.EXE_OS_DIR;
18
+ if (process.env.EXE_MEM_DIR) return process.env.EXE_MEM_DIR;
19
+ const newDir = path.join(os.homedir(), ".exe-os");
20
+ const legacyDir = path.join(os.homedir(), ".exe-mem");
21
+ if (!existsSync(newDir) && existsSync(legacyDir)) {
22
+ try {
23
+ renameSync(legacyDir, newDir);
24
+ process.stderr.write(`[exe-os] Migrated data directory: ~/.exe-mem \u2192 ~/.exe-os
25
+ `);
26
+ } catch {
27
+ return legacyDir;
28
+ }
29
+ }
30
+ return newDir;
31
+ }
32
+ var EXE_AI_DIR, DB_PATH, MODELS_DIR, CONFIG_PATH, LEGACY_LANCE_PATH, CURRENT_CONFIG_VERSION, DEFAULT_CONFIG;
33
+ var init_config = __esm({
34
+ "src/lib/config.ts"() {
35
+ "use strict";
36
+ EXE_AI_DIR = resolveDataDir();
37
+ DB_PATH = path.join(EXE_AI_DIR, "memories.db");
38
+ MODELS_DIR = path.join(EXE_AI_DIR, "models");
39
+ CONFIG_PATH = path.join(EXE_AI_DIR, "config.json");
40
+ LEGACY_LANCE_PATH = path.join(EXE_AI_DIR, "local.lance");
41
+ CURRENT_CONFIG_VERSION = 1;
42
+ DEFAULT_CONFIG = {
43
+ config_version: CURRENT_CONFIG_VERSION,
44
+ dbPath: DB_PATH,
45
+ modelFile: "jina-embeddings-v5-small-q4_k_m.gguf",
46
+ embeddingDim: 1024,
47
+ batchSize: 20,
48
+ flushIntervalMs: 1e4,
49
+ autoIngestion: true,
50
+ autoRetrieval: true,
51
+ searchMode: "hybrid",
52
+ hookSearchMode: "hybrid",
53
+ fileGrepEnabled: true,
54
+ splashEffect: true,
55
+ consolidationEnabled: true,
56
+ consolidationIntervalMs: 6 * 60 * 60 * 1e3,
57
+ consolidationModel: "claude-haiku-4-5-20251001",
58
+ consolidationMaxCallsPerRun: 20,
59
+ selfQueryRouter: true,
60
+ selfQueryModel: "claude-haiku-4-5-20251001",
61
+ rerankerEnabled: true,
62
+ scalingRoadmap: {
63
+ rerankerAutoTrigger: {
64
+ enabled: true,
65
+ broadQueryMinCardinality: 5e4,
66
+ fetchTopK: 150,
67
+ returnTopK: 5
68
+ }
69
+ },
70
+ graphRagEnabled: true,
71
+ wikiEnabled: false,
72
+ wikiUrl: "",
73
+ wikiApiKey: "",
74
+ wikiSyncIntervalMs: 30 * 60 * 1e3,
75
+ wikiWorkspaceMapping: {},
76
+ wikiAutoUpdate: true,
77
+ wikiAutoUpdateThreshold: 0.5,
78
+ wikiAutoUpdateCreateNew: true,
79
+ skillLearning: true,
80
+ skillThreshold: 3,
81
+ skillModel: "claude-haiku-4-5-20251001",
82
+ exeHeartbeat: {
83
+ enabled: true,
84
+ intervalSeconds: 60,
85
+ staleInProgressThresholdHours: 2
86
+ },
87
+ sessionLifecycle: {
88
+ idleKillEnabled: true,
89
+ idleKillTicksRequired: 3,
90
+ idleKillIntercomAckWindowMs: 1e4,
91
+ maxAutoInstances: 10
92
+ },
93
+ autoUpdate: {
94
+ checkOnBoot: true,
95
+ autoInstall: false,
96
+ checkIntervalMs: 24 * 60 * 60 * 1e3
97
+ }
98
+ };
99
+ }
100
+ });
101
+
11
102
  // src/lib/db-retry.ts
12
103
  function isBusyError(err) {
13
104
  if (err instanceof Error) {
@@ -47,7 +138,7 @@ function wrapWithRetry(client) {
47
138
  return (sql) => retryOnBusy(() => target.execute(sql), "execute");
48
139
  }
49
140
  if (prop === "batch") {
50
- return (stmts) => retryOnBusy(() => target.batch(stmts), "batch");
141
+ return (stmts, mode) => retryOnBusy(() => target.batch(stmts, mode), "batch");
51
142
  }
52
143
  return Reflect.get(target, prop, receiver);
53
144
  }
@@ -63,6 +154,43 @@ var init_db_retry = __esm({
63
154
  }
64
155
  });
65
156
 
157
+ // src/lib/employees.ts
158
+ import { readFile as readFile2, writeFile as writeFile2, mkdir as mkdir2 } from "fs/promises";
159
+ import { existsSync as existsSync2, symlinkSync, readlinkSync, readFileSync as readFileSync2, renameSync as renameSync2, unlinkSync, writeFileSync } from "fs";
160
+ import { execSync } from "child_process";
161
+ import path2 from "path";
162
+ import os2 from "os";
163
+ function normalizeRole(role) {
164
+ return (role ?? "").trim().toLowerCase();
165
+ }
166
+ function isCoordinatorRole(role) {
167
+ return normalizeRole(role) === normalizeRole(COORDINATOR_ROLE);
168
+ }
169
+ function getCoordinatorEmployee(employees) {
170
+ return employees.find((e) => isCoordinatorRole(e.role));
171
+ }
172
+ function getCoordinatorName(employees = loadEmployeesSync()) {
173
+ return getCoordinatorEmployee(employees)?.name ?? DEFAULT_COORDINATOR_TEMPLATE_NAME;
174
+ }
175
+ function loadEmployeesSync(employeesPath = EMPLOYEES_PATH) {
176
+ if (!existsSync2(employeesPath)) return [];
177
+ try {
178
+ return JSON.parse(readFileSync2(employeesPath, "utf-8"));
179
+ } catch {
180
+ return [];
181
+ }
182
+ }
183
+ var EMPLOYEES_PATH, DEFAULT_COORDINATOR_TEMPLATE_NAME, COORDINATOR_ROLE;
184
+ var init_employees = __esm({
185
+ "src/lib/employees.ts"() {
186
+ "use strict";
187
+ init_config();
188
+ EMPLOYEES_PATH = path2.join(EXE_AI_DIR, "exe-employees.json");
189
+ DEFAULT_COORDINATOR_TEMPLATE_NAME = "exe";
190
+ COORDINATOR_ROLE = "COO";
191
+ }
192
+ });
193
+
66
194
  // src/lib/database.ts
67
195
  var database_exports = {};
68
196
  __export(database_exports, {
@@ -210,22 +338,24 @@ async function ensureSchema() {
210
338
  ON behaviors(agent_id, active);
211
339
  `);
212
340
  try {
341
+ const coordinatorName = getCoordinatorName();
213
342
  const existing = await client.execute({
214
- sql: "SELECT COUNT(*) as cnt FROM behaviors WHERE agent_id = 'exe'",
215
- args: []
343
+ sql: "SELECT COUNT(*) as cnt FROM behaviors WHERE agent_id = ?",
344
+ args: [coordinatorName]
216
345
  });
217
346
  if (Number(existing.rows[0]?.cnt) === 0) {
218
- await client.executeMultiple(`
219
- INSERT INTO behaviors (id, agent_id, project_name, domain, content, active, created_at, updated_at)
220
- VALUES
221
- (hex(randomblob(16)), 'exe', NULL, 'workflow', 'Don''t ask "keep going?" \u2014 just keep executing phases/plans autonomously', 1, '2026-03-25T00:00:00Z', '2026-03-25T00:00:00Z');
222
- INSERT INTO behaviors (id, agent_id, project_name, domain, content, active, created_at, updated_at)
223
- VALUES
224
- (hex(randomblob(16)), 'exe', NULL, 'tool-use', 'Always use create_task MCP tool, never write .md files directly for task creation', 1, '2026-03-25T00:00:00Z', '2026-03-25T00:00:00Z');
225
- INSERT INTO behaviors (id, agent_id, project_name, domain, content, active, created_at, updated_at)
226
- VALUES
227
- (hex(randomblob(16)), 'exe', NULL, 'workflow', 'Auto-start reviewing when idle and reviews are pending \u2014 never ask founder for permission', 1, '2026-03-25T00:00:00Z', '2026-03-25T00:00:00Z');
228
- `);
347
+ const seededAt = "2026-03-25T00:00:00Z";
348
+ for (const [domain, content] of [
349
+ ["workflow", `Don't ask "keep going?" \u2014 just keep executing phases/plans autonomously`],
350
+ ["tool-use", "Always use create_task MCP tool, never write .md files directly for task creation"],
351
+ ["workflow", "Auto-start reviewing when idle and reviews are pending \u2014 never ask founder for permission"]
352
+ ]) {
353
+ await client.execute({
354
+ sql: `INSERT INTO behaviors (id, agent_id, project_name, domain, content, active, created_at, updated_at)
355
+ VALUES (hex(randomblob(16)), ?, NULL, ?, ?, 1, ?, ?)`,
356
+ args: [coordinatorName, domain, content, seededAt, seededAt]
357
+ });
358
+ }
229
359
  }
230
360
  } catch {
231
361
  }
@@ -917,6 +1047,39 @@ async function ensureSchema() {
917
1047
  } catch {
918
1048
  }
919
1049
  }
1050
+ try {
1051
+ await client.execute({
1052
+ sql: `ALTER TABLE memories ADD COLUMN draft INTEGER DEFAULT 0`,
1053
+ args: []
1054
+ });
1055
+ } catch {
1056
+ }
1057
+ try {
1058
+ await client.execute(
1059
+ `CREATE INDEX IF NOT EXISTS idx_memories_draft ON memories(draft) WHERE draft = 1`
1060
+ );
1061
+ } catch {
1062
+ }
1063
+ try {
1064
+ await client.execute({
1065
+ sql: `ALTER TABLE memories ADD COLUMN memory_type TEXT DEFAULT 'raw'`,
1066
+ args: []
1067
+ });
1068
+ } catch {
1069
+ }
1070
+ try {
1071
+ await client.execute(
1072
+ `CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(memory_type)`
1073
+ );
1074
+ } catch {
1075
+ }
1076
+ try {
1077
+ await client.execute({
1078
+ sql: `ALTER TABLE memories ADD COLUMN trajectory TEXT`,
1079
+ args: []
1080
+ });
1081
+ } catch {
1082
+ }
920
1083
  }
921
1084
  async function disposeDatabase() {
922
1085
  if (_client) {
@@ -930,6 +1093,7 @@ var init_database = __esm({
930
1093
  "src/lib/database.ts"() {
931
1094
  "use strict";
932
1095
  init_db_retry();
1096
+ init_employees();
933
1097
  _client = null;
934
1098
  _resilientClient = null;
935
1099
  initTurso = initDatabase;
@@ -938,108 +1102,16 @@ var init_database = __esm({
938
1102
  });
939
1103
 
940
1104
  // src/lib/device-registry.ts
1105
+ init_config();
941
1106
  import crypto from "crypto";
942
- import os2 from "os";
943
- import { readFileSync as readFileSync2, writeFileSync, mkdirSync, existsSync as existsSync2 } from "fs";
944
- import path2 from "path";
945
-
946
- // src/lib/config.ts
947
- import { readFile, writeFile, mkdir, chmod } from "fs/promises";
948
- import { readFileSync, existsSync, renameSync } from "fs";
949
- import path from "path";
950
- import os from "os";
951
- function resolveDataDir() {
952
- if (process.env.EXE_OS_DIR) return process.env.EXE_OS_DIR;
953
- if (process.env.EXE_MEM_DIR) return process.env.EXE_MEM_DIR;
954
- const newDir = path.join(os.homedir(), ".exe-os");
955
- const legacyDir = path.join(os.homedir(), ".exe-mem");
956
- if (!existsSync(newDir) && existsSync(legacyDir)) {
957
- try {
958
- renameSync(legacyDir, newDir);
959
- process.stderr.write(`[exe-os] Migrated data directory: ~/.exe-mem \u2192 ~/.exe-os
960
- `);
961
- } catch {
962
- return legacyDir;
963
- }
964
- }
965
- return newDir;
966
- }
967
- var EXE_AI_DIR = resolveDataDir();
968
- var DB_PATH = path.join(EXE_AI_DIR, "memories.db");
969
- var MODELS_DIR = path.join(EXE_AI_DIR, "models");
970
- var CONFIG_PATH = path.join(EXE_AI_DIR, "config.json");
971
- var LEGACY_LANCE_PATH = path.join(EXE_AI_DIR, "local.lance");
972
- var CURRENT_CONFIG_VERSION = 1;
973
- var DEFAULT_CONFIG = {
974
- config_version: CURRENT_CONFIG_VERSION,
975
- dbPath: DB_PATH,
976
- modelFile: "jina-embeddings-v5-small-q4_k_m.gguf",
977
- embeddingDim: 1024,
978
- batchSize: 20,
979
- flushIntervalMs: 1e4,
980
- autoIngestion: true,
981
- autoRetrieval: true,
982
- searchMode: "hybrid",
983
- hookSearchMode: "hybrid",
984
- fileGrepEnabled: true,
985
- splashEffect: true,
986
- consolidationEnabled: true,
987
- consolidationIntervalMs: 6 * 60 * 60 * 1e3,
988
- consolidationModel: "claude-haiku-4-5-20251001",
989
- consolidationMaxCallsPerRun: 20,
990
- selfQueryRouter: true,
991
- selfQueryModel: "claude-haiku-4-5-20251001",
992
- rerankerEnabled: true,
993
- scalingRoadmap: {
994
- rerankerAutoTrigger: {
995
- enabled: true,
996
- broadQueryMinCardinality: 5e4,
997
- fetchTopK: 150,
998
- returnTopK: 5
999
- }
1000
- },
1001
- graphRagEnabled: true,
1002
- wikiEnabled: false,
1003
- wikiUrl: "",
1004
- wikiApiKey: "",
1005
- wikiSyncIntervalMs: 30 * 60 * 1e3,
1006
- wikiWorkspaceMapping: {
1007
- exe: "Executive",
1008
- yoshi: "Engineering",
1009
- mari: "Marketing",
1010
- tom: "Engineering",
1011
- sasha: "Production"
1012
- },
1013
- wikiAutoUpdate: true,
1014
- wikiAutoUpdateThreshold: 0.5,
1015
- wikiAutoUpdateCreateNew: true,
1016
- skillLearning: true,
1017
- skillThreshold: 3,
1018
- skillModel: "claude-haiku-4-5-20251001",
1019
- exeHeartbeat: {
1020
- enabled: true,
1021
- intervalSeconds: 60,
1022
- staleInProgressThresholdHours: 2
1023
- },
1024
- sessionLifecycle: {
1025
- idleKillEnabled: true,
1026
- idleKillTicksRequired: 3,
1027
- idleKillIntercomAckWindowMs: 1e4,
1028
- maxAutoInstances: 10
1029
- },
1030
- autoUpdate: {
1031
- checkOnBoot: true,
1032
- autoInstall: false,
1033
- checkIntervalMs: 24 * 60 * 60 * 1e3
1034
- }
1035
- };
1036
-
1037
- // src/lib/device-registry.ts
1038
- var DEVICE_JSON_PATH = path2.join(EXE_AI_DIR, "device.json");
1107
+ import os3 from "os";
1108
+ import { readFileSync as readFileSync3, writeFileSync as writeFileSync2, mkdirSync, existsSync as existsSync3 } from "fs";
1109
+ import path3 from "path";
1110
+ var DEVICE_JSON_PATH = path3.join(EXE_AI_DIR, "device.json");
1039
1111
  function getDeviceInfo() {
1040
- if (existsSync2(DEVICE_JSON_PATH)) {
1112
+ if (existsSync3(DEVICE_JSON_PATH)) {
1041
1113
  try {
1042
- const raw = readFileSync2(DEVICE_JSON_PATH, "utf8");
1114
+ const raw = readFileSync3(DEVICE_JSON_PATH, "utf8");
1043
1115
  const data = JSON.parse(raw);
1044
1116
  if (data.deviceId && data.friendlyName && data.hostname) {
1045
1117
  return data;
@@ -1047,20 +1119,20 @@ function getDeviceInfo() {
1047
1119
  } catch {
1048
1120
  }
1049
1121
  }
1050
- const hostname = os2.hostname();
1122
+ const hostname = os3.hostname();
1051
1123
  const info = {
1052
1124
  deviceId: crypto.randomUUID(),
1053
1125
  friendlyName: hostname.replace(/\./g, "-").toLowerCase(),
1054
1126
  hostname
1055
1127
  };
1056
- mkdirSync(path2.dirname(DEVICE_JSON_PATH), { recursive: true });
1057
- writeFileSync(DEVICE_JSON_PATH, JSON.stringify(info, null, 2));
1128
+ mkdirSync(path3.dirname(DEVICE_JSON_PATH), { recursive: true });
1129
+ writeFileSync2(DEVICE_JSON_PATH, JSON.stringify(info, null, 2));
1058
1130
  return info;
1059
1131
  }
1060
1132
  function setFriendlyName(name) {
1061
1133
  const info = getDeviceInfo();
1062
1134
  info.friendlyName = name;
1063
- writeFileSync(DEVICE_JSON_PATH, JSON.stringify(info, null, 2));
1135
+ writeFileSync2(DEVICE_JSON_PATH, JSON.stringify(info, null, 2));
1064
1136
  }
1065
1137
  async function resolveTargetDevice(targetAgent, targetProject) {
1066
1138
  const { getClient: getClient2 } = await Promise.resolve().then(() => (init_database(), database_exports));
@@ -13,7 +13,6 @@ var config_exports = {};
13
13
  __export(config_exports, {
14
14
  CONFIG_MIGRATIONS: () => CONFIG_MIGRATIONS,
15
15
  CONFIG_PATH: () => CONFIG_PATH,
16
- COO_AGENT_NAME: () => COO_AGENT_NAME,
17
16
  CURRENT_CONFIG_VERSION: () => CURRENT_CONFIG_VERSION,
18
17
  DB_PATH: () => DB_PATH,
19
18
  EXE_AI_DIR: () => EXE_AI_DIR,
@@ -169,7 +168,7 @@ async function loadConfigFrom(configPath) {
169
168
  return { ...DEFAULT_CONFIG };
170
169
  }
171
170
  }
172
- var EXE_AI_DIR, DB_PATH, MODELS_DIR, CONFIG_PATH, COO_AGENT_NAME, LEGACY_LANCE_PATH, CURRENT_CONFIG_VERSION, DEFAULT_CONFIG, CONFIG_MIGRATIONS;
171
+ var EXE_AI_DIR, DB_PATH, MODELS_DIR, CONFIG_PATH, LEGACY_LANCE_PATH, CURRENT_CONFIG_VERSION, DEFAULT_CONFIG, CONFIG_MIGRATIONS;
173
172
  var init_config = __esm({
174
173
  "src/lib/config.ts"() {
175
174
  "use strict";
@@ -177,7 +176,6 @@ var init_config = __esm({
177
176
  DB_PATH = path.join(EXE_AI_DIR, "memories.db");
178
177
  MODELS_DIR = path.join(EXE_AI_DIR, "models");
179
178
  CONFIG_PATH = path.join(EXE_AI_DIR, "config.json");
180
- COO_AGENT_NAME = "exe";
181
179
  LEGACY_LANCE_PATH = path.join(EXE_AI_DIR, "local.lance");
182
180
  CURRENT_CONFIG_VERSION = 1;
183
181
  DEFAULT_CONFIG = {
@@ -213,13 +211,7 @@ var init_config = __esm({
213
211
  wikiUrl: "",
214
212
  wikiApiKey: "",
215
213
  wikiSyncIntervalMs: 30 * 60 * 1e3,
216
- wikiWorkspaceMapping: {
217
- exe: "Executive",
218
- yoshi: "Engineering",
219
- mari: "Marketing",
220
- tom: "Engineering",
221
- sasha: "Production"
222
- },
214
+ wikiWorkspaceMapping: {},
223
215
  wikiAutoUpdate: true,
224
216
  wikiAutoUpdateThreshold: 0.5,
225
217
  wikiAutoUpdateCreateNew: true,
@@ -361,6 +353,10 @@ function spawnDaemon() {
361
353
  stdio: ["ignore", "ignore", stderrFd],
362
354
  env: {
363
355
  ...process.env,
356
+ TMUX: void 0,
357
+ // Daemon is global — must not inherit session scope
358
+ TMUX_PANE: void 0,
359
+ // Prevents resolveExeSession() from scoping to one session
364
360
  EXE_DAEMON_SOCK: SOCKET_PATH,
365
361
  EXE_DAEMON_PID: PID_PATH
366
362
  }