@askexenow/exe-os 0.9.293 → 0.9.295
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/deploy/stack-manifests/v0.9.json +1 -1
- package/dist/bin/exe-boot.js +21 -1
- package/dist/bin/exe-doctor.js +2 -2
- package/dist/bin/exe-forget.js +1 -1
- package/dist/bin/exe-search.js +1 -1
- package/dist/branch-hygiene-55TKIWAZ.js +136 -0
- package/dist/catchup-brief-DTETFZYW.js +175 -0
- package/dist/chunk-5ALAYSQY.js +1186 -0
- package/dist/chunk-A3OPW276.js +567 -0
- package/dist/chunk-CZYJEUNA.js +1352 -0
- package/dist/chunk-GM6W3IXQ.js +470 -0
- package/dist/chunk-MCTWLMZL.js +14543 -0
- package/dist/chunk-MYOBQJFL.js +58 -0
- package/dist/hooks/error-recall.js +1 -1
- package/dist/hooks/manifest.json +4 -4
- package/dist/hooks/prompt-submit.js +1 -1
- package/dist/hooks/session-start.js +1 -1
- package/dist/lib/exe-daemon.js +62 -0
- package/dist/lib/hybrid-search.js +1 -1
- package/dist/lib/status-brief.js +1 -1
- package/dist/mcp/register-tools.js +7 -7
- package/dist/mcp/server.js +7 -7
- package/dist/mcp/tools/create-task.js +1 -1
- package/dist/reranker-BSGXTCDC.js +19 -0
- package/package.json +1 -1
- package/release-notes.json +165 -165
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MODELS_DIR
|
|
3
|
+
} from "./chunk-R36FAN53.js";
|
|
4
|
+
|
|
5
|
+
// src/lib/reranker.ts
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { existsSync } from "fs";
|
|
8
|
+
var RERANKER_MODEL_FILE = process.env.EXE_RERANK_MODEL_FILE ?? "exe-reranker-v1-q4_k_m.gguf";
|
|
9
|
+
function isRerankerAvailable() {
|
|
10
|
+
return existsSync(path.join(MODELS_DIR, RERANKER_MODEL_FILE));
|
|
11
|
+
}
|
|
12
|
+
function getRerankerModelPath() {
|
|
13
|
+
return path.join(MODELS_DIR, RERANKER_MODEL_FILE);
|
|
14
|
+
}
|
|
15
|
+
async function disposeReranker() {
|
|
16
|
+
}
|
|
17
|
+
async function rerankWithScores(query, texts, topK) {
|
|
18
|
+
if (texts.length === 0) return [];
|
|
19
|
+
const { rerankViaWorker } = await import("./lib/exe-daemon.js");
|
|
20
|
+
const scored = await rerankViaWorker(query, texts, topK);
|
|
21
|
+
return scored.map((s) => ({
|
|
22
|
+
text: texts[s.index] ?? "",
|
|
23
|
+
score: s.score,
|
|
24
|
+
index: s.index
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
async function rerank(query, candidates, topK = 5) {
|
|
28
|
+
if (candidates.length === 0) return [];
|
|
29
|
+
if (candidates.length <= topK) return candidates;
|
|
30
|
+
const scored = await rerankWithScores(
|
|
31
|
+
query,
|
|
32
|
+
candidates.map((c) => c.raw_text),
|
|
33
|
+
topK
|
|
34
|
+
);
|
|
35
|
+
return scored.map((s) => candidates[s.index]);
|
|
36
|
+
}
|
|
37
|
+
async function rerankWithContext(query, candidates, topK) {
|
|
38
|
+
if (candidates.length === 0) return [];
|
|
39
|
+
const formattedTexts = candidates.map(
|
|
40
|
+
(c) => c.context ? `[${c.context}] ${c.text.slice(0, 460)}` : c.text.slice(0, 512)
|
|
41
|
+
);
|
|
42
|
+
const { rerankViaWorker } = await import("./lib/exe-daemon.js");
|
|
43
|
+
const scored = await rerankViaWorker(query, formattedTexts, topK);
|
|
44
|
+
return scored.map((s) => ({
|
|
45
|
+
text: candidates[s.index]?.text ?? "",
|
|
46
|
+
score: s.score,
|
|
47
|
+
index: s.index
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
isRerankerAvailable,
|
|
53
|
+
getRerankerModelPath,
|
|
54
|
+
disposeReranker,
|
|
55
|
+
rerankWithScores,
|
|
56
|
+
rerank,
|
|
57
|
+
rerankWithContext
|
|
58
|
+
};
|
package/dist/hooks/manifest.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-06-
|
|
3
|
+
"generatedAt": "2026-06-18T12:21:11.072Z",
|
|
4
4
|
"hashes": {
|
|
5
5
|
"bug-report-worker.js": "07fb8b17e2cabd989cdcd6c0c1253239986915d84a0ebcc18e9ea2ed77232768",
|
|
6
6
|
"codex-stop-task-finalizer.js": "776b9b0940f84fbe6988ce18212c530f2efa4466a5cd16f3c26dcc508d131504",
|
|
7
7
|
"commit-complete.js": "13b86aae88b6c9b3a2af69a4a27614d9985a6618cf4341b88125efcf8a6c2c77",
|
|
8
|
-
"error-recall.js": "
|
|
8
|
+
"error-recall.js": "1f0bd288178070bfd3032f9ad85e93b8b22d022f15de063a2155c071b5a2d2e6",
|
|
9
9
|
"exe-heartbeat-hook.js": "6320f35e804a95fd3e8c78589d9ebe15798f77f47e13aa0584716df587f8993b",
|
|
10
10
|
"ingest-worker.js": "b2f04dec1264263a86bf135d05247775ef610533508905448e9061986ba7b6a8",
|
|
11
11
|
"ingest.js": "640502dc1504ed5927d0f2402b41bff71ed5c5723bd90e100647233f45fa831f",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"post-tool-combined.js": "75e58506808c879ed27d2c00eb978057802f3ed476492761ff709d78a649af89",
|
|
16
16
|
"pre-compact.js": "13be3eb99049dadd69b5c1273e9601e823dbfba9bf765ba4e4e7f9d8d9ba82af",
|
|
17
17
|
"pre-tool-use.js": "7c6c46d04a8cb5efe3b534cfff3125134b77e285c70829b53b144458920a881a",
|
|
18
|
-
"prompt-submit.js": "
|
|
18
|
+
"prompt-submit.js": "43fa601bf34fb341a01d32d64d2e5210c684fdc089ea11e4e1a3b8151a614d4c",
|
|
19
19
|
"session-end.js": "01c82715b8b8788000a1f9c53e76343f43a201d253ec6cc3f7c4f95817585c1f",
|
|
20
|
-
"session-start.js": "
|
|
20
|
+
"session-start.js": "d04ec6883e8a82dc5cb547ef94b673c12101464ef082a184d3c26654bb190ee6",
|
|
21
21
|
"stop.js": "b7f951cba0952aeda817a903eef679753ee2681c6d7fead919af12e40a95ae0a",
|
|
22
22
|
"subagent-stop.js": "16b7e250b2080c3e6d794fb03aad77ae911203a09d78cbef3d69dcb8b23ef1d0",
|
|
23
23
|
"summary-worker.js": "47531021bb645046272eaba1e6c00b3b87fb7d5be6ee1aa516a87d9a0a2c89e7"
|
|
@@ -180,7 +180,7 @@ You are **${ag.agentId}**. The daemon was degraded at boot \u2014 memory context
|
|
|
180
180
|
query = `last actions on ${projectName}`;
|
|
181
181
|
header = "## Resuming Session\nHere's where you left off:";
|
|
182
182
|
try {
|
|
183
|
-
const { buildCatchupBrief } = await import("../catchup-brief-
|
|
183
|
+
const { buildCatchupBrief } = await import("../catchup-brief-DTETFZYW.js");
|
|
184
184
|
const brief = await buildCatchupBrief(
|
|
185
185
|
agentId,
|
|
186
186
|
projectName,
|
package/dist/lib/exe-daemon.js
CHANGED
|
@@ -3766,6 +3766,67 @@ function startSkillRefinement() {
|
|
|
3766
3766
|
process.stderr.write(`[exed] Skill refinement timer started (every ${SKILL_SWEEP_INTERVAL_MS / 36e5}h)
|
|
3767
3767
|
`);
|
|
3768
3768
|
}
|
|
3769
|
+
var STALE_BRANCH_SWEEP_INTERVAL_MS = 60 * 60 * 1e3;
|
|
3770
|
+
var STALE_BRANCH_HOURS = 48;
|
|
3771
|
+
var _staleBranchAlertedToday = /* @__PURE__ */ new Set();
|
|
3772
|
+
function startStaleBranchSweep() {
|
|
3773
|
+
const tick = async () => {
|
|
3774
|
+
fired("stale_branch_sweep");
|
|
3775
|
+
try {
|
|
3776
|
+
const { discoverRepoPaths } = await import("../worktree-sweep-M64OW2MU.js");
|
|
3777
|
+
const { scanUnmergedBranches } = await import("../branch-hygiene-55TKIWAZ.js");
|
|
3778
|
+
const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
3779
|
+
for (const k of _staleBranchAlertedToday) {
|
|
3780
|
+
if (!k.endsWith(today)) _staleBranchAlertedToday.delete(k);
|
|
3781
|
+
}
|
|
3782
|
+
let repos = [];
|
|
3783
|
+
try {
|
|
3784
|
+
repos = discoverRepoPaths();
|
|
3785
|
+
} catch {
|
|
3786
|
+
repos = [];
|
|
3787
|
+
}
|
|
3788
|
+
for (const repo of repos) {
|
|
3789
|
+
let scan;
|
|
3790
|
+
try {
|
|
3791
|
+
scan = scanUnmergedBranches(repo, { staleHours: STALE_BRANCH_HOURS });
|
|
3792
|
+
} catch {
|
|
3793
|
+
continue;
|
|
3794
|
+
}
|
|
3795
|
+
if (scan.staleCount <= 0) continue;
|
|
3796
|
+
const repoName = repo.split("/").pop() || repo;
|
|
3797
|
+
const guardKey = `${repoName}:${today}`;
|
|
3798
|
+
if (_staleBranchAlertedToday.has(guardKey)) continue;
|
|
3799
|
+
_staleBranchAlertedToday.add(guardKey);
|
|
3800
|
+
if (!_storeInitialized) continue;
|
|
3801
|
+
const stale = scan.branches.filter((b) => b.ageHours >= STALE_BRANCH_HOURS).slice(0, 5).map((b) => `${b.name} (+${b.ahead} commits, ${(b.ageHours / 24).toFixed(1)}d)`).join("; ");
|
|
3802
|
+
try {
|
|
3803
|
+
const { writeNotification } = await import("../notifications-B2YCZD3T.js");
|
|
3804
|
+
await writeNotification({
|
|
3805
|
+
agentId: "exe",
|
|
3806
|
+
agentRole: "system",
|
|
3807
|
+
event: "error_spike",
|
|
3808
|
+
project: repoName,
|
|
3809
|
+
summary: `${scan.staleCount} unmerged remote branch(es) in ${repoName} are >${STALE_BRANCH_HOURS}h old with unique work \u2014 check before starting new work to avoid redoing it. Oldest: ${stale}. Review with: exe-os git-sweep --dry-run`,
|
|
3810
|
+
sessionScope: null
|
|
3811
|
+
});
|
|
3812
|
+
acted("stale_branch_sweep");
|
|
3813
|
+
process.stderr.write(
|
|
3814
|
+
`[exed] Stale-branch alert: ${scan.staleCount} branch(es) >${STALE_BRANCH_HOURS}h in ${repoName}
|
|
3815
|
+
`
|
|
3816
|
+
);
|
|
3817
|
+
} catch {
|
|
3818
|
+
}
|
|
3819
|
+
}
|
|
3820
|
+
} catch (err) {
|
|
3821
|
+
process.stderr.write(`[exed] Stale-branch sweep error: ${err instanceof Error ? err.message : String(err)}
|
|
3822
|
+
`);
|
|
3823
|
+
}
|
|
3824
|
+
};
|
|
3825
|
+
const timer = setInterval(() => void tick(), STALE_BRANCH_SWEEP_INTERVAL_MS);
|
|
3826
|
+
timer.unref();
|
|
3827
|
+
process.stderr.write(`[exed] Stale-branch sweep timer started (every ${STALE_BRANCH_SWEEP_INTERVAL_MS / 36e5}h, >${STALE_BRANCH_HOURS}h threshold)
|
|
3828
|
+
`);
|
|
3829
|
+
}
|
|
3769
3830
|
function startGraphExtraction() {
|
|
3770
3831
|
const tick = async () => {
|
|
3771
3832
|
fired("graph_extraction");
|
|
@@ -5688,6 +5749,7 @@ function startLocalFirstTimers() {
|
|
|
5688
5749
|
setTimeout(startAutoUpdateCheck, 3e5);
|
|
5689
5750
|
setTimeout(() => void traceDaemonTimer("background_job_guardrails_start", () => startBackgroundJobGuardrails()), 6e4);
|
|
5690
5751
|
setTimeout(startWorktreeReaper, 12e4);
|
|
5752
|
+
setTimeout(startStaleBranchSweep, 2e5);
|
|
5691
5753
|
setTimeout(startZombieAgentReaper, 25e3);
|
|
5692
5754
|
setTimeout(() => void traceDaemonTimer("intercom_dedup_cleanup", async () => {
|
|
5693
5755
|
fired("intercom_dedup_cleanup");
|
package/dist/lib/status-brief.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registerAllTools
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-MCTWLMZL.js";
|
|
4
4
|
import "../chunk-2JE7LJCZ.js";
|
|
5
|
-
import "../chunk-2EMOVUJR.js";
|
|
6
|
-
import "../chunk-HJBKBEC4.js";
|
|
7
5
|
import "../chunk-557C2IGL.js";
|
|
6
|
+
import "../chunk-2EMOVUJR.js";
|
|
7
|
+
import "../chunk-MYOBQJFL.js";
|
|
8
8
|
import "../chunk-IXZ7OTB3.js";
|
|
9
9
|
import "../chunk-E6ORBQHP.js";
|
|
10
10
|
import "../chunk-DZJPVLVR.js";
|
|
@@ -26,7 +26,7 @@ import "../chunk-UAQZT24C.js";
|
|
|
26
26
|
import "../chunk-2LHQ5MGP.js";
|
|
27
27
|
import "../chunk-B4PYJHIV.js";
|
|
28
28
|
import "../chunk-D2WYUJHM.js";
|
|
29
|
-
import "../chunk-
|
|
29
|
+
import "../chunk-A3OPW276.js";
|
|
30
30
|
import "../chunk-HMP5VT6A.js";
|
|
31
31
|
import "../chunk-VRZS4KWF.js";
|
|
32
32
|
import "../chunk-6QPDD4BI.js";
|
|
@@ -35,9 +35,9 @@ import "../chunk-VRFO3H3R.js";
|
|
|
35
35
|
import "../chunk-V6R43RSE.js";
|
|
36
36
|
import "../chunk-3OEVDGIY.js";
|
|
37
37
|
import "../chunk-CSCRGRZT.js";
|
|
38
|
-
import "../chunk-
|
|
39
|
-
import "../chunk-KQ4Z2G24.js";
|
|
38
|
+
import "../chunk-5ALAYSQY.js";
|
|
40
39
|
import "../chunk-BNJ3YCPD.js";
|
|
40
|
+
import "../chunk-KQ4Z2G24.js";
|
|
41
41
|
import "../chunk-5ZHIAIDE.js";
|
|
42
42
|
import "../chunk-SSC7EKY2.js";
|
|
43
43
|
import "../chunk-IUIVLCAO.js";
|
|
@@ -64,7 +64,7 @@ import "../chunk-QAK47LG3.js";
|
|
|
64
64
|
import "../chunk-HN2PWLQI.js";
|
|
65
65
|
import "../chunk-4HDMB2M5.js";
|
|
66
66
|
import "../chunk-QOZQ2MYZ.js";
|
|
67
|
-
import "../chunk-
|
|
67
|
+
import "../chunk-CZYJEUNA.js";
|
|
68
68
|
import "../chunk-AB4PAQYK.js";
|
|
69
69
|
import "../chunk-EM5WXY6H.js";
|
|
70
70
|
import "../chunk-CHCA3ZM2.js";
|
package/dist/mcp/server.js
CHANGED
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "../chunk-V4TZI6EO.js";
|
|
4
4
|
import {
|
|
5
5
|
registerAllTools
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-MCTWLMZL.js";
|
|
7
7
|
import "../chunk-2JE7LJCZ.js";
|
|
8
|
-
import "../chunk-2EMOVUJR.js";
|
|
9
|
-
import "../chunk-HJBKBEC4.js";
|
|
10
8
|
import "../chunk-557C2IGL.js";
|
|
9
|
+
import "../chunk-2EMOVUJR.js";
|
|
10
|
+
import "../chunk-MYOBQJFL.js";
|
|
11
11
|
import "../chunk-IXZ7OTB3.js";
|
|
12
12
|
import "../chunk-E6ORBQHP.js";
|
|
13
13
|
import "../chunk-DZJPVLVR.js";
|
|
@@ -34,7 +34,7 @@ import "../chunk-UAQZT24C.js";
|
|
|
34
34
|
import "../chunk-2LHQ5MGP.js";
|
|
35
35
|
import "../chunk-B4PYJHIV.js";
|
|
36
36
|
import "../chunk-D2WYUJHM.js";
|
|
37
|
-
import "../chunk-
|
|
37
|
+
import "../chunk-A3OPW276.js";
|
|
38
38
|
import "../chunk-HMP5VT6A.js";
|
|
39
39
|
import "../chunk-VRZS4KWF.js";
|
|
40
40
|
import "../chunk-6QPDD4BI.js";
|
|
@@ -43,9 +43,9 @@ import "../chunk-VRFO3H3R.js";
|
|
|
43
43
|
import "../chunk-V6R43RSE.js";
|
|
44
44
|
import "../chunk-3OEVDGIY.js";
|
|
45
45
|
import "../chunk-CSCRGRZT.js";
|
|
46
|
-
import "../chunk-
|
|
47
|
-
import "../chunk-KQ4Z2G24.js";
|
|
46
|
+
import "../chunk-5ALAYSQY.js";
|
|
48
47
|
import "../chunk-BNJ3YCPD.js";
|
|
48
|
+
import "../chunk-KQ4Z2G24.js";
|
|
49
49
|
import "../chunk-5ZHIAIDE.js";
|
|
50
50
|
import "../chunk-SSC7EKY2.js";
|
|
51
51
|
import "../chunk-IUIVLCAO.js";
|
|
@@ -74,7 +74,7 @@ import "../chunk-QAK47LG3.js";
|
|
|
74
74
|
import "../chunk-HN2PWLQI.js";
|
|
75
75
|
import "../chunk-4HDMB2M5.js";
|
|
76
76
|
import "../chunk-QOZQ2MYZ.js";
|
|
77
|
-
import "../chunk-
|
|
77
|
+
import "../chunk-CZYJEUNA.js";
|
|
78
78
|
import "../chunk-AB4PAQYK.js";
|
|
79
79
|
import {
|
|
80
80
|
disposeStore,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
disposeReranker,
|
|
3
|
+
getRerankerModelPath,
|
|
4
|
+
isRerankerAvailable,
|
|
5
|
+
rerank,
|
|
6
|
+
rerankWithContext,
|
|
7
|
+
rerankWithScores
|
|
8
|
+
} from "./chunk-MYOBQJFL.js";
|
|
9
|
+
import "./chunk-R36FAN53.js";
|
|
10
|
+
import "./chunk-LYH5HE24.js";
|
|
11
|
+
import "./chunk-MLKGABMK.js";
|
|
12
|
+
export {
|
|
13
|
+
disposeReranker,
|
|
14
|
+
getRerankerModelPath,
|
|
15
|
+
isRerankerAvailable,
|
|
16
|
+
rerank,
|
|
17
|
+
rerankWithContext,
|
|
18
|
+
rerankWithScores
|
|
19
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.295",
|
|
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",
|