@askexenow/exe-os 0.9.70 → 0.9.71
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 +1 -1
package/dist/lib/exe-daemon.js
CHANGED
|
@@ -2847,6 +2847,33 @@ async function ensureSchema() {
|
|
|
2847
2847
|
CREATE INDEX IF NOT EXISTS idx_chat_history_session
|
|
2848
2848
|
ON chat_history(session_id, id);
|
|
2849
2849
|
`);
|
|
2850
|
+
await client.executeMultiple(`
|
|
2851
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
2852
|
+
id TEXT PRIMARY KEY,
|
|
2853
|
+
agent_id TEXT NOT NULL,
|
|
2854
|
+
agent_role TEXT NOT NULL,
|
|
2855
|
+
session_id TEXT NOT NULL,
|
|
2856
|
+
session_scope TEXT,
|
|
2857
|
+
project_name TEXT NOT NULL,
|
|
2858
|
+
event_index INTEGER NOT NULL,
|
|
2859
|
+
event_type TEXT NOT NULL,
|
|
2860
|
+
tool_name TEXT,
|
|
2861
|
+
tool_use_id TEXT,
|
|
2862
|
+
content TEXT NOT NULL,
|
|
2863
|
+
payload_json TEXT,
|
|
2864
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
2865
|
+
created_at TEXT NOT NULL
|
|
2866
|
+
);
|
|
2867
|
+
|
|
2868
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
2869
|
+
ON session_events(agent_id, created_at DESC);
|
|
2870
|
+
|
|
2871
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
2872
|
+
ON session_events(session_id, event_index);
|
|
2873
|
+
|
|
2874
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
2875
|
+
ON session_events(session_scope, agent_id, created_at DESC);
|
|
2876
|
+
`);
|
|
2850
2877
|
await client.executeMultiple(`
|
|
2851
2878
|
CREATE TABLE IF NOT EXISTS workspaces (
|
|
2852
2879
|
id TEXT PRIMARY KEY,
|
|
@@ -30029,6 +30056,206 @@ var init_create_bug_report = __esm({
|
|
|
30029
30056
|
}
|
|
30030
30057
|
});
|
|
30031
30058
|
|
|
30059
|
+
// src/lib/session-events.ts
|
|
30060
|
+
import { randomUUID as randomUUID9 } from "crypto";
|
|
30061
|
+
async function ensureSessionEventsTable(client) {
|
|
30062
|
+
await client.execute(`
|
|
30063
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
30064
|
+
id TEXT PRIMARY KEY,
|
|
30065
|
+
agent_id TEXT NOT NULL,
|
|
30066
|
+
agent_role TEXT NOT NULL,
|
|
30067
|
+
session_id TEXT NOT NULL,
|
|
30068
|
+
session_scope TEXT,
|
|
30069
|
+
project_name TEXT NOT NULL,
|
|
30070
|
+
event_index INTEGER NOT NULL,
|
|
30071
|
+
event_type TEXT NOT NULL,
|
|
30072
|
+
tool_name TEXT,
|
|
30073
|
+
tool_use_id TEXT,
|
|
30074
|
+
content TEXT NOT NULL,
|
|
30075
|
+
payload_json TEXT,
|
|
30076
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
30077
|
+
created_at TEXT NOT NULL
|
|
30078
|
+
)
|
|
30079
|
+
`);
|
|
30080
|
+
await client.execute(`
|
|
30081
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
30082
|
+
ON session_events(agent_id, created_at DESC)
|
|
30083
|
+
`);
|
|
30084
|
+
await client.execute(`
|
|
30085
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
30086
|
+
ON session_events(session_id, event_index)
|
|
30087
|
+
`);
|
|
30088
|
+
await client.execute(`
|
|
30089
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
30090
|
+
ON session_events(session_scope, agent_id, created_at DESC)
|
|
30091
|
+
`);
|
|
30092
|
+
}
|
|
30093
|
+
async function listRecentSessionEvents(client, options) {
|
|
30094
|
+
await ensureSessionEventsTable(client);
|
|
30095
|
+
const conditions = ["agent_id = ?"];
|
|
30096
|
+
const args = [options.agentId];
|
|
30097
|
+
if (options.sessionId) {
|
|
30098
|
+
conditions.push("session_id = ?");
|
|
30099
|
+
args.push(options.sessionId);
|
|
30100
|
+
}
|
|
30101
|
+
if (options.eventType) {
|
|
30102
|
+
conditions.push("event_type = ?");
|
|
30103
|
+
args.push(options.eventType);
|
|
30104
|
+
}
|
|
30105
|
+
if (options.projectName && options.projectName !== "all") {
|
|
30106
|
+
conditions.push("project_name = ?");
|
|
30107
|
+
args.push(options.projectName);
|
|
30108
|
+
}
|
|
30109
|
+
const scope = strictSessionScopeFilter(options.sessionScope);
|
|
30110
|
+
const where = `WHERE ${conditions.join(" AND ")}${scope.sql}`;
|
|
30111
|
+
args.push(...scope.args);
|
|
30112
|
+
args.push(Math.min(Math.max(options.limit ?? 20, 1), 100));
|
|
30113
|
+
const result2 = await client.execute({
|
|
30114
|
+
sql: `SELECT id, agent_id, agent_role, session_id, session_scope,
|
|
30115
|
+
project_name, event_index, event_type, tool_name, tool_use_id,
|
|
30116
|
+
content, payload_json, has_error, created_at
|
|
30117
|
+
FROM session_events
|
|
30118
|
+
${where}
|
|
30119
|
+
ORDER BY created_at DESC, event_index DESC
|
|
30120
|
+
LIMIT ?`,
|
|
30121
|
+
args
|
|
30122
|
+
});
|
|
30123
|
+
return result2.rows.map((row) => ({
|
|
30124
|
+
id: String(row.id),
|
|
30125
|
+
agentId: String(row.agent_id),
|
|
30126
|
+
agentRole: String(row.agent_role),
|
|
30127
|
+
sessionId: String(row.session_id),
|
|
30128
|
+
sessionScope: row.session_scope == null ? null : String(row.session_scope),
|
|
30129
|
+
projectName: String(row.project_name),
|
|
30130
|
+
eventIndex: Number(row.event_index),
|
|
30131
|
+
eventType: String(row.event_type),
|
|
30132
|
+
toolName: row.tool_name == null ? null : String(row.tool_name),
|
|
30133
|
+
toolUseId: row.tool_use_id == null ? null : String(row.tool_use_id),
|
|
30134
|
+
content: String(row.content),
|
|
30135
|
+
payloadJson: row.payload_json == null ? null : String(row.payload_json),
|
|
30136
|
+
hasError: Number(row.has_error) === 1,
|
|
30137
|
+
createdAt: String(row.created_at)
|
|
30138
|
+
}));
|
|
30139
|
+
}
|
|
30140
|
+
var init_session_events = __esm({
|
|
30141
|
+
"src/lib/session-events.ts"() {
|
|
30142
|
+
"use strict";
|
|
30143
|
+
init_task_scope();
|
|
30144
|
+
init_project_name();
|
|
30145
|
+
}
|
|
30146
|
+
});
|
|
30147
|
+
|
|
30148
|
+
// src/mcp/tools/get-session-events.ts
|
|
30149
|
+
import { z as z88 } from "zod";
|
|
30150
|
+
function canReadAgent(activeRole, activeAgent, requestedAgent) {
|
|
30151
|
+
return requestedAgent === activeAgent || activeRole === "COO" || activeRole === "CTO";
|
|
30152
|
+
}
|
|
30153
|
+
function formatEvent(event) {
|
|
30154
|
+
const header = [
|
|
30155
|
+
`[${event.createdAt}]`,
|
|
30156
|
+
`${event.agentId}`,
|
|
30157
|
+
`${event.eventType}`,
|
|
30158
|
+
`session=${event.sessionId}`,
|
|
30159
|
+
`#${event.eventIndex}`,
|
|
30160
|
+
event.toolName ? `tool=${event.toolName}` : "",
|
|
30161
|
+
event.hasError ? "ERROR" : ""
|
|
30162
|
+
].filter(Boolean).join(" ");
|
|
30163
|
+
return `${header}
|
|
30164
|
+
${event.content}`;
|
|
30165
|
+
}
|
|
30166
|
+
function registerGetSessionEvents(server) {
|
|
30167
|
+
server.registerTool(
|
|
30168
|
+
"get_session_events",
|
|
30169
|
+
{
|
|
30170
|
+
title: "Get Session Events",
|
|
30171
|
+
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.",
|
|
30172
|
+
inputSchema: {
|
|
30173
|
+
agent_id: z88.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
|
|
30174
|
+
session_id: z88.string().optional().describe("Optional exact runtime session id."),
|
|
30175
|
+
event_type: EVENT_TYPE.optional().describe("Filter to one event type."),
|
|
30176
|
+
project_name: z88.string().optional().describe("Optional project filter. Pass 'all' for all projects."),
|
|
30177
|
+
limit: z88.number().int().min(1).max(100).default(20).describe("Number of events to return.")
|
|
30178
|
+
}
|
|
30179
|
+
},
|
|
30180
|
+
async ({ agent_id, session_id, event_type, project_name, limit }) => {
|
|
30181
|
+
const active = getActiveAgent();
|
|
30182
|
+
const targetAgent = agent_id?.trim() || active.agentId;
|
|
30183
|
+
if (!canReadAgent(active.agentRole, active.agentId, targetAgent)) {
|
|
30184
|
+
return {
|
|
30185
|
+
content: [{ type: "text", text: "Permission denied: only COO/CTO may read another agent's session events." }],
|
|
30186
|
+
isError: true
|
|
30187
|
+
};
|
|
30188
|
+
}
|
|
30189
|
+
const client = await fastDbInit();
|
|
30190
|
+
const events = await listRecentSessionEvents(client, {
|
|
30191
|
+
agentId: targetAgent,
|
|
30192
|
+
sessionId: session_id,
|
|
30193
|
+
eventType: event_type,
|
|
30194
|
+
projectName: project_name,
|
|
30195
|
+
limit
|
|
30196
|
+
});
|
|
30197
|
+
if (events.length === 0) {
|
|
30198
|
+
return { content: [{ type: "text", text: "No session events found." }] };
|
|
30199
|
+
}
|
|
30200
|
+
return {
|
|
30201
|
+
content: [{ type: "text", text: events.map(formatEvent).join("\n\n---\n\n") }]
|
|
30202
|
+
};
|
|
30203
|
+
}
|
|
30204
|
+
);
|
|
30205
|
+
}
|
|
30206
|
+
function registerGetLastAssistantResponse(server) {
|
|
30207
|
+
server.registerTool(
|
|
30208
|
+
"get_last_assistant_response",
|
|
30209
|
+
{
|
|
30210
|
+
title: "Get Last Assistant Response",
|
|
30211
|
+
description: "Return the exact last assistant response for an agent from the session event journal. Use for 'what was the last thing you said?'",
|
|
30212
|
+
inputSchema: {
|
|
30213
|
+
agent_id: z88.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
|
|
30214
|
+
project_name: z88.string().optional().describe("Optional project filter. Pass 'all' for all projects.")
|
|
30215
|
+
}
|
|
30216
|
+
},
|
|
30217
|
+
async ({ agent_id, project_name }) => {
|
|
30218
|
+
const active = getActiveAgent();
|
|
30219
|
+
const targetAgent = agent_id?.trim() || active.agentId;
|
|
30220
|
+
if (!canReadAgent(active.agentRole, active.agentId, targetAgent)) {
|
|
30221
|
+
return {
|
|
30222
|
+
content: [{ type: "text", text: "Permission denied: only COO/CTO may read another agent's last response." }],
|
|
30223
|
+
isError: true
|
|
30224
|
+
};
|
|
30225
|
+
}
|
|
30226
|
+
const client = await fastDbInit();
|
|
30227
|
+
const events = await listRecentSessionEvents(client, {
|
|
30228
|
+
agentId: targetAgent,
|
|
30229
|
+
eventType: "assistant_response",
|
|
30230
|
+
projectName: project_name,
|
|
30231
|
+
limit: 1
|
|
30232
|
+
});
|
|
30233
|
+
if (events.length === 0) {
|
|
30234
|
+
return { content: [{ type: "text", text: "No assistant response found in the session journal." }] };
|
|
30235
|
+
}
|
|
30236
|
+
return {
|
|
30237
|
+
content: [{ type: "text", text: formatEvent(events[0]) }]
|
|
30238
|
+
};
|
|
30239
|
+
}
|
|
30240
|
+
);
|
|
30241
|
+
}
|
|
30242
|
+
var EVENT_TYPE;
|
|
30243
|
+
var init_get_session_events = __esm({
|
|
30244
|
+
"src/mcp/tools/get-session-events.ts"() {
|
|
30245
|
+
"use strict";
|
|
30246
|
+
init_active_agent();
|
|
30247
|
+
init_fast_db_init();
|
|
30248
|
+
init_session_events();
|
|
30249
|
+
EVENT_TYPE = z88.enum([
|
|
30250
|
+
"user_prompt",
|
|
30251
|
+
"assistant_response",
|
|
30252
|
+
"tool_call",
|
|
30253
|
+
"tool_result",
|
|
30254
|
+
"system_event"
|
|
30255
|
+
]);
|
|
30256
|
+
}
|
|
30257
|
+
});
|
|
30258
|
+
|
|
30032
30259
|
// src/lib/code-context-index.ts
|
|
30033
30260
|
import crypto20 from "crypto";
|
|
30034
30261
|
import path54 from "path";
|
|
@@ -30439,7 +30666,7 @@ var init_code_context_index = __esm({
|
|
|
30439
30666
|
});
|
|
30440
30667
|
|
|
30441
30668
|
// src/mcp/tools/code-context.ts
|
|
30442
|
-
import { z as
|
|
30669
|
+
import { z as z89 } from "zod";
|
|
30443
30670
|
function errorResult10(text3) {
|
|
30444
30671
|
return { content: [{ type: "text", text: text3 }], isError: true };
|
|
30445
30672
|
}
|
|
@@ -30451,19 +30678,19 @@ function registerCodeContext(server) {
|
|
|
30451
30678
|
title: "Code Context",
|
|
30452
30679
|
description: "Persistent codebase context engine. One consolidated tool to avoid MCP bloat. Actions: index, search, trace, blast_radius, stats.",
|
|
30453
30680
|
inputSchema: {
|
|
30454
|
-
action:
|
|
30455
|
-
project_root:
|
|
30456
|
-
query:
|
|
30457
|
-
symbol:
|
|
30458
|
-
file_path:
|
|
30459
|
-
force:
|
|
30460
|
-
limit:
|
|
30461
|
-
offset:
|
|
30462
|
-
refresh_index:
|
|
30463
|
-
languages:
|
|
30464
|
-
paths:
|
|
30465
|
-
depth:
|
|
30466
|
-
max_files:
|
|
30681
|
+
action: z89.enum(["index", "search", "trace", "blast_radius", "stats"]).describe("Code context operation"),
|
|
30682
|
+
project_root: z89.string().optional().describe("Repository root. Defaults to current working directory."),
|
|
30683
|
+
query: z89.string().optional().describe("Search query for action=search"),
|
|
30684
|
+
symbol: z89.string().optional().describe("Symbol/function/class/type name for trace or blast_radius"),
|
|
30685
|
+
file_path: z89.string().optional().describe("File path for blast_radius"),
|
|
30686
|
+
force: z89.boolean().optional().describe("Force rebuild before answering"),
|
|
30687
|
+
limit: z89.coerce.number().int().min(1).max(100).optional().describe("Max results"),
|
|
30688
|
+
offset: z89.coerce.number().int().min(0).optional().describe("Search pagination offset"),
|
|
30689
|
+
refresh_index: z89.boolean().optional().describe("Refresh/rebuild index before searching"),
|
|
30690
|
+
languages: z89.array(z89.string()).optional().describe('Language filters, e.g. ["python", "typescript"]'),
|
|
30691
|
+
paths: z89.array(z89.string()).optional().describe("Path/glob filters"),
|
|
30692
|
+
depth: z89.coerce.number().int().min(1).max(5).optional().describe("Dependent traversal depth for blast_radius"),
|
|
30693
|
+
max_files: z89.coerce.number().int().min(1).max(1e4).optional().describe("Max code files to index")
|
|
30467
30694
|
}
|
|
30468
30695
|
}, async ({ action, project_root, query, symbol, file_path, force, limit, offset, refresh_index, languages, paths, depth, max_files }) => {
|
|
30469
30696
|
const opts = { projectRoot: project_root, force, maxFiles: max_files };
|
|
@@ -30514,7 +30741,7 @@ var init_code_context = __esm({
|
|
|
30514
30741
|
});
|
|
30515
30742
|
|
|
30516
30743
|
// src/mcp/tools/support-inbox.ts
|
|
30517
|
-
import { z as
|
|
30744
|
+
import { z as z90 } from "zod";
|
|
30518
30745
|
function adminToken() {
|
|
30519
30746
|
return process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN;
|
|
30520
30747
|
}
|
|
@@ -30553,9 +30780,9 @@ function registerListBugReports(server) {
|
|
|
30553
30780
|
title: "List Bug Reports",
|
|
30554
30781
|
description: "AskExe-internal only: list incoming customer bug reports from the support inbox.",
|
|
30555
30782
|
inputSchema: {
|
|
30556
|
-
status:
|
|
30557
|
-
severity:
|
|
30558
|
-
limit:
|
|
30783
|
+
status: z90.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("open"),
|
|
30784
|
+
severity: z90.enum(["p0", "p1", "p2", "p3"]).optional(),
|
|
30785
|
+
limit: z90.number().int().min(1).max(100).default(25)
|
|
30559
30786
|
}
|
|
30560
30787
|
},
|
|
30561
30788
|
async ({ status, severity, limit }) => {
|
|
@@ -30574,7 +30801,7 @@ function registerGetBugReport(server) {
|
|
|
30574
30801
|
{
|
|
30575
30802
|
title: "Get Bug Report",
|
|
30576
30803
|
description: "AskExe-internal only: fetch one customer bug report with full markdown payload.",
|
|
30577
|
-
inputSchema: { id:
|
|
30804
|
+
inputSchema: { id: z90.string().min(8) }
|
|
30578
30805
|
},
|
|
30579
30806
|
async ({ id }) => {
|
|
30580
30807
|
const data = await requestJson(`${endpoint()}/${encodeURIComponent(id)}`);
|
|
@@ -30589,12 +30816,12 @@ function registerTriageBugReport(server) {
|
|
|
30589
30816
|
title: "Triage Bug Report",
|
|
30590
30817
|
description: "AskExe-internal only: update bug report status and link task/commit/release metadata.",
|
|
30591
30818
|
inputSchema: {
|
|
30592
|
-
id:
|
|
30819
|
+
id: z90.string().min(8),
|
|
30593
30820
|
status: STATUS.optional(),
|
|
30594
|
-
triage_notes:
|
|
30595
|
-
linked_task_id:
|
|
30596
|
-
linked_commit:
|
|
30597
|
-
fixed_version:
|
|
30821
|
+
triage_notes: z90.string().optional(),
|
|
30822
|
+
linked_task_id: z90.string().optional(),
|
|
30823
|
+
linked_commit: z90.string().optional(),
|
|
30824
|
+
fixed_version: z90.string().optional()
|
|
30598
30825
|
}
|
|
30599
30826
|
},
|
|
30600
30827
|
async ({ id, status, triage_notes, linked_task_id, linked_commit, fixed_version }) => {
|
|
@@ -30611,7 +30838,7 @@ var init_support_inbox = __esm({
|
|
|
30611
30838
|
"src/mcp/tools/support-inbox.ts"() {
|
|
30612
30839
|
"use strict";
|
|
30613
30840
|
DEFAULT_ENDPOINT = "https://askexe.com/admin/support/bug-reports";
|
|
30614
|
-
STATUS =
|
|
30841
|
+
STATUS = z90.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
|
|
30615
30842
|
}
|
|
30616
30843
|
});
|
|
30617
30844
|
|
|
@@ -30685,6 +30912,8 @@ var init_tool_gates = __esm({
|
|
|
30685
30912
|
registerStoreDecision: "core",
|
|
30686
30913
|
registerGetDecision: "core",
|
|
30687
30914
|
registerCreateBugReport: "core",
|
|
30915
|
+
registerGetSessionEvents: "core",
|
|
30916
|
+
registerGetLastAssistantResponse: "core",
|
|
30688
30917
|
registerCodeContext: "graph-read",
|
|
30689
30918
|
registerListBugReports: "admin",
|
|
30690
30919
|
registerGetBugReport: "admin",
|
|
@@ -30940,6 +31169,8 @@ function registerAllTools(server) {
|
|
|
30940
31169
|
gate("registerStoreDecision", registerStoreDecision);
|
|
30941
31170
|
gate("registerGetDecision", registerGetDecision);
|
|
30942
31171
|
gate("registerCreateBugReport", registerCreateBugReport);
|
|
31172
|
+
gate("registerGetSessionEvents", registerGetSessionEvents);
|
|
31173
|
+
gate("registerGetLastAssistantResponse", registerGetLastAssistantResponse);
|
|
30943
31174
|
gate("registerCodeContext", registerCodeContext);
|
|
30944
31175
|
if (process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN) {
|
|
30945
31176
|
gate("registerListBugReports", registerListBugReports);
|
|
@@ -31085,6 +31316,7 @@ var init_register_tools = __esm({
|
|
|
31085
31316
|
init_activate_license();
|
|
31086
31317
|
init_query_company_brain();
|
|
31087
31318
|
init_create_bug_report();
|
|
31319
|
+
init_get_session_events();
|
|
31088
31320
|
init_code_context();
|
|
31089
31321
|
init_support_inbox();
|
|
31090
31322
|
init_tool_gates();
|
|
@@ -32152,7 +32384,7 @@ init_daemon_auth();
|
|
|
32152
32384
|
import os24 from "os";
|
|
32153
32385
|
import net2 from "net";
|
|
32154
32386
|
import { createServer as createHttpServer } from "http";
|
|
32155
|
-
import { randomUUID as
|
|
32387
|
+
import { randomUUID as randomUUID10 } from "crypto";
|
|
32156
32388
|
import { writeFileSync as writeFileSync28, unlinkSync as unlinkSync14, mkdirSync as mkdirSync24, existsSync as existsSync46, readFileSync as readFileSync39, chmodSync as chmodSync2 } from "fs";
|
|
32157
32389
|
import path59 from "path";
|
|
32158
32390
|
|
|
@@ -32542,7 +32774,7 @@ async function handleBatchWriteMemory(socket, requestId, entries) {
|
|
|
32542
32774
|
}
|
|
32543
32775
|
}
|
|
32544
32776
|
async function writeMemoryRecord(entry) {
|
|
32545
|
-
const id =
|
|
32777
|
+
const id = randomUUID10();
|
|
32546
32778
|
const now2 = entry.timestamp || (/* @__PURE__ */ new Date()).toISOString();
|
|
32547
32779
|
const governed = governMemoryRecord({
|
|
32548
32780
|
id,
|
|
@@ -32955,7 +33187,7 @@ async function startMcpHttpServer() {
|
|
|
32955
33187
|
sessionLastSeen.set(sessionId, Date.now());
|
|
32956
33188
|
} else if (!sessionId && req.method === "POST" && isInitializeRequest(parsedBody)) {
|
|
32957
33189
|
transport = new StreamableHTTPServerTransport({
|
|
32958
|
-
sessionIdGenerator: () =>
|
|
33190
|
+
sessionIdGenerator: () => randomUUID10(),
|
|
32959
33191
|
onsessioninitialized: (sid) => {
|
|
32960
33192
|
transports.set(sid, transport);
|
|
32961
33193
|
sessionLastSeen.set(sid, Date.now());
|
|
@@ -2435,6 +2435,33 @@ async function ensureSchema() {
|
|
|
2435
2435
|
CREATE INDEX IF NOT EXISTS idx_chat_history_session
|
|
2436
2436
|
ON chat_history(session_id, id);
|
|
2437
2437
|
`);
|
|
2438
|
+
await client.executeMultiple(`
|
|
2439
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
2440
|
+
id TEXT PRIMARY KEY,
|
|
2441
|
+
agent_id TEXT NOT NULL,
|
|
2442
|
+
agent_role TEXT NOT NULL,
|
|
2443
|
+
session_id TEXT NOT NULL,
|
|
2444
|
+
session_scope TEXT,
|
|
2445
|
+
project_name TEXT NOT NULL,
|
|
2446
|
+
event_index INTEGER NOT NULL,
|
|
2447
|
+
event_type TEXT NOT NULL,
|
|
2448
|
+
tool_name TEXT,
|
|
2449
|
+
tool_use_id TEXT,
|
|
2450
|
+
content TEXT NOT NULL,
|
|
2451
|
+
payload_json TEXT,
|
|
2452
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
2453
|
+
created_at TEXT NOT NULL
|
|
2454
|
+
);
|
|
2455
|
+
|
|
2456
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
2457
|
+
ON session_events(agent_id, created_at DESC);
|
|
2458
|
+
|
|
2459
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
2460
|
+
ON session_events(session_id, event_index);
|
|
2461
|
+
|
|
2462
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
2463
|
+
ON session_events(session_scope, agent_id, created_at DESC);
|
|
2464
|
+
`);
|
|
2438
2465
|
await client.executeMultiple(`
|
|
2439
2466
|
CREATE TABLE IF NOT EXISTS workspaces (
|
|
2440
2467
|
id TEXT PRIMARY KEY,
|
package/dist/lib/schedules.js
CHANGED
|
@@ -2221,6 +2221,33 @@ async function ensureSchema() {
|
|
|
2221
2221
|
CREATE INDEX IF NOT EXISTS idx_chat_history_session
|
|
2222
2222
|
ON chat_history(session_id, id);
|
|
2223
2223
|
`);
|
|
2224
|
+
await client.executeMultiple(`
|
|
2225
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
2226
|
+
id TEXT PRIMARY KEY,
|
|
2227
|
+
agent_id TEXT NOT NULL,
|
|
2228
|
+
agent_role TEXT NOT NULL,
|
|
2229
|
+
session_id TEXT NOT NULL,
|
|
2230
|
+
session_scope TEXT,
|
|
2231
|
+
project_name TEXT NOT NULL,
|
|
2232
|
+
event_index INTEGER NOT NULL,
|
|
2233
|
+
event_type TEXT NOT NULL,
|
|
2234
|
+
tool_name TEXT,
|
|
2235
|
+
tool_use_id TEXT,
|
|
2236
|
+
content TEXT NOT NULL,
|
|
2237
|
+
payload_json TEXT,
|
|
2238
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
2239
|
+
created_at TEXT NOT NULL
|
|
2240
|
+
);
|
|
2241
|
+
|
|
2242
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
2243
|
+
ON session_events(agent_id, created_at DESC);
|
|
2244
|
+
|
|
2245
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
2246
|
+
ON session_events(session_id, event_index);
|
|
2247
|
+
|
|
2248
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
2249
|
+
ON session_events(session_scope, agent_id, created_at DESC);
|
|
2250
|
+
`);
|
|
2224
2251
|
await client.executeMultiple(`
|
|
2225
2252
|
CREATE TABLE IF NOT EXISTS workspaces (
|
|
2226
2253
|
id TEXT PRIMARY KEY,
|
package/dist/lib/store.js
CHANGED
|
@@ -2221,6 +2221,33 @@ async function ensureSchema() {
|
|
|
2221
2221
|
CREATE INDEX IF NOT EXISTS idx_chat_history_session
|
|
2222
2222
|
ON chat_history(session_id, id);
|
|
2223
2223
|
`);
|
|
2224
|
+
await client.executeMultiple(`
|
|
2225
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
2226
|
+
id TEXT PRIMARY KEY,
|
|
2227
|
+
agent_id TEXT NOT NULL,
|
|
2228
|
+
agent_role TEXT NOT NULL,
|
|
2229
|
+
session_id TEXT NOT NULL,
|
|
2230
|
+
session_scope TEXT,
|
|
2231
|
+
project_name TEXT NOT NULL,
|
|
2232
|
+
event_index INTEGER NOT NULL,
|
|
2233
|
+
event_type TEXT NOT NULL,
|
|
2234
|
+
tool_name TEXT,
|
|
2235
|
+
tool_use_id TEXT,
|
|
2236
|
+
content TEXT NOT NULL,
|
|
2237
|
+
payload_json TEXT,
|
|
2238
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
2239
|
+
created_at TEXT NOT NULL
|
|
2240
|
+
);
|
|
2241
|
+
|
|
2242
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
2243
|
+
ON session_events(agent_id, created_at DESC);
|
|
2244
|
+
|
|
2245
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
2246
|
+
ON session_events(session_id, event_index);
|
|
2247
|
+
|
|
2248
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
2249
|
+
ON session_events(session_scope, agent_id, created_at DESC);
|
|
2250
|
+
`);
|
|
2224
2251
|
await client.executeMultiple(`
|
|
2225
2252
|
CREATE TABLE IF NOT EXISTS workspaces (
|
|
2226
2253
|
id TEXT PRIMARY KEY,
|