@askexenow/exe-os 0.9.38 → 0.9.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/backfill-conversations.js +34 -7
- package/dist/bin/backfill-responses.js +34 -7
- package/dist/bin/backfill-vectors.js +34 -7
- package/dist/bin/cleanup-stale-review-tasks.js +35 -8
- package/dist/bin/cli.js +72 -42
- package/dist/bin/exe-agent.js +11 -3
- package/dist/bin/exe-assign.js +34 -7
- package/dist/bin/exe-boot.js +48 -18
- package/dist/bin/exe-call.js +132 -340
- package/dist/bin/exe-dispatch.js +34 -7
- package/dist/bin/exe-doctor.js +37 -10
- package/dist/bin/exe-export-behaviors.js +36 -9
- package/dist/bin/exe-forget.js +34 -7
- package/dist/bin/exe-gateway.js +40 -12
- package/dist/bin/exe-heartbeat.js +35 -8
- package/dist/bin/exe-kill.js +34 -7
- package/dist/bin/exe-launch-agent.js +285 -1079
- package/dist/bin/exe-new-employee.js +29 -10
- package/dist/bin/exe-pending-messages.js +34 -7
- package/dist/bin/exe-pending-notifications.js +34 -7
- package/dist/bin/exe-pending-reviews.js +34 -7
- package/dist/bin/exe-rename.js +41 -13
- package/dist/bin/exe-review.js +34 -7
- package/dist/bin/exe-search.js +36 -9
- package/dist/bin/exe-session-cleanup.js +36 -9
- package/dist/bin/exe-start-codex.js +36 -9
- package/dist/bin/exe-start-opencode.js +36 -9
- package/dist/bin/exe-status.js +35 -8
- package/dist/bin/exe-team.js +34 -7
- package/dist/bin/git-sweep.js +34 -7
- package/dist/bin/graph-backfill.js +34 -7
- package/dist/bin/graph-export.js +34 -7
- package/dist/bin/install.js +2 -1
- package/dist/bin/intercom-check.js +36 -9
- package/dist/bin/scan-tasks.js +34 -7
- package/dist/bin/setup.js +18 -17
- package/dist/bin/shard-migrate.js +34 -7
- package/dist/gateway/index.js +38 -10
- package/dist/hooks/bug-report-worker.js +38 -10
- package/dist/hooks/codex-stop-task-finalizer.js +36 -9
- package/dist/hooks/commit-complete.js +34 -7
- package/dist/hooks/error-recall.js +36 -9
- package/dist/hooks/ingest.js +36 -8
- package/dist/hooks/instructions-loaded.js +42 -10
- package/dist/hooks/notification.js +34 -7
- package/dist/hooks/post-compact.js +34 -7
- package/dist/hooks/post-tool-combined.js +37 -10
- package/dist/hooks/pre-compact.js +35 -8
- package/dist/hooks/pre-tool-use.js +36 -8
- package/dist/hooks/prompt-submit.js +41 -13
- package/dist/hooks/session-end.js +35 -8
- package/dist/hooks/session-start.js +47 -14
- package/dist/hooks/stop.js +35 -8
- package/dist/hooks/subagent-stop.js +34 -7
- package/dist/hooks/summary-worker.js +43 -16
- package/dist/index.js +36 -8
- package/dist/lib/consolidation.js +2 -1
- package/dist/lib/employee-templates.js +2 -1
- package/dist/lib/employees.js +2 -1
- package/dist/lib/exe-daemon.js +136 -36
- package/dist/lib/hybrid-search.js +36 -9
- package/dist/lib/identity.js +8 -3
- package/dist/lib/schedules.js +34 -7
- package/dist/lib/store.js +34 -7
- package/dist/mcp/server.js +133 -33
- package/dist/mcp/tools/create-task.js +10 -4
- package/dist/runtime/index.js +34 -7
- package/dist/tui/App.js +40 -11
- package/package.json +1 -1
package/dist/tui/App.js
CHANGED
|
@@ -1071,7 +1071,8 @@ function isMultiInstance(agentName, employees) {
|
|
|
1071
1071
|
return MULTI_INSTANCE_ROLES.has(emp.role.toLowerCase());
|
|
1072
1072
|
}
|
|
1073
1073
|
function addEmployee(employees, employee) {
|
|
1074
|
-
const
|
|
1074
|
+
const { systemPrompt: _legacyPrompt, ...rest } = employee;
|
|
1075
|
+
const normalized = { ...rest, name: employee.name.toLowerCase() };
|
|
1075
1076
|
if (employees.some((e) => e.name.toLowerCase() === normalized.name)) {
|
|
1076
1077
|
throw new Error(`Employee '${normalized.name}' already exists`);
|
|
1077
1078
|
}
|
|
@@ -3872,8 +3873,8 @@ async function validateLicense(apiKey, deviceId) {
|
|
|
3872
3873
|
}
|
|
3873
3874
|
function getCacheAgeMs() {
|
|
3874
3875
|
try {
|
|
3875
|
-
const { statSync:
|
|
3876
|
-
const s =
|
|
3876
|
+
const { statSync: statSync3 } = __require("fs");
|
|
3877
|
+
const s = statSync3(CACHE_PATH);
|
|
3877
3878
|
return Date.now() - s.mtimeMs;
|
|
3878
3879
|
} catch {
|
|
3879
3880
|
return Infinity;
|
|
@@ -11293,7 +11294,7 @@ __export(shard_manager_exports, {
|
|
|
11293
11294
|
shardExists: () => shardExists
|
|
11294
11295
|
});
|
|
11295
11296
|
import path27 from "path";
|
|
11296
|
-
import { existsSync as existsSync17, mkdirSync as mkdirSync7, readdirSync as readdirSync4 } from "fs";
|
|
11297
|
+
import { existsSync as existsSync17, mkdirSync as mkdirSync7, readdirSync as readdirSync4, renameSync as renameSync4, statSync as statSync2 } from "fs";
|
|
11297
11298
|
import { createClient as createClient2 } from "@libsql/client";
|
|
11298
11299
|
function initShardManager(encryptionKey) {
|
|
11299
11300
|
_encryptionKey = encryptionKey;
|
|
@@ -11315,7 +11316,7 @@ function getShardClient(projectName) {
|
|
|
11315
11316
|
if (!_encryptionKey) {
|
|
11316
11317
|
throw new Error("Shard manager not initialized. Call initShardManager() first.");
|
|
11317
11318
|
}
|
|
11318
|
-
const safeName = projectName
|
|
11319
|
+
const safeName = safeShardName(projectName);
|
|
11319
11320
|
if (!safeName || safeName === "unknown") {
|
|
11320
11321
|
throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
|
|
11321
11322
|
}
|
|
@@ -11337,9 +11338,12 @@ function getShardClient(projectName) {
|
|
|
11337
11338
|
return client;
|
|
11338
11339
|
}
|
|
11339
11340
|
function shardExists(projectName) {
|
|
11340
|
-
const safeName = projectName
|
|
11341
|
+
const safeName = safeShardName(projectName);
|
|
11341
11342
|
return existsSync17(path27.join(SHARDS_DIR, `${safeName}.db`));
|
|
11342
11343
|
}
|
|
11344
|
+
function safeShardName(projectName) {
|
|
11345
|
+
return projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
11346
|
+
}
|
|
11343
11347
|
function listShards() {
|
|
11344
11348
|
if (!existsSync17(SHARDS_DIR)) return [];
|
|
11345
11349
|
return readdirSync4(SHARDS_DIR).filter((f) => f.endsWith(".db")).map((f) => f.replace(".db", ""));
|
|
@@ -11433,7 +11437,8 @@ async function ensureShardSchema(client) {
|
|
|
11433
11437
|
"ALTER TABLE memories ADD COLUMN token_cost REAL",
|
|
11434
11438
|
"ALTER TABLE memories ADD COLUMN audience TEXT",
|
|
11435
11439
|
"ALTER TABLE memories ADD COLUMN language_type TEXT",
|
|
11436
|
-
"ALTER TABLE memories ADD COLUMN parent_memory_id TEXT"
|
|
11440
|
+
"ALTER TABLE memories ADD COLUMN parent_memory_id TEXT",
|
|
11441
|
+
"ALTER TABLE memories ADD COLUMN deleted_at TEXT"
|
|
11437
11442
|
]) {
|
|
11438
11443
|
try {
|
|
11439
11444
|
await client.execute(col);
|
|
@@ -11529,9 +11534,32 @@ async function ensureShardSchema(client) {
|
|
|
11529
11534
|
}
|
|
11530
11535
|
}
|
|
11531
11536
|
async function getReadyShardClient(projectName) {
|
|
11532
|
-
const
|
|
11533
|
-
|
|
11534
|
-
|
|
11537
|
+
const safeName = safeShardName(projectName);
|
|
11538
|
+
let client = getShardClient(projectName);
|
|
11539
|
+
try {
|
|
11540
|
+
await ensureShardSchema(client);
|
|
11541
|
+
return client;
|
|
11542
|
+
} catch (err) {
|
|
11543
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
11544
|
+
if (!/SQLITE_NOTADB|file is not a database/i.test(message)) throw err;
|
|
11545
|
+
client.close();
|
|
11546
|
+
_shards.delete(safeName);
|
|
11547
|
+
_shardLastAccess.delete(safeName);
|
|
11548
|
+
const dbPath = path27.join(SHARDS_DIR, `${safeName}.db`);
|
|
11549
|
+
if (existsSync17(dbPath)) {
|
|
11550
|
+
const stat = statSync2(dbPath);
|
|
11551
|
+
const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
11552
|
+
const archivedPath = path27.join(SHARDS_DIR, `${safeName}.db.broken-${stamp}`);
|
|
11553
|
+
renameSync4(dbPath, archivedPath);
|
|
11554
|
+
process.stderr.write(
|
|
11555
|
+
`[shard-manager] Archived unreadable shard ${safeName}: ${archivedPath} (${stat.size} bytes, mtime ${stat.mtime.toISOString()})
|
|
11556
|
+
`
|
|
11557
|
+
);
|
|
11558
|
+
}
|
|
11559
|
+
client = getShardClient(projectName);
|
|
11560
|
+
await ensureShardSchema(client);
|
|
11561
|
+
return client;
|
|
11562
|
+
}
|
|
11535
11563
|
}
|
|
11536
11564
|
function evictLRU() {
|
|
11537
11565
|
let oldest = null;
|
|
@@ -18974,7 +19002,8 @@ When you need to assign work to another employee (e.g., CTO assigns to an engine
|
|
|
18974
19002
|
var PROCEDURES_MARKER = "EXE OS \u2014 VISION AND NON-NEGOTIABLE PRINCIPLES";
|
|
18975
19003
|
function getSessionPrompt(storedPrompt) {
|
|
18976
19004
|
const markerIndex = storedPrompt.indexOf(PROCEDURES_MARKER);
|
|
18977
|
-
const
|
|
19005
|
+
const withoutProcedures = markerIndex >= 0 ? storedPrompt.slice(0, markerIndex).trimEnd() : storedPrompt;
|
|
19006
|
+
const rolePrompt = withoutProcedures.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/, "").replace(/<!--[\s\S]*?-->/g, "").trimStart();
|
|
18978
19007
|
const globalBlock = getGlobalProceduresBlock();
|
|
18979
19008
|
return `${globalBlock}${rolePrompt}
|
|
18980
19009
|
${BASE_OPERATING_PROCEDURES}`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.39",
|
|
4
4
|
"description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"type": "module",
|