@evomap/evolver 1.89.20 → 2.0.0-beta.0
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/README.md +27 -564
- package/bin/evolver-llm-proxy.js +3 -0
- package/bin/evolver-mcp.js +2 -0
- package/bin/evolver-proxy.js +3 -0
- package/bin/evolver.js +4 -0
- package/index.js +1 -3586
- package/package.json +32 -62
- package/CONTRIBUTING.md +0 -19
- package/LICENSE +0 -641
- package/README.ja-JP.md +0 -521
- package/README.ko-KR.md +0 -520
- package/README.zh-CN.md +0 -531
- package/SKILL.md +0 -365
- package/assets/cover.png +0 -0
- package/assets/gep/genes.seed.json +0 -496
- package/conformance/savings-core/constants.json +0 -30
- package/conformance/savings-core/golden-vectors.json +0 -333
- package/scripts/a2a_export.js +0 -63
- package/scripts/a2a_ingest.js +0 -79
- package/scripts/a2a_promote.js +0 -118
- package/scripts/analyze_by_skill.js +0 -121
- package/scripts/build_binaries.js +0 -479
- package/scripts/check-changelog.js +0 -166
- package/scripts/extract_log.js +0 -85
- package/scripts/generate_history.js +0 -75
- package/scripts/gep_append_event.js +0 -96
- package/scripts/gep_personality_report.js +0 -234
- package/scripts/human_report.js +0 -147
- package/scripts/recall-verify-report.js +0 -234
- package/scripts/recover_loop.js +0 -61
- package/scripts/refresh_stars_badge.js +0 -168
- package/scripts/seed-merchants.js +0 -91
- package/scripts/skill2recipes.js +0 -118
- package/scripts/suggest_version.js +0 -89
- package/scripts/validate-modules.js +0 -38
- package/scripts/validate-suite.js +0 -78
- package/skills/_meta/SKILL.md +0 -41
- package/skills/index.json +0 -14
- package/src/adapters/claudeCode.js +0 -194
- package/src/adapters/codex.js +0 -216
- package/src/adapters/cursor.js +0 -91
- package/src/adapters/hookAdapter.js +0 -469
- package/src/adapters/kiro.js +0 -195
- package/src/adapters/opencode.js +0 -326
- package/src/adapters/scripts/_lockPaths.js +0 -74
- package/src/adapters/scripts/_memoryFiltering.js +0 -35
- package/src/adapters/scripts/_runtimePaths.js +0 -440
- package/src/adapters/scripts/evolver-session-end.js +0 -321
- package/src/adapters/scripts/evolver-session-start.js +0 -587
- package/src/adapters/scripts/evolver-signal-detect.js +0 -98
- package/src/adapters/scripts/evolver-task-recall.js +0 -173
- package/src/atp/atpExecute.js +0 -283
- package/src/atp/atpTaskPickup.js +0 -233
- package/src/atp/autoBuyer.js +0 -382
- package/src/atp/autoDeliver.js +0 -215
- package/src/atp/cli.js +0 -354
- package/src/atp/cliAutobuyPrompt.js +0 -154
- package/src/atp/consumerAgent.js +0 -157
- package/src/atp/defaultHandler.js +0 -69
- package/src/atp/heartbeatSignalsHandler.js +0 -254
- package/src/atp/hubClient.js +0 -317
- package/src/atp/index.js +0 -38
- package/src/atp/merchantAgent.js +0 -118
- package/src/atp/protocol.js +0 -41
- package/src/atp/questionComposer.js +0 -133
- package/src/atp/serviceHelper.js +0 -92
- package/src/canary.js +0 -13
- package/src/config.js +0 -351
- package/src/evolve/guards.js +0 -1
- package/src/evolve/pipeline/collect.js +0 -1
- package/src/evolve/pipeline/dispatch.js +0 -1
- package/src/evolve/pipeline/enrich.js +0 -1
- package/src/evolve/pipeline/hub.js +0 -1
- package/src/evolve/pipeline/select.js +0 -1
- package/src/evolve/pipeline/signals.js +0 -1
- package/src/evolve/utils.js +0 -1
- package/src/evolve.js +0 -1
- package/src/experiment/agentRunner.js +0 -229
- package/src/experiment/cli.js +0 -159
- package/src/experiment/comparison.js +0 -233
- package/src/experiment/metrics.js +0 -75
- package/src/forceUpdate.js +0 -991
- package/src/gep/a2a.js +0 -173
- package/src/gep/a2aProtocol.js +0 -1
- package/src/gep/analyzer.js +0 -35
- package/src/gep/antiAbuseTelemetry.js +0 -1
- package/src/gep/assetCallLog.js +0 -197
- package/src/gep/assetStore.js +0 -723
- package/src/gep/assets.js +0 -36
- package/src/gep/autoDistillConv.js +0 -1
- package/src/gep/autoDistillLlm.js +0 -1
- package/src/gep/bridge.js +0 -138
- package/src/gep/candidateEval.js +0 -1
- package/src/gep/candidates.js +0 -1
- package/src/gep/claimNudge.js +0 -121
- package/src/gep/cliContracts.js +0 -1190
- package/src/gep/contentHash.js +0 -1
- package/src/gep/conversationDistiller.js +0 -1
- package/src/gep/conversationSniffer.js +0 -1
- package/src/gep/crypto.js +0 -1
- package/src/gep/curriculum.js +0 -1
- package/src/gep/deviceId.js +0 -1
- package/src/gep/directoryClient.js +0 -115
- package/src/gep/envFingerprint.js +0 -1
- package/src/gep/epigenetics.js +0 -1
- package/src/gep/execBridge.js +0 -1
- package/src/gep/executionTrace.js +0 -291
- package/src/gep/explore.js +0 -1
- package/src/gep/featureFlags.js +0 -121
- package/src/gep/gitOps.js +0 -265
- package/src/gep/hash.js +0 -1
- package/src/gep/hostErrorClassifier.js +0 -34
- package/src/gep/hubFetch.js +0 -1
- package/src/gep/hubReview.js +0 -1
- package/src/gep/hubSearch.js +0 -1
- package/src/gep/hubVerify.js +0 -1
- package/src/gep/idleScheduler.js +0 -400
- package/src/gep/issueReporter.js +0 -416
- package/src/gep/learningSignals.js +0 -1
- package/src/gep/llmReview.js +0 -92
- package/src/gep/localStateAwareness.js +0 -243
- package/src/gep/mailboxTransport.js +0 -119
- package/src/gep/memoryGraph.js +0 -1
- package/src/gep/memoryGraphAdapter.js +0 -1
- package/src/gep/mutation.js +0 -1
- package/src/gep/narrativeMemory.js +0 -1
- package/src/gep/oauthLogin.js +0 -181
- package/src/gep/openPRRegistry.js +0 -1
- package/src/gep/paths.js +0 -522
- package/src/gep/personality.js +0 -1
- package/src/gep/policyCheck.js +0 -1
- package/src/gep/portable.js +0 -103
- package/src/gep/privacyClient.js +0 -235
- package/src/gep/prompt.js +0 -1
- package/src/gep/questionGenerator.js +0 -518
- package/src/gep/recallInject.js +0 -1
- package/src/gep/recallVerifier.js +0 -1
- package/src/gep/reflection.js +0 -1
- package/src/gep/sanitize.js +0 -264
- package/src/gep/savingsCore.js +0 -1
- package/src/gep/schemas/capsule.js +0 -170
- package/src/gep/schemas/gene.js +0 -154
- package/src/gep/schemas/index.js +0 -8
- package/src/gep/schemas/protocol.js +0 -51
- package/src/gep/schemas/task.js +0 -74
- package/src/gep/selector.js +0 -1
- package/src/gep/selfPR.js +0 -469
- package/src/gep/signals.js +0 -776
- package/src/gep/skill2gep.js +0 -1056
- package/src/gep/skill2gepAudit.js +0 -303
- package/src/gep/skill2recipes.js +0 -511
- package/src/gep/skillDistiller.js +0 -1
- package/src/gep/skillPublisher.js +0 -358
- package/src/gep/solidify.js +0 -1
- package/src/gep/strategy.js +0 -1
- package/src/gep/taskReceiver.js +0 -575
- package/src/gep/tokenSavings.js +0 -1
- package/src/gep/trajectoryExport.js +0 -1
- package/src/gep/validationReport.js +0 -55
- package/src/gep/validator/index.js +0 -411
- package/src/gep/validator/reporter.js +0 -210
- package/src/gep/validator/sandboxExecutor.js +0 -480
- package/src/gep/validator/stakeBootstrap.js +0 -357
- package/src/gep/workspaceKeychain.js +0 -1
- package/src/ops/cleanup.js +0 -80
- package/src/ops/commentary.js +0 -60
- package/src/ops/health_check.js +0 -104
- package/src/ops/index.js +0 -11
- package/src/ops/innovation.js +0 -67
- package/src/ops/lifecycle.js +0 -798
- package/src/ops/self_repair.js +0 -76
- package/src/ops/skills_monitor.js +0 -147
- package/src/ops/trigger.js +0 -33
- package/src/proxy/clientSettings.js +0 -405
- package/src/proxy/envelope.js +0 -59
- package/src/proxy/extensions/dmHandler.js +0 -45
- package/src/proxy/extensions/sessionHandler.js +0 -141
- package/src/proxy/extensions/skillUpdater.js +0 -64
- package/src/proxy/extensions/traceControl.js +0 -1
- package/src/proxy/index.js +0 -1395
- package/src/proxy/inject.js +0 -1
- package/src/proxy/lifecycle/manager.js +0 -1568
- package/src/proxy/mailbox/state.js +0 -207
- package/src/proxy/mailbox/store.js +0 -590
- package/src/proxy/router/cache_passthrough.js +0 -26
- package/src/proxy/router/features.js +0 -84
- package/src/proxy/router/gemini_route.js +0 -154
- package/src/proxy/router/messages_route.js +0 -535
- package/src/proxy/router/model_router.js +0 -113
- package/src/proxy/router/models_route.js +0 -52
- package/src/proxy/router/ollama_route.js +0 -103
- package/src/proxy/router/responses_route.js +0 -170
- package/src/proxy/router/vertex_route.js +0 -110
- package/src/proxy/server/http.js +0 -363
- package/src/proxy/server/routes.js +0 -558
- package/src/proxy/server/settings.js +0 -115
- package/src/proxy/sync/engine.js +0 -179
- package/src/proxy/sync/inbound.js +0 -211
- package/src/proxy/sync/outbound.js +0 -320
- package/src/proxy/task/monitor.js +0 -131
- package/src/proxy/trace/extractor.js +0 -1
- package/src/proxy/trace/usage.js +0 -1
- package/src/webui/client/clientJs/assets.js +0 -111
- package/src/webui/client/clientJs/bootstrap.js +0 -92
- package/src/webui/client/clientJs/common.js +0 -77
- package/src/webui/client/clientJs/i18n.js +0 -366
- package/src/webui/client/clientJs/index.js +0 -35
- package/src/webui/client/clientJs/interactions.js +0 -351
- package/src/webui/client/clientJs/overview.js +0 -152
- package/src/webui/client/clientJs/personality.js +0 -285
- package/src/webui/client/clientJs/pipelines.js +0 -330
- package/src/webui/client/indexHtml.js +0 -221
- package/src/webui/client/static.js +0 -23
- package/src/webui/client/stylesCss.js +0 -639
- package/src/webui/client/vendor/README.md +0 -15
- package/src/webui/client/vendor/echarts.min.js +0 -45
- package/src/webui/index.js +0 -14
- package/src/webui/observer/assets.js +0 -146
- package/src/webui/observer/index.js +0 -37
- package/src/webui/observer/interactions.js +0 -127
- package/src/webui/observer/jsonl.js +0 -75
- package/src/webui/observer/paths.js +0 -46
- package/src/webui/observer/personality.js +0 -43
- package/src/webui/observer/pipelineEvents.js +0 -58
- package/src/webui/observer/redact.js +0 -63
- package/src/webui/observer/runs.js +0 -356
- package/src/webui/observer/safety.js +0 -57
- package/src/webui/observer/skills.js +0 -70
- package/src/webui/observer/status.js +0 -71
- package/src/webui/server/http.js +0 -138
- package/src/webui/server/routes.js +0 -41
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var _0x3a70b3=_0x5502;function _0x5502(_0x33552c,_0x2e17f4){_0x33552c=_0x33552c-(0x1*0x117f+-0x1*-0x7c3+-0x1*0x182c);var _0x2db693=_0x189c();var _0x5bb383=_0x2db693[_0x33552c];if(_0x5502['\x6a\x46\x69\x43\x50\x71']===undefined){var _0x3cdebe=function(_0x314f0c){var _0x545db5='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';var _0x404e82='',_0x55c028='',_0x3dc4fb=_0x404e82+_0x3cdebe,_0x4ece47=(''+function(){return 0x19b0+-0x24bd+0x1*0xb0d;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0xc0f+-0x1*-0xd33+0xf*-0x1af);for(var _0x72ab7=0x1*-0x1256+0x2f*0x51+-0x1*-0x377,_0x28faca,_0x56a9e3,_0x32f34f=0xa5*-0x3c+-0x5df+0x2c8b*0x1;_0x56a9e3=_0x314f0c['\x63\x68\x61\x72\x41\x74'](_0x32f34f++);~_0x56a9e3&&(_0x28faca=_0x72ab7%(-0x20*0x10e+0x218f+0x35)?_0x28faca*(0x1b4b*0x1+0x989*-0x3+0x190)+_0x56a9e3:_0x56a9e3,_0x72ab7++%(-0x223*0x11+-0x1*0x147+-0x645*-0x6))?_0x404e82+=_0x4ece47||_0x3dc4fb['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x32f34f+(-0x6ee+-0x334*-0x5+-0x6*0x182))-(0x12dd+0x23bd*0x1+-0x1230*0x3)!==0x44e*0x3+0x2617*0x1+0x4a3*-0xb?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x6e0*-0x2+0x175*0xc+-0x1e3d*0x1&_0x28faca>>(-(-0x16a0+0x1d06+-0x1*0x664)*_0x72ab7&-0x25d3+-0x1085+-0x365e*-0x1)):_0x72ab7:0x786+-0x37f*0x5+0x9f5){_0x56a9e3=_0x545db5['\x69\x6e\x64\x65\x78\x4f\x66'](_0x56a9e3);}for(var _0x550d2c=-0x21bd+-0x1*-0x118d+0x1030,_0x258b4a=_0x404e82['\x6c\x65\x6e\x67\x74\x68'];_0x550d2c<_0x258b4a;_0x550d2c++){_0x55c028+='\x25'+('\x30\x30'+_0x404e82['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x550d2c)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x2272+0x1941*0x1+-0x3ba3))['\x73\x6c\x69\x63\x65'](-(-0xa39*0x1+0xf48+-0x50d));}return decodeURIComponent(_0x55c028);};var _0x55a021=function(_0x1f2af4,_0xc3a1e5){var _0x19d06d=[],_0x197d45=0x265d+0x1550+-0x3bad,_0x35677b,_0x33aedb='';_0x1f2af4=_0x3cdebe(_0x1f2af4);var _0xd426d3;for(_0xd426d3=0x181f+-0x21*0x13+-0x15ac;_0xd426d3<0x8f3+-0x17*0x6d+0x1d8;_0xd426d3++){_0x19d06d[_0xd426d3]=_0xd426d3;}for(_0xd426d3=0x22d3+0xca0+-0x1*0x2f73;_0xd426d3<0x171b*0x1+-0x85*-0x3f+-0x36d6;_0xd426d3++){_0x197d45=(_0x197d45+_0x19d06d[_0xd426d3]+_0xc3a1e5['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0xd426d3%_0xc3a1e5['\x6c\x65\x6e\x67\x74\x68']))%(-0xa4*-0xd+0x39*0x42+-0x1606),_0x35677b=_0x19d06d[_0xd426d3],_0x19d06d[_0xd426d3]=_0x19d06d[_0x197d45],_0x19d06d[_0x197d45]=_0x35677b;}_0xd426d3=-0xa*-0x1+-0x1540+0x1536,_0x197d45=0x20da+-0x1*0x745+-0x1*0x1995;for(var _0x2ba6cd=-0x1734+0x25ea+-0xeb6;_0x2ba6cd<_0x1f2af4['\x6c\x65\x6e\x67\x74\x68'];_0x2ba6cd++){_0xd426d3=(_0xd426d3+(-0xe5*0x26+0x1a2a+0x191*0x5))%(0xd3+-0x2*0x1f+-0x6b*-0x1),_0x197d45=(_0x197d45+_0x19d06d[_0xd426d3])%(0x249d+-0x2*0x4d5+-0x19f3),_0x35677b=_0x19d06d[_0xd426d3],_0x19d06d[_0xd426d3]=_0x19d06d[_0x197d45],_0x19d06d[_0x197d45]=_0x35677b,_0x33aedb+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x1f2af4['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x2ba6cd)^_0x19d06d[(_0x19d06d[_0xd426d3]+_0x19d06d[_0x197d45])%(-0xc54*-0x2+-0x4*0x194+-0x1158)]);}return _0x33aedb;};_0x5502['\x70\x48\x53\x73\x52\x72']=_0x55a021,_0x5502['\x50\x6f\x56\x6e\x43\x4d']={},_0x5502['\x6a\x46\x69\x43\x50\x71']=!![];}var _0x1ed808=_0x2db693[0xad1+-0x1c37+0x1166],_0x2e92a2=_0x33552c+_0x1ed808,_0x148560=_0x5502['\x50\x6f\x56\x6e\x43\x4d'][_0x2e92a2];if(!_0x148560){if(_0x5502['\x50\x53\x68\x63\x77\x6b']===undefined){var _0x276305=function(_0x30c55d){this['\x75\x65\x41\x44\x44\x72']=_0x30c55d,this['\x64\x53\x55\x56\x48\x6a']=[-0x92*-0x23+-0x161+-0x1294,-0x1*-0x346+-0xfc2+-0x11*-0xbc,-0xd6+-0xb*-0x4+0xaa],this['\x55\x56\x62\x47\x49\x59']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x78\x4f\x4d\x73\x4f\x50']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x4f\x59\x4b\x74\x44\x47']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x276305['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4c\x79\x72\x7a\x66\x75']=function(){var _0x9bcd1c=new RegExp(this['\x78\x4f\x4d\x73\x4f\x50']+this['\x4f\x59\x4b\x74\x44\x47']),_0x3903aa=_0x9bcd1c['\x74\x65\x73\x74'](this['\x55\x56\x62\x47\x49\x59']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x64\x53\x55\x56\x48\x6a'][-0xa08+-0xa7*-0x27+0x3a*-0x44]:--this['\x64\x53\x55\x56\x48\x6a'][0x10c3*0x1+-0x4b+-0x1078];return this['\x43\x63\x72\x6d\x42\x63'](_0x3903aa);},_0x276305['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x43\x63\x72\x6d\x42\x63']=function(_0x15a4bc){if(!Boolean(~_0x15a4bc))return _0x15a4bc;return this['\x4c\x4c\x47\x61\x68\x44'](this['\x75\x65\x41\x44\x44\x72']);},_0x276305['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4c\x4c\x47\x61\x68\x44']=function(_0x3ca22e){for(var _0x11161c=0x20da+0x1*-0x13af+-0xd2b,_0x3a8912=this['\x64\x53\x55\x56\x48\x6a']['\x6c\x65\x6e\x67\x74\x68'];_0x11161c<_0x3a8912;_0x11161c++){this['\x64\x53\x55\x56\x48\x6a']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x3a8912=this['\x64\x53\x55\x56\x48\x6a']['\x6c\x65\x6e\x67\x74\x68'];}return _0x3ca22e(this['\x64\x53\x55\x56\x48\x6a'][-0x9*-0x3d7+0x236f+-0x45fe]);},(''+function(){return 0x1ec7+0x3*-0x62c+-0xc43;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x6b*-0x51+0x18ce+0x90e)&&new _0x276305(_0x5502)['\x4c\x79\x72\x7a\x66\x75'](),_0x5502['\x50\x53\x68\x63\x77\x6b']=!![];}_0x5bb383=_0x5502['\x70\x48\x53\x73\x52\x72'](_0x5bb383,_0x2e17f4),_0x5502['\x50\x6f\x56\x6e\x43\x4d'][_0x2e92a2]=_0x5bb383;}else _0x5bb383=_0x148560;return _0x5bb383;}(function(_0x1fbf28,_0x221ce9){var _0x571b60=_0x5502,_0x9a6ce6=_0x1fbf28();while(!![]){try{var _0x35ce84=-parseInt(_0x571b60(0x151,'\x4f\x45\x7a\x51'))/(-0x16d*0x3+-0xd8*0x1b+-0x8*-0x362)*(parseInt(_0x571b60(0x1e0,'\x5a\x23\x31\x67'))/(0x1*-0x7f+0x171a+-0xd*0x1bd))+-parseInt(_0x571b60(0x13f,'\x5b\x4c\x29\x64'))/(0x15b*-0x5+0x22f7*-0x1+0xdeb*0x3)+-parseInt(_0x571b60(0x147,'\x59\x62\x31\x59'))/(-0x1821+-0xa21+0x2*0x1123)+-parseInt(_0x571b60(0x1ea,'\x32\x21\x59\x4f'))/(-0x1d54+0x993+-0x13c6*-0x1)+parseInt(_0x571b60(0x18d,'\x2a\x32\x65\x4d'))/(0x2553+-0x5*0x2e3+-0x16de)*(parseInt(_0x571b60(0x15f,'\x71\x4a\x30\x47'))/(0x101b+0x1af*0x7+-0x1bdd))+parseInt(_0x571b60(0x139,'\x4c\x4a\x32\x32'))/(0x2*0xaf5+0x18e9+-0x21*0x16b)+parseInt(_0x571b60(0x1a6,'\x71\x4a\x30\x47'))/(-0x43f*-0x2+0x182+-0x9f7)*(parseInt(_0x571b60(0x21d,'\x34\x59\x47\x6b'))/(-0x52*-0x59+0x141f+-0x3097));if(_0x35ce84===_0x221ce9)break;else _0x9a6ce6['push'](_0x9a6ce6['shift']());}catch(_0x37e2fe){_0x9a6ce6['push'](_0x9a6ce6['shift']());}}}(_0x189c,-0x5*-0x27291+-0x3bb*-0x9d+0x6f0));var _0x477b4b=(function(){var _0x520842=_0x5502,_0x32050d={};_0x32050d[_0x520842(0x1b4,'\x59\x4d\x33\x75')]=function(_0x23251b,_0x13f8d8){return _0x23251b===_0x13f8d8;},_0x32050d[_0x520842(0x173,'\x51\x41\x29\x73')]=_0x520842(0x1c0,'\x71\x4a\x30\x47');var _0x1b8e08=_0x32050d,_0xa8a9a7=!![];return function(_0xe75453,_0x37b881){var _0x4e37a7={'\x75\x67\x58\x52\x53':function(_0x2ff3d9,_0x8f0087){return _0x1b8e08['\x6b\x54\x78\x42\x42'](_0x2ff3d9,_0x8f0087);},'\x4f\x43\x61\x78\x77':_0x1b8e08['\x71\x58\x74\x43\x67']},_0x114c18=_0xa8a9a7?function(){var _0x1dd380=_0x5502;if(_0x37b881){if(_0x4e37a7[_0x1dd380(0x1b7,'\x2a\x6d\x56\x21')](_0x4e37a7[_0x1dd380(0x223,'\x32\x21\x59\x4f')],_0x4e37a7[_0x1dd380(0x154,'\x54\x69\x4e\x41')])){var _0x5afa6a=_0x37b881['\x61\x70\x70\x6c\x79'](_0xe75453,arguments);return _0x37b881=null,_0x5afa6a;}else return _0x2b54d1[_0x1dd380(0x131,'\x59\x4d\x33\x75')]();}}:function(){};return _0xa8a9a7=![],_0x114c18;};}()),_0x4846f6=_0x477b4b(this,function(){var _0x34c1cc=_0x5502,_0xf6f8d6={};_0xf6f8d6[_0x34c1cc(0x228,'\x70\x57\x46\x76')]=_0x34c1cc(0x136,'\x71\x34\x40\x45')+_0x34c1cc(0x212,'\x39\x58\x6e\x63');var _0x5015d8=_0xf6f8d6;return _0x4846f6[_0x34c1cc(0x1c3,'\x59\x62\x31\x59')]()[_0x34c1cc(0x172,'\x71\x4a\x30\x47')](_0x5015d8[_0x34c1cc(0x1f6,'\x24\x46\x5a\x2a')])[_0x34c1cc(0x19a,'\x5e\x69\x38\x32')]()[_0x34c1cc(0x17e,'\x71\x4a\x30\x47')+_0x34c1cc(0x197,'\x70\x2a\x67\x53')](_0x4846f6)[_0x34c1cc(0x1ff,'\x4f\x69\x73\x38')](_0x5015d8[_0x34c1cc(0x199,'\x77\x4a\x61\x4d')]);});_0x4846f6();'use strict';const {envInt:_0x43161a}=require(_0x3a70b3(0x1c2,'\x4f\x79\x29\x44')+'\x67'),_0x1a3022=(0x17a6+-0x1*-0x253a+0x3cd6*-0x1)*(-0x13*0x7+-0x3e*-0x4e+-0xe5f)*(-0x2263+0x1c6b+-0x58*-0x1d),_0x50af68=0x25e7+0x1037+-0x2296;let _0x341d54=null,_0x5a4f63=-0x979+-0x255b*0x1+0x2ed4,_0x40916a=null,_0x1be2e9=![];function _0x3a33ef(){return Date['\x6e\x6f\x77']();}function _0x2e1268(){return String(process.env.EVOLVE_OPEN_PR_DEDUP||'\x31')!=='\x30';}function _0x30a867(){var _0x1969fe=_0x3a70b3,_0x209b67={'\x4b\x43\x4d\x53\x57':function(_0x1e64a7,_0x448a12,_0x4731a4){return _0x1e64a7(_0x448a12,_0x4731a4);},'\x41\x68\x75\x64\x74':_0x1969fe(0x22f,'\x43\x29\x54\x68')+'\x50\x45\x4e\x5f\x50\x52\x5f\x54'+_0x1969fe(0x221,'\x4d\x78\x47\x21')};return _0x209b67[_0x1969fe(0x119,'\x43\x33\x42\x61')](_0x43161a,_0x209b67[_0x1969fe(0x1f9,'\x37\x21\x34\x34')],0xc685*0x1+0x8cac+-0x68d1);}function _0x13e42b(){var _0x32c685=_0x3a70b3,_0x5171f2={'\x47\x4c\x6b\x42\x56':function(_0x4194eb,_0x1ba2a2){return _0x4194eb(_0x1ba2a2);},'\x41\x46\x4c\x70\x6a':function(_0x2891a1,_0x16ee16){return _0x2891a1(_0x16ee16);},'\x5a\x6d\x73\x64\x41':function(_0x14590c){return _0x14590c();},'\x41\x67\x53\x50\x5a':function(_0x3a12e9,_0x70667d){return _0x3a12e9<_0x70667d;},'\x4e\x4e\x66\x64\x64':function(_0x499e8f){return _0x499e8f();},'\x6f\x75\x6a\x52\x76':function(_0x147b07){return _0x147b07();},'\x46\x7a\x6c\x6a\x6d':_0x32c685(0x1d8,'\x75\x63\x6d\x4a')+_0x32c685(0x160,'\x78\x52\x79\x64'),'\x56\x4b\x50\x58\x59':_0x32c685(0x150,'\x4f\x45\x7a\x51'),'\x6e\x78\x41\x76\x49':_0x32c685(0x202,'\x4f\x79\x29\x44'),'\x52\x42\x4c\x67\x4d':_0x32c685(0x1d2,'\x64\x26\x6c\x71'),'\x6f\x6b\x62\x4c\x6b':function(_0xddc6bf,_0xf9da47){return _0xddc6bf||_0xf9da47;},'\x46\x41\x58\x76\x57':function(_0x3d4404,_0x2ff0e1){return _0x3d4404===_0x2ff0e1;},'\x42\x69\x54\x4e\x44':_0x32c685(0x190,'\x74\x44\x6b\x53'),'\x4e\x4f\x68\x4e\x42':_0x32c685(0x215,'\x5b\x4c\x29\x64'),'\x56\x5a\x47\x66\x54':function(_0x46a392,_0x41a3e9){return _0x46a392(_0x41a3e9);},'\x4c\x4e\x57\x49\x67':function(_0x1a303d,_0x56a54b){return _0x1a303d===_0x56a54b;},'\x56\x4e\x5a\x59\x68':_0x32c685(0x1a8,'\x4b\x35\x66\x5b'),'\x43\x61\x6b\x54\x59':'\x5b\x4f\x70\x65\x6e\x50\x52\x5d'+'\x20\x67\x68\x20\x70\x72\x20\x6c'+_0x32c685(0x1eb,'\x54\x69\x4e\x41')+_0x32c685(0x193,'\x61\x61\x74\x62')+'\x66\x61\x74\x61\x6c\x29\x3a\x20'};try{const _0x50a1ef=_0x5171f2[_0x32c685(0x18a,'\x32\x21\x59\x4f')](require,_0x5171f2[_0x32c685(0x118,'\x4f\x45\x7a\x51')])[_0x32c685(0x1f5,'\x59\x4d\x33\x75')](_0x32c685(0x1ee,'\x43\x33\x42\x61')+_0x32c685(0x13d,'\x33\x64\x77\x73')+_0x32c685(0x148,'\x70\x57\x46\x76')+_0x32c685(0x159,'\x35\x68\x4a\x23')+_0x32c685(0x1c9,'\x5b\x4c\x29\x64')+_0x32c685(0x13a,'\x5e\x69\x38\x32')+'\x52\x65\x66\x4e\x61\x6d\x65\x2c'+_0x32c685(0x1b5,'\x67\x77\x6f\x41')+_0x32c685(0x156,'\x74\x44\x51\x79'),{'\x65\x6e\x63\x6f\x64\x69\x6e\x67':_0x5171f2[_0x32c685(0x13b,'\x76\x6f\x24\x4b')],'\x74\x69\x6d\x65\x6f\x75\x74':_0x50af68,'\x73\x74\x64\x69\x6f':[_0x5171f2[_0x32c685(0x163,'\x32\x21\x59\x4f')],_0x32c685(0x181,'\x34\x59\x47\x6b'),_0x5171f2[_0x32c685(0x1c6,'\x39\x58\x6e\x63')]],'\x6d\x61\x78\x42\x75\x66\x66\x65\x72':_0x1a3022}),_0x3faacc=JSON[_0x32c685(0x1c7,'\x54\x69\x4e\x41')](_0x5171f2[_0x32c685(0x1d7,'\x76\x6f\x24\x4b')](_0x50a1ef,'\x5b\x5d'));if(!Array[_0x32c685(0x22a,'\x77\x4a\x61\x4d')](_0x3faacc))return[];return _0x3faacc[_0x32c685(0x1b0,'\x45\x4d\x70\x5e')](function(_0x3dc5db){var _0x5be3c4=_0x32c685;return{'\x6e\x75\x6d\x62\x65\x72':_0x3dc5db[_0x5be3c4(0x1cb,'\x67\x77\x6f\x41')],'\x74\x69\x74\x6c\x65':_0x5171f2[_0x5be3c4(0x1de,'\x2a\x6d\x56\x21')](String,_0x3dc5db[_0x5be3c4(0x216,'\x45\x4d\x70\x5e')]||''),'\x68\x65\x61\x64\x52\x65\x66\x4e\x61\x6d\x65':_0x5171f2[_0x5be3c4(0x1fc,'\x59\x4d\x33\x75')](String,_0x3dc5db['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x5be3c4(0x12b,'\x74\x44\x6b\x53')]||''),'\x66\x69\x6c\x65\x73':Array[_0x5be3c4(0x14f,'\x4f\x69\x73\x38')](_0x3dc5db[_0x5be3c4(0x14d,'\x71\x34\x40\x45')])?_0x3dc5db['\x66\x69\x6c\x65\x73']['\x6d\x61\x70'](function(_0xe64cbe){var _0x3958cf=_0x5be3c4;return _0x5171f2[_0x3958cf(0x1e3,'\x70\x2a\x67\x53')](String,_0xe64cbe[_0x3958cf(0x117,'\x70\x57\x46\x76')]||'');})[_0x5be3c4(0x1bf,'\x51\x6e\x26\x50')](Boolean):[]};});}catch(_0x5a916b){if(_0x5171f2[_0x32c685(0x182,'\x70\x57\x46\x76')](_0x5171f2[_0x32c685(0x11c,'\x35\x68\x4a\x23')],_0x5171f2[_0x32c685(0x15e,'\x39\x58\x6e\x63')])){var _0x521a8b={};_0x521a8b[_0x32c685(0x12d,'\x4c\x4a\x32\x32')]=!![],_0x521a8b[_0x32c685(0x164,'\x51\x6e\x26\x50')]=_0x447d38[_0x32c685(0x12e,'\x71\x4a\x30\x47')],_0x521a8b[_0x32c685(0x1c1,'\x6f\x78\x47\x67')]=_0xf5b35a[_0x32c685(0x145,'\x64\x26\x6c\x71')],_0x521a8b[_0x32c685(0x177,'\x4f\x69\x73\x38')+_0x32c685(0x1b3,'\x75\x63\x6d\x4a')]=_0x5c607d[_0x32c685(0x126,'\x71\x34\x40\x45')+_0x32c685(0x129,'\x2a\x32\x65\x4d')],_0x521a8b[_0x32c685(0x1be,'\x75\x63\x6d\x4a')+_0x32c685(0x14a,'\x69\x78\x50\x49')]=_0x23e487,_0x521a8b[_0x32c685(0x132,'\x5a\x23\x31\x67')+_0x32c685(0x13e,'\x70\x4c\x4e\x5e')]=_0x427819,_0x18df52=_0x521a8b;}else{var _0x387ac5=_0x5a916b&&_0x5a916b['\x6d\x65\x73\x73\x61\x67\x65']?_0x5171f2[_0x32c685(0x196,'\x77\x4a\x61\x4d')](String,_0x5a916b['\x6d\x65\x73\x73\x61\x67\x65']):'';if(/not found|ENOENT|command not found/i[_0x32c685(0x17f,'\x4c\x4a\x32\x32')](_0x387ac5))!_0x1be2e9&&(_0x1be2e9=!![],console[_0x32c685(0x1e6,'\x43\x33\x42\x61')]('\x5b\x4f\x70\x65\x6e\x50\x52\x5d'+_0x32c685(0x1f2,'\x4d\x78\x47\x21')+_0x32c685(0x1ca,'\x75\x63\x6d\x4a')+_0x32c685(0x153,'\x34\x59\x47\x6b')+_0x32c685(0x11e,'\x51\x53\x2a\x78')+_0x32c685(0x174,'\x39\x58\x6e\x63')+_0x32c685(0x170,'\x32\x21\x59\x4f')+'\x6f\x72\x20\x74\x68\x69\x73\x20'+'\x70\x72\x6f\x63\x65\x73\x73\x2e'+_0x32c685(0x1dd,'\x39\x46\x30\x6b')+_0x32c685(0x1bd,'\x4c\x4a\x32\x32')+'\x65\x74\x20\x45\x56\x4f\x4c\x56'+_0x32c685(0x1e1,'\x4e\x40\x76\x76')+_0x32c685(0x12c,'\x43\x29\x54\x68')+_0x32c685(0x1ef,'\x71\x34\x40\x45')+_0x32c685(0x12f,'\x5b\x4c\x29\x64')));else{if(_0x5171f2[_0x32c685(0x162,'\x70\x2a\x67\x53')](_0x5171f2[_0x32c685(0x135,'\x77\x4a\x61\x4d')],_0x32c685(0x144,'\x64\x26\x6c\x71')))console[_0x32c685(0x1bc,'\x64\x26\x6c\x71')](_0x5171f2[_0x32c685(0x1ae,'\x5b\x4c\x29\x64')]+_0x387ac5[_0x32c685(0x222,'\x6f\x78\x47\x67')](-0x265a+0x1f51+0x709,-0x2*-0x11fb+0xfab*-0x2+-0x2*0x1ec));else{var _0x44970c=(_0x32c685(0x1bb,'\x78\x52\x79\x64')+'\x33\x7c\x31\x7c\x34')[_0x32c685(0x1d4,'\x75\x63\x6d\x4a')]('\x7c'),_0x19dee2=0x1950+-0x2*-0x8f1+-0xc2*0x39;while(!![]){switch(_0x44970c[_0x19dee2++]){case'\x30':var _0x5653b6=_0x5171f2[_0x32c685(0x227,'\x4c\x4a\x32\x32')](_0x3dde9a)-_0x282719;continue;case'\x31':_0x30d054=!![];continue;case'\x32':if(_0x4be305&&_0x5171f2[_0x32c685(0x1af,'\x43\x29\x54\x68')](_0x5653b6,_0xc8e8bf))return _0x57a2e0;continue;case'\x33':if(_0x4fef97)return _0x5bfd33||[];continue;case'\x34':try{var _0xfea734=_0x5171f2[_0x32c685(0x21f,'\x4d\x78\x47\x21')](_0xd288d9);return _0x32b7de=_0xfea734,_0x46105f=_0x3c694d(),_0xfea734;}finally{_0x2fbc65=![];}continue;case'\x35':if(!_0x5171f2[_0x32c685(0x217,'\x78\x52\x79\x64')](_0x192dfe))return[];continue;case'\x36':var _0xc8e8bf=_0x19391a&&_0x5a309a['\x69\x73\x46\x69\x6e\x69\x74\x65'](_0x3f18b0[_0x32c685(0x16d,'\x5b\x4c\x29\x64')])?_0x8376bf[_0x32c685(0x194,'\x34\x59\x47\x6b')]:_0x5171f2[_0x32c685(0x180,'\x6f\x78\x47\x67')](_0x29b213);continue;}break;}}}return[];}}}function _0x5323e9(_0x54343c){var _0x3f9d60=_0x3a70b3,_0x3b6a5d={'\x48\x67\x67\x48\x49':function(_0x23ebc4){return _0x23ebc4();},'\x53\x69\x57\x6e\x6e':function(_0x1c081d){return _0x1c081d();},'\x63\x46\x4f\x68\x4d':function(_0x43a4cc,_0x5cdd4c){return _0x43a4cc-_0x5cdd4c;},'\x75\x76\x79\x6f\x4a':function(_0x274b7d){return _0x274b7d();},'\x54\x48\x65\x6e\x4f':function(_0x225c91,_0x4d9cd3){return _0x225c91!==_0x4d9cd3;},'\x57\x6e\x72\x56\x55':_0x3f9d60(0x1fd,'\x64\x41\x52\x67'),'\x6e\x42\x6b\x47\x71':function(_0x12b9f3){return _0x12b9f3();}};if(!_0x3b6a5d['\x48\x67\x67\x48\x49'](_0x2e1268))return[];var _0x10dae4=_0x54343c&&Number[_0x3f9d60(0x1a0,'\x6f\x78\x47\x67')](_0x54343c[_0x3f9d60(0x158,'\x2a\x6d\x56\x21')])?_0x54343c['\x74\x74\x6c\x4d\x73']:_0x3b6a5d[_0x3f9d60(0x206,'\x24\x46\x5a\x2a')](_0x30a867),_0xd7c771=_0x3b6a5d[_0x3f9d60(0x171,'\x76\x6f\x24\x4b')](_0x3b6a5d[_0x3f9d60(0x189,'\x5b\x4c\x29\x64')](_0x3a33ef),_0x5a4f63);if(_0x341d54&&_0xd7c771<_0x10dae4)return _0x341d54;if(_0x40916a)return _0x341d54||[];_0x40916a=!![];try{if(_0x3b6a5d[_0x3f9d60(0x165,'\x4f\x69\x73\x38')](_0x3b6a5d[_0x3f9d60(0x14b,'\x51\x53\x2a\x78')],_0x3b6a5d[_0x3f9d60(0x149,'\x4f\x45\x7a\x51')]))_0x5df636=![];else{var _0x134673=_0x3b6a5d[_0x3f9d60(0x142,'\x74\x44\x51\x79')](_0x13e42b);return _0x341d54=_0x134673,_0x5a4f63=_0x3a33ef(),_0x134673;}}finally{_0x40916a=![];}}function _0x3ee794(_0x2436cc){var _0x1cdfa5=_0x3a70b3,_0x31c133={'\x6e\x65\x65\x53\x4a':_0x1cdfa5(0x1b6,'\x35\x68\x4a\x23'),'\x78\x4f\x70\x45\x7a':function(_0x23edfd,_0x2216a7){return _0x23edfd(_0x2216a7);},'\x79\x6f\x77\x74\x68':function(_0x5cbb05){return _0x5cbb05();},'\x4c\x4a\x53\x6a\x66':_0x1cdfa5(0x1b2,'\x67\x77\x6f\x41')+'\x64\x69\x73\x61\x62\x6c\x65\x64','\x4a\x4a\x4f\x62\x56':function(_0x3ff9eb,_0x128d10){return _0x3ff9eb===_0x128d10;},'\x56\x6f\x7a\x56\x4f':_0x1cdfa5(0x1d5,'\x74\x44\x6b\x53')+_0x1cdfa5(0x15b,'\x2a\x32\x65\x4d'),'\x6e\x49\x75\x46\x66':function(_0x4897a4,_0x37d27e){return _0x4897a4<_0x37d27e;},'\x6f\x49\x50\x4a\x79':function(_0x2b7ec4,_0x4554a0){return _0x2b7ec4!==_0x4554a0;},'\x53\x6f\x50\x63\x46':'\x67\x73\x75\x52\x45','\x42\x6e\x51\x44\x63':function(_0xf3ac7b,_0x5a37b7){return _0xf3ac7b===_0x5a37b7;},'\x42\x50\x69\x71\x41':function(_0x5e0ab9,_0xceb158){return _0x5e0ab9/_0xceb158;},'\x4d\x45\x6b\x56\x44':function(_0x2654e5,_0x3f115a){return _0x2654e5>_0x3f115a;},'\x69\x61\x65\x4d\x63':function(_0x34292e,_0x10ad3a){return _0x34292e!==_0x10ad3a;},'\x70\x74\x6e\x62\x78':'\x54\x79\x6d\x76\x41','\x62\x47\x79\x67\x72':_0x1cdfa5(0x191,'\x6f\x78\x47\x67'),'\x69\x4a\x74\x66\x73':_0x1cdfa5(0x1ed,'\x39\x46\x30\x6b')+_0x1cdfa5(0x21e,'\x78\x52\x79\x64')};if(!_0x31c133[_0x1cdfa5(0x17d,'\x70\x2a\x67\x53')](_0x2e1268))return{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x31c133[_0x1cdfa5(0x224,'\x67\x77\x6f\x41')]};var _0x237744=_0x2436cc&&Array['\x69\x73\x41\x72\x72\x61\x79'](_0x2436cc['\x63\x68\x61\x6e\x67\x65\x64\x46'+_0x1cdfa5(0x225,'\x37\x21\x34\x34')])?_0x2436cc[_0x1cdfa5(0x18e,'\x64\x41\x52\x67')+_0x1cdfa5(0x209,'\x5a\x23\x31\x67')]:[],_0x1b3599={};_0x1b3599[_0x1cdfa5(0x1f7,'\x37\x21\x34\x34')]=![],_0x1b3599[_0x1cdfa5(0x183,'\x69\x63\x79\x4e')]=_0x1cdfa5(0x15a,'\x70\x57\x46\x76')+_0x1cdfa5(0x1a2,'\x4c\x4a\x32\x32');if(_0x31c133[_0x1cdfa5(0x20c,'\x69\x63\x79\x4e')](_0x237744[_0x1cdfa5(0x133,'\x2a\x32\x65\x4d')],0xa97+-0x21e0+0x1749*0x1))return _0x1b3599;var _0x1468b3=_0x2436cc&&Array[_0x1cdfa5(0x179,'\x64\x41\x52\x67')](_0x2436cc[_0x1cdfa5(0x13c,'\x64\x41\x52\x67')])?_0x2436cc[_0x1cdfa5(0x130,'\x35\x68\x4a\x23')]:_0x5323e9(),_0x15de9c={};_0x15de9c[_0x1cdfa5(0x210,'\x32\x21\x59\x4f')]=![],_0x15de9c[_0x1cdfa5(0x21b,'\x35\x68\x4a\x23')]=_0x31c133[_0x1cdfa5(0x146,'\x45\x4d\x70\x5e')];if(_0x1468b3[_0x1cdfa5(0x204,'\x39\x46\x30\x6b')]===-0x1a37+0x4cb*0x1+0x156c)return _0x15de9c;var _0x55c68f=new Set(_0x237744[_0x1cdfa5(0x1b0,'\x45\x4d\x70\x5e')](String)),_0x46b356=null;for(var _0x2cfa62=0x334+-0xacf*-0x1+-0xe03;_0x31c133[_0x1cdfa5(0x186,'\x6f\x78\x47\x67')](_0x2cfa62,_0x1468b3[_0x1cdfa5(0x157,'\x69\x63\x79\x4e')]);_0x2cfa62++){if(_0x31c133[_0x1cdfa5(0x192,'\x35\x68\x4a\x23')]('\x41\x56\x6a\x6c\x74',_0x31c133['\x53\x6f\x50\x63\x46'])){var _0x39b517=_0x1468b3[_0x2cfa62];if(!_0x39b517||!Array[_0x1cdfa5(0x178,'\x54\x69\x4e\x41')](_0x39b517[_0x1cdfa5(0x1fa,'\x61\x61\x74\x62')])||_0x31c133[_0x1cdfa5(0x184,'\x4c\x4a\x32\x32')](_0x39b517['\x66\x69\x6c\x65\x73'][_0x1cdfa5(0x143,'\x39\x58\x6e\x63')],-0x1ea+-0x1987+0x1b71))continue;var _0x7ecf2e=new Set(_0x39b517[_0x1cdfa5(0x22e,'\x59\x62\x31\x59')][_0x1cdfa5(0x198,'\x32\x21\x59\x4f')](String)),_0x4ed58=[];_0x55c68f['\x66\x6f\x72\x45\x61\x63\x68'](function(_0x214dec){var _0x34327b=_0x1cdfa5;if(_0x31c133[_0x34327b(0x138,'\x76\x6f\x24\x4b')]===_0x31c133[_0x34327b(0x161,'\x51\x6e\x26\x50')]){if(_0x7ecf2e[_0x34327b(0x116,'\x45\x4d\x70\x5e')](_0x214dec))_0x4ed58[_0x34327b(0x1d0,'\x2a\x32\x65\x4d')](_0x214dec);}else _0x1916f3=null,_0x159bb4=0x3*0x767+0x41c*0x5+-0x37*0xc7,_0x543a76=null,_0x34d552=![];});if(_0x4ed58[_0x1cdfa5(0x168,'\x67\x42\x4a\x65')]===-0x1b87+0x8fc+-0x65*-0x2f)continue;var _0x2a03f1=_0x31c133[_0x1cdfa5(0x18c,'\x69\x63\x79\x4e')](_0x4ed58['\x6c\x65\x6e\x67\x74\x68'],_0x237744[_0x1cdfa5(0x1e5,'\x51\x53\x2a\x78')]);if(!_0x46b356||_0x31c133[_0x1cdfa5(0x1e9,'\x32\x21\x59\x4f')](_0x2a03f1,_0x46b356[_0x1cdfa5(0x21a,'\x78\x52\x79\x64')+_0x1cdfa5(0x1f3,'\x51\x53\x2a\x78')])){if(_0x31c133[_0x1cdfa5(0x201,'\x51\x53\x2a\x78')](_0x31c133['\x70\x74\x6e\x62\x78'],_0x31c133[_0x1cdfa5(0x141,'\x59\x4d\x33\x75')])){var _0xae9e7f={};_0xae9e7f[_0x1cdfa5(0x169,'\x51\x41\x29\x73')]=!![],_0xae9e7f[_0x1cdfa5(0x17b,'\x70\x57\x46\x76')]=_0x39b517[_0x1cdfa5(0x19b,'\x64\x41\x52\x67')],_0xae9e7f[_0x1cdfa5(0x205,'\x34\x59\x47\x6b')]=_0x39b517['\x74\x69\x74\x6c\x65'],_0xae9e7f[_0x1cdfa5(0x15c,'\x4e\x40\x76\x76')+'\x61\x6d\x65']=_0x39b517[_0x1cdfa5(0x1a7,'\x75\x63\x6d\x4a')+_0x1cdfa5(0x12a,'\x64\x41\x52\x67')],_0xae9e7f[_0x1cdfa5(0x166,'\x2a\x32\x65\x4d')+_0x1cdfa5(0x229,'\x70\x2a\x67\x53')]=_0x2a03f1,_0xae9e7f[_0x1cdfa5(0x1ba,'\x43\x29\x54\x68')+_0x1cdfa5(0x207,'\x70\x57\x46\x76')]=_0x4ed58,_0x46b356=_0xae9e7f;}else _0x373fcb[_0x1cdfa5(0x11f,'\x59\x62\x31\x59')](_0x2dabe7);}}else _0x31c133[_0x1cdfa5(0x1b1,'\x59\x4d\x33\x75')](_0xd401b5,_0x6d0231[_0x112641])[_0x1cdfa5(0x123,'\x74\x44\x51\x79')](function(_0x454824){var _0xd77c27=_0x1cdfa5;_0x480d57[_0xd77c27(0x1fb,'\x62\x77\x69\x6d')](_0x454824);});}var _0x11a26a={};return _0x11a26a[_0x1cdfa5(0x16e,'\x33\x64\x77\x73')]=![],_0x11a26a[_0x1cdfa5(0x20f,'\x51\x41\x29\x73')]=_0x31c133[_0x1cdfa5(0x208,'\x67\x77\x6f\x41')],_0x46b356||_0x11a26a;}function _0x4acda9(_0x5066f0){var _0x3ab784=_0x3a70b3,_0x257a9e={'\x6a\x49\x76\x77\x66':function(_0x113421,_0x537c72){return _0x113421>=_0x537c72;},'\x4d\x57\x67\x43\x71':function(_0x10f0a6,_0x3c12ad){return _0x10f0a6(_0x3c12ad);},'\x49\x4e\x4c\x79\x6f':function(_0x2306e3,_0x12442e){return _0x2306e3||_0x12442e;},'\x68\x55\x4b\x49\x45':_0x3ab784(0x1cd,'\x32\x21\x59\x4f'),'\x6c\x74\x69\x48\x41':function(_0x51e2a5){return _0x51e2a5();},'\x57\x41\x66\x50\x71':_0x3ab784(0x124,'\x4d\x78\x47\x21'),'\x48\x43\x73\x65\x6f':function(_0x197ebd,_0x450db3){return _0x197ebd-_0x450db3;},'\x6a\x70\x77\x5a\x76':function(_0x391ce7){return _0x391ce7();},'\x47\x6a\x55\x67\x62':function(_0x109af3,_0x30381b){return _0x109af3===_0x30381b;},'\x52\x55\x49\x54\x46':function(_0x43ed0b,_0x4d7558){return _0x43ed0b<_0x4d7558;},'\x53\x41\x61\x56\x5a':_0x3ab784(0x1aa,'\x39\x46\x30\x6b'),'\x4a\x59\x42\x4b\x73':_0x3ab784(0x137,'\x6f\x78\x47\x67'),'\x55\x6c\x45\x57\x78':function(_0x20fa44,_0x443ffa){return _0x20fa44===_0x443ffa;},'\x77\x4f\x42\x7a\x6c':function(_0x16ce6f,_0x3394e8){return _0x16ce6f/_0x3394e8;}};if(!_0x257a9e[_0x3ab784(0x1f0,'\x59\x4d\x33\x75')](_0x2e1268))return[];var _0x4837f6=_0x5066f0&&Array[_0x3ab784(0x120,'\x4f\x79\x29\x44')](_0x5066f0[_0x3ab784(0x1ac,'\x51\x41\x29\x73')])?_0x5066f0[_0x3ab784(0x134,'\x39\x58\x6e\x63')]:[];if(_0x4837f6[_0x3ab784(0x17a,'\x4f\x69\x73\x38')]===-0x201a*0x1+-0x76b+-0x1*-0x2785)return[];var _0x4e8cb2=_0x5066f0&&Array[_0x3ab784(0x127,'\x43\x29\x54\x68')](_0x5066f0[_0x3ab784(0x1fe,'\x70\x57\x46\x76')])?_0x5066f0[_0x3ab784(0x1cf,'\x34\x59\x47\x6b')]:_0x5323e9();if(_0x257a9e[_0x3ab784(0x1da,'\x4b\x35\x66\x5b')](_0x4e8cb2[_0x3ab784(0x226,'\x33\x64\x77\x73')],0xa*-0x3b6+0x7f2+0x1*0x1d2a))return[];var _0x3459bf=_0x5066f0&&Number['\x69\x73\x46\x69\x6e\x69\x74\x65'](_0x5066f0[_0x3ab784(0x1e7,'\x43\x33\x42\x61')+'\x64'])?_0x5066f0[_0x3ab784(0x213,'\x24\x46\x5a\x2a')+'\x64']:-0x2*-0x751+-0x145f+-0x1*-0x5bd+0.5;function _0x1ba1bc(_0xf60e36){var _0x518a71=_0x3ab784;return _0x257a9e[_0x518a71(0x20b,'\x67\x77\x6f\x41')](String,_0x257a9e[_0x518a71(0x175,'\x43\x33\x42\x61')](_0xf60e36,''))[_0x518a71(0x20d,'\x33\x64\x77\x73')+_0x518a71(0x20e,'\x6f\x78\x47\x67')]()[_0x518a71(0x195,'\x71\x34\x40\x45')](/[^a-z0-9]+/g,'\x20')[_0x518a71(0x214,'\x39\x58\x6e\x63')](/\s+/)[_0x518a71(0x1d1,'\x5a\x23\x31\x67')](function(_0x43de6c){var _0x589ccc=_0x518a71;return _0x257a9e[_0x589ccc(0x1cc,'\x70\x4c\x4e\x5e')](_0x43de6c[_0x589ccc(0x1d9,'\x54\x69\x4e\x41')],-0x4a*-0x1b+0x2*0xd64+-0x2293*0x1);});}var _0x51ff96=new Set();for(var _0x408606=-0x9*0x34e+0x1102+0xcbc;_0x257a9e[_0x3ab784(0x1a9,'\x45\x4d\x70\x5e')](_0x408606,_0x4837f6['\x6c\x65\x6e\x67\x74\x68']);_0x408606++){if(_0x257a9e[_0x3ab784(0x1c8,'\x32\x21\x59\x4f')]===_0x257a9e[_0x3ab784(0x22c,'\x67\x42\x4a\x65')])return _0x5aef03[_0x3ab784(0x15d,'\x64\x26\x6c\x71')+_0x3ab784(0x19c,'\x4d\x78\x47\x21')]-_0x48ea58[_0x3ab784(0x125,'\x78\x52\x79\x64')+_0x3ab784(0x1a5,'\x4b\x35\x66\x5b')];else _0x1ba1bc(_0x4837f6[_0x408606])[_0x3ab784(0x187,'\x71\x34\x40\x45')](function(_0x199086){_0x51ff96['\x61\x64\x64'](_0x199086);});}if(_0x257a9e[_0x3ab784(0x1c5,'\x37\x66\x74\x30')](_0x51ff96[_0x3ab784(0x14e,'\x35\x68\x4a\x23')],-0xbab*-0x1+-0x1188*-0x1+0x1d33*-0x1))return[];var _0x528236=[];for(var _0x5b9b7d=0x119b+-0x227d+0x10e2;_0x5b9b7d<_0x4e8cb2[_0x3ab784(0x16a,'\x70\x2a\x67\x53')];_0x5b9b7d++){var _0x1e4070=_0x4e8cb2[_0x5b9b7d];if(!_0x1e4070)continue;var _0x4f182f=new Set();_0x1ba1bc(_0x1e4070[_0x3ab784(0x219,'\x4b\x35\x66\x5b')])[_0x3ab784(0x1f4,'\x4f\x45\x7a\x51')](function(_0x5155ad){var _0x5dabef=_0x3ab784;_0x257a9e[_0x5dabef(0x16c,'\x39\x46\x30\x6b')]===_0x5dabef(0x16b,'\x54\x69\x4e\x41')?_0x4f182f[_0x5dabef(0x167,'\x39\x58\x6e\x63')](_0x5155ad):_0x21eade[_0x5dabef(0x1ec,'\x54\x69\x4e\x41')](_0x1c73cc);}),_0x257a9e[_0x3ab784(0x1a3,'\x64\x26\x6c\x71')](_0x1ba1bc,_0x1e4070[_0x3ab784(0x1b9,'\x61\x61\x74\x62')+'\x61\x6d\x65'])[_0x3ab784(0x1d6,'\x59\x62\x31\x59')](function(_0x3d1611){var _0x5b12ea=_0x3ab784;_0x4f182f[_0x5b12ea(0x18f,'\x77\x4a\x61\x4d')](_0x3d1611);});if(_0x4f182f[_0x3ab784(0x1ad,'\x5b\x4c\x29\x64')]===-0x102f+-0x9ad+0x14*0x14b)continue;var _0x2a69a4=-0x49*-0x16+-0xd60+0x71a;_0x51ff96[_0x3ab784(0x20a,'\x51\x6e\x26\x50')](function(_0xa0926e){var _0x313149=_0x3ab784;if(_0x257a9e[_0x313149(0x152,'\x75\x63\x6d\x4a')]===_0x257a9e[_0x313149(0x14c,'\x24\x46\x5a\x2a')]){if(_0x4f182f[_0x313149(0x121,'\x4e\x40\x76\x76')](_0xa0926e))_0x2a69a4++;}else{var _0x4d41ea=_0x1fb1b3();return _0x4892f6=_0x4d41ea,_0x1a91d7=yYNxaA[_0x313149(0x19d,'\x77\x4a\x61\x4d')](_0x41a7a0),_0x4d41ea;}});var _0x4d45e7=_0x257a9e['\x77\x4f\x42\x7a\x6c'](_0x2a69a4,_0x51ff96[_0x3ab784(0x1a4,'\x37\x66\x74\x30')]);if(_0x4d45e7>=_0x3459bf){var _0x48f145=Array[_0x3ab784(0x1c4,'\x2a\x6d\x56\x21')](_0x1e4070[_0x3ab784(0x155,'\x4e\x40\x76\x76')])?_0x1e4070[_0x3ab784(0x16f,'\x4f\x69\x73\x38')][_0x3ab784(0x1d3,'\x59\x4d\x33\x75')](-0x1e7b+-0x2313+0x418e,0x1219+0xbb6*0x1+-0x1dca):[],_0x4404c9={};_0x4404c9[_0x3ab784(0x1dc,'\x5a\x23\x31\x67')]=_0x1e4070[_0x3ab784(0x11d,'\x39\x58\x6e\x63')],_0x4404c9['\x74\x69\x74\x6c\x65']=_0x1e4070[_0x3ab784(0x188,'\x69\x78\x50\x49')],_0x4404c9[_0x3ab784(0x11b,'\x45\x4d\x70\x5e')+_0x3ab784(0x17c,'\x37\x21\x34\x34')]=_0x1e4070[_0x3ab784(0x1f8,'\x71\x4a\x30\x47')+'\x61\x6d\x65'],_0x4404c9[_0x3ab784(0x22b,'\x64\x26\x6c\x71')]=_0x48f145,_0x4404c9[_0x3ab784(0x140,'\x4e\x40\x76\x76')+_0x3ab784(0x18b,'\x76\x6f\x24\x4b')]=_0x4d45e7,_0x528236[_0x3ab784(0x220,'\x34\x59\x47\x6b')](_0x4404c9);}}return _0x528236[_0x3ab784(0x1ce,'\x77\x4a\x61\x4d')](function(_0x3d1108,_0x23a710){var _0x33d918=_0x3ab784;return _0x257a9e[_0x33d918(0x122,'\x67\x42\x4a\x65')](_0x23a710[_0x33d918(0x1a1,'\x33\x64\x77\x73')+_0x33d918(0x218,'\x37\x66\x74\x30')],_0x3d1108[_0x33d918(0x1b8,'\x43\x29\x54\x68')+_0x33d918(0x1f1,'\x67\x77\x6f\x41')]);}),_0x528236['\x73\x6c\x69\x63\x65'](0x1*0x14e7+-0x1*-0x9e0+-0x1ec7,-0x3*0xcf4+0x3*0xa26+-0x3*-0x2cf);}function _0x4718f5(){_0x341d54=null,_0x5a4f63=0x57*-0x13+-0x11f*0x14+-0x1ce1*-0x1,_0x40916a=null,_0x1be2e9=![];}var _0x4511d7={};_0x4511d7[_0x3a70b3(0x21c,'\x77\x4a\x61\x4d')+'\x52\x73']=_0x5323e9,_0x4511d7[_0x3a70b3(0x211,'\x71\x4a\x30\x47')+_0x3a70b3(0x11a,'\x4c\x4a\x32\x32')]=_0x3ee794,_0x4511d7[_0x3a70b3(0x1e4,'\x5b\x4c\x29\x64')+_0x3a70b3(0x176,'\x77\x4a\x61\x4d')]=_0x4acda9,_0x4511d7[_0x3a70b3(0x19e,'\x33\x64\x77\x73')+_0x3a70b3(0x128,'\x70\x57\x46\x76')]=_0x4718f5,module[_0x3a70b3(0x19f,'\x67\x42\x4a\x65')]=_0x4511d7;function _0x189c(){var _0x230e02=['\x57\x51\x52\x63\x4a\x38\x6b\x4c\x79\x71','\x41\x71\x7a\x76\x57\x37\x71','\x61\x38\x6b\x6b\x57\x50\x5a\x63\x48\x4d\x65\x57\x45\x43\x6b\x32\x68\x4b\x70\x64\x49\x64\x4e\x64\x4a\x38\x6f\x77','\x62\x61\x71\x49\x57\x34\x42\x64\x4b\x4a\x57\x54\x57\x51\x43','\x74\x48\x39\x66\x57\x36\x6e\x72','\x79\x53\x6f\x72\x57\x52\x6c\x63\x54\x49\x4f','\x57\x34\x74\x63\x53\x63\x44\x4a\x57\x35\x30','\x57\x34\x50\x79\x68\x53\x6b\x49\x44\x63\x43\x6d\x57\x35\x61\x4c\x72\x57\x42\x63\x56\x68\x71','\x57\x52\x66\x39\x57\x4f\x52\x63\x47\x38\x6b\x6b\x57\x37\x70\x64\x56\x61','\x57\x4f\x58\x6c\x73\x38\x6f\x65','\x57\x52\x58\x64\x77\x53\x6f\x31\x57\x50\x75','\x57\x35\x66\x4e\x76\x6d\x6b\x72\x6b\x47','\x78\x43\x6f\x4c\x57\x4f\x53','\x57\x4f\x46\x63\x4f\x66\x6c\x64\x4d\x67\x75','\x57\x50\x74\x64\x54\x38\x6b\x70\x57\x35\x46\x64\x48\x74\x48\x76\x57\x4f\x71','\x64\x71\x57\x4d','\x57\x50\x74\x63\x55\x31\x52\x64\x4e\x31\x30','\x57\x50\x74\x64\x55\x38\x6b\x63\x57\x34\x42\x64\x47\x32\x4f\x44\x57\x37\x79','\x71\x53\x6f\x6e\x6d\x4c\x53\x71','\x62\x31\x61\x73\x57\x51\x42\x64\x49\x47','\x57\x36\x72\x56\x42\x6d\x6b\x4b\x68\x4c\x56\x64\x56\x6d\x6b\x43','\x7a\x53\x6b\x52\x57\x4f\x42\x63\x53\x43\x6f\x6c\x67\x38\x6b\x43\x57\x4f\x61','\x57\x36\x6e\x4f\x7a\x53\x6b\x5a\x66\x78\x64\x64\x4a\x6d\x6b\x71','\x72\x4d\x6c\x63\x53\x53\x6f\x62\x57\x36\x71\x44\x57\x52\x78\x63\x4a\x71','\x6e\x6d\x6f\x57\x57\x4f\x65\x4c','\x65\x66\x78\x63\x4f\x72\x65\x57\x57\x37\x76\x64\x57\x50\x30','\x61\x58\x43\x4d\x57\x35\x64\x64\x52\x64\x47\x37\x57\x52\x53','\x57\x36\x52\x64\x4f\x4e\x38\x77\x57\x52\x46\x64\x53\x57','\x79\x6d\x6f\x73\x57\x34\x2f\x64\x54\x63\x30','\x57\x37\x38\x62\x43\x38\x6f\x47\x57\x52\x58\x52\x6c\x57','\x6d\x38\x6b\x4a\x57\x4f\x5a\x64\x50\x6d\x6f\x57\x63\x6d\x6f\x46\x57\x35\x75','\x42\x38\x6b\x63\x7a\x73\x33\x63\x4d\x61\x6a\x49\x57\x51\x4b','\x67\x30\x71\x6c\x57\x4f\x42\x64\x51\x30\x56\x64\x54\x47','\x57\x4f\x5a\x63\x49\x53\x6b\x41\x75\x38\x6b\x68','\x65\x38\x6b\x79\x42\x53\x6f\x43\x61\x71','\x57\x35\x66\x34\x45\x43\x6b\x61\x6e\x57','\x57\x50\x66\x67\x57\x37\x4a\x64\x4c\x53\x6f\x74','\x57\x4f\x50\x70\x75\x38\x6f\x65\x57\x52\x35\x6d\x57\x36\x78\x63\x56\x61','\x61\x47\x34\x33\x57\x4f\x6c\x64\x4f\x73\x38\x51\x57\x4f\x61','\x57\x50\x5a\x64\x50\x38\x6b\x64\x57\x34\x68\x64\x4c\x74\x47','\x57\x51\x4c\x6f\x68\x63\x5a\x64\x48\x71','\x57\x51\x48\x6f\x57\x37\x37\x64\x55\x6d\x6f\x61','\x69\x43\x6f\x74\x57\x50\x4e\x64\x52\x47','\x57\x50\x7a\x6d\x57\x37\x53','\x63\x66\x31\x65\x57\x50\x43','\x57\x4f\x64\x64\x49\x43\x6b\x56\x6e\x6d\x6f\x6a\x62\x47','\x6d\x38\x6f\x34\x57\x4f\x6d\x55','\x57\x4f\x5a\x63\x47\x30\x56\x64\x56\x4e\x4f','\x68\x58\x65\x56\x57\x34\x56\x64\x54\x61','\x57\x50\x65\x64\x44\x43\x6f\x2b\x70\x78\x50\x42\x57\x37\x4f','\x46\x43\x6b\x63\x72\x62\x5a\x63\x49\x57\x48\x4b','\x70\x47\x2f\x63\x49\x31\x68\x63\x53\x47','\x64\x57\x4b\x51\x57\x34\x37\x64\x50\x61\x79\x37\x57\x50\x53','\x57\x34\x31\x38\x7a\x43\x6b\x75\x6a\x4b\x38','\x78\x61\x62\x48\x57\x36\x6e\x43','\x66\x48\x4b\x72\x62\x38\x6b\x54\x42\x6d\x6b\x44\x57\x34\x2f\x64\x4d\x43\x6f\x59\x57\x36\x4e\x63\x4d\x57','\x57\x4f\x4a\x64\x4c\x43\x6b\x55\x69\x53\x6f\x6a\x62\x47','\x57\x4f\x68\x63\x47\x74\x58\x4e\x57\x36\x64\x64\x4b\x38\x6f\x6c\x57\x52\x4b','\x6d\x33\x65\x67\x57\x4f\x74\x64\x53\x57','\x57\x37\x79\x58\x6f\x74\x52\x64\x4b\x59\x30\x4e\x44\x61','\x57\x35\x46\x63\x4b\x43\x6f\x30\x45\x43\x6b\x43\x6d\x6d\x6b\x74\x78\x38\x6b\x75\x57\x35\x43\x6a','\x7a\x53\x6b\x53\x65\x6d\x6f\x63\x57\x51\x2f\x63\x51\x6d\x6f\x7a\x57\x4f\x53','\x57\x36\x56\x64\x4b\x38\x6f\x4f\x6e\x53\x6f\x6d\x63\x38\x6b\x2f\x57\x4f\x56\x63\x4f\x66\x33\x63\x55\x4d\x5a\x64\x4f\x71','\x57\x37\x6d\x59\x6e\x61\x43\x4e','\x57\x50\x4c\x6c\x78\x38\x6f\x66\x57\x50\x38\x6a\x57\x37\x42\x63\x55\x57','\x74\x75\x58\x6d\x76\x43\x6f\x55\x70\x61','\x57\x51\x4e\x64\x4a\x38\x6f\x37\x73\x57','\x57\x51\x52\x64\x48\x53\x6f\x37\x71\x6d\x6f\x76\x57\x50\x6c\x64\x52\x63\x30','\x72\x61\x66\x2f\x57\x34\x5a\x63\x51\x58\x33\x63\x55\x48\x68\x63\x51\x75\x42\x64\x4c\x43\x6f\x46\x6e\x71','\x57\x4f\x39\x63\x57\x37\x6c\x64\x4c\x53\x6f\x6e','\x57\x37\x71\x58\x57\x51\x5a\x63\x55\x6d\x6b\x37\x57\x34\x33\x64\x4d\x6d\x6f\x31\x6b\x77\x2f\x64\x47\x30\x2f\x64\x50\x47','\x57\x34\x48\x51\x46\x38\x6f\x74\x6e\x65\x79\x72\x6e\x47','\x57\x34\x62\x39\x42\x57','\x57\x34\x2f\x63\x50\x57\x31\x39\x57\x37\x52\x64\x48\x53\x6f\x63\x57\x51\x43','\x57\x52\x4e\x64\x48\x53\x6b\x50\x76\x43\x6f\x75\x57\x35\x52\x64\x52\x59\x47','\x57\x51\x78\x64\x48\x38\x6f\x50\x6e\x47\x4a\x64\x48\x4e\x4e\x63\x56\x61','\x57\x50\x78\x63\x4e\x31\x78\x64\x48\x32\x4b','\x57\x4f\x64\x64\x56\x53\x6b\x70\x57\x35\x6d','\x66\x38\x6b\x43\x63\x43\x6b\x4c\x69\x53\x6f\x59\x6e\x53\x6b\x44','\x71\x66\x31\x6c\x78\x71','\x57\x50\x4a\x63\x4f\x53\x6f\x66\x57\x50\x52\x64\x52\x38\x6f\x66\x57\x51\x6d','\x57\x50\x52\x63\x4c\x30\x46\x64\x56\x4b\x5a\x63\x48\x43\x6b\x34\x68\x71','\x57\x35\x76\x4a\x6b\x57\x34\x61','\x57\x37\x68\x63\x55\x38\x6f\x73\x57\x52\x4a\x64\x4a\x6d\x6f\x74\x57\x34\x6d','\x77\x6d\x6f\x79\x57\x34\x56\x64\x4b\x47\x76\x48\x6b\x53\x6f\x6e','\x57\x35\x2f\x63\x50\x43\x6f\x63\x57\x51\x37\x64\x4c\x61','\x41\x6d\x6b\x4e\x57\x4f\x56\x63\x53\x6d\x6f\x51','\x57\x51\x66\x4d\x57\x52\x69','\x57\x52\x37\x63\x51\x77\x37\x64\x52\x78\x75','\x72\x4c\x7a\x74\x57\x35\x34\x34','\x77\x4e\x74\x63\x54\x47','\x70\x6d\x6b\x76\x57\x36\x39\x6d\x57\x35\x43\x71','\x62\x53\x6f\x6b\x76\x53\x6b\x38\x75\x43\x6f\x36\x67\x6d\x6f\x4f\x57\x35\x33\x64\x4c\x43\x6b\x48','\x73\x65\x48\x68\x46\x38\x6f\x35','\x44\x6d\x6f\x51\x57\x34\x33\x64\x51\x6d\x6f\x54\x61\x57','\x41\x47\x66\x7a\x57\x51\x76\x39\x57\x51\x74\x64\x4a\x63\x53','\x57\x34\x33\x63\x52\x74\x58\x5a\x57\x36\x64\x64\x4d\x47','\x57\x50\x7a\x6d\x57\x35\x57\x6f\x57\x37\x42\x64\x53\x73\x75','\x57\x35\x44\x49\x66\x47\x69\x39','\x72\x4d\x70\x63\x54\x47','\x57\x50\x56\x64\x4d\x6d\x6b\x41\x57\x34\x78\x64\x47\x57','\x57\x4f\x2f\x64\x4a\x6d\x6b\x4d\x6d\x57','\x57\x36\x52\x64\x50\x67\x65\x4e\x57\x52\x70\x64\x4f\x47\x4f','\x57\x52\x2f\x64\x48\x43\x6b\x6a\x57\x36\x64\x64\x47\x71','\x57\x52\x5a\x63\x4a\x43\x6f\x73\x57\x34\x5a\x63\x4a\x61','\x6c\x31\x35\x66\x57\x51\x35\x55\x57\x51\x6c\x64\x52\x59\x4f','\x57\x36\x34\x61\x71\x47','\x57\x52\x62\x58\x57\x4f\x5a\x63\x4e\x53\x6b\x65\x57\x37\x65','\x57\x51\x31\x58\x57\x37\x5a\x64\x53\x53\x6f\x4c\x57\x50\x56\x63\x4e\x71','\x76\x53\x6f\x75\x57\x34\x74\x64\x4b\x48\x48\x59\x6b\x43\x6f\x58','\x41\x53\x6f\x5a\x63\x43\x6b\x46','\x57\x37\x62\x4a\x6d\x57\x4b\x47\x61\x64\x75\x7a','\x6d\x53\x6b\x51\x74\x53\x6f\x73\x6f\x61','\x57\x50\x6e\x51\x77\x38\x6f\x4e\x57\x50\x30','\x72\x6d\x6f\x54\x57\x4f\x2f\x63\x4a\x47\x4b','\x70\x76\x64\x64\x4f\x53\x6f\x7a\x57\x52\x61','\x57\x51\x56\x63\x49\x53\x6b\x2b\x44\x61','\x42\x57\x6e\x61\x57\x36\x48\x42','\x68\x67\x4a\x64\x4f\x43\x6f\x70\x57\x52\x47\x61\x57\x37\x46\x63\x4f\x57','\x76\x38\x6f\x47\x68\x65\x30\x74\x66\x71','\x6e\x43\x6f\x7a\x57\x50\x2f\x64\x4c\x71\x6d\x56\x57\x52\x4a\x63\x4e\x61','\x57\x35\x43\x6f\x57\x35\x47\x64\x57\x36\x42\x64\x56\x48\x65\x2b','\x61\x68\x56\x64\x50\x38\x6f\x6a\x57\x52\x30\x6f\x57\x36\x4b','\x42\x43\x6b\x77\x65\x53\x6f\x48\x69\x61','\x57\x50\x7a\x6c\x57\x37\x53\x70','\x79\x38\x6b\x33\x70\x53\x6f\x69\x6d\x47','\x57\x37\x57\x46\x74\x53\x6f\x51\x57\x51\x30','\x57\x4f\x31\x65\x57\x37\x4a\x64\x55\x6d\x6f\x2b','\x57\x52\x37\x64\x4d\x6d\x6b\x39\x57\x34\x4e\x64\x4c\x47','\x57\x37\x46\x63\x4f\x43\x6f\x73\x57\x52\x4b','\x6e\x31\x72\x4e\x57\x51\x7a\x54\x57\x51\x38','\x41\x4c\x2f\x63\x55\x4c\x75\x45','\x45\x32\x37\x63\x52\x38\x6f\x48\x7a\x47','\x57\x35\x75\x6b\x6e\x49\x4f','\x6f\x38\x6f\x70\x57\x51\x52\x64\x51\x61\x65\x52\x57\x51\x38','\x6a\x43\x6f\x34\x57\x50\x38\x55\x57\x52\x65','\x71\x5a\x79\x70\x71\x38\x6f\x53','\x70\x43\x6f\x33\x57\x35\x37\x64\x50\x6d\x6b\x48\x72\x53\x6f\x63\x57\x51\x5a\x63\x48\x61\x62\x72\x57\x36\x53\x48','\x46\x43\x6b\x65\x77\x4a\x5a\x63\x4d\x71','\x57\x35\x76\x77\x73\x6d\x6b\x6e\x6a\x4c\x68\x64\x4c\x43\x6b\x32','\x77\x6d\x6f\x4c\x57\x4f\x47','\x77\x4d\x46\x63\x53\x43\x6f\x52','\x57\x52\x4a\x63\x54\x38\x6f\x42\x57\x52\x78\x64\x4f\x57','\x57\x50\x78\x64\x52\x43\x6f\x65\x44\x53\x6f\x58','\x78\x66\x70\x63\x55\x71','\x77\x6d\x6f\x48\x57\x50\x52\x63\x48\x4a\x37\x64\x55\x77\x30\x72','\x7a\x38\x6f\x53\x6b\x78\x61\x34','\x6c\x38\x6b\x56\x74\x38\x6f\x7a\x6b\x76\x47','\x74\x4c\x4c\x68\x78\x6d\x6b\x33\x62\x6d\x6b\x6b\x57\x51\x30','\x45\x53\x6b\x6a\x75\x47','\x44\x6d\x6f\x2b\x57\x36\x6c\x64\x54\x43\x6f\x54\x62\x38\x6f\x61','\x73\x38\x6b\x73\x6c\x61','\x71\x73\x57\x2b\x42\x43\x6f\x57','\x6b\x59\x4e\x64\x55\x53\x6b\x71\x68\x38\x6b\x4a\x63\x71','\x77\x53\x6b\x79\x6b\x38\x6f\x6c\x6c\x47','\x62\x33\x68\x64\x52\x38\x6f\x79\x57\x52\x4f\x55\x57\x37\x68\x63\x4c\x61','\x57\x37\x33\x63\x47\x53\x6f\x38\x70\x78\x52\x64\x4b\x68\x42\x63\x4e\x47','\x57\x37\x4c\x5a\x72\x53\x6b\x5a\x61\x4e\x78\x64\x53\x57','\x77\x66\x6c\x63\x4f\x6d\x6f\x57\x71\x73\x71\x78\x67\x71','\x67\x75\x76\x73','\x74\x4b\x6a\x35','\x57\x50\x34\x62\x74\x57','\x57\x34\x6a\x46\x71\x38\x6b\x65\x6e\x65\x68\x64\x4d\x53\x6f\x65','\x78\x30\x74\x63\x52\x65\x6d\x5a\x57\x36\x79\x74','\x78\x53\x6f\x69\x57\x34\x46\x64\x4c\x64\x6a\x32','\x57\x50\x50\x6d\x75\x53\x6f\x65\x57\x36\x69','\x76\x43\x6f\x33\x64\x47','\x57\x50\x68\x63\x47\x66\x75','\x57\x50\x78\x64\x49\x6d\x6b\x49\x6d\x53\x6f\x6a\x65\x6d\x6b\x59\x79\x57','\x66\x65\x31\x7a\x57\x50\x4a\x64\x4a\x6d\x6b\x4f','\x6d\x53\x6b\x5a\x72\x43\x6f\x76\x6c\x75\x79\x68','\x62\x6d\x6f\x59\x57\x52\x68\x64\x47\x58\x53','\x57\x52\x33\x64\x4a\x38\x6b\x31\x44\x57\x70\x63\x4e\x64\x56\x64\x55\x71','\x57\x37\x79\x37\x43\x43\x6f\x4f\x57\x51\x6d','\x70\x57\x68\x63\x4a\x65\x37\x63\x4b\x57','\x61\x57\x56\x64\x53\x61\x62\x4e\x57\x52\x39\x42\x57\x4f\x5a\x64\x4e\x4a\x4f\x76\x7a\x64\x6d','\x42\x43\x6b\x44\x6e\x30\x2f\x64\x4d\x65\x37\x63\x54\x53\x6b\x41','\x62\x59\x2f\x63\x55\x75\x78\x63\x47\x61','\x78\x31\x31\x56','\x6b\x65\x75\x50\x57\x36\x57\x30\x57\x52\x74\x64\x51\x71\x47','\x57\x51\x39\x49\x67\x71','\x57\x34\x4f\x77\x62\x43\x6b\x73\x57\x37\x76\x79\x57\x51\x4a\x63\x4f\x64\x44\x67\x6a\x53\x6b\x6c\x7a\x57','\x76\x38\x6b\x43\x6e\x6d\x6f\x33\x57\x4f\x74\x63\x51\x43\x6f\x57\x57\x52\x34','\x57\x50\x33\x63\x51\x66\x56\x64\x55\x4d\x30','\x69\x57\x74\x64\x4f\x38\x6b\x73\x64\x57','\x6c\x43\x6b\x2f\x74\x6d\x6f\x43\x6f\x65\x69','\x66\x53\x6f\x4b\x57\x4f\x69\x53\x57\x51\x30','\x6e\x38\x6f\x34\x57\x4f\x43\x4e\x57\x51\x43','\x7a\x53\x6f\x52\x57\x4f\x68\x63\x54\x63\x6d','\x6b\x43\x6f\x79\x61\x77\x56\x64\x4d\x76\x30\x34\x57\x4f\x39\x62\x57\x36\x35\x71\x7a\x59\x30','\x78\x4d\x70\x64\x55\x6d\x6f\x53\x72\x73\x47\x78\x78\x47','\x57\x51\x4e\x63\x4f\x38\x6f\x66\x57\x4f\x4e\x64\x4d\x57','\x57\x37\x37\x63\x53\x43\x6f\x41\x57\x4f\x6d','\x44\x4b\x44\x71\x7a\x6d\x6f\x70','\x57\x35\x6e\x6b\x6a\x5a\x57\x49','\x57\x37\x70\x63\x4a\x53\x6f\x58\x70\x66\x53','\x76\x53\x6f\x53\x62\x31\x53','\x6a\x53\x6b\x64\x57\x34\x39\x6d\x57\x34\x79\x7a\x57\x50\x69','\x57\x4f\x56\x63\x55\x43\x6f\x72\x57\x36\x43','\x57\x34\x2f\x64\x55\x43\x6b\x70\x57\x4f\x4e\x64\x47\x53\x6f\x4c\x57\x52\x37\x63\x47\x68\x34','\x6f\x59\x61\x4c\x57\x37\x6c\x64\x53\x71','\x57\x4f\x50\x46\x57\x36\x4f\x6c\x57\x36\x46\x63\x56\x45\x6b\x62\x4c\x66\x57','\x57\x36\x35\x41\x41\x53\x6b\x6c\x6a\x71','\x72\x43\x6b\x41\x6d\x38\x6f\x33\x57\x50\x4b','\x69\x73\x2f\x64\x50\x43\x6b\x38\x63\x53\x6f\x47\x76\x6d\x6f\x38','\x57\x50\x52\x63\x4f\x53\x6f\x5a\x57\x34\x4e\x63\x52\x49\x61','\x62\x4b\x6d\x4d\x57\x52\x4e\x64\x51\x47','\x63\x6d\x6b\x4f\x66\x30\x30\x74\x66\x43\x6b\x43\x45\x47','\x72\x67\x4e\x63\x4d\x53\x6f\x47\x78\x73\x57\x78\x67\x71','\x63\x66\x50\x65','\x73\x38\x6b\x77\x70\x53\x6f\x32\x57\x52\x4a\x63\x47\x38\x6f\x47\x57\x50\x75','\x6e\x38\x6f\x2b\x57\x50\x47\x55\x57\x51\x5a\x63\x4c\x38\x6b\x41\x57\x50\x53','\x64\x38\x6b\x76\x73\x53\x6f\x31\x64\x47','\x62\x43\x6b\x6c\x57\x37\x4e\x64\x4c\x59\x44\x4e\x61\x6d\x6f\x7a','\x68\x68\x33\x64\x4f\x43\x6f\x6f\x57\x51\x43','\x57\x36\x6c\x64\x52\x4e\x79\x58\x57\x50\x47','\x57\x37\x47\x57\x63\x61\x57\x77','\x57\x51\x58\x2f\x57\x35\x4a\x64\x54\x53\x6f\x61','\x57\x37\x5a\x64\x55\x76\x30\x78\x57\x52\x2f\x64\x4f\x57\x43\x74','\x67\x38\x6b\x34\x57\x36\x54\x71\x57\x37\x53','\x66\x31\x35\x73\x57\x4f\x33\x64\x4c\x6d\x6b\x48\x57\x50\x6e\x66','\x69\x6d\x6b\x2b\x72\x47','\x7a\x71\x4f\x4a\x42\x38\x6f\x52\x6a\x57','\x57\x51\x31\x49\x57\x4f\x4a\x63\x4e\x38\x6b\x68\x57\x37\x37\x64\x56\x57','\x57\x35\x47\x42\x6d\x73\x69\x66\x62\x61','\x57\x34\x54\x71\x42\x6d\x6b\x6c\x67\x57','\x57\x34\x4e\x63\x4e\x72\x4c\x44\x57\x35\x65','\x57\x4f\x54\x77\x78\x43\x6f\x53\x57\x52\x38','\x6e\x65\x44\x53\x57\x52\x6e\x31\x57\x51\x42\x64\x52\x71','\x6b\x43\x6b\x7a\x57\x36\x6a\x42\x57\x34\x43','\x57\x52\x66\x4d\x57\x37\x56\x64\x52\x6d\x6f\x53\x57\x50\x37\x64\x4a\x43\x6f\x48','\x6d\x49\x6c\x63\x50\x4e\x78\x63\x4c\x61','\x71\x38\x6f\x79\x57\x34\x56\x64\x48\x64\x72\x53','\x57\x52\x6e\x6d\x57\x50\x4e\x63\x52\x53\x6b\x6d','\x6a\x43\x6b\x2f\x72\x53\x6f\x6f\x70\x61\x4f\x71\x6c\x61','\x57\x50\x46\x64\x4f\x6d\x6f\x66\x78\x6d\x6f\x6a','\x6d\x38\x6f\x71\x57\x51\x70\x64\x53\x58\x30\x2b\x57\x51\x75','\x6a\x38\x6b\x76\x57\x36\x39\x41\x57\x36\x79\x44\x57\x4f\x33\x64\x53\x57','\x57\x34\x48\x51\x73\x53\x6b\x62\x69\x65\x79\x62','\x72\x4c\x58\x44\x57\x37\x4b\x35\x57\x50\x6a\x30','\x69\x38\x6b\x76\x57\x36\x62\x7a\x57\x34\x61\x71','\x77\x4e\x74\x63\x49\x38\x6f\x32\x77\x63\x38\x43\x64\x61','\x57\x37\x2f\x63\x4f\x6d\x6f\x73','\x57\x34\x30\x72\x6b\x64\x65\x7a','\x75\x38\x6f\x73\x57\x34\x74\x64\x48\x73\x6e\x32\x6f\x43\x6f\x47','\x72\x66\x46\x63\x55\x4b\x75','\x57\x36\x61\x67\x74\x43\x6f\x42\x57\x52\x34','\x57\x50\x7a\x78\x57\x37\x47\x63','\x42\x65\x46\x63\x4e\x43\x6f\x31\x79\x47','\x57\x4f\x74\x63\x4f\x53\x6f\x38\x57\x35\x33\x63\x54\x73\x79','\x43\x4c\x5a\x63\x4d\x68\x75\x38','\x79\x66\x64\x64\x4b\x75\x56\x63\x4c\x43\x6b\x41\x61\x65\x72\x32','\x57\x36\x65\x36\x75\x53\x6f\x70\x57\x51\x34','\x57\x37\x70\x63\x49\x6d\x6f\x56\x68\x65\x4e\x64\x4c\x4e\x47','\x57\x36\x56\x63\x52\x6d\x6f\x68\x57\x4f\x64\x63\x4e\x57','\x57\x4f\x50\x75\x73\x6d\x6f\x6f\x57\x4f\x79','\x57\x4f\x76\x6c\x57\x37\x6c\x64\x47\x53\x6f\x46','\x69\x57\x4a\x63\x49\x67\x30','\x57\x52\x74\x63\x4c\x38\x6f\x30\x57\x35\x2f\x63\x4d\x57','\x74\x58\x47\x65\x57\x34\x52\x63\x4a\x38\x6f\x34\x57\x51\x7a\x76\x57\x4f\x70\x63\x51\x65\x44\x31','\x74\x65\x44\x39\x57\x36\x75\x53\x57\x50\x7a\x50\x79\x57','\x6d\x38\x6f\x79\x57\x4f\x38','\x57\x4f\x43\x41\x41\x38\x6f\x33\x63\x57','\x57\x37\x4f\x33\x41\x43\x6f\x58\x57\x52\x61','\x73\x53\x6f\x6d\x6c\x78\x71\x66','\x41\x38\x6b\x51\x57\x34\x46\x64\x56\x43\x6f\x33\x65\x43\x6b\x75\x57\x36\x6d','\x57\x50\x6a\x6b\x57\x36\x71\x51\x57\x37\x65','\x57\x36\x46\x63\x47\x53\x6f\x54\x6e\x75\x4e\x64\x4c\x4e\x75','\x62\x6d\x6f\x4d\x57\x51\x5a\x64\x56\x63\x43','\x57\x34\x61\x72\x6c\x71','\x57\x51\x39\x4d\x57\x36\x4b','\x61\x38\x6f\x75\x57\x4f\x68\x64\x55\x63\x61','\x42\x43\x6b\x45\x61\x72\x46\x64\x47\x4b\x6c\x63\x55\x43\x6b\x7a','\x71\x76\x50\x58\x57\x36\x4b\x55\x57\x4f\x65','\x72\x43\x6b\x78\x61\x6d\x6f\x31','\x70\x53\x6f\x69\x57\x4f\x6c\x64\x4b\x4a\x69','\x62\x65\x6e\x53\x57\x52\x6a\x38\x57\x52\x70\x64\x4d\x57\x79','\x42\x62\x43\x39\x7a\x38\x6f\x54\x6f\x30\x53','\x57\x36\x79\x61\x79\x43\x6f\x47\x57\x51\x7a\x55\x70\x4e\x61','\x6c\x31\x35\x49\x57\x51\x72\x33\x57\x4f\x4a\x64\x51\x57\x57','\x76\x76\x42\x63\x4c\x4c\x43\x32\x57\x36\x53\x67\x57\x50\x30','\x64\x53\x6f\x67\x57\x50\x71\x69\x57\x52\x6d'];_0x189c=function(){return _0x230e02;};return _0x189c();}
|
package/src/gep/paths.js
DELETED
|
@@ -1,522 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const os = require('os');
|
|
4
|
-
|
|
5
|
-
let _cachedRepoRoot = null;
|
|
6
|
-
|
|
7
|
-
// Resolve the git repository that evolver should treat as its work area.
|
|
8
|
-
//
|
|
9
|
-
// Precedence:
|
|
10
|
-
// 1. EVOLVER_REPO_ROOT (explicit override, always wins)
|
|
11
|
-
// 2. Nearest ancestor of process.cwd() that has a .git
|
|
12
|
-
// (user ran evolver from inside their project)
|
|
13
|
-
// 3. Nearest ancestor of evolver's own directory that has a .git
|
|
14
|
-
// (local npm install: evolver is inside the project's node_modules)
|
|
15
|
-
// 4. evolver's own directory if it has a .git (dev mode fallback)
|
|
16
|
-
// 5. Fall back to evolver's own directory.
|
|
17
|
-
//
|
|
18
|
-
// CWD is checked first because the user's intent is almost always to
|
|
19
|
-
// evolve the project they're standing in, not evolver itself. evolver
|
|
20
|
-
// self-evolution happens naturally when CWD *is* the evolver repo.
|
|
21
|
-
//
|
|
22
|
-
// To opt out, set EVOLVER_NO_PARENT_GIT=true. The older
|
|
23
|
-
// EVOLVER_USE_PARENT_GIT=true flag is still honored for forward
|
|
24
|
-
// compatibility but is no longer required.
|
|
25
|
-
function getRepoRoot() {
|
|
26
|
-
// Always check EVOLVER_REPO_ROOT first, even when a cached value exists.
|
|
27
|
-
// .env is loaded during index.js bootstrap AFTER this function has
|
|
28
|
-
// already been called at least once (for locating the .env file
|
|
29
|
-
// itself). Caching the pre-dotenv result would permanently shadow any
|
|
30
|
-
// EVOLVER_REPO_ROOT later populated from .env. See #526.
|
|
31
|
-
if (process.env.EVOLVER_REPO_ROOT) {
|
|
32
|
-
_cachedRepoRoot = process.env.EVOLVER_REPO_ROOT;
|
|
33
|
-
return _cachedRepoRoot;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (_cachedRepoRoot) return _cachedRepoRoot;
|
|
37
|
-
|
|
38
|
-
const ownDir = path.resolve(__dirname, '..', '..');
|
|
39
|
-
|
|
40
|
-
const noParent = String(process.env.EVOLVER_NO_PARENT_GIT || '').toLowerCase() === 'true';
|
|
41
|
-
// Older flag kept for backward compatibility. Setting it to 'false'
|
|
42
|
-
// explicitly is treated as an opt-out, mirroring EVOLVER_NO_PARENT_GIT.
|
|
43
|
-
const legacyFlag = process.env.EVOLVER_USE_PARENT_GIT;
|
|
44
|
-
const legacyOptOut = typeof legacyFlag === 'string' && legacyFlag.toLowerCase() === 'false';
|
|
45
|
-
|
|
46
|
-
// Both upward walks below must stop at the parent of the nearest
|
|
47
|
-
// `node_modules` ancestor — never escape into whatever `.git` happens
|
|
48
|
-
// to live above it (issue #541). On macOS with Homebrew, the global
|
|
49
|
-
// install lives at `/opt/homebrew/lib/node_modules/@evomap/evolver`
|
|
50
|
-
// and `/opt/homebrew` is itself a git repo; an unbounded walk
|
|
51
|
-
// therefore resolves repoRoot to `/opt/homebrew`, sending
|
|
52
|
-
// workspaceRoot / memoryDir / evolutionDir to a directory that
|
|
53
|
-
// doesn't belong to the user and silently producing evolution
|
|
54
|
-
// proposals for the wrong codebase.
|
|
55
|
-
//
|
|
56
|
-
// Boundary semantics: returns the parent of the nearest `node_modules`
|
|
57
|
-
// ancestor (inclusive — a `.git` at that parent IS still picked up),
|
|
58
|
-
// or null if `dir` is not inside any `node_modules` (dev clone /
|
|
59
|
-
// user project root). Callers stop AFTER checking the boundary path
|
|
60
|
-
// itself.
|
|
61
|
-
//
|
|
62
|
-
// For a local install (`<project>/node_modules/@evomap/evolver`), the
|
|
63
|
-
// parent of node_modules IS the user's project, so the boundary
|
|
64
|
-
// includes `<project>` and `<project>/.git` is still picked up
|
|
65
|
-
// correctly. For a dev clone, the boundary is null and the walk is
|
|
66
|
-
// unbounded as before.
|
|
67
|
-
function _nodeModulesBoundary(dir) {
|
|
68
|
-
const segments = dir.split(path.sep);
|
|
69
|
-
const nmIdx = segments.lastIndexOf('node_modules');
|
|
70
|
-
if (nmIdx <= 0) return null;
|
|
71
|
-
return segments.slice(0, nmIdx).join(path.sep) || path.sep;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function _walkForGit(start) {
|
|
75
|
-
const stopAt = _nodeModulesBoundary(start);
|
|
76
|
-
let dir = start;
|
|
77
|
-
while (dir !== path.dirname(dir)) {
|
|
78
|
-
if (fs.existsSync(path.join(dir, '.git'))) {
|
|
79
|
-
if (!process.env.EVOLVER_QUIET_PARENT_GIT) {
|
|
80
|
-
// Diagnostic, not data. Goes to stderr so it cannot poison
|
|
81
|
-
// a child process's stdout-as-JSON contract — the Stop hook
|
|
82
|
-
// emits JSON on stdout, and any caller invoking the hook via
|
|
83
|
-
// `execFileSync(...).stdout` + `JSON.parse(...)` would crash
|
|
84
|
-
// if this line landed there first. test/sessionEndHook.test.js
|
|
85
|
-
// was failing 5/5 locally for exactly this reason.
|
|
86
|
-
console.error('[evolver] Using host git repository at:', dir);
|
|
87
|
-
}
|
|
88
|
-
return dir;
|
|
89
|
-
}
|
|
90
|
-
if (stopAt !== null && dir === stopAt) break;
|
|
91
|
-
dir = path.dirname(dir);
|
|
92
|
-
}
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Walk upward from process.cwd() — the project the user is standing in.
|
|
97
|
-
// Bounded the same way as the ownDir walk: a user who `cd`s into the
|
|
98
|
-
// global install (e.g. `cd /opt/homebrew/lib/node_modules/@evomap/evolver`
|
|
99
|
-
// to debug) would otherwise hit `/opt/homebrew/.git` here BEFORE the
|
|
100
|
-
// ownDir walk runs, defeating its boundary. The boundary still
|
|
101
|
-
// includes the parent of node_modules, so a user `cd`'d into
|
|
102
|
-
// `<their-project>/node_modules/lodash` still has `<their-project>/.git`
|
|
103
|
-
// picked correctly.
|
|
104
|
-
if (!noParent && !legacyOptOut) {
|
|
105
|
-
const hit = _walkForGit(process.cwd());
|
|
106
|
-
if (hit) {
|
|
107
|
-
_cachedRepoRoot = hit;
|
|
108
|
-
return _cachedRepoRoot;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Walk upward from ownDir's parent (local install inside node_modules).
|
|
113
|
-
if (!noParent && !legacyOptOut) {
|
|
114
|
-
const hit = _walkForGit(path.dirname(ownDir));
|
|
115
|
-
if (hit) {
|
|
116
|
-
_cachedRepoRoot = hit;
|
|
117
|
-
return _cachedRepoRoot;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Fallback: evolver's own directory (dev mode or isolated install).
|
|
122
|
-
if (fs.existsSync(path.join(ownDir, '.git'))) {
|
|
123
|
-
_cachedRepoRoot = ownDir;
|
|
124
|
-
return _cachedRepoRoot;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Final fallback.
|
|
128
|
-
//
|
|
129
|
-
// Opt-out (EVOLVER_NO_PARENT_GIT=true / EVOLVER_USE_PARENT_GIT=false) means
|
|
130
|
-
// "isolated install, treat my own dir as the root" -> ownDir.
|
|
131
|
-
//
|
|
132
|
-
// Otherwise: for a dev clone, ownDir IS the package root and is correct. But
|
|
133
|
-
// for an npm install, ownDir is `<prefix>/node_modules/@evomap/evolver`,
|
|
134
|
-
// the install dir, NOT the user's project. Falling back to it makes the
|
|
135
|
-
// daemon FATAL with "Not a git repository (...\node_modules\@evomap\evolver)"
|
|
136
|
-
// and tell the user to `git init` inside the global install dir, the wrong
|
|
137
|
-
// place (#580 Bug 2). When ownDir is inside a node_modules, prefer
|
|
138
|
-
// process.cwd(): it is where the user is standing and where they should
|
|
139
|
-
// actually `git init`, so the FATAL message points at the right directory.
|
|
140
|
-
// This still satisfies #541's invariant (the cwd/ownDir walks above already
|
|
141
|
-
// returned nothing, so we are not escaping to any host .git).
|
|
142
|
-
if (!noParent && !legacyOptOut && _nodeModulesBoundary(ownDir) !== null) {
|
|
143
|
-
_cachedRepoRoot = process.cwd();
|
|
144
|
-
return _cachedRepoRoot;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
_cachedRepoRoot = ownDir;
|
|
148
|
-
return _cachedRepoRoot;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function getWorkspaceRoot() {
|
|
152
|
-
if (process.env.OPENCLAW_WORKSPACE) {
|
|
153
|
-
return process.env.OPENCLAW_WORKSPACE;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const repoRoot = getRepoRoot();
|
|
157
|
-
const workspaceDir = path.join(repoRoot, 'workspace');
|
|
158
|
-
if (fs.existsSync(workspaceDir)) {
|
|
159
|
-
return workspaceDir;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return repoRoot;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function getLogsDir() {
|
|
166
|
-
return process.env.EVOLVER_LOGS_DIR || path.join(getWorkspaceRoot(), 'logs');
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
function getEvolverLogPath() {
|
|
170
|
-
return path.join(getLogsDir(), 'evolver_loop.log');
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
function getMemoryDir() {
|
|
174
|
-
return process.env.MEMORY_DIR || path.join(getWorkspaceRoot(), 'memory');
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function getSessionScope() {
|
|
178
|
-
const raw = String(process.env.EVOLVER_SESSION_SCOPE || '').trim();
|
|
179
|
-
if (!raw) return null;
|
|
180
|
-
const safe = raw.replace(/[^a-zA-Z0-9_\-\.]/g, '_').slice(0, 128);
|
|
181
|
-
if (!safe || /^\.{1,2}$/.test(safe) || /\.\./.test(safe)) return null;
|
|
182
|
-
return safe;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
function getEvolutionDir() {
|
|
186
|
-
const baseDir = process.env.EVOLUTION_DIR || path.join(getMemoryDir(), 'evolution');
|
|
187
|
-
const scope = getSessionScope();
|
|
188
|
-
if (scope) {
|
|
189
|
-
return path.join(baseDir, 'scopes', scope);
|
|
190
|
-
}
|
|
191
|
-
return baseDir;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function getGepAssetsDir() {
|
|
195
|
-
const baseDir = process.env.GEP_ASSETS_DIR || path.join(getWorkspaceRoot(), '.evolver', 'gep');
|
|
196
|
-
const scope = getSessionScope();
|
|
197
|
-
if (scope) {
|
|
198
|
-
return path.join(baseDir, 'scopes', scope);
|
|
199
|
-
}
|
|
200
|
-
return baseDir;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function getBundledGepAssetsDir() {
|
|
204
|
-
return path.join(getEvolverInstallRoot(), 'assets', 'gep');
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
function getSkillsDir() {
|
|
208
|
-
return process.env.SKILLS_DIR || path.join(getWorkspaceRoot(), 'skills');
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Resolve the OpenClaw `sessions` directory for the agent that actually
|
|
212
|
-
// matches the current EVOLVER_SESSION_SCOPE (fixes #371).
|
|
213
|
-
//
|
|
214
|
-
// Precedence:
|
|
215
|
-
// 1. AGENT_SESSIONS_DIR explicit override
|
|
216
|
-
// 2. EVOLVER_SESSION_SCOPE with a `workspace-<agent>` prefix =>
|
|
217
|
-
// ~/.openclaw/agents/<agent>/sessions
|
|
218
|
-
// 3. AGENT_NAME (defaults to "main") pre-#371 behavior
|
|
219
|
-
function getAgentSessionsDir() {
|
|
220
|
-
if (process.env.AGENT_SESSIONS_DIR) return process.env.AGENT_SESSIONS_DIR;
|
|
221
|
-
|
|
222
|
-
const scope = getSessionScope();
|
|
223
|
-
let agentName = null;
|
|
224
|
-
if (scope) {
|
|
225
|
-
const match = /^workspace-(.+)$/.exec(scope);
|
|
226
|
-
if (match) agentName = match[1];
|
|
227
|
-
}
|
|
228
|
-
if (!agentName) agentName = process.env.AGENT_NAME || 'main';
|
|
229
|
-
|
|
230
|
-
// Honor an explicit HOME override (used by tests to redirect to a fake
|
|
231
|
-
// home) before falling back to os.homedir(). On POSIX, os.homedir() also
|
|
232
|
-
// reads $HOME first, so this is a no-op in practice on macOS/Linux. On
|
|
233
|
-
// Windows, os.homedir() reads %USERPROFILE% and ignores HOME -- without
|
|
234
|
-
// this fallback, test/paths.test.js cannot inject a fake home and the
|
|
235
|
-
// tests fail with C:\Users\... vs the test's \tmp\home\... expectation.
|
|
236
|
-
// Same pattern as the reset-local-secret fix in eb423dc.
|
|
237
|
-
const home = process.env.HOME || os.homedir();
|
|
238
|
-
return path.join(home, '.openclaw', 'agents', agentName, 'sessions');
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// Read the first `maxBytes` of a session .jsonl file and extract the `cwd`
|
|
242
|
-
// field from its header record (fixes #371, bug 2). The pre-fix matcher
|
|
243
|
-
// tailed the file, so it never saw the header. This helper is O(1) on file
|
|
244
|
-
// size. Returns null on any read/parse failure.
|
|
245
|
-
function readSessionCwdFromHead(sessionFilePath, maxBytes) {
|
|
246
|
-
const cap = typeof maxBytes === 'number' && maxBytes > 0 ? maxBytes : 800;
|
|
247
|
-
try {
|
|
248
|
-
if (!fs.existsSync(sessionFilePath)) return null;
|
|
249
|
-
const fd = fs.openSync(sessionFilePath, 'r');
|
|
250
|
-
try {
|
|
251
|
-
const stat = fs.fstatSync(fd);
|
|
252
|
-
const readSize = Math.min(cap, stat.size);
|
|
253
|
-
if (readSize <= 0) return null;
|
|
254
|
-
const buf = Buffer.alloc(readSize);
|
|
255
|
-
fs.readSync(fd, buf, 0, readSize, 0);
|
|
256
|
-
const newline = buf.indexOf('\n');
|
|
257
|
-
const slice = newline >= 0 ? buf.slice(0, newline) : buf;
|
|
258
|
-
const record = JSON.parse(slice.toString('utf8'));
|
|
259
|
-
if (record && typeof record.cwd === 'string') return record.cwd;
|
|
260
|
-
return null;
|
|
261
|
-
} finally {
|
|
262
|
-
fs.closeSync(fd);
|
|
263
|
-
}
|
|
264
|
-
} catch (_err) {
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function getNarrativePath() {
|
|
270
|
-
return path.join(getEvolutionDir(), 'evolution_narrative.md');
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
function getEvolutionPrinciplesPath() {
|
|
274
|
-
const repoRoot = getRepoRoot();
|
|
275
|
-
const custom = path.join(repoRoot, 'EVOLUTION_PRINCIPLES.md');
|
|
276
|
-
if (fs.existsSync(custom)) return custom;
|
|
277
|
-
return path.join(repoRoot, 'assets', 'gep', 'EVOLUTION_PRINCIPLES.md');
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
function getReflectionLogPath() {
|
|
281
|
-
return path.join(getEvolutionDir(), 'reflection_log.jsonl');
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
// Resolve the evolver INSTALLATION directory (the package containing this file),
|
|
285
|
-
// independent of any host git repo or process.cwd().
|
|
286
|
-
//
|
|
287
|
-
// Use this — never getRepoRoot() — for any operation that mutates evolver's
|
|
288
|
-
// own files (force-update, self-PR, integrity rewrites, etc.). getRepoRoot()
|
|
289
|
-
// preferentially returns the user's surrounding project so that evolution
|
|
290
|
-
// signals are scoped to *their* code; using it for self-mutation will
|
|
291
|
-
// overwrite the user's project with evolver's package contents (issue #51).
|
|
292
|
-
//
|
|
293
|
-
// path.resolve(__dirname, '..', '..') is stable across all install modes:
|
|
294
|
-
// - global npm: /usr/lib/node_modules/@evomap/evolver/src/gep/paths.js
|
|
295
|
-
// → /usr/lib/node_modules/@evomap/evolver
|
|
296
|
-
// - local install: <project>/node_modules/@evomap/evolver/src/gep/paths.js
|
|
297
|
-
// → <project>/node_modules/@evomap/evolver
|
|
298
|
-
// - dev clone: /home/user/evolver/src/gep/paths.js → /home/user/evolver
|
|
299
|
-
function getEvolverInstallRoot() {
|
|
300
|
-
return path.resolve(__dirname, '..', '..');
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// Resolve the per-user `~/.evomap` directory, with `EVOLVER_HOME` env var
|
|
304
|
-
// override. Lazy (function call, not a module-level `const`) so tests can
|
|
305
|
-
// flip `EVOLVER_HOME` per case without monkey-patching `os.homedir`.
|
|
306
|
-
//
|
|
307
|
-
// Existing call sites used to duplicate `path.join(os.homedir(), '.evomap')`
|
|
308
|
-
// across ~9 modules; about two thirds silently ignored `EVOLVER_HOME` (it
|
|
309
|
-
// worked for stake bootstrap and claim nudge but not for node-id, device-id,
|
|
310
|
-
// feature flags, etc.). #114 consolidates onto this helper so the override
|
|
311
|
-
// is uniform and tests don't need to monkey-patch the global homedir
|
|
312
|
-
// function (which doesn't compose with `node --test` parallel execution).
|
|
313
|
-
function getEvomapDir() {
|
|
314
|
-
return process.env.EVOLVER_HOME || path.join(os.homedir(), '.evomap');
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Join sub-segments under `~/.evomap`. Just a convenience wrapper so call
|
|
318
|
-
// sites don't have to `path.join(getEvomapDir(), 'mailbox', 'state.json')`
|
|
319
|
-
// in two pieces.
|
|
320
|
-
function getEvomapPath(...segments) {
|
|
321
|
-
return path.join(getEvomapDir(), ...segments);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Per-workspace random secret used to attest that a memory_graph.jsonl
|
|
325
|
-
// entry was written by the same workspace that's now reading it. Stored
|
|
326
|
-
// at <workspace>/.evolver/workspace-id with mode 0600 and lazily created
|
|
327
|
-
// on first call. Returns null on read/write errors so callers can fall
|
|
328
|
-
// back to legacy cwd-tag matching.
|
|
329
|
-
//
|
|
330
|
-
// Why this exists: when memory_graph.jsonl lives at the user-level path
|
|
331
|
-
// (~/.evolver/memory/evolution/memory_graph.jsonl, used by npm-global
|
|
332
|
-
// installs), it's shared across every workspace under the same uid. The
|
|
333
|
-
// PR #108 cwd-tag layer scopes reads to the current cwd, but `cwd` is a
|
|
334
|
-
// plain-text self-report — any process writing the shared file can
|
|
335
|
-
// claim a different workspace. workspace-id replaces that self-report
|
|
336
|
-
// with a secret that only the legitimate workspace's evolver knows
|
|
337
|
-
// (Bugbot PR #108 round-3 Agentic Security Review MEDIUM).
|
|
338
|
-
//
|
|
339
|
-
// Issue #111 Phase 1: optionally backs the secret with the OS keychain
|
|
340
|
-
// (`@napi-rs/keyring` optional dep) to close the same-uid readability
|
|
341
|
-
// gap. Mode is controlled by `EVOLVER_WORKSPACE_KEYCHAIN` (auto/force/
|
|
342
|
-
// off, default `auto`). FS file is RETAINED on successful keychain
|
|
343
|
-
// migration so bun-compiled binaries (which can't `require()` the
|
|
344
|
-
// addon yet — Phase 2) still see the same id when handing off to a
|
|
345
|
-
// node-CLI session in the same workspace.
|
|
346
|
-
|
|
347
|
-
// Read the FS-backed workspace-id at <workspace>/.evolver/workspace-id.
|
|
348
|
-
// Returns the id on a clean read, null on any error or missing file.
|
|
349
|
-
// Symlink rejection matches the pre-keychain hardening from PR #109.
|
|
350
|
-
function _readWorkspaceIdFromFs(file) {
|
|
351
|
-
const dir = path.dirname(file);
|
|
352
|
-
try {
|
|
353
|
-
const dirStat = fs.lstatSync(dir, { throwIfNoEntry: false });
|
|
354
|
-
if (dirStat && dirStat.isSymbolicLink()) return null;
|
|
355
|
-
const fileStat = fs.lstatSync(file, { throwIfNoEntry: false });
|
|
356
|
-
if (!fileStat) return null;
|
|
357
|
-
if (fileStat.isSymbolicLink() || !fileStat.isFile()) return null;
|
|
358
|
-
const raw = fs.readFileSync(file, 'utf8').trim();
|
|
359
|
-
if (raw && /^[a-f0-9]{32,}$/i.test(raw)) return raw;
|
|
360
|
-
return null;
|
|
361
|
-
} catch {
|
|
362
|
-
return null;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// Atomically create <workspace>/.evolver/workspace-id with the given id
|
|
367
|
-
// (or generate one if `id` is null). Returns the id that ended up on
|
|
368
|
-
// disk, or null on any unrecoverable error. EEXIST races re-read.
|
|
369
|
-
function _writeWorkspaceIdToFs(file, id) {
|
|
370
|
-
const dir = path.dirname(file);
|
|
371
|
-
try {
|
|
372
|
-
// Refuse to write if `.evolver` is a symlink. mkdirSync({recursive:true})
|
|
373
|
-
// happily traverses an existing symlinked directory and the subsequent
|
|
374
|
-
// open() lands the secret file in the attacker-controlled target —
|
|
375
|
-
// O_NOFOLLOW only guards the FINAL path component, not intermediate
|
|
376
|
-
// directories. The pre-refactor monolithic getWorkspaceId() returned
|
|
377
|
-
// null on a symlinked dir before reaching the write; preserve that
|
|
378
|
-
// here (Bugbot PR #121 round-1 HIGH; original guard PR #109 round-2 HIGH).
|
|
379
|
-
const dirStat = fs.lstatSync(dir, { throwIfNoEntry: false });
|
|
380
|
-
if (dirStat && dirStat.isSymbolicLink()) return null;
|
|
381
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
382
|
-
const payload = id || require('crypto').randomBytes(16).toString('hex');
|
|
383
|
-
// Atomic create-and-fail-if-exists so we never overwrite an
|
|
384
|
-
// attacker-pre-placed file (TOCTOU between lstat and writeFileSync
|
|
385
|
-
// could otherwise race a symlink in). O_NOFOLLOW also refuses to
|
|
386
|
-
// follow a symlink that appears between the lstat and open. Both
|
|
387
|
-
// flags exist on Linux/macOS; on Windows O_NOFOLLOW is silently
|
|
388
|
-
// ignored, but Windows has no symlink-by-default risk.
|
|
389
|
-
// NOTE(windows): mode 0o600 passed to openSync is silently ignored on
|
|
390
|
-
// Windows. The workspace-id file will NOT be restricted to owner-read-only.
|
|
391
|
-
// Only Windows user-profile directory ACLs provide isolation. To get
|
|
392
|
-
// proper per-user encryption on Windows, install @napi-rs/keyring — the
|
|
393
|
-
// keychain path above will store the id in Credential Manager (DPAPI)
|
|
394
|
-
// instead of this plaintext file.
|
|
395
|
-
const flags = fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL |
|
|
396
|
-
(fs.constants.O_NOFOLLOW || 0);
|
|
397
|
-
let fd;
|
|
398
|
-
try {
|
|
399
|
-
fd = fs.openSync(file, flags, 0o600);
|
|
400
|
-
} catch (e) {
|
|
401
|
-
if (e && e.code === 'EEXIST') {
|
|
402
|
-
// Another process beat us — re-read with the same symlink guards.
|
|
403
|
-
return _readWorkspaceIdFromFs(file);
|
|
404
|
-
}
|
|
405
|
-
// ELOOP / EMLINK from O_NOFOLLOW hitting a symlink — refuse.
|
|
406
|
-
return null;
|
|
407
|
-
}
|
|
408
|
-
try {
|
|
409
|
-
fs.writeSync(fd, payload + '\n', 0, 'utf8');
|
|
410
|
-
} finally {
|
|
411
|
-
fs.closeSync(fd);
|
|
412
|
-
}
|
|
413
|
-
// Best-effort chmod: silently ignored on Windows (no equivalent ACL API).
|
|
414
|
-
try { fs.chmodSync(file, 0o600); } catch { /* best-effort; no-op on Windows */ }
|
|
415
|
-
return payload;
|
|
416
|
-
} catch {
|
|
417
|
-
return null;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
function getWorkspaceId() {
|
|
422
|
-
if (process.env.EVOLVER_WORKSPACE_ID) return String(process.env.EVOLVER_WORKSPACE_ID);
|
|
423
|
-
const workspaceRoot = getWorkspaceRoot();
|
|
424
|
-
const dir = path.join(workspaceRoot, '.evolver');
|
|
425
|
-
const file = path.join(dir, 'workspace-id');
|
|
426
|
-
|
|
427
|
-
let mode = 'off';
|
|
428
|
-
let keychain = null;
|
|
429
|
-
try {
|
|
430
|
-
keychain = require('./workspaceKeychain');
|
|
431
|
-
mode = keychain.getMode();
|
|
432
|
-
} catch {
|
|
433
|
-
// workspaceKeychain.js missing — degrade silently to FS-only.
|
|
434
|
-
mode = 'off';
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
if (mode !== 'off' && keychain) {
|
|
438
|
-
const addonAvailable = keychain.loadAddon() !== null;
|
|
439
|
-
if (mode === 'force' && !addonAvailable) {
|
|
440
|
-
throw new Error(
|
|
441
|
-
'EVOLVER_WORKSPACE_KEYCHAIN=force but @napi-rs/keyring is not installed. ' +
|
|
442
|
-
'Install it (`npm i @napi-rs/keyring`) or set EVOLVER_WORKSPACE_KEYCHAIN=auto/off.'
|
|
443
|
-
);
|
|
444
|
-
}
|
|
445
|
-
if (addonAvailable) {
|
|
446
|
-
const hit = keychain.readFromKeychain(workspaceRoot);
|
|
447
|
-
if (hit.available && hit.id) return hit.id;
|
|
448
|
-
|
|
449
|
-
// `force` must NEVER fall back to FS read/write — that would
|
|
450
|
-
// silently re-introduce same-uid plaintext exposure of the
|
|
451
|
-
// workspace secret, which is exactly what `force` exists to
|
|
452
|
-
// prevent (Bugbot PR #121 round-2 MEDIUM Agentic Security).
|
|
453
|
-
// Generate a fresh id and write it ONLY to the keychain; if
|
|
454
|
-
// that write fails, throw rather than mirror to FS.
|
|
455
|
-
if (mode === 'force') {
|
|
456
|
-
if (hit.available) {
|
|
457
|
-
// Keychain reachable but empty — mint and write keychain-only.
|
|
458
|
-
const newId = require('crypto').randomBytes(16).toString('hex');
|
|
459
|
-
if (!keychain.writeToKeychain(workspaceRoot, newId)) {
|
|
460
|
-
throw new Error(
|
|
461
|
-
'EVOLVER_WORKSPACE_KEYCHAIN=force: keychain write failed; ' +
|
|
462
|
-
'refusing to fall back to filesystem secret.'
|
|
463
|
-
);
|
|
464
|
-
}
|
|
465
|
-
return newId;
|
|
466
|
-
}
|
|
467
|
-
// Addon loaded but read claims unavailable (e.g. locked
|
|
468
|
-
// keyring on Linux, no D-Bus session). Refuse rather than
|
|
469
|
-
// silently degrade.
|
|
470
|
-
throw new Error(
|
|
471
|
-
'EVOLVER_WORKSPACE_KEYCHAIN=force: keychain reports unavailable ' +
|
|
472
|
-
'(locked keyring / no session?); refusing to fall back to filesystem.'
|
|
473
|
-
);
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// mode === 'auto', keychain miss — try to migrate an existing
|
|
477
|
-
// FS secret in.
|
|
478
|
-
const fsId = _readWorkspaceIdFromFs(file);
|
|
479
|
-
if (fsId) {
|
|
480
|
-
keychain.writeToKeychain(workspaceRoot, fsId); // best-effort
|
|
481
|
-
return fsId;
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
// No secret anywhere — generate, write FS atomically, then
|
|
485
|
-
// mirror to keychain. FS write is the source of truth for the
|
|
486
|
-
// value (race-resistant via O_EXCL); keychain is the upgrade.
|
|
487
|
-
const newId = _writeWorkspaceIdToFs(file, null);
|
|
488
|
-
if (!newId) return null;
|
|
489
|
-
keychain.writeToKeychain(workspaceRoot, newId); // best-effort
|
|
490
|
-
return newId;
|
|
491
|
-
}
|
|
492
|
-
// mode === 'auto' && addon unavailable → fall through to FS.
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
// FS-only path (mode === 'off' or auto-fallback). Identical to the
|
|
496
|
-
// pre-#111 implementation in observable behavior.
|
|
497
|
-
const existing = _readWorkspaceIdFromFs(file);
|
|
498
|
-
if (existing) return existing;
|
|
499
|
-
return _writeWorkspaceIdToFs(file, null);
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
module.exports = {
|
|
503
|
-
getRepoRoot,
|
|
504
|
-
getEvolverInstallRoot,
|
|
505
|
-
getWorkspaceRoot,
|
|
506
|
-
getLogsDir,
|
|
507
|
-
getEvolverLogPath,
|
|
508
|
-
getMemoryDir,
|
|
509
|
-
getEvolutionDir,
|
|
510
|
-
getGepAssetsDir,
|
|
511
|
-
getBundledGepAssetsDir,
|
|
512
|
-
getSkillsDir,
|
|
513
|
-
getSessionScope,
|
|
514
|
-
getAgentSessionsDir,
|
|
515
|
-
getWorkspaceId,
|
|
516
|
-
readSessionCwdFromHead,
|
|
517
|
-
getNarrativePath,
|
|
518
|
-
getEvolutionPrinciplesPath,
|
|
519
|
-
getReflectionLogPath,
|
|
520
|
-
getEvomapDir,
|
|
521
|
-
getEvomapPath,
|
|
522
|
-
};
|