@askexenow/exe-os 0.9.227 → 0.9.229
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/active-agent-GJDG4CAW.js +24 -0
- package/dist/active-agent-WOP3ZHLN.js +25 -0
- package/dist/agent-context-ZPDQOAD2.js +9 -0
- package/dist/agent-heartbeat-AWTVGE4C.js +60 -0
- package/dist/agent-loop-7UM2ENGU.js +10 -0
- package/dist/agentic-ontology-ASORFII6.js +25 -0
- package/dist/asana-JN2UF47A.js +129 -0
- package/dist/assets/ghostty.conf +83 -0
- package/dist/assets/statusline-command.sh +44 -0
- package/dist/assets/tmux.conf +56 -0
- package/dist/assets/wezterm.lua +68 -0
- package/dist/backfill-metadata-JRWUECUS.js +596 -0
- package/dist/background-jobs-VTOMOTNA.js +25 -0
- package/dist/bash-XA65M6T6.js +8 -0
- package/dist/behaviors-36T3O2DC.js +24 -0
- package/dist/bin/age-ontology-load.js +85 -0
- package/dist/bin/agentic-ontology-backfill.js +84 -0
- package/dist/bin/agentic-reflection-backfill.js +45 -0
- package/dist/bin/agentic-semantic-label.js +193 -0
- package/dist/bin/backfill-conversations.js +399 -0
- package/dist/bin/backfill-responses.js +227 -0
- package/dist/bin/backfill-vectors.js +149 -0
- package/dist/bin/bulk-sync-postgres.js +92 -0
- package/dist/bin/cc-doctor.js +51 -0
- package/dist/bin/cleanup-stale-review-tasks.js +139 -0
- package/dist/bin/cli.js +1076 -0
- package/dist/bin/customer-readiness.js +389 -0
- package/dist/bin/deferred-daemon-restart.js +123 -0
- package/dist/bin/exe-agent-config.js +87 -0
- package/dist/bin/exe-agent.js +190 -0
- package/dist/bin/exe-assign.js +93 -0
- package/dist/bin/exe-boot.js +1114 -0
- package/dist/bin/exe-call.js +127 -0
- package/dist/bin/exe-cloud.js +484 -0
- package/dist/bin/exe-dispatch.js +72 -0
- package/dist/bin/exe-doctor.js +48 -0
- package/dist/bin/exe-export-behaviors.js +48 -0
- package/dist/bin/exe-forget.js +204 -0
- package/dist/bin/exe-gateway.js +1137 -0
- package/dist/bin/exe-healthcheck.js +14 -0
- package/dist/bin/exe-heartbeat.js +233 -0
- package/dist/bin/exe-kill.js +126 -0
- package/dist/bin/exe-launch-agent.js +678 -0
- package/dist/bin/exe-new-employee.js +160 -0
- package/dist/bin/exe-pending-messages.js +60 -0
- package/dist/bin/exe-pending-notifications.js +107 -0
- package/dist/bin/exe-pending-reviews.js +81 -0
- package/dist/bin/exe-rename.js +219 -0
- package/dist/bin/exe-repo-drift.js +95 -0
- package/dist/bin/exe-review.js +251 -0
- package/dist/bin/exe-search.js +65 -0
- package/dist/bin/exe-session-cleanup.js +331 -0
- package/dist/bin/exe-settings.js +364 -0
- package/dist/bin/exe-start-codex.js +404 -0
- package/dist/bin/exe-start-opencode.js +233 -0
- package/dist/bin/exe-start.sh +194 -0
- package/dist/bin/exe-status.js +34 -0
- package/dist/bin/exe-support.js +17 -0
- package/dist/bin/exe-team.js +83 -0
- package/dist/bin/generate-hook-manifest.js +30 -0
- package/dist/bin/git-sweep.js +74 -0
- package/dist/bin/graph-backfill.js +78 -0
- package/dist/bin/graph-export.js +66 -0
- package/dist/bin/graph-layer-benchmark.js +113 -0
- package/dist/bin/import-history.js +84 -0
- package/dist/bin/install-launchd.js +41 -0
- package/dist/bin/install.js +422 -0
- package/dist/bin/intercom-check.js +137 -0
- package/dist/bin/list-providers.js +128 -0
- package/dist/bin/mcp-sessions.js +194 -0
- package/dist/bin/orchestration-metrics.js +61 -0
- package/dist/bin/postgres-agentic-reflection-backfill.js +123 -0
- package/dist/bin/postgres-agentic-semantic-backfill.js +126 -0
- package/dist/bin/pre-build-guard.js +98 -0
- package/dist/bin/pre-publish.js +224 -0
- package/dist/bin/registry-proxy.js +44 -0
- package/dist/bin/scan-tasks.js +265 -0
- package/dist/bin/setup.js +19 -0
- package/dist/bin/shard-migrate.js +162 -0
- package/dist/bin/stack-update.js +372 -0
- package/dist/bin/update.js +354 -0
- package/dist/bin/verify-stack.js +389 -0
- package/dist/bin/vps-backup.js +170 -0
- package/dist/bin/vps-health-gate.js +232 -0
- package/dist/branding-I2TDZFUH.js +97 -0
- package/dist/browser-sanitizer-MRSSEJZE.js +229 -0
- package/dist/browser-session-store-RF45DSJR.js +232 -0
- package/dist/capacity-monitor-HZPAFQZH.js +48 -0
- package/dist/catchup-brief-CDG4KD5Y.js +150 -0
- package/dist/chunk-26PUEPOY.js +290 -0
- package/dist/chunk-2VZ6SY2R.js +142 -0
- package/dist/chunk-36DAY227.js +297 -0
- package/dist/chunk-3A5BZETG.js +463 -0
- package/dist/chunk-3DQ3IPPO.js +50 -0
- package/dist/chunk-3JP3FY33.js +258 -0
- package/dist/chunk-3MK3R5E6.js +85 -0
- package/dist/chunk-46SQTBQW.js +207 -0
- package/dist/chunk-4JERP7NT.js +132 -0
- package/dist/chunk-557C2IGL.js +0 -0
- package/dist/chunk-5BS5ELMC.js +85 -0
- package/dist/chunk-5NFBE376.js +391 -0
- package/dist/chunk-6A7P74QV.js +53 -0
- package/dist/chunk-6KFICEAT.js +20 -0
- package/dist/chunk-6MP5NOOR.js +151 -0
- package/dist/chunk-6Y4B3QF6.js +19 -0
- package/dist/chunk-7BPKHR4O.js +171 -0
- package/dist/chunk-7DNX45WB.js +244 -0
- package/dist/chunk-7EZCYO76.js +128 -0
- package/dist/chunk-7NNXBDOO.js +541 -0
- package/dist/chunk-ADJXHBEU.js +667 -0
- package/dist/chunk-AHMUF6RO.js +147 -0
- package/dist/chunk-AJWFPKQS.js +573 -0
- package/dist/chunk-AVE2B4DQ.js +140 -0
- package/dist/chunk-AZSCW64F.js +190 -0
- package/dist/chunk-BZAQ4UG7.js +614 -0
- package/dist/chunk-CHCA3ZM2.js +167 -0
- package/dist/chunk-CHT3THVG.js +240 -0
- package/dist/chunk-CLGB3FGL.js +48 -0
- package/dist/chunk-CQDSTBKT.js +1919 -0
- package/dist/chunk-CTFKTUYN.js +627 -0
- package/dist/chunk-CVYC6DUW.js +78 -0
- package/dist/chunk-CX6GL3ZJ.js +274 -0
- package/dist/chunk-D4IVTUNN.js +377 -0
- package/dist/chunk-DGOGCPYU.js +390 -0
- package/dist/chunk-DKRTWILB.js +81 -0
- package/dist/chunk-DLXTKVBO.js +183 -0
- package/dist/chunk-E6ORBQHP.js +225 -0
- package/dist/chunk-ECGTESAP.js +236 -0
- package/dist/chunk-ECQBG62Y.js +363 -0
- package/dist/chunk-ECSNSHZ7.js +431 -0
- package/dist/chunk-EEAKFEEA.js +221 -0
- package/dist/chunk-EGWPJQRQ.js +159 -0
- package/dist/chunk-EHKIJPVX.js +30 -0
- package/dist/chunk-EIT6J37V.js +119 -0
- package/dist/chunk-EQSQ4HBW.js +9 -0
- package/dist/chunk-ETSREHYC.js +55 -0
- package/dist/chunk-F2GUJW5O.js +1090 -0
- package/dist/chunk-F7LU65PQ.js +33 -0
- package/dist/chunk-FF62UWIJ.js +90 -0
- package/dist/chunk-FIPU4BDF.js +123 -0
- package/dist/chunk-FLSASUV3.js +177 -0
- package/dist/chunk-FWFFZGSC.js +94 -0
- package/dist/chunk-FXU7JOXK.js +6 -0
- package/dist/chunk-G4LLKD4Z.js +147 -0
- package/dist/chunk-GFCQJZTO.js +1051 -0
- package/dist/chunk-GGV3PFUW.js +41 -0
- package/dist/chunk-GJV3WDWM.js +14 -0
- package/dist/chunk-GKM7RYN3.js +1020 -0
- package/dist/chunk-GNHN5HRQ.js +40 -0
- package/dist/chunk-GP6G6EQI.js +632 -0
- package/dist/chunk-GUMRIUI5.js +63 -0
- package/dist/chunk-GVP5U4WL.js +113 -0
- package/dist/chunk-HF25XPZE.js +83 -0
- package/dist/chunk-HFJNYSTQ.js +1088 -0
- package/dist/chunk-HO5SBL4B.js +97 -0
- package/dist/chunk-HOKOOBDL.js +52 -0
- package/dist/chunk-HQMEOIUJ.js +69 -0
- package/dist/chunk-HTCBLSIB.js +813 -0
- package/dist/chunk-HYZV25LY.js +34 -0
- package/dist/chunk-I2CDSGQW.js +280 -0
- package/dist/chunk-I7AW4237.js +251 -0
- package/dist/chunk-IKTMX6N7.js +495 -0
- package/dist/chunk-IQT43SDJ.js +357 -0
- package/dist/chunk-IW53DAYO.js +210 -0
- package/dist/chunk-JBKA7F5V.js +2017 -0
- package/dist/chunk-JJNXFW7M.js +330 -0
- package/dist/chunk-JKGAJAM7.js +214 -0
- package/dist/chunk-JQ6TLNIV.js +133 -0
- package/dist/chunk-JSH5MAMM.js +284 -0
- package/dist/chunk-KCUYRZSX.js +72 -0
- package/dist/chunk-KH5Y6RR4.js +360 -0
- package/dist/chunk-L24HYX62.js +498 -0
- package/dist/chunk-L3TB7CC3.js +170 -0
- package/dist/chunk-LHOIY5LQ.js +58 -0
- package/dist/chunk-LWVZLTMD.js +412 -0
- package/dist/chunk-LYH5HE24.js +73 -0
- package/dist/chunk-M37HYGAG.js +346 -0
- package/dist/chunk-MJXEOKIW.js +54 -0
- package/dist/chunk-MKVFPQH2.js +1051 -0
- package/dist/chunk-MLXJ5EZG.js +90 -0
- package/dist/chunk-MP2AFCGL.js +53 -0
- package/dist/chunk-MSCB4ACU.js +356 -0
- package/dist/chunk-MVW62NIZ.js +20 -0
- package/dist/chunk-MZIGUUDQ.js +42 -0
- package/dist/chunk-N5RRQOAC.js +134 -0
- package/dist/chunk-NFB4N53K.js +159 -0
- package/dist/chunk-NGP6LSV2.js +25 -0
- package/dist/chunk-NGVOA6ZQ.js +84 -0
- package/dist/chunk-NRFVWJHP.js +575 -0
- package/dist/chunk-NUVDSQNY.js +1345 -0
- package/dist/chunk-O377P7GM.js +100 -0
- package/dist/chunk-OE6SYHTC.js +157 -0
- package/dist/chunk-OHPRXEUA.js +75 -0
- package/dist/chunk-OI6MVDSY.js +33 -0
- package/dist/chunk-ONKIWA3R.js +249 -0
- package/dist/chunk-OPU3NYOO.js +55 -0
- package/dist/chunk-ORCCI2VV.js +140 -0
- package/dist/chunk-OSMMWGJ2.js +204 -0
- package/dist/chunk-OYNKIAVW.js +181 -0
- package/dist/chunk-PRKVT4KN.js +90 -0
- package/dist/chunk-PW2YH2ZR.js +403 -0
- package/dist/chunk-PWMMIGVQ.js +332 -0
- package/dist/chunk-Q3V7K4ME.js +149 -0
- package/dist/chunk-Q5GUJUDW.js +348 -0
- package/dist/chunk-Q7RGLXQO.js +574 -0
- package/dist/chunk-Q7XA3SQ4.js +13097 -0
- package/dist/chunk-QGGH7LOU.js +93 -0
- package/dist/chunk-QHIGMP2M.js +237 -0
- package/dist/chunk-QI4IXJN7.js +132 -0
- package/dist/chunk-R2E4TV5V.js +56 -0
- package/dist/chunk-R4WMF32C.js +81 -0
- package/dist/chunk-R5U7XKVJ.js +16 -0
- package/dist/chunk-RJT7H2KR.js +349 -0
- package/dist/chunk-RMPAMMYW.js +70 -0
- package/dist/chunk-RTXGUKY3.js +731 -0
- package/dist/chunk-SH45SJQW.js +0 -0
- package/dist/chunk-SUNYJ6YE.js +204 -0
- package/dist/chunk-SVXDCELZ.js +163 -0
- package/dist/chunk-TMEE7AT7.js +72 -0
- package/dist/chunk-TNTFEWU5.js +361 -0
- package/dist/chunk-TOQZO2XX.js +76 -0
- package/dist/chunk-UBMGUX6T.js +3753 -0
- package/dist/chunk-UJOSFVWG.js +3511 -0
- package/dist/chunk-UPSZ2VKV.js +197 -0
- package/dist/chunk-UV4ZHXUP.js +38 -0
- package/dist/chunk-UWISNP4U.js +1073 -0
- package/dist/chunk-V3QAAU2U.js +129 -0
- package/dist/chunk-V4TZI6EO.js +60 -0
- package/dist/chunk-W6TC6A73.js +77 -0
- package/dist/chunk-WA67SFFZ.js +227 -0
- package/dist/chunk-WWPX2LLP.js +262 -0
- package/dist/chunk-WZ2RVKRO.js +121 -0
- package/dist/chunk-X2Z5GT3V.js +118 -0
- package/dist/chunk-X3AVWFWW.js +294 -0
- package/dist/chunk-XEKO37NM.js +43 -0
- package/dist/chunk-YADYM2DE.js +42 -0
- package/dist/chunk-YCTCKUZE.js +128 -0
- package/dist/chunk-YGAAZN3E.js +47 -0
- package/dist/chunk-YKIPAQZG.js +333 -0
- package/dist/chunk-YSU7JB7H.js +0 -0
- package/dist/chunk-YZFZDJWZ.js +107 -0
- package/dist/chunk-YZKJLGWL.js +169 -0
- package/dist/chunk-Z3TT2SVJ.js +135 -0
- package/dist/chunk-Z3ZCLTP7.js +382 -0
- package/dist/chunk-ZVSG2KKG.js +106 -0
- package/dist/co-activation-AJZTQHI3.js +71 -0
- package/dist/co-occurrence-FGEJIMMV.js +73 -0
- package/dist/code-context-index-KHUYATRB.js +29 -0
- package/dist/content-extractor-CUJOBFBU.js +9 -0
- package/dist/conversation-entity-extractor-TW4W57K4.js +114 -0
- package/dist/conversation-wiki-populator-GNFRTS7X.js +105 -0
- package/dist/core-memory-R7QBLN4C.js +110 -0
- package/dist/crdt-sync-K25AKQAD.js +33 -0
- package/dist/crm-bridge-NG5WJMGF.js +19 -0
- package/dist/crm-webhook-3ODT32F7.js +10 -0
- package/dist/cto-delegation-gate-4XDMTK6H.js +205 -0
- package/dist/daemon-auth-WFQMMNSD.js +13 -0
- package/dist/daemon-orchestration-5I7RLXCP.js +133 -0
- package/dist/daemon-protocol-4FUHT5NH.js +17 -0
- package/dist/db-backup-MSQKO6M5.js +25 -0
- package/dist/devtools-J4QYYO7U.js +8 -0
- package/dist/discord-7UHIZNJ3.js +7 -0
- package/dist/dispatch-ack-RMVFHO4I.js +13 -0
- package/dist/dreaming-UL7T5ZXA.js +12 -0
- package/dist/email-T6PQUUY6.js +137 -0
- package/dist/entity-boost-7MB2IYAE.js +332 -0
- package/dist/exe-drift-2KHRPBUK.js +67 -0
- package/dist/exe-export-UZN6EFOR.js +72 -0
- package/dist/exe-import-OSM3U36A.js +75 -0
- package/dist/exe-key-OG35WPBA.js +573 -0
- package/dist/exe-org-JRBBON5H.js +73 -0
- package/dist/exe-snapshot-7TQIN7XI.js +145 -0
- package/dist/factory-UQSRMKJW.js +67 -0
- package/dist/fast-db-init-4VXDSFUY.js +7 -0
- package/dist/file-edit-YORRFENG.js +8 -0
- package/dist/file-read-RMQFDE5L.js +8 -0
- package/dist/file-write-VO4MQW5Y.js +8 -0
- package/dist/founder-context-3N6BMG7B.js +96 -0
- package/dist/gateway/index.js +148 -0
- package/dist/gateway-client-V7NH35Q2.js +11 -0
- package/dist/git-staleness-JW57ZGEJ.js +109 -0
- package/dist/git-task-sweep-HYAPIM44.js +39 -0
- package/dist/glob-2LXRC3F5.js +7 -0
- package/dist/global-procedures-NY3W7L5Q.js +19 -0
- package/dist/graph-auto-extract-5GZ34NXS.js +161 -0
- package/dist/graph-query-YZ4RZEIL.js +26 -0
- package/dist/graph-rag-S5SBJW5J.js +29 -0
- package/dist/grep-OY7KCRLQ.js +7 -0
- package/dist/hook-integrity-OKSYTGVP.js +89 -0
- package/dist/hooks/bug-report-worker.js +179 -0
- package/dist/hooks/codex-stop-task-finalizer.js +258 -0
- package/dist/hooks/commit-complete.js +162 -0
- package/dist/hooks/error-recall.js +129 -0
- package/dist/hooks/exe-heartbeat-hook.js +78 -0
- package/dist/hooks/ingest-worker.js +51 -0
- package/dist/hooks/ingest.js +491 -0
- package/dist/hooks/instructions-loaded.js +119 -0
- package/dist/hooks/manifest.json +25 -0
- package/dist/hooks/notification.js +67 -0
- package/dist/hooks/post-compact.js +138 -0
- package/dist/hooks/post-tool-combined.js +152 -0
- package/dist/hooks/pre-compact.js +159 -0
- package/dist/hooks/pre-tool-use.js +512 -0
- package/dist/hooks/prompt-submit.js +699 -0
- package/dist/hooks/session-end.js +482 -0
- package/dist/hooks/session-start.js +362 -0
- package/dist/hooks/stop.js +332 -0
- package/dist/hooks/subagent-stop.js +85 -0
- package/dist/hooks/summary-worker.js +298 -0
- package/dist/hooks-RPTZV5KX.js +9 -0
- package/dist/imessage-CE5USLTI.js +7 -0
- package/dist/index.js +60 -0
- package/dist/installer-GMIVB2JS.js +341 -0
- package/dist/installer-OBYQ6O3C.js +295 -0
- package/dist/installer-UAMA6ZVH.js +37 -0
- package/dist/intercom-queue-USIXVVJQ.js +17 -0
- package/dist/key-backup-status-TVFMMWTT.js +39 -0
- package/dist/keyword-extractor-OGQRRVTB.js +11 -0
- package/dist/lib/agent-config.js +30 -0
- package/dist/lib/cloud-sync.js +103 -0
- package/dist/lib/cloudflare-dns.js +13 -0
- package/dist/lib/config.js +32 -0
- package/dist/lib/consolidation.js +38 -0
- package/dist/lib/crypto.js +13 -0
- package/dist/lib/database.js +31 -0
- package/dist/lib/db-daemon-client.js +141 -0
- package/dist/lib/db.js +31 -0
- package/dist/lib/device-registry.js +70 -0
- package/dist/lib/embed-worker.js +165 -0
- package/dist/lib/embedder.js +19 -0
- package/dist/lib/employee-templates.js +34 -0
- package/dist/lib/employees.js +63 -0
- package/dist/lib/error-detector.js +16 -0
- package/dist/lib/exe-daemon-client.js +25 -0
- package/dist/lib/exe-daemon.js +4454 -0
- package/dist/lib/file-grep.js +242 -0
- package/dist/lib/hybrid-search.js +28 -0
- package/dist/lib/identity-templates.js +650 -0
- package/dist/lib/identity.js +19 -0
- package/dist/lib/keychain.js +17 -0
- package/dist/lib/license.js +35 -0
- package/dist/lib/messaging.js +59 -0
- package/dist/lib/post-tool-memory.js +13 -0
- package/dist/lib/registry-proxy.js +15 -0
- package/dist/lib/reminders.js +16 -0
- package/dist/lib/runtime-table.js +9 -0
- package/dist/lib/schedules.js +24 -0
- package/dist/lib/session-registry.js +21 -0
- package/dist/lib/session-wrappers.js +7 -0
- package/dist/lib/skill-learning.js +29 -0
- package/dist/lib/status-brief.js +7 -0
- package/dist/lib/store.js +43 -0
- package/dist/lib/task-router.js +22 -0
- package/dist/lib/tasks.js +66 -0
- package/dist/lib/tmux-routing.js +70 -0
- package/dist/lib/tmux-status.js +29 -0
- package/dist/lib/tmux-transport.js +7 -0
- package/dist/lib/token-spend.js +12 -0
- package/dist/lib/transport.js +10 -0
- package/dist/lib/ws-auth.js +11 -0
- package/dist/lib/ws-client.js +190 -0
- package/dist/license-gate-7QVCYARF.js +14 -0
- package/dist/mcp/register-tools.js +102 -0
- package/dist/mcp/server.js +370 -0
- package/dist/mcp/tools/complete-reminder.js +13 -0
- package/dist/mcp/tools/create-reminder.js +13 -0
- package/dist/mcp/tools/create-task.js +34 -0
- package/dist/mcp/tools/deactivate-behavior.js +16 -0
- package/dist/mcp/tools/list-reminders.js +13 -0
- package/dist/mcp/tools/list-tasks.js +33 -0
- package/dist/mcp/tools/send-message.js +33 -0
- package/dist/mcp/tools/update-task.js +32 -0
- package/dist/mcp-diagnostics-5T5OZ52S.js +200 -0
- package/dist/mcp-disconnect-tracker-VINUVEZJ.js +79 -0
- package/dist/mcp-http-config-YPF4WGU5.js +26 -0
- package/dist/memory-cards-XHZEOX7Q.js +173 -0
- package/dist/memory-graph-extractor-J3K7B4GC.js +16 -0
- package/dist/memory-poisoning-defense-I76FGNHK.js +224 -0
- package/dist/memory-queue-WEVFXPZO.js +19 -0
- package/dist/memory-queue-client-5XBHYAQR.js +15 -0
- package/dist/memory-reflection-YJGI6IDI.js +237 -0
- package/dist/message-queue-client-FUKX43JD.js +92 -0
- package/dist/notifications-H4F77BYT.js +44 -0
- package/dist/oauth-server-CCZPDTZJ.js +437 -0
- package/dist/orchestration-events-LXVPJL6S.js +24 -0
- package/dist/orchestration-phase-HXRKMZXM.js +23 -0
- package/dist/orchestrator-HXUZ6LYM.js +32 -0
- package/dist/permission-presets-UPVLJWZD.js +25 -0
- package/dist/permissions-C4EMHPDD.js +14 -0
- package/dist/pg-ssl-GD3332YS.js +7 -0
- package/dist/pipeline-router-QRJQWMFF.js +12 -0
- package/dist/plan-limits-NFQVRHS5.js +25 -0
- package/dist/prediction-log-C2BD3AHR.js +120 -0
- package/dist/preferences-5ARPMYE7.js +10 -0
- package/dist/preflight-TZOGLBZU.js +287 -0
- package/dist/project-boot-JIGOSGCN.js +254 -0
- package/dist/project-name-4SKOH2UO.js +10 -0
- package/dist/projection-worker-JZQTL4NU.js +877 -0
- package/dist/push-notifications-3GNJ5SZS.js +15 -0
- package/dist/reranker-U6DEAT4S.js +19 -0
- package/dist/review-gate-I66GDXNR.js +120 -0
- package/dist/review-polling-W2S3XAAU.js +123 -0
- package/dist/runtime/index.js +129 -0
- package/dist/self-query-router-QMK5ZSZR.js +188 -0
- package/dist/session-events-MNWHGZY5.js +35 -0
- package/dist/session-kill-telemetry-JHSI7D3F.js +28 -0
- package/dist/session-scope-SMT225X3.js +85 -0
- package/dist/setup-wizard-RBUTEZB2.js +12 -0
- package/dist/shard-manager-ON2WWCRM.js +29 -0
- package/dist/signal-KF2LIO7Y.js +7 -0
- package/dist/signal-paths-5ZTWCBUX.js +19 -0
- package/dist/skill-refinement-LKJHUW2U.js +156 -0
- package/dist/slack-JRDUD5Z7.js +7 -0
- package/dist/stack-update-ZIMV4OEQ.js +50 -0
- package/dist/steward-gate-6IKH335D.js +12 -0
- package/dist/support-outbox-HIJVUDA2.js +206 -0
- package/dist/task-enforcement-UIEWTA6H.js +292 -0
- package/dist/task-scanner-5OQBNC2N.js +11 -0
- package/dist/task-scope-DNQURKOQ.js +34 -0
- package/dist/tasks-crud-CLAYZZ4O.js +76 -0
- package/dist/tasks-review-OHR2P4QE.js +46 -0
- package/dist/telegram-COCYUCT7.js +7 -0
- package/dist/telemetry-QKWQKAUC.js +9 -0
- package/dist/telemetry-upload-APVDPCEV.js +609 -0
- package/dist/token-budget-6IQNYKLR.js +83 -0
- package/dist/tool-capability-index-UUNF7VPA.js +10 -0
- package/dist/tool-gates-6A6LE4DZ.js +14 -0
- package/dist/tool-gates-RNWEH5IK.js +13 -0
- package/dist/tool-registry-KL24CAFR.js +11 -0
- package/dist/tool-telemetry-SJSIL5M5.js +17 -0
- package/dist/tui/App.js +10223 -0
- package/dist/tui-data-L6XG4Z52.js +161 -0
- package/dist/typed-messages-53Q7L3LB.js +17 -0
- package/dist/update-check-5IL5I3E2.js +11 -0
- package/dist/webhook-VXGIH7PN.js +96 -0
- package/dist/webhook-pipe-4WPFGGFD.js +114 -0
- package/dist/whatsapp-PSMKCDS7.js +9 -0
- package/dist/whatsapp-accounts-4OKWFRWL.js +15 -0
- package/dist/whatsapp-config-ZG5LX4O4.js +125 -0
- package/dist/wiki-acl-XCT6QQGP.js +111 -0
- package/dist/wiki-client-KE622HKY.js +157 -0
- package/dist/worker-gate-GFKXZ6V5.js +21 -0
- package/dist/workflow-engine-6HTKI2ZE.js +28 -0
- package/dist/working-memory-Z3EB3FW6.js +77 -0
- package/dist/worktree-BO7QQ32T.js +25 -0
- package/package.json +1 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// src/lib/daemon-protocol.ts
|
|
2
|
+
function serializeValue(v) {
|
|
3
|
+
if (v === null || v === void 0) return null;
|
|
4
|
+
if (typeof v === "bigint") return Number(v);
|
|
5
|
+
if (typeof v === "boolean") return v ? 1 : 0;
|
|
6
|
+
if (v instanceof Uint8Array) {
|
|
7
|
+
return { __blob: Buffer.from(v).toString("base64") };
|
|
8
|
+
}
|
|
9
|
+
if (ArrayBuffer.isView(v)) {
|
|
10
|
+
return { __blob: Buffer.from(v.buffer, v.byteOffset, v.byteLength).toString("base64") };
|
|
11
|
+
}
|
|
12
|
+
if (v instanceof ArrayBuffer) {
|
|
13
|
+
return { __blob: Buffer.from(v).toString("base64") };
|
|
14
|
+
}
|
|
15
|
+
if (typeof v === "string" || typeof v === "number") return v;
|
|
16
|
+
return String(v);
|
|
17
|
+
}
|
|
18
|
+
function deserializeValue(v) {
|
|
19
|
+
if (v === null) return null;
|
|
20
|
+
if (typeof v === "object" && v !== null && "__blob" in v) {
|
|
21
|
+
const buf = Buffer.from(v.__blob, "base64");
|
|
22
|
+
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
23
|
+
}
|
|
24
|
+
return v;
|
|
25
|
+
}
|
|
26
|
+
function serializeArgs(args) {
|
|
27
|
+
return args.map(serializeValue);
|
|
28
|
+
}
|
|
29
|
+
function deserializeArgs(args) {
|
|
30
|
+
return args.map(deserializeValue);
|
|
31
|
+
}
|
|
32
|
+
function serializeResultSet(rs) {
|
|
33
|
+
const rows = [];
|
|
34
|
+
for (const row of rs.rows) {
|
|
35
|
+
const obj = {};
|
|
36
|
+
for (let i = 0; i < rs.columns.length; i++) {
|
|
37
|
+
const col = rs.columns[i];
|
|
38
|
+
if (col !== void 0) {
|
|
39
|
+
obj[col] = serializeValue(row[i]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
rows.push(obj);
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
columns: [...rs.columns],
|
|
46
|
+
columnTypes: [...rs.columnTypes ?? []],
|
|
47
|
+
rows,
|
|
48
|
+
rowsAffected: typeof rs.rowsAffected === "bigint" ? Number(rs.rowsAffected) : rs.rowsAffected ?? 0,
|
|
49
|
+
lastInsertRowid: rs.lastInsertRowid != null ? typeof rs.lastInsertRowid === "bigint" ? Number(rs.lastInsertRowid) : rs.lastInsertRowid : null
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function deserializeResultSet(srs) {
|
|
53
|
+
const rows = srs.rows.map((obj) => {
|
|
54
|
+
const values = srs.columns.map(
|
|
55
|
+
(col) => deserializeValue(obj[col] ?? null)
|
|
56
|
+
);
|
|
57
|
+
const row = values;
|
|
58
|
+
for (let i = 0; i < srs.columns.length; i++) {
|
|
59
|
+
const col = srs.columns[i];
|
|
60
|
+
if (col !== void 0) {
|
|
61
|
+
row[col] = values[i] ?? null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
Object.defineProperty(row, "length", {
|
|
65
|
+
value: values.length,
|
|
66
|
+
enumerable: false
|
|
67
|
+
});
|
|
68
|
+
return row;
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
columns: srs.columns,
|
|
72
|
+
columnTypes: srs.columnTypes ?? [],
|
|
73
|
+
rows,
|
|
74
|
+
rowsAffected: srs.rowsAffected,
|
|
75
|
+
lastInsertRowid: srs.lastInsertRowid != null ? BigInt(srs.lastInsertRowid) : void 0,
|
|
76
|
+
toJSON: () => ({
|
|
77
|
+
columns: srs.columns,
|
|
78
|
+
columnTypes: srs.columnTypes ?? [],
|
|
79
|
+
rows: srs.rows,
|
|
80
|
+
rowsAffected: srs.rowsAffected,
|
|
81
|
+
lastInsertRowid: srs.lastInsertRowid
|
|
82
|
+
})
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export {
|
|
87
|
+
serializeValue,
|
|
88
|
+
deserializeValue,
|
|
89
|
+
serializeArgs,
|
|
90
|
+
deserializeArgs,
|
|
91
|
+
serializeResultSet,
|
|
92
|
+
deserializeResultSet
|
|
93
|
+
};
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EXE_AI_DIR
|
|
3
|
+
} from "./chunk-TNTFEWU5.js";
|
|
4
|
+
|
|
5
|
+
// src/lib/db-backup.ts
|
|
6
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, unlinkSync, statSync } from "fs";
|
|
7
|
+
import { copyFile, mkdir, unlink } from "fs/promises";
|
|
8
|
+
import { execFileSync } from "child_process";
|
|
9
|
+
import path from "path";
|
|
10
|
+
var BACKUP_DIR = path.join(EXE_AI_DIR, "backups");
|
|
11
|
+
var DEFAULT_KEEP_DAYS = 3;
|
|
12
|
+
var DB_NAMES = ["memories.db", "exe-mem.db", "exe-os.db", "exe.db"];
|
|
13
|
+
function findActiveDb() {
|
|
14
|
+
for (const name of DB_NAMES) {
|
|
15
|
+
const p = path.join(EXE_AI_DIR, name);
|
|
16
|
+
if (existsSync(p)) return p;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
function createBackup(reason = "manual") {
|
|
21
|
+
const dbPath = findActiveDb();
|
|
22
|
+
if (!dbPath) return null;
|
|
23
|
+
mkdirSync(BACKUP_DIR, { recursive: true });
|
|
24
|
+
const dbName = path.basename(dbPath, ".db");
|
|
25
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
26
|
+
const backupName = `${dbName}-${reason}-${timestamp}.db`;
|
|
27
|
+
const backupPath = path.join(BACKUP_DIR, backupName);
|
|
28
|
+
try {
|
|
29
|
+
execFileSync("sqlite3", [dbPath, "PRAGMA wal_checkpoint(TRUNCATE);"], {
|
|
30
|
+
timeout: 3e4,
|
|
31
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
32
|
+
});
|
|
33
|
+
} catch {
|
|
34
|
+
process.stderr.write(`[db-backup] WAL checkpoint skipped (sqlite3 CLI unavailable or encrypted DB)
|
|
35
|
+
`);
|
|
36
|
+
}
|
|
37
|
+
copyFileSync(dbPath, backupPath);
|
|
38
|
+
try {
|
|
39
|
+
const result = execFileSync("sqlite3", [backupPath, "PRAGMA quick_check;"], {
|
|
40
|
+
encoding: "utf8",
|
|
41
|
+
timeout: 1e4,
|
|
42
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
43
|
+
}).trim();
|
|
44
|
+
if (result !== "ok") {
|
|
45
|
+
process.stderr.write(`[db-backup] WARNING: backup failed quick_check (${reason}): ${result}
|
|
46
|
+
`);
|
|
47
|
+
try {
|
|
48
|
+
unlinkSync(backupPath);
|
|
49
|
+
} catch {
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
} catch (err) {
|
|
54
|
+
process.stderr.write(
|
|
55
|
+
`[db-backup] Backup validation skipped: ${err instanceof Error ? err.message : String(err)}
|
|
56
|
+
`
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
const walPath = dbPath + "-wal";
|
|
60
|
+
if (existsSync(walPath)) {
|
|
61
|
+
try {
|
|
62
|
+
copyFileSync(walPath, backupPath + "-wal");
|
|
63
|
+
} catch {
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const shmPath = dbPath + "-shm";
|
|
67
|
+
if (existsSync(shmPath)) {
|
|
68
|
+
try {
|
|
69
|
+
copyFileSync(shmPath, backupPath + "-shm");
|
|
70
|
+
} catch {
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return backupPath;
|
|
74
|
+
}
|
|
75
|
+
async function createBackupAsync(reason = "manual") {
|
|
76
|
+
const dbPath = findActiveDb();
|
|
77
|
+
if (!dbPath) return null;
|
|
78
|
+
await mkdir(BACKUP_DIR, { recursive: true });
|
|
79
|
+
const dbName = path.basename(dbPath, ".db");
|
|
80
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
81
|
+
const backupName = `${dbName}-${reason}-${timestamp}.db`;
|
|
82
|
+
const backupPath = path.join(BACKUP_DIR, backupName);
|
|
83
|
+
try {
|
|
84
|
+
const { getClient } = await import("./lib/database.js");
|
|
85
|
+
const client = getClient();
|
|
86
|
+
await client.execute("PRAGMA wal_checkpoint(TRUNCATE)");
|
|
87
|
+
} catch {
|
|
88
|
+
try {
|
|
89
|
+
const { execFile: execFileCb } = await import("child_process");
|
|
90
|
+
const { promisify } = await import("util");
|
|
91
|
+
const execFileAsync = promisify(execFileCb);
|
|
92
|
+
await execFileAsync("sqlite3", [dbPath, "PRAGMA wal_checkpoint(TRUNCATE);"], { timeout: 3e4 });
|
|
93
|
+
} catch {
|
|
94
|
+
process.stderr.write(`[db-backup] WAL checkpoint skipped \u2014 proceeding with copy (backup may include stale WAL)
|
|
95
|
+
`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
await copyFile(dbPath, backupPath);
|
|
99
|
+
try {
|
|
100
|
+
const { execFile } = await import("child_process");
|
|
101
|
+
const { promisify } = await import("util");
|
|
102
|
+
const execFileAsync = promisify(execFile);
|
|
103
|
+
const { stdout } = await execFileAsync("sqlite3", [backupPath, "PRAGMA quick_check;"], {
|
|
104
|
+
encoding: "utf8",
|
|
105
|
+
timeout: 1e4
|
|
106
|
+
});
|
|
107
|
+
const result = String(stdout ?? "").trim();
|
|
108
|
+
if (result !== "ok") {
|
|
109
|
+
process.stderr.write(`[db-backup] WARNING: backup failed quick_check (${reason}): ${result}
|
|
110
|
+
`);
|
|
111
|
+
try {
|
|
112
|
+
await unlink(backupPath);
|
|
113
|
+
} catch {
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
} catch (err) {
|
|
118
|
+
process.stderr.write(
|
|
119
|
+
`[db-backup] Backup validation skipped: ${err instanceof Error ? err.message : String(err)}
|
|
120
|
+
`
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
const walPath = dbPath + "-wal";
|
|
124
|
+
if (existsSync(walPath)) {
|
|
125
|
+
try {
|
|
126
|
+
await copyFile(walPath, backupPath + "-wal");
|
|
127
|
+
} catch {
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const shmPath = dbPath + "-shm";
|
|
131
|
+
if (existsSync(shmPath)) {
|
|
132
|
+
try {
|
|
133
|
+
await copyFile(shmPath, backupPath + "-shm");
|
|
134
|
+
} catch {
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return backupPath;
|
|
138
|
+
}
|
|
139
|
+
function rotateBackups(keepDays = DEFAULT_KEEP_DAYS) {
|
|
140
|
+
if (!existsSync(BACKUP_DIR)) return 0;
|
|
141
|
+
const cutoff = Date.now() - keepDays * 24 * 60 * 60 * 1e3;
|
|
142
|
+
let deleted = 0;
|
|
143
|
+
try {
|
|
144
|
+
const files = readdirSync(BACKUP_DIR);
|
|
145
|
+
for (const file of files) {
|
|
146
|
+
if (!file.endsWith(".db") && !file.endsWith(".db-wal") && !file.endsWith(".db-shm")) continue;
|
|
147
|
+
const filePath = path.join(BACKUP_DIR, file);
|
|
148
|
+
try {
|
|
149
|
+
const stat = statSync(filePath);
|
|
150
|
+
if (stat.mtimeMs < cutoff) {
|
|
151
|
+
unlinkSync(filePath);
|
|
152
|
+
deleted++;
|
|
153
|
+
}
|
|
154
|
+
} catch {
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
} catch {
|
|
158
|
+
}
|
|
159
|
+
return deleted;
|
|
160
|
+
}
|
|
161
|
+
function listBackups() {
|
|
162
|
+
if (!existsSync(BACKUP_DIR)) return [];
|
|
163
|
+
try {
|
|
164
|
+
const files = readdirSync(BACKUP_DIR).filter((f) => f.endsWith(".db") && !f.endsWith("-wal") && !f.endsWith("-shm"));
|
|
165
|
+
return files.map((name) => {
|
|
166
|
+
const p = path.join(BACKUP_DIR, name);
|
|
167
|
+
const stat = statSync(p);
|
|
168
|
+
return { path: p, name, size: stat.size, date: stat.mtime };
|
|
169
|
+
}).sort((a, b) => b.date.getTime() - a.date.getTime());
|
|
170
|
+
} catch {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function hasBackupToday(reason) {
|
|
175
|
+
const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
176
|
+
const backups = listBackups();
|
|
177
|
+
return backups.some((b) => b.name.includes(reason) && b.name.includes(today.replace(/-/g, "-")));
|
|
178
|
+
}
|
|
179
|
+
function getLatestBackup() {
|
|
180
|
+
const backups = listBackups();
|
|
181
|
+
return backups.length > 0 ? backups[0].path : null;
|
|
182
|
+
}
|
|
183
|
+
function restoreBackup(backupPath) {
|
|
184
|
+
const dbPath = findActiveDb();
|
|
185
|
+
if (!dbPath) {
|
|
186
|
+
const target = path.join(EXE_AI_DIR, DB_NAMES[0]);
|
|
187
|
+
const source2 = backupPath ?? getLatestBackup();
|
|
188
|
+
if (!source2 || !existsSync(source2)) return null;
|
|
189
|
+
copyFileSync(source2, target);
|
|
190
|
+
return { restored: path.basename(source2), preRestoreBackup: null };
|
|
191
|
+
}
|
|
192
|
+
const source = backupPath ?? getLatestBackup();
|
|
193
|
+
if (!source || !existsSync(source)) return null;
|
|
194
|
+
if (path.resolve(source) === path.resolve(dbPath)) return null;
|
|
195
|
+
const preRestoreBackup = createBackup("pre-restore");
|
|
196
|
+
copyFileSync(source, dbPath);
|
|
197
|
+
const walPath = source + "-wal";
|
|
198
|
+
const shmPath = source + "-shm";
|
|
199
|
+
if (existsSync(walPath)) {
|
|
200
|
+
try {
|
|
201
|
+
copyFileSync(walPath, dbPath + "-wal");
|
|
202
|
+
} catch {
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
try {
|
|
206
|
+
unlinkSync(dbPath + "-wal");
|
|
207
|
+
} catch {
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (existsSync(shmPath)) {
|
|
211
|
+
try {
|
|
212
|
+
copyFileSync(shmPath, dbPath + "-shm");
|
|
213
|
+
} catch {
|
|
214
|
+
}
|
|
215
|
+
} else {
|
|
216
|
+
try {
|
|
217
|
+
unlinkSync(dbPath + "-shm");
|
|
218
|
+
} catch {
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return { restored: path.basename(source), preRestoreBackup };
|
|
222
|
+
}
|
|
223
|
+
function getBackupDir() {
|
|
224
|
+
return BACKUP_DIR;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export {
|
|
228
|
+
findActiveDb,
|
|
229
|
+
createBackup,
|
|
230
|
+
createBackupAsync,
|
|
231
|
+
rotateBackups,
|
|
232
|
+
listBackups,
|
|
233
|
+
hasBackupToday,
|
|
234
|
+
getLatestBackup,
|
|
235
|
+
restoreBackup,
|
|
236
|
+
getBackupDir
|
|
237
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// src/lib/intercom-queue.ts
|
|
2
|
+
import { readFileSync, writeFileSync, renameSync, existsSync, mkdirSync, appendFileSync } from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import os from "os";
|
|
5
|
+
var QUEUE_PATH = path.join(os.homedir(), ".exe-os", "intercom-queue.json");
|
|
6
|
+
var MAX_RETRIES = 10;
|
|
7
|
+
var TTL_MS = 60 * 60 * 1e3;
|
|
8
|
+
function ensureDir() {
|
|
9
|
+
const dir = path.dirname(QUEUE_PATH);
|
|
10
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
11
|
+
}
|
|
12
|
+
function readQueue() {
|
|
13
|
+
try {
|
|
14
|
+
if (!existsSync(QUEUE_PATH)) return [];
|
|
15
|
+
return JSON.parse(readFileSync(QUEUE_PATH, "utf8"));
|
|
16
|
+
} catch {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function writeQueue(queue) {
|
|
21
|
+
ensureDir();
|
|
22
|
+
const tmp = `${QUEUE_PATH}.tmp`;
|
|
23
|
+
writeFileSync(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
|
|
24
|
+
renameSync(tmp, QUEUE_PATH);
|
|
25
|
+
}
|
|
26
|
+
function queueIntercom(targetSession, reason) {
|
|
27
|
+
const queue = readQueue();
|
|
28
|
+
const existing = queue.find((q) => q.targetSession === targetSession);
|
|
29
|
+
if (existing) {
|
|
30
|
+
existing.attempts++;
|
|
31
|
+
existing.queuedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
32
|
+
existing.reason = reason;
|
|
33
|
+
} else {
|
|
34
|
+
queue.push({
|
|
35
|
+
targetSession,
|
|
36
|
+
queuedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
37
|
+
attempts: 0,
|
|
38
|
+
reason
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
writeQueue(queue);
|
|
42
|
+
}
|
|
43
|
+
var _draining = false;
|
|
44
|
+
function drainQueue(isSessionBusy, sendKeys) {
|
|
45
|
+
if (_draining) {
|
|
46
|
+
logQueue("SKIP_DRAIN \u2014 previous drain still running (possible tmux hang)");
|
|
47
|
+
return { drained: 0, failed: 0 };
|
|
48
|
+
}
|
|
49
|
+
const queue = readQueue();
|
|
50
|
+
if (queue.length === 0) return { drained: 0, failed: 0 };
|
|
51
|
+
_draining = true;
|
|
52
|
+
const remaining = [];
|
|
53
|
+
let drained = 0;
|
|
54
|
+
let failed = 0;
|
|
55
|
+
try {
|
|
56
|
+
for (const item of queue) {
|
|
57
|
+
const age = Date.now() - new Date(item.queuedAt).getTime();
|
|
58
|
+
if (age > TTL_MS) {
|
|
59
|
+
logQueue(`EXPIRED \u2192 ${item.targetSession} (${Math.round(age / 6e4)}min old, reason: ${item.reason})`);
|
|
60
|
+
failed++;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
if (!isSessionBusy(item.targetSession)) {
|
|
65
|
+
const success = sendKeys(item.targetSession);
|
|
66
|
+
if (success) {
|
|
67
|
+
logQueue(`DRAINED \u2192 ${item.targetSession} (after ${item.attempts} retries)`);
|
|
68
|
+
drained++;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
} catch {
|
|
73
|
+
}
|
|
74
|
+
item.attempts++;
|
|
75
|
+
if (item.attempts >= MAX_RETRIES) {
|
|
76
|
+
logQueue(`FAILED \u2192 ${item.targetSession} (${MAX_RETRIES} retries exhausted, reason: ${item.reason})`);
|
|
77
|
+
failed++;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
remaining.push(item);
|
|
81
|
+
}
|
|
82
|
+
writeQueue(remaining);
|
|
83
|
+
} finally {
|
|
84
|
+
_draining = false;
|
|
85
|
+
}
|
|
86
|
+
return { drained, failed };
|
|
87
|
+
}
|
|
88
|
+
function drainForSession(targetSession, sendKeys) {
|
|
89
|
+
const queue = readQueue();
|
|
90
|
+
const match = queue.findIndex((q) => q.targetSession === targetSession);
|
|
91
|
+
if (match < 0) return false;
|
|
92
|
+
const success = sendKeys(targetSession);
|
|
93
|
+
if (success) {
|
|
94
|
+
queue.splice(match, 1);
|
|
95
|
+
writeQueue(queue);
|
|
96
|
+
logQueue(`DRAINED \u2192 ${targetSession} (prompt-submit trigger)`);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
function clearQueueForAgent(agentName) {
|
|
102
|
+
const queue = readQueue();
|
|
103
|
+
const before = queue.length;
|
|
104
|
+
const filtered = queue.filter((q) => !q.targetSession.startsWith(`${agentName}-`));
|
|
105
|
+
if (filtered.length < before) {
|
|
106
|
+
writeQueue(filtered);
|
|
107
|
+
logQueue(`CLEARED ${before - filtered.length} stale item(s) for ${agentName}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function _resetDrainGuard() {
|
|
111
|
+
_draining = false;
|
|
112
|
+
}
|
|
113
|
+
var INTERCOM_LOG = path.join(os.homedir(), ".exe-os", "intercom.log");
|
|
114
|
+
function logQueue(msg) {
|
|
115
|
+
const line = `[${(/* @__PURE__ */ new Date()).toISOString()}] [queue] ${msg}
|
|
116
|
+
`;
|
|
117
|
+
process.stderr.write(`[intercom-queue] ${msg}
|
|
118
|
+
`);
|
|
119
|
+
try {
|
|
120
|
+
appendFileSync(INTERCOM_LOG, line);
|
|
121
|
+
} catch {
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export {
|
|
126
|
+
readQueue,
|
|
127
|
+
queueIntercom,
|
|
128
|
+
drainQueue,
|
|
129
|
+
drainForSession,
|
|
130
|
+
clearQueueForAgent,
|
|
131
|
+
_resetDrainGuard
|
|
132
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getClient
|
|
3
|
+
} from "./chunk-UJOSFVWG.js";
|
|
4
|
+
|
|
5
|
+
// src/lib/reminders.ts
|
|
6
|
+
import crypto from "crypto";
|
|
7
|
+
async function createReminder(text, dueDate) {
|
|
8
|
+
const client = getClient();
|
|
9
|
+
const id = crypto.randomUUID();
|
|
10
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
11
|
+
await client.execute({
|
|
12
|
+
sql: `INSERT INTO reminders (id, text, created_at, due_date) VALUES (?, ?, ?, ?)`,
|
|
13
|
+
args: [id, text, now, dueDate ?? null]
|
|
14
|
+
});
|
|
15
|
+
return { id, text, createdAt: now, dueDate: dueDate ?? null, completedAt: null };
|
|
16
|
+
}
|
|
17
|
+
async function listReminders(includeCompleted = false) {
|
|
18
|
+
const client = getClient();
|
|
19
|
+
const sql = includeCompleted ? `SELECT id, text, created_at, due_date, completed_at FROM reminders ORDER BY due_date ASC NULLS LAST LIMIT 500` : `SELECT id, text, created_at, due_date, completed_at FROM reminders WHERE completed_at IS NULL ORDER BY due_date ASC NULLS LAST LIMIT 500`;
|
|
20
|
+
const result = await client.execute(sql);
|
|
21
|
+
return result.rows.map((row) => ({
|
|
22
|
+
id: String(row.id),
|
|
23
|
+
text: String(row.text),
|
|
24
|
+
createdAt: String(row.created_at),
|
|
25
|
+
dueDate: row.due_date ? String(row.due_date) : null,
|
|
26
|
+
completedAt: row.completed_at ? String(row.completed_at) : null
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
async function completeReminder(idOrText) {
|
|
30
|
+
const client = getClient();
|
|
31
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
32
|
+
let result = await client.execute({
|
|
33
|
+
sql: `SELECT id, text FROM reminders WHERE id = ? AND completed_at IS NULL`,
|
|
34
|
+
args: [idOrText]
|
|
35
|
+
});
|
|
36
|
+
if (result.rows.length === 0) {
|
|
37
|
+
result = await client.execute({
|
|
38
|
+
sql: `SELECT id, text FROM reminders WHERE completed_at IS NULL AND text LIKE '%' || ? || '%' LIMIT 1`,
|
|
39
|
+
args: [idOrText]
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (result.rows.length === 0) return null;
|
|
43
|
+
const row = result.rows[0];
|
|
44
|
+
const id = String(row.id);
|
|
45
|
+
await client.execute({
|
|
46
|
+
sql: `UPDATE reminders SET completed_at = ? WHERE id = ?`,
|
|
47
|
+
args: [now, id]
|
|
48
|
+
});
|
|
49
|
+
return { id, text: String(row.text), createdAt: "", dueDate: null, completedAt: now };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export {
|
|
53
|
+
createReminder,
|
|
54
|
+
listReminders,
|
|
55
|
+
completeReminder
|
|
56
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import {
|
|
2
|
+
checkPathSafety
|
|
3
|
+
} from "./chunk-NGVOA6ZQ.js";
|
|
4
|
+
|
|
5
|
+
// src/runtime/tools/file-edit.ts
|
|
6
|
+
import fs from "fs/promises";
|
|
7
|
+
import path from "path";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
var inputSchema = z.object({
|
|
10
|
+
file_path: z.string(),
|
|
11
|
+
old_string: z.string(),
|
|
12
|
+
new_string: z.string(),
|
|
13
|
+
replace_all: z.boolean().optional()
|
|
14
|
+
});
|
|
15
|
+
var FileEditTool = {
|
|
16
|
+
name: "file_edit",
|
|
17
|
+
description: "Edit a file by replacing a string",
|
|
18
|
+
inputSchema,
|
|
19
|
+
isReadOnly: false,
|
|
20
|
+
async checkPermissions(input) {
|
|
21
|
+
const safety = checkPathSafety(input.file_path);
|
|
22
|
+
if (!safety.safe) {
|
|
23
|
+
return {
|
|
24
|
+
behavior: "deny",
|
|
25
|
+
reason: safety.reason ?? "Edit blocked by safety check",
|
|
26
|
+
bypassImmune: true
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return { behavior: "allow" };
|
|
30
|
+
},
|
|
31
|
+
async call(input, context) {
|
|
32
|
+
const filePath = path.isAbsolute(input.file_path) ? input.file_path : path.resolve(context.cwd, input.file_path);
|
|
33
|
+
let content;
|
|
34
|
+
try {
|
|
35
|
+
content = await fs.readFile(filePath, "utf-8");
|
|
36
|
+
} catch {
|
|
37
|
+
return { content: `File not found: ${filePath}`, isError: true };
|
|
38
|
+
}
|
|
39
|
+
const occurrences = countOccurrences(content, input.old_string);
|
|
40
|
+
if (occurrences === 0) {
|
|
41
|
+
return {
|
|
42
|
+
content: `old_string not found in ${filePath}`,
|
|
43
|
+
isError: true
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (occurrences > 1 && !input.replace_all) {
|
|
47
|
+
return {
|
|
48
|
+
content: `old_string appears ${occurrences} times in ${filePath}. Use replace_all: true to replace all, or provide more context to make it unique.`,
|
|
49
|
+
isError: true
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
let newContent;
|
|
53
|
+
if (input.replace_all) {
|
|
54
|
+
newContent = content.split(input.old_string).join(input.new_string);
|
|
55
|
+
} else {
|
|
56
|
+
const idx = content.indexOf(input.old_string);
|
|
57
|
+
newContent = content.slice(0, idx) + input.new_string + content.slice(idx + input.old_string.length);
|
|
58
|
+
}
|
|
59
|
+
await fs.writeFile(filePath, newContent, "utf-8");
|
|
60
|
+
const replaced = input.replace_all ? occurrences : 1;
|
|
61
|
+
return {
|
|
62
|
+
content: `Replaced ${replaced} occurrence(s) in ${filePath}`,
|
|
63
|
+
sideEffects: { filesModified: [filePath] }
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
function countOccurrences(haystack, needle) {
|
|
68
|
+
let count = 0;
|
|
69
|
+
let pos = 0;
|
|
70
|
+
while (true) {
|
|
71
|
+
const idx = haystack.indexOf(needle, pos);
|
|
72
|
+
if (idx === -1) break;
|
|
73
|
+
count++;
|
|
74
|
+
pos = idx + needle.length;
|
|
75
|
+
}
|
|
76
|
+
return count;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
FileEditTool
|
|
81
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
3
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
4
|
+
}) : x)(function(x) {
|
|
5
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
6
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
+
});
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
__require,
|
|
15
|
+
__export
|
|
16
|
+
};
|