@askexenow/exe-os 0.9.166 → 0.9.167
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/compose/backup.sh +45 -7
- package/deploy/compose/setup.sh +7 -0
- package/deploy/stack-manifests/v0.9.json +40 -1
- package/dist/{active-agent-R2KMWMR6.js → active-agent-DGTIJN2U.js} +2 -2
- package/dist/{active-agent-CYMM3QQA.js → active-agent-HVMLG6FH.js} +2 -2
- package/dist/{agentic-ontology-GKAKYNPE.js → agentic-ontology-S54AFODT.js} +1 -1
- package/dist/{backfill-metadata-Z5SYUWAV.js → backfill-metadata-74IWETRF.js} +4 -3
- package/dist/{behaviors-QGU6XI5R.js → behaviors-LZVAVHTC.js} +2 -2
- package/dist/bin/agentic-ontology-backfill.js +5 -4
- package/dist/bin/agentic-reflection-backfill.js +6 -5
- package/dist/bin/agentic-semantic-label.js +5 -4
- package/dist/bin/backfill-conversations.js +5 -4
- package/dist/bin/backfill-responses.js +5 -4
- package/dist/bin/backfill-vectors.js +6 -5
- package/dist/bin/bulk-sync-postgres.js +6 -5
- package/dist/bin/cleanup-stale-review-tasks.js +9 -9
- package/dist/bin/cli.js +16 -13
- package/dist/bin/daily-summary.js +0 -217
- package/dist/bin/deferred-daemon-restart.js +8 -0
- package/dist/bin/exe-agent-config.js +1 -1
- package/dist/bin/exe-agent.js +10 -10
- package/dist/bin/exe-assign.js +7 -6
- package/dist/bin/exe-boot.js +20 -19
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +3 -3
- package/dist/bin/exe-dispatch.js +9 -9
- package/dist/bin/exe-doctor.js +1 -1
- package/dist/bin/exe-export-behaviors.js +7 -6
- package/dist/bin/exe-forget.js +6 -5
- package/dist/bin/exe-gateway.js +5 -5
- package/dist/bin/exe-heartbeat.js +9 -9
- package/dist/bin/exe-kill.js +13 -12
- package/dist/bin/exe-launch-agent.js +11 -10
- package/dist/bin/exe-new-employee.js +6 -6
- package/dist/bin/exe-pending-messages.js +10 -10
- package/dist/bin/exe-pending-notifications.js +9 -9
- package/dist/bin/exe-pending-reviews.js +9 -9
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +12 -11
- package/dist/bin/exe-search.js +5 -4
- package/dist/bin/exe-session-cleanup.js +19 -14
- package/dist/bin/exe-settings.js +3 -3
- package/dist/bin/exe-start-codex.js +11 -10
- package/dist/bin/exe-start-opencode.js +8 -7
- package/dist/bin/exe-status.js +10 -10
- package/dist/bin/exe-team.js +2 -2
- package/dist/bin/git-sweep.js +9 -9
- package/dist/bin/graph-backfill.js +4 -3
- package/dist/bin/graph-export.js +5 -4
- package/dist/bin/import-history.js +171 -0
- package/dist/bin/install-launchd.js +41 -0
- package/dist/bin/install.js +50 -74
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/scan-tasks.js +22 -12
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +4 -3
- package/dist/bin/stack-update.js +61 -857
- package/dist/bin/vps-backup.js +170 -0
- package/dist/bin/vps-health-gate.js +232 -0
- package/dist/{capacity-monitor-ZEAE4WP2.js → capacity-monitor-JBZB2S4P.js} +10 -10
- package/dist/{catchup-brief-OGWCHENC.js → catchup-brief-HE2EMZS5.js} +12 -11
- package/dist/{chunk-DJJNB47C.js → chunk-27DO3EZO.js} +1 -1
- package/dist/{chunk-45FYZIHI.js → chunk-32YUET3Y.js} +2 -2
- package/dist/{chunk-Y75ECPO5.js → chunk-3FW5LUGI.js} +2 -2
- package/dist/{chunk-4OZGQZ4U.js → chunk-3M3O56VT.js} +636 -179
- package/dist/{chunk-77WQOD6J.js → chunk-4CXUZ4NI.js} +2 -2
- package/dist/{chunk-PBXWPHEK.js → chunk-4VEHJZ6R.js} +1 -1
- package/dist/{chunk-TH22QIEC.js → chunk-6A4COFDG.js} +1 -1
- package/dist/{chunk-ACBTCC2L.js → chunk-7OJH2A6I.js} +1 -1
- package/dist/{chunk-NHCOTCI6.js → chunk-A7SGEBXJ.js} +2 -2
- package/dist/{chunk-5MPQSNZF.js → chunk-AUTCT6AY.js} +1 -1
- package/dist/{chunk-OEKSTOTE.js → chunk-AZAZ2C75.js} +1 -1
- package/dist/chunk-CHCA3ZM2.js +167 -0
- package/dist/{chunk-X347L57O.js → chunk-CSTJQDOE.js} +4 -3
- package/dist/{chunk-B234R3VW.js → chunk-D7WLV6WD.js} +2 -2
- package/dist/{chunk-GMXF3AHJ.js → chunk-DGAONW36.js} +1 -1
- package/dist/chunk-EAT5YL3W.js +229 -0
- package/dist/{chunk-OD4H5YCJ.js → chunk-EKTQE2R5.js} +8 -8
- package/dist/{chunk-Z44PC42G.js → chunk-ELUBA7XL.js} +2 -2
- package/dist/{chunk-ZWS6XQER.js → chunk-F5AKOE4P.js} +7 -7
- package/dist/{chunk-T5YULDDO.js → chunk-FVI4UBKO.js} +27 -4
- package/dist/{chunk-ESRI7MFI.js → chunk-GAN7PW6G.js} +28 -24
- package/dist/{chunk-K4OWYJSP.js → chunk-GM2WZTG3.js} +2 -2
- package/dist/{chunk-TAB5QGIK.js → chunk-GZYQTPTF.js} +3 -3
- package/dist/{chunk-CXDU5DE3.js → chunk-IAUNGATJ.js} +1 -1
- package/dist/{chunk-YS63NS6M.js → chunk-IHSM5GR4.js} +1 -1
- package/dist/{chunk-23PTS2ZD.js → chunk-IP7KJAUW.js} +117 -15
- package/dist/{chunk-D6IMJAV2.js → chunk-J64P2LB2.js} +2 -2
- package/dist/{chunk-CXAVSQZM.js → chunk-JXMSCKRM.js} +1 -1
- package/dist/{chunk-RQMK3IQH.js → chunk-K4OTJP6N.js} +14 -7
- package/dist/{chunk-L7ROZR2H.js → chunk-KXAUMIOX.js} +1 -1
- package/dist/{chunk-TPC3LAP7.js → chunk-LGY2BIOT.js} +13 -0
- package/dist/{chunk-RPIDSBK7.js → chunk-LLHRJEE4.js} +3 -3
- package/dist/{chunk-6WG2VIKC.js → chunk-LM7H6XU4.js} +1 -1
- package/dist/{chunk-Y6GMKZZ2.js → chunk-LOFFGJSY.js} +150 -23
- package/dist/{chunk-W7SDGBEC.js → chunk-MFI5OXYW.js} +52 -84
- package/dist/{chunk-KNPEVPYG.js → chunk-MSSQWF6X.js} +2 -2
- package/dist/{chunk-QIQAO3VG.js → chunk-NEFFFKMD.js} +3 -3
- package/dist/{chunk-YUC552KZ.js → chunk-NEHONJJC.js} +3 -3
- package/dist/{chunk-KZ7SXZ2V.js → chunk-NFMQRLCD.js} +1 -1
- package/dist/{chunk-52HCNDPG.js → chunk-O4TATDOV.js} +1 -1
- package/dist/{chunk-AR3OYGLB.js → chunk-PEFBRL4S.js} +28 -6
- package/dist/{chunk-AEUXUEJG.js → chunk-PEXVU3HU.js} +5 -3
- package/dist/chunk-Q2G5C3HV.js +217 -0
- package/dist/{chunk-KOO56JVC.js → chunk-Q6N6LDEJ.js} +1 -1
- package/dist/{chunk-TXSJ2L5O.js → chunk-QI4IXJN7.js} +1 -1
- package/dist/{chunk-HLVQ5Y7B.js → chunk-RE4VLK45.js} +1 -1
- package/dist/{chunk-TF6SZGDT.js → chunk-SA2PH6WY.js} +1 -1
- package/dist/{chunk-5RSYY7BE.js → chunk-SJYOPYXH.js} +117 -9
- package/dist/{chunk-PJGHBANY.js → chunk-TTJE7CCU.js} +1 -1
- package/dist/{chunk-A7KEWR6S.js → chunk-TXWQPL2U.js} +1 -1
- package/dist/{chunk-XXSJ35J5.js → chunk-U5ZH52FB.js} +2 -2
- package/dist/{chunk-G4FDG3LK.js → chunk-UVNDLF74.js} +63 -40
- package/dist/{chunk-5OD3AFRW.js → chunk-V6RCZ25F.js} +1 -1
- package/dist/{chunk-LHMBIFKD.js → chunk-VYNNN2S3.js} +4 -4
- package/dist/chunk-WCYT54XP.js +934 -0
- package/dist/{chunk-5AMSQRHT.js → chunk-XGYSTVUH.js} +1 -1
- package/dist/{chunk-MKZBHM6A.js → chunk-XLWF3C4R.js} +4 -4
- package/dist/{chunk-YL36L2SN.js → chunk-Y7YHLV57.js} +1 -1
- package/dist/{chunk-HZC4MR4H.js → chunk-YBKB2PXY.js} +1 -1
- package/dist/{chunk-NWM3A4TK.js → chunk-ZDNLKXZA.js} +1 -1
- package/dist/{chunk-O7KW6QMH.js → chunk-ZW4TKQUM.js} +15 -5
- package/dist/{chunk-6BURHBE6.js → chunk-ZXB44R3E.js} +32 -11
- package/dist/co-occurrence-WCED475N.js +73 -0
- package/dist/{code-context-index-B6VIWPSF.js → code-context-index-LSZ3DKTJ.js} +2 -2
- package/dist/{crdt-sync-XA22KI3S.js → crdt-sync-PBXZTHZC.js} +1 -1
- package/dist/{crm-webhook-CIZNOEY4.js → crm-webhook-W7Q25VZU.js} +2 -2
- package/dist/{cto-delegation-gate-H5IULFRC.js → cto-delegation-gate-JKULOLMC.js} +8 -8
- package/dist/{daemon-orchestration-VO5XQIJL.js → daemon-orchestration-CHV6MB42.js} +13 -11
- package/dist/{exe-drift-DMT75WR3.js → exe-drift-PW36OULT.js} +2 -2
- package/dist/{exe-export-2RZWOSX6.js → exe-export-XQOD3KE6.js} +6 -5
- package/dist/{exe-import-NFNYATHL.js → exe-import-QOFP67LW.js} +6 -5
- package/dist/{exe-key-4D7CF3BU.js → exe-key-WQ34UZR6.js} +1 -1
- package/dist/{fast-db-init-LAEISZQ2.js → fast-db-init-UKETGWQI.js} +1 -1
- package/dist/gateway/index.js +6 -6
- package/dist/{git-staleness-M46AYLPP.js → git-staleness-ATV5CGAP.js} +1 -1
- package/dist/{git-task-sweep-PXOS56YT.js → git-task-sweep-KXZRIP4T.js} +9 -9
- package/dist/{global-procedures-KROQQX54.js → global-procedures-G6IKCYKM.js} +3 -3
- package/dist/{graph-auto-extract-QJ2BBJM2.js → graph-auto-extract-ZJXJOLE2.js} +1 -1
- package/dist/hooks/bug-report-worker.js +10 -10
- package/dist/hooks/codex-stop-task-finalizer.js +10 -10
- package/dist/hooks/commit-complete.js +11 -11
- package/dist/hooks/error-recall.js +8 -7
- package/dist/hooks/exe-heartbeat-hook.js +2 -2
- package/dist/hooks/ingest-worker.js +3 -3
- package/dist/hooks/ingest.js +9 -9
- package/dist/hooks/instructions-loaded.js +3 -3
- package/dist/hooks/notification.js +3 -3
- package/dist/hooks/post-compact.js +10 -10
- package/dist/hooks/post-tool-combined.js +5 -5
- package/dist/hooks/pre-compact.js +16 -16
- package/dist/hooks/pre-tool-use.js +14 -14
- package/dist/hooks/prompt-submit.js +30 -29
- package/dist/hooks/session-end.js +46 -25
- package/dist/hooks/session-start.js +48 -10
- package/dist/hooks/stop.js +17 -17
- package/dist/hooks/subagent-stop.js +10 -10
- package/dist/hooks/summary-worker.js +17 -16
- package/dist/index.js +17 -17
- package/dist/{installer-SDBLJBAB.js → installer-DE2LH5EC.js} +4 -4
- package/dist/{installer-ZA6QNQ4P.js → installer-M2MDS7HC.js} +4 -4
- package/dist/{installer-6KAY6LD6.js → installer-VE23YFXU.js} +4 -4
- package/dist/{intercom-queue-K3DVKSPJ.js → intercom-queue-RNM6EPGA.js} +1 -1
- package/dist/keyword-extractor-UJHFWVZE.js +11 -0
- package/dist/lib/cloud-sync.js +3 -3
- package/dist/lib/consolidation.js +5 -4
- package/dist/lib/database.js +1 -1
- package/dist/lib/db-daemon-client.js +1 -1
- package/dist/lib/db.js +1 -1
- package/dist/lib/embed-worker.js +98 -0
- package/dist/lib/embedder.js +2 -2
- package/dist/lib/employee-templates.js +4 -4
- package/dist/lib/employees.js +1 -1
- package/dist/lib/exe-daemon-client.js +1 -1
- package/dist/lib/exe-daemon.js +523 -500
- package/dist/lib/hybrid-search.js +5 -6
- package/dist/lib/identity.js +1 -1
- package/dist/lib/messaging.js +9 -9
- package/dist/lib/reminders.js +2 -2
- package/dist/lib/schedules.js +5 -4
- package/dist/lib/skill-learning.js +3 -3
- package/dist/lib/store.js +4 -3
- package/dist/lib/task-router.js +2 -2
- package/dist/lib/tasks.js +9 -9
- package/dist/lib/tmux-routing.js +8 -8
- package/dist/lib/tmux-transport.js +1 -1
- package/dist/lib/token-spend.js +2 -2
- package/dist/lib/transport.js +2 -2
- package/dist/lib/ws-client.js +3 -1
- package/dist/mcp/register-tools.js +54 -51
- package/dist/mcp/server.js +58 -55
- package/dist/mcp/tools/complete-reminder.js +3 -3
- package/dist/mcp/tools/create-reminder.js +3 -3
- package/dist/mcp/tools/create-task.js +11 -11
- package/dist/mcp/tools/deactivate-behavior.js +4 -4
- package/dist/mcp/tools/list-reminders.js +3 -3
- package/dist/mcp/tools/list-tasks.js +11 -11
- package/dist/mcp/tools/send-message.js +11 -11
- package/dist/mcp/tools/update-task.js +10 -10
- package/dist/{mcp-http-config-LK2EDOEJ.js → mcp-http-config-Z2E4VUOF.js} +2 -2
- package/dist/{memory-cards-V3DKSRWL.js → memory-cards-SFDKDIAW.js} +1 -1
- package/dist/memory-graph-extractor-YD4GNH7T.js +16 -0
- package/dist/{memory-poisoning-defense-3B75HS74.js → memory-poisoning-defense-VEGNFELN.js} +1 -1
- package/dist/{memory-queue-client-LFPZPPQA.js → memory-queue-client-5HB2XUH7.js} +2 -2
- package/dist/{memory-reflection-HTDAUUE5.js → memory-reflection-MTPRQNI6.js} +2 -2
- package/dist/{notifications-76VCYXWW.js → notifications-6TCE6OBG.js} +8 -8
- package/dist/{orchestrator-CBNSBI5P.js → orchestrator-W2GYJR23.js} +10 -10
- package/dist/{plan-limits-SOR3QXKV.js → plan-limits-4EP46323.js} +2 -2
- package/dist/{projection-worker-FK5YOEIL.js → projection-worker-EBUYNMU2.js} +1 -1
- package/dist/{review-polling-ZLNDUKL4.js → review-polling-2N7KQFZZ.js} +9 -9
- package/dist/runtime/index.js +15 -15
- package/dist/{session-events-CUSPL25D.js → session-events-K47FHAXJ.js} +9 -9
- package/dist/{session-kill-telemetry-FLBRHBDP.js → session-kill-telemetry-275YUXM5.js} +2 -2
- package/dist/{session-scope-PX2ABSJO.js → session-scope-XSFJZEER.js} +8 -8
- package/dist/{setup-wizard-Y6PBZGFX.js → setup-wizard-UEO7HYLQ.js} +1 -1
- package/dist/{skill-refinement-L7PGKCYO.js → skill-refinement-WXBTANDQ.js} +1 -1
- package/dist/stack-update-2B2UXREV.js +50 -0
- package/dist/{task-enforcement-7FUILB63.js → task-enforcement-2JIJSXPU.js} +14 -16
- package/dist/{task-scope-2N45TE32.js → task-scope-W73Z3XWE.js} +8 -8
- package/dist/{tasks-crud-ADLCGHGH.js → tasks-crud-HPJKI3QQ.js} +8 -8
- package/dist/{tasks-review-PJ2DUI6N.js → tasks-review-MXLMPGNZ.js} +8 -8
- package/dist/{token-budget-T5DFXVTM.js → token-budget-BA46CVHX.js} +1 -1
- package/dist/{tool-capability-index-6JJN6ZRC.js → tool-capability-index-42VVN5BS.js} +1 -1
- package/dist/{tool-telemetry-72PVO5HV.js → tool-telemetry-GZ5E2AUL.js} +1 -1
- package/dist/tui/App.js +22 -18
- package/dist/{tui-data-63JHE6EZ.js → tui-data-PVXWQCJX.js} +8 -8
- package/dist/{worker-gate-REVBJUZ6.js → worker-gate-WTTK64TK.js} +1 -1
- package/dist/{workflow-engine-W2WNHJG5.js → workflow-engine-LT3WTT7V.js} +2 -2
- package/package.json +1 -1
- package/release-notes.json +209 -209
- /package/dist/{chunk-BNOZUS6J.js → chunk-6VVCAVRT.js} +0 -0
- /package/dist/{chunk-IC7GKK6I.js → chunk-CWQZZ7X3.js} +0 -0
- /package/dist/{chunk-ZI2ZVERO.js → chunk-EIW5GOBW.js} +0 -0
- /package/dist/{chunk-2BGGDNRD.js → chunk-IPPJEM26.js} +0 -0
- /package/dist/{chunk-4ISDU5KR.js → chunk-K5UR73PM.js} +0 -0
- /package/dist/{chunk-ZWRTVUQ6.js → chunk-KIMO5S45.js} +0 -0
- /package/dist/{chunk-S2FX5KJ4.js → chunk-WBLILGAP.js} +0 -0
- /package/dist/{core-memory-PCJ3L46L.js → core-memory-RAC6M67J.js} +0 -0
- /package/dist/{entity-boost-GHFPE6A2.js → entity-boost-5FIRFRDC.js} +0 -0
- /package/dist/{message-queue-client-CHRQYBH5.js → message-queue-client-PTQ2S7D7.js} +0 -0
- /package/dist/{wiki-acl-QYRAYYVQ.js → wiki-acl-MSDRCIAI.js} +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getCachedLicenseGate
|
|
3
|
+
} from "./chunk-PLNYW6PA.js";
|
|
1
4
|
import {
|
|
2
5
|
getToolUsageStats
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CWQZZ7X3.js";
|
|
4
7
|
import {
|
|
5
8
|
AUTO_WAKE_MAX_RETRIES
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LOFFGJSY.js";
|
|
7
10
|
import {
|
|
8
11
|
getToolCapabilityIndex
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import {
|
|
11
|
-
getCachedLicenseGate
|
|
12
|
-
} from "./chunk-PLNYW6PA.js";
|
|
12
|
+
} from "./chunk-GAN7PW6G.js";
|
|
13
13
|
import {
|
|
14
14
|
getEntityByName,
|
|
15
15
|
getEntityNeighbors,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
} from "./chunk-E6ORBQHP.js";
|
|
25
25
|
import {
|
|
26
26
|
listRecentSessionEvents
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-IAUNGATJ.js";
|
|
28
28
|
import {
|
|
29
29
|
isRerankerAvailable,
|
|
30
30
|
rerankWithScores
|
|
@@ -37,66 +37,76 @@ import {
|
|
|
37
37
|
searchCodeContext,
|
|
38
38
|
searchCodeContextSemantic,
|
|
39
39
|
traceCodeSymbol
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-Q6N6LDEJ.js";
|
|
41
41
|
import {
|
|
42
42
|
exportOrchestration,
|
|
43
43
|
importOrchestration,
|
|
44
44
|
validatePackage
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-U5ZH52FB.js";
|
|
46
46
|
import {
|
|
47
47
|
runDriftProbes
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-O4TATDOV.js";
|
|
49
49
|
import {
|
|
50
50
|
loadOrchestrationPhase,
|
|
51
51
|
setOrchestrationPhase
|
|
52
52
|
} from "./chunk-DH65L4XI.js";
|
|
53
53
|
import {
|
|
54
54
|
createOrRefreshResumeTask
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-XLWF3C4R.js";
|
|
56
|
+
import {
|
|
57
|
+
registerCompleteReminder
|
|
58
|
+
} from "./chunk-JXMSCKRM.js";
|
|
59
|
+
import {
|
|
60
|
+
registerDeactivateBehavior
|
|
61
|
+
} from "./chunk-GZYQTPTF.js";
|
|
62
|
+
import {
|
|
63
|
+
registerSendMessage
|
|
64
|
+
} from "./chunk-D7WLV6WD.js";
|
|
65
|
+
import {
|
|
66
|
+
registerCreateTask
|
|
67
|
+
} from "./chunk-PEFBRL4S.js";
|
|
68
|
+
import {
|
|
69
|
+
registerListTasks
|
|
70
|
+
} from "./chunk-PEXVU3HU.js";
|
|
56
71
|
import {
|
|
57
72
|
registerUpdateTask
|
|
58
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-LLHRJEE4.js";
|
|
59
74
|
import {
|
|
60
75
|
registerCreateReminder
|
|
61
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-SA2PH6WY.js";
|
|
62
77
|
import {
|
|
63
78
|
registerListReminders
|
|
64
|
-
} from "./chunk-
|
|
65
|
-
import {
|
|
66
|
-
registerCompleteReminder
|
|
67
|
-
} from "./chunk-CXAVSQZM.js";
|
|
68
|
-
import {
|
|
69
|
-
registerDeactivateBehavior
|
|
70
|
-
} from "./chunk-TAB5QGIK.js";
|
|
79
|
+
} from "./chunk-7OJH2A6I.js";
|
|
71
80
|
import {
|
|
72
81
|
completeReminder,
|
|
73
82
|
createReminder,
|
|
74
83
|
listReminders
|
|
75
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-6A4COFDG.js";
|
|
76
85
|
import {
|
|
77
|
-
|
|
78
|
-
|
|
86
|
+
TOKENS_PER_IDLE_MINUTE,
|
|
87
|
+
countKillsSince,
|
|
88
|
+
sumTokensSavedSince
|
|
89
|
+
} from "./chunk-FVI4UBKO.js";
|
|
79
90
|
import {
|
|
80
|
-
|
|
81
|
-
|
|
91
|
+
conversationsToMemories,
|
|
92
|
+
detectFormat,
|
|
93
|
+
parseChatGPT,
|
|
94
|
+
parseClaude,
|
|
95
|
+
parseGeneric
|
|
96
|
+
} from "./chunk-Q2G5C3HV.js";
|
|
82
97
|
import {
|
|
83
|
-
|
|
84
|
-
} from "./chunk-
|
|
98
|
+
extractMemoryGraph
|
|
99
|
+
} from "./chunk-EAT5YL3W.js";
|
|
85
100
|
import {
|
|
86
101
|
createSchedule,
|
|
87
102
|
parseHumanCron
|
|
88
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-J64P2LB2.js";
|
|
89
104
|
import {
|
|
90
105
|
status
|
|
91
|
-
} from "./chunk-
|
|
92
|
-
import {
|
|
93
|
-
TOKENS_PER_IDLE_MINUTE,
|
|
94
|
-
countKillsSince,
|
|
95
|
-
sumTokensSavedSince
|
|
96
|
-
} from "./chunk-T5YULDDO.js";
|
|
106
|
+
} from "./chunk-NEHONJJC.js";
|
|
97
107
|
import {
|
|
98
108
|
getAgentSpend
|
|
99
|
-
} from "./chunk-
|
|
109
|
+
} from "./chunk-ZDNLKXZA.js";
|
|
100
110
|
import {
|
|
101
111
|
exportGraphHTML,
|
|
102
112
|
generateGraphReport
|
|
@@ -108,7 +118,7 @@ import {
|
|
|
108
118
|
import {
|
|
109
119
|
formatReport,
|
|
110
120
|
runAudit
|
|
111
|
-
} from "./chunk-
|
|
121
|
+
} from "./chunk-ELUBA7XL.js";
|
|
112
122
|
import {
|
|
113
123
|
runHealthCheck
|
|
114
124
|
} from "./chunk-J73N5EJ6.js";
|
|
@@ -117,45 +127,45 @@ import {
|
|
|
117
127
|
runHealth,
|
|
118
128
|
runTest
|
|
119
129
|
} from "./chunk-RGUPIUVT.js";
|
|
120
|
-
import {
|
|
121
|
-
findSimilarTrajectories,
|
|
122
|
-
hashSignature
|
|
123
|
-
} from "./chunk-K4OWYJSP.js";
|
|
124
|
-
import {
|
|
125
|
-
deactivateBehavior,
|
|
126
|
-
listBehaviorsByDomain,
|
|
127
|
-
listSharedSkills,
|
|
128
|
-
storeBehavior
|
|
129
|
-
} from "./chunk-PJGHBANY.js";
|
|
130
|
-
import {
|
|
131
|
-
countUnconsolidated,
|
|
132
|
-
groupMemories,
|
|
133
|
-
runConsolidation,
|
|
134
|
-
selectUnconsolidated
|
|
135
|
-
} from "./chunk-RQMK3IQH.js";
|
|
136
130
|
import {
|
|
137
131
|
renderClientCOOTemplate
|
|
138
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-4VEHJZ6R.js";
|
|
139
133
|
import {
|
|
140
134
|
deactivateGlobalProcedure,
|
|
141
135
|
loadGlobalProcedures,
|
|
142
136
|
storeGlobalProcedure
|
|
143
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-A7SGEBXJ.js";
|
|
144
138
|
import {
|
|
145
139
|
PLATFORM_PROCEDURES
|
|
146
|
-
} from "./chunk-
|
|
140
|
+
} from "./chunk-LGY2BIOT.js";
|
|
147
141
|
import {
|
|
148
142
|
clearCloudReuploadRequired,
|
|
149
143
|
cloudSync,
|
|
150
144
|
getCloudReuploadRequired,
|
|
151
145
|
markCloudReuploadRequired
|
|
152
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-NEFFFKMD.js";
|
|
153
147
|
import {
|
|
154
148
|
createARecord
|
|
155
149
|
} from "./chunk-X2Z5GT3V.js";
|
|
150
|
+
import {
|
|
151
|
+
findSimilarTrajectories,
|
|
152
|
+
hashSignature
|
|
153
|
+
} from "./chunk-GM2WZTG3.js";
|
|
154
|
+
import {
|
|
155
|
+
deactivateBehavior,
|
|
156
|
+
listBehaviorsByDomain,
|
|
157
|
+
listSharedSkills,
|
|
158
|
+
storeBehavior
|
|
159
|
+
} from "./chunk-TTJE7CCU.js";
|
|
160
|
+
import {
|
|
161
|
+
countUnconsolidated,
|
|
162
|
+
groupMemories,
|
|
163
|
+
runConsolidation,
|
|
164
|
+
selectUnconsolidated
|
|
165
|
+
} from "./chunk-K4OTJP6N.js";
|
|
156
166
|
import {
|
|
157
167
|
embed
|
|
158
|
-
} from "./chunk-
|
|
168
|
+
} from "./chunk-Y7YHLV57.js";
|
|
159
169
|
import {
|
|
160
170
|
readMcpHttpEvents,
|
|
161
171
|
summarizeMcpTransport,
|
|
@@ -163,21 +173,17 @@ import {
|
|
|
163
173
|
} from "./chunk-T5YT64SZ.js";
|
|
164
174
|
import {
|
|
165
175
|
updateTask
|
|
166
|
-
} from "./chunk-
|
|
176
|
+
} from "./chunk-F5AKOE4P.js";
|
|
167
177
|
import {
|
|
168
178
|
fastDbInit
|
|
169
|
-
} from "./chunk-
|
|
179
|
+
} from "./chunk-K5UR73PM.js";
|
|
170
180
|
import {
|
|
171
181
|
MAX_CONCURRENT_WORKERS
|
|
172
|
-
} from "./chunk-
|
|
182
|
+
} from "./chunk-XGYSTVUH.js";
|
|
173
183
|
import {
|
|
174
184
|
hybridSearch,
|
|
175
|
-
lastSearchDegraded,
|
|
176
185
|
recentRecords
|
|
177
|
-
} from "./chunk-
|
|
178
|
-
import {
|
|
179
|
-
getActiveAgent
|
|
180
|
-
} from "./chunk-6WG2VIKC.js";
|
|
186
|
+
} from "./chunk-IP7KJAUW.js";
|
|
181
187
|
import {
|
|
182
188
|
attachDocumentMetadata,
|
|
183
189
|
flushBatch,
|
|
@@ -185,7 +191,14 @@ import {
|
|
|
185
191
|
reserveVersions,
|
|
186
192
|
vectorToBlob,
|
|
187
193
|
writeMemory
|
|
188
|
-
} from "./chunk-
|
|
194
|
+
} from "./chunk-ZXB44R3E.js";
|
|
195
|
+
import {
|
|
196
|
+
extractKeywords,
|
|
197
|
+
keywordsToString
|
|
198
|
+
} from "./chunk-CHCA3ZM2.js";
|
|
199
|
+
import {
|
|
200
|
+
getActiveAgent
|
|
201
|
+
} from "./chunk-LM7H6XU4.js";
|
|
189
202
|
import {
|
|
190
203
|
getMySession,
|
|
191
204
|
resolveExeSession,
|
|
@@ -193,7 +206,7 @@ import {
|
|
|
193
206
|
sessionScopeFilter,
|
|
194
207
|
updateTaskStatus,
|
|
195
208
|
writeCheckpoint
|
|
196
|
-
} from "./chunk-
|
|
209
|
+
} from "./chunk-MFI5OXYW.js";
|
|
197
210
|
import {
|
|
198
211
|
listSessions
|
|
199
212
|
} from "./chunk-64WZEXXA.js";
|
|
@@ -213,7 +226,7 @@ import {
|
|
|
213
226
|
assertEmployeeLimit,
|
|
214
227
|
assertFeature,
|
|
215
228
|
assertMemoryLimit
|
|
216
|
-
} from "./chunk-
|
|
229
|
+
} from "./chunk-RE4VLK45.js";
|
|
217
230
|
import {
|
|
218
231
|
getProjectName
|
|
219
232
|
} from "./chunk-OPU3NYOO.js";
|
|
@@ -229,7 +242,7 @@ import {
|
|
|
229
242
|
isScheduledTrigger,
|
|
230
243
|
loadTriggers,
|
|
231
244
|
sanitizeParam
|
|
232
|
-
} from "./chunk-
|
|
245
|
+
} from "./chunk-KIMO5S45.js";
|
|
233
246
|
import {
|
|
234
247
|
EMPLOYEES_PATH,
|
|
235
248
|
addEmployee,
|
|
@@ -246,7 +259,7 @@ import {
|
|
|
246
259
|
loadEmployeesSync,
|
|
247
260
|
saveEmployees,
|
|
248
261
|
updateIdentity
|
|
249
|
-
} from "./chunk-
|
|
262
|
+
} from "./chunk-SJYOPYXH.js";
|
|
250
263
|
import {
|
|
251
264
|
getMasterKey
|
|
252
265
|
} from "./chunk-6D23UNXU.js";
|
|
@@ -438,11 +451,11 @@ function registerRecallMyMemory(server) {
|
|
|
438
451
|
results = await recentRecords(agentId, searchOptions, limit);
|
|
439
452
|
}
|
|
440
453
|
}
|
|
441
|
-
const FEDERATION_THRESHOLD =
|
|
454
|
+
const FEDERATION_THRESHOLD = 3;
|
|
442
455
|
let federatedCount = 0;
|
|
443
456
|
if (!recent && query && results.length < FEDERATION_THRESHOLD) {
|
|
444
457
|
try {
|
|
445
|
-
const { searchCodeContextSemantic: searchCodeContextSemantic2 } = await import("./code-context-index-
|
|
458
|
+
const { searchCodeContextSemantic: searchCodeContextSemantic2 } = await import("./code-context-index-LSZ3DKTJ.js");
|
|
446
459
|
const codeResults = await Promise.race([
|
|
447
460
|
searchCodeContextSemantic2(query, { limit: 5 }),
|
|
448
461
|
new Promise((_, rej) => setTimeout(() => rej(new Error("timeout")), 2e3))
|
|
@@ -461,41 +474,7 @@ ${cr.content}`,
|
|
|
461
474
|
}
|
|
462
475
|
} catch {
|
|
463
476
|
}
|
|
464
|
-
|
|
465
|
-
const { getClient: getClient2 } = await import("./lib/database.js");
|
|
466
|
-
const client = getClient2();
|
|
467
|
-
const terms = query.split(/\s+/).filter((t) => t.length > 2).slice(0, 6);
|
|
468
|
-
const likeConditions = terms.map(() => "(e.name LIKE ? OR e.properties LIKE ? OR r.type LIKE ?)").join(" OR ");
|
|
469
|
-
const likeArgs = terms.flatMap((t) => [`%${t}%`, `%${t}%`, `%${t}%`]);
|
|
470
|
-
const graphResults = await Promise.race([
|
|
471
|
-
client.execute({
|
|
472
|
-
sql: `SELECT DISTINCT e.name, e.type as entity_type, e.properties as description,
|
|
473
|
-
r.type as relationship_type, r2.name as related_to, r2.type as related_type
|
|
474
|
-
FROM entities e
|
|
475
|
-
LEFT JOIN relationships r ON e.id = r.source_entity_id
|
|
476
|
-
LEFT JOIN entities r2 ON r.target_entity_id = r2.id
|
|
477
|
-
WHERE ${likeConditions || "1=0"}
|
|
478
|
-
LIMIT 10`,
|
|
479
|
-
args: likeArgs
|
|
480
|
-
}),
|
|
481
|
-
new Promise((_, rej) => setTimeout(() => rej(new Error("timeout")), 3e3))
|
|
482
|
-
]);
|
|
483
|
-
for (let i = 0; i < (graphResults.rows?.length ?? 0); i++) {
|
|
484
|
-
const gr = graphResults.rows[i];
|
|
485
|
-
const relPart = gr.related_to ? ` \u2192 ${gr.relationship_type} \u2192 ${gr.related_to} (${gr.related_type})` : "";
|
|
486
|
-
results.push({
|
|
487
|
-
id: `federated-graph-${results.length}`,
|
|
488
|
-
raw_text: `[graph] ${gr.name} (${gr.entity_type})${relPart}
|
|
489
|
-
${gr.description ?? ""}`,
|
|
490
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
491
|
-
tool_name: "graph",
|
|
492
|
-
project_name: project_name ?? "federated",
|
|
493
|
-
has_error: false
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
} catch {
|
|
497
|
-
}
|
|
498
|
-
federatedCount = results.filter((r) => r.tool_name === "code_context" || r.tool_name === "graph").length;
|
|
477
|
+
federatedCount = results.filter((r) => r.tool_name === "code_context").length;
|
|
499
478
|
}
|
|
500
479
|
if (results.length === 0) {
|
|
501
480
|
return {
|
|
@@ -505,7 +484,8 @@ ${gr.description ?? ""}`,
|
|
|
505
484
|
};
|
|
506
485
|
}
|
|
507
486
|
const formatted = results.map((r) => {
|
|
508
|
-
const
|
|
487
|
+
const sourceTag = r._source ? ` [via:${r._source}]` : "";
|
|
488
|
+
const header = `[${r.timestamp}] ${r.tool_name} (${r.project_name})${r.has_error ? " [ERROR]" : ""}${sourceTag}`;
|
|
509
489
|
const body = formatMemoryBody(r.raw_text, resolveMaxChars(max_chars, body_chars), r.id);
|
|
510
490
|
const parts = [header];
|
|
511
491
|
parts.push(`id: ${r.id}`);
|
|
@@ -521,15 +501,14 @@ ${gr.description ?? ""}`,
|
|
|
521
501
|
}).join("\n\n---\n\n");
|
|
522
502
|
const federatedNote = federatedCount > 0 ? `
|
|
523
503
|
|
|
524
|
-
[Federated recall: ${federatedCount} result(s) from code_context
|
|
525
|
-
const degradedWarning = !recent && lastSearchDegraded ? '\n\n\u26A0\uFE0F DEGRADED SEARCH: Embedding daemon is offline \u2014 using keyword matching only (no semantic search). Results may be incomplete. Try graph(action="query_relationships") or graph(action="entity_neighbors") for structured/relational queries.' : "";
|
|
504
|
+
[Federated recall: ${federatedCount} result(s) from code_context (memory had < ${FEDERATION_THRESHOLD} matches)]` : "";
|
|
526
505
|
return {
|
|
527
506
|
content: [
|
|
528
507
|
{
|
|
529
508
|
type: "text",
|
|
530
509
|
text: `Found ${results.length} memories:
|
|
531
510
|
|
|
532
|
-
${formatted}${federatedNote}
|
|
511
|
+
${formatted}${federatedNote}`
|
|
533
512
|
}
|
|
534
513
|
]
|
|
535
514
|
};
|
|
@@ -1462,7 +1441,7 @@ async function handleSupersede(input) {
|
|
|
1462
1441
|
}
|
|
1463
1442
|
try {
|
|
1464
1443
|
const { getClient: getClient2 } = await import("./lib/database.js");
|
|
1465
|
-
const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-
|
|
1444
|
+
const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-HVMLG6FH.js");
|
|
1466
1445
|
const { writeMemory: writeMemory2, flushBatch: flushBatch2 } = await import("./lib/store.js");
|
|
1467
1446
|
const { randomUUID: randomUUID2 } = await import("crypto");
|
|
1468
1447
|
const client = getClient2();
|
|
@@ -1572,9 +1551,9 @@ function registerMemory(server) {
|
|
|
1572
1551
|
return handleSupersede(input);
|
|
1573
1552
|
}
|
|
1574
1553
|
if (action === "core_get" || action === "core_set" || action === "core_delete") {
|
|
1575
|
-
const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-
|
|
1554
|
+
const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-HVMLG6FH.js");
|
|
1576
1555
|
const { agentId } = getActiveAgent2();
|
|
1577
|
-
const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-
|
|
1556
|
+
const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-RAC6M67J.js");
|
|
1578
1557
|
if (action === "core_get") {
|
|
1579
1558
|
const entries = await getCoreMemory(agentId);
|
|
1580
1559
|
const block = formatCoreMemoryBlock(entries);
|
|
@@ -2283,7 +2262,7 @@ function registerResumeEmployee(server) {
|
|
|
2283
2262
|
};
|
|
2284
2263
|
}
|
|
2285
2264
|
try {
|
|
2286
|
-
const { isTmuxSessionAlive } = await import("./tasks-crud-
|
|
2265
|
+
const { isTmuxSessionAlive } = await import("./tasks-crud-HPJKI3QQ.js");
|
|
2287
2266
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
2288
2267
|
for (const row of openTasks.rows) {
|
|
2289
2268
|
const status2 = String(row.status);
|
|
@@ -3332,8 +3311,8 @@ function registerIngestDocument(server) {
|
|
|
3332
3311
|
},
|
|
3333
3312
|
async (input) => {
|
|
3334
3313
|
try {
|
|
3335
|
-
const { assertFeature: assertFeature2 } = await import("./plan-limits-
|
|
3336
|
-
const { assertMemoryLimit: assertMemoryLimit2 } = await import("./plan-limits-
|
|
3314
|
+
const { assertFeature: assertFeature2 } = await import("./plan-limits-4EP46323.js");
|
|
3315
|
+
const { assertMemoryLimit: assertMemoryLimit2 } = await import("./plan-limits-4EP46323.js");
|
|
3337
3316
|
await assertFeature2("wiki");
|
|
3338
3317
|
await assertMemoryLimit2();
|
|
3339
3318
|
const result3 = await ingestDocument(input);
|
|
@@ -4523,12 +4502,12 @@ function registerExportGraph(server) {
|
|
|
4523
4502
|
}
|
|
4524
4503
|
const html = await exportGraphHTML(client);
|
|
4525
4504
|
const fs = await import("fs");
|
|
4526
|
-
const
|
|
4505
|
+
const path19 = await import("path");
|
|
4527
4506
|
const os5 = await import("os");
|
|
4528
|
-
const outDir =
|
|
4507
|
+
const outDir = path19.join(os5.homedir(), ".exe-os", "exports");
|
|
4529
4508
|
fs.mkdirSync(outDir, { recursive: true });
|
|
4530
4509
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
4531
|
-
const filePath =
|
|
4510
|
+
const filePath = path19.join(outDir, `graph-${timestamp}.html`);
|
|
4532
4511
|
fs.writeFileSync(filePath, html, "utf-8");
|
|
4533
4512
|
return {
|
|
4534
4513
|
content: [
|
|
@@ -5442,7 +5421,7 @@ async function getAgentSessionLoad() {
|
|
|
5442
5421
|
return { sessions: [], totalLive: 0, busySessions: 0, idleSessions: 0 };
|
|
5443
5422
|
}
|
|
5444
5423
|
const { getClient: getClient2 } = await import("./lib/database.js");
|
|
5445
|
-
const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-
|
|
5424
|
+
const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-W73Z3XWE.js");
|
|
5446
5425
|
const client = getClient2();
|
|
5447
5426
|
const scope = sessionScopeFilter2();
|
|
5448
5427
|
for (const s of liveAgentSessions) {
|
|
@@ -6416,9 +6395,9 @@ var HostingerApiClient = class {
|
|
|
6416
6395
|
}
|
|
6417
6396
|
this.lastRequestTime = Date.now();
|
|
6418
6397
|
}
|
|
6419
|
-
async request(method,
|
|
6398
|
+
async request(method, path19, body) {
|
|
6420
6399
|
await this.rateLimit();
|
|
6421
|
-
const url = `${this.baseUrl}${
|
|
6400
|
+
const url = `${this.baseUrl}${path19}`;
|
|
6422
6401
|
const headers = {
|
|
6423
6402
|
Authorization: `Bearer ${this.apiKey}`,
|
|
6424
6403
|
"Content-Type": "application/json",
|
|
@@ -7035,7 +7014,7 @@ function registerCreateTrigger(server) {
|
|
|
7035
7014
|
}
|
|
7036
7015
|
},
|
|
7037
7016
|
async ({ name, event, conditions, actions, project, enabled, schedule, query }) => {
|
|
7038
|
-
const { assertFeature: assertFeature2 } = await import("./plan-limits-
|
|
7017
|
+
const { assertFeature: assertFeature2 } = await import("./plan-limits-4EP46323.js");
|
|
7039
7018
|
const gatedActions = {
|
|
7040
7019
|
send_whatsapp: "external_agents",
|
|
7041
7020
|
update_wiki: "wiki"
|
|
@@ -7939,7 +7918,7 @@ function registerConfig(server) {
|
|
|
7939
7918
|
const existing = loadEmployeesSync2();
|
|
7940
7919
|
if (existing.some((e) => e.name === employeeName)) return errorResult8(`Employee "${employeeName}" already exists.`);
|
|
7941
7920
|
try {
|
|
7942
|
-
const { assertEmployeeLimit: assertEmployeeLimit2 } = await import("./plan-limits-
|
|
7921
|
+
const { assertEmployeeLimit: assertEmployeeLimit2 } = await import("./plan-limits-4EP46323.js");
|
|
7943
7922
|
await assertEmployeeLimit2();
|
|
7944
7923
|
} catch (e) {
|
|
7945
7924
|
return errorResult8(e instanceof Error ? e.message : "Employee limit reached.");
|
|
@@ -7955,10 +7934,10 @@ function registerConfig(server) {
|
|
|
7955
7934
|
const { getTemplate: getIdentityTemplate, getTemplateForTitle } = await import("./lib/identity-templates.js");
|
|
7956
7935
|
const { identityPath } = await import("./lib/identity.js");
|
|
7957
7936
|
const { existsSync: existsSync10, mkdirSync: mkdirSync4, writeFileSync: writeFileSync5 } = await import("fs");
|
|
7958
|
-
const
|
|
7937
|
+
const path19 = await import("path");
|
|
7959
7938
|
const template = getIdentityTemplate(role) ?? getTemplateForTitle(role);
|
|
7960
7939
|
const idPath = identityPath(employeeName);
|
|
7961
|
-
const dir =
|
|
7940
|
+
const dir = path19.dirname(idPath);
|
|
7962
7941
|
if (!existsSync10(dir)) mkdirSync4(dir, { recursive: true });
|
|
7963
7942
|
if (template) {
|
|
7964
7943
|
writeFileSync5(idPath, template.replace(/^agent_id: \w+/m, `agent_id: ${employeeName}`), "utf-8");
|
|
@@ -7980,7 +7959,7 @@ You are ${employeeName}. Role: ${role}.`, "utf-8");
|
|
|
7980
7959
|
}
|
|
7981
7960
|
try {
|
|
7982
7961
|
const { generateSessionWrappers } = await import("./lib/session-wrappers.js");
|
|
7983
|
-
const { resolvePackageRoot } = await import("./installer-
|
|
7962
|
+
const { resolvePackageRoot } = await import("./installer-DE2LH5EC.js");
|
|
7984
7963
|
generateSessionWrappers(resolvePackageRoot());
|
|
7985
7964
|
} catch {
|
|
7986
7965
|
}
|
|
@@ -8016,7 +7995,7 @@ function registerListWikiPages(server) {
|
|
|
8016
7995
|
}
|
|
8017
7996
|
},
|
|
8018
7997
|
async ({ workspace, folder }) => {
|
|
8019
|
-
const { assertFeature: assertFeature2 } = await import("./plan-limits-
|
|
7998
|
+
const { assertFeature: assertFeature2 } = await import("./plan-limits-4EP46323.js");
|
|
8020
7999
|
await assertFeature2("wiki");
|
|
8021
8000
|
const apiUrl = process.env.EXE_WIKI_API_URL;
|
|
8022
8001
|
const apiKey = process.env.EXE_WIKI_API_KEY;
|
|
@@ -8116,7 +8095,7 @@ function registerGetWikiPage(server) {
|
|
|
8116
8095
|
}
|
|
8117
8096
|
},
|
|
8118
8097
|
async ({ workspace, document_id, title }) => {
|
|
8119
|
-
const { assertFeature: assertFeature2 } = await import("./plan-limits-
|
|
8098
|
+
const { assertFeature: assertFeature2 } = await import("./plan-limits-4EP46323.js");
|
|
8120
8099
|
await assertFeature2("wiki");
|
|
8121
8100
|
const apiUrl = process.env.EXE_WIKI_API_URL;
|
|
8122
8101
|
const apiKey = process.env.EXE_WIKI_API_KEY;
|
|
@@ -8311,7 +8290,7 @@ function registerWiki(server) {
|
|
|
8311
8290
|
if (!legacyToolName) return errorResult9(`Unknown wiki action: ${String(input.action)}`);
|
|
8312
8291
|
const { action: _action, user_id, ...legacyArgs } = input;
|
|
8313
8292
|
if (user_id && legacyArgs.workspace) {
|
|
8314
|
-
const { checkWikiAccess } = await import("./wiki-acl-
|
|
8293
|
+
const { checkWikiAccess } = await import("./wiki-acl-MSDRCIAI.js");
|
|
8315
8294
|
const { allowed } = await checkWikiAccess(
|
|
8316
8295
|
String(user_id),
|
|
8317
8296
|
String(legacyArgs.workspace),
|
|
@@ -9481,7 +9460,7 @@ function registerWorkflowTool(server) {
|
|
|
9481
9460
|
getWorkflowInstance,
|
|
9482
9461
|
listWorkflowInstances,
|
|
9483
9462
|
approveWorkflowStep
|
|
9484
|
-
} = await import("./workflow-engine-
|
|
9463
|
+
} = await import("./workflow-engine-LT3WTT7V.js");
|
|
9485
9464
|
try {
|
|
9486
9465
|
switch (input.action) {
|
|
9487
9466
|
case "create_workflow": {
|
|
@@ -10646,7 +10625,7 @@ function registerCodeContext(server) {
|
|
|
10646
10625
|
const index = buildCodeContextIndex(opts);
|
|
10647
10626
|
let graphExtract;
|
|
10648
10627
|
try {
|
|
10649
|
-
const { autoExtractGraphEntities } = await import("./graph-auto-extract-
|
|
10628
|
+
const { autoExtractGraphEntities } = await import("./graph-auto-extract-ZJXJOLE2.js");
|
|
10650
10629
|
graphExtract = await autoExtractGraphEntities(opts.projectRoot);
|
|
10651
10630
|
} catch {
|
|
10652
10631
|
}
|
|
@@ -10881,8 +10860,467 @@ function registerTriageFeatureRequest(server) {
|
|
|
10881
10860
|
);
|
|
10882
10861
|
}
|
|
10883
10862
|
|
|
10884
|
-
// src/mcp/tools/
|
|
10863
|
+
// src/mcp/tools/update-support.ts
|
|
10885
10864
|
import { z as z91 } from "zod";
|
|
10865
|
+
import { readdir, readFile as readFile2, writeFile as writeFile4 } from "fs/promises";
|
|
10866
|
+
import path17 from "path";
|
|
10867
|
+
var BUG_STATUS = z91.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
|
|
10868
|
+
var FEATURE_STATUS2 = z91.enum(["open", "planned", "in_progress", "shipped", "closed", "wontdo"]);
|
|
10869
|
+
async function findReportFile(dir, id) {
|
|
10870
|
+
try {
|
|
10871
|
+
const files = await readdir(dir);
|
|
10872
|
+
const prefix = id.slice(0, 8);
|
|
10873
|
+
const match = files.find((f) => f.includes(prefix) && f.endsWith(".md"));
|
|
10874
|
+
return match ? path17.join(dir, match) : null;
|
|
10875
|
+
} catch {
|
|
10876
|
+
return null;
|
|
10877
|
+
}
|
|
10878
|
+
}
|
|
10879
|
+
function updateMarkdownField(content, key, value) {
|
|
10880
|
+
const lines = content.split("\n");
|
|
10881
|
+
const keyPattern = new RegExp(`^${key}:\\s*`);
|
|
10882
|
+
let found = false;
|
|
10883
|
+
const updated = lines.map((line) => {
|
|
10884
|
+
if (keyPattern.test(line)) {
|
|
10885
|
+
found = true;
|
|
10886
|
+
return `${key}: ${value}`;
|
|
10887
|
+
}
|
|
10888
|
+
return line;
|
|
10889
|
+
});
|
|
10890
|
+
if (!found) {
|
|
10891
|
+
let insertIdx = -1;
|
|
10892
|
+
for (let i = 0; i < updated.length; i++) {
|
|
10893
|
+
if (/^[a-z_]+:\s/.test(updated[i])) {
|
|
10894
|
+
insertIdx = i;
|
|
10895
|
+
}
|
|
10896
|
+
}
|
|
10897
|
+
if (insertIdx >= 0) {
|
|
10898
|
+
updated.splice(insertIdx + 1, 0, `${key}: ${value}`);
|
|
10899
|
+
} else {
|
|
10900
|
+
const titleIdx = updated.findIndex((l) => l.startsWith("# "));
|
|
10901
|
+
updated.splice(titleIdx >= 0 ? titleIdx + 2 : 0, 0, `${key}: ${value}`);
|
|
10902
|
+
}
|
|
10903
|
+
}
|
|
10904
|
+
return updated.join("\n");
|
|
10905
|
+
}
|
|
10906
|
+
async function sendStatusUpstream(endpointPath, payload) {
|
|
10907
|
+
const config = await loadConfig();
|
|
10908
|
+
const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
|
|
10909
|
+
const baseEndpoint = config.support?.bugReportEndpoint || process.env.EXE_BUG_REPORT_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support` : "https://api.askexe.com/v1/support");
|
|
10910
|
+
const base = baseEndpoint.replace(/\/(bug-reports|feature-requests)\/?$/, "");
|
|
10911
|
+
const endpoint2 = `${base}/${endpointPath}`;
|
|
10912
|
+
const token = config.support?.bugReportToken || process.env.EXE_BUG_REPORT_TOKEN;
|
|
10913
|
+
const licenseKey = loadLicense() || process.env.EXE_LICENSE_KEY || config.cloud?.apiKey;
|
|
10914
|
+
const licenseToken = readCachedLicenseToken();
|
|
10915
|
+
try {
|
|
10916
|
+
const parsed = new URL(endpoint2);
|
|
10917
|
+
if (parsed.protocol !== "https:" && !["localhost", "127.0.0.1", "::1"].includes(parsed.hostname)) {
|
|
10918
|
+
return "failed: insecure endpoint rejected";
|
|
10919
|
+
}
|
|
10920
|
+
const response = await fetch(parsed, {
|
|
10921
|
+
method: "PATCH",
|
|
10922
|
+
headers: {
|
|
10923
|
+
"content-type": "application/json",
|
|
10924
|
+
...token ? { authorization: `Bearer ${token}` } : {},
|
|
10925
|
+
...licenseKey ? { "x-exe-license-key": licenseKey } : {},
|
|
10926
|
+
...licenseToken ? { "x-exe-license-token": licenseToken } : {}
|
|
10927
|
+
},
|
|
10928
|
+
body: JSON.stringify(payload),
|
|
10929
|
+
signal: AbortSignal.timeout(1e4)
|
|
10930
|
+
});
|
|
10931
|
+
if (!response.ok) return `failed: HTTP ${response.status}`;
|
|
10932
|
+
return "sent";
|
|
10933
|
+
} catch (err) {
|
|
10934
|
+
return `failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
10935
|
+
}
|
|
10936
|
+
}
|
|
10937
|
+
function registerUpdateBugReport(server) {
|
|
10938
|
+
server.registerTool(
|
|
10939
|
+
"update_bug_report",
|
|
10940
|
+
{
|
|
10941
|
+
title: "Update Bug Report",
|
|
10942
|
+
description: "Update the status of a previously filed bug report. Updates local markdown file, stores a memory, and POSTs the change to AskExe support. Statuses: open \u2192 triaged \u2192 fixed \u2192 closed \u2192 wontfix.",
|
|
10943
|
+
inputSchema: {
|
|
10944
|
+
id: z91.string().min(8).describe("Bug report ID (UUID or first 8 chars)"),
|
|
10945
|
+
status: BUG_STATUS.describe("New status"),
|
|
10946
|
+
fix_version: z91.string().optional().describe("Version that fixes this bug (e.g. '0.9.161')"),
|
|
10947
|
+
notes: z91.string().optional().describe("Update notes \u2014 why this status change"),
|
|
10948
|
+
send_upstream: z91.boolean().default(true).describe("POST update to AskExe support endpoint")
|
|
10949
|
+
}
|
|
10950
|
+
},
|
|
10951
|
+
async ({ id, status: status2, fix_version, notes, send_upstream }) => {
|
|
10952
|
+
const { agentId, agentRole } = getActiveAgent();
|
|
10953
|
+
const reportDir = path17.join(EXE_AI_DIR, "bug-reports");
|
|
10954
|
+
const reportPath = await findReportFile(reportDir, id);
|
|
10955
|
+
let title = id;
|
|
10956
|
+
if (reportPath) {
|
|
10957
|
+
let content = await readFile2(reportPath, "utf-8");
|
|
10958
|
+
const titleMatch = content.match(/^# Bug Report — (.+)$/m);
|
|
10959
|
+
if (titleMatch) title = titleMatch[1];
|
|
10960
|
+
content = updateMarkdownField(content, "status", status2);
|
|
10961
|
+
if (fix_version) content = updateMarkdownField(content, "fix_version", fix_version);
|
|
10962
|
+
content = updateMarkdownField(content, "updated_at", (/* @__PURE__ */ new Date()).toISOString());
|
|
10963
|
+
if (notes) {
|
|
10964
|
+
content += `
|
|
10965
|
+
|
|
10966
|
+
## Update \u2014 ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
10967
|
+
|
|
10968
|
+
Status: ${status2}
|
|
10969
|
+
${fix_version ? `Fix version: ${fix_version}
|
|
10970
|
+
` : ""}${notes}
|
|
10971
|
+
`;
|
|
10972
|
+
}
|
|
10973
|
+
await writeFile4(reportPath, content, "utf-8");
|
|
10974
|
+
}
|
|
10975
|
+
const memoryText = fix_version ? `Bug "${title}" marked ${status2} in v${fix_version}${notes ? `. ${notes}` : ""}` : `Bug "${title}" marked ${status2}${notes ? `. ${notes}` : ""}`;
|
|
10976
|
+
let vector = null;
|
|
10977
|
+
try {
|
|
10978
|
+
vector = await embed(memoryText);
|
|
10979
|
+
} catch {
|
|
10980
|
+
vector = null;
|
|
10981
|
+
}
|
|
10982
|
+
await writeMemory({
|
|
10983
|
+
id: `${id}-update-${Date.now()}`,
|
|
10984
|
+
agent_id: agentId,
|
|
10985
|
+
agent_role: agentRole,
|
|
10986
|
+
session_id: process.env.SESSION_ID ?? "manual",
|
|
10987
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
10988
|
+
tool_name: "update_bug_report",
|
|
10989
|
+
project_name: "support",
|
|
10990
|
+
has_error: false,
|
|
10991
|
+
raw_text: memoryText,
|
|
10992
|
+
vector,
|
|
10993
|
+
source_path: reportPath ?? void 0,
|
|
10994
|
+
source_type: "bug_report_update",
|
|
10995
|
+
memory_type: "observation",
|
|
10996
|
+
tier: 1,
|
|
10997
|
+
importance: 7,
|
|
10998
|
+
intent: "update",
|
|
10999
|
+
domain: "support",
|
|
11000
|
+
file_paths: null
|
|
11001
|
+
});
|
|
11002
|
+
await flushBatch();
|
|
11003
|
+
const upstreamPayload = {
|
|
11004
|
+
id,
|
|
11005
|
+
status: status2,
|
|
11006
|
+
fix_version,
|
|
11007
|
+
triage_notes: notes,
|
|
11008
|
+
updated_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
11009
|
+
agent_id: agentId
|
|
11010
|
+
};
|
|
11011
|
+
const upstreamStatus = send_upstream ? await sendStatusUpstream(`bug-reports/${encodeURIComponent(id)}`, upstreamPayload) : "skipped";
|
|
11012
|
+
return {
|
|
11013
|
+
content: [
|
|
11014
|
+
{
|
|
11015
|
+
type: "text",
|
|
11016
|
+
text: `Bug report updated.
|
|
11017
|
+
ID: ${id}
|
|
11018
|
+
Status: ${status2}
|
|
11019
|
+
${fix_version ? `Fix version: ${fix_version}
|
|
11020
|
+
` : ""}Local file: ${reportPath ?? "not found (upstream-only update)"}
|
|
11021
|
+
Memory stored: ${memoryText}
|
|
11022
|
+
Upstream status: ${upstreamStatus}`
|
|
11023
|
+
}
|
|
11024
|
+
]
|
|
11025
|
+
};
|
|
11026
|
+
}
|
|
11027
|
+
);
|
|
11028
|
+
}
|
|
11029
|
+
function registerUpdateFeatureRequest(server) {
|
|
11030
|
+
server.registerTool(
|
|
11031
|
+
"update_feature_request",
|
|
11032
|
+
{
|
|
11033
|
+
title: "Update Feature Request",
|
|
11034
|
+
description: "Update the status of a previously filed feature request. Updates local markdown file, stores a memory, and POSTs the change to AskExe support. Statuses: open \u2192 planned \u2192 in_progress \u2192 shipped \u2192 closed \u2192 wontdo.",
|
|
11035
|
+
inputSchema: {
|
|
11036
|
+
id: z91.string().min(8).describe("Feature request ID (UUID or first 8 chars)"),
|
|
11037
|
+
status: FEATURE_STATUS2.describe("New status"),
|
|
11038
|
+
shipped_version: z91.string().optional().describe("Version that ships this feature (e.g. '0.9.170')"),
|
|
11039
|
+
notes: z91.string().optional().describe("Update notes \u2014 why this status change"),
|
|
11040
|
+
send_upstream: z91.boolean().default(true).describe("POST update to AskExe support endpoint")
|
|
11041
|
+
}
|
|
11042
|
+
},
|
|
11043
|
+
async ({ id, status: status2, shipped_version, notes, send_upstream }) => {
|
|
11044
|
+
const { agentId, agentRole } = getActiveAgent();
|
|
11045
|
+
const reportDir = path17.join(EXE_AI_DIR, "feature-requests");
|
|
11046
|
+
const reportPath = await findReportFile(reportDir, id);
|
|
11047
|
+
let title = id;
|
|
11048
|
+
if (reportPath) {
|
|
11049
|
+
let content = await readFile2(reportPath, "utf-8");
|
|
11050
|
+
const titleMatch = content.match(/^# Feature Request — (.+)$/m);
|
|
11051
|
+
if (titleMatch) title = titleMatch[1];
|
|
11052
|
+
content = updateMarkdownField(content, "status", status2);
|
|
11053
|
+
if (shipped_version) content = updateMarkdownField(content, "shipped_version", shipped_version);
|
|
11054
|
+
content = updateMarkdownField(content, "updated_at", (/* @__PURE__ */ new Date()).toISOString());
|
|
11055
|
+
if (notes) {
|
|
11056
|
+
content += `
|
|
11057
|
+
|
|
11058
|
+
## Update \u2014 ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
11059
|
+
|
|
11060
|
+
Status: ${status2}
|
|
11061
|
+
${shipped_version ? `Shipped version: ${shipped_version}
|
|
11062
|
+
` : ""}${notes}
|
|
11063
|
+
`;
|
|
11064
|
+
}
|
|
11065
|
+
await writeFile4(reportPath, content, "utf-8");
|
|
11066
|
+
}
|
|
11067
|
+
const memoryText = shipped_version ? `Feature "${title}" marked ${status2} in v${shipped_version}${notes ? `. ${notes}` : ""}` : `Feature "${title}" marked ${status2}${notes ? `. ${notes}` : ""}`;
|
|
11068
|
+
let vector = null;
|
|
11069
|
+
try {
|
|
11070
|
+
vector = await embed(memoryText);
|
|
11071
|
+
} catch {
|
|
11072
|
+
vector = null;
|
|
11073
|
+
}
|
|
11074
|
+
await writeMemory({
|
|
11075
|
+
id: `${id}-update-${Date.now()}`,
|
|
11076
|
+
agent_id: agentId,
|
|
11077
|
+
agent_role: agentRole,
|
|
11078
|
+
session_id: process.env.SESSION_ID ?? "manual",
|
|
11079
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
11080
|
+
tool_name: "update_feature_request",
|
|
11081
|
+
project_name: "support",
|
|
11082
|
+
has_error: false,
|
|
11083
|
+
raw_text: memoryText,
|
|
11084
|
+
vector,
|
|
11085
|
+
source_path: reportPath ?? void 0,
|
|
11086
|
+
source_type: "feature_request_update",
|
|
11087
|
+
memory_type: "observation",
|
|
11088
|
+
tier: 1,
|
|
11089
|
+
importance: 7,
|
|
11090
|
+
intent: "update",
|
|
11091
|
+
domain: "support",
|
|
11092
|
+
file_paths: null
|
|
11093
|
+
});
|
|
11094
|
+
await flushBatch();
|
|
11095
|
+
const upstreamPayload = {
|
|
11096
|
+
id,
|
|
11097
|
+
status: status2,
|
|
11098
|
+
shipped_version,
|
|
11099
|
+
response_notes: notes,
|
|
11100
|
+
updated_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
11101
|
+
agent_id: agentId
|
|
11102
|
+
};
|
|
11103
|
+
const upstreamStatus = send_upstream ? await sendStatusUpstream(`feature-requests/${encodeURIComponent(id)}`, upstreamPayload) : "skipped";
|
|
11104
|
+
return {
|
|
11105
|
+
content: [
|
|
11106
|
+
{
|
|
11107
|
+
type: "text",
|
|
11108
|
+
text: `Feature request updated.
|
|
11109
|
+
ID: ${id}
|
|
11110
|
+
Status: ${status2}
|
|
11111
|
+
${shipped_version ? `Shipped version: ${shipped_version}
|
|
11112
|
+
` : ""}Local file: ${reportPath ?? "not found (upstream-only update)"}
|
|
11113
|
+
Memory stored: ${memoryText}
|
|
11114
|
+
Upstream status: ${upstreamStatus}`
|
|
11115
|
+
}
|
|
11116
|
+
]
|
|
11117
|
+
};
|
|
11118
|
+
}
|
|
11119
|
+
);
|
|
11120
|
+
}
|
|
11121
|
+
|
|
11122
|
+
// src/mcp/tools/import-conversations.ts
|
|
11123
|
+
import { z as z92 } from "zod";
|
|
11124
|
+
import crypto7 from "crypto";
|
|
11125
|
+
import { readFile as readFile3, readdir as readdir2, stat } from "fs/promises";
|
|
11126
|
+
import path18 from "path";
|
|
11127
|
+
var DEFAULT_MAX_MEMORIES = 5e4;
|
|
11128
|
+
var YIELD_INTERVAL = 50;
|
|
11129
|
+
async function parseFile(filePath, format2) {
|
|
11130
|
+
const content = await readFile3(filePath, "utf-8");
|
|
11131
|
+
const detectedFormat = format2 === "auto" ? detectFormat(content, filePath) : format2;
|
|
11132
|
+
let conversations;
|
|
11133
|
+
switch (detectedFormat) {
|
|
11134
|
+
case "chatgpt":
|
|
11135
|
+
conversations = parseChatGPT(content, filePath);
|
|
11136
|
+
break;
|
|
11137
|
+
case "claude":
|
|
11138
|
+
conversations = parseClaude(content, filePath);
|
|
11139
|
+
break;
|
|
11140
|
+
case "markdown":
|
|
11141
|
+
case "generic":
|
|
11142
|
+
default:
|
|
11143
|
+
conversations = parseGeneric(content, filePath);
|
|
11144
|
+
break;
|
|
11145
|
+
}
|
|
11146
|
+
return { conversations, detectedFormat };
|
|
11147
|
+
}
|
|
11148
|
+
async function collectFiles(dirPath) {
|
|
11149
|
+
const entries = await readdir2(dirPath, { withFileTypes: true });
|
|
11150
|
+
const files = [];
|
|
11151
|
+
for (const entry of entries) {
|
|
11152
|
+
const full = path18.join(dirPath, entry.name);
|
|
11153
|
+
if (entry.isDirectory()) {
|
|
11154
|
+
files.push(...await collectFiles(full));
|
|
11155
|
+
} else if (entry.isFile()) {
|
|
11156
|
+
const ext = path18.extname(entry.name).toLowerCase();
|
|
11157
|
+
if ([".json", ".md", ".markdown", ".txt"].includes(ext)) {
|
|
11158
|
+
files.push(full);
|
|
11159
|
+
}
|
|
11160
|
+
}
|
|
11161
|
+
}
|
|
11162
|
+
return files;
|
|
11163
|
+
}
|
|
11164
|
+
function registerImportConversations(server) {
|
|
11165
|
+
server.registerTool(
|
|
11166
|
+
"import_conversations",
|
|
11167
|
+
{
|
|
11168
|
+
title: "Import Conversations",
|
|
11169
|
+
description: "Import conversation history from ChatGPT, Claude, or generic exports. Parses conversations, extracts keywords and graph entities, stores as memories. Supports conversations.json (ChatGPT), Claude JSON export, markdown files, and generic JSON arrays. Deduplicates by content hash.",
|
|
11170
|
+
inputSchema: {
|
|
11171
|
+
path: z92.string().describe("File path or directory to import from"),
|
|
11172
|
+
format: z92.enum(["chatgpt", "claude", "generic", "markdown", "auto"]).default("auto").describe("Conversation format. 'auto' detects from content."),
|
|
11173
|
+
project_name: z92.string().optional().describe("Project name for memory scoping"),
|
|
11174
|
+
dry_run: z92.boolean().default(false).describe("Parse and report counts without storing"),
|
|
11175
|
+
force: z92.boolean().default(false).describe("Override the 50K memory safety cap"),
|
|
11176
|
+
max_memories: z92.number().optional().describe("Custom memory cap (default 50000)")
|
|
11177
|
+
}
|
|
11178
|
+
},
|
|
11179
|
+
async ({ path: inputPath, format: format2, project_name, dry_run, force, max_memories }) => {
|
|
11180
|
+
const { agentId, agentRole } = getActiveAgent();
|
|
11181
|
+
const cap = max_memories ?? DEFAULT_MAX_MEMORIES;
|
|
11182
|
+
const resolvedPath = path18.resolve(inputPath);
|
|
11183
|
+
let files;
|
|
11184
|
+
try {
|
|
11185
|
+
const stats = await stat(resolvedPath);
|
|
11186
|
+
if (stats.isDirectory()) {
|
|
11187
|
+
files = await collectFiles(resolvedPath);
|
|
11188
|
+
} else {
|
|
11189
|
+
files = [resolvedPath];
|
|
11190
|
+
}
|
|
11191
|
+
} catch (err) {
|
|
11192
|
+
return {
|
|
11193
|
+
content: [{
|
|
11194
|
+
type: "text",
|
|
11195
|
+
text: `Path not found: ${resolvedPath}
|
|
11196
|
+
${err instanceof Error ? err.message : String(err)}`
|
|
11197
|
+
}],
|
|
11198
|
+
isError: true
|
|
11199
|
+
};
|
|
11200
|
+
}
|
|
11201
|
+
if (files.length === 0) {
|
|
11202
|
+
return {
|
|
11203
|
+
content: [{
|
|
11204
|
+
type: "text",
|
|
11205
|
+
text: `No importable files found in ${resolvedPath}. Supported: .json, .md, .markdown, .txt`
|
|
11206
|
+
}],
|
|
11207
|
+
isError: true
|
|
11208
|
+
};
|
|
11209
|
+
}
|
|
11210
|
+
let totalConversations = 0;
|
|
11211
|
+
let allDetectedFormat = "generic";
|
|
11212
|
+
const allConversations = [];
|
|
11213
|
+
for (const file of files) {
|
|
11214
|
+
try {
|
|
11215
|
+
const { conversations, detectedFormat } = await parseFile(file, format2);
|
|
11216
|
+
allConversations.push(...conversations);
|
|
11217
|
+
totalConversations += conversations.length;
|
|
11218
|
+
allDetectedFormat = detectedFormat;
|
|
11219
|
+
} catch (err) {
|
|
11220
|
+
console.warn(`[import] Skipping ${file}: ${err instanceof Error ? err.message : String(err)}`);
|
|
11221
|
+
}
|
|
11222
|
+
}
|
|
11223
|
+
if (allConversations.length === 0) {
|
|
11224
|
+
return {
|
|
11225
|
+
content: [{
|
|
11226
|
+
type: "text",
|
|
11227
|
+
text: `No conversations found in ${files.length} file(s). Format: ${format2}. Path: ${resolvedPath}`
|
|
11228
|
+
}]
|
|
11229
|
+
};
|
|
11230
|
+
}
|
|
11231
|
+
const memories = conversationsToMemories(allConversations, allDetectedFormat);
|
|
11232
|
+
if (memories.length > cap && !force) {
|
|
11233
|
+
return {
|
|
11234
|
+
content: [{
|
|
11235
|
+
type: "text",
|
|
11236
|
+
text: `Import would create ${memories.length} memories (cap: ${cap}). Use force=true to override.
|
|
11237
|
+
Files: ${files.length} | Conversations: ${totalConversations} | Format: ${allDetectedFormat}`
|
|
11238
|
+
}]
|
|
11239
|
+
};
|
|
11240
|
+
}
|
|
11241
|
+
if (dry_run) {
|
|
11242
|
+
return {
|
|
11243
|
+
content: [{
|
|
11244
|
+
type: "text",
|
|
11245
|
+
text: `[dry run] Import summary:
|
|
11246
|
+
Files: ${files.length}
|
|
11247
|
+
Format: ${allDetectedFormat}
|
|
11248
|
+
Conversations: ${totalConversations}
|
|
11249
|
+
Memories to create: ${memories.length}
|
|
11250
|
+
Path: ${resolvedPath}`
|
|
11251
|
+
}]
|
|
11252
|
+
};
|
|
11253
|
+
}
|
|
11254
|
+
let stored = 0;
|
|
11255
|
+
let skipped = 0;
|
|
11256
|
+
const projectName = project_name ?? "import";
|
|
11257
|
+
const sessionId = process.env.SESSION_ID ?? "import";
|
|
11258
|
+
for (let i = 0; i < memories.length; i++) {
|
|
11259
|
+
const mem = memories[i];
|
|
11260
|
+
const keywords = extractKeywords(mem.text);
|
|
11261
|
+
const graphResult = extractMemoryGraph(
|
|
11262
|
+
mem.text,
|
|
11263
|
+
agentId,
|
|
11264
|
+
projectName,
|
|
11265
|
+
"import_conversations"
|
|
11266
|
+
);
|
|
11267
|
+
const memoryId = crypto7.randomUUID();
|
|
11268
|
+
try {
|
|
11269
|
+
await writeMemory({
|
|
11270
|
+
id: memoryId,
|
|
11271
|
+
agent_id: agentId,
|
|
11272
|
+
agent_role: agentRole,
|
|
11273
|
+
session_id: sessionId,
|
|
11274
|
+
timestamp: mem.metadata.original_timestamp ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
11275
|
+
tool_name: "import_conversations",
|
|
11276
|
+
project_name: projectName,
|
|
11277
|
+
has_error: false,
|
|
11278
|
+
raw_text: mem.text,
|
|
11279
|
+
vector: null,
|
|
11280
|
+
// NULL vectors — backfill later
|
|
11281
|
+
source_path: mem.metadata.source_path,
|
|
11282
|
+
source_type: "conversation_import",
|
|
11283
|
+
memory_type: "conversation",
|
|
11284
|
+
tier: 3,
|
|
11285
|
+
// Passive ingestion
|
|
11286
|
+
importance: 4,
|
|
11287
|
+
// Imported conversations are moderate importance
|
|
11288
|
+
intent: "import",
|
|
11289
|
+
domain: "conversation",
|
|
11290
|
+
keywords: keywordsToString(keywords),
|
|
11291
|
+
referenced_entities: graphResult.entities.length > 0 ? JSON.stringify(graphResult.entities.map((e) => e.name)) : null
|
|
11292
|
+
});
|
|
11293
|
+
stored++;
|
|
11294
|
+
} catch {
|
|
11295
|
+
skipped++;
|
|
11296
|
+
}
|
|
11297
|
+
if ((i + 1) % YIELD_INTERVAL === 0) {
|
|
11298
|
+
await flushBatch();
|
|
11299
|
+
await new Promise((r) => setTimeout(r, 0));
|
|
11300
|
+
if ((i + 1) % (YIELD_INTERVAL * 10) === 0) {
|
|
11301
|
+
console.log(`[import] ${i + 1}/${memories.length} memories processed, ${stored} stored`);
|
|
11302
|
+
}
|
|
11303
|
+
}
|
|
11304
|
+
}
|
|
11305
|
+
await flushBatch();
|
|
11306
|
+
return {
|
|
11307
|
+
content: [{
|
|
11308
|
+
type: "text",
|
|
11309
|
+
text: `Import complete.
|
|
11310
|
+
Files: ${files.length}
|
|
11311
|
+
Format: ${allDetectedFormat}
|
|
11312
|
+
Conversations: ${totalConversations}
|
|
11313
|
+
Memories stored: ${stored}
|
|
11314
|
+
Skipped (duplicates): ${skipped}
|
|
11315
|
+
Path: ${resolvedPath}`
|
|
11316
|
+
}]
|
|
11317
|
+
};
|
|
11318
|
+
}
|
|
11319
|
+
);
|
|
11320
|
+
}
|
|
11321
|
+
|
|
11322
|
+
// src/mcp/tools/decision.ts
|
|
11323
|
+
import { z as z93 } from "zod";
|
|
10886
11324
|
function buildHandlers6() {
|
|
10887
11325
|
const tools = /* @__PURE__ */ new Map();
|
|
10888
11326
|
const fake = {
|
|
@@ -10906,12 +11344,12 @@ function registerDecision(server) {
|
|
|
10906
11344
|
title: "Decision",
|
|
10907
11345
|
description: "Store or retrieve authoritative decisions. Actions: store (persist a decision by domain), get (look up a decision by domain/query).",
|
|
10908
11346
|
inputSchema: {
|
|
10909
|
-
action:
|
|
10910
|
-
domain:
|
|
10911
|
-
decision:
|
|
10912
|
-
rationale:
|
|
10913
|
-
query:
|
|
10914
|
-
limit:
|
|
11347
|
+
action: z93.enum(["store", "get"]).describe("Decision operation"),
|
|
11348
|
+
domain: z93.string().optional().describe("Decision domain (e.g. 'architecture', 'hiring')"),
|
|
11349
|
+
decision: z93.string().optional().describe("Decision text for action=store"),
|
|
11350
|
+
rationale: z93.string().optional().describe("Why this decision was made (action=store)"),
|
|
11351
|
+
query: z93.string().optional().describe("Search query for action=get"),
|
|
11352
|
+
limit: z93.coerce.number().optional().describe("Max results for action=get")
|
|
10915
11353
|
}
|
|
10916
11354
|
},
|
|
10917
11355
|
async (input, extra) => {
|
|
@@ -10927,7 +11365,7 @@ function registerDecision(server) {
|
|
|
10927
11365
|
}
|
|
10928
11366
|
|
|
10929
11367
|
// src/mcp/tools/session.ts
|
|
10930
|
-
import { z as
|
|
11368
|
+
import { z as z94 } from "zod";
|
|
10931
11369
|
function buildHandlers7() {
|
|
10932
11370
|
const tools = /* @__PURE__ */ new Map();
|
|
10933
11371
|
const fake = {
|
|
@@ -10951,9 +11389,9 @@ function registerSession(server) {
|
|
|
10951
11389
|
title: "Session",
|
|
10952
11390
|
description: "Session inspection tools. Actions: events (get session event log), last_response (get the most recent assistant response text).",
|
|
10953
11391
|
inputSchema: {
|
|
10954
|
-
action:
|
|
10955
|
-
session_id:
|
|
10956
|
-
limit:
|
|
11392
|
+
action: z94.enum(["events", "last_response"]).describe("Session operation"),
|
|
11393
|
+
session_id: z94.string().optional().describe("Session ID for action=events"),
|
|
11394
|
+
limit: z94.coerce.number().optional().describe("Max events for action=events")
|
|
10957
11395
|
}
|
|
10958
11396
|
},
|
|
10959
11397
|
async (input, extra) => {
|
|
@@ -10969,7 +11407,7 @@ function registerSession(server) {
|
|
|
10969
11407
|
}
|
|
10970
11408
|
|
|
10971
11409
|
// src/mcp/tools/support-consolidated.ts
|
|
10972
|
-
import { z as
|
|
11410
|
+
import { z as z95 } from "zod";
|
|
10973
11411
|
function buildHandlers8() {
|
|
10974
11412
|
const tools = /* @__PURE__ */ new Map();
|
|
10975
11413
|
const fake = {
|
|
@@ -10979,6 +11417,8 @@ function buildHandlers8() {
|
|
|
10979
11417
|
};
|
|
10980
11418
|
registerCreateBugReport(fake);
|
|
10981
11419
|
registerCreateFeatureRequest(fake);
|
|
11420
|
+
registerUpdateBugReport(fake);
|
|
11421
|
+
registerUpdateFeatureRequest(fake);
|
|
10982
11422
|
registerSupportTools(fake);
|
|
10983
11423
|
registerListBugReports(fake);
|
|
10984
11424
|
registerGetBugReport(fake);
|
|
@@ -10991,6 +11431,8 @@ function buildHandlers8() {
|
|
|
10991
11431
|
var ACTION_TO_TOOL5 = {
|
|
10992
11432
|
create_bug: "create_bug_report",
|
|
10993
11433
|
create_feature: "create_feature_request",
|
|
11434
|
+
update_bug: "update_bug_report",
|
|
11435
|
+
update_feature: "update_feature_request",
|
|
10994
11436
|
list_my_bugs: "list_my_bug_reports",
|
|
10995
11437
|
list_my_features: "list_my_feature_requests",
|
|
10996
11438
|
list_bugs: "list_bug_reports",
|
|
@@ -11008,11 +11450,13 @@ function registerSupportConsolidated(server) {
|
|
|
11008
11450
|
"support",
|
|
11009
11451
|
{
|
|
11010
11452
|
title: "Support",
|
|
11011
|
-
description: "Bug reports, feature requests, and support system. Actions: create_bug, create_feature, list_my_bugs, list_my_features, list_bugs, get_bug, triage_bug, list_features, get_feature, triage_feature, health, test. Use 'product' param to file bugs for any AskExe product (exe-os, exe-create, exe-wiki, etc.).",
|
|
11453
|
+
description: "Bug reports, feature requests, and support system. Actions: create_bug, create_feature, update_bug, update_feature, list_my_bugs, list_my_features, list_bugs, get_bug, triage_bug, list_features, get_feature, triage_feature, health, test. Use 'product' param to file bugs for any AskExe product (exe-os, exe-create, exe-wiki, etc.).",
|
|
11012
11454
|
inputSchema: {
|
|
11013
|
-
action:
|
|
11455
|
+
action: z95.enum([
|
|
11014
11456
|
"create_bug",
|
|
11015
11457
|
"create_feature",
|
|
11458
|
+
"update_bug",
|
|
11459
|
+
"update_feature",
|
|
11016
11460
|
"list_my_bugs",
|
|
11017
11461
|
"list_my_features",
|
|
11018
11462
|
"list_bugs",
|
|
@@ -11024,27 +11468,27 @@ function registerSupportConsolidated(server) {
|
|
|
11024
11468
|
"health",
|
|
11025
11469
|
"test"
|
|
11026
11470
|
]).describe("Support operation"),
|
|
11027
|
-
title:
|
|
11028
|
-
description:
|
|
11029
|
-
steps_to_reproduce:
|
|
11030
|
-
expected_behavior:
|
|
11031
|
-
actual_behavior:
|
|
11032
|
-
severity:
|
|
11033
|
-
product:
|
|
11034
|
-
use_case:
|
|
11035
|
-
proposed_solution:
|
|
11036
|
-
priority:
|
|
11037
|
-
id:
|
|
11038
|
-
status:
|
|
11039
|
-
classification:
|
|
11040
|
-
resolution:
|
|
11041
|
-
notes:
|
|
11042
|
-
triage_notes:
|
|
11043
|
-
linked_task_id:
|
|
11044
|
-
linked_commit:
|
|
11045
|
-
fixed_version:
|
|
11046
|
-
shipped_version:
|
|
11047
|
-
limit:
|
|
11471
|
+
title: z95.string().optional().describe("Bug/feature title"),
|
|
11472
|
+
description: z95.string().optional().describe("Bug/feature description"),
|
|
11473
|
+
steps_to_reproduce: z95.string().optional().describe("Steps to reproduce (bugs)"),
|
|
11474
|
+
expected_behavior: z95.string().optional().describe("Expected behavior (bugs)"),
|
|
11475
|
+
actual_behavior: z95.string().optional().describe("Actual behavior (bugs)"),
|
|
11476
|
+
severity: z95.string().optional().describe("Severity: p0/p1/p2/p3"),
|
|
11477
|
+
product: z95.string().optional().describe("Product: exe-os (default), exe-create, exe-wiki, exe-gateway, exe-crm, exe-build"),
|
|
11478
|
+
use_case: z95.string().optional().describe("Use case (features)"),
|
|
11479
|
+
proposed_solution: z95.string().optional().describe("Proposed solution (features)"),
|
|
11480
|
+
priority: z95.string().optional().describe("Priority (features)"),
|
|
11481
|
+
id: z95.string().optional().describe("Bug/feature ID for get/triage"),
|
|
11482
|
+
status: z95.string().optional().describe("Filter by status"),
|
|
11483
|
+
classification: z95.string().optional().describe("Triage classification"),
|
|
11484
|
+
resolution: z95.string().optional().describe("Triage resolution"),
|
|
11485
|
+
notes: z95.string().optional().describe("Triage notes (mapped to triage_notes for bug/feature triage)"),
|
|
11486
|
+
triage_notes: z95.string().optional().describe("Triage notes (legacy field name)"),
|
|
11487
|
+
linked_task_id: z95.string().optional().describe("Linked task ID for triage"),
|
|
11488
|
+
linked_commit: z95.string().optional().describe("Linked commit hash for triage"),
|
|
11489
|
+
fixed_version: z95.string().optional().describe("Version that fixes this bug"),
|
|
11490
|
+
shipped_version: z95.string().optional().describe("Version that ships this feature (features only)"),
|
|
11491
|
+
limit: z95.coerce.number().optional().describe("Max results")
|
|
11048
11492
|
}
|
|
11049
11493
|
},
|
|
11050
11494
|
async (input, extra) => {
|
|
@@ -11082,6 +11526,16 @@ function registerSupportConsolidated(server) {
|
|
|
11082
11526
|
args.use_case = args.description;
|
|
11083
11527
|
}
|
|
11084
11528
|
}
|
|
11529
|
+
if (action === "update_bug") {
|
|
11530
|
+
if (args.send_upstream === void 0) args.send_upstream = true;
|
|
11531
|
+
}
|
|
11532
|
+
if (action === "update_feature") {
|
|
11533
|
+
if (args.send_upstream === void 0) args.send_upstream = true;
|
|
11534
|
+
if (args.fixed_version && !args.shipped_version) {
|
|
11535
|
+
args.shipped_version = args.fixed_version;
|
|
11536
|
+
delete args.fixed_version;
|
|
11537
|
+
}
|
|
11538
|
+
}
|
|
11085
11539
|
if (action === "triage_bug" && args.notes && !args.triage_notes) {
|
|
11086
11540
|
args.triage_notes = args.notes;
|
|
11087
11541
|
delete args.notes;
|
|
@@ -11106,7 +11560,7 @@ function registerSupportConsolidated(server) {
|
|
|
11106
11560
|
}
|
|
11107
11561
|
|
|
11108
11562
|
// src/mcp/tools/diagnostics.ts
|
|
11109
|
-
import { z as
|
|
11563
|
+
import { z as z96 } from "zod";
|
|
11110
11564
|
function buildHandlers9() {
|
|
11111
11565
|
const tools = /* @__PURE__ */ new Map();
|
|
11112
11566
|
const fake = {
|
|
@@ -11127,17 +11581,17 @@ function registerDiagnostics(server) {
|
|
|
11127
11581
|
title: "Diagnostics",
|
|
11128
11582
|
description: `System diagnostics and admin operations. Actions: ${toolNames.join(", ")}. Covers health checks, update status, cloud status, key management, employee rename, semantic tool discovery (tool_search), identity drift detection (drift), agent liveness monitoring (agent_liveness), and agent memory reassignment (merge_agent_memories).`,
|
|
11129
11583
|
inputSchema: {
|
|
11130
|
-
action:
|
|
11584
|
+
action: z96.string().describe(`Diagnostic operation: ${toolNames.join(", ")}`),
|
|
11131
11585
|
// Pass-through params used by various sub-tools
|
|
11132
|
-
agent_id:
|
|
11133
|
-
name:
|
|
11134
|
-
new_name:
|
|
11135
|
-
query:
|
|
11136
|
-
format:
|
|
11137
|
-
limit:
|
|
11138
|
-
from_agent_id:
|
|
11139
|
-
to_agent_id:
|
|
11140
|
-
dry_run:
|
|
11586
|
+
agent_id: z96.string().optional().describe("Agent to probe (drift). Defaults to all agents."),
|
|
11587
|
+
name: z96.string().optional().describe("Employee name (rename_employee)"),
|
|
11588
|
+
new_name: z96.string().optional().describe("New employee name (rename_employee)"),
|
|
11589
|
+
query: z96.string().optional().describe("Search/filter query, or natural language for tool_search"),
|
|
11590
|
+
format: z96.string().optional().describe("Output format"),
|
|
11591
|
+
limit: z96.coerce.number().int().min(1).max(100).optional().describe("Max results for tool_search (default 20)"),
|
|
11592
|
+
from_agent_id: z96.string().optional().describe("Source agent ID to merge from (merge_agent_memories)"),
|
|
11593
|
+
to_agent_id: z96.string().optional().describe("Target agent ID to merge into (merge_agent_memories)"),
|
|
11594
|
+
dry_run: z96.boolean().optional().default(true).describe("Preview mode \u2014 show count without changing (merge_agent_memories). Default: true")
|
|
11141
11595
|
}
|
|
11142
11596
|
},
|
|
11143
11597
|
async (input, extra) => {
|
|
@@ -11493,6 +11947,7 @@ function registerAllTools(server, license, hasKey) {
|
|
|
11493
11947
|
gate("registerPurgeDocument", registerPurgeDocument);
|
|
11494
11948
|
gate("registerSetDocumentImportance", registerSetDocumentImportance);
|
|
11495
11949
|
gate("registerRerankDocuments", registerRerankDocuments);
|
|
11950
|
+
gate("registerImportConversations", registerImportConversations);
|
|
11496
11951
|
}
|
|
11497
11952
|
if (exposeLegacyMessages) {
|
|
11498
11953
|
gate("registerAcknowledgeMessages", registerAcknowledgeMessages);
|
|
@@ -11566,6 +12021,8 @@ function registerAllTools(server, license, hasKey) {
|
|
|
11566
12021
|
if (exposeLegacySupport) {
|
|
11567
12022
|
gate("registerCreateBugReport", registerCreateBugReport);
|
|
11568
12023
|
gate("registerCreateFeatureRequest", registerCreateFeatureRequest);
|
|
12024
|
+
gate("registerUpdateBugReport", registerUpdateBugReport);
|
|
12025
|
+
gate("registerUpdateFeatureRequest", registerUpdateFeatureRequest);
|
|
11569
12026
|
gate("registerSupportTools", registerSupportTools);
|
|
11570
12027
|
if (process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN) {
|
|
11571
12028
|
gate("registerListBugReports", registerListBugReports);
|