@askexenow/exe-os 0.8.83 → 0.8.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/bin/backfill-conversations.js +746 -595
  2. package/dist/bin/backfill-responses.js +745 -594
  3. package/dist/bin/backfill-vectors.js +312 -226
  4. package/dist/bin/cleanup-stale-review-tasks.js +154 -21
  5. package/dist/bin/cli.js +14678 -12676
  6. package/dist/bin/exe-agent-config.js +242 -0
  7. package/dist/bin/exe-agent.js +100 -91
  8. package/dist/bin/exe-assign.js +1003 -854
  9. package/dist/bin/exe-boot.js +1420 -485
  10. package/dist/bin/exe-call.js +10 -0
  11. package/dist/bin/exe-cloud.js +29 -6
  12. package/dist/bin/exe-dispatch.js +572 -271
  13. package/dist/bin/exe-doctor.js +403 -6
  14. package/dist/bin/exe-export-behaviors.js +175 -72
  15. package/dist/bin/exe-forget.js +102 -3
  16. package/dist/bin/exe-gateway.js +796 -292
  17. package/dist/bin/exe-healthcheck.js +134 -1
  18. package/dist/bin/exe-heartbeat.js +172 -36
  19. package/dist/bin/exe-kill.js +175 -72
  20. package/dist/bin/exe-launch-agent.js +189 -76
  21. package/dist/bin/exe-link.js +927 -82
  22. package/dist/bin/exe-new-employee.js +60 -8
  23. package/dist/bin/exe-pending-messages.js +151 -19
  24. package/dist/bin/exe-pending-notifications.js +97 -2
  25. package/dist/bin/exe-pending-reviews.js +155 -22
  26. package/dist/bin/exe-rename.js +564 -23
  27. package/dist/bin/exe-review.js +231 -73
  28. package/dist/bin/exe-search.js +995 -228
  29. package/dist/bin/exe-session-cleanup.js +4930 -1664
  30. package/dist/bin/exe-settings.js +20 -5
  31. package/dist/bin/exe-start-codex.js +2598 -0
  32. package/dist/bin/exe-start.sh +15 -3
  33. package/dist/bin/exe-status.js +154 -21
  34. package/dist/bin/exe-team.js +97 -2
  35. package/dist/bin/git-sweep.js +1180 -363
  36. package/dist/bin/graph-backfill.js +175 -72
  37. package/dist/bin/graph-export.js +175 -72
  38. package/dist/bin/install.js +60 -7
  39. package/dist/bin/list-providers.js +1 -0
  40. package/dist/bin/scan-tasks.js +1185 -367
  41. package/dist/bin/setup.js +914 -270
  42. package/dist/bin/shard-migrate.js +175 -72
  43. package/dist/bin/update.js +1 -0
  44. package/dist/bin/wiki-sync.js +175 -72
  45. package/dist/gateway/index.js +792 -285
  46. package/dist/hooks/bug-report-worker.js +445 -135
  47. package/dist/hooks/commit-complete.js +1178 -361
  48. package/dist/hooks/error-recall.js +994 -228
  49. package/dist/hooks/ingest-worker.js +1799 -1234
  50. package/dist/hooks/ingest.js +3 -0
  51. package/dist/hooks/instructions-loaded.js +707 -97
  52. package/dist/hooks/notification.js +699 -89
  53. package/dist/hooks/post-compact.js +757 -109
  54. package/dist/hooks/pre-compact.js +1061 -244
  55. package/dist/hooks/pre-tool-use.js +787 -130
  56. package/dist/hooks/prompt-ingest-worker.js +242 -101
  57. package/dist/hooks/prompt-submit.js +1121 -299
  58. package/dist/hooks/response-ingest-worker.js +242 -101
  59. package/dist/hooks/session-end.js +4063 -397
  60. package/dist/hooks/session-start.js +1071 -254
  61. package/dist/hooks/stop.js +768 -120
  62. package/dist/hooks/subagent-stop.js +757 -109
  63. package/dist/hooks/summary-worker.js +1706 -1011
  64. package/dist/index.js +1821 -1098
  65. package/dist/lib/agent-config.js +167 -0
  66. package/dist/lib/cloud-sync.js +932 -88
  67. package/dist/lib/consolidation.js +2 -1
  68. package/dist/lib/database.js +642 -87
  69. package/dist/lib/db-daemon-client.js +503 -0
  70. package/dist/lib/device-registry.js +547 -7
  71. package/dist/lib/embedder.js +14 -28
  72. package/dist/lib/employee-templates.js +84 -74
  73. package/dist/lib/employees.js +9 -0
  74. package/dist/lib/exe-daemon-client.js +16 -29
  75. package/dist/lib/exe-daemon.js +2733 -1575
  76. package/dist/lib/hybrid-search.js +995 -228
  77. package/dist/lib/identity.js +87 -67
  78. package/dist/lib/keychain.js +9 -1
  79. package/dist/lib/messaging.js +103 -40
  80. package/dist/lib/reminders.js +91 -74
  81. package/dist/lib/runtime-table.js +16 -0
  82. package/dist/lib/schedules.js +96 -2
  83. package/dist/lib/session-wrappers.js +22 -0
  84. package/dist/lib/skill-learning.js +103 -85
  85. package/dist/lib/store.js +234 -73
  86. package/dist/lib/tasks.js +348 -134
  87. package/dist/lib/tmux-routing.js +422 -208
  88. package/dist/lib/token-spend.js +273 -0
  89. package/dist/lib/ws-client.js +11 -0
  90. package/dist/mcp/server.js +5742 -696
  91. package/dist/mcp/tools/complete-reminder.js +94 -77
  92. package/dist/mcp/tools/create-reminder.js +94 -77
  93. package/dist/mcp/tools/create-task.js +375 -152
  94. package/dist/mcp/tools/deactivate-behavior.js +95 -77
  95. package/dist/mcp/tools/list-reminders.js +94 -77
  96. package/dist/mcp/tools/list-tasks.js +99 -31
  97. package/dist/mcp/tools/send-message.js +108 -45
  98. package/dist/mcp/tools/update-task.js +162 -77
  99. package/dist/runtime/index.js +1075 -258
  100. package/dist/tui/App.js +1333 -506
  101. package/package.json +6 -1
  102. package/src/commands/exe/agent-config.md +27 -0
  103. package/src/commands/exe/cc-doctor.md +10 -0
@@ -0,0 +1,167 @@
1
+ // src/lib/agent-config.ts
2
+ import { readFileSync as readFileSync2, writeFileSync, existsSync as existsSync2, mkdirSync } from "fs";
3
+ import path2 from "path";
4
+
5
+ // src/lib/config.ts
6
+ import { readFile, writeFile, mkdir, chmod } from "fs/promises";
7
+ import { readFileSync, existsSync, renameSync } from "fs";
8
+ import path from "path";
9
+ import os from "os";
10
+ function resolveDataDir() {
11
+ if (process.env.EXE_OS_DIR) return process.env.EXE_OS_DIR;
12
+ if (process.env.EXE_MEM_DIR) return process.env.EXE_MEM_DIR;
13
+ const newDir = path.join(os.homedir(), ".exe-os");
14
+ const legacyDir = path.join(os.homedir(), ".exe-mem");
15
+ if (!existsSync(newDir) && existsSync(legacyDir)) {
16
+ try {
17
+ renameSync(legacyDir, newDir);
18
+ process.stderr.write(`[exe-os] Migrated data directory: ~/.exe-mem \u2192 ~/.exe-os
19
+ `);
20
+ } catch {
21
+ return legacyDir;
22
+ }
23
+ }
24
+ return newDir;
25
+ }
26
+ var EXE_AI_DIR = resolveDataDir();
27
+ var DB_PATH = path.join(EXE_AI_DIR, "memories.db");
28
+ var MODELS_DIR = path.join(EXE_AI_DIR, "models");
29
+ var CONFIG_PATH = path.join(EXE_AI_DIR, "config.json");
30
+ var LEGACY_LANCE_PATH = path.join(EXE_AI_DIR, "local.lance");
31
+ var CURRENT_CONFIG_VERSION = 1;
32
+ var DEFAULT_CONFIG = {
33
+ config_version: CURRENT_CONFIG_VERSION,
34
+ dbPath: DB_PATH,
35
+ modelFile: "jina-embeddings-v5-small-q4_k_m.gguf",
36
+ embeddingDim: 1024,
37
+ batchSize: 20,
38
+ flushIntervalMs: 1e4,
39
+ autoIngestion: true,
40
+ autoRetrieval: true,
41
+ searchMode: "hybrid",
42
+ hookSearchMode: "hybrid",
43
+ fileGrepEnabled: true,
44
+ splashEffect: true,
45
+ consolidationEnabled: true,
46
+ consolidationIntervalMs: 6 * 60 * 60 * 1e3,
47
+ consolidationModel: "claude-haiku-4-5-20251001",
48
+ consolidationMaxCallsPerRun: 20,
49
+ selfQueryRouter: true,
50
+ selfQueryModel: "claude-haiku-4-5-20251001",
51
+ rerankerEnabled: true,
52
+ scalingRoadmap: {
53
+ rerankerAutoTrigger: {
54
+ enabled: true,
55
+ broadQueryMinCardinality: 5e4,
56
+ fetchTopK: 150,
57
+ returnTopK: 5
58
+ }
59
+ },
60
+ graphRagEnabled: true,
61
+ wikiEnabled: false,
62
+ wikiUrl: "",
63
+ wikiApiKey: "",
64
+ wikiSyncIntervalMs: 30 * 60 * 1e3,
65
+ wikiWorkspaceMapping: {},
66
+ wikiAutoUpdate: true,
67
+ wikiAutoUpdateThreshold: 0.5,
68
+ wikiAutoUpdateCreateNew: true,
69
+ skillLearning: true,
70
+ skillThreshold: 3,
71
+ skillModel: "claude-haiku-4-5-20251001",
72
+ exeHeartbeat: {
73
+ enabled: true,
74
+ intervalSeconds: 60,
75
+ staleInProgressThresholdHours: 2
76
+ },
77
+ sessionLifecycle: {
78
+ idleKillEnabled: true,
79
+ idleKillTicksRequired: 3,
80
+ idleKillIntercomAckWindowMs: 1e4,
81
+ maxAutoInstances: 10
82
+ },
83
+ autoUpdate: {
84
+ checkOnBoot: true,
85
+ autoInstall: false,
86
+ checkIntervalMs: 24 * 60 * 60 * 1e3
87
+ }
88
+ };
89
+
90
+ // src/lib/runtime-table.ts
91
+ var RUNTIME_TABLE = {
92
+ codex: {
93
+ binary: "codex",
94
+ launchMode: "exec",
95
+ autoApproveFlag: "--full-auto",
96
+ inlineFlag: "--no-alt-screen",
97
+ apiKeyEnv: "OPENAI_API_KEY",
98
+ defaultModel: "gpt-5.4"
99
+ }
100
+ };
101
+ var DEFAULT_RUNTIME = "claude";
102
+
103
+ // src/lib/agent-config.ts
104
+ var AGENT_CONFIG_PATH = path2.join(EXE_AI_DIR, "agent-config.json");
105
+ var KNOWN_RUNTIMES = {
106
+ claude: ["claude-opus-4", "claude-sonnet-4", "claude-haiku-3.5"],
107
+ codex: ["gpt-5.4", "gpt-5.5", "o3", "o4-mini"],
108
+ opencode: ["minimax-m2.7"]
109
+ };
110
+ var DEFAULT_MODELS = {
111
+ claude: "claude-opus-4",
112
+ codex: RUNTIME_TABLE.codex?.defaultModel ?? "gpt-5.4",
113
+ opencode: "minimax-m2.7"
114
+ };
115
+ function loadAgentConfig() {
116
+ if (!existsSync2(AGENT_CONFIG_PATH)) return {};
117
+ try {
118
+ return JSON.parse(readFileSync2(AGENT_CONFIG_PATH, "utf-8"));
119
+ } catch {
120
+ return {};
121
+ }
122
+ }
123
+ function saveAgentConfig(config) {
124
+ const dir = path2.dirname(AGENT_CONFIG_PATH);
125
+ if (!existsSync2(dir)) mkdirSync(dir, { recursive: true });
126
+ writeFileSync(AGENT_CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", "utf-8");
127
+ }
128
+ function getAgentRuntime(agentId) {
129
+ const config = loadAgentConfig();
130
+ const entry = config[agentId];
131
+ if (entry) return entry;
132
+ return { runtime: DEFAULT_RUNTIME, model: DEFAULT_MODELS[DEFAULT_RUNTIME] };
133
+ }
134
+ function setAgentRuntime(agentId, runtime, model) {
135
+ const knownModels = KNOWN_RUNTIMES[runtime];
136
+ if (!knownModels) {
137
+ return {
138
+ ok: false,
139
+ error: `Unknown runtime "${runtime}". Valid: ${Object.keys(KNOWN_RUNTIMES).join(", ")}`
140
+ };
141
+ }
142
+ if (!knownModels.includes(model)) {
143
+ return {
144
+ ok: false,
145
+ error: `Unknown model "${model}" for runtime "${runtime}". Valid: ${knownModels.join(", ")}`
146
+ };
147
+ }
148
+ const config = loadAgentConfig();
149
+ config[agentId] = { runtime, model };
150
+ saveAgentConfig(config);
151
+ return { ok: true };
152
+ }
153
+ function clearAgentRuntime(agentId) {
154
+ const config = loadAgentConfig();
155
+ delete config[agentId];
156
+ saveAgentConfig(config);
157
+ }
158
+ export {
159
+ AGENT_CONFIG_PATH,
160
+ DEFAULT_MODELS,
161
+ KNOWN_RUNTIMES,
162
+ clearAgentRuntime,
163
+ getAgentRuntime,
164
+ loadAgentConfig,
165
+ saveAgentConfig,
166
+ setAgentRuntime
167
+ };