@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.
@@ -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 raw/CRM/wiki/memory/gateway sources"),
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(resolvedAction === "list_sources" ? "/query/sources" : "/query", gatewayUrl);
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
- headers: authToken ? { Authorization: `Bearer ${authToken}` } : {},
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 (format === "markdown") {
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/create-bug-report.ts
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: z87.string().min(3).describe("Short descriptive 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: z87.string().min(10).describe("What happened and why it matters"),
29941
- customer_impact: z87.string().optional().describe("How this affects the customer/founder"),
29942
- reproduction_steps: z87.array(z87.string()).optional().describe("Steps to reproduce"),
29943
- expected: z87.string().optional().describe("Expected behavior"),
29944
- actual: z87.string().optional().describe("Actual behavior"),
29945
- files_changed: z87.array(z87.string()).optional().describe("Files changed or suspected"),
29946
- workaround: z87.string().optional().describe("Temporary local workaround/hotfix, if any"),
29947
- local_patch_diff: z87.string().optional().describe("Small local diff or patch summary"),
29948
- package_version: z87.string().optional().describe("Installed @askexenow/exe-os version"),
29949
- project_name: z87.string().optional().describe("Project/customer context"),
29950
- send_upstream: z87.boolean().default(true).describe("Attempt to POST to configured AskExe support endpoint")
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 = z87.enum([
30154
+ CLASSIFICATION = z88.enum([
30067
30155
  "upstream_bug",
30068
30156
  "customer_customization",
30069
30157
  "emergency_hotfix",
30070
30158
  "unclear"
30071
30159
  ]);
30072
- SEVERITY = z87.enum(["p0", "p1", "p2", "p3"]);
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 z88 } from "zod";
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: z88.string().default("support-smoke").describe("Customer/project name, e.g. hygo")
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 z89 } from "zod";
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: z89.string().optional(),
30895
- project: z89.string().optional(),
30896
- verbose: z89.boolean().default(false),
30897
- conflicts: z89.boolean().default(false),
30898
- dry_run: z89.boolean().default(false),
30899
- fix: z89.boolean().default(false)
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: z89.string().min(1),
30917
- new_name: z89.string().min(1),
30918
- dry_run: z89.boolean().default(false)
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: z89.string().optional() }
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: z89.string().optional() }
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: z89.enum(["rotate", "update"]).default("rotate") }
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: z89.string().optional(),
30980
- manifest: z89.string().optional(),
30981
- compose_file: z89.string().optional(),
30982
- env_file: z89.string().optional(),
30983
- deployment_persona: z89.enum(["customer", "askexe-control-plane"]).default("customer")
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 z90 } from "zod";
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: z90.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
31129
- session_id: z90.string().optional().describe("Optional exact runtime 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: z90.string().optional().describe("Optional project filter. Pass 'all' for all projects."),
31132
- limit: z90.number().int().min(1).max(100).default(20).describe("Number of events to return.")
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: z90.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
31169
- project_name: z90.string().optional().describe("Optional project filter. Pass 'all' for all projects.")
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 = z90.enum([
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 z91 } from "zod";
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: z91.enum(["index", "search", "trace", "blast_radius", "stats"]).describe("Code context operation"),
31637
- project_root: z91.string().optional().describe("Repository root. Defaults to current working directory."),
31638
- query: z91.string().optional().describe("Search query for action=search"),
31639
- symbol: z91.string().optional().describe("Symbol/function/class/type name for trace or blast_radius"),
31640
- file_path: z91.string().optional().describe("File path for blast_radius"),
31641
- force: z91.boolean().optional().describe("Force rebuild before answering"),
31642
- limit: z91.coerce.number().int().min(1).max(100).optional().describe("Max results"),
31643
- offset: z91.coerce.number().int().min(0).optional().describe("Search pagination offset"),
31644
- refresh_index: z91.boolean().optional().describe("Refresh/rebuild index before searching"),
31645
- languages: z91.array(z91.string()).optional().describe('Language filters, e.g. ["python", "typescript"]'),
31646
- paths: z91.array(z91.string()).optional().describe("Path/glob filters"),
31647
- depth: z91.coerce.number().int().min(1).max(5).optional().describe("Dependent traversal depth for blast_radius"),
31648
- max_files: z91.coerce.number().int().min(1).max(1e4).optional().describe("Max code files to index")
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 z92 } from "zod";
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: z92.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("open"),
31739
- severity: z92.enum(["p0", "p1", "p2", "p3"]).optional(),
31740
- limit: z92.number().int().min(1).max(100).default(25)
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: z92.string().min(8) }
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: z92.string().min(8),
31862
+ id: z93.string().min(8),
31775
31863
  status: STATUS.optional(),
31776
- triage_notes: z92.string().optional(),
31777
- linked_task_id: z92.string().optional(),
31778
- linked_commit: z92.string().optional(),
31779
- fixed_version: z92.string().optional()
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 = z92.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
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();