@askexenow/exe-os 0.9.319 → 0.9.322
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/docker-compose.yml +1 -1
- package/deploy/stack-manifests/v0.9.json +110 -2
- package/dist/{active-agent-EA2Q3KYR.js → active-agent-M5NJFEBM.js} +3 -3
- package/dist/{active-agent-XIPGXSQA.js → active-agent-SHM4QSRJ.js} +3 -3
- package/dist/{agentic-ontology-7ZUMZC2O.js → agentic-ontology-HQKCU7LG.js} +1 -1
- package/dist/{backfill-metadata-7RO5PSMN.js → backfill-metadata-CXWFCTBO.js} +4 -4
- package/dist/{behaviors-OEGZD5DH.js → behaviors-J47D342W.js} +5 -5
- package/dist/bin/agentic-ontology-backfill.js +5 -5
- package/dist/bin/agentic-reflection-backfill.js +6 -6
- package/dist/bin/agentic-semantic-label.js +5 -5
- package/dist/bin/backfill-conversations.js +6 -6
- package/dist/bin/backfill-responses.js +6 -6
- package/dist/bin/backfill-vectors.js +8 -8
- package/dist/bin/bulk-sync-postgres.js +12 -12
- package/dist/bin/cc-doctor.js +4 -4
- package/dist/bin/cleanup-stale-review-tasks.js +12 -12
- package/dist/bin/cli.js +56 -16
- package/dist/bin/deferred-daemon-restart.js +67 -67
- package/dist/bin/exe-agent-config.js +3 -3
- package/dist/bin/exe-agent.js +8 -8
- package/dist/bin/exe-assign.js +8 -8
- package/dist/bin/exe-boot.js +55 -30
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +12 -12
- package/dist/bin/exe-config-dump.js +3 -3
- package/dist/bin/exe-dispatch.js +12 -12
- package/dist/bin/exe-doctor.js +4 -4
- package/dist/bin/exe-export-behaviors.js +7 -7
- package/dist/bin/exe-forget.js +6 -6
- package/dist/bin/exe-gateway.js +7 -7
- package/dist/bin/exe-healthcheck.js +4 -4
- package/dist/bin/exe-heartbeat.js +12 -12
- package/dist/bin/exe-kill.js +15 -15
- package/dist/bin/exe-launch-agent.js +33 -22
- package/dist/bin/exe-new-employee.js +8 -8
- package/dist/bin/exe-pending-messages.js +13 -13
- package/dist/bin/exe-pending-notifications.js +12 -12
- package/dist/bin/exe-pending-reviews.js +12 -12
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +14 -14
- package/dist/bin/exe-search.js +5 -5
- package/dist/bin/exe-session-cleanup.js +18 -18
- package/dist/bin/exe-settings.js +13 -13
- package/dist/bin/exe-start-codex.js +12 -12
- package/dist/bin/exe-start-opencode.js +8 -8
- package/dist/bin/exe-status.js +13 -13
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +3 -3
- package/dist/bin/git-sweep.js +13 -13
- package/dist/bin/graph-backfill.js +4 -4
- package/dist/bin/graph-export.js +5 -5
- package/dist/bin/import-history.js +7 -7
- package/dist/bin/install-launchd.js +2 -2
- package/dist/bin/install.js +70 -70
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
- package/dist/bin/registry-proxy.js +7 -1
- package/dist/bin/scan-tasks.js +12 -12
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +4 -4
- package/dist/bin/stack-update.js +4 -4
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{capability-cards-4BONYCI4.js → capability-cards-H7H3MU74.js} +2 -2
- package/dist/{capacity-monitor-SV2Q7CMC.js → capacity-monitor-WAEHVBL7.js} +13 -13
- package/dist/{catchup-brief-5ULTVKSE.js → catchup-brief-L42STIDR.js} +15 -15
- package/dist/{chunk-LQWCIW4K.js → chunk-2GBGIXKH.js} +1 -1
- package/dist/{chunk-C7QYH2YN.js → chunk-3JW3ZXCP.js} +1 -1
- package/dist/{chunk-KF6NBYV4.js → chunk-3M73L663.js} +2 -2
- package/dist/{chunk-MRB2BXIB.js → chunk-4Z47UMMM.js} +10 -10
- package/dist/{chunk-VTHR4DPE.js → chunk-5ZNY7IZI.js} +5 -1
- package/dist/{chunk-UQOCHKPX.js → chunk-657AQEPY.js} +1 -1
- package/dist/{chunk-B2FUBD6Z.js → chunk-6IBUQBMY.js} +9 -9
- package/dist/{chunk-Q774HAGE.js → chunk-6N4LYEDI.js} +1 -1
- package/dist/{chunk-EPZWVXKI.js → chunk-6SXJZHRJ.js} +1 -1
- package/dist/{chunk-XLQH263A.js → chunk-6UQRJCKK.js} +2 -2
- package/dist/{chunk-3ZOWUUKR.js → chunk-6XM6PZXQ.js} +1 -1
- package/dist/{chunk-DZJZAHTB.js → chunk-7BZ6TOZN.js} +2 -2
- package/dist/{chunk-E3WZA2WU.js → chunk-7CUF27OT.js} +1 -1
- package/dist/{chunk-V4UKBUUA.js → chunk-7FBPLVHM.js} +1 -1
- package/dist/{chunk-OXGNFT3L.js → chunk-7SDS5VCL.js} +5 -5
- package/dist/{chunk-FJUQ5L5R.js → chunk-A3KUGBDP.js} +92 -1
- package/dist/{chunk-TWPYSILC.js → chunk-ABGDTMKC.js} +1 -1
- package/dist/{chunk-VUZRAEF3.js → chunk-AZL3EUR3.js} +64 -18
- package/dist/{chunk-TRXBT24O.js → chunk-BFHBHQFA.js} +5 -5
- package/dist/{chunk-F3P34OHU.js → chunk-C4BIZXKB.js} +1 -1
- package/dist/{chunk-DFSR3UUL.js → chunk-CHSRSESS.js} +1 -1
- package/dist/{chunk-7XGDTKHX.js → chunk-CMDC5D7S.js} +2 -2
- package/dist/{chunk-CNFUVZLM.js → chunk-CXXERHNC.js} +1 -1
- package/dist/{chunk-N3ZLLKBN.js → chunk-DGFIXJ4S.js} +3 -3
- package/dist/{chunk-JNUYJRQX.js → chunk-E32KARET.js} +4 -4
- package/dist/{chunk-RJHOFX72.js → chunk-EOPSIIEH.js} +1 -1
- package/dist/{chunk-CQ2T4A2D.js → chunk-EPBB2OD3.js} +2 -2
- package/dist/{chunk-YTHZTDXH.js → chunk-ERSFOJGC.js} +1 -1
- package/dist/{chunk-MM7EYJJ3.js → chunk-EVUXF2G4.js} +1 -1
- package/dist/{chunk-V2GI2MJJ.js → chunk-F5FAD2YR.js} +2 -2
- package/dist/{chunk-7S3SRDPQ.js → chunk-FANIBYUO.js} +2 -2
- package/dist/{chunk-LJTXVAG4.js → chunk-G5TP2D2U.js} +3 -3
- package/dist/{chunk-36CFV3ZF.js → chunk-GA76RGSP.js} +3 -3
- package/dist/{chunk-B3SFW4LY.js → chunk-GN3IWZDH.js} +612 -536
- package/dist/{chunk-PHUKD7VK.js → chunk-H2SD2EA7.js} +9 -9
- package/dist/{chunk-LRWB35MD.js → chunk-HGM6NZQH.js} +1 -1
- package/dist/{chunk-WXQVFMNV.js → chunk-HIOO7DZ2.js} +5 -5
- package/dist/{chunk-7I4HQYPL.js → chunk-HKSJSW2V.js} +1 -1
- package/dist/{chunk-RVF6JBHW.js → chunk-HV5CUDOE.js} +1 -1
- package/dist/{chunk-5L62XXNH.js → chunk-HWC5W34K.js} +1 -1
- package/dist/{chunk-JJ2FFUFV.js → chunk-JXEMAB4M.js} +1 -1
- package/dist/{chunk-2OOCPANV.js → chunk-KK4ZOYXJ.js} +1 -1
- package/dist/{chunk-K6GZMAIA.js → chunk-KL5WYWS3.js} +2 -2
- package/dist/{chunk-RREJ2QQ4.js → chunk-KLG53B63.js} +1 -1
- package/dist/{chunk-IPD5ZSOK.js → chunk-KXP3CUTL.js} +2 -2
- package/dist/{chunk-AKD6IKYS.js → chunk-LB77CSLO.js} +3 -3
- package/dist/{chunk-T5O2EBHU.js → chunk-LCZ55G5G.js} +7 -7
- package/dist/{chunk-TDV3XEGQ.js → chunk-LOE2N23P.js} +1 -1
- package/dist/{chunk-JPTBLJLS.js → chunk-MYMA23KC.js} +1 -1
- package/dist/{chunk-PJH7JUWD.js → chunk-NAHAOFTY.js} +3 -3
- package/dist/{chunk-HFDFQ7CB.js → chunk-NFM6VHL7.js} +1 -1
- package/dist/{chunk-PM6XSS6R.js → chunk-NYFPFOYM.js} +1 -1
- package/dist/{chunk-DRA2FYUQ.js → chunk-OFR7KQ37.js} +3 -3
- package/dist/{chunk-OC222BAQ.js → chunk-OI63OVCR.js} +1 -1
- package/dist/{chunk-ZOCW4TGA.js → chunk-ORC5AO7E.js} +1 -1
- package/dist/{chunk-WUF5MYA5.js → chunk-PISGLNV7.js} +9 -9
- package/dist/{chunk-LWBOSHSS.js → chunk-PLBDXCYZ.js} +95 -29
- package/dist/{chunk-RAKFEXCN.js → chunk-QNUHDEPI.js} +4 -4
- package/dist/{chunk-C54QKE4O.js → chunk-QQOH3I4A.js} +1 -1
- package/dist/{chunk-Q26VSIXA.js → chunk-QVFJCFNM.js} +24 -0
- package/dist/{chunk-C2DFOF7O.js → chunk-QYLDCPNG.js} +1 -1
- package/dist/{chunk-C5SALMKH.js → chunk-ROMB2HH4.js} +5 -5
- package/dist/{chunk-GRB44WRN.js → chunk-SENJA7BZ.js} +1 -1
- package/dist/{chunk-NODTWD7N.js → chunk-SQ5JWDJ2.js} +1 -1
- package/dist/{chunk-KHM3TKOM.js → chunk-T6AUMO5X.js} +1 -1
- package/dist/{chunk-YJYE6MMJ.js → chunk-TI6YX3L5.js} +2 -2
- package/dist/{chunk-WL5K3R7W.js → chunk-TKBWBHFV.js} +1 -1
- package/dist/{chunk-7PUNIH6G.js → chunk-V2ESQU3S.js} +1 -1
- package/dist/{chunk-YZTOGIV7.js → chunk-VSXGFHJY.js} +1 -1
- package/dist/{chunk-QLVMJGUQ.js → chunk-VY7345RO.js} +46 -7
- package/dist/{chunk-YSSJOTVN.js → chunk-WCCR5IFR.js} +2 -2
- package/dist/{chunk-4XAYC77M.js → chunk-WFHYAKEU.js} +1 -1
- package/dist/{chunk-IDMIGP53.js → chunk-WSYKLS2Y.js} +3 -3
- package/dist/{chunk-DTP4HXM3.js → chunk-X62GD6QW.js} +1 -1
- package/dist/{chunk-GBUFDCLX.js → chunk-XC7C3GQ2.js} +2 -2
- package/dist/{chunk-WG4PRZGT.js → chunk-XEBN5CPD.js} +5 -5
- package/dist/{chunk-36SS3TE7.js → chunk-XLNF3CIO.js} +3 -3
- package/dist/{chunk-MNUFLCHT.js → chunk-XP53WEXP.js} +3 -3
- package/dist/{cleanup-graph-garbage-IXYSUIUH.js → cleanup-graph-garbage-MX5JDTJA.js} +4 -4
- package/dist/{co-activation-BQRXOZN2.js → co-activation-K44LGZ7A.js} +2 -2
- package/dist/{co-occurrence-QPLSUQ4O.js → co-occurrence-N62HJTRP.js} +2 -2
- package/dist/{code-context-index-NQFP6ED5.js → code-context-index-6YQ3DGCN.js} +3 -3
- package/dist/completion-nudge-dedup-DBZF24MM.js +74 -0
- package/dist/{crdt-sync-VLSJH6LL.js → crdt-sync-BO76VVRX.js} +1 -1
- package/dist/{crm-webhook-IZYJXHSK.js → crm-webhook-UZLTHXAS.js} +2 -2
- package/dist/{cto-delegation-gate-FU4HGNSN.js → cto-delegation-gate-NVMRONA2.js} +11 -11
- package/dist/{daemon-orchestration-IXSMZXGO.js → daemon-orchestration-JI3RD5EZ.js} +15 -15
- package/dist/{db-backup-7GJYDSXA.js → db-backup-ITRADB2J.js} +1 -1
- package/dist/{doc-graph-extractor-U7XGZQ7T.js → doc-graph-extractor-L7YESUSI.js} +2 -2
- package/dist/{documents-U47VG24Q.js → documents-7BFXA6V3.js} +8 -8
- package/dist/{dreaming-VBI4BI6R.js → dreaming-NRTMPNPZ.js} +12 -12
- package/dist/{exe-drift-BMSRHAT6.js → exe-drift-GLJIM7EI.js} +3 -3
- package/dist/{exe-export-CIRE2HZA.js → exe-export-THIAYHXK.js} +6 -6
- package/dist/{exe-import-X6U6VG7Q.js → exe-import-3Y4VOUYL.js} +6 -6
- package/dist/{exe-key-7VXVXX4Q.js → exe-key-IPGY4RMU.js} +67 -67
- package/dist/{exe-snapshot-P5BLEXQJ.js → exe-snapshot-2ZEWCDYK.js} +15 -15
- package/dist/{fast-db-init-SMBGFVXM.js → fast-db-init-TLYUWCDE.js} +1 -1
- package/dist/{founder-context-AMMO53S7.js → founder-context-J362DNU4.js} +2 -2
- package/dist/gateway/index.js +11 -11
- package/dist/{git-staleness-AJDPXQJF.js → git-staleness-BRDHTHNS.js} +2 -2
- package/dist/{git-task-sweep-EJ3HEH4Y.js → git-task-sweep-7GVUKDBW.js} +12 -12
- package/dist/{global-procedures-KV2SVX43.js → global-procedures-FNUKY2LF.js} +3 -3
- package/dist/{graph-auto-extract-HFXDXJC3.js → graph-auto-extract-AJZUV3PO.js} +2 -2
- package/dist/hooks/bug-report-worker.js +14 -14
- package/dist/hooks/codex-stop-task-finalizer.js +14 -14
- package/dist/hooks/commit-complete.js +14 -14
- package/dist/hooks/error-recall.js +6 -6
- package/dist/hooks/exe-heartbeat-hook.js +3 -3
- package/dist/hooks/ingest-worker.js +3 -3
- package/dist/hooks/ingest.js +6 -6
- package/dist/hooks/instructions-loaded.js +4 -4
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +4 -4
- package/dist/hooks/post-compact.js +13 -13
- package/dist/hooks/post-tool-combined.js +8 -8
- package/dist/hooks/pre-compact.js +17 -17
- package/dist/hooks/pre-tool-use.js +24 -22
- package/dist/hooks/prompt-submit.js +26 -26
- package/dist/hooks/session-end.js +22 -22
- package/dist/hooks/session-start.js +12 -12
- package/dist/hooks/stop.js +37 -41
- package/dist/hooks/subagent-stop.js +13 -13
- package/dist/hooks/summary-worker.js +20 -20
- package/dist/index.js +22 -22
- package/dist/{installer-XLP5MIRG.js → installer-2EKTDQZB.js} +5 -5
- package/dist/{installer-MWRZB3RT.js → installer-SC7CQBYY.js} +5 -5
- package/dist/{installer-2SY3BEHJ.js → installer-UEF44TWQ.js} +5 -5
- package/dist/lib/agent-config.js +7 -1
- package/dist/lib/cloud-sync.js +12 -12
- package/dist/lib/consolidation.js +5 -5
- package/dist/lib/database.js +2 -2
- package/dist/lib/db-daemon-client.js +3 -3
- package/dist/lib/db.js +2 -2
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/embedder.js +3 -3
- package/dist/lib/employee-templates.js +4 -4
- package/dist/lib/employees.js +2 -2
- package/dist/lib/exe-daemon-client.js +2 -2
- package/dist/lib/exe-daemon.js +51 -51
- package/dist/lib/hybrid-search.js +5 -5
- package/dist/lib/identity.js +2 -2
- package/dist/lib/license.js +8 -2
- package/dist/lib/messaging.js +12 -12
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +3 -3
- package/dist/lib/schedules.js +5 -5
- package/dist/lib/session-registry.js +4 -4
- package/dist/lib/skill-learning.js +6 -6
- package/dist/lib/status-brief.js +1 -1
- package/dist/lib/store.js +4 -4
- package/dist/lib/task-router.js +3 -3
- package/dist/lib/tasks.js +13 -13
- package/dist/lib/tmux-routing.js +11 -11
- package/dist/lib/token-spend.js +3 -3
- package/dist/{license-gate-PHJLO2G6.js → license-gate-YUUSIPJ7.js} +3 -3
- package/dist/license-sync-LX73IEBH.js +238 -0
- package/dist/mcp/register-tools.js +66 -66
- package/dist/mcp/server.js +70 -70
- package/dist/mcp/tools/complete-reminder.js +4 -4
- package/dist/mcp/tools/create-reminder.js +4 -4
- package/dist/mcp/tools/create-task.js +15 -15
- package/dist/mcp/tools/deactivate-behavior.js +7 -7
- package/dist/mcp/tools/list-reminders.js +4 -4
- package/dist/mcp/tools/list-tasks.js +15 -15
- package/dist/mcp/tools/send-message.js +14 -14
- package/dist/mcp/tools/update-task.js +14 -14
- package/dist/{mcp-http-config-6Q7SYJFY.js → mcp-http-config-MBG5AQNH.js} +3 -3
- package/dist/{memory-cards-IG3K6T7M.js → memory-cards-MGZ4P3AA.js} +4 -4
- package/dist/{memory-graph-extractor-WZ77ITZ3.js → memory-graph-extractor-44P2ATID.js} +3 -3
- package/dist/{memory-poisoning-defense-YQW6WVPL.js → memory-poisoning-defense-3CYFKNLA.js} +2 -2
- package/dist/{memory-pressure-watchdog-JPCLJAXH.js → memory-pressure-watchdog-6PFLEOUO.js} +12 -12
- package/dist/{memory-queue-client-W24ZZ6ZF.js → memory-queue-client-BZD6MXA5.js} +3 -3
- package/dist/{memory-reflection-UGK2I2T7.js → memory-reflection-AYPJRPU7.js} +2 -2
- package/dist/{notifications-3MO6HVJM.js → notifications-BBQ23ORD.js} +11 -11
- package/dist/{orchestration-events-SKESCF4F.js → orchestration-events-O5P5NEKS.js} +3 -3
- package/dist/{orchestrator-SM65YFE2.js → orchestrator-SERM6FDY.js} +13 -13
- package/dist/{pipeline-router-UGCC5XSO.js → pipeline-router-T673WGL3.js} +3 -3
- package/dist/{plan-limits-RUCNKVRH.js → plan-limits-QWBN2EKH.js} +5 -5
- package/dist/{projection-worker-FBFQ232A.js → projection-worker-K6TILAZH.js} +2 -2
- package/dist/{prospective-memory-X4UQTUC2.js → prospective-memory-XRNRMEDL.js} +2 -2
- package/dist/{reranker-FIRW3XMW.js → reranker-3XC5UM4F.js} +1 -1
- package/dist/{retrieval-health-NWYJEIZS.js → retrieval-health-ULVVOIPL.js} +1 -1
- package/dist/{review-polling-HUJMBGUY.js → review-polling-5YGDPJUX.js} +12 -12
- package/dist/runtime/index.js +19 -19
- package/dist/{session-events-UNCFJIK7.js → session-events-D52HNUJK.js} +12 -12
- package/dist/{session-kill-telemetry-VQ4JWWTI.js → session-kill-telemetry-IBNCJSI7.js} +12 -12
- package/dist/{session-scope-OLSNZJ24.js → session-scope-5FWZ4AYR.js} +11 -11
- package/dist/{setup-wizard-X72EV5E2.js → setup-wizard-KVTLSSRD.js} +1 -1
- package/dist/{skill-refinement-OJRBB3LD.js → skill-refinement-YLIAY7V4.js} +2 -2
- package/dist/{stack-update-PK2OYYR3.js → stack-update-OWWGTYRB.js} +3 -3
- package/dist/{steward-gate-5ZWUVNGD.js → steward-gate-3ZITRYVH.js} +3 -3
- package/dist/{task-enforcement-VFFLCP3N.js → task-enforcement-L4YTDOOX.js} +11 -11
- package/dist/{task-scope-75JK27V5.js → task-scope-OIHLMQOQ.js} +11 -11
- package/dist/{tasks-crud-ADVXVR7D.js → tasks-crud-QUIIRWE3.js} +11 -11
- package/dist/{tasks-notify-NAA6IHHW.js → tasks-notify-ANYLB5GU.js} +12 -12
- package/dist/{tasks-review-5A3JJR6R.js → tasks-review-BWSCXFMB.js} +11 -11
- package/dist/{telemetry-upload-HSXQYSVJ.js → telemetry-upload-XLDBCD7B.js} +7 -7
- package/dist/{token-budget-GD2VU7N4.js → token-budget-OQCLPV3A.js} +3 -3
- package/dist/{tool-capability-index-KA2HQ7A4.js → tool-capability-index-3UWKZZED.js} +1 -1
- package/dist/{tool-telemetry-UQY7GDGE.js → tool-telemetry-AQTFWOWG.js} +1 -1
- package/dist/tui/App.js +19 -19
- package/dist/{tui-data-VYSH7F2K.js → tui-data-3Y5L5LJB.js} +11 -11
- package/dist/{worker-gate-DRSX2SOW.js → worker-gate-WJS2MFNA.js} +1 -1
- package/dist/{workflow-engine-WFDIVYWP.js → workflow-engine-EPPZ226V.js} +2 -2
- package/dist/{worktree-LWVPNZ4L.js → worktree-OYGDGJP7.js} +4 -4
- package/dist/{worktree-sweep-3IZLGYYH.js → worktree-sweep-KV4H4766.js} +5 -5
- package/package.json +1 -1
- package/release-notes.json +47 -44
- /package/dist/{chunk-3YKA5BKT.js → chunk-72LWCZTJ.js} +0 -0
- /package/dist/{chunk-7NG77I33.js → chunk-DQJ3WZRK.js} +0 -0
- /package/dist/{chunk-HJSMIHEY.js → chunk-DY3J6GQO.js} +0 -0
- /package/dist/{chunk-XRJ3EFEF.js → chunk-IZY6V4FI.js} +0 -0
- /package/dist/{chunk-S6N7DLKL.js → chunk-Q5YKWFVO.js} +0 -0
- /package/dist/{chunk-4AHV3QBI.js → chunk-QTEHH4LG.js} +0 -0
- /package/dist/{chunk-UWVAG35C.js → chunk-RRQI5PSJ.js} +0 -0
- /package/dist/{chunk-NOPDNOGQ.js → chunk-SIJSFULW.js} +0 -0
- /package/dist/{chunk-SOIHGU5I.js → chunk-SJZT66LM.js} +0 -0
- /package/dist/{chunk-3EZQSPTG.js → chunk-WXRVHXVP.js} +0 -0
- /package/dist/{chunk-6DTSAEDS.js → chunk-YIFZZYQD.js} +0 -0
- /package/dist/{chunk-53ARJV2L.js → chunk-ZU6767WK.js} +0 -0
- /package/dist/{core-memory-5HNI2YLS.js → core-memory-DARTILJG.js} +0 -0
- /package/dist/{entity-boost-AQBUEMJK.js → entity-boost-VR5YOQCT.js} +0 -0
- /package/dist/{message-queue-client-JGOK7POW.js → message-queue-client-HVFR67QH.js} +0 -0
- /package/dist/{oauth-server-NZTPAFQ7.js → oauth-server-UQHCFVHT.js} +0 -0
- /package/dist/{project-boot-3UP6ETJY.js → project-boot-22ZZL2GE.js} +0 -0
- /package/dist/{wiki-acl-4W4CSCFO.js → wiki-acl-EZMGL6KW.js} +0 -0
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
import {
|
|
2
2
|
lightweightSearch
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4Z47UMMM.js";
|
|
4
4
|
import "./chunk-AB4PAQYK.js";
|
|
5
|
-
import "./chunk-
|
|
5
|
+
import "./chunk-H2SD2EA7.js";
|
|
6
6
|
import "./chunk-CHCA3ZM2.js";
|
|
7
7
|
import "./chunk-OTVEIJUQ.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-SIJSFULW.js";
|
|
9
9
|
import "./chunk-Y25OJWOQ.js";
|
|
10
10
|
import {
|
|
11
11
|
sessionScopeFilter,
|
|
12
12
|
strictSessionScopeFilter
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-PLBDXCYZ.js";
|
|
14
|
+
import "./chunk-HWC5W34K.js";
|
|
15
|
+
import "./chunk-KLG53B63.js";
|
|
16
16
|
import "./chunk-4FVVJ7ME.js";
|
|
17
17
|
import "./chunk-E23LNUWJ.js";
|
|
18
18
|
import "./chunk-4JERP7NT.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-ABGDTMKC.js";
|
|
20
20
|
import "./chunk-SSTLTIF3.js";
|
|
21
21
|
import "./chunk-RMOBQ6A5.js";
|
|
22
22
|
import "./chunk-54QCG45Y.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-HV5CUDOE.js";
|
|
24
|
+
import "./chunk-QVFJCFNM.js";
|
|
25
25
|
import "./chunk-NGP6LSV2.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-EPBB2OD3.js";
|
|
27
27
|
import "./chunk-CVYC6DUW.js";
|
|
28
28
|
import "./chunk-OPU3NYOO.js";
|
|
29
29
|
import "./chunk-HYZV25LY.js";
|
|
@@ -31,16 +31,16 @@ import "./chunk-GJV3WDWM.js";
|
|
|
31
31
|
import "./chunk-MP2AFCGL.js";
|
|
32
32
|
import {
|
|
33
33
|
getClient
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-XLNF3CIO.js";
|
|
35
35
|
import "./chunk-2I23RPSI.js";
|
|
36
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-WXRVHXVP.js";
|
|
37
37
|
import "./chunk-PNQDP3OA.js";
|
|
38
38
|
import "./chunk-H73TUI4Y.js";
|
|
39
39
|
import "./chunk-7HLWBYH7.js";
|
|
40
40
|
import "./chunk-FXU7JOXK.js";
|
|
41
41
|
import "./chunk-Z42MXYWW.js";
|
|
42
|
-
import "./chunk-
|
|
43
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-VY7345RO.js";
|
|
43
|
+
import "./chunk-DQJ3WZRK.js";
|
|
44
44
|
import "./chunk-7Y5UDEVM.js";
|
|
45
45
|
import "./chunk-SHIICYJW.js";
|
|
46
46
|
import "./chunk-MLKGABMK.js";
|
|
@@ -149,7 +149,7 @@ ${msgLines}`);
|
|
|
149
149
|
} catch {
|
|
150
150
|
}
|
|
151
151
|
try {
|
|
152
|
-
const { getPendingProspective, markSurfaced } = await import("./prospective-memory-
|
|
152
|
+
const { getPendingProspective, markSurfaced } = await import("./prospective-memory-XRNRMEDL.js");
|
|
153
153
|
const due = await getPendingProspective(agentId, { projectName, limit: 5 });
|
|
154
154
|
if (due.length > 0) {
|
|
155
155
|
const now = Date.now();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionScopeFilter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PLBDXCYZ.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/git-task-sweep.ts
|
|
6
6
|
import { execSync } from "child_process";
|
|
@@ -238,7 +238,7 @@ async function sweepTasks(projectName, options = {}) {
|
|
|
238
238
|
}
|
|
239
239
|
if (!dryRun) {
|
|
240
240
|
try {
|
|
241
|
-
const { updateTaskStatus } = await import("./tasks-crud-
|
|
241
|
+
const { updateTaskStatus } = await import("./tasks-crud-QUIIRWE3.js");
|
|
242
242
|
await updateTaskStatus({
|
|
243
243
|
taskId: task.id,
|
|
244
244
|
status: "needs_review",
|
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
buildStatusFilter,
|
|
9
9
|
buildWikiScopeFilter,
|
|
10
10
|
searchMemories
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-H2SD2EA7.js";
|
|
12
12
|
import {
|
|
13
13
|
blobToVector
|
|
14
14
|
} from "./chunk-OTVEIJUQ.js";
|
|
15
15
|
import {
|
|
16
16
|
getClient
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-XLNF3CIO.js";
|
|
18
18
|
|
|
19
19
|
// src/lib/hybrid-search.ts
|
|
20
20
|
var RRF_K = 60;
|
|
@@ -361,7 +361,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
361
361
|
let rerankerAvailable = false;
|
|
362
362
|
if (process.env.EXE_IS_DAEMON === "1") {
|
|
363
363
|
try {
|
|
364
|
-
const { isRerankerAvailable } = await import("./reranker-
|
|
364
|
+
const { isRerankerAvailable } = await import("./reranker-3XC5UM4F.js");
|
|
365
365
|
rerankerAvailable = isRerankerAvailable();
|
|
366
366
|
} catch {
|
|
367
367
|
}
|
|
@@ -427,7 +427,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
427
427
|
]).catch(() => []),
|
|
428
428
|
includeStructuredCards ? (async () => {
|
|
429
429
|
try {
|
|
430
|
-
const { searchMemoryCards } = await import("./memory-cards-
|
|
430
|
+
const { searchMemoryCards } = await import("./memory-cards-MGZ4P3AA.js");
|
|
431
431
|
return await searchMemoryCards(effectiveQuery, agentId, fetchOptions);
|
|
432
432
|
} catch {
|
|
433
433
|
return [];
|
|
@@ -436,7 +436,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
436
436
|
// Reflection insights: patterns, contradictions, summaries across sessions
|
|
437
437
|
includeStructuredCards ? (async () => {
|
|
438
438
|
try {
|
|
439
|
-
const { searchReflections } = await import("./memory-reflection-
|
|
439
|
+
const { searchReflections } = await import("./memory-reflection-AYPJRPU7.js");
|
|
440
440
|
const insights = await searchReflections(effectiveQuery, agentId, 5, {
|
|
441
441
|
includeArchived: options?.includeArchived
|
|
442
442
|
});
|
|
@@ -537,7 +537,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
537
537
|
let entityBoostRan = false;
|
|
538
538
|
if (merged.length > 0) {
|
|
539
539
|
try {
|
|
540
|
-
const { applyEntityBoost } = await import("./entity-boost-
|
|
540
|
+
const { applyEntityBoost } = await import("./entity-boost-VR5YOQCT.js");
|
|
541
541
|
const boosted = await applyEntityBoost(merged, effectiveQuery, getClient());
|
|
542
542
|
merged = boosted.results;
|
|
543
543
|
graphContextMap = boosted.graphContext;
|
|
@@ -561,7 +561,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
561
561
|
try {
|
|
562
562
|
let rerankedRecords;
|
|
563
563
|
if (graphContextMap.size > 0) {
|
|
564
|
-
const { rerankWithContext } = await import("./reranker-
|
|
564
|
+
const { rerankWithContext } = await import("./reranker-3XC5UM4F.js");
|
|
565
565
|
const candidates = merged.map((m) => ({
|
|
566
566
|
text: m.raw_text,
|
|
567
567
|
context: graphContextMap.get(m.id)
|
|
@@ -569,7 +569,7 @@ async function hybridSearch(queryText, agentId, options) {
|
|
|
569
569
|
const scored = await rerankWithContext(effectiveQuery, candidates, rerankReturnLimit);
|
|
570
570
|
rerankedRecords = scored.map((s) => merged[s.index]);
|
|
571
571
|
} else {
|
|
572
|
-
const { rerank } = await import("./reranker-
|
|
572
|
+
const { rerank } = await import("./reranker-3XC5UM4F.js");
|
|
573
573
|
rerankedRecords = await rerank(effectiveQuery, merged, rerankReturnLimit);
|
|
574
574
|
}
|
|
575
575
|
if (rerankedRecords.length > 0) {
|
|
@@ -931,7 +931,7 @@ async function lightweightSearch(queryText, agentId, options) {
|
|
|
931
931
|
}
|
|
932
932
|
if (results.length >= 2) {
|
|
933
933
|
try {
|
|
934
|
-
const { recordCoActivations } = await import("./co-activation-
|
|
934
|
+
const { recordCoActivations } = await import("./co-activation-K44LGZ7A.js");
|
|
935
935
|
const ids = results.slice(0, 10).map((r) => r.id);
|
|
936
936
|
void recordCoActivations(ids);
|
|
937
937
|
} catch {
|
|
@@ -939,7 +939,7 @@ async function lightweightSearch(queryText, agentId, options) {
|
|
|
939
939
|
}
|
|
940
940
|
if (options?.includeStructuredCards !== true) return results;
|
|
941
941
|
try {
|
|
942
|
-
const { searchMemoryCards } = await import("./memory-cards-
|
|
942
|
+
const { searchMemoryCards } = await import("./memory-cards-MGZ4P3AA.js");
|
|
943
943
|
const cardResults = await searchMemoryCards(queryText, agentId, options);
|
|
944
944
|
if (cardResults.length > 0) {
|
|
945
945
|
return rrfMergeMulti([results, cardResults], limit, RRF_K, [1, 0.85]);
|
|
@@ -417,8 +417,12 @@ function buildTeam(employees, data) {
|
|
|
417
417
|
}
|
|
418
418
|
if (data.plan) {
|
|
419
419
|
const planLabel = data.plan === "pro" ? "Solopreneur" : data.plan.charAt(0).toUpperCase() + data.plan.slice(1);
|
|
420
|
-
const limit = data.employeeLimit ?? "?";
|
|
420
|
+
const limit = data.employeeLimit === -1 ? "\u221E" : data.employeeLimit ?? "?";
|
|
421
421
|
lines.push(` Plan: ${planLabel} | ${employees.length}/${limit} employees | https://askexe.com`);
|
|
422
|
+
if (data.planChangeNotice) {
|
|
423
|
+
lines.push(` \u{1F389} ${data.planChangeNotice}`);
|
|
424
|
+
}
|
|
425
|
+
lines.push(` Upgraded your plan? Run: exe-os license refresh`);
|
|
422
426
|
}
|
|
423
427
|
return lines;
|
|
424
428
|
}
|
|
@@ -4,32 +4,32 @@ import {
|
|
|
4
4
|
} from "./chunk-HMP5VT6A.js";
|
|
5
5
|
import {
|
|
6
6
|
createTask
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7SDS5VCL.js";
|
|
8
8
|
import {
|
|
9
9
|
getActiveAgent
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-EOPSIIEH.js";
|
|
11
11
|
import {
|
|
12
12
|
ensureEmployee,
|
|
13
13
|
isValidSessionScope,
|
|
14
14
|
logTaskDispatch,
|
|
15
15
|
resolveExeSession
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-PLBDXCYZ.js";
|
|
17
17
|
import {
|
|
18
18
|
recordOrchestrationEventBestEffort
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-HV5CUDOE.js";
|
|
20
20
|
import {
|
|
21
21
|
getAgentRuntime,
|
|
22
22
|
validateRuntimeModel
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-QVFJCFNM.js";
|
|
24
24
|
import {
|
|
25
25
|
getLicenseSync
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-EPBB2OD3.js";
|
|
27
27
|
import {
|
|
28
28
|
getAgentContext
|
|
29
29
|
} from "./chunk-GJV3WDWM.js";
|
|
30
30
|
import {
|
|
31
31
|
isCoordinatorName
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-XLNF3CIO.js";
|
|
33
33
|
|
|
34
34
|
// src/mcp/tools/create-task.ts
|
|
35
35
|
import { z } from "zod";
|
|
@@ -345,7 +345,7 @@ function registerCreateTask(server) {
|
|
|
345
345
|
session_scope: sessionScope,
|
|
346
346
|
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
347
347
|
}), "utf-8");
|
|
348
|
-
const { recordOrchestrationEventBestEffort: recordOE } = await import("./orchestration-events-
|
|
348
|
+
const { recordOrchestrationEventBestEffort: recordOE } = await import("./orchestration-events-O5P5NEKS.js");
|
|
349
349
|
recordOE({
|
|
350
350
|
eventType: "signal.created",
|
|
351
351
|
source: "create-task.mcp",
|
|
@@ -377,7 +377,7 @@ function registerCreateTask(server) {
|
|
|
377
377
|
let projectConflictOpts = {};
|
|
378
378
|
try {
|
|
379
379
|
const { getClient } = await import("./lib/database.js");
|
|
380
|
-
const { sessionScopeFilter } = await import("./task-scope-
|
|
380
|
+
const { sessionScopeFilter } = await import("./task-scope-OIHLMQOQ.js");
|
|
381
381
|
const client = getClient();
|
|
382
382
|
const scope = sessionScopeFilter(task.sessionScope || callerRoot || exeSession || null);
|
|
383
383
|
const existing = await client.execute({
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "./chunk-75H4R62K.js";
|
|
4
4
|
import {
|
|
5
5
|
initStore
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-H2SD2EA7.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
isInitialized
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-XLNF3CIO.js";
|
|
11
11
|
|
|
12
12
|
// src/lib/schedules.ts
|
|
13
13
|
import crypto from "crypto";
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
listWorkflowDefinitions,
|
|
3
3
|
runWorkflow,
|
|
4
4
|
startWorkflow
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-HGM6NZQH.js";
|
|
6
6
|
import {
|
|
7
7
|
ingest
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-X62GD6QW.js";
|
|
9
9
|
import {
|
|
10
10
|
initCRMBridge
|
|
11
11
|
} from "./chunk-ONKIWA3R.js";
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
dispatchTaskToEmployee,
|
|
3
3
|
markTaskNotificationsRead,
|
|
4
4
|
notifyTaskDone
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BFHBHQFA.js";
|
|
6
6
|
import {
|
|
7
7
|
cleanupReviewFile,
|
|
8
8
|
createTaskCore,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
sessionScopeFilter,
|
|
12
12
|
updateTaskStatus,
|
|
13
13
|
writeNotification
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-PLBDXCYZ.js";
|
|
15
15
|
import {
|
|
16
16
|
orgBus
|
|
17
17
|
} from "./chunk-MP2AFCGL.js";
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
getClient,
|
|
20
20
|
getCoordinatorName,
|
|
21
21
|
isCoordinatorName
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-XLNF3CIO.js";
|
|
23
23
|
import {
|
|
24
24
|
EXE_AI_DIR
|
|
25
25
|
} from "./chunk-7Y5UDEVM.js";
|
|
@@ -61,7 +61,7 @@ async function cascadeUnblock(taskId, baseDir, now) {
|
|
|
61
61
|
}
|
|
62
62
|
if (unblockedRows.rows.length > 0 && !process.env.VITEST) {
|
|
63
63
|
try {
|
|
64
|
-
const { dispatchTaskToEmployee: dispatchTaskToEmployee2 } = await import("./tasks-notify-
|
|
64
|
+
const { dispatchTaskToEmployee: dispatchTaskToEmployee2 } = await import("./tasks-notify-ANYLB5GU.js");
|
|
65
65
|
const dispatched = /* @__PURE__ */ new Set();
|
|
66
66
|
for (const ur of unblockedRows.rows) {
|
|
67
67
|
const assignee = String(ur.assigned_to);
|
|
@@ -333,7 +333,7 @@ async function updateTask(input) {
|
|
|
333
333
|
await markTaskNotificationsRead(taskFile);
|
|
334
334
|
if (isCompletionReviewTransition && !isCoordinator && row.reviewer) {
|
|
335
335
|
try {
|
|
336
|
-
const { writeNotification: writeNotification2 } = await import("./notifications-
|
|
336
|
+
const { writeNotification: writeNotification2 } = await import("./notifications-BBQ23ORD.js");
|
|
337
337
|
const reviewer = String(row.reviewer);
|
|
338
338
|
await writeNotification2({
|
|
339
339
|
agentId: reviewer,
|
|
@@ -15,7 +15,8 @@ function registryProxyOptionsFromEnv(env = process.env) {
|
|
|
15
15
|
upstreamToken,
|
|
16
16
|
pullTokens,
|
|
17
17
|
allowedNamespace: env.EXE_REGISTRY_PROXY_ALLOWED_NAMESPACE || "askexe",
|
|
18
|
-
licenseValidatorUrl: env.EXE_REGISTRY_PROXY_LICENSE_VALIDATOR_URL || "https://api.askexe.com/v1/license/validate"
|
|
18
|
+
licenseValidatorUrl: env.EXE_REGISTRY_PROXY_LICENSE_VALIDATOR_URL || "https://api.askexe.com/v1/license/validate",
|
|
19
|
+
databaseUrl: env.EXE_REGISTRY_PROXY_DATABASE_URL || env.DATABASE_URL || void 0
|
|
19
20
|
};
|
|
20
21
|
}
|
|
21
22
|
function assertRegistryProxyConfig(options) {
|
|
@@ -58,6 +59,12 @@ function parseBasicAuth(header) {
|
|
|
58
59
|
return null;
|
|
59
60
|
}
|
|
60
61
|
}
|
|
62
|
+
function parseBearerToken(header) {
|
|
63
|
+
if (!header) return null;
|
|
64
|
+
const match = /^Bearer\s+(.+)$/i.exec(header.trim());
|
|
65
|
+
const token = match?.[1]?.trim();
|
|
66
|
+
return token ? token : null;
|
|
67
|
+
}
|
|
61
68
|
function unauthorized(res) {
|
|
62
69
|
res.writeHead(401, {
|
|
63
70
|
"www-authenticate": 'Basic realm="AskExe Registry Proxy"',
|
|
@@ -119,6 +126,78 @@ function createRegistryProxyServer(options) {
|
|
|
119
126
|
const upstream = new URL(options.upstream ?? "https://ghcr.io");
|
|
120
127
|
const namespace = options.allowedNamespace ?? "askexe";
|
|
121
128
|
const upstreamAuth = Buffer.from(`${options.upstreamUsername ?? "askexe"}:${options.upstreamToken}`).toString("base64");
|
|
129
|
+
let manifestPool = null;
|
|
130
|
+
let manifestPoolInit = null;
|
|
131
|
+
async function getManifestPool() {
|
|
132
|
+
if (!options.databaseUrl) return null;
|
|
133
|
+
if (manifestPool) return manifestPool;
|
|
134
|
+
if (!manifestPoolInit) {
|
|
135
|
+
manifestPoolInit = (async () => {
|
|
136
|
+
const { Pool } = await import("pg");
|
|
137
|
+
const { pgSslConfig } = await import("./pg-ssl-7JXQFL4I.js");
|
|
138
|
+
const pool = new Pool({ connectionString: options.databaseUrl, max: 2, ...pgSslConfig() });
|
|
139
|
+
manifestPool = pool;
|
|
140
|
+
return pool;
|
|
141
|
+
})().catch((err) => {
|
|
142
|
+
console.error("[registry-proxy] manifest DB pool init failed:", err instanceof Error ? err.message : String(err));
|
|
143
|
+
manifestPoolInit = null;
|
|
144
|
+
return null;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return manifestPoolInit;
|
|
148
|
+
}
|
|
149
|
+
async function isLicenseKeyValidLocally(pool, token) {
|
|
150
|
+
try {
|
|
151
|
+
const r = await pool.query(
|
|
152
|
+
"SELECT 1 FROM billing.licenses WHERE key = $1 AND status = 'active' AND (expires_at IS NULL OR expires_at > now()) LIMIT 1",
|
|
153
|
+
[token]
|
|
154
|
+
);
|
|
155
|
+
return r.rows.length > 0;
|
|
156
|
+
} catch (err) {
|
|
157
|
+
console.error("[registry-proxy] local license validation failed:", err instanceof Error ? err.message : String(err));
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function isManifestAuthorized(token) {
|
|
162
|
+
if (timingSafeIncludes(options.pullTokens, token)) return true;
|
|
163
|
+
if (!isLicenseKeyFormat(token)) return false;
|
|
164
|
+
const pool = await getManifestPool();
|
|
165
|
+
if (pool && await isLicenseKeyValidLocally(pool, token)) return true;
|
|
166
|
+
if (options.licenseValidatorUrl) return validateLicenseKey(token, options.licenseValidatorUrl);
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
async function handleStackManifest(req, res) {
|
|
170
|
+
const token = parseBearerToken(req.headers.authorization);
|
|
171
|
+
if (!token || !await isManifestAuthorized(token)) {
|
|
172
|
+
unauthorized(res);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const pool = await getManifestPool();
|
|
176
|
+
if (!pool) {
|
|
177
|
+
res.writeHead(503, { "content-type": "application/json" });
|
|
178
|
+
res.end(JSON.stringify({ error: "stack manifest source unavailable" }));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
const result = await pool.query(
|
|
183
|
+
"SELECT manifest FROM billing.stack_releases WHERE status = $1 ORDER BY string_to_array(version, '.')::int[] DESC LIMIT 1",
|
|
184
|
+
["released"]
|
|
185
|
+
);
|
|
186
|
+
if (result.rows.length === 0) {
|
|
187
|
+
res.writeHead(503, { "content-type": "application/json" });
|
|
188
|
+
res.end(JSON.stringify({ error: "no released stack manifest available" }));
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const manifest = result.rows[0].manifest;
|
|
192
|
+
const body = typeof manifest === "string" ? manifest : JSON.stringify(manifest);
|
|
193
|
+
res.writeHead(200, { "content-type": "application/json", "cache-control": "max-age=60" });
|
|
194
|
+
res.end(body);
|
|
195
|
+
} catch (err) {
|
|
196
|
+
console.error("[registry-proxy] stack manifest query failed:", err instanceof Error ? err.message : String(err));
|
|
197
|
+
res.writeHead(503, { "content-type": "application/json" });
|
|
198
|
+
res.end(JSON.stringify({ error: "stack manifest query failed" }));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
122
201
|
return createServer(async (req, res) => {
|
|
123
202
|
const requestUrl = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
124
203
|
if (requestUrl.pathname === "/health") {
|
|
@@ -126,6 +205,10 @@ function createRegistryProxyServer(options) {
|
|
|
126
205
|
res.end(JSON.stringify({ ok: true, service: "exe-registry-proxy", upstream: upstream.origin, namespace }));
|
|
127
206
|
return;
|
|
128
207
|
}
|
|
208
|
+
if (requestUrl.pathname === "/v1/stack-manifest.json") {
|
|
209
|
+
await handleStackManifest(req, res);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
129
212
|
if (!isAllowedPath(requestUrl.pathname, namespace)) {
|
|
130
213
|
res.writeHead(404, { "content-type": "application/json" });
|
|
131
214
|
res.end(JSON.stringify({ error: "registry path not allowed" }));
|
|
@@ -180,6 +263,14 @@ async function runRegistryProxy(options = registryProxyOptionsFromEnv()) {
|
|
|
180
263
|
await new Promise((resolve) => server.listen(options.port, options.host, resolve));
|
|
181
264
|
console.log(`exe-registry-proxy listening on ${options.host ?? "0.0.0.0"}:${options.port}`);
|
|
182
265
|
console.log(`proxying /v2/${options.allowedNamespace ?? "askexe"}/* -> ${options.upstream ?? "https://ghcr.io"}`);
|
|
266
|
+
const { licenseSyncConfigFromEnv, startLicenseSyncScheduler } = await import("./license-sync-LX73IEBH.js");
|
|
267
|
+
const syncConfig = licenseSyncConfigFromEnv();
|
|
268
|
+
if (syncConfig) {
|
|
269
|
+
startLicenseSyncScheduler(syncConfig);
|
|
270
|
+
console.log(
|
|
271
|
+
`[license-sync] scheduler started (interval=${syncConfig.intervalMs ?? 36e5}ms, D1\u2192billing.licenses, one-way)`
|
|
272
|
+
);
|
|
273
|
+
}
|
|
183
274
|
}
|
|
184
275
|
|
|
185
276
|
export {
|