@askexenow/exe-os 0.9.36 → 0.9.37
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 +3 -0
- package/dist/bin/backfill-responses.js +3 -0
- package/dist/bin/cleanup-stale-review-tasks.js +3 -0
- package/dist/bin/cli.js +3 -0
- package/dist/bin/exe-assign.js +3 -0
- package/dist/bin/exe-dispatch.js +3 -0
- package/dist/bin/exe-export-behaviors.js +3 -0
- package/dist/bin/exe-forget.js +3 -0
- package/dist/bin/exe-gateway.js +3 -0
- package/dist/bin/exe-heartbeat.js +3 -0
- package/dist/bin/exe-kill.js +3 -0
- package/dist/bin/exe-pending-messages.js +3 -0
- package/dist/bin/exe-pending-notifications.js +3 -0
- package/dist/bin/exe-pending-reviews.js +3 -0
- package/dist/bin/exe-review.js +3 -0
- package/dist/bin/exe-search.js +9 -8
- package/dist/bin/exe-session-cleanup.js +7 -1
- package/dist/bin/exe-status.js +3 -0
- package/dist/bin/exe-team.js +3 -0
- package/dist/bin/git-sweep.js +3 -0
- package/dist/bin/graph-export.js +3 -0
- package/dist/bin/intercom-check.js +3 -0
- package/dist/bin/scan-tasks.js +3 -0
- package/dist/gateway/index.js +3 -0
- package/dist/hooks/bug-report-worker.js +3 -0
- package/dist/hooks/codex-stop-task-finalizer.js +3 -0
- package/dist/hooks/commit-complete.js +3 -0
- package/dist/hooks/error-recall.js +9 -8
- package/dist/hooks/ingest-worker.js +9 -2
- package/dist/hooks/ingest.js +3 -0
- package/dist/hooks/instructions-loaded.js +3 -0
- package/dist/hooks/notification.js +3 -0
- package/dist/hooks/post-compact.js +3 -0
- package/dist/hooks/post-tool-combined.js +18 -10
- package/dist/hooks/pre-compact.js +5 -1
- package/dist/hooks/pre-tool-use.js +3 -0
- package/dist/hooks/prompt-submit.js +9 -8
- package/dist/hooks/session-end.js +131 -3
- package/dist/hooks/session-start.js +9 -8
- package/dist/hooks/stop.js +7 -2
- package/dist/hooks/subagent-stop.js +3 -0
- package/dist/hooks/summary-worker.js +120 -18
- package/dist/index.js +25 -14
- package/dist/lib/exe-daemon.js +9 -8
- package/dist/lib/hybrid-search.js +9 -8
- package/dist/lib/store.js +3 -0
- package/dist/mcp/server.js +9 -8
- package/dist/runtime/index.js +25 -14
- package/dist/tui/App.js +3 -0
- package/package.json +1 -1
- package/src/commands/exe/save.md +9 -5
|
@@ -3042,6 +3042,9 @@ function classifyMemoryType(input) {
|
|
|
3042
3042
|
if (tool.includes("commit") || text.includes("adr-") || text.includes("architectural decision")) return "adr";
|
|
3043
3043
|
if (tool.includes("store_behavior") || tool.includes("behavior")) return "behavior";
|
|
3044
3044
|
if (tool.includes("global_procedure") || text.includes("organization-wide procedures")) return "procedure";
|
|
3045
|
+
if (tool.includes("checkpoint") || text.startsWith("context checkpoint")) return "checkpoint";
|
|
3046
|
+
if (tool.includes("sessionsummary") || tool.includes("session-summary")) return "summary";
|
|
3047
|
+
if (tool.includes("sessionend") || text.startsWith("session ended")) return "summary";
|
|
3045
3048
|
if (tool.includes("send_whatsapp") || tool.includes("conversation")) return "conversation";
|
|
3046
3049
|
if (tool === "store_memory" || tool === "manual") return "observation";
|
|
3047
3050
|
return "raw";
|
|
@@ -5653,7 +5656,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
5653
5656
|
}
|
|
5654
5657
|
if (lists.length === 0) return [];
|
|
5655
5658
|
if (lists.length === 1 && !effectiveIsBroad) return lists[0].slice(0, limit);
|
|
5656
|
-
const rrfLimit = effectiveIsBroad ? Math.max(limit * 5,
|
|
5659
|
+
const rrfLimit = effectiveIsBroad ? Math.max(limit * 5, broadFetchTopK) : limit;
|
|
5657
5660
|
let merged = lists.length === 1 ? lists[0].slice(0, rrfLimit) : rrfMergeMulti(lists, rrfLimit, RRF_K, weights);
|
|
5658
5661
|
let graphContextMap = /* @__PURE__ */ new Map();
|
|
5659
5662
|
let entityBoostRan = false;
|
|
@@ -5674,6 +5677,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
5674
5677
|
returnTopK: 5
|
|
5675
5678
|
};
|
|
5676
5679
|
let rerankedAndBlended = null;
|
|
5680
|
+
const rerankReturnLimit = Math.max(limit, auto.returnTopK ?? 5);
|
|
5677
5681
|
if (effectiveIsBroad && auto.enabled && rerankerAvailable) {
|
|
5678
5682
|
const cardinality2 = await estimateCardinality(agentId, effectiveOptions);
|
|
5679
5683
|
if (cardinality2 > auto.broadQueryMinCardinality) {
|
|
@@ -5685,16 +5689,16 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
5685
5689
|
text: m.raw_text,
|
|
5686
5690
|
context: graphContextMap.get(m.id)
|
|
5687
5691
|
}));
|
|
5688
|
-
const scored = await rerankWithContext2(effectiveQuery, candidates,
|
|
5692
|
+
const scored = await rerankWithContext2(effectiveQuery, candidates, rerankReturnLimit);
|
|
5689
5693
|
rerankedRecords = scored.map((s) => merged[s.index]);
|
|
5690
5694
|
} else {
|
|
5691
5695
|
const { rerank: rerank2 } = await Promise.resolve().then(() => (init_reranker(), reranker_exports));
|
|
5692
|
-
rerankedRecords = await rerank2(effectiveQuery, merged,
|
|
5696
|
+
rerankedRecords = await rerank2(effectiveQuery, merged, rerankReturnLimit);
|
|
5693
5697
|
}
|
|
5694
5698
|
if (rerankedRecords.length > 0) {
|
|
5695
5699
|
rerankedAndBlended = rrfMergeMulti(
|
|
5696
5700
|
[rerankedRecords],
|
|
5697
|
-
|
|
5701
|
+
rerankReturnLimit,
|
|
5698
5702
|
RRF_K
|
|
5699
5703
|
);
|
|
5700
5704
|
}
|
|
@@ -5702,10 +5706,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
5702
5706
|
}
|
|
5703
5707
|
}
|
|
5704
5708
|
}
|
|
5705
|
-
const finalResults = (rerankedAndBlended ?? merged).slice(
|
|
5706
|
-
0,
|
|
5707
|
-
rerankedAndBlended ? auto.returnTopK : limit
|
|
5708
|
-
);
|
|
5709
|
+
const finalResults = (rerankedAndBlended ?? merged).slice(0, limit);
|
|
5709
5710
|
if (options?.includeSource && finalResults.length > 0) {
|
|
5710
5711
|
await attachDocumentMetadata(finalResults);
|
|
5711
5712
|
}
|
package/dist/lib/store.js
CHANGED
|
@@ -3426,6 +3426,9 @@ function classifyMemoryType(input) {
|
|
|
3426
3426
|
if (tool.includes("commit") || text.includes("adr-") || text.includes("architectural decision")) return "adr";
|
|
3427
3427
|
if (tool.includes("store_behavior") || tool.includes("behavior")) return "behavior";
|
|
3428
3428
|
if (tool.includes("global_procedure") || text.includes("organization-wide procedures")) return "procedure";
|
|
3429
|
+
if (tool.includes("checkpoint") || text.startsWith("context checkpoint")) return "checkpoint";
|
|
3430
|
+
if (tool.includes("sessionsummary") || tool.includes("session-summary")) return "summary";
|
|
3431
|
+
if (tool.includes("sessionend") || text.startsWith("session ended")) return "summary";
|
|
3429
3432
|
if (tool.includes("send_whatsapp") || tool.includes("conversation")) return "conversation";
|
|
3430
3433
|
if (tool === "store_memory" || tool === "manual") return "observation";
|
|
3431
3434
|
return "raw";
|
package/dist/mcp/server.js
CHANGED
|
@@ -3601,6 +3601,9 @@ function classifyMemoryType(input) {
|
|
|
3601
3601
|
if (tool.includes("commit") || text.includes("adr-") || text.includes("architectural decision")) return "adr";
|
|
3602
3602
|
if (tool.includes("store_behavior") || tool.includes("behavior")) return "behavior";
|
|
3603
3603
|
if (tool.includes("global_procedure") || text.includes("organization-wide procedures")) return "procedure";
|
|
3604
|
+
if (tool.includes("checkpoint") || text.startsWith("context checkpoint")) return "checkpoint";
|
|
3605
|
+
if (tool.includes("sessionsummary") || tool.includes("session-summary")) return "summary";
|
|
3606
|
+
if (tool.includes("sessionend") || text.startsWith("session ended")) return "summary";
|
|
3604
3607
|
if (tool.includes("send_whatsapp") || tool.includes("conversation")) return "conversation";
|
|
3605
3608
|
if (tool === "store_memory" || tool === "manual") return "observation";
|
|
3606
3609
|
return "raw";
|
|
@@ -6150,7 +6153,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
6150
6153
|
}
|
|
6151
6154
|
if (lists.length === 0) return [];
|
|
6152
6155
|
if (lists.length === 1 && !effectiveIsBroad) return lists[0].slice(0, limit);
|
|
6153
|
-
const rrfLimit = effectiveIsBroad ? Math.max(limit * 5,
|
|
6156
|
+
const rrfLimit = effectiveIsBroad ? Math.max(limit * 5, broadFetchTopK) : limit;
|
|
6154
6157
|
let merged = lists.length === 1 ? lists[0].slice(0, rrfLimit) : rrfMergeMulti(lists, rrfLimit, RRF_K, weights);
|
|
6155
6158
|
let graphContextMap = /* @__PURE__ */ new Map();
|
|
6156
6159
|
let entityBoostRan = false;
|
|
@@ -6171,6 +6174,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
6171
6174
|
returnTopK: 5
|
|
6172
6175
|
};
|
|
6173
6176
|
let rerankedAndBlended = null;
|
|
6177
|
+
const rerankReturnLimit = Math.max(limit, auto.returnTopK ?? 5);
|
|
6174
6178
|
if (effectiveIsBroad && auto.enabled && rerankerAvailable) {
|
|
6175
6179
|
const cardinality2 = await estimateCardinality(agentId, effectiveOptions);
|
|
6176
6180
|
if (cardinality2 > auto.broadQueryMinCardinality) {
|
|
@@ -6182,16 +6186,16 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
6182
6186
|
text: m.raw_text,
|
|
6183
6187
|
context: graphContextMap.get(m.id)
|
|
6184
6188
|
}));
|
|
6185
|
-
const scored = await rerankWithContext2(effectiveQuery, candidates,
|
|
6189
|
+
const scored = await rerankWithContext2(effectiveQuery, candidates, rerankReturnLimit);
|
|
6186
6190
|
rerankedRecords = scored.map((s) => merged[s.index]);
|
|
6187
6191
|
} else {
|
|
6188
6192
|
const { rerank: rerank2 } = await Promise.resolve().then(() => (init_reranker(), reranker_exports));
|
|
6189
|
-
rerankedRecords = await rerank2(effectiveQuery, merged,
|
|
6193
|
+
rerankedRecords = await rerank2(effectiveQuery, merged, rerankReturnLimit);
|
|
6190
6194
|
}
|
|
6191
6195
|
if (rerankedRecords.length > 0) {
|
|
6192
6196
|
rerankedAndBlended = rrfMergeMulti(
|
|
6193
6197
|
[rerankedRecords],
|
|
6194
|
-
|
|
6198
|
+
rerankReturnLimit,
|
|
6195
6199
|
RRF_K
|
|
6196
6200
|
);
|
|
6197
6201
|
}
|
|
@@ -6199,10 +6203,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
6199
6203
|
}
|
|
6200
6204
|
}
|
|
6201
6205
|
}
|
|
6202
|
-
const finalResults = (rerankedAndBlended ?? merged).slice(
|
|
6203
|
-
0,
|
|
6204
|
-
rerankedAndBlended ? auto.returnTopK : limit
|
|
6205
|
-
);
|
|
6206
|
+
const finalResults = (rerankedAndBlended ?? merged).slice(0, limit);
|
|
6206
6207
|
if (options?.includeSource && finalResults.length > 0) {
|
|
6207
6208
|
await attachDocumentMetadata(finalResults);
|
|
6208
6209
|
}
|
package/dist/runtime/index.js
CHANGED
|
@@ -6788,6 +6788,9 @@ function classifyMemoryType(input) {
|
|
|
6788
6788
|
if (tool.includes("commit") || text.includes("adr-") || text.includes("architectural decision")) return "adr";
|
|
6789
6789
|
if (tool.includes("store_behavior") || tool.includes("behavior")) return "behavior";
|
|
6790
6790
|
if (tool.includes("global_procedure") || text.includes("organization-wide procedures")) return "procedure";
|
|
6791
|
+
if (tool.includes("checkpoint") || text.startsWith("context checkpoint")) return "checkpoint";
|
|
6792
|
+
if (tool.includes("sessionsummary") || tool.includes("session-summary")) return "summary";
|
|
6793
|
+
if (tool.includes("sessionend") || text.startsWith("session ended")) return "summary";
|
|
6791
6794
|
if (tool.includes("send_whatsapp") || tool.includes("conversation")) return "conversation";
|
|
6792
6795
|
if (tool === "store_memory" || tool === "manual") return "observation";
|
|
6793
6796
|
return "raw";
|
|
@@ -10233,20 +10236,28 @@ function createExeOSHooks(config) {
|
|
|
10233
10236
|
async onSessionEnd(_context, summary) {
|
|
10234
10237
|
try {
|
|
10235
10238
|
const { writeMemory: writeMemory2 } = await Promise.resolve().then(() => (init_store(), store_exports));
|
|
10236
|
-
|
|
10237
|
-
|
|
10238
|
-
|
|
10239
|
-
|
|
10240
|
-
|
|
10241
|
-
|
|
10242
|
-
|
|
10243
|
-
|
|
10244
|
-
|
|
10245
|
-
|
|
10246
|
-
|
|
10247
|
-
|
|
10248
|
-
|
|
10249
|
-
|
|
10239
|
+
await writeMemory2({
|
|
10240
|
+
id: randomUUID5(),
|
|
10241
|
+
agent_id: config.agentId,
|
|
10242
|
+
agent_role: "employee",
|
|
10243
|
+
session_id: `api-${config.agentId}`,
|
|
10244
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
10245
|
+
tool_name: "SessionEnd",
|
|
10246
|
+
project_name: config.projectName,
|
|
10247
|
+
has_error: false,
|
|
10248
|
+
raw_text: [
|
|
10249
|
+
"CONTEXT CHECKPOINT [auto:session-end]",
|
|
10250
|
+
`Agent: ${config.agentId}`,
|
|
10251
|
+
`Project: ${config.projectName}`,
|
|
10252
|
+
`Time: ${(/* @__PURE__ */ new Date()).toISOString()}`,
|
|
10253
|
+
"",
|
|
10254
|
+
"## Runtime Summary",
|
|
10255
|
+
summary || "Session ended. No runtime summary was provided."
|
|
10256
|
+
].join("\n"),
|
|
10257
|
+
vector: null,
|
|
10258
|
+
importance: 8,
|
|
10259
|
+
memory_type: "checkpoint"
|
|
10260
|
+
});
|
|
10250
10261
|
} catch (err) {
|
|
10251
10262
|
process.stderr.write(
|
|
10252
10263
|
`[exe-hooks] session summary store failed: ${err instanceof Error ? err.message : String(err)}
|
package/dist/tui/App.js
CHANGED
|
@@ -11097,6 +11097,9 @@ function classifyMemoryType(input) {
|
|
|
11097
11097
|
if (tool.includes("commit") || text.includes("adr-") || text.includes("architectural decision")) return "adr";
|
|
11098
11098
|
if (tool.includes("store_behavior") || tool.includes("behavior")) return "behavior";
|
|
11099
11099
|
if (tool.includes("global_procedure") || text.includes("organization-wide procedures")) return "procedure";
|
|
11100
|
+
if (tool.includes("checkpoint") || text.startsWith("context checkpoint")) return "checkpoint";
|
|
11101
|
+
if (tool.includes("sessionsummary") || tool.includes("session-summary")) return "summary";
|
|
11102
|
+
if (tool.includes("sessionend") || text.startsWith("session ended")) return "summary";
|
|
11100
11103
|
if (tool.includes("send_whatsapp") || tool.includes("conversation")) return "conversation";
|
|
11101
11104
|
if (tool === "store_memory" || tool === "manual") return "observation";
|
|
11102
11105
|
return "raw";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.37",
|
|
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",
|
package/src/commands/exe/save.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# /exe-save
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Manual escape hatch for saving a context checkpoint.
|
|
4
|
+
|
|
5
|
+
Normally you do **not** need this. Exe OS automatically creates structured
|
|
6
|
+
`CONTEXT CHECKPOINT` memories in the background during meaningful work, before
|
|
7
|
+
compaction/context pressure, and at session end. Use `/exe-save` only when the
|
|
8
|
+
founder explicitly says "save everything" or you want an immediate extra
|
|
9
|
+
checkpoint before risky manual work.
|
|
4
10
|
|
|
5
11
|
## What to save
|
|
6
12
|
|
|
@@ -42,7 +48,5 @@ Then call `store_memory` again for each major decision as a separate `decision`
|
|
|
42
48
|
|
|
43
49
|
## When to use
|
|
44
50
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
- Before switching to a different project
|
|
48
|
-
- When the founder says "save everything"
|
|
51
|
+
- When the founder explicitly asks to save everything
|
|
52
|
+
- Before risky/manual infrastructure work where an extra checkpoint is useful
|