@askexenow/exe-os 0.9.145 → 0.9.147
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-HUDSZRUG.js → active-agent-KMQCNXXD.js} +6 -6
- package/dist/{active-agent-GJOJUEMF.js → active-agent-NCZCDDZ2.js} +6 -6
- package/dist/{agent-context-HH7TL5ZP.js → agent-context-AZTTMUHP.js} +1 -1
- package/dist/agent-heartbeat-I5UPGXAU.js +60 -0
- package/dist/{agent-loop-OCJFYO72.js → agent-loop-NUIWAL3Z.js} +1 -1
- package/dist/{agentic-ontology-5PGUVMDP.js → agentic-ontology-SQR74CO7.js} +2 -2
- package/dist/{asana-BSDR6NW4.js → asana-MRQ2OQMJ.js} +1 -1
- package/dist/assets/wezterm.lua +68 -0
- package/dist/{backfill-metadata-ZDJ5B37R.js → backfill-metadata-KMDWLDXU.js} +7 -7
- package/dist/{background-jobs-4N4JSZVZ.js → background-jobs-IUB22CRF.js} +4 -4
- package/dist/{bash-X54PZMOG.js → bash-HOHKSOU3.js} +1 -1
- package/dist/{behaviors-TXLHEM5J.js → behaviors-4U2N5L4E.js} +6 -6
- package/dist/bin/age-ontology-load.js +4 -4
- package/dist/bin/agentic-ontology-backfill.js +9 -9
- package/dist/bin/agentic-reflection-backfill.js +10 -10
- package/dist/bin/agentic-semantic-label.js +9 -9
- package/dist/bin/backfill-conversations.js +9 -9
- package/dist/bin/backfill-responses.js +9 -9
- package/dist/bin/backfill-vectors.js +12 -14
- package/dist/bin/bulk-sync-postgres.js +10 -10
- package/dist/bin/cc-doctor.js +5 -5
- package/dist/bin/cleanup-stale-review-tasks.js +12 -11
- package/dist/bin/cli.js +19 -19
- package/dist/bin/customer-readiness.js +47 -0
- package/dist/bin/exe-agent-config.js +6 -6
- package/dist/bin/exe-agent.js +8 -8
- package/dist/bin/exe-assign.js +11 -11
- package/dist/bin/exe-boot.js +39 -32
- package/dist/bin/exe-call.js +9 -11
- package/dist/bin/exe-cloud.js +10 -12
- package/dist/bin/exe-dispatch.js +12 -11
- package/dist/bin/exe-doctor.js +2 -2
- package/dist/bin/exe-export-behaviors.js +10 -10
- package/dist/bin/exe-forget.js +9 -9
- package/dist/bin/exe-gateway.js +18 -18
- package/dist/bin/exe-healthcheck.js +5 -5
- package/dist/bin/exe-heartbeat.js +19 -14
- package/dist/bin/exe-kill.js +9 -9
- package/dist/bin/exe-launch-agent.js +16 -18
- package/dist/bin/exe-new-employee.js +11 -11
- package/dist/bin/exe-pending-messages.js +13 -12
- package/dist/bin/exe-pending-notifications.js +12 -11
- package/dist/bin/exe-pending-reviews.js +20 -13
- package/dist/bin/exe-rename.js +9 -11
- package/dist/bin/exe-review.js +14 -13
- package/dist/bin/exe-search.js +8 -10
- package/dist/bin/exe-session-cleanup.js +19 -19
- package/dist/bin/exe-settings.js +11 -13
- package/dist/bin/exe-start-codex.js +15 -15
- package/dist/bin/exe-start-opencode.js +11 -11
- package/dist/bin/exe-status.js +13 -12
- package/dist/bin/exe-support.js +5 -5
- package/dist/bin/exe-team.js +6 -6
- package/dist/bin/git-sweep.js +12 -11
- package/dist/bin/graph-backfill.js +10 -10
- package/dist/bin/graph-export.js +8 -8
- package/dist/bin/graph-layer-benchmark.js +1 -1
- package/dist/bin/install.js +38 -12
- package/dist/bin/intercom-check.js +14 -8
- package/dist/bin/list-providers.js +1 -1
- package/dist/bin/postgres-agentic-reflection-backfill.js +6 -6
- package/dist/bin/postgres-agentic-semantic-backfill.js +5 -5
- package/dist/bin/pre-publish.js +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +48 -49
- package/dist/bin/setup.js +6 -5
- package/dist/bin/shard-migrate.js +8 -8
- package/dist/bin/stack-update.js +66 -10
- package/dist/bin/update.js +1 -1
- package/dist/{branding-52J2ILJX.js → branding-EHDA3CCK.js} +4 -6
- package/dist/{capacity-monitor-HWN2JX5W.js → capacity-monitor-Q5M5SVRC.js} +13 -12
- package/dist/{catchup-brief-UERCIVM5.js → catchup-brief-IPNSW7RQ.js} +14 -13
- package/dist/{chunk-GK5VMHSN.js → chunk-26UVGP3I.js} +1 -1
- package/dist/{chunk-CDDRSIGK.js → chunk-2BPO7VQF.js} +80 -70
- package/dist/{chunk-7PTII6F4.js → chunk-2OATM2JZ.js} +1 -1
- package/dist/{chunk-AJ2XDY27.js → chunk-3FIWKONP.js} +10 -12
- package/dist/{chunk-53VUIKOE.js → chunk-3MLGUSKS.js} +1 -1
- package/dist/{chunk-OYCQ6PFC.js → chunk-4EINMZNO.js} +6 -6
- package/dist/{chunk-JUITBJ7J.js → chunk-4GLEFA2X.js} +1 -1
- package/dist/{chunk-BY4OTURZ.js → chunk-4MN44ORL.js} +1 -1
- package/dist/{chunk-MUVPQCQA.js → chunk-6HFZ2KUC.js} +1 -3
- package/dist/{chunk-F7JVVLGH.js → chunk-6YUACQQA.js} +2 -4
- package/dist/{chunk-UVH6FA5E.js → chunk-7B5DQGXG.js} +1 -1
- package/dist/{chunk-XEA6DSLR.js → chunk-AERGE6GC.js} +4 -6
- package/dist/{chunk-NQAZ2CP7.js → chunk-AGFWOII2.js} +11 -11
- package/dist/{chunk-RWJY7KMP.js → chunk-ARGBV4PP.js} +46 -13
- package/dist/{chunk-VRD452MQ.js → chunk-B4HAUSVQ.js} +2 -2
- package/dist/{chunk-VX4X2O6J.js → chunk-CGQ5PWS3.js} +6 -6
- package/dist/{chunk-RNN4MZDN.js → chunk-DBXKWFTK.js} +3 -3
- package/dist/{chunk-Y2VVTK2E.js → chunk-DTLASDQM.js} +1 -1
- package/dist/{chunk-K3PSCQLK.js → chunk-DW6P7UVY.js} +4 -6
- package/dist/{chunk-B6Q6WAD7.js → chunk-EHNSK2Y4.js} +1 -1
- package/dist/{chunk-7PEYIW53.js → chunk-EHXOWGQG.js} +2 -2
- package/dist/{chunk-6BUUY7FG.js → chunk-EOO32RJZ.js} +2 -4
- package/dist/{chunk-MFGARIVE.js → chunk-EYQIEK5M.js} +2 -4
- package/dist/{chunk-NT6R4ATM.js → chunk-FG4Z2XFU.js} +1 -1
- package/dist/{chunk-32LFUJVG.js → chunk-FNMNKYVH.js} +221 -110
- package/dist/{chunk-CWPE6QVM.js → chunk-GNHN5HRQ.js} +2 -4
- package/dist/{chunk-WLEVAIL5.js → chunk-GP6G6EQI.js} +1 -1
- package/dist/{chunk-KLRP6ZG3.js → chunk-HHMHL4FB.js} +251 -96
- package/dist/{chunk-O7YD7JYE.js → chunk-I7AW4237.js} +18 -4
- package/dist/{chunk-TFZZL3QF.js → chunk-ICKEGWWP.js} +2 -4
- package/dist/{chunk-SR6D65DA.js → chunk-IFACD7E6.js} +3 -3
- package/dist/{chunk-I4WAKJ6W.js → chunk-J4RAXKTC.js} +3 -3
- package/dist/{chunk-65UQ7H5U.js → chunk-JF3Q5YKI.js} +4 -6
- package/dist/{chunk-RWURKLS3.js → chunk-JH7Z2AZ7.js} +1 -1
- package/dist/{chunk-5WTYETQO.js → chunk-K4KAPZC7.js} +4 -8
- package/dist/{chunk-G3VR3MJI.js → chunk-KIUU4PNX.js} +4 -8
- package/dist/{chunk-4F56OUR7.js → chunk-LC53LVOT.js} +2 -2
- package/dist/{chunk-W7NQE65M.js → chunk-LJML7HT2.js} +1 -1
- package/dist/{chunk-V4O2APMI.js → chunk-LL5EY6OQ.js} +1 -1
- package/dist/{chunk-DCJ42FEN.js → chunk-LWJ4AMMY.js} +2 -4
- package/dist/{chunk-GCMT6RWI.js → chunk-LYH5HE24.js} +3 -14
- package/dist/{chunk-63UVIM7S.js → chunk-MBA4NNTS.js} +2 -4
- package/dist/{chunk-7KR5PV4P.js → chunk-MKPSMRVX.js} +1 -1
- package/dist/{chunk-C4EVFN7J.js → chunk-MKUVEDUE.js} +2 -2
- package/dist/chunk-MLKGABMK.js +9 -0
- package/dist/chunk-MLXJ5EZG.js +90 -0
- package/dist/{chunk-BXCJOACQ.js → chunk-NFHFNPTN.js} +3 -5
- package/dist/{chunk-2R3N4DQY.js → chunk-NJKERRSG.js} +3 -3
- package/dist/{chunk-I5VJNTDL.js → chunk-NNT2ZNMC.js} +5 -7
- package/dist/{chunk-O7CTVDC3.js → chunk-ODEGQCWW.js} +8 -8
- package/dist/{chunk-H4YONWQX.js → chunk-ONMRBKAX.js} +229 -108
- package/dist/{chunk-NE6RPW5C.js → chunk-PMWDO5FR.js} +1 -1
- package/dist/{chunk-IPSFAUK5.js → chunk-QB66MH2V.js} +4 -4
- package/dist/{chunk-XAHIVBTU.js → chunk-QHQJ7DLL.js} +6 -6
- package/dist/{chunk-NA3MXUU6.js → chunk-TH6HTK2L.js} +17 -15
- package/dist/{chunk-H4KUTL2T.js → chunk-TKEDF7KV.js} +1 -1
- package/dist/{chunk-KHV55ME4.js → chunk-TOWAZ5IV.js} +95 -118
- package/dist/{chunk-IBVB2NGY.js → chunk-TOXHEZN5.js} +47 -4
- package/dist/{chunk-H6OEU54G.js → chunk-UJMDHPIN.js} +91 -39
- package/dist/{chunk-UWBU44UP.js → chunk-UPL5FEZY.js} +1 -1
- package/dist/{chunk-ER3UJ2VL.js → chunk-UPMKSFBU.js} +2 -2
- package/dist/{chunk-X7DJ2QZW.js → chunk-V4MKR32F.js} +4 -6
- package/dist/{chunk-HV75RBMK.js → chunk-VB23RNNI.js} +1 -1
- package/dist/{chunk-56T5TMNK.js → chunk-VK2AWQ6D.js} +2 -2
- package/dist/{chunk-UXDQ4ERA.js → chunk-VNTDQUOG.js} +21 -18
- package/dist/{chunk-KQTGSD23.js → chunk-VYVESELG.js} +13 -9
- package/dist/{chunk-S465RWY7.js → chunk-W6SKR3HZ.js} +3 -5
- package/dist/{chunk-CQCURHDV.js → chunk-X2XE65WV.js} +12 -10
- package/dist/{chunk-XQ2ZBOAD.js → chunk-XK7VZFCC.js} +22 -9
- package/dist/{chunk-5F3EXHT7.js → chunk-XMRDT4PB.js} +2 -4
- package/dist/{chunk-MPXPPKJ4.js → chunk-XWQKCCCO.js} +3 -3
- package/dist/{chunk-7APRWURX.js → chunk-Y6TS42WD.js} +10 -12
- package/dist/{chunk-WTJS6PCC.js → chunk-YOG7TWMO.js} +1 -1
- package/dist/{chunk-QSSABSCM.js → chunk-YPSN64BU.js} +6 -6
- package/dist/{chunk-WJW564IP.js → chunk-ZBA74MMX.js} +2 -2
- package/dist/{chunk-VXQDZH5T.js → chunk-ZMJHXDZR.js} +3 -3
- package/dist/{chunk-BHV7PX5V.js → chunk-ZUAXTH6Z.js} +2 -2
- package/dist/{chunk-K6MMN6AW.js → chunk-ZZLTJXKR.js} +3 -5
- package/dist/{code-context-index-SRTAWCZQ.js → code-context-index-I5A7I4JQ.js} +7 -7
- package/dist/{content-extractor-H4IPL533.js → content-extractor-M7ISRONU.js} +1 -1
- package/dist/{conversation-entity-extractor-IZ3ECP4A.js → conversation-entity-extractor-EYSI4DKM.js} +3 -3
- package/dist/{conversation-wiki-populator-K4BQXHHO.js → conversation-wiki-populator-RSJ44BRO.js} +2 -2
- package/dist/{core-memory-JZ34WT5R.js → core-memory-C3JLISAU.js} +1 -1
- package/dist/{crdt-sync-4TOVD4QN.js → crdt-sync-XMC6LT2Q.js} +2 -2
- package/dist/{crm-bridge-27QVOWPI.js → crm-bridge-4QZRMOF7.js} +1 -1
- package/dist/{crm-webhook-77XHBWL7.js → crm-webhook-QMHD5YYQ.js} +3 -3
- package/dist/{cto-delegation-gate-AWENA4VT.js → cto-delegation-gate-BTZWAA4E.js} +11 -10
- package/dist/{daemon-auth-Z7O3LO23.js → daemon-auth-F47P6HTC.js} +4 -4
- package/dist/{daemon-orchestration-BG4NPWOK.js → daemon-orchestration-HFODCB52.js} +14 -13
- package/dist/{daemon-protocol-N7MOJ4U3.js → daemon-protocol-XW2OLNBS.js} +1 -1
- package/dist/{db-backup-E34JMBZD.js → db-backup-W56YOLMC.js} +4 -4
- package/dist/{devtools-ZL5NCINM.js → devtools-5PEATRYE.js} +1 -1
- package/dist/{discord-QOFQKX6S.js → discord-LMZKIYWB.js} +1 -1
- package/dist/dispatch-ack-JYCKAWKZ.js +13 -0
- package/dist/{email-NY5HB4WA.js → email-UENAIKRN.js} +1 -1
- package/dist/{entity-boost-V6KSRGG4.js → entity-boost-LIBVNNXO.js} +2 -2
- package/dist/{exe-drift-YFWCC26O.js → exe-drift-SED6KQTZ.js} +6 -6
- package/dist/{exe-export-YRACBEUY.js → exe-export-ADSWDE5U.js} +9 -9
- package/dist/{exe-import-DY57L2OI.js → exe-import-WFLNGJZP.js} +9 -9
- package/dist/{exe-key-U2JJH4MO.js → exe-key-4L32R46F.js} +5 -7
- package/dist/{exe-org-45OTYZZJ.js → exe-org-OOO7KJVZ.js} +4 -4
- package/dist/{factory-2PB537KA.js → factory-CTFAGZUA.js} +1 -1
- package/dist/fast-db-init-HVAVS35N.js +7 -0
- package/dist/{file-edit-GSXUFUDC.js → file-edit-AZAJPCA3.js} +1 -1
- package/dist/{file-read-Z3F3PUCK.js → file-read-VACF23NC.js} +1 -1
- package/dist/{file-write-X77JXZ2C.js → file-write-B2RPT5U7.js} +1 -1
- package/dist/gateway/index.js +10 -10
- package/dist/{gateway-client-IPKKEYKY.js → gateway-client-5EUMMEZZ.js} +2 -2
- package/dist/{git-staleness-I662R7RL.js → git-staleness-BY4ZK6MW.js} +5 -5
- package/dist/{git-task-sweep-XWFCP2HA.js → git-task-sweep-RSRASAHB.js} +12 -11
- package/dist/{glob-2PWAXTZ2.js → glob-7PWH7WKL.js} +1 -1
- package/dist/{global-procedures-IEIJBCAH.js → global-procedures-EKYSVONR.js} +7 -7
- package/dist/graph-auto-extract-HWZ5GVXZ.js +161 -0
- package/dist/{graph-query-NCDYOT4Y.js → graph-query-SE6T5XC4.js} +1 -1
- package/dist/{graph-rag-2YLGRBW5.js → graph-rag-G3EG5Q6L.js} +3 -3
- package/dist/{grep-GTV6WAZ4.js → grep-HWIDXHRC.js} +1 -1
- package/dist/{hook-integrity-LLPJPAXW.js → hook-integrity-PR4BPZBT.js} +2 -2
- package/dist/hooks/bug-report-worker.js +13 -12
- package/dist/hooks/codex-stop-task-finalizer.js +16 -13
- package/dist/hooks/commit-complete.js +14 -13
- package/dist/hooks/error-recall.js +9 -12
- package/dist/hooks/exe-heartbeat-hook.js +6 -6
- package/dist/hooks/ingest-worker.js +9 -9
- package/dist/hooks/ingest.js +16 -19
- package/dist/hooks/instructions-loaded.js +7 -7
- package/dist/hooks/notification.js +12 -10
- package/dist/hooks/post-compact.js +13 -12
- package/dist/hooks/post-tool-combined.js +6 -6
- package/dist/hooks/pre-compact.js +18 -17
- package/dist/hooks/pre-tool-use.js +19 -20
- package/dist/hooks/prompt-submit.js +78 -39
- package/dist/hooks/session-end.js +22 -21
- package/dist/hooks/session-start.js +31 -25
- package/dist/hooks/stop.js +20 -22
- package/dist/hooks/subagent-stop.js +13 -12
- package/dist/hooks/summary-worker.js +21 -20
- package/dist/{hooks-UK2AYRCA.js → hooks-LDCFYHDF.js} +1 -1
- package/dist/{imessage-LINH4V4D.js → imessage-6UOZB5VN.js} +1 -1
- package/dist/index.js +19 -18
- package/dist/{installer-PB63JTTG.js → installer-RLKOACKG.js} +9 -9
- package/dist/{installer-SSR2OOLO.js → installer-W4NY3OBF.js} +13 -11
- package/dist/{installer-ZONYB3XK.js → installer-X5FEYJIA.js} +9 -9
- package/dist/{intercom-queue-MMZT2MA2.js → intercom-queue-K3DVKSPJ.js} +1 -1
- package/dist/{key-backup-status-4WKIQOAS.js → key-backup-status-ORNMJEEA.js} +4 -6
- package/dist/lib/agent-config.js +4 -4
- package/dist/lib/cloud-sync.js +8 -8
- package/dist/lib/cloudflare-dns.js +1 -1
- package/dist/lib/config.js +3 -5
- package/dist/lib/consolidation.js +8 -8
- package/dist/lib/crypto.js +1 -1
- package/dist/lib/database.js +5 -5
- package/dist/lib/db-daemon-client.js +5 -5
- package/dist/lib/db.js +5 -5
- package/dist/lib/device-registry.js +4 -6
- package/dist/lib/embedder.js +6 -6
- package/dist/lib/employee-templates.js +8 -8
- package/dist/lib/employees.js +7 -5
- package/dist/lib/error-detector.js +1 -1
- package/dist/lib/exe-daemon-client.js +5 -5
- package/dist/lib/exe-daemon.js +143 -52
- package/dist/lib/file-grep.js +1 -1
- package/dist/lib/hybrid-search.js +8 -8
- package/dist/lib/identity-templates.js +1 -1
- package/dist/lib/identity.js +5 -5
- package/dist/lib/keychain.js +1 -1
- package/dist/lib/license.js +4 -4
- package/dist/lib/messaging.js +12 -11
- package/dist/lib/post-tool-memory.js +3 -3
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +6 -6
- package/dist/lib/runtime-table.js +1 -1
- package/dist/lib/schedules.js +8 -8
- package/dist/lib/session-registry.js +1 -1
- package/dist/lib/session-wrappers.js +1 -1
- package/dist/lib/skill-learning.js +7 -7
- package/dist/lib/status-brief.js +1 -1
- package/dist/lib/store.js +7 -7
- package/dist/lib/task-router.js +6 -6
- package/dist/lib/tasks.js +14 -11
- package/dist/lib/tmux-routing.js +11 -10
- package/dist/lib/tmux-status.js +1 -1
- package/dist/lib/tmux-transport.js +1 -1
- package/dist/lib/token-spend.js +6 -6
- package/dist/lib/transport.js +1 -1
- package/dist/lib/ws-auth.js +1 -1
- package/dist/lib/ws-client.js +2 -2
- package/dist/license-gate-J5YN264E.js +14 -0
- package/dist/mcp/register-tools.js +63 -62
- package/dist/mcp/server.js +65 -64
- package/dist/mcp/tools/complete-reminder.js +7 -7
- package/dist/mcp/tools/create-reminder.js +7 -7
- package/dist/mcp/tools/create-task.js +15 -13
- package/dist/mcp/tools/deactivate-behavior.js +8 -8
- package/dist/mcp/tools/list-reminders.js +7 -7
- package/dist/mcp/tools/list-tasks.js +14 -14
- package/dist/mcp/tools/send-message.js +14 -13
- package/dist/mcp/tools/update-task.js +13 -12
- package/dist/{mcp-diagnostics-CWMVPHVC.js → mcp-diagnostics-TSBY62UQ.js} +1 -1
- package/dist/{mcp-disconnect-tracker-RM3GEERR.js → mcp-disconnect-tracker-MB23DRS6.js} +1 -1
- package/dist/{mcp-http-config-PDGSOYNQ.js → mcp-http-config-6YLW4PFG.js} +6 -6
- package/dist/{memory-cards-OLE6MGO7.js → memory-cards-UAQCO4QR.js} +5 -5
- package/dist/{memory-poisoning-defense-OOHJIXIX.js → memory-poisoning-defense-VWITZ4WO.js} +5 -7
- package/dist/{memory-queue-TGWXMENR.js → memory-queue-NYIGZNCG.js} +4 -4
- package/dist/memory-queue-client-YJOLYALV.js +15 -0
- package/dist/{memory-reflection-Z7CT6JLY.js → memory-reflection-JQC4ZSUD.js} +5 -5
- package/dist/{message-queue-client-TWIA2GIH.js → message-queue-client-NTLKYGVO.js} +1 -1
- package/dist/{notifications-SREXGSAQ.js → notifications-YDOKTVCH.js} +11 -10
- package/dist/{oauth-server-NSWGKLLA.js → oauth-server-TOWAZR4K.js} +1 -1
- package/dist/{orchestration-phase-WLQMEP4M.js → orchestration-phase-FXKZYK6R.js} +4 -4
- package/dist/{orchestrator-CHQURQSC.js → orchestrator-BZ2D6ZM6.js} +13 -12
- package/dist/{permission-presets-3XKJNM6N.js → permission-presets-E3DZK46K.js} +1 -1
- package/dist/{permissions-EZH3ULLD.js → permissions-6MCWUDCD.js} +1 -1
- package/dist/{pg-ssl-4ZNXKUNH.js → pg-ssl-7JXQFL4I.js} +1 -1
- package/dist/{plan-limits-7L75PB33.js → plan-limits-KUTODKG6.js} +7 -7
- package/dist/{preferences-K2GKUQSJ.js → preferences-ERXO6SMJ.js} +3 -3
- package/dist/{project-name-OBIDABHE.js → project-name-EWG5KAZP.js} +1 -1
- package/dist/{projection-worker-HSGE44JA.js → projection-worker-UY7R2EQJ.js} +85 -8
- package/dist/{push-notifications-EOTMKJ6B.js → push-notifications-KDYFOJRI.js} +4 -4
- package/dist/{reranker-ME4CK2ZQ.js → reranker-OMADCS3D.js} +4 -4
- package/dist/{review-gate-M3U2YAW6.js → review-gate-IUNS6GQU.js} +1 -1
- package/dist/{review-polling-DQCN4TNM.js → review-polling-DORNZ2KI.js} +12 -11
- package/dist/runtime/index.js +14 -13
- package/dist/{self-query-router-TRPHL54X.js → self-query-router-37VB3PKQ.js} +1 -1
- package/dist/{session-events-ZZBFYL5Z.js → session-events-5WR5RVDK.js} +12 -12
- package/dist/{session-kill-telemetry-MUFET632.js → session-kill-telemetry-DHSQV2CI.js} +6 -6
- package/dist/{session-scope-QUUDZM2L.js → session-scope-D4Q62ZOZ.js} +13 -13
- package/dist/setup-wizard-QVNTI3T4.js +12 -0
- package/dist/{shard-manager-VYMJM7NR.js → shard-manager-SP4YL5JQ.js} +4 -4
- package/dist/{signal-C263RUND.js → signal-7UIRTYGZ.js} +1 -1
- package/dist/{slack-N7PL6QMX.js → slack-GCOYBZUK.js} +1 -1
- package/dist/{task-enforcement-WJ3S6JTL.js → task-enforcement-OYCQXBBC.js} +11 -10
- package/dist/{task-scanner-YHWRG4ZJ.js → task-scanner-QEM5CO2Y.js} +1 -1
- package/dist/{task-scope-V2CTRHG7.js → task-scope-WWRNU2LU.js} +11 -10
- package/dist/{tasks-crud-W2XPUGKK.js → tasks-crud-75AUVZPO.js} +13 -10
- package/dist/{tasks-review-BR2SBSYG.js → tasks-review-UMZN5ZPQ.js} +11 -10
- package/dist/{telegram-B54FFOXD.js → telegram-RGVD4LUY.js} +1 -1
- package/dist/{telemetry-7IQCPV4Q.js → telemetry-43X3GT3R.js} +1 -1
- package/dist/{token-budget-H2XSWO4D.js → token-budget-62TYDIMI.js} +5 -5
- package/dist/{tool-capability-index-5X2CCGIK.js → tool-capability-index-OBZXORBP.js} +2 -2
- package/dist/{tool-gates-SGFMDREY.js → tool-gates-3IC7DK4R.js} +1 -1
- package/dist/{tool-gates-3DNTD7G3.js → tool-gates-GXSYBVK4.js} +1 -1
- package/dist/{tool-registry-2VUAZXTW.js → tool-registry-5XN3FUYL.js} +1 -1
- package/dist/{tool-telemetry-NVPSPRYP.js → tool-telemetry-JL6NY3KP.js} +2 -2
- package/dist/tui/App.js +44 -43
- package/dist/{tui-data-QN4O565C.js → tui-data-C5I2YU4C.js} +11 -10
- package/dist/{update-check-ERUKV2G6.js → update-check-MKHO7H6B.js} +1 -1
- package/dist/{webhook-L5FGAUPJ.js → webhook-LCW7UP4L.js} +1 -1
- package/dist/{webhook-pipe-B7GJCJAI.js → webhook-pipe-PJOFVBD3.js} +1 -1
- package/dist/{whatsapp-7FK2PRWO.js → whatsapp-SILL4V64.js} +1 -1
- package/dist/{whatsapp-accounts-VIHRSLGB.js → whatsapp-accounts-BWRZUY23.js} +1 -1
- package/dist/{wiki-acl-R4IIHICT.js → wiki-acl-5EC5VNYG.js} +1 -1
- package/dist/{wiki-client-EUDJA7O2.js → wiki-client-MMVRPTPK.js} +1 -1
- package/dist/{worker-gate-3KDXLIJC.js → worker-gate-Q5Y6B5N7.js} +4 -4
- package/dist/{workflow-engine-GISKRYSO.js → workflow-engine-KAKVU7NC.js} +3 -3
- package/dist/{worktree-B3FHAHEM.js → worktree-OMPQEJH7.js} +1 -1
- package/package.json +2 -2
- package/release-notes.json +126 -126
- package/src/commands/exe/setup.md +1 -1
- package/dist/chunk-PNKVD2UK.js +0 -26
- package/dist/fast-db-init-67TQTHWT.js +0 -7
- package/dist/license-gate-JY2KFIKO.js +0 -14
- package/dist/memory-queue-client-RZP5F4EA.js +0 -15
- package/dist/setup-wizard-NXWCEK63.js +0 -12
- package/dist/{chunk-D5MPHVWH.js → chunk-524VLFFY.js} +0 -0
- package/dist/{chunk-HIQ5RDA7.js → chunk-A3A2E42I.js} +0 -0
- package/dist/{chunk-APRP5D27.js → chunk-H6ADW3YC.js} +0 -0
- package/dist/{chunk-AAVODJ4F.js → chunk-J2OPV5FE.js} +0 -0
- package/dist/{chunk-DBLBWWFS.js → chunk-S6DA6UKC.js} +3 -3
- /package/dist/{chunk-F3ULERRZ.js → chunk-TSCZMB3P.js} +0 -0
- /package/dist/{chunk-2HV2EQW2.js → chunk-WRU72I4S.js} +0 -0
|
@@ -5,19 +5,15 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
LEGACY_LANCE_PATH,
|
|
7
7
|
MODELS_DIR,
|
|
8
|
-
init_config,
|
|
9
8
|
loadConfig,
|
|
10
9
|
saveConfig
|
|
11
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TOWAZ5IV.js";
|
|
12
11
|
import {
|
|
13
12
|
atomicWriteJsonSync,
|
|
14
|
-
atomicWriteSync
|
|
15
|
-
|
|
16
|
-
} from "./chunk-GCMT6RWI.js";
|
|
13
|
+
atomicWriteSync
|
|
14
|
+
} from "./chunk-LYH5HE24.js";
|
|
17
15
|
|
|
18
16
|
// src/lib/setup-wizard.ts
|
|
19
|
-
init_secure_files();
|
|
20
|
-
init_config();
|
|
21
17
|
import crypto from "crypto";
|
|
22
18
|
import { execSync } from "child_process";
|
|
23
19
|
import { existsSync as existsSync2, mkdirSync, readFileSync, unlinkSync as unlinkSync2 } from "fs";
|
|
@@ -157,6 +153,11 @@ function ask(rl, prompt) {
|
|
|
157
153
|
doAsk();
|
|
158
154
|
});
|
|
159
155
|
}
|
|
156
|
+
function askHeadless(envVar, fallback, log, prompt) {
|
|
157
|
+
const value = envVar ?? fallback;
|
|
158
|
+
if (value) log(` [headless] ${prompt.replace(/[:\s]+$/, "")}: ${value}`);
|
|
159
|
+
return value;
|
|
160
|
+
}
|
|
160
161
|
function getAvailableMemoryGB() {
|
|
161
162
|
if (process.platform === "darwin") {
|
|
162
163
|
try {
|
|
@@ -176,6 +177,15 @@ function getAvailableMemoryGB() {
|
|
|
176
177
|
}
|
|
177
178
|
return os.freemem() / (1024 * 1024 * 1024);
|
|
178
179
|
}
|
|
180
|
+
function isWSL() {
|
|
181
|
+
if (process.platform !== "linux") return false;
|
|
182
|
+
try {
|
|
183
|
+
const release = execSync("uname -r", { encoding: "utf8", timeout: 3e3 }).toLowerCase();
|
|
184
|
+
return release.includes("microsoft");
|
|
185
|
+
} catch {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
179
189
|
function getTotalMemoryGB() {
|
|
180
190
|
return os.totalmem() / (1024 * 1024 * 1024);
|
|
181
191
|
}
|
|
@@ -212,10 +222,20 @@ async function runSetupWizard(opts = {}) {
|
|
|
212
222
|
const {
|
|
213
223
|
skipModel: skipModelOpt = false,
|
|
214
224
|
skipModelValidation = false,
|
|
225
|
+
nonInteractive = false,
|
|
215
226
|
log = (msg) => process.stderr.write(msg + "\n")
|
|
216
227
|
} = opts;
|
|
217
228
|
let skipModel = skipModelOpt;
|
|
229
|
+
if (nonInteractive) {
|
|
230
|
+
log("[headless] Non-interactive mode enabled. Using env vars for config.");
|
|
231
|
+
}
|
|
218
232
|
const rl = opts.createReadline ? opts.createReadline() : createInterface({ input: process.stdin, output: process.stderr });
|
|
233
|
+
const askOrEnv = (prompt, envVar, fallback = "") => {
|
|
234
|
+
if (nonInteractive) {
|
|
235
|
+
return Promise.resolve(askHeadless(envVar ? process.env[envVar] : void 0, fallback, log, prompt));
|
|
236
|
+
}
|
|
237
|
+
return ask(rl, prompt);
|
|
238
|
+
};
|
|
219
239
|
try {
|
|
220
240
|
log("");
|
|
221
241
|
log("=== exe-os Setup ===");
|
|
@@ -229,7 +249,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
229
249
|
log(" chsh -s /bin/zsh");
|
|
230
250
|
log(" Then restart your terminal.");
|
|
231
251
|
log("");
|
|
232
|
-
const cont = await
|
|
252
|
+
const cont = await askOrEnv(" Continue with bash? (y/n, default: y): ", void 0, "y");
|
|
233
253
|
if (cont.toLowerCase() === "n") {
|
|
234
254
|
log(" Run `chsh -s /bin/zsh`, restart your terminal, then run setup again.");
|
|
235
255
|
rl.close();
|
|
@@ -238,12 +258,26 @@ async function runSetupWizard(opts = {}) {
|
|
|
238
258
|
log("");
|
|
239
259
|
}
|
|
240
260
|
}
|
|
261
|
+
if (isWSL()) {
|
|
262
|
+
log(" Detected: Windows Subsystem for Linux (WSL)");
|
|
263
|
+
log("");
|
|
264
|
+
if (process.cwd().startsWith("/mnt/")) {
|
|
265
|
+
log(" \u26A0 Your current directory is on the Windows filesystem (/mnt/).");
|
|
266
|
+
log(" This is ~10x slower than the native Linux filesystem.");
|
|
267
|
+
log(" For best performance, keep your projects in ~/ (e.g., ~/projects/)");
|
|
268
|
+
log(" and run exe-os from there.");
|
|
269
|
+
log("");
|
|
270
|
+
}
|
|
271
|
+
log(" Encryption: using file-based key storage (OS keychain not available in WSL).");
|
|
272
|
+
log(" This is normal \u2014 your key is still encrypted and machine-bound.");
|
|
273
|
+
log("");
|
|
274
|
+
}
|
|
241
275
|
log("What are you setting up?");
|
|
242
276
|
log("");
|
|
243
277
|
log(" [1] First device / brand new Exe OS memory");
|
|
244
278
|
log(" [2] Another device / I already have a 24-word recovery phrase");
|
|
245
279
|
log("");
|
|
246
|
-
const installType = await
|
|
280
|
+
const installType = await askOrEnv("Choice (1/2): ", "EXE_INSTALL_TYPE", "1");
|
|
247
281
|
let isPairing = false;
|
|
248
282
|
let pairingRosterPulled = false;
|
|
249
283
|
if (installType === "2") {
|
|
@@ -254,7 +288,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
254
288
|
log(" exe-os cloud link --show-full");
|
|
255
289
|
log("Then copy the 24-word phrase here.");
|
|
256
290
|
log("");
|
|
257
|
-
const mnemonic = await
|
|
291
|
+
const mnemonic = await askOrEnv("Paste the 24-word recovery phrase: ", "EXE_PASSPHRASE");
|
|
258
292
|
try {
|
|
259
293
|
const key = await importMnemonic(mnemonic);
|
|
260
294
|
await setMasterKey(key);
|
|
@@ -263,9 +297,9 @@ async function runSetupWizard(opts = {}) {
|
|
|
263
297
|
log("Now paste the Cloud API key from that same `exe-os cloud link --show-full` output.");
|
|
264
298
|
log("It starts with: exe_sk_");
|
|
265
299
|
log("");
|
|
266
|
-
const apiKey = await
|
|
300
|
+
const apiKey = await askOrEnv("Cloud API key (starts with exe_sk_): ", "EXE_LICENSE_KEY");
|
|
267
301
|
if (apiKey && apiKey.startsWith("exe_sk_")) {
|
|
268
|
-
const cloudEndpoint = "https://
|
|
302
|
+
const cloudEndpoint = "https://api.askexe.com";
|
|
269
303
|
const cloudCfg = { apiKey, endpoint: cloudEndpoint };
|
|
270
304
|
const earlyConfig = await loadConfig();
|
|
271
305
|
earlyConfig.cloud = cloudCfg;
|
|
@@ -334,13 +368,13 @@ async function runSetupWizard(opts = {}) {
|
|
|
334
368
|
log(" Like a Bitcoin wallet \u2014 lose the phrase, lose everything.");
|
|
335
369
|
log("=============================================================");
|
|
336
370
|
log("");
|
|
337
|
-
const confirmation = await ask(rl, 'Type "I SAVED MY RECOVERY PHRASE" after you have saved it: ');
|
|
371
|
+
const confirmation = nonInteractive ? "I SAVED MY RECOVERY PHRASE" : await ask(rl, 'Type "I SAVED MY RECOVERY PHRASE" after you have saved it: ');
|
|
338
372
|
if (confirmation !== "I SAVED MY RECOVERY PHRASE") {
|
|
339
373
|
throw new Error(
|
|
340
374
|
"Setup cancelled: recovery phrase was not confirmed. Save the 24-word phrase before continuing \u2014 it is required to recover encrypted memories."
|
|
341
375
|
);
|
|
342
376
|
}
|
|
343
|
-
const { markKeyBackupConfirmed } = await import("./key-backup-status-
|
|
377
|
+
const { markKeyBackupConfirmed } = await import("./key-backup-status-ORNMJEEA.js");
|
|
344
378
|
markKeyBackupConfirmed("setup-wizard");
|
|
345
379
|
}
|
|
346
380
|
state.completedSteps.push(1);
|
|
@@ -363,9 +397,9 @@ async function runSetupWizard(opts = {}) {
|
|
|
363
397
|
log("backed up on Exe Cloud. Free for all plans. We can't read your data \u2014");
|
|
364
398
|
log("only your encryption key can decrypt it.");
|
|
365
399
|
log("");
|
|
366
|
-
const existingKey = await
|
|
400
|
+
const existingKey = await askOrEnv("Paste your Exe OS license key, or press Enter to start as a free user: ", "EXE_LICENSE_KEY");
|
|
367
401
|
if (existingKey && existingKey.startsWith("exe_sk_")) {
|
|
368
|
-
const cloudEndpoint = "https://
|
|
402
|
+
const cloudEndpoint = "https://api.askexe.com";
|
|
369
403
|
try {
|
|
370
404
|
const { loadDeviceId } = await import("./lib/license.js");
|
|
371
405
|
const deviceId = loadDeviceId();
|
|
@@ -390,7 +424,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
390
424
|
}
|
|
391
425
|
} catch {
|
|
392
426
|
log("Could not validate key \u2014 saving it and proceeding.");
|
|
393
|
-
cloudConfig = { apiKey: existingKey, endpoint: "https://
|
|
427
|
+
cloudConfig = { apiKey: existingKey, endpoint: "https://api.askexe.com" };
|
|
394
428
|
const { saveLicense: saveLicense2, mirrorLicenseKey: mirrorLicenseKey2 } = await import("./lib/license.js");
|
|
395
429
|
saveLicense2(existingKey);
|
|
396
430
|
mirrorLicenseKey2(existingKey);
|
|
@@ -402,7 +436,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
402
436
|
const deviceId = loadDeviceId();
|
|
403
437
|
let res;
|
|
404
438
|
try {
|
|
405
|
-
res = await fetch("https://
|
|
439
|
+
res = await fetch("https://api.askexe.com/auth/auto-provision", {
|
|
406
440
|
method: "POST",
|
|
407
441
|
headers: { "Content-Type": "application/json" },
|
|
408
442
|
body: JSON.stringify({ deviceId }),
|
|
@@ -410,7 +444,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
410
444
|
});
|
|
411
445
|
} catch {
|
|
412
446
|
await new Promise((r) => setTimeout(r, 500));
|
|
413
|
-
res = await fetch("https://
|
|
447
|
+
res = await fetch("https://api.askexe.com/auth/auto-provision", {
|
|
414
448
|
method: "POST",
|
|
415
449
|
headers: { "Content-Type": "application/json" },
|
|
416
450
|
body: JSON.stringify({ deviceId }),
|
|
@@ -420,7 +454,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
420
454
|
if (res.ok) {
|
|
421
455
|
const data = await res.json();
|
|
422
456
|
if (data.apiKey) {
|
|
423
|
-
cloudConfig = { apiKey: data.apiKey, endpoint: "https://
|
|
457
|
+
cloudConfig = { apiKey: data.apiKey, endpoint: "https://api.askexe.com" };
|
|
424
458
|
const { saveLicense: saveLicense2, mirrorLicenseKey: mirrorLicenseKey2 } = await import("./lib/license.js");
|
|
425
459
|
saveLicense2(data.apiKey);
|
|
426
460
|
mirrorLicenseKey2(data.apiKey);
|
|
@@ -453,7 +487,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
453
487
|
log(" Close other applications (browser, Slack, etc.) before continuing.");
|
|
454
488
|
log(" The embedding model needs ~500MB to download and load.");
|
|
455
489
|
log("");
|
|
456
|
-
await ask(rl, "Press Enter when ready, or Ctrl+C to abort and free memory first: ");
|
|
490
|
+
if (!nonInteractive) await ask(rl, "Press Enter when ready, or Ctrl+C to abort and free memory first: ");
|
|
457
491
|
}
|
|
458
492
|
log("Note: jina-embeddings-v5-text-small is licensed CC-BY-NC-4.0 (non-commercial)");
|
|
459
493
|
log("");
|
|
@@ -488,7 +522,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
488
522
|
if (cloudConfig) {
|
|
489
523
|
config.cloud = cloudConfig;
|
|
490
524
|
}
|
|
491
|
-
const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-
|
|
525
|
+
const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-FXKZYK6R.js");
|
|
492
526
|
applyDefaultOrchestrationPhase(config);
|
|
493
527
|
await saveConfig(config);
|
|
494
528
|
log("");
|
|
@@ -514,19 +548,31 @@ async function runSetupWizard(opts = {}) {
|
|
|
514
548
|
log("Step 5 already complete \u2014 skipping.");
|
|
515
549
|
}
|
|
516
550
|
if (!state.completedSteps.includes(55)) {
|
|
517
|
-
const { savePreferences, loadPreferences: loadPrefs } = await import("./preferences-
|
|
551
|
+
const { savePreferences, loadPreferences: loadPrefs } = await import("./preferences-ERXO6SMJ.js");
|
|
518
552
|
const existingPrefs = loadPrefs();
|
|
519
553
|
const prefs = { ...existingPrefs };
|
|
520
554
|
log("=== Config Defaults ===");
|
|
521
555
|
log("");
|
|
522
556
|
const ghosttyDetected = existsSync2(path2.join(os.homedir(), ".config", "ghostty")) || existsSync2(path2.join(os.homedir(), "Library", "Application Support", "com.mitchellh.ghostty"));
|
|
523
557
|
if (ghosttyDetected) {
|
|
524
|
-
const ghosttyAnswer = await
|
|
558
|
+
const ghosttyAnswer = await askOrEnv("Detected Ghostty terminal. Use exe-os Ghostty defaults? (Y/n) ", void 0, "y");
|
|
525
559
|
prefs.ghostty = ghosttyAnswer.toLowerCase() !== "n";
|
|
526
560
|
}
|
|
527
|
-
const
|
|
561
|
+
const weztermDetected = existsSync2(path2.join(os.homedir(), ".wezterm.lua")) || existsSync2(path2.join(os.homedir(), ".config", "wezterm")) || (() => {
|
|
562
|
+
try {
|
|
563
|
+
execSync("which wezterm 2>/dev/null", { timeout: 5e3 });
|
|
564
|
+
return true;
|
|
565
|
+
} catch {
|
|
566
|
+
return false;
|
|
567
|
+
}
|
|
568
|
+
})();
|
|
569
|
+
if (weztermDetected) {
|
|
570
|
+
const weztermAnswer = await askOrEnv("Detected WezTerm terminal. Use exe-os WezTerm defaults? (Y/n) ", void 0, "y");
|
|
571
|
+
prefs.wezterm = weztermAnswer.toLowerCase() !== "n";
|
|
572
|
+
}
|
|
573
|
+
const tmuxAnswer = await askOrEnv("Use exe-os tmux config? (Y/n) ", void 0, "y");
|
|
528
574
|
prefs.tmux = tmuxAnswer.toLowerCase() !== "n";
|
|
529
|
-
const statusLineAnswer = await
|
|
575
|
+
const statusLineAnswer = await askOrEnv("Install CC context bar in status line? (Y/n) ", void 0, "y");
|
|
530
576
|
prefs.ccStatusLine = statusLineAnswer.toLowerCase() !== "n";
|
|
531
577
|
prefs.codexStatusLine = prefs.ccStatusLine;
|
|
532
578
|
savePreferences(prefs);
|
|
@@ -541,7 +587,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
541
587
|
log(" 2) OpenCode (75+ providers \u2014 open source)");
|
|
542
588
|
log(" 3) Codex (OpenAI)");
|
|
543
589
|
log("");
|
|
544
|
-
const rtChoice = await
|
|
590
|
+
const rtChoice = await askOrEnv("Choose your AI runtime [1]: ", "EXE_RUNTIME", "1");
|
|
545
591
|
const rtMap = {
|
|
546
592
|
"1": { runtime: "claude", models: ["claude-opus-4.6", "claude-sonnet-4.6", "claude-sonnet-4", "claude-haiku-4.5"], defaultModel: "claude-opus-4.6" },
|
|
547
593
|
"2": { runtime: "opencode", models: ["anthropic/claude-sonnet-4-6", "openai/gpt-5.4", "google/gemini-2.5-pro", "deepseek/deepseek-r3"], defaultModel: "anthropic/claude-sonnet-4-6" },
|
|
@@ -550,7 +596,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
550
596
|
const selected = rtMap[rtChoice.trim()] ?? rtMap["1"];
|
|
551
597
|
log(`Runtime: ${selected.runtime}`);
|
|
552
598
|
log(`Models: ${selected.models.join(", ")}`);
|
|
553
|
-
const modelChoice = await
|
|
599
|
+
const modelChoice = await askOrEnv(`Choose model [${selected.defaultModel}]: `, "EXE_MODEL", selected.defaultModel);
|
|
554
600
|
const chosenModel = modelChoice.trim() || selected.defaultModel;
|
|
555
601
|
try {
|
|
556
602
|
const { loadConfig: lc, saveConfig: sc } = await import("./lib/config.js");
|
|
@@ -610,7 +656,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
610
656
|
log(" On your MAIN device, run: exe-os cloud sync");
|
|
611
657
|
log(" Then come back here and press Enter to retry the pull.");
|
|
612
658
|
log("");
|
|
613
|
-
await ask(rl, "Press Enter after syncing from your main device... ");
|
|
659
|
+
if (!nonInteractive) await ask(rl, "Press Enter after syncing from your main device... ");
|
|
614
660
|
try {
|
|
615
661
|
const { initSyncCrypto: retryInitCrypto } = await import("./lib/crypto.js");
|
|
616
662
|
const { cloudPullRoster: retryPull } = await import("./lib/cloud-sync.js");
|
|
@@ -669,9 +715,10 @@ async function runSetupWizard(opts = {}) {
|
|
|
669
715
|
log("your entire team. Engineers, marketers, specialists, all working");
|
|
670
716
|
log("in parallel while you focus on what matters.");
|
|
671
717
|
log("");
|
|
672
|
-
const cooNameInput = await
|
|
673
|
-
|
|
674
|
-
|
|
718
|
+
const cooNameInput = await askOrEnv(
|
|
719
|
+
`Name your coordinator (default: ${DEFAULT_COORDINATOR_TEMPLATE_NAME}): `,
|
|
720
|
+
"EXE_COO_NAME",
|
|
721
|
+
DEFAULT_COORDINATOR_TEMPLATE_NAME
|
|
675
722
|
);
|
|
676
723
|
cooName = (cooNameInput || DEFAULT_COORDINATOR_TEMPLATE_NAME).toLowerCase();
|
|
677
724
|
let employees = await loadEmployees(EMPLOYEES_PATH).catch(() => []);
|
|
@@ -713,10 +760,15 @@ async function runSetupWizard(opts = {}) {
|
|
|
713
760
|
}
|
|
714
761
|
let isLicensed = license.valid && license.plan !== "free";
|
|
715
762
|
if (!isLicensed) {
|
|
716
|
-
let licenseInput = await
|
|
763
|
+
let licenseInput = await askOrEnv("Hire other employees with your Exe OS license key, or press Enter to continue as a free user (COO only): ", "EXE_LICENSE_KEY");
|
|
717
764
|
if (licenseInput && !licenseInput.startsWith("exe_sk_")) {
|
|
718
|
-
|
|
719
|
-
|
|
765
|
+
if (nonInteractive) {
|
|
766
|
+
log("EXE_LICENSE_KEY doesn't look like a license key (should start with exe_sk_). Skipping.");
|
|
767
|
+
licenseInput = "";
|
|
768
|
+
} else {
|
|
769
|
+
log("That doesn't look like a license key (should start with exe_sk_).");
|
|
770
|
+
licenseInput = await ask(rl, "Try again (or press Enter to skip): ");
|
|
771
|
+
}
|
|
720
772
|
}
|
|
721
773
|
if (licenseInput && licenseInput.startsWith("exe_sk_")) {
|
|
722
774
|
saveLicense(licenseInput);
|
|
@@ -770,8 +822,8 @@ async function runSetupWizard(opts = {}) {
|
|
|
770
822
|
log(" Phase 2: Executive bench \u2014 add CTO/CMO for repeated domain work");
|
|
771
823
|
log(" Phase 3: Parallel org \u2014 specialists execute in parallel with reviews");
|
|
772
824
|
log("");
|
|
773
|
-
const unlockExecutives = (await
|
|
774
|
-
const { setOrchestrationPhase } = await import("./orchestration-phase-
|
|
825
|
+
const unlockExecutives = (await askOrEnv("Unlock Phase 2 executives now? (y/N): ", void 0, "n")).toLowerCase() === "y";
|
|
826
|
+
const { setOrchestrationPhase } = await import("./orchestration-phase-FXKZYK6R.js");
|
|
775
827
|
if (!unlockExecutives) {
|
|
776
828
|
await setOrchestrationPhase("phase_1_coo", "setup-wizard");
|
|
777
829
|
log("");
|
|
@@ -791,7 +843,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
791
843
|
const cmoDefault = cmoTemplate?.name ?? "cmo";
|
|
792
844
|
log(` CMO \u2014 design, brand, content, marketing (default: ${cmoDefault})`);
|
|
793
845
|
log("");
|
|
794
|
-
const ctoNameInput = await
|
|
846
|
+
const ctoNameInput = await askOrEnv(`Name your CTO (default: ${ctoDefault}): `, "EXE_CTO_NAME", ctoDefault);
|
|
795
847
|
const ctoName = (ctoNameInput || ctoDefault).toLowerCase();
|
|
796
848
|
if (!employees.some((e) => e.name === ctoName)) {
|
|
797
849
|
const ctoEmployee = {
|
|
@@ -814,7 +866,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
814
866
|
registerBinSymlinks(ctoName);
|
|
815
867
|
createdEmployees.push({ name: ctoName, role: "CTO" });
|
|
816
868
|
log(`Created ${ctoName} (CTO)`);
|
|
817
|
-
const cmoNameInput = await
|
|
869
|
+
const cmoNameInput = await askOrEnv(`Name your CMO (default: ${cmoDefault}): `, "EXE_CMO_NAME", cmoDefault);
|
|
818
870
|
const cmoName = (cmoNameInput || cmoDefault).toLowerCase();
|
|
819
871
|
if (!employees.some((e) => e.name === cmoName)) {
|
|
820
872
|
const cmoEmployee = {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PLATFORM_PROCEDURES,
|
|
3
3
|
PLATFORM_PROCEDURE_TITLES
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-XWQKCCCO.js";
|
|
5
5
|
import {
|
|
6
6
|
getClient
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-TH6HTK2L.js";
|
|
8
8
|
|
|
9
9
|
// src/lib/global-procedures.ts
|
|
10
10
|
import { randomUUID } from "crypto";
|
|
@@ -3,18 +3,16 @@ import {
|
|
|
3
3
|
isChunkable,
|
|
4
4
|
languageForFile,
|
|
5
5
|
summarizeChunk
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-I7AW4237.js";
|
|
7
7
|
import {
|
|
8
8
|
connectEmbedDaemon,
|
|
9
9
|
embedBatchViaClient
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-W6SKR3HZ.js";
|
|
11
11
|
import {
|
|
12
|
-
EXE_AI_DIR
|
|
13
|
-
|
|
14
|
-
} from "./chunk-KHV55ME4.js";
|
|
12
|
+
EXE_AI_DIR
|
|
13
|
+
} from "./chunk-TOWAZ5IV.js";
|
|
15
14
|
|
|
16
15
|
// src/lib/code-context-index.ts
|
|
17
|
-
init_config();
|
|
18
16
|
import crypto from "crypto";
|
|
19
17
|
import path from "path";
|
|
20
18
|
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "fs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isCrdtSyncEnabled
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A3A2E42I.js";
|
|
4
4
|
import {
|
|
5
5
|
decryptSyncBlob,
|
|
6
6
|
encryptSyncBlob,
|
|
@@ -12,21 +12,19 @@ import {
|
|
|
12
12
|
loadEmployees,
|
|
13
13
|
registerBinSymlinks,
|
|
14
14
|
saveEmployees
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-TH6HTK2L.js";
|
|
16
16
|
import {
|
|
17
17
|
loadDeviceId
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-NNT2ZNMC.js";
|
|
19
19
|
import {
|
|
20
|
-
EXE_AI_DIR
|
|
21
|
-
|
|
22
|
-
} from "./chunk-KHV55ME4.js";
|
|
20
|
+
EXE_AI_DIR
|
|
21
|
+
} from "./chunk-TOWAZ5IV.js";
|
|
23
22
|
import {
|
|
24
23
|
atomicWriteJsonSync,
|
|
25
24
|
atomicWriteSync,
|
|
26
25
|
enforcePrivateFileSync,
|
|
27
|
-
ensurePrivateDirSync
|
|
28
|
-
|
|
29
|
-
} from "./chunk-GCMT6RWI.js";
|
|
26
|
+
ensurePrivateDirSync
|
|
27
|
+
} from "./chunk-LYH5HE24.js";
|
|
30
28
|
|
|
31
29
|
// src/lib/cloud-sync.ts
|
|
32
30
|
import { readFileSync, writeFileSync, existsSync, readdirSync, mkdirSync, appendFileSync, unlinkSync, openSync, closeSync, statSync } from "fs";
|
|
@@ -50,8 +48,6 @@ function decompress(input) {
|
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
// src/lib/cloud-sync.ts
|
|
53
|
-
init_config();
|
|
54
|
-
init_secure_files();
|
|
55
51
|
function sqlSafe(v) {
|
|
56
52
|
return v === void 0 ? null : v;
|
|
57
53
|
}
|
|
@@ -123,7 +119,7 @@ function loadPgClient() {
|
|
|
123
119
|
return new Ctor();
|
|
124
120
|
}
|
|
125
121
|
const { Pool } = await import("pg");
|
|
126
|
-
const { pgSslConfig } = await import("./pg-ssl-
|
|
122
|
+
const { pgSslConfig } = await import("./pg-ssl-7JXQFL4I.js");
|
|
127
123
|
const pool = new Pool({
|
|
128
124
|
connectionString: process.env.DATABASE_URL,
|
|
129
125
|
...pgSslConfig(),
|
|
@@ -246,9 +242,15 @@ async function fetchWithRetry(url, init) {
|
|
|
246
242
|
function migrateEndpoint(endpoint) {
|
|
247
243
|
if (endpoint === "https://askexe.com/cloud" || endpoint === "https://askexe.com/cloud/") {
|
|
248
244
|
process.stderr.write(
|
|
249
|
-
"[cloud-sync] Auto-migrating endpoint from askexe.com/cloud to
|
|
245
|
+
"[cloud-sync] Auto-migrating endpoint from askexe.com/cloud to api.askexe.com\n"
|
|
250
246
|
);
|
|
251
|
-
return "https://
|
|
247
|
+
return "https://api.askexe.com";
|
|
248
|
+
}
|
|
249
|
+
if (endpoint === "https://cloud.askexe.com" || endpoint === "https://cloud.askexe.com/") {
|
|
250
|
+
process.stderr.write(
|
|
251
|
+
"[cloud-sync] Auto-migrating endpoint from cloud.askexe.com to api.askexe.com\n"
|
|
252
|
+
);
|
|
253
|
+
return "https://api.askexe.com";
|
|
252
254
|
}
|
|
253
255
|
return endpoint;
|
|
254
256
|
}
|
|
@@ -480,7 +482,7 @@ async function cloudSync(config) {
|
|
|
480
482
|
let pulled = 0;
|
|
481
483
|
if (pullResult.records.length > 0) {
|
|
482
484
|
if (isCrdtSyncEnabled()) {
|
|
483
|
-
const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-
|
|
485
|
+
const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-XMC6LT2Q.js");
|
|
484
486
|
initCrdtDoc();
|
|
485
487
|
importExistingMemories(
|
|
486
488
|
pullResult.records.map((rec) => ({
|
|
@@ -864,7 +866,7 @@ async function cloudSync(config) {
|
|
|
864
866
|
}
|
|
865
867
|
const totalMemories = await countRows("SELECT COUNT(*) as cnt FROM memories WHERE status = 'active' OR status IS NULL");
|
|
866
868
|
try {
|
|
867
|
-
const { getLatestBackup } = await import("./db-backup-
|
|
869
|
+
const { getLatestBackup } = await import("./db-backup-W56YOLMC.js");
|
|
868
870
|
const latestBackup = getLatestBackup();
|
|
869
871
|
if (latestBackup) {
|
|
870
872
|
const backupSize = statSync(latestBackup).size;
|
|
@@ -1654,8 +1656,9 @@ async function cloudPullCodeContext(config) {
|
|
|
1654
1656
|
atomicWriteSync(localPath, content);
|
|
1655
1657
|
pulled++;
|
|
1656
1658
|
} else {
|
|
1657
|
-
const
|
|
1658
|
-
|
|
1659
|
+
const remoteHash = crypto.createHash("sha256").update(content).digest("hex");
|
|
1660
|
+
const localHash = crypto.createHash("sha256").update(readFileSync(localPath, "utf-8")).digest("hex");
|
|
1661
|
+
if (localHash !== remoteHash) {
|
|
1659
1662
|
atomicWriteSync(localPath, content);
|
|
1660
1663
|
pulled++;
|
|
1661
1664
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getProjectName
|
|
3
|
-
} from "./chunk-OPU3NYOO.js";
|
|
4
1
|
import {
|
|
5
2
|
getActiveAgent
|
|
6
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NFHFNPTN.js";
|
|
7
4
|
import {
|
|
8
5
|
listTasks
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ONMRBKAX.js";
|
|
7
|
+
import {
|
|
8
|
+
getProjectName
|
|
9
|
+
} from "./chunk-OPU3NYOO.js";
|
|
10
10
|
|
|
11
11
|
// src/mcp/tools/list-tasks.ts
|
|
12
12
|
import { z } from "zod";
|
|
@@ -28,13 +28,17 @@ function registerListTasks(server) {
|
|
|
28
28
|
try {
|
|
29
29
|
let resolvedProject;
|
|
30
30
|
if (project_name === "all") {
|
|
31
|
-
|
|
31
|
+
const { agentId, agentRole } = getActiveAgent();
|
|
32
|
+
const { canCoordinate } = await import("./lib/employees.js");
|
|
33
|
+
if (canCoordinate(agentId, agentRole)) {
|
|
34
|
+
resolvedProject = void 0;
|
|
35
|
+
} else {
|
|
36
|
+
resolvedProject = getProjectName() || void 0;
|
|
37
|
+
}
|
|
32
38
|
} else if (project_name) {
|
|
33
39
|
resolvedProject = project_name;
|
|
34
40
|
} else {
|
|
35
|
-
|
|
36
|
-
const queryingSelf = !assigned_to || assigned_to === agentId;
|
|
37
|
-
resolvedProject = queryingSelf ? void 0 : getProjectName();
|
|
41
|
+
resolvedProject = getProjectName() || void 0;
|
|
38
42
|
}
|
|
39
43
|
const tasks = await listTasks({
|
|
40
44
|
assignedTo: assigned_to,
|
|
@@ -4,14 +4,12 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
ensureDaemonToken,
|
|
6
6
|
readDaemonToken
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-K4KAPZC7.js";
|
|
8
8
|
import {
|
|
9
|
-
EXE_AI_DIR
|
|
10
|
-
|
|
11
|
-
} from "./chunk-KHV55ME4.js";
|
|
9
|
+
EXE_AI_DIR
|
|
10
|
+
} from "./chunk-TOWAZ5IV.js";
|
|
12
11
|
|
|
13
12
|
// src/lib/exe-daemon-client.ts
|
|
14
|
-
init_config();
|
|
15
13
|
import net from "net";
|
|
16
14
|
import os from "os";
|
|
17
15
|
import { spawn, execSync } from "child_process";
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
-
init_config,
|
|
3
2
|
loadConfigSync
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TOWAZ5IV.js";
|
|
5
4
|
|
|
6
5
|
// src/lib/push-notifications.ts
|
|
7
|
-
init_config();
|
|
8
6
|
import { execSync } from "child_process";
|
|
9
7
|
var TELEGRAM_TIMEOUT_MS = 1e4;
|
|
10
8
|
var SMTP_TIMEOUT_MS = 15e3;
|
|
@@ -32,13 +30,17 @@ function sendDesktopNotification(title, body) {
|
|
|
32
30
|
try {
|
|
33
31
|
const safeTitle = title.replace(/["\\\n]/g, " ").slice(0, 100);
|
|
34
32
|
const safeBody = body.replace(/["\\\n]/g, " ").slice(0, 200);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
try {
|
|
34
|
+
const osc9 = `\x1B]9;${safeTitle}: ${safeBody}\x07`;
|
|
35
|
+
const sessions = execSync("tmux list-sessions -F '#{session_name}' 2>/dev/null", { encoding: "utf8", timeout: 2e3 }).trim().split("\n");
|
|
36
|
+
const coordinatorSession = sessions.find((s) => /^exe\d*$/.test(s));
|
|
37
|
+
if (coordinatorSession) {
|
|
38
|
+
execSync(`printf '${osc9.replace(/'/g, "'\\''")}' > /dev/tty 2>/dev/null || tmux display-message -p -t ${coordinatorSession} '' 2>/dev/null`, { timeout: 2e3, stdio: "ignore" });
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
} catch {
|
|
42
|
+
}
|
|
43
|
+
if (process.platform === "linux") {
|
|
42
44
|
execSync(`notify-send "${safeTitle}" "${safeBody}"`, {
|
|
43
45
|
timeout: DESKTOP_TIMEOUT_MS,
|
|
44
46
|
stdio: "ignore"
|