@askexenow/exe-os 0.9.81 → 0.9.82
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 +138 -5
- package/dist/bin/cli.js +7 -6
- package/dist/bin/exe-gateway.js +123 -10
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/stack-update.js +163 -41
- package/dist/lib/exe-daemon.js +167 -76
- package/dist/mcp/server.js +159 -76
- package/package.json +1 -1
- package/stack.release.json +5 -4
package/dist/mcp/server.js
CHANGED
|
@@ -17944,7 +17944,7 @@ init_config();
|
|
|
17944
17944
|
import { z as z39 } from "zod";
|
|
17945
17945
|
var FETCH_TIMEOUT_MS = 1e4;
|
|
17946
17946
|
var QUERY_SCOPE = z39.enum(["raw", "crm", "wiki", "memory", "gateway", "all"]);
|
|
17947
|
-
var QUERY_ACTION = z39.enum(["search", "list_sources"]);
|
|
17947
|
+
var QUERY_ACTION = z39.enum(["search", "list_sources", "sql"]);
|
|
17948
17948
|
var LOCAL_GATEWAY_HTTP_HOSTS = /^(localhost|127\.0\.0\.1|::1|exe-gateway|gateway)$/i;
|
|
17949
17949
|
function assertSecureGatewayUrlForToken(gatewayUrl, authToken) {
|
|
17950
17950
|
if (!authToken) return;
|
|
@@ -17979,14 +17979,15 @@ function registerQueryCompanyBrain(server2) {
|
|
|
17979
17979
|
title: "Query Company Brain",
|
|
17980
17980
|
description: "Search the Company Brain \u2014 queries across all data (raw events, wiki docs, agent memories, gateway messages).",
|
|
17981
17981
|
inputSchema: {
|
|
17982
|
-
action: QUERY_ACTION.default("search").describe("search = search exe-db; list_sources = list available
|
|
17982
|
+
action: QUERY_ACTION.default("search").describe("search = search exe-db; list_sources = list available sources; sql = run read-only SQL through gateway"),
|
|
17983
17983
|
query: z39.string().optional().describe("Search text. Required for action=search."),
|
|
17984
|
+
sql: z39.string().optional().describe("Read-only SELECT/WITH SQL. Required for action=sql."),
|
|
17984
17985
|
scope: QUERY_SCOPE.default("all").describe("Which data scope to search/read (raw, crm, wiki, memory, gateway, all)"),
|
|
17985
17986
|
source: z39.string().optional().describe("Filter raw events by source (shopify, asana, etc.)"),
|
|
17986
17987
|
limit: z39.coerce.number().int().min(1).max(100).default(20).describe("Max results per scope")
|
|
17987
17988
|
}
|
|
17988
17989
|
},
|
|
17989
|
-
async ({ action, query, scope, source, limit }) => {
|
|
17990
|
+
async ({ action, query, sql, scope, source, limit }) => {
|
|
17990
17991
|
const resolvedAction = action ?? "search";
|
|
17991
17992
|
if (resolvedAction === "search" && !query?.trim()) {
|
|
17992
17993
|
return {
|
|
@@ -17994,6 +17995,12 @@ function registerQueryCompanyBrain(server2) {
|
|
|
17994
17995
|
isError: true
|
|
17995
17996
|
};
|
|
17996
17997
|
}
|
|
17998
|
+
if (resolvedAction === "sql" && !sql?.trim()) {
|
|
17999
|
+
return {
|
|
18000
|
+
content: [{ type: "text", text: "sql is required when action=sql" }],
|
|
18001
|
+
isError: true
|
|
18002
|
+
};
|
|
18003
|
+
}
|
|
17997
18004
|
const config2 = await loadConfig();
|
|
17998
18005
|
const gatewayUrl = config2.gateway?.url || process.env.EXE_GATEWAY_URL;
|
|
17999
18006
|
const authToken = config2.gateway?.authToken || process.env.EXE_GATEWAY_QUERY_AUTH_TOKEN || process.env.EXE_COMPANY_BRAIN_AUTH_TOKEN || process.env.EXE_GATEWAY_AUTH_TOKEN;
|
|
@@ -18022,7 +18029,10 @@ function registerQueryCompanyBrain(server2) {
|
|
|
18022
18029
|
}
|
|
18023
18030
|
let url;
|
|
18024
18031
|
try {
|
|
18025
|
-
url = new URL(
|
|
18032
|
+
url = new URL(
|
|
18033
|
+
resolvedAction === "list_sources" ? "/query/sources" : resolvedAction === "sql" ? "/query/sql" : "/query",
|
|
18034
|
+
gatewayUrl
|
|
18035
|
+
);
|
|
18026
18036
|
} catch (err) {
|
|
18027
18037
|
return {
|
|
18028
18038
|
content: [
|
|
@@ -18042,7 +18052,12 @@ function registerQueryCompanyBrain(server2) {
|
|
|
18042
18052
|
}
|
|
18043
18053
|
try {
|
|
18044
18054
|
const response = await fetch(url.toString(), {
|
|
18045
|
-
|
|
18055
|
+
method: resolvedAction === "sql" ? "POST" : "GET",
|
|
18056
|
+
headers: {
|
|
18057
|
+
...authToken ? { Authorization: `Bearer ${authToken}` } : {},
|
|
18058
|
+
...resolvedAction === "sql" ? { "Content-Type": "application/json" } : {}
|
|
18059
|
+
},
|
|
18060
|
+
body: resolvedAction === "sql" ? JSON.stringify({ sql: sql.trim(), max_rows: limit }) : void 0,
|
|
18046
18061
|
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS)
|
|
18047
18062
|
});
|
|
18048
18063
|
if (!response.ok) {
|
|
@@ -18552,10 +18567,10 @@ function registerExportGraph(server2) {
|
|
|
18552
18567
|
format: z44.enum(["html", "markdown"]).default("markdown").describe("Export format: markdown (inline) or html (file)")
|
|
18553
18568
|
}
|
|
18554
18569
|
},
|
|
18555
|
-
async ({ format }) => {
|
|
18570
|
+
async ({ format: format2 }) => {
|
|
18556
18571
|
try {
|
|
18557
18572
|
const client = getClient();
|
|
18558
|
-
if (
|
|
18573
|
+
if (format2 === "markdown") {
|
|
18559
18574
|
const report = await generateGraphReport(client);
|
|
18560
18575
|
return {
|
|
18561
18576
|
content: [{ type: "text", text: report }]
|
|
@@ -27049,23 +27064,89 @@ function registerRawData(server2) {
|
|
|
27049
27064
|
});
|
|
27050
27065
|
}
|
|
27051
27066
|
|
|
27067
|
+
// src/mcp/tools/company-actions.ts
|
|
27068
|
+
init_config();
|
|
27069
|
+
import { z as z87 } from "zod";
|
|
27070
|
+
var FETCH_TIMEOUT_MS5 = 15e3;
|
|
27071
|
+
var ACTION = z87.enum(["list_connectors", "describe_connector", "preview", "execute", "list_runs", "get_run"]);
|
|
27072
|
+
function format(payload) {
|
|
27073
|
+
return ["# Company Actions", "", JSON.stringify(payload, null, 2)].join("\n");
|
|
27074
|
+
}
|
|
27075
|
+
function registerCompanyActions(server2) {
|
|
27076
|
+
server2.registerTool(
|
|
27077
|
+
"company_actions",
|
|
27078
|
+
{
|
|
27079
|
+
title: "Company Actions",
|
|
27080
|
+
description: "Preview and execute external connector actions (Asana, WhatsApp) through exe-gateway with audit/safety gates.",
|
|
27081
|
+
inputSchema: {
|
|
27082
|
+
action: ACTION.describe("list_connectors, describe_connector, preview, execute, list_runs, get_run"),
|
|
27083
|
+
connector: z87.string().optional().describe("Connector to use, e.g. asana, whatsapp, airtable, notion"),
|
|
27084
|
+
connector_ref: z87.string().optional().describe("Exact connector ref from list_connectors when connector names overlap"),
|
|
27085
|
+
operation: z87.string().optional().describe("Connector operation, e.g. create_task or send_message"),
|
|
27086
|
+
payload: z87.record(z87.string(), z87.unknown()).optional().describe("Operation payload"),
|
|
27087
|
+
idempotency_key: z87.string().optional().describe("Stable key to prevent duplicate execution"),
|
|
27088
|
+
confirm_token: z87.string().optional().describe("Optional future approval token"),
|
|
27089
|
+
run_id: z87.string().optional().describe("Run id for get_run")
|
|
27090
|
+
}
|
|
27091
|
+
},
|
|
27092
|
+
async (input) => {
|
|
27093
|
+
const config2 = await loadConfig();
|
|
27094
|
+
const gatewayUrl = config2.gateway?.url || process.env.EXE_GATEWAY_URL;
|
|
27095
|
+
const authToken = config2.gateway?.authToken || process.env.EXE_GATEWAY_QUERY_AUTH_TOKEN || process.env.EXE_COMPANY_BRAIN_AUTH_TOKEN || process.env.EXE_GATEWAY_AUTH_TOKEN;
|
|
27096
|
+
if (!gatewayUrl) {
|
|
27097
|
+
return { content: [{ type: "text", text: "Company Actions not configured. Set gateway.url in ~/.exe-os/config.json" }] };
|
|
27098
|
+
}
|
|
27099
|
+
try {
|
|
27100
|
+
assertSecureGatewayUrlForToken(gatewayUrl, authToken);
|
|
27101
|
+
} catch (err) {
|
|
27102
|
+
return { content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }], isError: true };
|
|
27103
|
+
}
|
|
27104
|
+
let url;
|
|
27105
|
+
try {
|
|
27106
|
+
url = new URL("/actions", gatewayUrl);
|
|
27107
|
+
} catch (err) {
|
|
27108
|
+
return { content: [{ type: "text", text: `Company Actions not configured. Invalid gateway.url: ${err instanceof Error ? err.message : String(err)}` }], isError: true };
|
|
27109
|
+
}
|
|
27110
|
+
try {
|
|
27111
|
+
const response = await fetch(url.toString(), {
|
|
27112
|
+
method: "POST",
|
|
27113
|
+
headers: {
|
|
27114
|
+
"Content-Type": "application/json",
|
|
27115
|
+
...authToken ? { Authorization: `Bearer ${authToken}` } : {}
|
|
27116
|
+
},
|
|
27117
|
+
body: JSON.stringify(input),
|
|
27118
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS5)
|
|
27119
|
+
});
|
|
27120
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
27121
|
+
const payload = contentType.includes("application/json") ? await response.json() : await response.text();
|
|
27122
|
+
return {
|
|
27123
|
+
content: [{ type: "text", text: response.ok ? format(payload) : `Company Actions failed (${response.status}): ${typeof payload === "string" ? payload : JSON.stringify(payload)}` }],
|
|
27124
|
+
...response.ok ? {} : { isError: true }
|
|
27125
|
+
};
|
|
27126
|
+
} catch {
|
|
27127
|
+
return { content: [{ type: "text", text: `Gateway unreachable at ${url.origin}` }], isError: true };
|
|
27128
|
+
}
|
|
27129
|
+
}
|
|
27130
|
+
);
|
|
27131
|
+
}
|
|
27132
|
+
|
|
27052
27133
|
// src/mcp/tools/create-bug-report.ts
|
|
27053
27134
|
init_embedder();
|
|
27054
27135
|
init_active_agent();
|
|
27055
27136
|
init_config();
|
|
27056
27137
|
init_license();
|
|
27057
27138
|
init_store();
|
|
27058
|
-
import { z as
|
|
27139
|
+
import { z as z88 } from "zod";
|
|
27059
27140
|
import crypto18 from "crypto";
|
|
27060
27141
|
import { mkdir as mkdir6, writeFile as writeFile7 } from "fs/promises";
|
|
27061
27142
|
import path49 from "path";
|
|
27062
|
-
var CLASSIFICATION =
|
|
27143
|
+
var CLASSIFICATION = z88.enum([
|
|
27063
27144
|
"upstream_bug",
|
|
27064
27145
|
"customer_customization",
|
|
27065
27146
|
"emergency_hotfix",
|
|
27066
27147
|
"unclear"
|
|
27067
27148
|
]);
|
|
27068
|
-
var SEVERITY =
|
|
27149
|
+
var SEVERITY = z88.enum(["p0", "p1", "p2", "p3"]);
|
|
27069
27150
|
function slugify2(input) {
|
|
27070
27151
|
return input.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80) || "bug-report";
|
|
27071
27152
|
}
|
|
@@ -27145,22 +27226,22 @@ function registerCreateBugReport(server2) {
|
|
|
27145
27226
|
title: "Create Bug Report",
|
|
27146
27227
|
description: "Classify and file an exe-os issue as upstream_bug, customer_customization, emergency_hotfix, or unclear. Writes a local report, stores memory, and optionally sends to AskExe support when a support endpoint is configured.",
|
|
27147
27228
|
inputSchema: {
|
|
27148
|
-
title:
|
|
27229
|
+
title: z88.string().min(3).describe("Short descriptive title"),
|
|
27149
27230
|
classification: CLASSIFICATION.describe(
|
|
27150
27231
|
"upstream_bug = platform defect; customer_customization = local preference; emergency_hotfix = temporary local patch; unclear = needs maintainer triage"
|
|
27151
27232
|
),
|
|
27152
27233
|
severity: SEVERITY.default("p2").describe("p0 critical \u2192 p3 low"),
|
|
27153
|
-
summary:
|
|
27154
|
-
customer_impact:
|
|
27155
|
-
reproduction_steps:
|
|
27156
|
-
expected:
|
|
27157
|
-
actual:
|
|
27158
|
-
files_changed:
|
|
27159
|
-
workaround:
|
|
27160
|
-
local_patch_diff:
|
|
27161
|
-
package_version:
|
|
27162
|
-
project_name:
|
|
27163
|
-
send_upstream:
|
|
27234
|
+
summary: z88.string().min(10).describe("What happened and why it matters"),
|
|
27235
|
+
customer_impact: z88.string().optional().describe("How this affects the customer/founder"),
|
|
27236
|
+
reproduction_steps: z88.array(z88.string()).optional().describe("Steps to reproduce"),
|
|
27237
|
+
expected: z88.string().optional().describe("Expected behavior"),
|
|
27238
|
+
actual: z88.string().optional().describe("Actual behavior"),
|
|
27239
|
+
files_changed: z88.array(z88.string()).optional().describe("Files changed or suspected"),
|
|
27240
|
+
workaround: z88.string().optional().describe("Temporary local workaround/hotfix, if any"),
|
|
27241
|
+
local_patch_diff: z88.string().optional().describe("Small local diff or patch summary"),
|
|
27242
|
+
package_version: z88.string().optional().describe("Installed @askexenow/exe-os version"),
|
|
27243
|
+
project_name: z88.string().optional().describe("Project/customer context"),
|
|
27244
|
+
send_upstream: z88.boolean().default(true).describe("Attempt to POST to configured AskExe support endpoint")
|
|
27164
27245
|
}
|
|
27165
27246
|
},
|
|
27166
27247
|
async ({
|
|
@@ -27269,7 +27350,7 @@ Upstream status: ${upstreamStatus}`
|
|
|
27269
27350
|
}
|
|
27270
27351
|
|
|
27271
27352
|
// src/mcp/tools/support.ts
|
|
27272
|
-
import { z as
|
|
27353
|
+
import { z as z89 } from "zod";
|
|
27273
27354
|
|
|
27274
27355
|
// src/bin/exe-support.ts
|
|
27275
27356
|
init_config();
|
|
@@ -27532,7 +27613,7 @@ function registerSupportTools(server2) {
|
|
|
27532
27613
|
title: "Support Test",
|
|
27533
27614
|
description: "End-to-end support intake smoke test. Files a clearly marked test report upstream and auto-closes it on AskExe machines with admin credentials.",
|
|
27534
27615
|
inputSchema: {
|
|
27535
|
-
project:
|
|
27616
|
+
project: z89.string().default("support-smoke").describe("Customer/project name, e.g. hygo")
|
|
27536
27617
|
}
|
|
27537
27618
|
},
|
|
27538
27619
|
async ({ project }) => {
|
|
@@ -27549,7 +27630,7 @@ function registerSupportTools(server2) {
|
|
|
27549
27630
|
// src/mcp/tools/cli-parity.ts
|
|
27550
27631
|
import { execFile as execFile2 } from "child_process";
|
|
27551
27632
|
import { promisify as promisify2 } from "util";
|
|
27552
|
-
import { z as
|
|
27633
|
+
import { z as z90 } from "zod";
|
|
27553
27634
|
|
|
27554
27635
|
// src/bin/exe-status.ts
|
|
27555
27636
|
init_employees();
|
|
@@ -28055,12 +28136,12 @@ function registerCliParityTools(server2) {
|
|
|
28055
28136
|
title: "Doctor",
|
|
28056
28137
|
description: "Run exe-os doctor audit. Defaults to read-only diagnostics; optional dry-run/fix flags mirror CLI.",
|
|
28057
28138
|
inputSchema: {
|
|
28058
|
-
agent:
|
|
28059
|
-
project:
|
|
28060
|
-
verbose:
|
|
28061
|
-
conflicts:
|
|
28062
|
-
dry_run:
|
|
28063
|
-
fix:
|
|
28139
|
+
agent: z90.string().optional(),
|
|
28140
|
+
project: z90.string().optional(),
|
|
28141
|
+
verbose: z90.boolean().default(false),
|
|
28142
|
+
conflicts: z90.boolean().default(false),
|
|
28143
|
+
dry_run: z90.boolean().default(false),
|
|
28144
|
+
fix: z90.boolean().default(false)
|
|
28064
28145
|
}
|
|
28065
28146
|
}, async ({ agent, project, verbose, conflicts, dry_run, fix }) => {
|
|
28066
28147
|
const args = [];
|
|
@@ -28077,9 +28158,9 @@ function registerCliParityTools(server2) {
|
|
|
28077
28158
|
title: "Rename Employee",
|
|
28078
28159
|
description: "Rename an employee using the same path as `exe-os rename <old> <new>`. Use for customer roster/identity renames.",
|
|
28079
28160
|
inputSchema: {
|
|
28080
|
-
old_name:
|
|
28081
|
-
new_name:
|
|
28082
|
-
dry_run:
|
|
28161
|
+
old_name: z90.string().min(1),
|
|
28162
|
+
new_name: z90.string().min(1),
|
|
28163
|
+
dry_run: z90.boolean().default(false)
|
|
28083
28164
|
}
|
|
28084
28165
|
}, async ({ old_name, new_name, dry_run }) => {
|
|
28085
28166
|
if (dry_run) {
|
|
@@ -28092,7 +28173,7 @@ function registerCliParityTools(server2) {
|
|
|
28092
28173
|
server2.registerTool("status_brief", {
|
|
28093
28174
|
title: "Status Brief",
|
|
28094
28175
|
description: "Return current employee/tmux status. Mirrors `exe-status` and supports optional deep view for one employee.",
|
|
28095
|
-
inputSchema: { employee:
|
|
28176
|
+
inputSchema: { employee: z90.string().optional() }
|
|
28096
28177
|
}, async ({ employee }) => {
|
|
28097
28178
|
const text3 = await status(employee);
|
|
28098
28179
|
return result2(text3, { ok: true, employee: employee ?? null });
|
|
@@ -28100,7 +28181,7 @@ function registerCliParityTools(server2) {
|
|
|
28100
28181
|
server2.registerTool("pending_work_summary", {
|
|
28101
28182
|
title: "Pending Work Summary",
|
|
28102
28183
|
description: "Return pending reviews, messages, and notifications using the same summaries as the CLI tools.",
|
|
28103
|
-
inputSchema: { agent:
|
|
28184
|
+
inputSchema: { agent: z90.string().optional() }
|
|
28104
28185
|
}, async ({ agent }) => {
|
|
28105
28186
|
const parts = await Promise.all([
|
|
28106
28187
|
runCommand("exe-pending-reviews", [], 3e4),
|
|
@@ -28121,7 +28202,7 @@ function registerCliParityTools(server2) {
|
|
|
28121
28202
|
server2.registerTool("key_rotation_preflight", {
|
|
28122
28203
|
title: "Key Rotation Preflight",
|
|
28123
28204
|
description: "Dry-run key rotation/update preflight. No destructive changes.",
|
|
28124
|
-
inputSchema: { mode:
|
|
28205
|
+
inputSchema: { mode: z90.enum(["rotate", "update"]).default("rotate") }
|
|
28125
28206
|
}, async ({ mode }) => {
|
|
28126
28207
|
const out = await runCommand("exe-os", ["key", mode, "--dry-run"], 6e4);
|
|
28127
28208
|
return result2(out.text, { ok: out.ok, command: out.command, mode }, !out.ok);
|
|
@@ -28140,11 +28221,11 @@ function registerCliParityTools(server2) {
|
|
|
28140
28221
|
title: "Stack Update Check",
|
|
28141
28222
|
description: "Plan/check a customer stack update without applying Docker changes. Mirrors `exe-os stack-update --check`.",
|
|
28142
28223
|
inputSchema: {
|
|
28143
|
-
target:
|
|
28144
|
-
manifest:
|
|
28145
|
-
compose_file:
|
|
28146
|
-
env_file:
|
|
28147
|
-
deployment_persona:
|
|
28224
|
+
target: z90.string().optional(),
|
|
28225
|
+
manifest: z90.string().optional(),
|
|
28226
|
+
compose_file: z90.string().optional(),
|
|
28227
|
+
env_file: z90.string().optional(),
|
|
28228
|
+
deployment_persona: z90.enum(["customer", "askexe-control-plane"]).default("customer")
|
|
28148
28229
|
}
|
|
28149
28230
|
}, async ({ target, manifest, compose_file, env_file, deployment_persona }) => {
|
|
28150
28231
|
const args = ["stack-update", "--check", "--deployment-persona", deployment_persona];
|
|
@@ -28168,7 +28249,7 @@ function registerCliParityTools(server2) {
|
|
|
28168
28249
|
// src/mcp/tools/get-session-events.ts
|
|
28169
28250
|
init_active_agent();
|
|
28170
28251
|
init_fast_db_init();
|
|
28171
|
-
import { z as
|
|
28252
|
+
import { z as z91 } from "zod";
|
|
28172
28253
|
|
|
28173
28254
|
// src/lib/session-events.ts
|
|
28174
28255
|
init_task_scope();
|
|
@@ -28255,7 +28336,7 @@ async function listRecentSessionEvents(client, options) {
|
|
|
28255
28336
|
}
|
|
28256
28337
|
|
|
28257
28338
|
// src/mcp/tools/get-session-events.ts
|
|
28258
|
-
var EVENT_TYPE =
|
|
28339
|
+
var EVENT_TYPE = z91.enum([
|
|
28259
28340
|
"user_prompt",
|
|
28260
28341
|
"assistant_response",
|
|
28261
28342
|
"tool_call",
|
|
@@ -28285,11 +28366,11 @@ function registerGetSessionEvents(server2) {
|
|
|
28285
28366
|
title: "Get Session Events",
|
|
28286
28367
|
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.",
|
|
28287
28368
|
inputSchema: {
|
|
28288
|
-
agent_id:
|
|
28289
|
-
session_id:
|
|
28369
|
+
agent_id: z91.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
|
|
28370
|
+
session_id: z91.string().optional().describe("Optional exact runtime session id."),
|
|
28290
28371
|
event_type: EVENT_TYPE.optional().describe("Filter to one event type."),
|
|
28291
|
-
project_name:
|
|
28292
|
-
limit:
|
|
28372
|
+
project_name: z91.string().optional().describe("Optional project filter. Pass 'all' for all projects."),
|
|
28373
|
+
limit: z91.number().int().min(1).max(100).default(20).describe("Number of events to return.")
|
|
28293
28374
|
}
|
|
28294
28375
|
},
|
|
28295
28376
|
async ({ agent_id, session_id, event_type, project_name, limit }) => {
|
|
@@ -28325,8 +28406,8 @@ function registerGetLastAssistantResponse(server2) {
|
|
|
28325
28406
|
title: "Get Last Assistant Response",
|
|
28326
28407
|
description: "Return the exact last assistant response for an agent from the session event journal. Use for 'what was the last thing you said?'",
|
|
28327
28408
|
inputSchema: {
|
|
28328
|
-
agent_id:
|
|
28329
|
-
project_name:
|
|
28409
|
+
agent_id: z91.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
|
|
28410
|
+
project_name: z91.string().optional().describe("Optional project filter. Pass 'all' for all projects.")
|
|
28330
28411
|
}
|
|
28331
28412
|
},
|
|
28332
28413
|
async ({ agent_id, project_name }) => {
|
|
@@ -28356,7 +28437,7 @@ function registerGetLastAssistantResponse(server2) {
|
|
|
28356
28437
|
}
|
|
28357
28438
|
|
|
28358
28439
|
// src/mcp/tools/code-context.ts
|
|
28359
|
-
import { z as
|
|
28440
|
+
import { z as z92 } from "zod";
|
|
28360
28441
|
|
|
28361
28442
|
// src/lib/code-context-index.ts
|
|
28362
28443
|
init_config();
|
|
@@ -28772,19 +28853,19 @@ function registerCodeContext(server2) {
|
|
|
28772
28853
|
title: "Code Context",
|
|
28773
28854
|
description: "Persistent codebase context engine. One consolidated tool to avoid MCP bloat. Actions: index, search, trace, blast_radius, stats.",
|
|
28774
28855
|
inputSchema: {
|
|
28775
|
-
action:
|
|
28776
|
-
project_root:
|
|
28777
|
-
query:
|
|
28778
|
-
symbol:
|
|
28779
|
-
file_path:
|
|
28780
|
-
force:
|
|
28781
|
-
limit:
|
|
28782
|
-
offset:
|
|
28783
|
-
refresh_index:
|
|
28784
|
-
languages:
|
|
28785
|
-
paths:
|
|
28786
|
-
depth:
|
|
28787
|
-
max_files:
|
|
28856
|
+
action: z92.enum(["index", "search", "trace", "blast_radius", "stats"]).describe("Code context operation"),
|
|
28857
|
+
project_root: z92.string().optional().describe("Repository root. Defaults to current working directory."),
|
|
28858
|
+
query: z92.string().optional().describe("Search query for action=search"),
|
|
28859
|
+
symbol: z92.string().optional().describe("Symbol/function/class/type name for trace or blast_radius"),
|
|
28860
|
+
file_path: z92.string().optional().describe("File path for blast_radius"),
|
|
28861
|
+
force: z92.boolean().optional().describe("Force rebuild before answering"),
|
|
28862
|
+
limit: z92.coerce.number().int().min(1).max(100).optional().describe("Max results"),
|
|
28863
|
+
offset: z92.coerce.number().int().min(0).optional().describe("Search pagination offset"),
|
|
28864
|
+
refresh_index: z92.boolean().optional().describe("Refresh/rebuild index before searching"),
|
|
28865
|
+
languages: z92.array(z92.string()).optional().describe('Language filters, e.g. ["python", "typescript"]'),
|
|
28866
|
+
paths: z92.array(z92.string()).optional().describe("Path/glob filters"),
|
|
28867
|
+
depth: z92.coerce.number().int().min(1).max(5).optional().describe("Dependent traversal depth for blast_radius"),
|
|
28868
|
+
max_files: z92.coerce.number().int().min(1).max(1e4).optional().describe("Max code files to index")
|
|
28788
28869
|
}
|
|
28789
28870
|
}, async ({ action, project_root, query, symbol, file_path, force, limit, offset, refresh_index, languages, paths, depth, max_files }) => {
|
|
28790
28871
|
const opts = { projectRoot: project_root, force, maxFiles: max_files };
|
|
@@ -28829,9 +28910,9 @@ function registerCodeContext(server2) {
|
|
|
28829
28910
|
}
|
|
28830
28911
|
|
|
28831
28912
|
// src/mcp/tools/support-inbox.ts
|
|
28832
|
-
import { z as
|
|
28913
|
+
import { z as z93 } from "zod";
|
|
28833
28914
|
var DEFAULT_ENDPOINT = "https://askexe.com/admin/support/bug-reports";
|
|
28834
|
-
var STATUS =
|
|
28915
|
+
var STATUS = z93.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
|
|
28835
28916
|
function adminToken() {
|
|
28836
28917
|
return process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN;
|
|
28837
28918
|
}
|
|
@@ -28870,9 +28951,9 @@ function registerListBugReports(server2) {
|
|
|
28870
28951
|
title: "List Bug Reports",
|
|
28871
28952
|
description: "AskExe-internal only: list incoming customer bug reports from the support inbox.",
|
|
28872
28953
|
inputSchema: {
|
|
28873
|
-
status:
|
|
28874
|
-
severity:
|
|
28875
|
-
limit:
|
|
28954
|
+
status: z93.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("open"),
|
|
28955
|
+
severity: z93.enum(["p0", "p1", "p2", "p3"]).optional(),
|
|
28956
|
+
limit: z93.number().int().min(1).max(100).default(25)
|
|
28876
28957
|
}
|
|
28877
28958
|
},
|
|
28878
28959
|
async ({ status: status2, severity, limit }) => {
|
|
@@ -28891,7 +28972,7 @@ function registerGetBugReport(server2) {
|
|
|
28891
28972
|
{
|
|
28892
28973
|
title: "Get Bug Report",
|
|
28893
28974
|
description: "AskExe-internal only: fetch one customer bug report with full markdown payload.",
|
|
28894
|
-
inputSchema: { id:
|
|
28975
|
+
inputSchema: { id: z93.string().min(8) }
|
|
28895
28976
|
},
|
|
28896
28977
|
async ({ id }) => {
|
|
28897
28978
|
const data = await requestJson(`${endpoint()}/${encodeURIComponent(id)}`);
|
|
@@ -28906,12 +28987,12 @@ function registerTriageBugReport(server2) {
|
|
|
28906
28987
|
title: "Triage Bug Report",
|
|
28907
28988
|
description: "AskExe-internal only: update bug report status and link task/commit/release metadata.",
|
|
28908
28989
|
inputSchema: {
|
|
28909
|
-
id:
|
|
28990
|
+
id: z93.string().min(8),
|
|
28910
28991
|
status: STATUS.optional(),
|
|
28911
|
-
triage_notes:
|
|
28912
|
-
linked_task_id:
|
|
28913
|
-
linked_commit:
|
|
28914
|
-
fixed_version:
|
|
28992
|
+
triage_notes: z93.string().optional(),
|
|
28993
|
+
linked_task_id: z93.string().optional(),
|
|
28994
|
+
linked_commit: z93.string().optional(),
|
|
28995
|
+
fixed_version: z93.string().optional()
|
|
28915
28996
|
}
|
|
28916
28997
|
},
|
|
28917
28998
|
async ({ id, status: status2, triage_notes, linked_task_id, linked_commit, fixed_version }) => {
|
|
@@ -28947,7 +29028,7 @@ var TOOL_GATES = {
|
|
|
28947
29028
|
documents: ["COO", "CTO", "Wiki Agent"],
|
|
28948
29029
|
// ingest, list, purge, set_importance, rerank
|
|
28949
29030
|
gateway: ["COO", "Gateway Agent"],
|
|
28950
|
-
// send_whatsapp, query_conversations, query_company_brain
|
|
29031
|
+
// send_whatsapp, query_conversations, query_company_brain, company_actions
|
|
28951
29032
|
admin: ["COO"],
|
|
28952
29033
|
// deploy, backup, daemon health, auto-wake, worker gate, memory audit, consolidation, cloud sync, agent config, list employees, agent spend, sessions, session kills
|
|
28953
29034
|
licensing: ["COO"],
|
|
@@ -29036,6 +29117,7 @@ var TOOL_CATEGORIES = {
|
|
|
29036
29117
|
registerSendWhatsapp: "gateway",
|
|
29037
29118
|
registerQueryConversations: "gateway",
|
|
29038
29119
|
registerQueryCompanyBrain: "gateway",
|
|
29120
|
+
registerCompanyActions: "gateway",
|
|
29039
29121
|
// admin
|
|
29040
29122
|
registerConfig: "admin",
|
|
29041
29123
|
registerDeployClient: "admin",
|
|
@@ -29300,6 +29382,7 @@ function registerAllTools(server2) {
|
|
|
29300
29382
|
}
|
|
29301
29383
|
if (exposeLegacyGateway) {
|
|
29302
29384
|
gate("registerQueryCompanyBrain", registerQueryCompanyBrain);
|
|
29385
|
+
gate("registerCompanyActions", registerCompanyActions);
|
|
29303
29386
|
}
|
|
29304
29387
|
}
|
|
29305
29388
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.82",
|
|
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/stack.release.json
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
"repo": "AskExe/exe-os",
|
|
5
5
|
"service": "exed",
|
|
6
6
|
"packageName": "@askexenow/exe-os",
|
|
7
|
-
"version": "0.9.
|
|
8
|
-
"image": "ghcr.io/askexe/exed:v0.9.
|
|
7
|
+
"version": "0.9.5",
|
|
8
|
+
"image": "ghcr.io/askexe/exed:v0.9.5",
|
|
9
9
|
"imageEnv": "EXED_IMAGE_TAG",
|
|
10
10
|
"stackParticipation": {
|
|
11
11
|
"required": true,
|
|
@@ -42,8 +42,9 @@
|
|
|
42
42
|
"breakingChanges": [],
|
|
43
43
|
"dataSovereignty": "Customer-local memory/tasks/behaviors stay in SQLCipher/local storage. Updates must not overwrite roster, identity, behavior, or local memory files.",
|
|
44
44
|
"releaseLine": "v0.9 private/customer pilot; v1.0 is public-beta stable.",
|
|
45
|
-
"highGhostStack": "0.9.
|
|
45
|
+
"highGhostStack": "0.9.5",
|
|
46
46
|
"deploymentScope": "customer"
|
|
47
47
|
},
|
|
48
|
-
"deploymentScope": "customer"
|
|
48
|
+
"deploymentScope": "customer",
|
|
49
|
+
"highGhostStack": "0.9.5"
|
|
49
50
|
}
|