@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/lib/exe-daemon.js
CHANGED
|
@@ -18405,14 +18405,15 @@ function registerQueryCompanyBrain(server) {
|
|
|
18405
18405
|
title: "Query Company Brain",
|
|
18406
18406
|
description: "Search the Company Brain \u2014 queries across all data (raw events, wiki docs, agent memories, gateway messages).",
|
|
18407
18407
|
inputSchema: {
|
|
18408
|
-
action: QUERY_ACTION.default("search").describe("search = search exe-db; list_sources = list available
|
|
18408
|
+
action: QUERY_ACTION.default("search").describe("search = search exe-db; list_sources = list available sources; sql = run read-only SQL through gateway"),
|
|
18409
18409
|
query: z39.string().optional().describe("Search text. Required for action=search."),
|
|
18410
|
+
sql: z39.string().optional().describe("Read-only SELECT/WITH SQL. Required for action=sql."),
|
|
18410
18411
|
scope: QUERY_SCOPE.default("all").describe("Which data scope to search/read (raw, crm, wiki, memory, gateway, all)"),
|
|
18411
18412
|
source: z39.string().optional().describe("Filter raw events by source (shopify, asana, etc.)"),
|
|
18412
18413
|
limit: z39.coerce.number().int().min(1).max(100).default(20).describe("Max results per scope")
|
|
18413
18414
|
}
|
|
18414
18415
|
},
|
|
18415
|
-
async ({ action, query, scope, source, limit }) => {
|
|
18416
|
+
async ({ action, query, sql, scope, source, limit }) => {
|
|
18416
18417
|
const resolvedAction = action ?? "search";
|
|
18417
18418
|
if (resolvedAction === "search" && !query?.trim()) {
|
|
18418
18419
|
return {
|
|
@@ -18420,6 +18421,12 @@ function registerQueryCompanyBrain(server) {
|
|
|
18420
18421
|
isError: true
|
|
18421
18422
|
};
|
|
18422
18423
|
}
|
|
18424
|
+
if (resolvedAction === "sql" && !sql?.trim()) {
|
|
18425
|
+
return {
|
|
18426
|
+
content: [{ type: "text", text: "sql is required when action=sql" }],
|
|
18427
|
+
isError: true
|
|
18428
|
+
};
|
|
18429
|
+
}
|
|
18423
18430
|
const config2 = await loadConfig();
|
|
18424
18431
|
const gatewayUrl = config2.gateway?.url || process.env.EXE_GATEWAY_URL;
|
|
18425
18432
|
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;
|
|
@@ -18448,7 +18455,10 @@ function registerQueryCompanyBrain(server) {
|
|
|
18448
18455
|
}
|
|
18449
18456
|
let url;
|
|
18450
18457
|
try {
|
|
18451
|
-
url = new URL(
|
|
18458
|
+
url = new URL(
|
|
18459
|
+
resolvedAction === "list_sources" ? "/query/sources" : resolvedAction === "sql" ? "/query/sql" : "/query",
|
|
18460
|
+
gatewayUrl
|
|
18461
|
+
);
|
|
18452
18462
|
} catch (err) {
|
|
18453
18463
|
return {
|
|
18454
18464
|
content: [
|
|
@@ -18468,7 +18478,12 @@ function registerQueryCompanyBrain(server) {
|
|
|
18468
18478
|
}
|
|
18469
18479
|
try {
|
|
18470
18480
|
const response = await fetch(url.toString(), {
|
|
18471
|
-
|
|
18481
|
+
method: resolvedAction === "sql" ? "POST" : "GET",
|
|
18482
|
+
headers: {
|
|
18483
|
+
...authToken ? { Authorization: `Bearer ${authToken}` } : {},
|
|
18484
|
+
...resolvedAction === "sql" ? { "Content-Type": "application/json" } : {}
|
|
18485
|
+
},
|
|
18486
|
+
body: resolvedAction === "sql" ? JSON.stringify({ sql: sql.trim(), max_rows: limit }) : void 0,
|
|
18472
18487
|
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS)
|
|
18473
18488
|
});
|
|
18474
18489
|
if (!response.ok) {
|
|
@@ -18514,7 +18529,7 @@ var init_query_company_brain = __esm({
|
|
|
18514
18529
|
init_config();
|
|
18515
18530
|
FETCH_TIMEOUT_MS = 1e4;
|
|
18516
18531
|
QUERY_SCOPE = z39.enum(["raw", "crm", "wiki", "memory", "gateway", "all"]);
|
|
18517
|
-
QUERY_ACTION = z39.enum(["search", "list_sources"]);
|
|
18532
|
+
QUERY_ACTION = z39.enum(["search", "list_sources", "sql"]);
|
|
18518
18533
|
LOCAL_GATEWAY_HTTP_HOSTS = /^(localhost|127\.0\.0\.1|::1|exe-gateway|gateway)$/i;
|
|
18519
18534
|
}
|
|
18520
18535
|
});
|
|
@@ -19014,10 +19029,10 @@ function registerExportGraph(server) {
|
|
|
19014
19029
|
format: z44.enum(["html", "markdown"]).default("markdown").describe("Export format: markdown (inline) or html (file)")
|
|
19015
19030
|
}
|
|
19016
19031
|
},
|
|
19017
|
-
async ({ format }) => {
|
|
19032
|
+
async ({ format: format2 }) => {
|
|
19018
19033
|
try {
|
|
19019
19034
|
const client = getClient();
|
|
19020
|
-
if (
|
|
19035
|
+
if (format2 === "markdown") {
|
|
19021
19036
|
const report = await generateGraphReport(client);
|
|
19022
19037
|
return {
|
|
19023
19038
|
content: [{ type: "text", text: report }]
|
|
@@ -29848,8 +29863,81 @@ var init_raw_data = __esm({
|
|
|
29848
29863
|
}
|
|
29849
29864
|
});
|
|
29850
29865
|
|
|
29851
|
-
// src/mcp/tools/
|
|
29866
|
+
// src/mcp/tools/company-actions.ts
|
|
29852
29867
|
import { z as z87 } from "zod";
|
|
29868
|
+
function format(payload) {
|
|
29869
|
+
return ["# Company Actions", "", JSON.stringify(payload, null, 2)].join("\n");
|
|
29870
|
+
}
|
|
29871
|
+
function registerCompanyActions(server) {
|
|
29872
|
+
server.registerTool(
|
|
29873
|
+
"company_actions",
|
|
29874
|
+
{
|
|
29875
|
+
title: "Company Actions",
|
|
29876
|
+
description: "Preview and execute external connector actions (Asana, WhatsApp) through exe-gateway with audit/safety gates.",
|
|
29877
|
+
inputSchema: {
|
|
29878
|
+
action: ACTION.describe("list_connectors, describe_connector, preview, execute, list_runs, get_run"),
|
|
29879
|
+
connector: z87.string().optional().describe("Connector to use, e.g. asana, whatsapp, airtable, notion"),
|
|
29880
|
+
connector_ref: z87.string().optional().describe("Exact connector ref from list_connectors when connector names overlap"),
|
|
29881
|
+
operation: z87.string().optional().describe("Connector operation, e.g. create_task or send_message"),
|
|
29882
|
+
payload: z87.record(z87.string(), z87.unknown()).optional().describe("Operation payload"),
|
|
29883
|
+
idempotency_key: z87.string().optional().describe("Stable key to prevent duplicate execution"),
|
|
29884
|
+
confirm_token: z87.string().optional().describe("Optional future approval token"),
|
|
29885
|
+
run_id: z87.string().optional().describe("Run id for get_run")
|
|
29886
|
+
}
|
|
29887
|
+
},
|
|
29888
|
+
async (input) => {
|
|
29889
|
+
const config2 = await loadConfig();
|
|
29890
|
+
const gatewayUrl = config2.gateway?.url || process.env.EXE_GATEWAY_URL;
|
|
29891
|
+
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;
|
|
29892
|
+
if (!gatewayUrl) {
|
|
29893
|
+
return { content: [{ type: "text", text: "Company Actions not configured. Set gateway.url in ~/.exe-os/config.json" }] };
|
|
29894
|
+
}
|
|
29895
|
+
try {
|
|
29896
|
+
assertSecureGatewayUrlForToken(gatewayUrl, authToken);
|
|
29897
|
+
} catch (err) {
|
|
29898
|
+
return { content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }], isError: true };
|
|
29899
|
+
}
|
|
29900
|
+
let url;
|
|
29901
|
+
try {
|
|
29902
|
+
url = new URL("/actions", gatewayUrl);
|
|
29903
|
+
} catch (err) {
|
|
29904
|
+
return { content: [{ type: "text", text: `Company Actions not configured. Invalid gateway.url: ${err instanceof Error ? err.message : String(err)}` }], isError: true };
|
|
29905
|
+
}
|
|
29906
|
+
try {
|
|
29907
|
+
const response = await fetch(url.toString(), {
|
|
29908
|
+
method: "POST",
|
|
29909
|
+
headers: {
|
|
29910
|
+
"Content-Type": "application/json",
|
|
29911
|
+
...authToken ? { Authorization: `Bearer ${authToken}` } : {}
|
|
29912
|
+
},
|
|
29913
|
+
body: JSON.stringify(input),
|
|
29914
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS5)
|
|
29915
|
+
});
|
|
29916
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
29917
|
+
const payload = contentType.includes("application/json") ? await response.json() : await response.text();
|
|
29918
|
+
return {
|
|
29919
|
+
content: [{ type: "text", text: response.ok ? format(payload) : `Company Actions failed (${response.status}): ${typeof payload === "string" ? payload : JSON.stringify(payload)}` }],
|
|
29920
|
+
...response.ok ? {} : { isError: true }
|
|
29921
|
+
};
|
|
29922
|
+
} catch {
|
|
29923
|
+
return { content: [{ type: "text", text: `Gateway unreachable at ${url.origin}` }], isError: true };
|
|
29924
|
+
}
|
|
29925
|
+
}
|
|
29926
|
+
);
|
|
29927
|
+
}
|
|
29928
|
+
var FETCH_TIMEOUT_MS5, ACTION;
|
|
29929
|
+
var init_company_actions = __esm({
|
|
29930
|
+
"src/mcp/tools/company-actions.ts"() {
|
|
29931
|
+
"use strict";
|
|
29932
|
+
init_config();
|
|
29933
|
+
init_query_company_brain();
|
|
29934
|
+
FETCH_TIMEOUT_MS5 = 15e3;
|
|
29935
|
+
ACTION = z87.enum(["list_connectors", "describe_connector", "preview", "execute", "list_runs", "get_run"]);
|
|
29936
|
+
}
|
|
29937
|
+
});
|
|
29938
|
+
|
|
29939
|
+
// src/mcp/tools/create-bug-report.ts
|
|
29940
|
+
import { z as z88 } from "zod";
|
|
29853
29941
|
import crypto19 from "crypto";
|
|
29854
29942
|
import { mkdir as mkdir6, writeFile as writeFile7 } from "fs/promises";
|
|
29855
29943
|
import path53 from "path";
|
|
@@ -29932,22 +30020,22 @@ function registerCreateBugReport(server) {
|
|
|
29932
30020
|
title: "Create Bug Report",
|
|
29933
30021
|
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.",
|
|
29934
30022
|
inputSchema: {
|
|
29935
|
-
title:
|
|
30023
|
+
title: z88.string().min(3).describe("Short descriptive title"),
|
|
29936
30024
|
classification: CLASSIFICATION.describe(
|
|
29937
30025
|
"upstream_bug = platform defect; customer_customization = local preference; emergency_hotfix = temporary local patch; unclear = needs maintainer triage"
|
|
29938
30026
|
),
|
|
29939
30027
|
severity: SEVERITY.default("p2").describe("p0 critical \u2192 p3 low"),
|
|
29940
|
-
summary:
|
|
29941
|
-
customer_impact:
|
|
29942
|
-
reproduction_steps:
|
|
29943
|
-
expected:
|
|
29944
|
-
actual:
|
|
29945
|
-
files_changed:
|
|
29946
|
-
workaround:
|
|
29947
|
-
local_patch_diff:
|
|
29948
|
-
package_version:
|
|
29949
|
-
project_name:
|
|
29950
|
-
send_upstream:
|
|
30028
|
+
summary: z88.string().min(10).describe("What happened and why it matters"),
|
|
30029
|
+
customer_impact: z88.string().optional().describe("How this affects the customer/founder"),
|
|
30030
|
+
reproduction_steps: z88.array(z88.string()).optional().describe("Steps to reproduce"),
|
|
30031
|
+
expected: z88.string().optional().describe("Expected behavior"),
|
|
30032
|
+
actual: z88.string().optional().describe("Actual behavior"),
|
|
30033
|
+
files_changed: z88.array(z88.string()).optional().describe("Files changed or suspected"),
|
|
30034
|
+
workaround: z88.string().optional().describe("Temporary local workaround/hotfix, if any"),
|
|
30035
|
+
local_patch_diff: z88.string().optional().describe("Small local diff or patch summary"),
|
|
30036
|
+
package_version: z88.string().optional().describe("Installed @askexenow/exe-os version"),
|
|
30037
|
+
project_name: z88.string().optional().describe("Project/customer context"),
|
|
30038
|
+
send_upstream: z88.boolean().default(true).describe("Attempt to POST to configured AskExe support endpoint")
|
|
29951
30039
|
}
|
|
29952
30040
|
},
|
|
29953
30041
|
async ({
|
|
@@ -30063,13 +30151,13 @@ var init_create_bug_report = __esm({
|
|
|
30063
30151
|
init_config();
|
|
30064
30152
|
init_license();
|
|
30065
30153
|
init_store();
|
|
30066
|
-
CLASSIFICATION =
|
|
30154
|
+
CLASSIFICATION = z88.enum([
|
|
30067
30155
|
"upstream_bug",
|
|
30068
30156
|
"customer_customization",
|
|
30069
30157
|
"emergency_hotfix",
|
|
30070
30158
|
"unclear"
|
|
30071
30159
|
]);
|
|
30072
|
-
SEVERITY =
|
|
30160
|
+
SEVERITY = z88.enum(["p0", "p1", "p2", "p3"]);
|
|
30073
30161
|
}
|
|
30074
30162
|
});
|
|
30075
30163
|
|
|
@@ -30300,7 +30388,7 @@ var init_exe_support = __esm({
|
|
|
30300
30388
|
});
|
|
30301
30389
|
|
|
30302
30390
|
// src/mcp/tools/support.ts
|
|
30303
|
-
import { z as
|
|
30391
|
+
import { z as z89 } from "zod";
|
|
30304
30392
|
function formatRows(rows, mode) {
|
|
30305
30393
|
const lines = [`exe-os support ${mode}`, ""];
|
|
30306
30394
|
for (const row of rows) {
|
|
@@ -30341,7 +30429,7 @@ function registerSupportTools(server) {
|
|
|
30341
30429
|
title: "Support Test",
|
|
30342
30430
|
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.",
|
|
30343
30431
|
inputSchema: {
|
|
30344
|
-
project:
|
|
30432
|
+
project: z89.string().default("support-smoke").describe("Customer/project name, e.g. hygo")
|
|
30345
30433
|
}
|
|
30346
30434
|
},
|
|
30347
30435
|
async ({ project }) => {
|
|
@@ -30856,7 +30944,7 @@ var init_update_check = __esm({
|
|
|
30856
30944
|
// src/mcp/tools/cli-parity.ts
|
|
30857
30945
|
import { execFile as execFile2 } from "child_process";
|
|
30858
30946
|
import { promisify as promisify2 } from "util";
|
|
30859
|
-
import { z as
|
|
30947
|
+
import { z as z90 } from "zod";
|
|
30860
30948
|
async function runCommand(command, args, timeout = 6e4) {
|
|
30861
30949
|
const printable = [command, ...args].join(" ");
|
|
30862
30950
|
try {
|
|
@@ -30891,12 +30979,12 @@ function registerCliParityTools(server) {
|
|
|
30891
30979
|
title: "Doctor",
|
|
30892
30980
|
description: "Run exe-os doctor audit. Defaults to read-only diagnostics; optional dry-run/fix flags mirror CLI.",
|
|
30893
30981
|
inputSchema: {
|
|
30894
|
-
agent:
|
|
30895
|
-
project:
|
|
30896
|
-
verbose:
|
|
30897
|
-
conflicts:
|
|
30898
|
-
dry_run:
|
|
30899
|
-
fix:
|
|
30982
|
+
agent: z90.string().optional(),
|
|
30983
|
+
project: z90.string().optional(),
|
|
30984
|
+
verbose: z90.boolean().default(false),
|
|
30985
|
+
conflicts: z90.boolean().default(false),
|
|
30986
|
+
dry_run: z90.boolean().default(false),
|
|
30987
|
+
fix: z90.boolean().default(false)
|
|
30900
30988
|
}
|
|
30901
30989
|
}, async ({ agent, project, verbose, conflicts, dry_run, fix }) => {
|
|
30902
30990
|
const args = [];
|
|
@@ -30913,9 +31001,9 @@ function registerCliParityTools(server) {
|
|
|
30913
31001
|
title: "Rename Employee",
|
|
30914
31002
|
description: "Rename an employee using the same path as `exe-os rename <old> <new>`. Use for customer roster/identity renames.",
|
|
30915
31003
|
inputSchema: {
|
|
30916
|
-
old_name:
|
|
30917
|
-
new_name:
|
|
30918
|
-
dry_run:
|
|
31004
|
+
old_name: z90.string().min(1),
|
|
31005
|
+
new_name: z90.string().min(1),
|
|
31006
|
+
dry_run: z90.boolean().default(false)
|
|
30919
31007
|
}
|
|
30920
31008
|
}, async ({ old_name, new_name, dry_run }) => {
|
|
30921
31009
|
if (dry_run) {
|
|
@@ -30928,7 +31016,7 @@ function registerCliParityTools(server) {
|
|
|
30928
31016
|
server.registerTool("status_brief", {
|
|
30929
31017
|
title: "Status Brief",
|
|
30930
31018
|
description: "Return current employee/tmux status. Mirrors `exe-status` and supports optional deep view for one employee.",
|
|
30931
|
-
inputSchema: { employee:
|
|
31019
|
+
inputSchema: { employee: z90.string().optional() }
|
|
30932
31020
|
}, async ({ employee }) => {
|
|
30933
31021
|
const text3 = await status(employee);
|
|
30934
31022
|
return result2(text3, { ok: true, employee: employee ?? null });
|
|
@@ -30936,7 +31024,7 @@ function registerCliParityTools(server) {
|
|
|
30936
31024
|
server.registerTool("pending_work_summary", {
|
|
30937
31025
|
title: "Pending Work Summary",
|
|
30938
31026
|
description: "Return pending reviews, messages, and notifications using the same summaries as the CLI tools.",
|
|
30939
|
-
inputSchema: { agent:
|
|
31027
|
+
inputSchema: { agent: z90.string().optional() }
|
|
30940
31028
|
}, async ({ agent }) => {
|
|
30941
31029
|
const parts = await Promise.all([
|
|
30942
31030
|
runCommand("exe-pending-reviews", [], 3e4),
|
|
@@ -30957,7 +31045,7 @@ function registerCliParityTools(server) {
|
|
|
30957
31045
|
server.registerTool("key_rotation_preflight", {
|
|
30958
31046
|
title: "Key Rotation Preflight",
|
|
30959
31047
|
description: "Dry-run key rotation/update preflight. No destructive changes.",
|
|
30960
|
-
inputSchema: { mode:
|
|
31048
|
+
inputSchema: { mode: z90.enum(["rotate", "update"]).default("rotate") }
|
|
30961
31049
|
}, async ({ mode }) => {
|
|
30962
31050
|
const out = await runCommand("exe-os", ["key", mode, "--dry-run"], 6e4);
|
|
30963
31051
|
return result2(out.text, { ok: out.ok, command: out.command, mode }, !out.ok);
|
|
@@ -30976,11 +31064,11 @@ function registerCliParityTools(server) {
|
|
|
30976
31064
|
title: "Stack Update Check",
|
|
30977
31065
|
description: "Plan/check a customer stack update without applying Docker changes. Mirrors `exe-os stack-update --check`.",
|
|
30978
31066
|
inputSchema: {
|
|
30979
|
-
target:
|
|
30980
|
-
manifest:
|
|
30981
|
-
compose_file:
|
|
30982
|
-
env_file:
|
|
30983
|
-
deployment_persona:
|
|
31067
|
+
target: z90.string().optional(),
|
|
31068
|
+
manifest: z90.string().optional(),
|
|
31069
|
+
compose_file: z90.string().optional(),
|
|
31070
|
+
env_file: z90.string().optional(),
|
|
31071
|
+
deployment_persona: z90.enum(["customer", "askexe-control-plane"]).default("customer")
|
|
30984
31072
|
}
|
|
30985
31073
|
}, async ({ target, manifest, compose_file, env_file, deployment_persona }) => {
|
|
30986
31074
|
const args = ["stack-update", "--check", "--deployment-persona", deployment_persona];
|
|
@@ -31101,7 +31189,7 @@ var init_session_events = __esm({
|
|
|
31101
31189
|
});
|
|
31102
31190
|
|
|
31103
31191
|
// src/mcp/tools/get-session-events.ts
|
|
31104
|
-
import { z as
|
|
31192
|
+
import { z as z91 } from "zod";
|
|
31105
31193
|
function canReadAgent(activeRole, activeAgent, requestedAgent) {
|
|
31106
31194
|
return requestedAgent === activeAgent || activeRole === "COO" || activeRole === "CTO";
|
|
31107
31195
|
}
|
|
@@ -31125,11 +31213,11 @@ function registerGetSessionEvents(server) {
|
|
|
31125
31213
|
title: "Get Session Events",
|
|
31126
31214
|
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.",
|
|
31127
31215
|
inputSchema: {
|
|
31128
|
-
agent_id:
|
|
31129
|
-
session_id:
|
|
31216
|
+
agent_id: z91.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
|
|
31217
|
+
session_id: z91.string().optional().describe("Optional exact runtime session id."),
|
|
31130
31218
|
event_type: EVENT_TYPE.optional().describe("Filter to one event type."),
|
|
31131
|
-
project_name:
|
|
31132
|
-
limit:
|
|
31219
|
+
project_name: z91.string().optional().describe("Optional project filter. Pass 'all' for all projects."),
|
|
31220
|
+
limit: z91.number().int().min(1).max(100).default(20).describe("Number of events to return.")
|
|
31133
31221
|
}
|
|
31134
31222
|
},
|
|
31135
31223
|
async ({ agent_id, session_id, event_type, project_name, limit }) => {
|
|
@@ -31165,8 +31253,8 @@ function registerGetLastAssistantResponse(server) {
|
|
|
31165
31253
|
title: "Get Last Assistant Response",
|
|
31166
31254
|
description: "Return the exact last assistant response for an agent from the session event journal. Use for 'what was the last thing you said?'",
|
|
31167
31255
|
inputSchema: {
|
|
31168
|
-
agent_id:
|
|
31169
|
-
project_name:
|
|
31256
|
+
agent_id: z91.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
|
|
31257
|
+
project_name: z91.string().optional().describe("Optional project filter. Pass 'all' for all projects.")
|
|
31170
31258
|
}
|
|
31171
31259
|
},
|
|
31172
31260
|
async ({ agent_id, project_name }) => {
|
|
@@ -31201,7 +31289,7 @@ var init_get_session_events = __esm({
|
|
|
31201
31289
|
init_active_agent();
|
|
31202
31290
|
init_fast_db_init();
|
|
31203
31291
|
init_session_events();
|
|
31204
|
-
EVENT_TYPE =
|
|
31292
|
+
EVENT_TYPE = z91.enum([
|
|
31205
31293
|
"user_prompt",
|
|
31206
31294
|
"assistant_response",
|
|
31207
31295
|
"tool_call",
|
|
@@ -31621,7 +31709,7 @@ var init_code_context_index = __esm({
|
|
|
31621
31709
|
});
|
|
31622
31710
|
|
|
31623
31711
|
// src/mcp/tools/code-context.ts
|
|
31624
|
-
import { z as
|
|
31712
|
+
import { z as z92 } from "zod";
|
|
31625
31713
|
function errorResult10(text3) {
|
|
31626
31714
|
return { content: [{ type: "text", text: text3 }], isError: true };
|
|
31627
31715
|
}
|
|
@@ -31633,19 +31721,19 @@ function registerCodeContext(server) {
|
|
|
31633
31721
|
title: "Code Context",
|
|
31634
31722
|
description: "Persistent codebase context engine. One consolidated tool to avoid MCP bloat. Actions: index, search, trace, blast_radius, stats.",
|
|
31635
31723
|
inputSchema: {
|
|
31636
|
-
action:
|
|
31637
|
-
project_root:
|
|
31638
|
-
query:
|
|
31639
|
-
symbol:
|
|
31640
|
-
file_path:
|
|
31641
|
-
force:
|
|
31642
|
-
limit:
|
|
31643
|
-
offset:
|
|
31644
|
-
refresh_index:
|
|
31645
|
-
languages:
|
|
31646
|
-
paths:
|
|
31647
|
-
depth:
|
|
31648
|
-
max_files:
|
|
31724
|
+
action: z92.enum(["index", "search", "trace", "blast_radius", "stats"]).describe("Code context operation"),
|
|
31725
|
+
project_root: z92.string().optional().describe("Repository root. Defaults to current working directory."),
|
|
31726
|
+
query: z92.string().optional().describe("Search query for action=search"),
|
|
31727
|
+
symbol: z92.string().optional().describe("Symbol/function/class/type name for trace or blast_radius"),
|
|
31728
|
+
file_path: z92.string().optional().describe("File path for blast_radius"),
|
|
31729
|
+
force: z92.boolean().optional().describe("Force rebuild before answering"),
|
|
31730
|
+
limit: z92.coerce.number().int().min(1).max(100).optional().describe("Max results"),
|
|
31731
|
+
offset: z92.coerce.number().int().min(0).optional().describe("Search pagination offset"),
|
|
31732
|
+
refresh_index: z92.boolean().optional().describe("Refresh/rebuild index before searching"),
|
|
31733
|
+
languages: z92.array(z92.string()).optional().describe('Language filters, e.g. ["python", "typescript"]'),
|
|
31734
|
+
paths: z92.array(z92.string()).optional().describe("Path/glob filters"),
|
|
31735
|
+
depth: z92.coerce.number().int().min(1).max(5).optional().describe("Dependent traversal depth for blast_radius"),
|
|
31736
|
+
max_files: z92.coerce.number().int().min(1).max(1e4).optional().describe("Max code files to index")
|
|
31649
31737
|
}
|
|
31650
31738
|
}, async ({ action, project_root, query, symbol, file_path, force, limit, offset, refresh_index, languages, paths, depth, max_files }) => {
|
|
31651
31739
|
const opts = { projectRoot: project_root, force, maxFiles: max_files };
|
|
@@ -31696,7 +31784,7 @@ var init_code_context = __esm({
|
|
|
31696
31784
|
});
|
|
31697
31785
|
|
|
31698
31786
|
// src/mcp/tools/support-inbox.ts
|
|
31699
|
-
import { z as
|
|
31787
|
+
import { z as z93 } from "zod";
|
|
31700
31788
|
function adminToken() {
|
|
31701
31789
|
return process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN;
|
|
31702
31790
|
}
|
|
@@ -31735,9 +31823,9 @@ function registerListBugReports(server) {
|
|
|
31735
31823
|
title: "List Bug Reports",
|
|
31736
31824
|
description: "AskExe-internal only: list incoming customer bug reports from the support inbox.",
|
|
31737
31825
|
inputSchema: {
|
|
31738
|
-
status:
|
|
31739
|
-
severity:
|
|
31740
|
-
limit:
|
|
31826
|
+
status: z93.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("open"),
|
|
31827
|
+
severity: z93.enum(["p0", "p1", "p2", "p3"]).optional(),
|
|
31828
|
+
limit: z93.number().int().min(1).max(100).default(25)
|
|
31741
31829
|
}
|
|
31742
31830
|
},
|
|
31743
31831
|
async ({ status: status2, severity, limit }) => {
|
|
@@ -31756,7 +31844,7 @@ function registerGetBugReport(server) {
|
|
|
31756
31844
|
{
|
|
31757
31845
|
title: "Get Bug Report",
|
|
31758
31846
|
description: "AskExe-internal only: fetch one customer bug report with full markdown payload.",
|
|
31759
|
-
inputSchema: { id:
|
|
31847
|
+
inputSchema: { id: z93.string().min(8) }
|
|
31760
31848
|
},
|
|
31761
31849
|
async ({ id }) => {
|
|
31762
31850
|
const data = await requestJson(`${endpoint()}/${encodeURIComponent(id)}`);
|
|
@@ -31771,12 +31859,12 @@ function registerTriageBugReport(server) {
|
|
|
31771
31859
|
title: "Triage Bug Report",
|
|
31772
31860
|
description: "AskExe-internal only: update bug report status and link task/commit/release metadata.",
|
|
31773
31861
|
inputSchema: {
|
|
31774
|
-
id:
|
|
31862
|
+
id: z93.string().min(8),
|
|
31775
31863
|
status: STATUS.optional(),
|
|
31776
|
-
triage_notes:
|
|
31777
|
-
linked_task_id:
|
|
31778
|
-
linked_commit:
|
|
31779
|
-
fixed_version:
|
|
31864
|
+
triage_notes: z93.string().optional(),
|
|
31865
|
+
linked_task_id: z93.string().optional(),
|
|
31866
|
+
linked_commit: z93.string().optional(),
|
|
31867
|
+
fixed_version: z93.string().optional()
|
|
31780
31868
|
}
|
|
31781
31869
|
},
|
|
31782
31870
|
async ({ id, status: status2, triage_notes, linked_task_id, linked_commit, fixed_version }) => {
|
|
@@ -31793,7 +31881,7 @@ var init_support_inbox = __esm({
|
|
|
31793
31881
|
"src/mcp/tools/support-inbox.ts"() {
|
|
31794
31882
|
"use strict";
|
|
31795
31883
|
DEFAULT_ENDPOINT = "https://askexe.com/admin/support/bug-reports";
|
|
31796
|
-
STATUS =
|
|
31884
|
+
STATUS = z93.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
|
|
31797
31885
|
}
|
|
31798
31886
|
});
|
|
31799
31887
|
|
|
@@ -31840,7 +31928,7 @@ var init_tool_gates = __esm({
|
|
|
31840
31928
|
documents: ["COO", "CTO", "Wiki Agent"],
|
|
31841
31929
|
// ingest, list, purge, set_importance, rerank
|
|
31842
31930
|
gateway: ["COO", "Gateway Agent"],
|
|
31843
|
-
// send_whatsapp, query_conversations, query_company_brain
|
|
31931
|
+
// send_whatsapp, query_conversations, query_company_brain, company_actions
|
|
31844
31932
|
admin: ["COO"],
|
|
31845
31933
|
// deploy, backup, daemon health, auto-wake, worker gate, memory audit, consolidation, cloud sync, agent config, list employees, agent spend, sessions, session kills
|
|
31846
31934
|
licensing: ["COO"],
|
|
@@ -31929,6 +32017,7 @@ var init_tool_gates = __esm({
|
|
|
31929
32017
|
registerSendWhatsapp: "gateway",
|
|
31930
32018
|
registerQueryConversations: "gateway",
|
|
31931
32019
|
registerQueryCompanyBrain: "gateway",
|
|
32020
|
+
registerCompanyActions: "gateway",
|
|
31932
32021
|
// admin
|
|
31933
32022
|
registerConfig: "admin",
|
|
31934
32023
|
registerDeployClient: "admin",
|
|
@@ -32183,6 +32272,7 @@ function registerAllTools(server) {
|
|
|
32183
32272
|
}
|
|
32184
32273
|
if (exposeLegacyGateway) {
|
|
32185
32274
|
gate("registerQueryCompanyBrain", registerQueryCompanyBrain);
|
|
32275
|
+
gate("registerCompanyActions", registerCompanyActions);
|
|
32186
32276
|
}
|
|
32187
32277
|
}
|
|
32188
32278
|
var init_register_tools = __esm({
|
|
@@ -32276,6 +32366,7 @@ var init_register_tools = __esm({
|
|
|
32276
32366
|
init_list_licenses();
|
|
32277
32367
|
init_activate_license();
|
|
32278
32368
|
init_query_company_brain();
|
|
32369
|
+
init_company_actions();
|
|
32279
32370
|
init_create_bug_report();
|
|
32280
32371
|
init_support();
|
|
32281
32372
|
init_cli_parity();
|