@askexenow/exe-os 0.8.56 → 0.8.57
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 +13 -0
- package/dist/bin/backfill-responses.js +13 -0
- package/dist/bin/backfill-vectors.js +65 -6
- package/dist/bin/cleanup-stale-review-tasks.js +407 -57
- package/dist/bin/cli.js +6322 -6254
- package/dist/bin/exe-agent.js +13 -0
- package/dist/bin/exe-assign.js +13 -0
- package/dist/bin/exe-boot.js +541 -433
- package/dist/bin/exe-call.js +13 -0
- package/dist/bin/exe-doctor.js +76 -5
- package/dist/bin/exe-export-behaviors.js +13 -0
- package/dist/bin/exe-forget.js +13 -0
- package/dist/bin/exe-gateway.js +73 -29
- package/dist/bin/exe-heartbeat.js +248 -41
- package/dist/bin/exe-kill.js +14 -1
- package/dist/bin/exe-launch-agent.js +13 -0
- package/dist/bin/exe-new-employee.js +13 -0
- package/dist/bin/exe-pending-messages.js +13 -0
- package/dist/bin/exe-pending-notifications.js +13 -0
- package/dist/bin/exe-pending-reviews.js +56 -34
- package/dist/bin/exe-rename.js +13 -0
- package/dist/bin/exe-review.js +13 -0
- package/dist/bin/exe-search.js +13 -0
- package/dist/bin/exe-session-cleanup.js +2972 -2924
- package/dist/bin/exe-status.js +410 -66
- package/dist/bin/exe-team.js +13 -0
- package/dist/bin/git-sweep.js +3442 -3392
- package/dist/bin/graph-backfill.js +13 -0
- package/dist/bin/graph-export.js +13 -0
- package/dist/bin/scan-tasks.js +3602 -3556
- package/dist/bin/setup.js +13 -0
- package/dist/bin/shard-migrate.js +13 -0
- package/dist/bin/wiki-sync.js +13 -0
- package/dist/gateway/index.js +73 -29
- package/dist/hooks/bug-report-worker.js +73 -29
- package/dist/hooks/commit-complete.js +3437 -3392
- package/dist/hooks/error-recall.js +13 -0
- package/dist/hooks/ingest-worker.js +130 -34
- package/dist/hooks/ingest.js +25 -6
- package/dist/hooks/instructions-loaded.js +13 -0
- package/dist/hooks/notification.js +13 -0
- package/dist/hooks/post-compact.js +371 -53
- package/dist/hooks/pre-compact.js +3121 -3075
- package/dist/hooks/pre-tool-use.js +400 -93
- package/dist/hooks/prompt-ingest-worker.js +13 -0
- package/dist/hooks/prompt-submit.js +73 -29
- package/dist/hooks/response-ingest-worker.js +13 -0
- package/dist/hooks/session-end.js +382 -64
- package/dist/hooks/session-start.js +355 -37
- package/dist/hooks/stop.js +381 -62
- package/dist/hooks/subagent-stop.js +371 -53
- package/dist/hooks/summary-worker.js +108 -39
- package/dist/index.js +93 -37
- package/dist/lib/employee-templates.js +13 -0
- package/dist/lib/exe-daemon.js +94 -41
- package/dist/lib/hybrid-search.js +13 -0
- package/dist/lib/schedules.js +13 -0
- package/dist/lib/store.js +13 -0
- package/dist/lib/tasks.js +60 -29
- package/dist/lib/tmux-routing.js +60 -29
- package/dist/mcp/server.js +136 -38
- package/dist/mcp/tools/create-task.js +60 -29
- package/dist/mcp/tools/list-tasks.js +116 -2511
- package/dist/mcp/tools/update-task.js +273 -243
- package/dist/runtime/index.js +93 -37
- package/dist/tui/App.js +5609 -5541
- package/package.json +1 -1
- package/src/commands/exe/build-adv.md +2 -2
- package/src/commands/exe/heartbeat.md +2 -1
|
@@ -1435,6 +1435,19 @@ var init_platform_procedures = __esm({
|
|
|
1435
1435
|
domain: "architecture",
|
|
1436
1436
|
priority: "p0",
|
|
1437
1437
|
content: "Desktop and TUI are the SAME product in different renderers. Same data contracts, same interactions, same acceptance criteria. Desktop tab specs in ARCHITECTURE.md ARE the TUI specs. When building TUI, cross-reference Desktop spec. Different tab names, identical behavior. Never treat them as separate products."
|
|
1438
|
+
},
|
|
1439
|
+
// --- Orchestration golden path ---
|
|
1440
|
+
{
|
|
1441
|
+
title: "Task lifecycle \u2014 the golden path every agent follows",
|
|
1442
|
+
domain: "workflow",
|
|
1443
|
+
priority: "p0",
|
|
1444
|
+
content: "create_task is dispatch + delivery. Task lifecycle: open \u2192 in_progress (you start) \u2192 done (update_task when finished) \u2192 needs_review (reviewer nudged) \u2192 closed (COO only via close_task). DB is the reliable delivery \u2014 intercom is just a speedup nudge. If you finish a task, self-chain: check for next task immediately (step 7). Never wait for a nudge. Never say 'standing by.'"
|
|
1445
|
+
},
|
|
1446
|
+
{
|
|
1447
|
+
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
1448
|
+
domain: "architecture",
|
|
1449
|
+
priority: "p0",
|
|
1450
|
+
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
1438
1451
|
}
|
|
1439
1452
|
];
|
|
1440
1453
|
PLATFORM_PROCEDURE_TITLES = new Set(
|
|
@@ -1435,6 +1435,19 @@ var init_platform_procedures = __esm({
|
|
|
1435
1435
|
domain: "architecture",
|
|
1436
1436
|
priority: "p0",
|
|
1437
1437
|
content: "Desktop and TUI are the SAME product in different renderers. Same data contracts, same interactions, same acceptance criteria. Desktop tab specs in ARCHITECTURE.md ARE the TUI specs. When building TUI, cross-reference Desktop spec. Different tab names, identical behavior. Never treat them as separate products."
|
|
1438
|
+
},
|
|
1439
|
+
// --- Orchestration golden path ---
|
|
1440
|
+
{
|
|
1441
|
+
title: "Task lifecycle \u2014 the golden path every agent follows",
|
|
1442
|
+
domain: "workflow",
|
|
1443
|
+
priority: "p0",
|
|
1444
|
+
content: "create_task is dispatch + delivery. Task lifecycle: open \u2192 in_progress (you start) \u2192 done (update_task when finished) \u2192 needs_review (reviewer nudged) \u2192 closed (COO only via close_task). DB is the reliable delivery \u2014 intercom is just a speedup nudge. If you finish a task, self-chain: check for next task immediately (step 7). Never wait for a nudge. Never say 'standing by.'"
|
|
1445
|
+
},
|
|
1446
|
+
{
|
|
1447
|
+
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
1448
|
+
domain: "architecture",
|
|
1449
|
+
priority: "p0",
|
|
1450
|
+
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
1438
1451
|
}
|
|
1439
1452
|
];
|
|
1440
1453
|
PLATFORM_PROCEDURE_TITLES = new Set(
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
5
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
6
|
+
}) : x)(function(x) {
|
|
7
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
8
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
9
|
+
});
|
|
4
10
|
var __esm = (fn, res) => function __init() {
|
|
5
11
|
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
6
12
|
};
|
|
@@ -1435,6 +1441,19 @@ var init_platform_procedures = __esm({
|
|
|
1435
1441
|
domain: "architecture",
|
|
1436
1442
|
priority: "p0",
|
|
1437
1443
|
content: "Desktop and TUI are the SAME product in different renderers. Same data contracts, same interactions, same acceptance criteria. Desktop tab specs in ARCHITECTURE.md ARE the TUI specs. When building TUI, cross-reference Desktop spec. Different tab names, identical behavior. Never treat them as separate products."
|
|
1444
|
+
},
|
|
1445
|
+
// --- Orchestration golden path ---
|
|
1446
|
+
{
|
|
1447
|
+
title: "Task lifecycle \u2014 the golden path every agent follows",
|
|
1448
|
+
domain: "workflow",
|
|
1449
|
+
priority: "p0",
|
|
1450
|
+
content: "create_task is dispatch + delivery. Task lifecycle: open \u2192 in_progress (you start) \u2192 done (update_task when finished) \u2192 needs_review (reviewer nudged) \u2192 closed (COO only via close_task). DB is the reliable delivery \u2014 intercom is just a speedup nudge. If you finish a task, self-chain: check for next task immediately (step 7). Never wait for a nudge. Never say 'standing by.'"
|
|
1451
|
+
},
|
|
1452
|
+
{
|
|
1453
|
+
title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
|
|
1454
|
+
domain: "architecture",
|
|
1455
|
+
priority: "p0",
|
|
1456
|
+
content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
|
|
1438
1457
|
}
|
|
1439
1458
|
];
|
|
1440
1459
|
PLATFORM_PROCEDURE_TITLES = new Set(
|
|
@@ -2038,12 +2057,12 @@ function isMainModule(importMetaUrl) {
|
|
|
2038
2057
|
}
|
|
2039
2058
|
|
|
2040
2059
|
// src/bin/backfill-vectors.ts
|
|
2041
|
-
import { existsSync as
|
|
2060
|
+
import { existsSync as existsSync6, unlinkSync as unlinkSync3 } from "fs";
|
|
2042
2061
|
import path6 from "path";
|
|
2043
2062
|
|
|
2044
2063
|
// src/lib/worker-gate.ts
|
|
2045
2064
|
init_config();
|
|
2046
|
-
import { readdirSync as readdirSync2, writeFileSync, unlinkSync as unlinkSync2, mkdirSync as mkdirSync2 } from "fs";
|
|
2065
|
+
import { readdirSync as readdirSync2, writeFileSync, unlinkSync as unlinkSync2, mkdirSync as mkdirSync2, existsSync as existsSync5 } from "fs";
|
|
2047
2066
|
import path5 from "path";
|
|
2048
2067
|
var WORKER_PID_DIR = path5.join(EXE_AI_DIR, "worker-pids");
|
|
2049
2068
|
function registerWorkerPid(pid) {
|
|
@@ -2059,19 +2078,59 @@ function cleanupWorkerPid() {
|
|
|
2059
2078
|
} catch {
|
|
2060
2079
|
}
|
|
2061
2080
|
}
|
|
2081
|
+
var BACKFILL_LOCK = path5.join(WORKER_PID_DIR, "backfill.lock");
|
|
2082
|
+
function tryAcquireBackfillLock() {
|
|
2083
|
+
try {
|
|
2084
|
+
mkdirSync2(WORKER_PID_DIR, { recursive: true });
|
|
2085
|
+
if (existsSync5(BACKFILL_LOCK)) {
|
|
2086
|
+
try {
|
|
2087
|
+
const pid = parseInt(
|
|
2088
|
+
__require("fs").readFileSync(BACKFILL_LOCK, "utf8").trim(),
|
|
2089
|
+
10
|
|
2090
|
+
);
|
|
2091
|
+
if (!isNaN(pid) && pid > 0) {
|
|
2092
|
+
try {
|
|
2093
|
+
process.kill(pid, 0);
|
|
2094
|
+
return false;
|
|
2095
|
+
} catch {
|
|
2096
|
+
}
|
|
2097
|
+
}
|
|
2098
|
+
} catch {
|
|
2099
|
+
}
|
|
2100
|
+
}
|
|
2101
|
+
writeFileSync(BACKFILL_LOCK, String(process.pid));
|
|
2102
|
+
return true;
|
|
2103
|
+
} catch {
|
|
2104
|
+
return true;
|
|
2105
|
+
}
|
|
2106
|
+
}
|
|
2107
|
+
function releaseBackfillLock() {
|
|
2108
|
+
try {
|
|
2109
|
+
unlinkSync2(BACKFILL_LOCK);
|
|
2110
|
+
} catch {
|
|
2111
|
+
}
|
|
2112
|
+
}
|
|
2062
2113
|
|
|
2063
2114
|
// src/bin/backfill-vectors.ts
|
|
2064
2115
|
var BATCH_SIZE = 100;
|
|
2065
2116
|
var BACKFILL_FLAG = path6.join(EXE_AI_DIR, "session-cache", "needs-backfill");
|
|
2066
2117
|
async function backfillVectors() {
|
|
2118
|
+
if (!tryAcquireBackfillLock()) {
|
|
2119
|
+
process.stderr.write("[backfill] Another backfill is already running \u2014 exiting\n");
|
|
2120
|
+
return { processed: 0, failed: 0, remaining: -1 };
|
|
2121
|
+
}
|
|
2067
2122
|
registerWorkerPid(process.pid);
|
|
2068
|
-
|
|
2069
|
-
process.on("SIGTERM", () => {
|
|
2123
|
+
const cleanup = () => {
|
|
2070
2124
|
cleanupWorkerPid();
|
|
2125
|
+
releaseBackfillLock();
|
|
2126
|
+
};
|
|
2127
|
+
process.on("exit", cleanup);
|
|
2128
|
+
process.on("SIGTERM", () => {
|
|
2129
|
+
cleanup();
|
|
2071
2130
|
process.exit(0);
|
|
2072
2131
|
});
|
|
2073
2132
|
process.on("SIGINT", () => {
|
|
2074
|
-
|
|
2133
|
+
cleanup();
|
|
2075
2134
|
process.exit(0);
|
|
2076
2135
|
});
|
|
2077
2136
|
await initStore();
|
|
@@ -2132,7 +2191,7 @@ async function backfillVectors() {
|
|
|
2132
2191
|
return { processed: totalProcessed, failed: totalFailed, remaining: remainingCount };
|
|
2133
2192
|
}
|
|
2134
2193
|
function isBackfillNeeded() {
|
|
2135
|
-
return
|
|
2194
|
+
return existsSync6(BACKFILL_FLAG);
|
|
2136
2195
|
}
|
|
2137
2196
|
if (isMainModule(import.meta.url)) {
|
|
2138
2197
|
backfillVectors().then((result) => {
|