abtars 0.3.4-alpha.7 → 0.3.4
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/bundle/{_registry.generated-WGR4WOPT.js → _registry.generated-AVR7DK2A.js} +17 -14
- package/bundle/{_registry.generated-WGR4WOPT.js.map → _registry.generated-AVR7DK2A.js.map} +1 -1
- package/bundle/{abmind-lazy-7Z44NODV.js → abmind-lazy-E3YCFKQ5.js} +15 -5
- package/bundle/abtars-browser.js +4 -4
- package/bundle/abtars-cli.js +23 -13
- package/bundle/abtars-cli.js.map +2 -2
- package/bundle/abtars-restart.js +3 -3
- package/bundle/abtars-task.js +3 -3
- package/bundle/abtars-task.js.map +2 -2
- package/bundle/abtars.js +610 -455
- package/bundle/abtars.js.map +4 -4
- package/bundle/{acp-raw-client-E6FM45NC.js → acp-raw-client-UCNK3OTU.js} +2 -2
- package/bundle/{action-gate-G2V47NHW.js → action-gate-V4FCBHFB.js} +2 -2
- package/bundle/{agent-api-adapter-YAHKQMMZ.js → agent-api-adapter-7HEPYSIN.js} +3 -3
- package/bundle/{agent-api-rate-limit-WCFXJMGY.js → agent-api-rate-limit-RZSAM3SW.js} +4 -4
- package/bundle/{agent-registry-GI6CLT3Z.js → agent-registry-46A2R5KP.js} +7 -7
- package/bundle/{bootstrap-X2QYIZIJ.js → bootstrap-MIHJJSWU.js} +2 -2
- package/bundle/{bridge-lock-transport-4ZH7QTJP.js → bridge-lock-transport-7RSN7OLJ.js} +4 -4
- package/bundle/{browser-DMARZJIN.js → browser-F6BCWJWW.js} +6 -6
- package/bundle/{budget-45QOBDWA.js → budget-WUM3SPKW.js} +3 -3
- package/bundle/{capability-JFWX3IQF.js → capability-QVRKGRFC.js} +5 -5
- package/bundle/{chunk-YSKCQH6E.js → chunk-2IYJ4I66.js} +2 -2
- package/bundle/{chunk-KTYGKPYM.js → chunk-2NLUT5S2.js} +6 -6
- package/bundle/chunk-3BG3AIDP.js +191 -0
- package/bundle/chunk-3BG3AIDP.js.map +7 -0
- package/bundle/{chunk-OKAQICWY.js → chunk-3GQX34S2.js} +3 -3
- package/bundle/{chunk-QROWBWLL.js → chunk-3XZ773BS.js} +2 -2
- package/bundle/{chunk-DYBW4XXL.js → chunk-467SRLLR.js} +2 -2
- package/bundle/{chunk-LGP6TYFI.js → chunk-4AILRHUI.js} +97 -8
- package/bundle/chunk-4AILRHUI.js.map +7 -0
- package/bundle/{chunk-GPZNXY2U.js → chunk-4S3H4OK7.js} +4 -4
- package/bundle/{chunk-NDCRWEEJ.js → chunk-4Y5MJQRE.js} +6 -6
- package/bundle/{chunk-FRKW6LWB.js → chunk-55UWKI5C.js} +3 -3
- package/bundle/{chunk-4UL3KINB.js → chunk-5PNJFDSW.js} +8 -8
- package/bundle/{chunk-LUNA6PM5.js → chunk-5RVOEFGT.js} +4 -2
- package/bundle/{chunk-LUNA6PM5.js.map → chunk-5RVOEFGT.js.map} +2 -2
- package/bundle/{chunk-OXTSWQCX.js → chunk-5Y3FJ2Y7.js} +2 -2
- package/bundle/{chunk-TMUYFERL.js → chunk-6B5ZFUPD.js} +2 -2
- package/bundle/{chunk-65VCEC32.js → chunk-6PA5JBUU.js} +2 -2
- package/bundle/chunk-BNXV7SZI.js +195 -0
- package/bundle/chunk-BNXV7SZI.js.map +7 -0
- package/bundle/{chunk-AFREM7FX.js → chunk-CK7YTA2F.js} +2 -2
- package/bundle/{chunk-NRUSRJXR.js → chunk-DZJ5QZFD.js} +2 -2
- package/bundle/{chunk-YRSMGJFP.js → chunk-E67KESEG.js} +2 -2
- package/bundle/{chunk-ZV4IWKDJ.js → chunk-E7XD5UGB.js} +3 -3
- package/bundle/{chunk-GXL7HJPT.js → chunk-EAX5ZZUL.js} +63 -39
- package/bundle/chunk-EAX5ZZUL.js.map +7 -0
- package/bundle/{chunk-PEDX56EL.js → chunk-EFGBM555.js} +2 -2
- package/bundle/{chunk-EQSG2CRM.js → chunk-FGYDIX54.js} +22 -15
- package/bundle/chunk-FGYDIX54.js.map +7 -0
- package/bundle/{chunk-XWRADSXO.js → chunk-GF6NVNA7.js} +15 -5
- package/bundle/chunk-GF6NVNA7.js.map +7 -0
- package/bundle/{chunk-SIFPBTI4.js → chunk-HGSHCQ5F.js} +113 -73
- package/bundle/chunk-HGSHCQ5F.js.map +7 -0
- package/bundle/{chunk-YRU2K3O6.js → chunk-IMIGG5EO.js} +39 -39
- package/bundle/chunk-IMIGG5EO.js.map +7 -0
- package/bundle/{chunk-W4EA4GCA.js → chunk-ITOFPJAV.js} +43 -31
- package/bundle/chunk-ITOFPJAV.js.map +7 -0
- package/bundle/{chunk-UPRZDU6T.js → chunk-IY6UKLPS.js} +3 -3
- package/bundle/{chunk-EUZDKV3C.js → chunk-J4RUFAPK.js} +3 -3
- package/bundle/{chunk-HZDLFLRP.js → chunk-J7DRPVMU.js} +35 -5
- package/bundle/chunk-J7DRPVMU.js.map +7 -0
- package/bundle/{chunk-EGL6UMAO.js → chunk-JG4BKXBN.js} +7 -1
- package/bundle/chunk-JG4BKXBN.js.map +7 -0
- package/bundle/{chunk-5B5B6EHL.js → chunk-JLWYPGWI.js} +5 -5
- package/bundle/{chunk-5QUTMUIK.js → chunk-JXYWDAHD.js} +12 -12
- package/bundle/{chunk-GRVWZO4C.js → chunk-KOSFXW2S.js} +24 -3
- package/bundle/{chunk-GRVWZO4C.js.map → chunk-KOSFXW2S.js.map} +1 -1
- package/bundle/{chunk-ONBF5DDU.js → chunk-L72RIPEC.js} +248 -182
- package/bundle/chunk-L72RIPEC.js.map +7 -0
- package/bundle/{chunk-TEFZ4JA4.js → chunk-NHPLD3C7.js} +2 -2
- package/bundle/{chunk-2KC5G3EA.js → chunk-OWUO5RS3.js} +5 -5
- package/bundle/{chunk-4MULJ5SS.js → chunk-OY4Q6AMY.js} +71 -49
- package/bundle/chunk-OY4Q6AMY.js.map +7 -0
- package/bundle/{chunk-WBTJ2E62.js → chunk-P3NODAHF.js} +2 -5
- package/bundle/{chunk-WBTJ2E62.js.map → chunk-P3NODAHF.js.map} +2 -2
- package/bundle/{chunk-BROFMHC2.js → chunk-PB5GF4FG.js} +334 -237
- package/bundle/chunk-PB5GF4FG.js.map +7 -0
- package/bundle/{chunk-WYHGNI56.js → chunk-PMD5BLFS.js} +6 -6
- package/bundle/{chunk-URQPDCK5.js → chunk-Q66LQMMZ.js} +3 -3
- package/bundle/{chunk-HKRSMUXJ.js → chunk-SC2Y5NR2.js} +71 -132
- package/bundle/chunk-SC2Y5NR2.js.map +7 -0
- package/bundle/chunk-SFL4EPCZ.js +555 -0
- package/bundle/chunk-SFL4EPCZ.js.map +7 -0
- package/bundle/{chunk-LDUOOKQY.js → chunk-SJPUNDZ3.js} +5 -5
- package/bundle/{chunk-LDUOOKQY.js.map → chunk-SJPUNDZ3.js.map} +1 -1
- package/bundle/{chunk-JQDJPUHM.js → chunk-TWB2ZGVH.js} +2 -2
- package/bundle/{chunk-IJT4KWXT.js → chunk-U4U47YE7.js} +2 -2
- package/bundle/{chunk-2FAZIA37.js → chunk-W546CU3A.js} +3 -3
- package/bundle/chunk-WC5O5KOE.js +211 -0
- package/bundle/chunk-WC5O5KOE.js.map +7 -0
- package/bundle/{chunk-JNIHEDKF.js → chunk-XPWYDNWL.js} +2 -2
- package/bundle/{chunk-GWILHZPT.js → chunk-XRTXYN66.js} +10 -7
- package/bundle/{chunk-GWILHZPT.js.map → chunk-XRTXYN66.js.map} +2 -2
- package/bundle/{chunk-EFJVUJBE.js → chunk-Y5FEFKGM.js} +6 -6
- package/bundle/chunk-YJZE4OK3.js +169 -0
- package/bundle/chunk-YJZE4OK3.js.map +7 -0
- package/bundle/{chunk-GVM5YU5I.js → chunk-Z4FZPB42.js} +2 -2
- package/bundle/{chunk-7BSQ5UQO.js → chunk-ZSIDQ66D.js} +3 -3
- package/bundle/{chunk-XX6BGTPO.js → chunk-ZZZCJJEO.js} +4 -4
- package/bundle/{commands-XYEGVUZF.js → commands-2ZW6CMLC.js} +17 -16
- package/bundle/{config-M3P5IOAI.js → config-YMY5YHKN.js} +6 -6
- package/bundle/{context-2RJHC2LE.js → context-CL2RSLII.js} +7 -5
- package/bundle/context-CL2RSLII.js.map +7 -0
- package/bundle/{daemon-TB23FFWY.js → daemon-D7SU63OY.js} +3 -3
- package/bundle/{delegation-tools-QKNYQGTQ.js → delegation-tools-WS7Z56KZ.js} +12 -12
- package/bundle/{deploy-EPDWNHJU.js → deploy-AMTVKIMU.js} +2 -2
- package/bundle/{deps-WVK553KF.js → deps-T63AVJKJ.js} +3 -3
- package/bundle/{direct-api-transport-E3LNDBJT.js → direct-api-transport-QNNY2WWP.js} +56 -33
- package/bundle/direct-api-transport-QNNY2WWP.js.map +7 -0
- package/bundle/{discord-adapter-IT3KP3VB.js → discord-adapter-ABAD56Y2.js} +21 -20
- package/bundle/{discord-adapter-IT3KP3VB.js.map → discord-adapter-ABAD56Y2.js.map} +1 -1
- package/bundle/{dns-wakeup-IDOJIXBX.js → dns-wakeup-V3LEFXPE.js} +9 -33
- package/bundle/dns-wakeup-V3LEFXPE.js.map +7 -0
- package/bundle/{doctor-probes-B54JFIW3.js → doctor-probes-O6YI6XSZ.js} +6 -2
- package/bundle/{env-schema-4JXQUOH4.js → env-schema-B5RB32DC.js} +3 -3
- package/bundle/{gossip-3C3BSNPN.js → gossip-SKRCPOBS.js} +9 -5
- package/bundle/{guardrails-DL7ZSWVN.js → guardrails-64GQ5Y5K.js} +4 -4
- package/bundle/{heartbeat-system-MVTRS4GP.js → heartbeat-system-X4MUTKJD.js} +6 -6
- package/bundle/{heartbeat-tier3-ABWL3P7M.js → heartbeat-tier3-2PTPWEQQ.js} +53 -76
- package/bundle/heartbeat-tier3-2PTPWEQQ.js.map +7 -0
- package/bundle/{hook-system-M3POLUIB.js → hook-system-YB635OC4.js} +3 -3
- package/bundle/{hotskills-FWX4QI7V.js → hotskills-Q75D2DK3.js} +5 -5
- package/bundle/{install-OS3CU7NF.js → install-RFKKFSGS.js} +17 -30
- package/bundle/install-RFKKFSGS.js.map +7 -0
- package/bundle/{install-manifest-5PPWMD2W.js → install-manifest-J7ICPCJN.js} +2 -2
- package/bundle/{irc-adapter-PTTZD32W.js → irc-adapter-TVEV4R6H.js} +3 -3
- package/bundle/{irc-config-CP7ZMUOX.js → irc-config-M676FOFI.js} +4 -4
- package/bundle/{kanban-board-M326B2XJ.js → kanban-board-DLEJUCNN.js} +9 -7
- package/bundle/{kanban-channel-IJ52OMNA.js → kanban-channel-XOLUHJZJ.js} +6 -6
- package/bundle/kanban-delivery-C4QPBNPX.js +45 -0
- package/bundle/kanban-delivery-C4QPBNPX.js.map +7 -0
- package/bundle/{lazy-require-KCRVT4SI.js → lazy-require-JKQSALXN.js} +3 -3
- package/bundle/{logger-OWCSNYCA.js → logger-3EGHBD4R.js} +2 -2
- package/bundle/{main-chat-ZNUZCTNS.js → main-chat-3H63REKK.js} +4 -4
- package/bundle/{master-user-HSKM4ZFN.js → master-user-MUBUP3KD.js} +5 -5
- package/bundle/{media-utils-3ZYOD7SK.js → media-utils-HUUIALAJ.js} +3 -3
- package/bundle/{message-pipeline-P5GAQU4Z.js → message-pipeline-GRDRWONR.js} +17 -16
- package/bundle/meta.json +3699 -3138
- package/bundle/{metrics-collector-L3VPEHII.js → metrics-collector-YMUGY3PI.js} +31 -2
- package/bundle/metrics-collector-YMUGY3PI.js.map +7 -0
- package/bundle/{model-health-registry-MLEIZSTV.js → model-health-registry-QADMFQFQ.js} +2 -2
- package/bundle/{nerve-IGSXBKZZ.js → nerve-QPAEBRKX.js} +3 -3
- package/bundle/{notification-BFSIEECG.js → notification-3JICGXWU.js} +6 -6
- package/bundle/{openrouter-credits-NTVZDRYM.js → openrouter-credits-7NEIPYJN.js} +3 -3
- package/bundle/{orc-tools-4CHEFWSN.js → orc-tools-UZVPONKY.js} +5 -3
- package/bundle/{peer-auth-QC4EF2PM.js → peer-auth-RI43DKJE.js} +24 -15
- package/bundle/{peer-client-RGEU5HOK.js → peer-client-UITTMWJ2.js} +34 -29
- package/bundle/peer-client-UITTMWJ2.js.map +7 -0
- package/bundle/{peer-config-TN55LFDC.js → peer-config-URM7DCW6.js} +9 -4
- package/bundle/{peer-transport-I6JPLFZ2.js → peer-transport-SI7I72DB.js} +12 -10
- package/bundle/{phase-transport-PGKU2KD4.js → phase-transport-ESWWACZI.js} +17 -17
- package/bundle/{reconcile-CTFCLQRN.js → reconcile-GFDQYNBD.js} +3 -3
- package/bundle/{reconciler-EBKH3JNU.js → reconciler-IEUJXJN2.js} +12 -12
- package/bundle/{restore-IFHPI7I7.js → restore-FARTGLQQ.js} +3 -3
- package/bundle/{rollback-ANRI3T5Z.js → rollback-GEWPZABG.js} +2 -2
- package/bundle/{sandbox-runtime-QROWHDCS.js → sandbox-runtime-DV6E25J6.js} +2 -2
- package/bundle/{self-healer-utils-IFAYOQO2.js → self-healer-utils-P4SKNNEM.js} +3 -3
- package/bundle/{sha-tracker-ZWBP6CIJ.js → sha-tracker-77SHLYNY.js} +3 -3
- package/bundle/{skill-session-BMSRQSHV.js → skill-session-5HSMXY54.js} +3 -3
- package/bundle/{skill-stats-JORH5DGM.js → skill-stats-MI3RSWWL.js} +4 -4
- package/bundle/{skill-watcher-E4MGLKLS.js → skill-watcher-5L7JE6TN.js} +4 -4
- package/bundle/{sleep-36XS6MHJ.js → sleep-I4JFASCY.js} +11 -8
- package/bundle/{soul-bundle-VWAVHCZ6.js → soul-bundle-522C3IRH.js} +9 -8
- package/bundle/{spin-TI3TSVVT.js → spin-VHNGNWTD.js} +11 -11
- package/bundle/{spin-notifications-SE2HVZI7.js → spin-notifications-7NC5XZEM.js} +5 -5
- package/bundle/{spin-types-BLPYAETA.js → spin-types-C5KOQOPD.js} +7 -3
- package/bundle/{sse-parser-anthropic-A6R4Z2TB.js → sse-parser-anthropic-MMTVWHLI.js} +3 -3
- package/bundle/{sse-parser-responses-HSZY3QGJ.js → sse-parser-responses-3AOFN64C.js} +3 -3
- package/bundle/{ssrf-guard-O6SHIK6Q.js → ssrf-guard-U2JA72TC.js} +3 -3
- package/bundle/{start-7QZIWO3S.js → start-H5IUFAWF.js} +4 -2
- package/bundle/{start-7QZIWO3S.js.map → start-H5IUFAWF.js.map} +2 -2
- package/bundle/{stt-LGVPXMVR.js → stt-PSOPPBV4.js} +4 -4
- package/bundle/{system-status-JZU5FO7B.js → system-status-4LYGOFNO.js} +38 -24
- package/bundle/system-status-4LYGOFNO.js.map +7 -0
- package/bundle/{task-store-W5BFIAIH.js → task-store-MNCW42BW.js} +4 -4
- package/bundle/{telegram-adapter-H6PMFPMB.js → telegram-adapter-O6KIZDY6.js} +69 -46
- package/bundle/telegram-adapter-O6KIZDY6.js.map +7 -0
- package/bundle/{tool-registry-IZX2IOBM.js → tool-registry-JJMWCQKZ.js} +26 -24
- package/bundle/{tool-sandbox-4UC6GAKA.js → tool-sandbox-CNL6V6IH.js} +4 -4
- package/bundle/{transport-config-KBF5W2DP.js → transport-config-6MB2K2XC.js} +7 -7
- package/bundle/tribe-GDTFYJTK.js +111 -0
- package/bundle/tribe-GDTFYJTK.js.map +7 -0
- package/bundle/{update-MESYO4LO.js → update-HGQAOC5L.js} +3 -3
- package/bundle/{usage-tracker-NXD364VX.js → usage-tracker-SR4BI6ZT.js} +2 -2
- package/bundle/{user-registry-35BW4XKM.js → user-registry-4PACZJIJ.js} +4 -4
- package/bundle/wire-platform-KKPWNNNQ.js +88 -0
- package/bundle/wire-platform-KKPWNNNQ.js.map +7 -0
- package/bundle/ws-peer-client-U3NNPOK7.js +370 -0
- package/bundle/ws-peer-client-U3NNPOK7.js.map +7 -0
- package/package.json +1 -1
- package/scripts/abtars-watchdog.service +2 -1
- package/scripts/abtars-watchdog.sh +1 -5
- package/scripts/emergency-deploy.sh +2 -2
- package/scripts/emergency-update.sh +88 -41
- package/bundle/chunk-3AAENI2K.js +0 -210
- package/bundle/chunk-3AAENI2K.js.map +0 -7
- package/bundle/chunk-4MULJ5SS.js.map +0 -7
- package/bundle/chunk-4S554KLW.js +0 -105
- package/bundle/chunk-4S554KLW.js.map +0 -7
- package/bundle/chunk-5GCLBUBS.js +0 -257
- package/bundle/chunk-5GCLBUBS.js.map +0 -7
- package/bundle/chunk-BROFMHC2.js.map +0 -7
- package/bundle/chunk-EGL6UMAO.js.map +0 -7
- package/bundle/chunk-EQSG2CRM.js.map +0 -7
- package/bundle/chunk-GXL7HJPT.js.map +0 -7
- package/bundle/chunk-HKRSMUXJ.js.map +0 -7
- package/bundle/chunk-HT2BPTZY.js +0 -241
- package/bundle/chunk-HT2BPTZY.js.map +0 -7
- package/bundle/chunk-HZDLFLRP.js.map +0 -7
- package/bundle/chunk-IKUZPMVA.js +0 -82
- package/bundle/chunk-IKUZPMVA.js.map +0 -7
- package/bundle/chunk-LGP6TYFI.js.map +0 -7
- package/bundle/chunk-ONBF5DDU.js.map +0 -7
- package/bundle/chunk-RWRRGE4U.js +0 -72
- package/bundle/chunk-RWRRGE4U.js.map +0 -7
- package/bundle/chunk-SIFPBTI4.js.map +0 -7
- package/bundle/chunk-VUIX5AGB.js +0 -65
- package/bundle/chunk-VUIX5AGB.js.map +0 -7
- package/bundle/chunk-W4EA4GCA.js.map +0 -7
- package/bundle/chunk-XWRADSXO.js.map +0 -7
- package/bundle/chunk-Y76VUJSF.js +0 -75
- package/bundle/chunk-Y76VUJSF.js.map +0 -7
- package/bundle/chunk-YRU2K3O6.js.map +0 -7
- package/bundle/context-2RJHC2LE.js.map +0 -7
- package/bundle/direct-api-transport-E3LNDBJT.js.map +0 -7
- package/bundle/dns-wakeup-IDOJIXBX.js.map +0 -7
- package/bundle/heartbeat-tier3-ABWL3P7M.js.map +0 -7
- package/bundle/install-OS3CU7NF.js.map +0 -7
- package/bundle/metrics-collector-L3VPEHII.js.map +0 -7
- package/bundle/peer-client-RGEU5HOK.js.map +0 -7
- package/bundle/peer-jwt-NCCPXJRX.js +0 -18
- package/bundle/public/css/dashboard.css +0 -542
- package/bundle/public/index.html +0 -180
- package/bundle/public/js/app.js +0 -437
- package/bundle/public/memory-universe.js +0 -384
- package/bundle/stream-single-RFJNUTL6.js +0 -34
- package/bundle/stream-single-RFJNUTL6.js.map +0 -7
- package/bundle/subagent-runtime-5QUVES3W.js +0 -14
- package/bundle/system-status-JZU5FO7B.js.map +0 -7
- package/bundle/telegram-adapter-H6PMFPMB.js.map +0 -7
- package/bundle/usage-tracker-NXD364VX.js.map +0 -7
- package/bundle/user-registry-35BW4XKM.js.map +0 -7
- package/bundle/ws-peer-client-AIXCXF7V.js +0 -173
- package/bundle/ws-peer-client-AIXCXF7V.js.map +0 -7
- /package/bundle/{abmind-lazy-7Z44NODV.js.map → abmind-lazy-E3YCFKQ5.js.map} +0 -0
- /package/bundle/{acp-raw-client-E6FM45NC.js.map → acp-raw-client-UCNK3OTU.js.map} +0 -0
- /package/bundle/{action-gate-G2V47NHW.js.map → action-gate-V4FCBHFB.js.map} +0 -0
- /package/bundle/{agent-api-adapter-YAHKQMMZ.js.map → agent-api-adapter-7HEPYSIN.js.map} +0 -0
- /package/bundle/{agent-api-rate-limit-WCFXJMGY.js.map → agent-api-rate-limit-RZSAM3SW.js.map} +0 -0
- /package/bundle/{agent-registry-GI6CLT3Z.js.map → agent-registry-46A2R5KP.js.map} +0 -0
- /package/bundle/{bootstrap-X2QYIZIJ.js.map → bootstrap-MIHJJSWU.js.map} +0 -0
- /package/bundle/{bridge-lock-transport-4ZH7QTJP.js.map → bridge-lock-transport-7RSN7OLJ.js.map} +0 -0
- /package/bundle/{browser-DMARZJIN.js.map → browser-F6BCWJWW.js.map} +0 -0
- /package/bundle/{budget-45QOBDWA.js.map → budget-WUM3SPKW.js.map} +0 -0
- /package/bundle/{capability-JFWX3IQF.js.map → capability-QVRKGRFC.js.map} +0 -0
- /package/bundle/{chunk-YSKCQH6E.js.map → chunk-2IYJ4I66.js.map} +0 -0
- /package/bundle/{chunk-KTYGKPYM.js.map → chunk-2NLUT5S2.js.map} +0 -0
- /package/bundle/{chunk-OKAQICWY.js.map → chunk-3GQX34S2.js.map} +0 -0
- /package/bundle/{chunk-QROWBWLL.js.map → chunk-3XZ773BS.js.map} +0 -0
- /package/bundle/{chunk-DYBW4XXL.js.map → chunk-467SRLLR.js.map} +0 -0
- /package/bundle/{chunk-GPZNXY2U.js.map → chunk-4S3H4OK7.js.map} +0 -0
- /package/bundle/{chunk-NDCRWEEJ.js.map → chunk-4Y5MJQRE.js.map} +0 -0
- /package/bundle/{chunk-FRKW6LWB.js.map → chunk-55UWKI5C.js.map} +0 -0
- /package/bundle/{chunk-4UL3KINB.js.map → chunk-5PNJFDSW.js.map} +0 -0
- /package/bundle/{chunk-OXTSWQCX.js.map → chunk-5Y3FJ2Y7.js.map} +0 -0
- /package/bundle/{chunk-TMUYFERL.js.map → chunk-6B5ZFUPD.js.map} +0 -0
- /package/bundle/{chunk-65VCEC32.js.map → chunk-6PA5JBUU.js.map} +0 -0
- /package/bundle/{chunk-AFREM7FX.js.map → chunk-CK7YTA2F.js.map} +0 -0
- /package/bundle/{chunk-NRUSRJXR.js.map → chunk-DZJ5QZFD.js.map} +0 -0
- /package/bundle/{chunk-YRSMGJFP.js.map → chunk-E67KESEG.js.map} +0 -0
- /package/bundle/{chunk-ZV4IWKDJ.js.map → chunk-E7XD5UGB.js.map} +0 -0
- /package/bundle/{chunk-PEDX56EL.js.map → chunk-EFGBM555.js.map} +0 -0
- /package/bundle/{chunk-UPRZDU6T.js.map → chunk-IY6UKLPS.js.map} +0 -0
- /package/bundle/{chunk-EUZDKV3C.js.map → chunk-J4RUFAPK.js.map} +0 -0
- /package/bundle/{chunk-5B5B6EHL.js.map → chunk-JLWYPGWI.js.map} +0 -0
- /package/bundle/{chunk-5QUTMUIK.js.map → chunk-JXYWDAHD.js.map} +0 -0
- /package/bundle/{chunk-TEFZ4JA4.js.map → chunk-NHPLD3C7.js.map} +0 -0
- /package/bundle/{chunk-2KC5G3EA.js.map → chunk-OWUO5RS3.js.map} +0 -0
- /package/bundle/{chunk-WYHGNI56.js.map → chunk-PMD5BLFS.js.map} +0 -0
- /package/bundle/{chunk-URQPDCK5.js.map → chunk-Q66LQMMZ.js.map} +0 -0
- /package/bundle/{chunk-JQDJPUHM.js.map → chunk-TWB2ZGVH.js.map} +0 -0
- /package/bundle/{chunk-IJT4KWXT.js.map → chunk-U4U47YE7.js.map} +0 -0
- /package/bundle/{chunk-2FAZIA37.js.map → chunk-W546CU3A.js.map} +0 -0
- /package/bundle/{chunk-JNIHEDKF.js.map → chunk-XPWYDNWL.js.map} +0 -0
- /package/bundle/{chunk-EFJVUJBE.js.map → chunk-Y5FEFKGM.js.map} +0 -0
- /package/bundle/{chunk-GVM5YU5I.js.map → chunk-Z4FZPB42.js.map} +0 -0
- /package/bundle/{chunk-7BSQ5UQO.js.map → chunk-ZSIDQ66D.js.map} +0 -0
- /package/bundle/{chunk-XX6BGTPO.js.map → chunk-ZZZCJJEO.js.map} +0 -0
- /package/bundle/{commands-XYEGVUZF.js.map → commands-2ZW6CMLC.js.map} +0 -0
- /package/bundle/{config-M3P5IOAI.js.map → config-YMY5YHKN.js.map} +0 -0
- /package/bundle/{daemon-TB23FFWY.js.map → daemon-D7SU63OY.js.map} +0 -0
- /package/bundle/{delegation-tools-QKNYQGTQ.js.map → delegation-tools-WS7Z56KZ.js.map} +0 -0
- /package/bundle/{deploy-EPDWNHJU.js.map → deploy-AMTVKIMU.js.map} +0 -0
- /package/bundle/{deps-WVK553KF.js.map → deps-T63AVJKJ.js.map} +0 -0
- /package/bundle/{doctor-probes-B54JFIW3.js.map → doctor-probes-O6YI6XSZ.js.map} +0 -0
- /package/bundle/{env-schema-4JXQUOH4.js.map → env-schema-B5RB32DC.js.map} +0 -0
- /package/bundle/{gossip-3C3BSNPN.js.map → gossip-SKRCPOBS.js.map} +0 -0
- /package/bundle/{guardrails-DL7ZSWVN.js.map → guardrails-64GQ5Y5K.js.map} +0 -0
- /package/bundle/{heartbeat-system-MVTRS4GP.js.map → heartbeat-system-X4MUTKJD.js.map} +0 -0
- /package/bundle/{hook-system-M3POLUIB.js.map → hook-system-YB635OC4.js.map} +0 -0
- /package/bundle/{hotskills-FWX4QI7V.js.map → hotskills-Q75D2DK3.js.map} +0 -0
- /package/bundle/{install-manifest-5PPWMD2W.js.map → install-manifest-J7ICPCJN.js.map} +0 -0
- /package/bundle/{irc-adapter-PTTZD32W.js.map → irc-adapter-TVEV4R6H.js.map} +0 -0
- /package/bundle/{irc-config-CP7ZMUOX.js.map → irc-config-M676FOFI.js.map} +0 -0
- /package/bundle/{kanban-board-M326B2XJ.js.map → kanban-board-DLEJUCNN.js.map} +0 -0
- /package/bundle/{kanban-channel-IJ52OMNA.js.map → kanban-channel-XOLUHJZJ.js.map} +0 -0
- /package/bundle/{lazy-require-KCRVT4SI.js.map → lazy-require-JKQSALXN.js.map} +0 -0
- /package/bundle/{logger-OWCSNYCA.js.map → logger-3EGHBD4R.js.map} +0 -0
- /package/bundle/{main-chat-ZNUZCTNS.js.map → main-chat-3H63REKK.js.map} +0 -0
- /package/bundle/{master-user-HSKM4ZFN.js.map → master-user-MUBUP3KD.js.map} +0 -0
- /package/bundle/{media-utils-3ZYOD7SK.js.map → media-utils-HUUIALAJ.js.map} +0 -0
- /package/bundle/{message-pipeline-P5GAQU4Z.js.map → message-pipeline-GRDRWONR.js.map} +0 -0
- /package/bundle/{model-health-registry-MLEIZSTV.js.map → model-health-registry-QADMFQFQ.js.map} +0 -0
- /package/bundle/{nerve-IGSXBKZZ.js.map → nerve-QPAEBRKX.js.map} +0 -0
- /package/bundle/{notification-BFSIEECG.js.map → notification-3JICGXWU.js.map} +0 -0
- /package/bundle/{openrouter-credits-NTVZDRYM.js.map → openrouter-credits-7NEIPYJN.js.map} +0 -0
- /package/bundle/{orc-tools-4CHEFWSN.js.map → orc-tools-UZVPONKY.js.map} +0 -0
- /package/bundle/{peer-auth-QC4EF2PM.js.map → peer-auth-RI43DKJE.js.map} +0 -0
- /package/bundle/{peer-config-TN55LFDC.js.map → peer-config-URM7DCW6.js.map} +0 -0
- /package/bundle/{peer-jwt-NCCPXJRX.js.map → peer-transport-SI7I72DB.js.map} +0 -0
- /package/bundle/{peer-transport-I6JPLFZ2.js.map → phase-transport-ESWWACZI.js.map} +0 -0
- /package/bundle/{phase-transport-PGKU2KD4.js.map → reconcile-GFDQYNBD.js.map} +0 -0
- /package/bundle/{reconciler-EBKH3JNU.js.map → reconciler-IEUJXJN2.js.map} +0 -0
- /package/bundle/{restore-IFHPI7I7.js.map → restore-FARTGLQQ.js.map} +0 -0
- /package/bundle/{reconcile-CTFCLQRN.js.map → rollback-GEWPZABG.js.map} +0 -0
- /package/bundle/{sandbox-runtime-QROWHDCS.js.map → sandbox-runtime-DV6E25J6.js.map} +0 -0
- /package/bundle/{self-healer-utils-IFAYOQO2.js.map → self-healer-utils-P4SKNNEM.js.map} +0 -0
- /package/bundle/{rollback-ANRI3T5Z.js.map → sha-tracker-77SHLYNY.js.map} +0 -0
- /package/bundle/{skill-session-BMSRQSHV.js.map → skill-session-5HSMXY54.js.map} +0 -0
- /package/bundle/{sha-tracker-ZWBP6CIJ.js.map → skill-stats-MI3RSWWL.js.map} +0 -0
- /package/bundle/{skill-stats-JORH5DGM.js.map → skill-watcher-5L7JE6TN.js.map} +0 -0
- /package/bundle/{skill-watcher-E4MGLKLS.js.map → sleep-I4JFASCY.js.map} +0 -0
- /package/bundle/{sleep-36XS6MHJ.js.map → soul-bundle-522C3IRH.js.map} +0 -0
- /package/bundle/{soul-bundle-VWAVHCZ6.js.map → spin-VHNGNWTD.js.map} +0 -0
- /package/bundle/{spin-notifications-SE2HVZI7.js.map → spin-notifications-7NC5XZEM.js.map} +0 -0
- /package/bundle/{spin-TI3TSVVT.js.map → spin-types-C5KOQOPD.js.map} +0 -0
- /package/bundle/{sse-parser-anthropic-A6R4Z2TB.js.map → sse-parser-anthropic-MMTVWHLI.js.map} +0 -0
- /package/bundle/{sse-parser-responses-HSZY3QGJ.js.map → sse-parser-responses-3AOFN64C.js.map} +0 -0
- /package/bundle/{ssrf-guard-O6SHIK6Q.js.map → ssrf-guard-U2JA72TC.js.map} +0 -0
- /package/bundle/{spin-types-BLPYAETA.js.map → stt-PSOPPBV4.js.map} +0 -0
- /package/bundle/{stt-LGVPXMVR.js.map → task-store-MNCW42BW.js.map} +0 -0
- /package/bundle/{subagent-runtime-5QUVES3W.js.map → tool-registry-JJMWCQKZ.js.map} +0 -0
- /package/bundle/{task-store-W5BFIAIH.js.map → tool-sandbox-CNL6V6IH.js.map} +0 -0
- /package/bundle/{tool-registry-IZX2IOBM.js.map → transport-config-6MB2K2XC.js.map} +0 -0
- /package/bundle/{tool-sandbox-4UC6GAKA.js.map → update-HGQAOC5L.js.map} +0 -0
- /package/bundle/{transport-config-KBF5W2DP.js.map → usage-tracker-SR4BI6ZT.js.map} +0 -0
- /package/bundle/{update-MESYO4LO.js.map → user-registry-4PACZJIJ.js.map} +0 -0
|
@@ -3,29 +3,35 @@
|
|
|
3
3
|
import {
|
|
4
4
|
readEnv,
|
|
5
5
|
readEnvWithDefault
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-E67KESEG.js";
|
|
7
7
|
import {
|
|
8
8
|
abmind
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YJZE4OK3.js";
|
|
10
10
|
import {
|
|
11
11
|
init_bridge_lock_transport,
|
|
12
12
|
readAndClearForceSleep,
|
|
13
13
|
writeSleepStatus
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-KOSFXW2S.js";
|
|
15
|
+
import {
|
|
16
|
+
init_kanban_board,
|
|
17
|
+
kanbanComplete,
|
|
18
|
+
kanbanEnqueue,
|
|
19
|
+
kanbanUpdate
|
|
20
|
+
} from "./chunk-FGYDIX54.js";
|
|
15
21
|
import {
|
|
16
22
|
getEnv,
|
|
17
23
|
init_env_schema
|
|
18
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-6PA5JBUU.js";
|
|
19
25
|
import {
|
|
20
26
|
init_log_and_swallow,
|
|
21
27
|
logAndSwallow
|
|
22
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-2IYJ4I66.js";
|
|
23
29
|
import {
|
|
24
30
|
init_logger,
|
|
25
31
|
logDebug,
|
|
26
32
|
logInfo,
|
|
27
33
|
logWarn
|
|
28
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-XRTXYN66.js";
|
|
29
35
|
import {
|
|
30
36
|
__export
|
|
31
37
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -43,6 +49,70 @@ import { execSync } from "node:child_process";
|
|
|
43
49
|
import { join } from "node:path";
|
|
44
50
|
import { existsSync, readFileSync } from "node:fs";
|
|
45
51
|
init_logger();
|
|
52
|
+
|
|
53
|
+
// src/capabilities/sleep/sleep-card.ts
|
|
54
|
+
init_kanban_board();
|
|
55
|
+
init_log_and_swallow();
|
|
56
|
+
var MARK = {
|
|
57
|
+
pending: "[ ]",
|
|
58
|
+
running: "[~]",
|
|
59
|
+
done: "[x]",
|
|
60
|
+
skipped: "[skip]",
|
|
61
|
+
failed: "[fail]"
|
|
62
|
+
};
|
|
63
|
+
var TAG = "sleep-card";
|
|
64
|
+
function renderChecklist(items) {
|
|
65
|
+
return items.map((item) => `${MARK[item.status]} ${item.name}`).join("\n");
|
|
66
|
+
}
|
|
67
|
+
function startSleepCard() {
|
|
68
|
+
let cardId = 0;
|
|
69
|
+
let items = [];
|
|
70
|
+
let completed = false;
|
|
71
|
+
try {
|
|
72
|
+
const steps = abmind()?.loadSleepSteps() ?? [];
|
|
73
|
+
items = steps.map((step) => ({ name: step.name, filename: step.filename, status: "pending" }));
|
|
74
|
+
if (items.length > 0) {
|
|
75
|
+
const dateStr = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
76
|
+
cardId = kanbanEnqueue(`Sleep ${dateStr}`, "scheduled", void 0, {
|
|
77
|
+
type: "D",
|
|
78
|
+
deliveryMode: "silent",
|
|
79
|
+
notes: renderChecklist(items)
|
|
80
|
+
});
|
|
81
|
+
if (cardId) kanbanUpdate(cardId, { status: "running" });
|
|
82
|
+
}
|
|
83
|
+
} catch (err) {
|
|
84
|
+
logAndSwallow(TAG, "start", err);
|
|
85
|
+
cardId = 0;
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
onStep(event) {
|
|
89
|
+
if (!cardId) return;
|
|
90
|
+
const item = items.find((i) => i.name === event.name);
|
|
91
|
+
if (!item) return;
|
|
92
|
+
item.status = event.phase === "start" ? "running" : event.phase;
|
|
93
|
+
try {
|
|
94
|
+
kanbanUpdate(cardId, { notes: renderChecklist(items) });
|
|
95
|
+
} catch (err) {
|
|
96
|
+
logAndSwallow(TAG, "tick", err);
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
complete() {
|
|
100
|
+
if (!cardId || completed) return;
|
|
101
|
+
completed = true;
|
|
102
|
+
const done = items.filter((i) => i.status === "done").length;
|
|
103
|
+
const skipped = items.filter((i) => i.status === "skipped").length;
|
|
104
|
+
const failed = items.filter((i) => i.status === "failed").length;
|
|
105
|
+
const summary = `Sleep complete \u2014 ${done} done, ${skipped} skipped, ${failed} failed (of ${items.length})`;
|
|
106
|
+
try {
|
|
107
|
+
kanbanComplete(cardId, null, summary);
|
|
108
|
+
} catch (err) {
|
|
109
|
+
logAndSwallow(TAG, "complete", err);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// src/capabilities/sleep/index.ts
|
|
46
116
|
var MAX_RETRIES = 3;
|
|
47
117
|
var RETRY_MS = 5 * 60 * 1e3;
|
|
48
118
|
function createSleepHandle(opts) {
|
|
@@ -100,6 +170,10 @@ function createSleepHandle(opts) {
|
|
|
100
170
|
if (running) return;
|
|
101
171
|
attempts++;
|
|
102
172
|
progress = null;
|
|
173
|
+
if (opts.allocateSleepSession) {
|
|
174
|
+
const dateStr = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
175
|
+
opts.allocateSleepSession(`Sleep ${dateStr}`);
|
|
176
|
+
}
|
|
103
177
|
running = true;
|
|
104
178
|
writeSleepStatus("sleeping");
|
|
105
179
|
logInfo("sleep", `\u{1F634} Sleep started in-process (attempt ${attempts}, model=dreamy)`);
|
|
@@ -114,9 +188,21 @@ function createSleepHandle(opts) {
|
|
|
114
188
|
return abmind().DEFAULT_LEVEL;
|
|
115
189
|
}
|
|
116
190
|
})();
|
|
117
|
-
|
|
191
|
+
let sleepCard = null;
|
|
192
|
+
abmind().runSleepCycle({
|
|
193
|
+
runtime: opts.runtime,
|
|
194
|
+
level,
|
|
195
|
+
fresh: forced && !!forceSleep?.includes("fresh"),
|
|
196
|
+
// #895: stepped card — created when the orchestrator commits to running steps,
|
|
197
|
+
// ticked per step, completed once at cycle end (both success and failure paths).
|
|
198
|
+
onCycleStart: () => {
|
|
199
|
+
sleepCard = startSleepCard();
|
|
200
|
+
},
|
|
201
|
+
onStep: (e) => sleepCard?.onStep(e)
|
|
202
|
+
}).then(async (result) => {
|
|
118
203
|
running = false;
|
|
119
204
|
progress = null;
|
|
205
|
+
sleepCard?.complete();
|
|
120
206
|
logInfo("sleep", `\u{1F634} Sleep finished (ok=${result.ok}, failCount=${result.failCount}, attempt ${attempts})`);
|
|
121
207
|
writeSleepStatus("awake");
|
|
122
208
|
if (!result.ok) {
|
|
@@ -146,6 +232,7 @@ function createSleepHandle(opts) {
|
|
|
146
232
|
}).catch((err) => {
|
|
147
233
|
running = false;
|
|
148
234
|
progress = null;
|
|
235
|
+
sleepCard?.complete();
|
|
149
236
|
writeSleepStatus("awake");
|
|
150
237
|
const msg = err instanceof Error ? err.message : String(err);
|
|
151
238
|
if (attempts < MAX_RETRIES) {
|
|
@@ -154,6 +241,8 @@ function createSleepHandle(opts) {
|
|
|
154
241
|
} else {
|
|
155
242
|
logWarn("sleep", `\u{1F634} Sleep threw \u2014 exhausted ${MAX_RETRIES} attempts: ${msg}`);
|
|
156
243
|
}
|
|
244
|
+
}).finally(() => {
|
|
245
|
+
opts.onCycleEnd?.();
|
|
157
246
|
});
|
|
158
247
|
}
|
|
159
248
|
function checkHwSleep() {
|
|
@@ -235,4 +324,4 @@ export {
|
|
|
235
324
|
register,
|
|
236
325
|
sleep_exports
|
|
237
326
|
};
|
|
238
|
-
//# sourceMappingURL=chunk-
|
|
327
|
+
//# sourceMappingURL=chunk-4AILRHUI.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/capabilities/sleep/index.ts", "../src/capabilities/sleep/sleep-card.ts"],
|
|
4
|
+
"sourcesContent": ["import { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport { getEnv } from \"../../components/env-schema.js\";\nimport type { CapabilityApi } from \"../capability.js\";\n/**\n * Sleep capability \u2014 spawn nightly sleep cycle via tick system.\n * One path: BED_TIME + quiet ticks \u2192 Dreamy \u2192 quiet ticks \u2192 hardware sleep.\n * Parses PROGRESS:<pct>:<label> from stdout for visibility.\n */\n\nimport { execSync } from \"node:child_process\";\nimport { writeSleepStatus, readAndClearForceSleep } from \"../../components/transport/bridge-lock-transport.js\";\nimport { join } from \"node:path\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { Level } from \"abmind\";\nimport { abmind } from \"../../utils/abmind-lazy.js\";\nimport type { SleepRuntime } from \"abmind\";\nimport { logInfo, logWarn, logDebug } from \"../../components/logger.js\";\nimport { readEnv, readEnvWithDefault } from \"../../components/env.js\";\nimport { startSleepCard, type SleepCard } from \"./sleep-card.js\";\n\nexport interface SleepOpts {\n sleepHour: number;\n sleepAuditDir: string;\n memoryEnabled: boolean;\n memoryDir?: string;\n /** LLM runtime adapter \u2014 bridge wraps spin({ type: \"D\", ... }) (#1271). */\n runtime: SleepRuntime;\n onComplete: () => void;\n /** Always called once per cycle at the end \u2014 success, partial-failure, or throw.\n * Tears down the night Dreamy session (#1287). Distinct from onComplete, which\n * runs the memory reset only on the success path. Optional \u2014 sleep works without it. */\n onCycleEnd?: () => void;\n getLastMsgTs?: () => number;\n sendSystemMessage?: (prompt: string) => Promise<void>;\n killWakeInhibit?: () => void;\n /** Allocate a named Dreamy session upfront at sleep start (#1280).\n * Called before the first runtime.complete() so the session appears in /session\n * for the full duration of the cycle. Optional \u2014 sleep still works without it. */\n allocateSleepSession?: (name: string) => void;\n}\n\nexport interface SleepProgress {\n percent: number;\n step: string;\n}\n\nexport interface SleepHandle {\n /** True while a sleep cycle is running in-process. */\n readonly isActive: boolean;\n readonly progress: SleepProgress | null;\n readonly awaitingHwSleep: boolean;\n spawn(): void;\n /** Called by tick system to check if hardware sleep should fire. */\n checkHwSleep(): void;\n /** Force-clear isActive if no progress in 30min (#990). */\n checkStale(): void;\n}\n\nconst MAX_RETRIES = 3;\nconst RETRY_MS = 5 * 60 * 1000;\n\nexport function createSleepHandle(opts: SleepOpts): SleepHandle {\n let running = false;\n let attempts = 0;\n let progress: SleepProgress | null = null;\n let _awaitingHwSleep = false;\n // Post-Dreamy hw-sleep quiet-tick tracking (internal to this closure \u2014 decoupled from\n // daily-cycle.quietTickCount which freezes once hasSleepAuditToday returns true).\n // Both reset when _awaitingHwSleep flips to true (see the onComplete handler below).\n let postSleepQuietTicks = 0;\n let lastMsgTsSeenByHwCheck = 0;\n\n function buildDreamReport(): string {\n let dreamReport = \"Dreamy finished nightly maintenance.\";\n try {\n const sleepDir = join(opts.memoryDir ?? \"\", \"sleep\");\n const dateStr = new Date().toISOString().slice(0, 10).replace(/-/g, \"\");\n const lockPath = join(sleepDir, `sleep_${dateStr}.lock`);\n if (existsSync(lockPath)) {\n const lockData = JSON.parse(readFileSync(lockPath, \"utf-8\")) as { steps: Record<string, { status: string }>; llmCalls?: number };\n const ok = Object.entries(lockData.steps).filter(([, s]) => s.status === \"ok\").map(([k]) => k);\n const skipped = Object.entries(lockData.steps).filter(([, s]) => s.status === \"skipped\").map(([k]) => k);\n const failed = Object.entries(lockData.steps).filter(([, s]) => s.status === \"failed\" || s.status === \"timeout\").map(([k]) => k);\n dreamReport = `Dreamy finished nightly maintenance (${lockData.llmCalls ?? \"?\"} LLM calls). Completed: ${ok.join(\", \") || \"none\"}.`;\n if (skipped.length > 0) dreamReport += ` Skipped: ${skipped.join(\", \")}.`;\n if (failed.length > 0) dreamReport += ` \u26A0\uFE0F FAILED: ${failed.join(\", \")}. Please review.`;\n }\n } catch (err) { logAndSwallow(\"index\", \"op\", err); }\n return dreamReport;\n }\n\n function spawnSleep(): void {\n const forceSleep = readAndClearForceSleep();\n const forced = forceSleep !== null;\n if (forced) {\n logInfo(\"sleep\", `\u26A1 forceSleep=${forceSleep} \u2014 bypassing time-window + audit-today guards`);\n }\n\n if (!forced) {\n const hour = new Date().getHours();\n const WAKE_HOUR = parseInt(readEnvWithDefault(\"WAKE_TIME\", \"7\", \"wake hour\").split(\":\")[0] ?? \"7\", 10);\n if (opts.sleepHour <= WAKE_HOUR) {\n if (hour < opts.sleepHour || hour >= WAKE_HOUR) {\n logDebug(\"sleep\", `\uD83D\uDE34 Outside sleep window (${opts.sleepHour}:00-${WAKE_HOUR}:00) \u2014 skip`);\n return;\n }\n } else {\n if (hour < opts.sleepHour && hour >= WAKE_HOUR) {\n logDebug(\"sleep\", `\uD83D\uDE34 Outside sleep window (${opts.sleepHour}:00-${WAKE_HOUR}:00) \u2014 skip`);\n return;\n }\n }\n if (abmind()?.hasSleepAuditToday(opts.sleepAuditDir)) {\n logDebug(\"sleep\", \"\uD83D\uDE34 Sleep already done today \u2014 skip\");\n return;\n }\n }\n if (running) return;\n attempts++;\n progress = null;\n // Allocate the Dreamy session upfront so it appears in /session for the full cycle (#1280).\n if (opts.allocateSleepSession) {\n const dateStr = new Date().toISOString().slice(0, 10);\n opts.allocateSleepSession(`Sleep ${dateStr}`);\n }\n running = true;\n writeSleepStatus(\"sleeping\");\n logInfo(\"sleep\", `\uD83D\uDE34 Sleep started in-process (attempt ${attempts}, model=dreamy)`);\n\n const level = (() => {\n if (forced && forceSleep?.includes(\"fresh\")) return \"ultimate\" as Level;\n const raw = getEnv().sleepQuality;\n if (!raw) return abmind()!.DEFAULT_LEVEL;\n try { return abmind()!.parseLevel(raw); }\n catch (err) { logWarn(\"sleep\", `Invalid SLEEP_QUALITY='${raw}', using ${abmind()!.DEFAULT_LEVEL}: ${err instanceof Error ? err.message : String(err)}`); return abmind()!.DEFAULT_LEVEL; }\n })();\n\n let sleepCard: SleepCard | null = null;\n abmind()!.runSleepCycle({\n runtime: opts.runtime,\n level,\n fresh: forced && !!forceSleep?.includes(\"fresh\"),\n // #895: stepped card \u2014 created when the orchestrator commits to running steps,\n // ticked per step, completed once at cycle end (both success and failure paths).\n onCycleStart: () => { sleepCard = startSleepCard(); },\n onStep: (e) => sleepCard?.onStep(e),\n })\n .then(async (result: { ok: boolean; failCount: number }) => {\n running = false;\n progress = null;\n sleepCard?.complete();\n logInfo(\"sleep\", `\uD83D\uDE34 Sleep finished (ok=${result.ok}, failCount=${result.failCount}, attempt ${attempts})`);\n writeSleepStatus(\"awake\");\n if (!result.ok) {\n if (attempts < MAX_RETRIES) {\n logWarn(\"sleep\", `\uD83D\uDE34 Sleep had ${result.failCount} failures (attempt ${attempts}/${MAX_RETRIES}) \u2014 retry in 5min`);\n setTimeout(spawnSleep, RETRY_MS);\n } else {\n logWarn(\"sleep\", `\uD83D\uDE34 Sleep failures persist \u2014 exhausted ${MAX_RETRIES} attempts`);\n }\n return;\n }\n\n if (opts.memoryEnabled) opts.onComplete();\n\n // Force-sleep runs are explicit test/verify triggers \u2014 skip hw-sleep even if env enabled.\n const hwEnabled = !forced && readEnv(\"HARDWARE_SLEEP_AFTER_DREAMY\", \"hardware sleep after Dreamy disabled\") === \"true\";\n const quietTicks = Math.ceil(getEnv().bedQuietMin * 60 / parseInt(readEnvWithDefault(\"HEARTBEAT_INTERVAL_SEC\", \"60\", \"hb\"), 10));\n const hbInterval = parseInt(readEnvWithDefault(\"HEARTBEAT_INTERVAL_SEC\", \"60\", \"heartbeat tick interval\"), 10);\n const hwSleepMin = Math.round(quietTicks * hbInterval / 60);\n\n const dreamReport = buildDreamReport();\n const sleepNote = hwEnabled ? ` Hardware sleep in ~${hwSleepMin} minutes if no activity.` : \"\";\n\n // #844: buffer silently \u2014 don't trigger model response\n const { bufferSystemEvent } = await import(\"../../components/system-event-buffer.js\");\n bufferSystemEvent(`${dreamReport}${sleepNote}`);\n\n if (hwEnabled) {\n _awaitingHwSleep = true;\n // Reset hw-check counters \u2014 prevents stale state from a prior cycle (crash, force-sleep\n // re-run) from poisoning this one, and avoids burning the first tick on a spurious\n // reset when the very first checkHwSleep() sees currentMsgTs > 0.\n postSleepQuietTicks = 0;\n lastMsgTsSeenByHwCheck = opts.getLastMsgTs?.() ?? 0;\n logInfo(\"sleep\", `\uD83D\uDCA4 Awaiting hardware sleep \u2014 ${quietTicks} quiet ticks (${hwSleepMin} min) required`);\n }\n })\n .catch((err: unknown) => {\n running = false;\n progress = null;\n sleepCard?.complete();\n writeSleepStatus(\"awake\");\n const msg = err instanceof Error ? err.message : String(err);\n if (attempts < MAX_RETRIES) {\n logWarn(\"sleep\", `\uD83D\uDE34 Sleep threw (attempt ${attempts}/${MAX_RETRIES}): ${msg} \u2014 retry in 5min`);\n setTimeout(spawnSleep, RETRY_MS);\n } else {\n logWarn(\"sleep\", `\uD83D\uDE34 Sleep threw \u2014 exhausted ${MAX_RETRIES} attempts: ${msg}`);\n }\n })\n .finally(() => {\n // #1287: tear down the night Dreamy session on EVERY cycle outcome (success,\n // partial-failure, throw). Retry (if any) re-allocates a fresh D via\n // allocateSleepSession, so no Dreamy session accumulates.\n opts.onCycleEnd?.();\n });\n }\n\n function checkHwSleep(): void {\n if (!_awaitingHwSleep) return;\n\n // Sleep-window cutoff \u2014 give up if we've crossed out of the window. Next night retries.\n // Mirrors spawnSleep()'s window logic for consistency.\n const WAKE_HOUR = parseInt(readEnvWithDefault(\"WAKE_TIME\", \"7\", \"wake hour\").split(\":\")[0] ?? \"7\", 10);\n const BED_HOUR = opts.sleepHour;\n const hour = new Date().getHours();\n const inSleepWindow = (BED_HOUR < WAKE_HOUR)\n ? (hour >= BED_HOUR && hour < WAKE_HOUR) // normal: BED=00:30, WAKE=07:00 \u2192 sleep 00-06\n : (hour >= BED_HOUR || hour < WAKE_HOUR); // overnight: BED=23:00, WAKE=07:00 \u2192 sleep 23-06\n if (!inSleepWindow) {\n logInfo(\"sleep\", `\u23F0 Past sleep window (now ${hour}:00, window ${BED_HOUR}:00-${WAKE_HOUR}:00) \u2014 abandoning hw-sleep attempt`);\n _awaitingHwSleep = false;\n postSleepQuietTicks = 0;\n return;\n }\n\n // User messaged since last check \u2014 postpone and reset\n const currentMsgTs = opts.getLastMsgTs?.() ?? 0;\n if (currentMsgTs > lastMsgTsSeenByHwCheck) {\n lastMsgTsSeenByHwCheck = currentMsgTs;\n postSleepQuietTicks = 0;\n logInfo(\"sleep\", \"\uD83D\uDCA4 Hardware sleep postponed \u2014 user messaged (will retry after quiet period)\");\n return;\n }\n\n // Quiet tick \u2014 increment\n const requiredTicks = Math.ceil(getEnv().bedQuietMin * 60 / parseInt(process.env[\"HEARTBEAT_INTERVAL_SEC\"] ?? \"60\", 10));\n postSleepQuietTicks++;\n if (postSleepQuietTicks < requiredTicks) return;\n\n // Threshold reached \u2014 sleep\n _awaitingHwSleep = false;\n postSleepQuietTicks = 0;\n // Kill any wake inhibitor from /wakeup before sleeping\n opts.killWakeInhibit?.();\n const sleepCmd = process.platform === \"darwin\" ? \"pmset sleepnow\" : \"systemctl suspend\";\n logInfo(\"sleep\", `\uD83D\uDCA4 Putting hardware to sleep (${sleepCmd})...`);\n writeSleepStatus(\"hw_sleep\");\n try { execSync(sleepCmd, { timeout: 5000 }); }\n catch (err) {\n writeSleepStatus(\"awake\"); // recover \u2014 don't leave \"hw_sleep\" if pmset failed\n logWarn(\"sleep\", `\uD83D\uDCA4 Hardware sleep failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n function checkStale(): void {\n if (!running) return;\n const STALE_MS = 30 * 60_000;\n try {\n const dateStr = new Date().toISOString().slice(0, 10).replace(/-/g, \"\");\n const lockPath = join(opts.sleepAuditDir, `sleep_${dateStr}.lock`);\n if (!existsSync(lockPath)) { running = false; logWarn(\"sleep\", \"Sleep stuck \u2014 no lock file, force-clearing isActive\"); return; }\n const lock = JSON.parse(readFileSync(lockPath, \"utf-8\")) as { startedAt?: number; steps?: Record<string, { duration?: number }> };\n const stepTimes = Object.values(lock.steps ?? {}).map(s => (s as any).startedAt ?? (s as any).completedAt ?? 0).filter(Boolean);\n const lastActivity = Math.max(lock.startedAt ?? 0, ...stepTimes);\n if (lastActivity > 0 && Date.now() - lastActivity > STALE_MS) {\n running = false;\n logWarn(\"sleep\", `Sleep stuck \u2014 no progress in 30min (last activity ${Math.round((Date.now() - lastActivity) / 60_000)}min ago), force-clearing isActive`);\n }\n } catch { /* lock file unreadable \u2014 leave running as-is, next tick retries */ }\n }\n\n return {\n get isActive() { return running; },\n get progress() { return progress; },\n get awaitingHwSleep() { return _awaitingHwSleep; },\n spawn: spawnSleep,\n checkHwSleep,\n checkStale,\n };\n}\n\n/** Capability registration \u2014 called by discoverCapabilities(). */\nexport function register(_api: CapabilityApi): void {\n // Sleep registration is a no-op here \u2014 the actual SleepHandle is created\n // in phase-sleep.ts because it needs ctx.sendSystemMessage + memory deps\n // that aren't available at capability discovery time.\n // This manifest exists so sleep appears in discoverCapabilities() and\n // can be disabled via DISABLED_CAPABILITIES=sleep.\n}\n", "/**\n * sleep-card.ts \u2014 stepped kanban card for a nightly sleep cycle (#895).\n *\n * Display-only. One card per cycle whose notes render a checklist that ticks as\n * abmind fires onStep events. The card is created in \"running\" status (NOT\n * \"queued\") on purpose: a queued D-type card would be picked up by\n * spin.drainQueued() and dispatched as a spurious Dreamy worker. A parentless\n * \"running\" card is inert \u2014 drainQueued only scans \"queued\", and the reconciler\n * only touches children of running O-projects.\n *\n * All kanban writes are best-effort: a display failure must never break the\n * sleep cycle.\n */\n\nimport type { SleepStepEvent } from \"abmind\";\nimport { kanbanEnqueue, kanbanUpdate, kanbanComplete } from \"../../components/tasks/kanban-board.js\";\nimport { abmind } from \"../../utils/abmind-lazy.js\";\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\n\ntype StepStatus = \"pending\" | \"running\" | \"done\" | \"skipped\" | \"failed\";\n\ninterface StepItem {\n name: string;\n filename: string;\n status: StepStatus;\n}\n\nconst MARK: Record<StepStatus, string> = {\n pending: \"[ ]\",\n running: \"[~]\",\n done: \"[x]\",\n skipped: \"[skip]\",\n failed: \"[fail]\",\n};\n\nconst TAG = \"sleep-card\";\n\nexport interface SleepCard {\n /** Flip the matching checklist item and re-render the card notes. */\n onStep(event: SleepStepEvent): void;\n /** Mark the card done once at cycle end (success or failure). Idempotent. */\n complete(): void;\n}\n\nfunction renderChecklist(items: readonly StepItem[]): string {\n return items.map(item => `${MARK[item.status]} ${item.name}`).join(\"\\n\");\n}\n\n/**\n * Create the stepped card for a cycle. Reads the step manifest from abmind so\n * the checklist mirrors loadSleepSteps() (name + order). Returns a no-op card if\n * abmind or the manifest is unavailable \u2014 sleep still runs.\n */\nexport function startSleepCard(): SleepCard {\n let cardId = 0;\n let items: StepItem[] = [];\n let completed = false;\n\n try {\n const steps = abmind()?.loadSleepSteps() ?? [];\n items = steps.map(step => ({ name: step.name, filename: step.filename, status: \"pending\" as StepStatus }));\n if (items.length > 0) {\n const dateStr = new Date().toISOString().slice(0, 10);\n cardId = kanbanEnqueue(`Sleep ${dateStr}`, \"scheduled\", undefined, {\n type: \"D\",\n deliveryMode: \"silent\",\n notes: renderChecklist(items),\n });\n // Move out of \"queued\" immediately so drainQueued() never dispatches it.\n if (cardId) kanbanUpdate(cardId, { status: \"running\" });\n }\n } catch (err) {\n logAndSwallow(TAG, \"start\", err);\n cardId = 0;\n }\n\n return {\n onStep(event: SleepStepEvent): void {\n if (!cardId) return;\n const item = items.find(i => i.name === event.name);\n if (!item) return;\n item.status = event.phase === \"start\" ? \"running\" : event.phase;\n try {\n kanbanUpdate(cardId, { notes: renderChecklist(items) });\n } catch (err) {\n logAndSwallow(TAG, \"tick\", err);\n }\n },\n\n complete(): void {\n if (!cardId || completed) return;\n completed = true;\n const done = items.filter(i => i.status === \"done\").length;\n const skipped = items.filter(i => i.status === \"skipped\").length;\n const failed = items.filter(i => i.status === \"failed\").length;\n const summary = `Sleep complete \u2014 ${done} done, ${skipped} skipped, ${failed} failed (of ${items.length})`;\n try {\n kanbanComplete(cardId, null, summary);\n } catch (err) {\n logAndSwallow(TAG, \"complete\", err);\n }\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
init_log_and_swallow,
|
|
8
8
|
logAndSwallow
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2IYJ4I66.js";
|
|
10
10
|
import {
|
|
11
11
|
abtarsHome,
|
|
12
12
|
init_paths
|
|
@@ -66,11 +66,11 @@ async function restart(opts) {
|
|
|
66
66
|
(await import("node:fs")).writeFileSync(join(home, "deploy.state"), JSON.stringify(s) + "\n");
|
|
67
67
|
} catch {
|
|
68
68
|
}
|
|
69
|
-
const { start } = await import("./start-
|
|
69
|
+
const { start } = await import("./start-H5IUFAWF.js");
|
|
70
70
|
return start();
|
|
71
71
|
}
|
|
72
72
|
if (bridgeAlive) {
|
|
73
|
-
const { writeRestartRequested } = await import("./bridge-lock-transport-
|
|
73
|
+
const { writeRestartRequested } = await import("./bridge-lock-transport-7RSN7OLJ.js");
|
|
74
74
|
writeRestartRequested("restart");
|
|
75
75
|
process.stdout.write(`\u267B\uFE0F Restart requested (PID ${bridgePid}) \u2014 bridge will restart within 30s
|
|
76
76
|
`);
|
|
@@ -83,4 +83,4 @@ async function restart(opts) {
|
|
|
83
83
|
export {
|
|
84
84
|
restart
|
|
85
85
|
};
|
|
86
|
-
//# sourceMappingURL=chunk-
|
|
86
|
+
//# sourceMappingURL=chunk-4S3H4OK7.js.map
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
3
|
import {
|
|
4
4
|
readEnv
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-E67KESEG.js";
|
|
6
6
|
import {
|
|
7
7
|
init_user_registry,
|
|
8
8
|
loadUsers
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-E7XD5UGB.js";
|
|
10
10
|
import {
|
|
11
11
|
getEnv,
|
|
12
12
|
init_env_schema
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-6PA5JBUU.js";
|
|
14
14
|
import {
|
|
15
15
|
init_logger,
|
|
16
16
|
logError,
|
|
17
17
|
logWarn
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-XRTXYN66.js";
|
|
19
19
|
import {
|
|
20
20
|
init_paths
|
|
21
21
|
} from "./chunk-GALQBVKO.js";
|
|
@@ -90,7 +90,7 @@ async function validateCliPath(cliPath) {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
async function loadAndValidateConfig() {
|
|
93
|
-
const { loadTransport, validateAtStartup } = await import("./transport-config-
|
|
93
|
+
const { loadTransport, validateAtStartup } = await import("./transport-config-6MB2K2XC.js");
|
|
94
94
|
const tc = loadTransport();
|
|
95
95
|
if (tc) {
|
|
96
96
|
validateAtStartup();
|
|
@@ -213,4 +213,4 @@ export {
|
|
|
213
213
|
isValidSnowflake,
|
|
214
214
|
loadAndValidateConfig
|
|
215
215
|
};
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
216
|
+
//# sourceMappingURL=chunk-4Y5MJQRE.js.map
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
getEnv,
|
|
8
8
|
init_env_schema
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6PA5JBUU.js";
|
|
10
10
|
import {
|
|
11
11
|
init_logger,
|
|
12
12
|
logError,
|
|
13
13
|
logWarn
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-XRTXYN66.js";
|
|
15
15
|
|
|
16
16
|
// src/components/main-chat.ts
|
|
17
17
|
init_env_schema();
|
|
@@ -40,4 +40,4 @@ async function sendToMainChat(adapters, text, opts) {
|
|
|
40
40
|
export {
|
|
41
41
|
sendToMainChat
|
|
42
42
|
};
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
43
|
+
//# sourceMappingURL=chunk-55UWKI5C.js.map
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
-
import {
|
|
4
|
-
addCompletion
|
|
5
|
-
} from "./chunk-MV6CJFWR.js";
|
|
6
3
|
import {
|
|
7
4
|
init_spin,
|
|
8
5
|
spin
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-L72RIPEC.js";
|
|
7
|
+
import {
|
|
8
|
+
addCompletion
|
|
9
|
+
} from "./chunk-MV6CJFWR.js";
|
|
10
10
|
import {
|
|
11
11
|
getEnv,
|
|
12
12
|
init_env_schema
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-6PA5JBUU.js";
|
|
14
14
|
import {
|
|
15
15
|
init_logger,
|
|
16
16
|
logInfo,
|
|
17
17
|
logWarn
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-XRTXYN66.js";
|
|
19
19
|
|
|
20
20
|
// src/components/transport/delegation-tools.ts
|
|
21
21
|
init_spin();
|
|
@@ -56,7 +56,7 @@ var spawnSessionTool = {
|
|
|
56
56
|
if (running.length >= MAX_BACKGROUND) {
|
|
57
57
|
return JSON.stringify({ error: `Max ${MAX_BACKGROUND} concurrent background sessions. Wait for one to finish or terminate it.` });
|
|
58
58
|
}
|
|
59
|
-
const masterUid = (await import("./master-user-
|
|
59
|
+
const masterUid = (await import("./master-user-MUBUP3KD.js")).getMasterUserId();
|
|
60
60
|
const session = spin.createSubSession(masterUid, "telegram", typeInfo.sessionType);
|
|
61
61
|
if (typeof session === "string") return JSON.stringify({ error: session });
|
|
62
62
|
const goal = args.goal ?? "No goal specified";
|
|
@@ -216,4 +216,4 @@ export {
|
|
|
216
216
|
consumePendingInstruction,
|
|
217
217
|
getDelegationTools
|
|
218
218
|
};
|
|
219
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-5PNJFDSW.js.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import {
|
|
4
4
|
init_logger,
|
|
5
5
|
logWarn
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XRTXYN66.js";
|
|
7
7
|
import {
|
|
8
8
|
__esm
|
|
9
9
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -53,6 +53,8 @@ var init_config_validator = __esm({
|
|
|
53
53
|
PEERS_SCHEMA = [
|
|
54
54
|
{ path: "self", type: "object", required: true },
|
|
55
55
|
{ path: "self.name", type: "string", required: true },
|
|
56
|
+
{ path: "self.signingKey", type: "string", required: true },
|
|
57
|
+
{ path: "self.tribeToken", type: "string", required: true },
|
|
56
58
|
{ path: "peers", type: "object", required: true }
|
|
57
59
|
];
|
|
58
60
|
}
|
|
@@ -65,4 +67,4 @@ export {
|
|
|
65
67
|
PEERS_SCHEMA,
|
|
66
68
|
init_config_validator
|
|
67
69
|
};
|
|
68
|
-
//# sourceMappingURL=chunk-
|
|
70
|
+
//# sourceMappingURL=chunk-5RVOEFGT.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/components/config-validator.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * config-validator.ts \u2014 lightweight shape validation for JSON config files (#434).\n * No external deps. Logs warnings, never throws. Boot continues with best-effort.\n */\n\nimport { logWarn } from \"./logger.js\";\n\nconst TAG = \"config\";\n\ntype FieldType = \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\";\n\nexport interface FieldSpec {\n path: string;\n type: FieldType;\n required?: boolean;\n}\n\nfunction getPath(obj: unknown, path: string): unknown {\n let current: unknown = obj;\n for (const key of path.split(\".\")) {\n if (current == null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\nfunction checkType(val: unknown, expected: FieldType): boolean {\n if (expected === \"array\") return Array.isArray(val);\n if (expected === \"object\") return val !== null && typeof val === \"object\" && !Array.isArray(val);\n return typeof val === expected;\n}\n\nexport function validateShape(config: unknown, specs: FieldSpec[], filename: string): string[] {\n const errors: string[] = [];\n for (const spec of specs) {\n const val = getPath(config, spec.path);\n if (val === undefined || val === null) {\n if (spec.required) errors.push(`${spec.path} is required`);\n } else if (!checkType(val, spec.type)) {\n errors.push(`${spec.path} must be ${spec.type}, got ${Array.isArray(val) ? \"array\" : typeof val}`);\n }\n }\n if (errors.length > 0) {\n for (const e of errors) logWarn(TAG, `${filename}: ${e}`);\n }\n return errors;\n}\n\n// \u2500\u2500 Schema specs for each config file \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const TRANSPORT_SCHEMA: FieldSpec[] = [\n { path: \"agents\", type: \"object\", required: true },\n { path: \"providers\", type: \"object\", required: true },\n];\n\nexport const MODELS_SCHEMA: FieldSpec[] = [\n // models.json is a Record<string, ModelEntry> \u2014 just check it's an object\n];\n\nexport const IRC_SCHEMA: FieldSpec[] = [\n { path: \"servers\", type: \"array\", required: true },\n];\n\nexport const PEERS_SCHEMA: FieldSpec[] = [\n { path: \"self\", type: \"object\", required: true },\n { path: \"self.name\", type: \"string\", required: true },\n { path: \"peers\", type: \"object\", required: true },\n];\n\nexport const USERS_SCHEMA: FieldSpec[] = [\n { path: \"users\", type: \"array\", required: true },\n];\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;AAiBA,SAAS,QAAQ,KAAc,MAAuB;AACpD,MAAI,UAAmB;AACvB,aAAW,OAAO,KAAK,MAAM,GAAG,GAAG;AACjC,QAAI,WAAW,QAAQ,OAAO,YAAY,SAAU,QAAO;AAC3D,cAAW,QAAoC,GAAG;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,UAAU,KAAc,UAA8B;AAC7D,MAAI,aAAa,QAAS,QAAO,MAAM,QAAQ,GAAG;AAClD,MAAI,aAAa,SAAU,QAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AAC/F,SAAO,OAAO,QAAQ;AACxB;AAEO,SAAS,cAAc,QAAiB,OAAoB,UAA4B;AAC7F,QAAM,SAAmB,CAAC;AAC1B,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,QAAQ,QAAQ,KAAK,IAAI;AACrC,QAAI,QAAQ,UAAa,QAAQ,MAAM;AACrC,UAAI,KAAK,SAAU,QAAO,KAAK,GAAG,KAAK,IAAI,cAAc;AAAA,IAC3D,WAAW,CAAC,UAAU,KAAK,KAAK,IAAI,GAAG;AACrC,aAAO,KAAK,GAAG,KAAK,IAAI,YAAY,KAAK,IAAI,SAAS,MAAM,QAAQ,GAAG,IAAI,UAAU,OAAO,GAAG,EAAE;AAAA,IACnG;AAAA,EACF;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,eAAW,KAAK,OAAQ,SAAQ,KAAK,GAAG,QAAQ,KAAK,CAAC,EAAE;AAAA,EAC1D;AACA,SAAO;AACT;AA9CA,IAOM,KA2CO,kBASA,YAIA;AA/Db;AAAA;AAAA;AAKA;AAEA,IAAM,MAAM;AA2CL,IAAM,mBAAgC;AAAA,MAC3C,EAAE,MAAM,UAAU,MAAM,UAAU,UAAU,KAAK;AAAA,MACjD,EAAE,MAAM,aAAa,MAAM,UAAU,UAAU,KAAK;AAAA,IACtD;AAMO,IAAM,aAA0B;AAAA,MACrC,EAAE,MAAM,WAAW,MAAM,SAAS,UAAU,KAAK;AAAA,IACnD;AAEO,IAAM,eAA4B;AAAA,MACvC,EAAE,MAAM,QAAQ,MAAM,UAAU,UAAU,KAAK;AAAA,MAC/C,EAAE,MAAM,aAAa,MAAM,UAAU,UAAU,KAAK;AAAA,MACpD,EAAE,MAAM,SAAS,MAAM,UAAU,UAAU,KAAK;AAAA,IAClD;AAAA;AAAA;",
|
|
4
|
+
"sourcesContent": ["/**\n * config-validator.ts \u2014 lightweight shape validation for JSON config files (#434).\n * No external deps. Logs warnings, never throws. Boot continues with best-effort.\n */\n\nimport { logWarn } from \"./logger.js\";\n\nconst TAG = \"config\";\n\ntype FieldType = \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\";\n\nexport interface FieldSpec {\n path: string;\n type: FieldType;\n required?: boolean;\n}\n\nfunction getPath(obj: unknown, path: string): unknown {\n let current: unknown = obj;\n for (const key of path.split(\".\")) {\n if (current == null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\nfunction checkType(val: unknown, expected: FieldType): boolean {\n if (expected === \"array\") return Array.isArray(val);\n if (expected === \"object\") return val !== null && typeof val === \"object\" && !Array.isArray(val);\n return typeof val === expected;\n}\n\nexport function validateShape(config: unknown, specs: FieldSpec[], filename: string): string[] {\n const errors: string[] = [];\n for (const spec of specs) {\n const val = getPath(config, spec.path);\n if (val === undefined || val === null) {\n if (spec.required) errors.push(`${spec.path} is required`);\n } else if (!checkType(val, spec.type)) {\n errors.push(`${spec.path} must be ${spec.type}, got ${Array.isArray(val) ? \"array\" : typeof val}`);\n }\n }\n if (errors.length > 0) {\n for (const e of errors) logWarn(TAG, `${filename}: ${e}`);\n }\n return errors;\n}\n\n// \u2500\u2500 Schema specs for each config file \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const TRANSPORT_SCHEMA: FieldSpec[] = [\n { path: \"agents\", type: \"object\", required: true },\n { path: \"providers\", type: \"object\", required: true },\n];\n\nexport const MODELS_SCHEMA: FieldSpec[] = [\n // models.json is a Record<string, ModelEntry> \u2014 just check it's an object\n];\n\nexport const IRC_SCHEMA: FieldSpec[] = [\n { path: \"servers\", type: \"array\", required: true },\n];\n\nexport const PEERS_SCHEMA: FieldSpec[] = [\n { path: \"self\", type: \"object\", required: true },\n { path: \"self.name\", type: \"string\", required: true },\n { path: \"self.signingKey\", type: \"string\", required: true },\n { path: \"self.tribeToken\", type: \"string\", required: true },\n { path: \"peers\", type: \"object\", required: true },\n];\n\nexport const USERS_SCHEMA: FieldSpec[] = [\n { path: \"users\", type: \"array\", required: true },\n];\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;AAiBA,SAAS,QAAQ,KAAc,MAAuB;AACpD,MAAI,UAAmB;AACvB,aAAW,OAAO,KAAK,MAAM,GAAG,GAAG;AACjC,QAAI,WAAW,QAAQ,OAAO,YAAY,SAAU,QAAO;AAC3D,cAAW,QAAoC,GAAG;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,UAAU,KAAc,UAA8B;AAC7D,MAAI,aAAa,QAAS,QAAO,MAAM,QAAQ,GAAG;AAClD,MAAI,aAAa,SAAU,QAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AAC/F,SAAO,OAAO,QAAQ;AACxB;AAEO,SAAS,cAAc,QAAiB,OAAoB,UAA4B;AAC7F,QAAM,SAAmB,CAAC;AAC1B,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,QAAQ,QAAQ,KAAK,IAAI;AACrC,QAAI,QAAQ,UAAa,QAAQ,MAAM;AACrC,UAAI,KAAK,SAAU,QAAO,KAAK,GAAG,KAAK,IAAI,cAAc;AAAA,IAC3D,WAAW,CAAC,UAAU,KAAK,KAAK,IAAI,GAAG;AACrC,aAAO,KAAK,GAAG,KAAK,IAAI,YAAY,KAAK,IAAI,SAAS,MAAM,QAAQ,GAAG,IAAI,UAAU,OAAO,GAAG,EAAE;AAAA,IACnG;AAAA,EACF;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,eAAW,KAAK,OAAQ,SAAQ,KAAK,GAAG,QAAQ,KAAK,CAAC,EAAE;AAAA,EAC1D;AACA,SAAO;AACT;AA9CA,IAOM,KA2CO,kBASA,YAIA;AA/Db;AAAA;AAAA;AAKA;AAEA,IAAM,MAAM;AA2CL,IAAM,mBAAgC;AAAA,MAC3C,EAAE,MAAM,UAAU,MAAM,UAAU,UAAU,KAAK;AAAA,MACjD,EAAE,MAAM,aAAa,MAAM,UAAU,UAAU,KAAK;AAAA,IACtD;AAMO,IAAM,aAA0B;AAAA,MACrC,EAAE,MAAM,WAAW,MAAM,SAAS,UAAU,KAAK;AAAA,IACnD;AAEO,IAAM,eAA4B;AAAA,MACvC,EAAE,MAAM,QAAQ,MAAM,UAAU,UAAU,KAAK;AAAA,MAC/C,EAAE,MAAM,aAAa,MAAM,UAAU,UAAU,KAAK;AAAA,MACpD,EAAE,MAAM,mBAAmB,MAAM,UAAU,UAAU,KAAK;AAAA,MAC1D,EAAE,MAAM,mBAAmB,MAAM,UAAU,UAAU,KAAK;AAAA,MAC1D,EAAE,MAAM,SAAS,MAAM,UAAU,UAAU,KAAK;AAAA,IAClD;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import {
|
|
4
4
|
init_logger,
|
|
5
5
|
logDebug
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XRTXYN66.js";
|
|
7
7
|
import {
|
|
8
8
|
__esm
|
|
9
9
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -29,4 +29,4 @@ export {
|
|
|
29
29
|
nerve,
|
|
30
30
|
init_nerve
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-5Y3FJ2Y7.js.map
|
|
@@ -18,7 +18,7 @@ function initUsageTracker(home) {
|
|
|
18
18
|
function recordUsage(model, inputTokens, outputTokens, agent = "") {
|
|
19
19
|
_totalTokens += inputTokens + outputTokens;
|
|
20
20
|
if (agent) {
|
|
21
|
-
import("./budget-
|
|
21
|
+
import("./budget-WUM3SPKW.js").then(({ incrementBudgetCounter }) => incrementBudgetCounter(agent, inputTokens + outputTokens)).catch(() => {
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
if (!usagePath) return;
|
|
@@ -77,4 +77,4 @@ export {
|
|
|
77
77
|
readUsage,
|
|
78
78
|
resetUsage
|
|
79
79
|
};
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
80
|
+
//# sourceMappingURL=chunk-6B5ZFUPD.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
init_logger,
|
|
5
5
|
logInfo,
|
|
6
6
|
logWarn
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-XRTXYN66.js";
|
|
8
8
|
import {
|
|
9
9
|
__esm
|
|
10
10
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -306,4 +306,4 @@ export {
|
|
|
306
306
|
_resetEnv,
|
|
307
307
|
init_env_schema
|
|
308
308
|
};
|
|
309
|
-
//# sourceMappingURL=chunk-
|
|
309
|
+
//# sourceMappingURL=chunk-6PA5JBUU.js.map
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
+
import {
|
|
4
|
+
init_logger,
|
|
5
|
+
logError
|
|
6
|
+
} from "./chunk-XRTXYN66.js";
|
|
7
|
+
import {
|
|
8
|
+
__esm,
|
|
9
|
+
__export,
|
|
10
|
+
__toCommonJS
|
|
11
|
+
} from "./chunk-7K2YZTLD.js";
|
|
12
|
+
|
|
13
|
+
// src/components/spin-profiles.ts
|
|
14
|
+
var spin_profiles_exports = {};
|
|
15
|
+
__export(spin_profiles_exports, {
|
|
16
|
+
SESSION_PROFILES: () => SESSION_PROFILES,
|
|
17
|
+
profileFor: () => profileFor
|
|
18
|
+
});
|
|
19
|
+
function profileFor(type) {
|
|
20
|
+
return SESSION_PROFILES[type];
|
|
21
|
+
}
|
|
22
|
+
var soulBundle, channelMessages, orcContext, orcNotifications, orcChannel, SESSION_PROFILES;
|
|
23
|
+
var init_spin_profiles = __esm({
|
|
24
|
+
"src/components/spin-profiles.ts"() {
|
|
25
|
+
"use strict";
|
|
26
|
+
init_spin_types();
|
|
27
|
+
soulBundle = async (prompt, { session }) => {
|
|
28
|
+
const { buildSoulBundle } = await import("./soul-bundle-522C3IRH.js");
|
|
29
|
+
const bundle = buildSoulBundle(sessionType(session));
|
|
30
|
+
return bundle ? `${bundle}
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
${prompt}` : prompt;
|
|
35
|
+
};
|
|
36
|
+
channelMessages = async (prompt, { cardId, parentCardId }) => {
|
|
37
|
+
if (cardId === void 0) return prompt;
|
|
38
|
+
const { channelUnread } = await import("./kanban-channel-XOLUHJZJ.js");
|
|
39
|
+
const workerName = `Worker-${String(cardId).padStart(2, "0")}`;
|
|
40
|
+
const msgs = channelUnread(parentCardId ?? cardId, workerName);
|
|
41
|
+
if (msgs.length === 0) return prompt;
|
|
42
|
+
const lines = msgs.map((m) => `[${m.from_agent}\u2192${m.to_agent}]${m.directive ? " \u26A1" : ""} ${m.message}`);
|
|
43
|
+
return `[CHANNEL \u2014 ${msgs.length} message(s) for ${workerName}]
|
|
44
|
+
${lines.join("\n")}
|
|
45
|
+
[/CHANNEL]
|
|
46
|
+
|
|
47
|
+
${prompt}`;
|
|
48
|
+
};
|
|
49
|
+
orcContext = async (prompt, { cardId }) => {
|
|
50
|
+
const { localDateTime } = await import("./local-time-HT7A7OGW.js");
|
|
51
|
+
return `[CONTEXT \u2014 do not respond to this section]
|
|
52
|
+
[PROJECT] card #${cardId}
|
|
53
|
+
[CURRENT TIME] ${localDateTime()}
|
|
54
|
+
[/CONTEXT]
|
|
55
|
+
|
|
56
|
+
${prompt}`;
|
|
57
|
+
};
|
|
58
|
+
orcNotifications = async (prompt, { cardId }) => {
|
|
59
|
+
if (cardId === void 0) return prompt;
|
|
60
|
+
const { drainOrcNotifications } = await import("./spin-notifications-7NC5XZEM.js");
|
|
61
|
+
const n = drainOrcNotifications(cardId);
|
|
62
|
+
return n.length ? `${n.join("\n")}
|
|
63
|
+
|
|
64
|
+
${prompt}` : prompt;
|
|
65
|
+
};
|
|
66
|
+
orcChannel = async (prompt, { cardId }) => {
|
|
67
|
+
if (cardId === void 0) return prompt;
|
|
68
|
+
const { channelUnread } = await import("./kanban-channel-XOLUHJZJ.js");
|
|
69
|
+
const msgs = channelUnread(cardId, "Orc");
|
|
70
|
+
if (msgs.length === 0) return prompt;
|
|
71
|
+
const lines = msgs.map((m) => `[${m.from_agent}\u2192${m.to_agent}]${m.directive ? " \u26A1" : ""} ${m.message}`);
|
|
72
|
+
return `[CHANNEL \u2014 ${msgs.length} message(s)]
|
|
73
|
+
${lines.join("\n")}
|
|
74
|
+
[/CHANNEL]
|
|
75
|
+
|
|
76
|
+
${prompt}`;
|
|
77
|
+
};
|
|
78
|
+
SESSION_PROFILES = {
|
|
79
|
+
A: { agent: "professor", transportMode: "persistent", resolution: "active", terminateAfter: "external", decorators: [] },
|
|
80
|
+
B: { agent: "browsie", transportMode: "oneshot", resolution: "transient", terminateAfter: "response", decorators: [soulBundle] },
|
|
81
|
+
C: { agent: "coding", transportMode: "oneshot", resolution: "transient", terminateAfter: "response", decorators: [soulBundle] },
|
|
82
|
+
T: { agent: "professor", transportMode: "oneshot", resolution: "transient", terminateAfter: "response", decorators: [soulBundle, channelMessages] },
|
|
83
|
+
P: { agent: "professor", transportMode: "oneshot", resolution: "transient", terminateAfter: "response", decorators: [soulBundle] },
|
|
84
|
+
S: { agent: "coding", transportMode: "oneshot", resolution: "transient", terminateAfter: "call", decorators: [] },
|
|
85
|
+
W: { agent: "browsie", transportMode: "oneshot", resolution: "transient", terminateAfter: "response", decorators: [soulBundle, channelMessages] },
|
|
86
|
+
H: { agent: "coding", transportMode: "oneshot", resolution: "transient", terminateAfter: "response", decorators: [soulBundle] },
|
|
87
|
+
D: { agent: "dreamy", transportMode: "persistent", resolution: "transient", terminateAfter: "external", decorators: [] },
|
|
88
|
+
O: {
|
|
89
|
+
agent: "browsie",
|
|
90
|
+
// ← preserves current Orc agent (NOT professor)
|
|
91
|
+
transportMode: "persistent",
|
|
92
|
+
resolution: "singleton",
|
|
93
|
+
// ← one Orc; reuse the visible O session
|
|
94
|
+
terminateAfter: "external",
|
|
95
|
+
decorators: [orcContext, soulBundle, orcNotifications, orcChannel],
|
|
96
|
+
beforePrompt: async (_session, cardId) => {
|
|
97
|
+
const { updateBridgeLockField } = await import("./bridge-lock-transport-7RSN7OLJ.js");
|
|
98
|
+
const { setActiveOrcCard } = await import("./orc-tools-UZVPONKY.js");
|
|
99
|
+
if (cardId !== void 0) {
|
|
100
|
+
updateBridgeLockField("orc_active", cardId);
|
|
101
|
+
setActiveOrcCard(cardId);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
afterPrompt: async () => {
|
|
105
|
+
const { updateBridgeLockField } = await import("./bridge-lock-transport-7RSN7OLJ.js");
|
|
106
|
+
const { setActiveOrcCard } = await import("./orc-tools-UZVPONKY.js");
|
|
107
|
+
updateBridgeLockField("orc_active", null);
|
|
108
|
+
setActiveOrcCard(null);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// src/components/spin-types.ts
|
|
116
|
+
function sessionType(session) {
|
|
117
|
+
const type = session.id.split("_")[1];
|
|
118
|
+
if (!type) logError("spin-types", `Malformed session ID "${session.id}" \u2014 no type segment, defaulting to A`);
|
|
119
|
+
return type ?? "A";
|
|
120
|
+
}
|
|
121
|
+
function sessionTypeOf(sessionId) {
|
|
122
|
+
return sessionId.split("_")[1] ?? "A";
|
|
123
|
+
}
|
|
124
|
+
function isCompactable(sessionId) {
|
|
125
|
+
return COMPACTABLE_TYPES.has(sessionTypeOf(sessionId));
|
|
126
|
+
}
|
|
127
|
+
function sessionCreatedAt(session) {
|
|
128
|
+
return parseInt(session.id.split("_")[0] ?? "0", 10) * 1e3;
|
|
129
|
+
}
|
|
130
|
+
function typeLabel(t) {
|
|
131
|
+
return TYPE_LABELS[t];
|
|
132
|
+
}
|
|
133
|
+
function typeAgent(t) {
|
|
134
|
+
try {
|
|
135
|
+
const { SESSION_PROFILES: SESSION_PROFILES2 } = (init_spin_profiles(), __toCommonJS(spin_profiles_exports));
|
|
136
|
+
return SESSION_PROFILES2[t].agent;
|
|
137
|
+
} catch {
|
|
138
|
+
return TYPE_AGENT_MAP[t] ?? "professor";
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function parseSessionType(input) {
|
|
142
|
+
switch (input.toLowerCase()) {
|
|
143
|
+
case "browse":
|
|
144
|
+
return "B";
|
|
145
|
+
case "code":
|
|
146
|
+
return "C";
|
|
147
|
+
case "task":
|
|
148
|
+
return "T";
|
|
149
|
+
default:
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
var COMPACTABLE_TYPES, TYPE_LABELS, TYPE_AGENT_MAP;
|
|
154
|
+
var init_spin_types = __esm({
|
|
155
|
+
"src/components/spin-types.ts"() {
|
|
156
|
+
init_logger();
|
|
157
|
+
COMPACTABLE_TYPES = /* @__PURE__ */ new Set(["A", "C"]);
|
|
158
|
+
TYPE_LABELS = {
|
|
159
|
+
A: "Main",
|
|
160
|
+
B: "Browse",
|
|
161
|
+
C: "Code",
|
|
162
|
+
T: "Task",
|
|
163
|
+
P: "Peer",
|
|
164
|
+
S: "System",
|
|
165
|
+
O: "Orc",
|
|
166
|
+
W: "Worker",
|
|
167
|
+
D: "Dreamy",
|
|
168
|
+
H: "Healer"
|
|
169
|
+
};
|
|
170
|
+
TYPE_AGENT_MAP = {
|
|
171
|
+
A: "professor",
|
|
172
|
+
C: "coding",
|
|
173
|
+
B: "browsie",
|
|
174
|
+
D: "dreamy",
|
|
175
|
+
O: "professor",
|
|
176
|
+
T: "professor",
|
|
177
|
+
W: "browsie",
|
|
178
|
+
H: "coding"
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
export {
|
|
184
|
+
profileFor,
|
|
185
|
+
init_spin_profiles,
|
|
186
|
+
sessionType,
|
|
187
|
+
sessionTypeOf,
|
|
188
|
+
isCompactable,
|
|
189
|
+
sessionCreatedAt,
|
|
190
|
+
typeLabel,
|
|
191
|
+
typeAgent,
|
|
192
|
+
parseSessionType,
|
|
193
|
+
init_spin_types
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=chunk-BNXV7SZI.js.map
|