@askexenow/exe-os 0.9.70 → 0.9.72
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/agentic-ontology-backfill.js +27 -0
- package/dist/bin/agentic-reflection-backfill.js +27 -0
- package/dist/bin/agentic-semantic-label.js +27 -0
- package/dist/bin/backfill-conversations.js +27 -0
- package/dist/bin/backfill-responses.js +27 -0
- package/dist/bin/backfill-vectors.js +27 -0
- package/dist/bin/bulk-sync-postgres.js +27 -0
- package/dist/bin/cleanup-stale-review-tasks.js +27 -0
- package/dist/bin/cli.js +27 -0
- package/dist/bin/exe-assign.js +27 -0
- package/dist/bin/exe-boot.js +27 -0
- package/dist/bin/exe-cloud.js +27 -0
- package/dist/bin/exe-dispatch.js +27 -0
- package/dist/bin/exe-doctor.js +27 -0
- package/dist/bin/exe-export-behaviors.js +27 -0
- package/dist/bin/exe-forget.js +27 -0
- package/dist/bin/exe-gateway.js +27 -0
- package/dist/bin/exe-heartbeat.js +27 -0
- package/dist/bin/exe-kill.js +27 -0
- package/dist/bin/exe-launch-agent.js +27 -0
- package/dist/bin/exe-pending-messages.js +27 -0
- package/dist/bin/exe-pending-notifications.js +27 -0
- package/dist/bin/exe-pending-reviews.js +27 -0
- package/dist/bin/exe-rename.js +27 -0
- package/dist/bin/exe-review.js +27 -0
- package/dist/bin/exe-search.js +27 -0
- package/dist/bin/exe-session-cleanup.js +27 -0
- package/dist/bin/exe-start-codex.js +27 -0
- package/dist/bin/exe-start-opencode.js +27 -0
- package/dist/bin/exe-status.js +27 -0
- package/dist/bin/exe-team.js +27 -0
- package/dist/bin/git-sweep.js +27 -0
- package/dist/bin/graph-backfill.js +27 -0
- package/dist/bin/graph-export.js +27 -0
- package/dist/bin/intercom-check.js +27 -0
- package/dist/bin/scan-tasks.js +27 -0
- package/dist/bin/setup.js +27 -0
- package/dist/bin/shard-migrate.js +27 -0
- package/dist/gateway/index.js +27 -0
- package/dist/hooks/bug-report-worker.js +27 -0
- package/dist/hooks/codex-stop-task-finalizer.js +27 -0
- package/dist/hooks/commit-complete.js +27 -0
- package/dist/hooks/error-recall.js +27 -0
- package/dist/hooks/ingest.js +27 -0
- package/dist/hooks/instructions-loaded.js +27 -0
- package/dist/hooks/notification.js +27 -0
- package/dist/hooks/post-compact.js +27 -0
- package/dist/hooks/post-tool-combined.js +692 -17
- package/dist/hooks/pre-compact.js +27 -0
- package/dist/hooks/pre-tool-use.js +27 -0
- package/dist/hooks/prompt-submit.js +308 -0
- package/dist/hooks/session-end.js +27 -0
- package/dist/hooks/session-start.js +27 -0
- package/dist/hooks/stop.js +273 -12
- package/dist/hooks/subagent-stop.js +27 -0
- package/dist/hooks/summary-worker.js +27 -0
- package/dist/index.js +27 -0
- package/dist/lib/cloud-sync.js +27 -0
- package/dist/lib/database.js +27 -0
- package/dist/lib/db.js +27 -0
- package/dist/lib/device-registry.js +27 -0
- package/dist/lib/exe-daemon.js +260 -28
- package/dist/lib/hybrid-search.js +27 -0
- package/dist/lib/schedules.js +27 -0
- package/dist/lib/store.js +27 -0
- package/dist/mcp/server.js +246 -25
- package/dist/runtime/index.js +27 -0
- package/dist/tui/App.js +27 -0
- package/package.json +5 -5
package/dist/mcp/server.js
CHANGED
|
@@ -2915,6 +2915,33 @@ async function ensureSchema() {
|
|
|
2915
2915
|
CREATE INDEX IF NOT EXISTS idx_chat_history_session
|
|
2916
2916
|
ON chat_history(session_id, id);
|
|
2917
2917
|
`);
|
|
2918
|
+
await client.executeMultiple(`
|
|
2919
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
2920
|
+
id TEXT PRIMARY KEY,
|
|
2921
|
+
agent_id TEXT NOT NULL,
|
|
2922
|
+
agent_role TEXT NOT NULL,
|
|
2923
|
+
session_id TEXT NOT NULL,
|
|
2924
|
+
session_scope TEXT,
|
|
2925
|
+
project_name TEXT NOT NULL,
|
|
2926
|
+
event_index INTEGER NOT NULL,
|
|
2927
|
+
event_type TEXT NOT NULL,
|
|
2928
|
+
tool_name TEXT,
|
|
2929
|
+
tool_use_id TEXT,
|
|
2930
|
+
content TEXT NOT NULL,
|
|
2931
|
+
payload_json TEXT,
|
|
2932
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
2933
|
+
created_at TEXT NOT NULL
|
|
2934
|
+
);
|
|
2935
|
+
|
|
2936
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
2937
|
+
ON session_events(agent_id, created_at DESC);
|
|
2938
|
+
|
|
2939
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
2940
|
+
ON session_events(session_id, event_index);
|
|
2941
|
+
|
|
2942
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
2943
|
+
ON session_events(session_scope, agent_id, created_at DESC);
|
|
2944
|
+
`);
|
|
2918
2945
|
await client.executeMultiple(`
|
|
2919
2946
|
CREATE TABLE IF NOT EXISTS workspaces (
|
|
2920
2947
|
id TEXT PRIMARY KEY,
|
|
@@ -26997,9 +27024,199 @@ Upstream status: ${upstreamStatus}`
|
|
|
26997
27024
|
);
|
|
26998
27025
|
}
|
|
26999
27026
|
|
|
27000
|
-
// src/mcp/tools/
|
|
27027
|
+
// src/mcp/tools/get-session-events.ts
|
|
27028
|
+
init_active_agent();
|
|
27029
|
+
init_fast_db_init();
|
|
27001
27030
|
import { z as z88 } from "zod";
|
|
27002
27031
|
|
|
27032
|
+
// src/lib/session-events.ts
|
|
27033
|
+
init_task_scope();
|
|
27034
|
+
init_project_name();
|
|
27035
|
+
import { randomUUID as randomUUID9 } from "crypto";
|
|
27036
|
+
async function ensureSessionEventsTable(client) {
|
|
27037
|
+
await client.execute(`
|
|
27038
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
27039
|
+
id TEXT PRIMARY KEY,
|
|
27040
|
+
agent_id TEXT NOT NULL,
|
|
27041
|
+
agent_role TEXT NOT NULL,
|
|
27042
|
+
session_id TEXT NOT NULL,
|
|
27043
|
+
session_scope TEXT,
|
|
27044
|
+
project_name TEXT NOT NULL,
|
|
27045
|
+
event_index INTEGER NOT NULL,
|
|
27046
|
+
event_type TEXT NOT NULL,
|
|
27047
|
+
tool_name TEXT,
|
|
27048
|
+
tool_use_id TEXT,
|
|
27049
|
+
content TEXT NOT NULL,
|
|
27050
|
+
payload_json TEXT,
|
|
27051
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
27052
|
+
created_at TEXT NOT NULL
|
|
27053
|
+
)
|
|
27054
|
+
`);
|
|
27055
|
+
await client.execute(`
|
|
27056
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
27057
|
+
ON session_events(agent_id, created_at DESC)
|
|
27058
|
+
`);
|
|
27059
|
+
await client.execute(`
|
|
27060
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
27061
|
+
ON session_events(session_id, event_index)
|
|
27062
|
+
`);
|
|
27063
|
+
await client.execute(`
|
|
27064
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
27065
|
+
ON session_events(session_scope, agent_id, created_at DESC)
|
|
27066
|
+
`);
|
|
27067
|
+
}
|
|
27068
|
+
async function listRecentSessionEvents(client, options) {
|
|
27069
|
+
await ensureSessionEventsTable(client);
|
|
27070
|
+
const conditions = ["agent_id = ?"];
|
|
27071
|
+
const args = [options.agentId];
|
|
27072
|
+
if (options.sessionId) {
|
|
27073
|
+
conditions.push("session_id = ?");
|
|
27074
|
+
args.push(options.sessionId);
|
|
27075
|
+
}
|
|
27076
|
+
if (options.eventType) {
|
|
27077
|
+
conditions.push("event_type = ?");
|
|
27078
|
+
args.push(options.eventType);
|
|
27079
|
+
}
|
|
27080
|
+
if (options.projectName && options.projectName !== "all") {
|
|
27081
|
+
conditions.push("project_name = ?");
|
|
27082
|
+
args.push(options.projectName);
|
|
27083
|
+
}
|
|
27084
|
+
const scope = strictSessionScopeFilter(options.sessionScope);
|
|
27085
|
+
const where = `WHERE ${conditions.join(" AND ")}${scope.sql}`;
|
|
27086
|
+
args.push(...scope.args);
|
|
27087
|
+
args.push(Math.min(Math.max(options.limit ?? 20, 1), 100));
|
|
27088
|
+
const result2 = await client.execute({
|
|
27089
|
+
sql: `SELECT id, agent_id, agent_role, session_id, session_scope,
|
|
27090
|
+
project_name, event_index, event_type, tool_name, tool_use_id,
|
|
27091
|
+
content, payload_json, has_error, created_at
|
|
27092
|
+
FROM session_events
|
|
27093
|
+
${where}
|
|
27094
|
+
ORDER BY created_at DESC, event_index DESC
|
|
27095
|
+
LIMIT ?`,
|
|
27096
|
+
args
|
|
27097
|
+
});
|
|
27098
|
+
return result2.rows.map((row) => ({
|
|
27099
|
+
id: String(row.id),
|
|
27100
|
+
agentId: String(row.agent_id),
|
|
27101
|
+
agentRole: String(row.agent_role),
|
|
27102
|
+
sessionId: String(row.session_id),
|
|
27103
|
+
sessionScope: row.session_scope == null ? null : String(row.session_scope),
|
|
27104
|
+
projectName: String(row.project_name),
|
|
27105
|
+
eventIndex: Number(row.event_index),
|
|
27106
|
+
eventType: String(row.event_type),
|
|
27107
|
+
toolName: row.tool_name == null ? null : String(row.tool_name),
|
|
27108
|
+
toolUseId: row.tool_use_id == null ? null : String(row.tool_use_id),
|
|
27109
|
+
content: String(row.content),
|
|
27110
|
+
payloadJson: row.payload_json == null ? null : String(row.payload_json),
|
|
27111
|
+
hasError: Number(row.has_error) === 1,
|
|
27112
|
+
createdAt: String(row.created_at)
|
|
27113
|
+
}));
|
|
27114
|
+
}
|
|
27115
|
+
|
|
27116
|
+
// src/mcp/tools/get-session-events.ts
|
|
27117
|
+
var EVENT_TYPE = z88.enum([
|
|
27118
|
+
"user_prompt",
|
|
27119
|
+
"assistant_response",
|
|
27120
|
+
"tool_call",
|
|
27121
|
+
"tool_result",
|
|
27122
|
+
"system_event"
|
|
27123
|
+
]);
|
|
27124
|
+
function canReadAgent(activeRole, activeAgent, requestedAgent) {
|
|
27125
|
+
return requestedAgent === activeAgent || activeRole === "COO" || activeRole === "CTO";
|
|
27126
|
+
}
|
|
27127
|
+
function formatEvent(event) {
|
|
27128
|
+
const header = [
|
|
27129
|
+
`[${event.createdAt}]`,
|
|
27130
|
+
`${event.agentId}`,
|
|
27131
|
+
`${event.eventType}`,
|
|
27132
|
+
`session=${event.sessionId}`,
|
|
27133
|
+
`#${event.eventIndex}`,
|
|
27134
|
+
event.toolName ? `tool=${event.toolName}` : "",
|
|
27135
|
+
event.hasError ? "ERROR" : ""
|
|
27136
|
+
].filter(Boolean).join(" ");
|
|
27137
|
+
return `${header}
|
|
27138
|
+
${event.content}`;
|
|
27139
|
+
}
|
|
27140
|
+
function registerGetSessionEvents(server2) {
|
|
27141
|
+
server2.registerTool(
|
|
27142
|
+
"get_session_events",
|
|
27143
|
+
{
|
|
27144
|
+
title: "Get Session Events",
|
|
27145
|
+
description: "Return exact recent chronological user prompts, assistant responses, and tool calls from the append-only session journal. Use this when asked what happened last, not semantic memory search.",
|
|
27146
|
+
inputSchema: {
|
|
27147
|
+
agent_id: z88.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
|
|
27148
|
+
session_id: z88.string().optional().describe("Optional exact runtime session id."),
|
|
27149
|
+
event_type: EVENT_TYPE.optional().describe("Filter to one event type."),
|
|
27150
|
+
project_name: z88.string().optional().describe("Optional project filter. Pass 'all' for all projects."),
|
|
27151
|
+
limit: z88.number().int().min(1).max(100).default(20).describe("Number of events to return.")
|
|
27152
|
+
}
|
|
27153
|
+
},
|
|
27154
|
+
async ({ agent_id, session_id, event_type, project_name, limit }) => {
|
|
27155
|
+
const active = getActiveAgent();
|
|
27156
|
+
const targetAgent = agent_id?.trim() || active.agentId;
|
|
27157
|
+
if (!canReadAgent(active.agentRole, active.agentId, targetAgent)) {
|
|
27158
|
+
return {
|
|
27159
|
+
content: [{ type: "text", text: "Permission denied: only COO/CTO may read another agent's session events." }],
|
|
27160
|
+
isError: true
|
|
27161
|
+
};
|
|
27162
|
+
}
|
|
27163
|
+
const client = await fastDbInit();
|
|
27164
|
+
const events = await listRecentSessionEvents(client, {
|
|
27165
|
+
agentId: targetAgent,
|
|
27166
|
+
sessionId: session_id,
|
|
27167
|
+
eventType: event_type,
|
|
27168
|
+
projectName: project_name,
|
|
27169
|
+
limit
|
|
27170
|
+
});
|
|
27171
|
+
if (events.length === 0) {
|
|
27172
|
+
return { content: [{ type: "text", text: "No session events found." }] };
|
|
27173
|
+
}
|
|
27174
|
+
return {
|
|
27175
|
+
content: [{ type: "text", text: events.map(formatEvent).join("\n\n---\n\n") }]
|
|
27176
|
+
};
|
|
27177
|
+
}
|
|
27178
|
+
);
|
|
27179
|
+
}
|
|
27180
|
+
function registerGetLastAssistantResponse(server2) {
|
|
27181
|
+
server2.registerTool(
|
|
27182
|
+
"get_last_assistant_response",
|
|
27183
|
+
{
|
|
27184
|
+
title: "Get Last Assistant Response",
|
|
27185
|
+
description: "Return the exact last assistant response for an agent from the session event journal. Use for 'what was the last thing you said?'",
|
|
27186
|
+
inputSchema: {
|
|
27187
|
+
agent_id: z88.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
|
|
27188
|
+
project_name: z88.string().optional().describe("Optional project filter. Pass 'all' for all projects.")
|
|
27189
|
+
}
|
|
27190
|
+
},
|
|
27191
|
+
async ({ agent_id, project_name }) => {
|
|
27192
|
+
const active = getActiveAgent();
|
|
27193
|
+
const targetAgent = agent_id?.trim() || active.agentId;
|
|
27194
|
+
if (!canReadAgent(active.agentRole, active.agentId, targetAgent)) {
|
|
27195
|
+
return {
|
|
27196
|
+
content: [{ type: "text", text: "Permission denied: only COO/CTO may read another agent's last response." }],
|
|
27197
|
+
isError: true
|
|
27198
|
+
};
|
|
27199
|
+
}
|
|
27200
|
+
const client = await fastDbInit();
|
|
27201
|
+
const events = await listRecentSessionEvents(client, {
|
|
27202
|
+
agentId: targetAgent,
|
|
27203
|
+
eventType: "assistant_response",
|
|
27204
|
+
projectName: project_name,
|
|
27205
|
+
limit: 1
|
|
27206
|
+
});
|
|
27207
|
+
if (events.length === 0) {
|
|
27208
|
+
return { content: [{ type: "text", text: "No assistant response found in the session journal." }] };
|
|
27209
|
+
}
|
|
27210
|
+
return {
|
|
27211
|
+
content: [{ type: "text", text: formatEvent(events[0]) }]
|
|
27212
|
+
};
|
|
27213
|
+
}
|
|
27214
|
+
);
|
|
27215
|
+
}
|
|
27216
|
+
|
|
27217
|
+
// src/mcp/tools/code-context.ts
|
|
27218
|
+
import { z as z89 } from "zod";
|
|
27219
|
+
|
|
27003
27220
|
// src/lib/code-context-index.ts
|
|
27004
27221
|
init_config();
|
|
27005
27222
|
import crypto19 from "crypto";
|
|
@@ -27414,19 +27631,19 @@ function registerCodeContext(server2) {
|
|
|
27414
27631
|
title: "Code Context",
|
|
27415
27632
|
description: "Persistent codebase context engine. One consolidated tool to avoid MCP bloat. Actions: index, search, trace, blast_radius, stats.",
|
|
27416
27633
|
inputSchema: {
|
|
27417
|
-
action:
|
|
27418
|
-
project_root:
|
|
27419
|
-
query:
|
|
27420
|
-
symbol:
|
|
27421
|
-
file_path:
|
|
27422
|
-
force:
|
|
27423
|
-
limit:
|
|
27424
|
-
offset:
|
|
27425
|
-
refresh_index:
|
|
27426
|
-
languages:
|
|
27427
|
-
paths:
|
|
27428
|
-
depth:
|
|
27429
|
-
max_files:
|
|
27634
|
+
action: z89.enum(["index", "search", "trace", "blast_radius", "stats"]).describe("Code context operation"),
|
|
27635
|
+
project_root: z89.string().optional().describe("Repository root. Defaults to current working directory."),
|
|
27636
|
+
query: z89.string().optional().describe("Search query for action=search"),
|
|
27637
|
+
symbol: z89.string().optional().describe("Symbol/function/class/type name for trace or blast_radius"),
|
|
27638
|
+
file_path: z89.string().optional().describe("File path for blast_radius"),
|
|
27639
|
+
force: z89.boolean().optional().describe("Force rebuild before answering"),
|
|
27640
|
+
limit: z89.coerce.number().int().min(1).max(100).optional().describe("Max results"),
|
|
27641
|
+
offset: z89.coerce.number().int().min(0).optional().describe("Search pagination offset"),
|
|
27642
|
+
refresh_index: z89.boolean().optional().describe("Refresh/rebuild index before searching"),
|
|
27643
|
+
languages: z89.array(z89.string()).optional().describe('Language filters, e.g. ["python", "typescript"]'),
|
|
27644
|
+
paths: z89.array(z89.string()).optional().describe("Path/glob filters"),
|
|
27645
|
+
depth: z89.coerce.number().int().min(1).max(5).optional().describe("Dependent traversal depth for blast_radius"),
|
|
27646
|
+
max_files: z89.coerce.number().int().min(1).max(1e4).optional().describe("Max code files to index")
|
|
27430
27647
|
}
|
|
27431
27648
|
}, async ({ action, project_root, query, symbol, file_path, force, limit, offset, refresh_index, languages, paths, depth, max_files }) => {
|
|
27432
27649
|
const opts = { projectRoot: project_root, force, maxFiles: max_files };
|
|
@@ -27471,9 +27688,9 @@ function registerCodeContext(server2) {
|
|
|
27471
27688
|
}
|
|
27472
27689
|
|
|
27473
27690
|
// src/mcp/tools/support-inbox.ts
|
|
27474
|
-
import { z as
|
|
27691
|
+
import { z as z90 } from "zod";
|
|
27475
27692
|
var DEFAULT_ENDPOINT = "https://askexe.com/admin/support/bug-reports";
|
|
27476
|
-
var STATUS =
|
|
27693
|
+
var STATUS = z90.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
|
|
27477
27694
|
function adminToken() {
|
|
27478
27695
|
return process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN;
|
|
27479
27696
|
}
|
|
@@ -27512,9 +27729,9 @@ function registerListBugReports(server2) {
|
|
|
27512
27729
|
title: "List Bug Reports",
|
|
27513
27730
|
description: "AskExe-internal only: list incoming customer bug reports from the support inbox.",
|
|
27514
27731
|
inputSchema: {
|
|
27515
|
-
status:
|
|
27516
|
-
severity:
|
|
27517
|
-
limit:
|
|
27732
|
+
status: z90.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("open"),
|
|
27733
|
+
severity: z90.enum(["p0", "p1", "p2", "p3"]).optional(),
|
|
27734
|
+
limit: z90.number().int().min(1).max(100).default(25)
|
|
27518
27735
|
}
|
|
27519
27736
|
},
|
|
27520
27737
|
async ({ status, severity, limit }) => {
|
|
@@ -27533,7 +27750,7 @@ function registerGetBugReport(server2) {
|
|
|
27533
27750
|
{
|
|
27534
27751
|
title: "Get Bug Report",
|
|
27535
27752
|
description: "AskExe-internal only: fetch one customer bug report with full markdown payload.",
|
|
27536
|
-
inputSchema: { id:
|
|
27753
|
+
inputSchema: { id: z90.string().min(8) }
|
|
27537
27754
|
},
|
|
27538
27755
|
async ({ id }) => {
|
|
27539
27756
|
const data = await requestJson(`${endpoint()}/${encodeURIComponent(id)}`);
|
|
@@ -27548,12 +27765,12 @@ function registerTriageBugReport(server2) {
|
|
|
27548
27765
|
title: "Triage Bug Report",
|
|
27549
27766
|
description: "AskExe-internal only: update bug report status and link task/commit/release metadata.",
|
|
27550
27767
|
inputSchema: {
|
|
27551
|
-
id:
|
|
27768
|
+
id: z90.string().min(8),
|
|
27552
27769
|
status: STATUS.optional(),
|
|
27553
|
-
triage_notes:
|
|
27554
|
-
linked_task_id:
|
|
27555
|
-
linked_commit:
|
|
27556
|
-
fixed_version:
|
|
27770
|
+
triage_notes: z90.string().optional(),
|
|
27771
|
+
linked_task_id: z90.string().optional(),
|
|
27772
|
+
linked_commit: z90.string().optional(),
|
|
27773
|
+
fixed_version: z90.string().optional()
|
|
27557
27774
|
}
|
|
27558
27775
|
},
|
|
27559
27776
|
async ({ id, status, triage_notes, linked_task_id, linked_commit, fixed_version }) => {
|
|
@@ -27616,6 +27833,8 @@ var TOOL_CATEGORIES = {
|
|
|
27616
27833
|
registerStoreDecision: "core",
|
|
27617
27834
|
registerGetDecision: "core",
|
|
27618
27835
|
registerCreateBugReport: "core",
|
|
27836
|
+
registerGetSessionEvents: "core",
|
|
27837
|
+
registerGetLastAssistantResponse: "core",
|
|
27619
27838
|
registerCodeContext: "graph-read",
|
|
27620
27839
|
registerListBugReports: "admin",
|
|
27621
27840
|
registerGetBugReport: "admin",
|
|
@@ -27881,6 +28100,8 @@ function registerAllTools(server2) {
|
|
|
27881
28100
|
gate("registerStoreDecision", registerStoreDecision);
|
|
27882
28101
|
gate("registerGetDecision", registerGetDecision);
|
|
27883
28102
|
gate("registerCreateBugReport", registerCreateBugReport);
|
|
28103
|
+
gate("registerGetSessionEvents", registerGetSessionEvents);
|
|
28104
|
+
gate("registerGetLastAssistantResponse", registerGetLastAssistantResponse);
|
|
27884
28105
|
gate("registerCodeContext", registerCodeContext);
|
|
27885
28106
|
if (process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN) {
|
|
27886
28107
|
gate("registerListBugReports", registerListBugReports);
|
package/dist/runtime/index.js
CHANGED
|
@@ -3006,6 +3006,33 @@ async function ensureSchema() {
|
|
|
3006
3006
|
CREATE INDEX IF NOT EXISTS idx_chat_history_session
|
|
3007
3007
|
ON chat_history(session_id, id);
|
|
3008
3008
|
`);
|
|
3009
|
+
await client.executeMultiple(`
|
|
3010
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
3011
|
+
id TEXT PRIMARY KEY,
|
|
3012
|
+
agent_id TEXT NOT NULL,
|
|
3013
|
+
agent_role TEXT NOT NULL,
|
|
3014
|
+
session_id TEXT NOT NULL,
|
|
3015
|
+
session_scope TEXT,
|
|
3016
|
+
project_name TEXT NOT NULL,
|
|
3017
|
+
event_index INTEGER NOT NULL,
|
|
3018
|
+
event_type TEXT NOT NULL,
|
|
3019
|
+
tool_name TEXT,
|
|
3020
|
+
tool_use_id TEXT,
|
|
3021
|
+
content TEXT NOT NULL,
|
|
3022
|
+
payload_json TEXT,
|
|
3023
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
3024
|
+
created_at TEXT NOT NULL
|
|
3025
|
+
);
|
|
3026
|
+
|
|
3027
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
3028
|
+
ON session_events(agent_id, created_at DESC);
|
|
3029
|
+
|
|
3030
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
3031
|
+
ON session_events(session_id, event_index);
|
|
3032
|
+
|
|
3033
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
3034
|
+
ON session_events(session_scope, agent_id, created_at DESC);
|
|
3035
|
+
`);
|
|
3009
3036
|
await client.executeMultiple(`
|
|
3010
3037
|
CREATE TABLE IF NOT EXISTS workspaces (
|
|
3011
3038
|
id TEXT PRIMARY KEY,
|
package/dist/tui/App.js
CHANGED
|
@@ -3258,6 +3258,33 @@ async function ensureSchema() {
|
|
|
3258
3258
|
CREATE INDEX IF NOT EXISTS idx_chat_history_session
|
|
3259
3259
|
ON chat_history(session_id, id);
|
|
3260
3260
|
`);
|
|
3261
|
+
await client.executeMultiple(`
|
|
3262
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
3263
|
+
id TEXT PRIMARY KEY,
|
|
3264
|
+
agent_id TEXT NOT NULL,
|
|
3265
|
+
agent_role TEXT NOT NULL,
|
|
3266
|
+
session_id TEXT NOT NULL,
|
|
3267
|
+
session_scope TEXT,
|
|
3268
|
+
project_name TEXT NOT NULL,
|
|
3269
|
+
event_index INTEGER NOT NULL,
|
|
3270
|
+
event_type TEXT NOT NULL,
|
|
3271
|
+
tool_name TEXT,
|
|
3272
|
+
tool_use_id TEXT,
|
|
3273
|
+
content TEXT NOT NULL,
|
|
3274
|
+
payload_json TEXT,
|
|
3275
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
3276
|
+
created_at TEXT NOT NULL
|
|
3277
|
+
);
|
|
3278
|
+
|
|
3279
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
3280
|
+
ON session_events(agent_id, created_at DESC);
|
|
3281
|
+
|
|
3282
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
3283
|
+
ON session_events(session_id, event_index);
|
|
3284
|
+
|
|
3285
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
3286
|
+
ON session_events(session_scope, agent_id, created_at DESC);
|
|
3287
|
+
`);
|
|
3261
3288
|
await client.executeMultiple(`
|
|
3262
3289
|
CREATE TABLE IF NOT EXISTS workspaces (
|
|
3263
3290
|
id TEXT PRIMARY KEY,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.72",
|
|
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",
|
|
@@ -89,19 +89,19 @@
|
|
|
89
89
|
"benchmark:longmemeval": "npx tsx tests/benchmarks/longmemeval.ts"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@anthropic-ai/sdk": "^0.95.
|
|
92
|
+
"@anthropic-ai/sdk": "^0.95.2",
|
|
93
93
|
"@aws-sdk/client-s3": "^3.800.0",
|
|
94
|
-
"@discordjs/voice": "^0.
|
|
94
|
+
"@discordjs/voice": "^0.18.0",
|
|
95
95
|
"@libsql/client": "^0.14.0",
|
|
96
96
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
97
97
|
"@opentelemetry/api": "^1.9.1",
|
|
98
|
-
"@opentelemetry/sdk-node": "^0.
|
|
98
|
+
"@opentelemetry/sdk-node": "^0.217.0",
|
|
99
99
|
"@opentelemetry/sdk-trace-base": "^2.7.0",
|
|
100
100
|
"@slack/bolt": "^4.7.0",
|
|
101
101
|
"@slack/web-api": "^7.15.1",
|
|
102
102
|
"@types/react": "^19.2.14",
|
|
103
103
|
"@types/ws": "^8.18.1",
|
|
104
|
-
"@whiskeysockets/baileys": "^7.0.0-
|
|
104
|
+
"@whiskeysockets/baileys": "^7.0.0-rc10",
|
|
105
105
|
"bip39": "^3.1.0",
|
|
106
106
|
"discord.js": "^14.26.3",
|
|
107
107
|
"grammy": "^1.42.0",
|