apt-mcp-agent-setup 3.4.0 → 3.5.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 +6 -1
- package/bin/cli.js +1 -1
- package/bundle/NOTICES.md +0 -0
- package/bundle/core.enc +0 -0
- package/bundle/mcp-rules.enc +0 -0
- package/bundle/skills-aso.enc +0 -0
- package/bundle/skills-ba.enc +0 -0
- package/bundle/skills-base.enc +0 -0
- package/bundle/skills-be.enc +0 -0
- package/bundle/skills-design.enc +0 -0
- package/bundle/skills-fe.enc +0 -0
- package/bundle/skills-marketing.enc +0 -0
- package/bundle/skills-mobile.enc +0 -0
- package/bundle/skills-pm.enc +0 -0
- package/docs/apt-3.5.0-migration.md +37 -0
- package/docs/technical-sources-release-checklist.md +14 -0
- package/docs/technical-sources.md +125 -0
- package/docs/upstream-manifest.json +89 -0
- package/integrity-manifest.json +124 -108
- package/package.json +1 -1
- package/release-check.js +4 -2
- package/source-skills-lock.json +311 -0
- package/src/backends/browser-tools.js +1 -1
- package/src/backends/index-command.js +1 -1
- package/src/backends/index-store.js +1 -1
- package/src/backends/profiles.js +1 -1
- package/src/core/admission-fence.js +1 -1
- package/src/core/aso-import.js +1 -1
- package/src/core/caller-context.js +1 -1
- package/src/core/catalog.js +1 -1
- package/src/core/claude-caller-authority.js +1 -1
- package/src/core/claude-invocation.js +1 -1
- package/src/core/claude-native.js +1 -1
- package/src/core/claude-plan.js +1 -1
- package/src/core/claude-worker-transcript.js +1 -1
- package/src/core/codex-host-metadata.js +1 -1
- package/src/core/codex-transcript-receipt.js +1 -1
- package/src/core/context-metrics.js +1 -1
- package/src/core/doctor.js +1 -1
- package/src/core/draining-completion.js +1 -1
- package/src/core/execution.js +1 -1
- package/src/core/git-context.js +1 -0
- package/src/core/hook-bridge.js +1 -1
- package/src/core/host-adapters.js +1 -1
- package/src/core/ipc-envelope.js +1 -1
- package/src/core/memory-scope.js +1 -0
- package/src/core/memory-store.js +1 -1
- package/src/core/model-inventory.js +1 -1
- package/src/core/model-routing.js +1 -1
- package/src/core/native-dispatch.js +1 -1
- package/src/core/node-version.js +1 -1
- package/src/core/npm-cli.js +1 -1
- package/src/core/owned-command-child.js +1 -0
- package/src/core/owned-command.js +1 -0
- package/src/core/owned-lock.js +1 -1
- package/src/core/owned-process.js +1 -0
- package/src/core/presentations.js +1 -1
- package/src/core/quality-artifacts.js +1 -1
- package/src/core/quality.js +1 -1
- package/src/core/read-command.js +1 -0
- package/src/core/readonly-skill.js +1 -0
- package/src/core/resource-transaction.js +1 -1
- package/src/core/run-compatibility.js +1 -1
- package/src/core/runtime-info.js +1 -1
- package/src/core/runtime-ownership.js +1 -1
- package/src/core/session.js +1 -1
- package/src/core/skill-companions.js +1 -1
- package/src/core/skill-names.js +1 -1
- package/src/core/storage-retry.js +1 -0
- package/src/core/tool-contracts.js +1 -1
- package/src/core/update-control.js +1 -1
- package/src/core/upgrade-runs.js +1 -1
- package/src/core/upgrade-stop.js +1 -1
- package/src/core/windows-job.js +1 -0
- package/src/core/windows-job.ps1 +75 -0
- package/src/core/workspace-generation.js +1 -1
- package/src/core/workspace-path.js +1 -1
- package/src/installer/bounded-command.js +1 -1
- package/src/installer/candidate-preflight.js +1 -1
- package/src/installer/connection-activation.js +1 -1
- package/src/installer/connection-supervisor.js +1 -1
- package/src/installer/deployment-draft.js +1 -1
- package/src/installer/gateway-context.js +1 -1
- package/src/installer/gateway-migration.js +1 -1
- package/src/installer/gateway-runtime.js +1 -1
- package/src/installer/global-setup.js +1 -1
- package/src/installer/hook-context-client.js +1 -1
- package/src/installer/host-hooks.js +1 -1
- package/src/installer/managed-config.js +1 -1
- package/src/installer/platform-config.js +1 -1
- package/src/installer/prerequisites.js +1 -1
- package/src/installer/presentations.js +1 -1
- package/src/installer/project-setup.js +1 -1
- package/src/installer/registration-closure.js +1 -1
- package/src/installer/registration-plan.js +1 -1
- package/src/installer/registration-receipt.js +1 -1
- package/src/installer/registrations.js +1 -1
- package/src/installer/runtime-activation.js +1 -1
- package/src/installer/runtime-child.js +1 -1
- package/src/installer/runtime-lock.js +1 -1
- package/src/installer/runtime-store.js +1 -1
- package/src/installer/runtime-supervisor.js +1 -1
- package/src/installer/setup-wizard.js +1 -1
- package/src/installer/update-addons.js +1 -1
- package/src/installer/update-executor.js +1 -1
- package/src/installer/workspace-registry.js +1 -1
- package/src/installer/workspace-transaction.js +1 -1
- package/src/installer/workspace-update.js +1 -1
- package/src/license/crypto.js +1 -1
- package/src/license/fingerprint.js +1 -1
- package/src/license/terms.js +1 -1
- package/src/license/verify.js +1 -1
- package/src/presets/index.js +1 -1
- package/src/proxy/backends.js +1 -1
- package/src/proxy/browser-sessions.js +1 -1
- package/src/proxy/core-tools.js +1 -1
- package/src/proxy/pipeline.js +1 -1
- package/src/proxy/public-catalog.js +1 -1
- package/src/proxy/router.config.js +1 -1
- package/src/proxy/router.js +1 -1
- package/src/proxy/server.js +1 -1
- package/src/proxy/workspace-gateway.js +1 -1
- package/technical-sources-check.js +249 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';const _0x484445=_0x512b;(function(_0x37ec24,_0x2c856d){const _0x93c6d0=_0x512b,_0x4023f2=_0x37ec24();while(!![]){try{const _0x14b513=parseInt(_0x93c6d0(0x1d8))/0x1+-parseInt(_0x93c6d0(0x1ca))/0x2+parseInt(_0x93c6d0(0x198))/0x3*(-parseInt(_0x93c6d0(0x1cc))/0x4)+parseInt(_0x93c6d0(0x1b5))/0x5+parseInt(_0x93c6d0(0x1d6))/0x6*(-parseInt(_0x93c6d0(0x1ee))/0x7)+parseInt(_0x93c6d0(0x1b1))/0x8*(-parseInt(_0x93c6d0(0x194))/0x9)+parseInt(_0x93c6d0(0x188))/0xa;if(_0x14b513===_0x2c856d)break;else _0x4023f2['push'](_0x4023f2['shift']());}catch(_0x462501){_0x4023f2['push'](_0x4023f2['shift']());}}}(_0xbc1c,0x76bed));function _0x512b(_0x14fe92,_0x5768d1){_0x14fe92=_0x14fe92-0x186;const _0xbc1c05=_0xbc1c();let _0x512b44=_0xbc1c05[_0x14fe92];if(_0x512b['KSLeOD']===undefined){var _0xbf8178=function(_0x6c31d3){const _0x46ee70='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5eb0df='',_0x2f776f='';for(let _0x4cb1c3=0x0,_0x45a704,_0x424cc4,_0x318d80=0x0;_0x424cc4=_0x6c31d3['charAt'](_0x318d80++);~_0x424cc4&&(_0x45a704=_0x4cb1c3%0x4?_0x45a704*0x40+_0x424cc4:_0x424cc4,_0x4cb1c3++%0x4)?_0x5eb0df+=String['fromCharCode'](0xff&_0x45a704>>(-0x2*_0x4cb1c3&0x6)):0x0){_0x424cc4=_0x46ee70['indexOf'](_0x424cc4);}for(let _0x25a277=0x0,_0x2002de=_0x5eb0df['length'];_0x25a277<_0x2002de;_0x25a277++){_0x2f776f+='%'+('00'+_0x5eb0df['charCodeAt'](_0x25a277)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2f776f);};_0x512b['azRpVZ']=_0xbf8178,_0x512b['BJQlIK']={},_0x512b['KSLeOD']=!![];}const _0x111606=_0xbc1c05[0x0],_0x2ede86=_0x14fe92+_0x111606,_0x367efc=_0x512b['BJQlIK'][_0x2ede86];return!_0x367efc?(_0x512b44=_0x512b['azRpVZ'](_0x512b44),_0x512b['BJQlIK'][_0x2ede86]=_0x512b44):_0x512b44=_0x367efc,_0x512b44;}const crypto=require(_0x484445(0x1ac)),{WorkspaceRegistry}=require(_0x484445(0x1ab)),{gatewayCatalog}=require('./public-catalog'),{sameWorkspace}=require(_0x484445(0x1f1)),contracts=require('../core/tool-contracts'),fail=(_0x340b9c,_0x57835e=_0x340b9c)=>{const _0x4c265a=_0x484445,_0xb1503b={};_0xb1503b[_0x4c265a(0x195)]=_0x340b9c;throw Object[_0x4c265a(0x199)](new Error(_0x57835e),_0xb1503b);},content=_0x460ba5=>({'content':[{'type':_0x484445(0x1bf),'text':JSON[_0x484445(0x1fa)](_0x460ba5)}]});function _0xbc1c(){const _0x4a2cd9=['C3rVChbLza','mJaYns0WnI0Xoa','CMvWBgfJzq','ChjVBwLZzq','r0furvDbwv9svu5usu1fx1voqvzbsuXbqKXf','C2vZC2LVBL9IB290C3rYyxa','BgLZDa','AxnbCNjHEq','tuLtu0Lor18','D29YA3nWywnLswq','lI4VAw5ZDgfSBgvYl3DVCMTZCgfJzs1YzwDPC3rYEq','BM9KztPJCNLWDg8','yMfJA2vUza','BM93','Dg9tDhjPBMC','C2vZC2LVBKLK','mZa3ndC3nLfzuhHUyq','zgvZy3jPChrPB24','BMfTzq','DhjPBq','mtm5nJK5mfr2qMfjwq','CMvXDwvZDeLK','v09ss1nqqunfx05pvf9sruDju1rfuKve','Dg9VBhmVy2fSBa','Aw5PDgLHBgL6Aw5N','mI4W','CMvNAxn0CNK','y29UBMvJDgLVBKLK','lI4VlI4VCgfJA2fNzs5QC29U','ChjVDg9JB2XwzxjZAw9U','Dgv4Da','yxb0lw1JCc1Hz2vUDa','DgHLBG','CMvQzwn0zwq','Dg9VBhm','C2L6zq','CMvXDwvZDa','BMv4Da','x2j1AwX0Aw4','Aw5WDxrty2HLBwe','C2v0','mtC0mdC0mMLTqLj1tG','CNvUDgLTzuzHy3rVCNK','mJGXntztA2v6tuK','vgHPCYbNyxrLD2f5igHHCYbUBYb2zxjPzMLLzcbJyxrHBg9NigzVCIb0Agf0ihrVB2WU','Ag9ZDa','CgLUzW','CMfUzg9Tvvvjra','yxjNDw1LBNrZ','CMvZB2X2zq','yMLUzgLUz1nLBgvJDgLVBNm','u0vtu0LptL9jrf9srvfvsvjfra','y2XVC2u','nLz1DMT2wG','BwfW','ntm4ndC2BuPmD3jr','DMvYC2LVBG','AgfZ','zgvSzxrL','AgfUzgXL','CMvXDwLYzwq','txv0yxrPB25ZihjLCxvPCMuGDgHLigv4CgXPy2L0BhKGyM91BMqGC2vZC2LVBKLKlG','zw50CMLLCW','BwnWx2fNzw50x2HLywX0Aa','r0furvDbwv9srvfvrvnux0zbsuXfra','Cgf0DgvYBG','mJaYns0WmY0YnG','q2fSBcb3B3jRC3bHy2vFBgLZDcbVBIb0AgLZignVBM5Ly3rPB24Gyw5KihvZzsbPDhmGy3vYCMvUDcbIAw5KAw5Nvg9Rzw4U','Bwv0Ag9K','q2fSBcb3B3jRC3bHy2vFBgLZDcWGDgHLBIbZzxnZAw9Ux2jVB3rZDhjHCcb3AxrOihnLC3nPB25jzcbHBMqGD29YA3nWywnLswqU','C2vSzwn0Aw9U','q0fuquXpr19tq0HftufFq09orKXjq1q','DMfSDwvZ','ugfZCYbZzxnZAw9Uswq7ihrOAxmGy29UBMvJDgLVBIbZzxj2zxmGBxvSDgLWBguGChjVAMvJDcbZzxnZAw9UCY4','CNvUDgLTzq','ChjVzMLSzxm','v09ss1nqqunfx0jjtKrjtKDFq09orKXjq1q','mZq0nJi1nezwAu5TDq','Dg9vChbLCKnHC2u','C3rYAw5N','lI4Vy29Yzs93B3jRC3bHy2uTCgf0Aa','DMfSAwrHDgvjzgvUDgL0Eq','qKfds0vorf9dqvrbte9hx0rju0npvKvswv9srvfvsvjfra','r0furvDbwv9truXfq1rjt05FuKvrvuLsruq','DgvZDa','lI4Vy29Yzs9JywXSzxiTy29UDgv4Da','jdfFjdi','ChvZAa','r0furvDbwv9dte9truq','C3rYAw5NAwz5','DMfSDwu','CgfYyw1Z','D29YA3nWywnL','Aw5PDgLHBgL6zq','BwfWrxHWB3nLzfrVt3jPz2LUywW','z2v0','zMLUza','D29YA3nWywnLx2XPC3q','B2jQzwn0','y2f0ywXVzW','BgvUz3rO','CMvHC29U','DMvYAwz5u2vSzwn0Aw9U','ChjVzMLSzq','zw5HyMXLza','Aw5JBhvKzxm','v29YA3nWywnLr2f0zxDHEq','CMvJB3zLCNK','lI9YB3v0zxi','D29YA3nWywnLugf0Aa','v09ss1nqqunfx0fnqKLhvu9vuW','CNvUswq','B25dyxrHBg9Nq2HHBMDLza','yMLUzgLUz1rVA2vU','ChjVAMvJDfbHDgG','zgvJB3jHDgvhyxrLD2f5vg9VBa','r0furvDbwv9truXfq1rjt05FteLnsvq','zMLSDgvY','mJaYnZK0mdbcrxL3BwG','yMfZzty0DxjS','v09ss1nqqunfx0jjtKrjtKDFuKvrvuLsruq','Dg9VBhmVBgLZDa','DgfZAW','C2vUC2L0AxzLvg9VBa','ywXSu2v0DgXLza','zxHWB3j0CW','mJaYnc0Xms0Wnq','C2vYDMvYl2rPC2nVDMvY','lI9WDwjSAwmTy2f0ywXVzW','BgLZDenOyw5Nzwq','ovrMsgrrsa','y29Kzq','C2vZC2LVBNm','z2f0zxDHEq','mJyXwMTbBufs','yxnZAwDU','zNvUy3rPB24','BM90AwzPy2f0Aw9UCY9PBML0AwfSAxPLza','su5wquXjrf9buKDvtuvovfm','zxHWAxjLC0f0','C2vSzwn0zwq','t25LiefqvcbNyxrLD2f5ihnLCNzLCYbPBNn0ywXSzwqGChjVAMvJDhmUienHBgWGD29YA3nWywnLx2XPC3qSihrOzw4GC2vZC2LVBL9IB290C3rYyxaGD2L0Acb5B3vYihnLC3nPB25jzcbHBMqGDgHLihbYB2PLy3qGD29YA3nWywnLswqUiefSD2f5CYbWyxnZihrOyxqGC2vZC2LVBKLKig9Uihn1yNnLCxvLBNqGy2fSBhmUie5LDMvYigjPBMqGAg9TzsbVCIbZzwXLy3qGysbWCM9Qzwn0igzYB20GCMvJzw5JEs4','BwvZC2fNzq'];_0xbc1c=function(){return _0x4a2cd9;};return _0xbc1c();}function validateIdentity(_0x4382db){const _0x5a6bb0=_0x484445,_0x3a1cab={};_0x3a1cab[_0x5a6bb0(0x1b0)]=contracts[_0x5a6bb0(0x1b0)],_0x3a1cab[_0x5a6bb0(0x1b6)]=contracts[_0x5a6bb0(0x1b6)],_0x3a1cab['task']=contracts[_0x5a6bb0(0x18c)],_0x3a1cab[_0x5a6bb0(0x210)]=contracts[_0x5a6bb0(0x210)];for(const [_0x23185b,_0x20ad62]of Object[_0x5a6bb0(0x1df)](_0x3a1cab)){if(_0x4382db[_0x23185b]===undefined)continue;const _0x6dc452=_0x4382db[_0x23185b];if(typeof _0x6dc452!==_0x5a6bb0(0x1f0)||!_0x6dc452[_0x5a6bb0(0x1b4)]()||_0x6dc452[_0x5a6bb0(0x205)]>_0x20ad62['maxLength']||_0x20ad62[_0x5a6bb0(0x1e2)]&&!new RegExp(_0x20ad62[_0x5a6bb0(0x1e2)])[_0x5a6bb0(0x1f5)](_0x6dc452))fail('INVALID_'+_0x23185b[_0x5a6bb0(0x1a3)](/([a-z])([A-Z])/g,_0x5a6bb0(0x1f7))[_0x5a6bb0(0x1ef)](),_0x20ad62[_0x5a6bb0(0x1b2)]);}}class WorkspaceGateway{constructor(_0xc9556={}){const _0x3707aa=_0x484445;this[_0x3707aa(0x1bb)]=_0xc9556[_0x3707aa(0x1bb)]||new WorkspaceRegistry(),this[_0x3707aa(0x1cb)]=_0xc9556[_0x3707aa(0x1cb)],this[_0x3707aa(0x1ce)]=_0xc9556[_0x3707aa(0x1ce)]||null,this[_0x3707aa(0x1bc)]=_0xc9556[_0x3707aa(0x1bc)]||crypto[_0x3707aa(0x1d0)](),this[_0x3707aa(0x196)]=new Map(),this['initializing']=new Map(),this[_0x3707aa(0x1d3)]=new Map(),this[_0x3707aa(0x204)]=gatewayCatalog(),this[_0x3707aa(0x211)]=_0xc9556[_0x3707aa(0x211)]||(()=>{}),this[_0x3707aa(0x1fe)]=null,this[_0x3707aa(0x1a1)]=![];}async['bind'](_0x2f3e99){const _0x53a05d=_0x484445;if(!_0x2f3e99[_0x53a05d(0x1b0)])fail(_0x53a05d(0x1d4),'Pass\x20the\x20same\x20nonempty\x20sessionId\x20throughout\x20this\x20chat.');const _0x421c4b=this[_0x53a05d(0x196)][_0x53a05d(0x200)](_0x2f3e99[_0x53a05d(0x1b0)]);if(_0x421c4b&&!_0x2f3e99[_0x53a05d(0x1aa)]&&!_0x2f3e99[_0x53a05d(0x20e)])return _0x421c4b;const _0xa3dd84=this[_0x53a05d(0x1b9)][_0x53a05d(0x200)](_0x2f3e99[_0x53a05d(0x1b0)]);if(_0xa3dd84&&!_0x2f3e99[_0x53a05d(0x1aa)]&&!_0x2f3e99[_0x53a05d(0x20e)])return _0xa3dd84[_0x53a05d(0x1a4)];const _0x16ae37=this['registry'][_0x53a05d(0x1d2)](_0x2f3e99,{'host':this[_0x53a05d(0x1ce)]});if(_0x2f3e99['bindingToken'])this[_0x53a05d(0x207)](_0x2f3e99[_0x53a05d(0x212)],_0x16ae37[_0x53a05d(0x1aa)]);if(_0x421c4b){if(!sameWorkspace(_0x16ae37['workspace'],_0x421c4b['workspace']))fail(_0x53a05d(0x1ed));return _0x421c4b;}if(this[_0x53a05d(0x1b9)][_0x53a05d(0x1da)](_0x2f3e99['sessionId'])){const _0x3a83e6=this['initializing'][_0x53a05d(0x200)](_0x2f3e99[_0x53a05d(0x1b0)]);if(!sameWorkspace(_0x3a83e6[_0x53a05d(0x1fd)],_0x16ae37[_0x53a05d(0x1fd)]))fail(_0x53a05d(0x1ed));return _0x3a83e6[_0x53a05d(0x1a4)];}const _0x5da5bf={};_0x5da5bf[_0x53a05d(0x1bc)]=this[_0x53a05d(0x1bc)],_0x5da5bf[_0x53a05d(0x1b0)]=_0x2f3e99[_0x53a05d(0x1b0)],_0x5da5bf[_0x53a05d(0x1fd)]=_0x16ae37[_0x53a05d(0x1fd)],_0x5da5bf[_0x53a05d(0x1aa)]=_0x16ae37[_0x53a05d(0x1aa)],_0x5da5bf['registration']=_0x53a05d(0x1c0),_0x5da5bf['provenance']='caller-selected',_0x5da5bf['nativeIdentity']='unconfirmed';const _0x1a2c76=_0x5da5bf,_0x1b5593=((async()=>{const _0x1f04c4=_0x53a05d;if(typeof this[_0x1f04c4(0x1cb)]!==_0x1f04c4(0x19a))fail(_0x1f04c4(0x1a5));const _0x251ec2=_0x16ae37[_0x1f04c4(0x1ec)]?.[this[_0x1f04c4(0x1ce)]]||{},_0x6fb6c7=await this['runtimeFactory'](_0x1a2c76,this[_0x1f04c4(0x1fe)]||{},_0x251ec2);this[_0x1f04c4(0x1a1)]&&(await _0x6fb6c7[_0x1f04c4(0x1d5)](),fail(_0x1f04c4(0x1f9)));const _0x2024df={..._0x1a2c76};_0x2024df[_0x1f04c4(0x1eb)]=_0x6fb6c7,_0x2024df['profile']=_0x251ec2;const _0x3db439=_0x2024df;return this['sessions'][_0x1f04c4(0x1c9)](_0x2f3e99[_0x1f04c4(0x1b0)],_0x3db439),_0x3db439;})()),_0x1f341f={};_0x1f341f[_0x53a05d(0x1fd)]=_0x16ae37['workspace'],_0x1f341f[_0x53a05d(0x1a4)]=_0x1b5593,this[_0x53a05d(0x1b9)]['set'](_0x2f3e99['sessionId'],_0x1f341f);try{return await _0x1b5593;}finally{this['initializing'][_0x53a05d(0x1db)](_0x2f3e99[_0x53a05d(0x1b0)]);}}[_0x484445(0x1e7)](_0x27defa){const _0xf766c0=_0x484445;for(const [_0x11f7d8,_0x23075e]of this['bindingSelections'])if(_0x23075e[_0xf766c0(0x19d)]<Date['now']())this[_0xf766c0(0x1d3)][_0xf766c0(0x1db)](_0x11f7d8);if(this[_0xf766c0(0x1d3)][_0xf766c0(0x1c4)]>=0x1000)fail(_0xf766c0(0x186));const _0x2b61fa=this['connectionId']+'.'+crypto['randomBytes'](0x20)[_0xf766c0(0x1af)](_0xf766c0(0x189));this[_0xf766c0(0x1d3)]['set'](_0x2b61fa,{'workspaceId':_0x27defa[_0xf766c0(0x1aa)],'expiresAt':Date[_0xf766c0(0x1ae)]()+0xdbba0});const _0x3857e3={};return _0x3857e3[_0xf766c0(0x1aa)]=_0x27defa[_0xf766c0(0x1aa)],_0x3857e3[_0xf766c0(0x1fd)]=_0x27defa[_0xf766c0(0x1fd)],_0x3857e3['bindingToken']=_0x2b61fa,_0x3857e3;}[_0x484445(0x207)](_0x1b7516,_0x18dfa9){const _0x560196=_0x484445,_0x521f03=this[_0x560196(0x1d3)][_0x560196(0x200)](_0x1b7516);if(!_0x521f03||_0x521f03[_0x560196(0x19d)]<Date[_0x560196(0x1ae)]()||_0x521f03['workspaceId']!==_0x18dfa9)fail(_0x560196(0x1f4),_0x560196(0x1e4));return _0x521f03;}[_0x484445(0x19e)](_0x52eb0c){const _0x238644=_0x484445;let _0x433c2b;if(_0x52eb0c[_0x238644(0x1b0)])_0x433c2b=this['sessions']['get'](_0x52eb0c[_0x238644(0x1b0)]);else{if(this['sessions'][_0x238644(0x1c4)]===0x1)_0x433c2b=this[_0x238644(0x196)]['values']()[_0x238644(0x1c6)]()[_0x238644(0x1fb)];else{if(this['sessions'][_0x238644(0x1c4)]>0x1)fail('WORKSPACE_AMBIGUOUS',_0x238644(0x1ea));}}if(!_0x433c2b)fail(_0x238644(0x18a),_0x238644(0x1e6));if(_0x52eb0c[_0x238644(0x1aa)]||_0x52eb0c[_0x238644(0x20e)]){const _0x291251=this[_0x238644(0x1bb)][_0x238644(0x1d2)](_0x52eb0c,{'host':this[_0x238644(0x1ce)]});if(!sameWorkspace(_0x291251['workspace'],_0x433c2b[_0x238644(0x1fd)]))fail(_0x238644(0x1ed));}if(_0x52eb0c[_0x238644(0x213)]&&!sameWorkspace(_0x52eb0c[_0x238644(0x213)],_0x433c2b['workspace']))fail(_0x238644(0x1ed));return _0x433c2b;}async[_0x484445(0x1dc)](_0xec4298){const _0x1b75af=_0x484445;if(this[_0x1b75af(0x1a1)])fail(_0x1b75af(0x1f9));const {id:_0x25d8b4,method:_0x3516ca,params:params={}}=_0xec4298,_0x460268=_0x30a743=>({'jsonrpc':_0x1b75af(0x1ba),'id':_0x25d8b4,'result':_0x30a743});if(_0x3516ca===_0x1b75af(0x1fe)||_0x3516ca===_0x1b75af(0x191)){const _0x32db50=[_0x1b75af(0x190),_0x1b75af(0x1e3),_0x1b75af(0x1a2),'2025-11-25'],_0x5b5530=_0x32db50['includes'](params[_0x1b75af(0x1be)])?params[_0x1b75af(0x1be)]:_0x32db50['at'](-0x1),_0x5c6ab9={...params};_0x5c6ab9[_0x1b75af(0x1be)]=_0x5b5530,this[_0x1b75af(0x1fe)]=_0x5c6ab9;const _0x11ff9a={};_0x11ff9a[_0x1b75af(0x193)]=!![];const _0x19e35b={};return _0x19e35b[_0x1b75af(0x1c3)]=_0x11ff9a,_0x460268({'protocolVersion':_0x5b5530,'capabilities':_0x19e35b,'serverInfo':{'name':_0x1b75af(0x1c0),'version':require(_0x1b75af(0x1bd))['version']},'instructions':_0x1b75af(0x19f)});}if(_0x3516ca===_0x1b75af(0x18b))return _0x460268({'tools':structuredClone(this[_0x1b75af(0x204)])});if(_0x3516ca===_0x1b75af(0x1cf))return _0x460268({});if(_0x3516ca===_0x1b75af(0x19b))return null;const _0x2d41a6={};_0x2d41a6[_0x1b75af(0x195)]=-0x7f59,_0x2d41a6[_0x1b75af(0x1a0)]='Method\x20not\x20found';if(_0x3516ca!==_0x1b75af(0x1b8))return _0x25d8b4===undefined?null:{'jsonrpc':_0x1b75af(0x1ba),'id':_0x25d8b4,'error':_0x2d41a6};try{const _0x206ee1=params[_0x1b75af(0x1d1)]||{};if(Array[_0x1b75af(0x1a8)](_0x206ee1)||typeof _0x206ee1!==_0x1b75af(0x203))fail(_0x1b75af(0x19c));validateIdentity(_0x206ee1);if(params[_0x1b75af(0x1b3)]!=='workspace_list'&¶ms[_0x1b75af(0x1b3)]!==_0x1b75af(0x1e0)&&require(_0x1b75af(0x1f6))[_0x1b75af(0x18d)](params[_0x1b75af(0x1b3)])&&!_0x206ee1[_0x1b75af(0x1b0)])fail(_0x1b75af(0x1d4),_0x1b75af(0x1de));const _0x4b3b8b=this[_0x1b75af(0x204)][_0x1b75af(0x201)](_0x1d36c2=>_0x1d36c2[_0x1b75af(0x1b3)]===params[_0x1b75af(0x1b3)]);if(!_0x4b3b8b){const _0x4f589f=require(_0x1b75af(0x20d))[_0x1b75af(0x1ff)](params[_0x1b75af(0x1b3)]);if(_0x4f589f&&_0x4f589f[_0x1b75af(0x1ad)]!==_0x1b75af(0x1c7)){const _0x5bf864={};_0x5bf864[_0x1b75af(0x1ad)]=_0x4f589f[_0x1b75af(0x1ad)],_0x5bf864['sessionId']=_0x206ee1[_0x1b75af(0x1b0)];const _0x39d719={};_0x39d719['tool']='mcp_agent_health',_0x39d719[_0x1b75af(0x1d1)]=_0x5bf864;const _0x5f45c3={};_0x5f45c3[_0x1b75af(0x195)]=_0x1b75af(0x1f3),_0x5f45c3[_0x1b75af(0x20c)]=_0x39d719;const _0x1e8ab3=Object['assign'](new Error('This\x20addon\x20needs\x20intentional\x20catalog\x20discovery;\x20call\x20mcp_agent_health\x20with\x20its\x20backend\x20and\x20sessionId.'),_0x5f45c3);throw _0x1e8ab3;}fail('TOOL_NOT_AVAILABLE',_0x1b75af(0x1cd));}if(params[_0x1b75af(0x1b3)]===_0x1b75af(0x202))return _0x460268(content({'workspaces':this[_0x1b75af(0x1bb)][_0x1b75af(0x1a7)]()[_0x1b75af(0x187)](_0x40b647=>!this[_0x1b75af(0x1ce)]||_0x40b647['hosts'][_0x1b75af(0x20a)](this[_0x1b75af(0x1ce)]))[_0x1b75af(0x1d7)](_0xe933ba=>this['selection'](_0xe933ba)),'connectionId':this[_0x1b75af(0x1bc)]}));if(params[_0x1b75af(0x1b3)]===_0x1b75af(0x1e0)&&!_0x206ee1[_0x1b75af(0x1b0)]&&!_0x206ee1[_0x1b75af(0x1ad)])return _0x460268(content({'registration':'apt-mcp-agent','connectionId':this[_0x1b75af(0x1bc)],'boundSessions':this[_0x1b75af(0x196)][_0x1b75af(0x1c4)],'backendsStartedByDiscovery':0x0,'serving':_0x1b75af(0x197),'version':require(_0x1b75af(0x1bd))[_0x1b75af(0x1d9)]}));for(const _0x2c79e9 of _0x4b3b8b[_0x1b75af(0x1c8)]['required']||[])if(_0x206ee1[_0x2c79e9]===undefined&&_0x2c79e9!==_0x1b75af(0x1b0))fail(_0x1b75af(0x1a9)+_0x2c79e9[_0x1b75af(0x1a3)](/([a-z])([A-Z])/g,_0x1b75af(0x1f7))['toUpperCase'](),'Required\x20field:\x20'+_0x2c79e9+'.');const _0x87bf5c=params[_0x1b75af(0x1b3)]==='session_bootstrap'?await this['bind'](_0x206ee1):this[_0x1b75af(0x19e)](_0x206ee1);if(_0x87bf5c[_0x1b75af(0x208)]?.[_0x1b75af(0x1c3)]?.[params['name']]?.[_0x1b75af(0x209)]===![])fail('PROJECT_TOOL_DISABLED');const _0x3e18da={..._0x206ee1};_0x3e18da['sessionId']=_0x87bf5c[_0x1b75af(0x1b0)];const _0x5d575c=_0x3e18da,_0x552d86={...params};_0x552d86['arguments']=_0x5d575c;const _0x520f2a={..._0xec4298};_0x520f2a[_0x1b75af(0x1fc)]=_0x552d86;const _0x2fb8a3=await _0x87bf5c[_0x1b75af(0x1eb)]['request'](_0x520f2a);if(params['name']===_0x1b75af(0x1e0)&&_0x206ee1['backend']&&!_0x2fb8a3['isError']){const _0x544074={};_0x544074[_0x1b75af(0x1e5)]=_0x1b75af(0x18b),_0x544074[_0x1b75af(0x1fc)]={};const _0x294ef3=await _0x87bf5c[_0x1b75af(0x1eb)][_0x1b75af(0x1c5)](_0x544074);let _0x46bc9d=![];for(const _0x148e46 of _0x294ef3['tools']||[]){if(require('./router')[_0x1b75af(0x1ff)](_0x148e46[_0x1b75af(0x1b3)])?.['backend']!==_0x206ee1['backend'])continue;const _0x428933=require(_0x1b75af(0x192))[_0x1b75af(0x214)](structuredClone(_0x148e46)),_0x3f6aa3=this[_0x1b75af(0x204)][_0x1b75af(0x201)](_0x15b4d1=>_0x15b4d1[_0x1b75af(0x1b3)]===_0x428933['name']);if(_0x3f6aa3&&JSON[_0x1b75af(0x1fa)](_0x3f6aa3[_0x1b75af(0x1c8)])!==JSON[_0x1b75af(0x1fa)](_0x428933['inputSchema']))fail(_0x1b75af(0x1e8));!_0x3f6aa3&&(this[_0x1b75af(0x204)][_0x1b75af(0x1f8)](_0x428933),_0x46bc9d=!![]);}if(_0x46bc9d)this[_0x1b75af(0x211)]();}return _0x460268(_0x2fb8a3);}catch(_0x26367d){const _0x5d136b={};return _0x5d136b['tool']=_0x1b75af(0x202),_0x5d136b[_0x1b75af(0x1c1)]=_0x1b75af(0x1a6),_0x5d136b[_0x1b75af(0x1dd)]=[_0x1b75af(0x1b0),_0x1b75af(0x1aa)],_0x460268({...content({'success':![],'code':_0x26367d[_0x1b75af(0x195)]||_0x1b75af(0x1e1),'error':_0x26367d[_0x1b75af(0x1a0)],'recovery':_0x26367d['recovery']||(['WORKSPACE_BINDING_REQUIRED',_0x1b75af(0x20f),_0x1b75af(0x1b7)][_0x1b75af(0x20a)](_0x26367d[_0x1b75af(0x195)])?_0x5d136b:undefined)}),'isError':!![]});}}async[_0x484445(0x1d5)](){const _0x1ba147=_0x484445;this[_0x1ba147(0x1a1)]=!![],await Promise['allSettled']([...this[_0x1ba147(0x1b9)]['values']()]['map'](_0x2090e1=>_0x2090e1[_0x1ba147(0x1a4)]));const _0xed0f50=await Promise[_0x1ba147(0x18e)]([...this[_0x1ba147(0x196)][_0x1ba147(0x1e9)]()][_0x1ba147(0x1d7)](_0x3f1a95=>_0x3f1a95[_0x1ba147(0x1eb)]['close']())),_0x3ca999=_0xed0f50[_0x1ba147(0x201)](_0x31e2a1=>_0x31e2a1['status']===_0x1ba147(0x1c2));if(_0x3ca999)throw _0x3ca999[_0x1ba147(0x206)];this['sessions']['clear']();}}const _0x297a42={};_0x297a42[_0x484445(0x20b)]=WorkspaceGateway,_0x297a42[_0x484445(0x1f2)]=validateIdentity,module[_0x484445(0x18f)]=_0x297a42;
|
|
1
|
+
'use strict';const _0x58473b=_0x4da0;(function(_0x24ff31,_0x4a2c95){const _0x5e1a8d=_0x4da0,_0x47b056=_0x24ff31();while(!![]){try{const _0x5b3097=-parseInt(_0x5e1a8d(0x196))/0x1+-parseInt(_0x5e1a8d(0x144))/0x2+-parseInt(_0x5e1a8d(0x18e))/0x3*(parseInt(_0x5e1a8d(0x15a))/0x4)+parseInt(_0x5e1a8d(0x19d))/0x5+-parseInt(_0x5e1a8d(0x1a0))/0x6+-parseInt(_0x5e1a8d(0x112))/0x7+parseInt(_0x5e1a8d(0x128))/0x8;if(_0x5b3097===_0x4a2c95)break;else _0x47b056['push'](_0x47b056['shift']());}catch(_0x189a9b){_0x47b056['push'](_0x47b056['shift']());}}}(_0x4d45,0x74b48));const crypto=require(_0x58473b(0x138)),{WorkspaceRegistry}=require(_0x58473b(0x148)),{gatewayCatalog}=require('./public-catalog'),{sameWorkspace}=require(_0x58473b(0x122)),contracts=require(_0x58473b(0x181)),fail=(_0xecff70,_0x122531=_0xecff70)=>{const _0x5e38be={};_0x5e38be['code']=_0xecff70;throw Object['assign'](new Error(_0x122531),_0x5e38be);},content=_0x1c5e16=>({'content':[{'type':_0x58473b(0x163),'text':JSON['stringify'](_0x1c5e16)}]});function validateIdentity(_0x281cb8){const _0x30cf8b=_0x58473b,_0x61dee6={};_0x61dee6[_0x30cf8b(0x191)]=contracts['sessionId'],_0x61dee6[_0x30cf8b(0x124)]=contracts[_0x30cf8b(0x124)],_0x61dee6[_0x30cf8b(0x140)]=contracts[_0x30cf8b(0x140)],_0x61dee6[_0x30cf8b(0x125)]=contracts['runId'];for(const [_0x3d876c,_0x36c9f8]of Object[_0x30cf8b(0x120)](_0x61dee6)){if(_0x281cb8[_0x3d876c]===undefined)continue;const _0x2cfb84=_0x281cb8[_0x3d876c];if(typeof _0x2cfb84!==_0x30cf8b(0x141)||!_0x2cfb84[_0x30cf8b(0x15c)]()||_0x2cfb84[_0x30cf8b(0x11c)]>_0x36c9f8[_0x30cf8b(0x12a)]||_0x36c9f8[_0x30cf8b(0x158)]&&!new RegExp(_0x36c9f8[_0x30cf8b(0x158)])['test'](_0x2cfb84))fail(_0x30cf8b(0x154)+_0x3d876c[_0x30cf8b(0x16a)](/([a-z])([A-Z])/g,_0x30cf8b(0x171))['toUpperCase'](),_0x36c9f8['description']);}}class WorkspaceGateway{constructor(_0xc18951={}){const _0x185f21=_0x58473b;this[_0x185f21(0x19f)]=_0xc18951[_0x185f21(0x19f)]||new WorkspaceRegistry(),this['runtimeFactory']=_0xc18951[_0x185f21(0x190)],this[_0x185f21(0x17a)]=_0xc18951[_0x185f21(0x17a)]||null,this['connectionId']=_0xc18951['connectionId']||crypto['randomUUID'](),this[_0x185f21(0x117)]=new Map(),this[_0x185f21(0x14b)]=new Map(),this[_0x185f21(0x127)]=new Map(),this[_0x185f21(0x151)]=gatewayCatalog(),this[_0x185f21(0x17f)]=_0xc18951[_0x185f21(0x17f)]||(()=>{}),this[_0x185f21(0x14c)]=null,this[_0x185f21(0x193)]=![];}async[_0x58473b(0x134)](_0x4549f5){const _0x13ceed=_0x58473b;if(!_0x4549f5[_0x13ceed(0x191)])fail(_0x13ceed(0x165),_0x13ceed(0x152));const _0x11e063=this[_0x13ceed(0x117)][_0x13ceed(0x13e)](_0x4549f5['sessionId']);if(_0x11e063&&!_0x4549f5['workspaceId']&&!_0x4549f5['workspacePath'])return _0x11e063;const _0x1416ef=this['initializing'][_0x13ceed(0x13e)](_0x4549f5[_0x13ceed(0x191)]);if(_0x1416ef&&!_0x4549f5[_0x13ceed(0x186)]&&!_0x4549f5[_0x13ceed(0x15d)])return _0x1416ef['promise'];const _0x577a60=this['registry']['resolve'](_0x4549f5,{'host':this[_0x13ceed(0x17a)]});if(_0x4549f5[_0x13ceed(0x142)])this['verifySelection'](_0x4549f5[_0x13ceed(0x142)],_0x577a60[_0x13ceed(0x186)]);if(_0x11e063){if(!sameWorkspace(_0x577a60[_0x13ceed(0x17d)],_0x11e063[_0x13ceed(0x17d)]))fail('WORKSPACE_BINDING_CONFLICT');return _0x11e063;}if(this[_0x13ceed(0x14b)][_0x13ceed(0x139)](_0x4549f5[_0x13ceed(0x191)])){const _0x14feab=this[_0x13ceed(0x14b)]['get'](_0x4549f5[_0x13ceed(0x191)]);if(!sameWorkspace(_0x14feab[_0x13ceed(0x17d)],_0x577a60[_0x13ceed(0x17d)]))fail(_0x13ceed(0x199));return _0x14feab[_0x13ceed(0x143)];}const _0x505421={};_0x505421['connectionId']=this[_0x13ceed(0x132)],_0x505421[_0x13ceed(0x191)]=_0x4549f5[_0x13ceed(0x191)],_0x505421[_0x13ceed(0x17d)]=_0x577a60[_0x13ceed(0x17d)],_0x505421[_0x13ceed(0x186)]=_0x577a60[_0x13ceed(0x186)],_0x505421[_0x13ceed(0x172)]=_0x13ceed(0x19c),_0x505421[_0x13ceed(0x19b)]=_0x13ceed(0x150),_0x505421[_0x13ceed(0x197)]=_0x13ceed(0x12b);const _0x35c2b4=_0x505421,_0x3dbbc0=((async()=>{const _0x11531d=_0x13ceed;if(typeof this[_0x11531d(0x190)]!==_0x11531d(0x182))fail('GATEWAY_RUNTIME_UNAVAILABLE');const _0x3b1b9c=_0x577a60[_0x11531d(0x18b)]?.[this[_0x11531d(0x17a)]]||{},_0x370fb8=await this[_0x11531d(0x190)](_0x35c2b4,this[_0x11531d(0x14c)]||{},_0x3b1b9c);this[_0x11531d(0x193)]&&(await _0x370fb8[_0x11531d(0x15b)](),fail(_0x11531d(0x14e)));const _0x476a61={..._0x35c2b4};_0x476a61[_0x11531d(0x19a)]=_0x370fb8,_0x476a61[_0x11531d(0x123)]=_0x3b1b9c;const _0x4e47e2=_0x476a61;return this[_0x11531d(0x117)][_0x11531d(0x195)](_0x4549f5[_0x11531d(0x191)],_0x4e47e2),_0x4e47e2;})()),_0x167f5e={};_0x167f5e[_0x13ceed(0x17d)]=_0x577a60[_0x13ceed(0x17d)],_0x167f5e[_0x13ceed(0x143)]=_0x3dbbc0,this[_0x13ceed(0x14b)][_0x13ceed(0x195)](_0x4549f5['sessionId'],_0x167f5e);try{return await _0x3dbbc0;}finally{this[_0x13ceed(0x14b)][_0x13ceed(0x11f)](_0x4549f5[_0x13ceed(0x191)]);}}[_0x58473b(0x129)](_0x4e6f6e){const _0x13161a=_0x58473b;for(const [_0x1c3263,_0x320a23]of this[_0x13161a(0x127)])if(_0x320a23[_0x13161a(0x188)]<Date['now']())this[_0x13161a(0x127)][_0x13161a(0x11f)](_0x1c3263);if(this[_0x13161a(0x127)]['size']>=0x1000)fail(_0x13161a(0x156));const _0x4da0c3=this['connectionId']+'.'+crypto[_0x13161a(0x12d)](0x20)['toString'](_0x13161a(0x177));this[_0x13161a(0x127)]['set'](_0x4da0c3,{'workspaceId':_0x4e6f6e[_0x13161a(0x186)],'expiresAt':Date[_0x13161a(0x176)]()+0xdbba0});const _0x422d04={};return _0x422d04[_0x13161a(0x186)]=_0x4e6f6e['workspaceId'],_0x422d04[_0x13161a(0x17d)]=_0x4e6f6e[_0x13161a(0x17d)],_0x422d04[_0x13161a(0x142)]=_0x4da0c3,_0x422d04;}[_0x58473b(0x16c)](_0x2de2ef,_0x475701){const _0x1f2088=_0x58473b,_0x1cd50d=this[_0x1f2088(0x127)][_0x1f2088(0x13e)](_0x2de2ef);if(!_0x1cd50d||_0x1cd50d[_0x1f2088(0x188)]<Date[_0x1f2088(0x176)]()||_0x1cd50d[_0x1f2088(0x186)]!==_0x475701)fail(_0x1f2088(0x11d),_0x1f2088(0x13d));return _0x1cd50d;}[_0x58473b(0x169)](_0x2793fc){const _0x35e133=_0x58473b;let _0x1f0443;if(_0x2793fc[_0x35e133(0x191)])_0x1f0443=this[_0x35e133(0x117)][_0x35e133(0x13e)](_0x2793fc[_0x35e133(0x191)]);else{if(this['sessions']['size']===0x1)_0x1f0443=this['sessions'][_0x35e133(0x19e)]()['next']()['value'];else{if(this[_0x35e133(0x117)][_0x35e133(0x11a)]>0x1)fail(_0x35e133(0x133),_0x35e133(0x192));}}if(!_0x1f0443)fail(_0x35e133(0x15e),'Call\x20workspace_list,\x20then\x20session_bootstrap\x20with\x20sessionId\x20and\x20workspaceId.');if(_0x2793fc[_0x35e133(0x186)]||_0x2793fc[_0x35e133(0x15d)]){const _0x216864=this['registry']['resolve'](_0x2793fc,{'host':this['host']});if(!sameWorkspace(_0x216864[_0x35e133(0x17d)],_0x1f0443['workspace']))fail(_0x35e133(0x199));}if(_0x2793fc[_0x35e133(0x113)]&&!sameWorkspace(_0x2793fc[_0x35e133(0x113)],_0x1f0443[_0x35e133(0x17d)]))fail(_0x35e133(0x199));return _0x1f0443;}async[_0x58473b(0x13a)](_0x3ab781){const _0x149dda=_0x58473b;if(this[_0x149dda(0x193)])fail(_0x149dda(0x14e));const {id:_0x39f906,method:_0x3603f1,params:params={}}=_0x3ab781,_0x5d398d=_0x513d25=>({'jsonrpc':_0x149dda(0x187),'id':_0x39f906,'result':_0x513d25});if(_0x3603f1===_0x149dda(0x14c)||_0x3603f1==='server/discover'){const _0x4ef66c=[_0x149dda(0x12e),_0x149dda(0x16b),_0x149dda(0x175),_0x149dda(0x174)],_0x20ea6a=_0x4ef66c['includes'](params['protocolVersion'])?params[_0x149dda(0x115)]:_0x4ef66c['at'](-0x1),_0x5eafb9={...params};_0x5eafb9[_0x149dda(0x115)]=_0x20ea6a,this[_0x149dda(0x14c)]=_0x5eafb9;const _0x5b1672={};_0x5b1672['listChanged']=!![];const _0x3a6885={};return _0x3a6885['tools']=_0x5b1672,_0x5d398d({'protocolVersion':_0x20ea6a,'capabilities':_0x3a6885,'serverInfo':{'name':_0x149dda(0x19c),'version':require('../../package.json')[_0x149dda(0x11e)]},'instructions':_0x149dda(0x118)});}if(_0x3603f1==='tools/list')return _0x5d398d({'tools':structuredClone(this[_0x149dda(0x151)])});if(_0x3603f1===_0x149dda(0x18c))return _0x5d398d({});if(_0x3603f1===_0x149dda(0x164))return null;const _0x3dfbbb={};_0x3dfbbb[_0x149dda(0x14a)]=-0x7f59,_0x3dfbbb['message']=_0x149dda(0x160);if(_0x3603f1!=='tools/call')return _0x39f906===undefined?null:{'jsonrpc':_0x149dda(0x187),'id':_0x39f906,'error':_0x3dfbbb};try{const _0x18cf6a=params[_0x149dda(0x178)]||{};if(Array['isArray'](_0x18cf6a)||typeof _0x18cf6a!==_0x149dda(0x170))fail(_0x149dda(0x11b));validateIdentity(_0x18cf6a);if(params[_0x149dda(0x16f)]!==_0x149dda(0x183)&¶ms['name']!==_0x149dda(0x18a)&&require('../core/caller-context')[_0x149dda(0x114)](params[_0x149dda(0x16f)])&&!_0x18cf6a[_0x149dda(0x191)])fail(_0x149dda(0x165),'Mutations\x20require\x20the\x20explicitly\x20bound\x20sessionId.');const _0x1dfc16=this['catalog'][_0x149dda(0x13c)](_0x7b3917=>_0x7b3917[_0x149dda(0x16f)]===params[_0x149dda(0x16f)]);if(!_0x1dfc16){const _0x5998fe=require(_0x149dda(0x15f))[_0x149dda(0x161)](params[_0x149dda(0x16f)]);if(_0x5998fe&&_0x5998fe[_0x149dda(0x13b)]!==_0x149dda(0x16e)){const _0x4027a9={};_0x4027a9[_0x149dda(0x13b)]=_0x5998fe[_0x149dda(0x13b)],_0x4027a9[_0x149dda(0x191)]=_0x18cf6a['sessionId'];const _0x22b201={};_0x22b201[_0x149dda(0x162)]=_0x149dda(0x18a),_0x22b201[_0x149dda(0x178)]=_0x4027a9;const _0x5c750e={};_0x5c750e[_0x149dda(0x14a)]=_0x149dda(0x179),_0x5c750e[_0x149dda(0x14f)]=_0x22b201;const _0x22e767=Object[_0x149dda(0x131)](new Error(_0x149dda(0x16d)),_0x5c750e);throw _0x22e767;}fail(_0x149dda(0x173),_0x149dda(0x135));}if(params[_0x149dda(0x16f)]===_0x149dda(0x183))return _0x5d398d(content({'workspaces':this[_0x149dda(0x19f)][_0x149dda(0x147)]()[_0x149dda(0x121)](_0x195488=>!this['host']||_0x195488[_0x149dda(0x130)][_0x149dda(0x18d)](this[_0x149dda(0x17a)]))[_0x149dda(0x18f)](_0x328aa5=>this['selection'](_0x328aa5)),'connectionId':this['connectionId']}));if(params[_0x149dda(0x16f)]===_0x149dda(0x18a)&&!_0x18cf6a[_0x149dda(0x191)]&&!_0x18cf6a[_0x149dda(0x13b)])return _0x5d398d(content({'registration':_0x149dda(0x19c),'connectionId':this['connectionId'],'boundSessions':this[_0x149dda(0x117)]['size'],'backendsStartedByDiscovery':0x0,'serving':'gateway','version':require(_0x149dda(0x17b))['version']}));for(const _0x4348b8 of _0x1dfc16['inputSchema'][_0x149dda(0x126)]||[])if(_0x18cf6a[_0x4348b8]===undefined&&_0x4348b8!=='sessionId')fail(_0x149dda(0x12f)+_0x4348b8[_0x149dda(0x16a)](/([a-z])([A-Z])/g,_0x149dda(0x171))[_0x149dda(0x185)](),_0x149dda(0x17e)+_0x4348b8+'.');const _0x2ddf2e=params['name']==='session_bootstrap'?await this['bind'](_0x18cf6a):this[_0x149dda(0x169)](_0x18cf6a);if(_0x2ddf2e[_0x149dda(0x123)]?.['tools']?.[params[_0x149dda(0x16f)]]?.[_0x149dda(0x17c)]===![])fail(_0x149dda(0x137));const _0x4d3a84={..._0x18cf6a};_0x4d3a84['sessionId']=_0x2ddf2e[_0x149dda(0x191)];const _0x5f975e=_0x4d3a84,_0x223358={...params};_0x223358['arguments']=_0x5f975e;const _0x5b43c7={..._0x3ab781};_0x5b43c7[_0x149dda(0x149)]=_0x223358;const _0x7d7ec8=await _0x2ddf2e[_0x149dda(0x19a)][_0x149dda(0x184)](_0x5b43c7);if(params['name']==='mcp_agent_health'&&_0x18cf6a[_0x149dda(0x13b)]&&!_0x7d7ec8[_0x149dda(0x136)]){const _0xe90abb={};_0xe90abb[_0x149dda(0x159)]=_0x149dda(0x157),_0xe90abb[_0x149dda(0x149)]={};const _0x33f043=await _0x2ddf2e[_0x149dda(0x19a)][_0x149dda(0x184)](_0xe90abb);let _0x3bfaaf=![];for(const _0x42f2d7 of _0x33f043[_0x149dda(0x166)]||[]){if(require('./router')[_0x149dda(0x161)](_0x42f2d7['name'])?.[_0x149dda(0x13b)]!==_0x18cf6a[_0x149dda(0x13b)])continue;const _0x11c07a=require(_0x149dda(0x146))[_0x149dda(0x13f)](structuredClone(_0x42f2d7)),_0x2d5b50=this[_0x149dda(0x151)][_0x149dda(0x13c)](_0x8b3fdc=>_0x8b3fdc[_0x149dda(0x16f)]===_0x11c07a[_0x149dda(0x16f)]);if(_0x2d5b50&&JSON[_0x149dda(0x145)](_0x2d5b50[_0x149dda(0x167)])!==JSON[_0x149dda(0x145)](_0x11c07a['inputSchema']))fail('CATALOG_SCHEMA_CONFLICT');!_0x2d5b50&&(this[_0x149dda(0x151)][_0x149dda(0x14d)](_0x11c07a),_0x3bfaaf=!![]);}if(_0x3bfaaf)this[_0x149dda(0x17f)]();}return _0x5d398d(_0x7d7ec8);}catch(_0x1b5a46){const _0x105602={};return _0x105602[_0x149dda(0x162)]=_0x149dda(0x183),_0x105602['then']=_0x149dda(0x155),_0x105602['required']=[_0x149dda(0x191),_0x149dda(0x186)],_0x5d398d({...content({'success':![],'code':_0x1b5a46[_0x149dda(0x14a)]||'GATEWAY_REQUEST_FAILED','error':_0x1b5a46[_0x149dda(0x168)],'recovery':_0x1b5a46[_0x149dda(0x14f)]||([_0x149dda(0x15e),_0x149dda(0x133),_0x149dda(0x189)][_0x149dda(0x18d)](_0x1b5a46[_0x149dda(0x14a)])?_0x105602:undefined)}),'isError':!![]});}}async[_0x58473b(0x15b)](){const _0x21086f=_0x58473b;this[_0x21086f(0x193)]=!![],await Promise[_0x21086f(0x116)]([...this[_0x21086f(0x14b)][_0x21086f(0x19e)]()][_0x21086f(0x18f)](_0x358afa=>_0x358afa[_0x21086f(0x143)]));const _0x4ba696=await Promise[_0x21086f(0x116)]([...this[_0x21086f(0x117)][_0x21086f(0x19e)]()][_0x21086f(0x18f)](_0x58d6be=>_0x58d6be[_0x21086f(0x19a)]['close']())),_0x3f97bd=_0x4ba696[_0x21086f(0x13c)](_0x297b37=>_0x297b37[_0x21086f(0x198)]===_0x21086f(0x153));if(_0x3f97bd)throw _0x3f97bd[_0x21086f(0x119)];this[_0x21086f(0x117)][_0x21086f(0x194)]();}}function _0x4da0(_0x3b709c,_0x50acf3){_0x3b709c=_0x3b709c-0x112;const _0x4d457f=_0x4d45();let _0x4da0c1=_0x4d457f[_0x3b709c];if(_0x4da0['SucxLS']===undefined){var _0xb90123=function(_0x4e44fa){const _0x1b95c4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x58f720='',_0x14857b='';for(let _0x44fc26=0x0,_0x59cd5c,_0xf294ee,_0x3ba2da=0x0;_0xf294ee=_0x4e44fa['charAt'](_0x3ba2da++);~_0xf294ee&&(_0x59cd5c=_0x44fc26%0x4?_0x59cd5c*0x40+_0xf294ee:_0xf294ee,_0x44fc26++%0x4)?_0x58f720+=String['fromCharCode'](0xff&_0x59cd5c>>(-0x2*_0x44fc26&0x6)):0x0){_0xf294ee=_0x1b95c4['indexOf'](_0xf294ee);}for(let _0x3ce3aa=0x0,_0x43fb2c=_0x58f720['length'];_0x3ce3aa<_0x43fb2c;_0x3ce3aa++){_0x14857b+='%'+('00'+_0x58f720['charCodeAt'](_0x3ce3aa)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x14857b);};_0x4da0['dQQXYk']=_0xb90123,_0x4da0['oDfwWM']={},_0x4da0['SucxLS']=!![];}const _0x44c93b=_0x4d457f[0x0],_0x733e1c=_0x3b709c+_0x44c93b,_0x235074=_0x4da0['oDfwWM'][_0x733e1c];return!_0x235074?(_0x4da0c1=_0x4da0['dQQXYk'](_0x4da0c1),_0x4da0['oDfwWM'][_0x733e1c]=_0x4da0c1):_0x4da0c1=_0x235074,_0x4da0c1;}function _0x4d45(){const _0x22addc=['AgfUzgXL','yMfJA2vUza','zMLUza','q2fSBcb3B3jRC3bHy2vFBgLZDcbVBIb0AgLZignVBM5Ly3rPB24Gyw5KihvZzsbPDhmGy3vYCMvUDcbIAw5KAw5Nvg9Rzw4U','z2v0','zgvJB3jHDgvhyxrLD2f5vg9VBa','DgfZAW','C3rYAw5N','yMLUzgLUz1rVA2vU','ChjVBwLZzq','mty4nZi4mgDdz1nYwq','C3rYAw5NAwz5','lI9WDwjSAwmTy2f0ywXVzW','BgLZDa','lI4VAw5ZDgfSBgvYl3DVCMTZCgfJzs1YzwDPC3rYEq','CgfYyw1Z','y29Kzq','Aw5PDgLHBgL6Aw5N','Aw5PDgLHBgL6zq','ChvZAa','r0furvDbwv9dte9truq','CMvJB3zLCNK','y2fSBgvYlxnLBgvJDgvK','y2f0ywXVzW','ugfZCYb0AguGC2fTzsbUB25LBxb0EsbZzxnZAw9UswqGDgHYB3vNAg91Dcb0AgLZignOyxqU','CMvQzwn0zwq','su5wquXjrf8','C2vZC2LVBL9IB290C3rYyxa','r0furvDbwv9truXfq1rjt05FteLnsvq','Dg9VBhmVBgLZDa','Cgf0DgvYBG','Bwv0Ag9K','mtzVuffwEKm','y2XVC2u','DhjPBq','D29YA3nWywnLugf0Aa','v09ss1nqqunfx0jjtKrjtKDFuKvrvuLsruq','lI9YB3v0zxi','twv0Ag9Kig5VDcbMB3vUza','BwfWrxHWB3nLzfrVt3jPz2LUywW','Dg9VBa','Dgv4Da','BM90AwzPy2f0Aw9UCY9PBML0AwfSAxPLza','u0vtu0LptL9jrf9srvfvsvjfra','Dg9VBhm','Aw5WDxrty2HLBwe','BwvZC2fNzq','C2vSzwn0zwq','CMvWBgfJzq','mJaYns0WmY0YnG','DMvYAwz5u2vSzwn0Aw9U','vgHPCYbHzgrVBIbUzwvKCYbPBNrLBNrPB25HBcbJyxrHBg9NigrPC2nVDMvYEtSGy2fSBcbTy3bFywDLBNrFAgvHBhrOihDPDgGGAxrZigjHy2TLBMqGyw5KihnLC3nPB25jzc4','x2j1AwX0Aw4','BMfTzq','B2jQzwn0','jdfFjdi','CMvNAxn0CMf0Aw9U','ve9ptf9ot1rFqvzbsuXbqKXf','mJaYns0Xms0Ynq','mJaYns0WnI0Xoa','BM93','yMfZzty0DxjS','yxjNDw1LBNrZ','qKfds0vorf9dqvrbte9hx0rju0npvKvswv9srvfvsvjfra','Ag9ZDa','lI4VlI4VCgfJA2fNzs5QC29U','zw5HyMXLza','D29YA3nWywnL','uMvXDwLYzwqGzMLLBgq6ia','B25dyxrHBg9Nq2HHBMDLza','v29YA3nWywnLr2f0zxDHEq','lI4Vy29Yzs90B29SlwnVBNrYywn0CW','zNvUy3rPB24','D29YA3nWywnLx2XPC3q','CMvXDwvZDa','Dg9vChbLCKnHC2u','D29YA3nWywnLswq','mI4W','zxHWAxjLC0f0','v09ss1nqqunfx05pvf9sruDju1rfuKve','BwnWx2fNzw50x2HLywX0Aa','ChjVzMLSzxm','CgLUzW','Aw5JBhvKzxm','nJGZmdCWuxnhAhbj','BwfW','CNvUDgLTzuzHy3rVCNK','C2vZC2LVBKLK','ugfZCYbZzxnZAw9Uswq7ihrOAxmGy29UBMvJDgLVBIbZzxj2zxmGBxvSDgLWBguGChjVAMvJDcbZzxnZAw9UCY4','C3rVChbLza','y2XLyxi','C2v0','nZyXndy1v0TjuMfZ','BMf0AxzLswrLBNrPDhK','C3rHDhvZ','v09ss1nqqunfx0jjtKrjtKDFq09orKXjq1q','CNvUDgLTzq','ChjVDMvUyw5Jzq','yxb0lw1JCc1Hz2vUDa','mZi3mtmXnwPVqxvxrG','DMfSDwvZ','CMvNAxn0CNK','otqXotK0z25Iquvk','mtC0mta0n2PTt05QrG','ChjVAMvJDfbHDgG','C2vUC2L0AxzLvg9VBa','ChjVDg9JB2XwzxjZAw9U','ywXSu2v0DgXLza','C2vZC2LVBNm','t25LiefqvcbNyxrLD2f5ihnLCNzLCYbPBNn0ywXSzwqGChjVAMvJDhmUienHBgWGD29YA3nWywnLx2XPC3qSihrOzw4GC2vZC2LVBL9IB290C3rYyxaGD2L0Acb5B3vYihnLC3nPB25jzcbHBMqGDgHLihbYB2PLy3qGD29YA3nWywnLswqUiefSD2f5CYbWyxnZihrOyxqGC2vZC2LVBKLKig9Uihn1yNnLCxvLBNqGy2fSBhmUie5LDMvYigjPBMqGAg9TzsbVCIbZzwXLy3qGysbWCM9Qzwn0igzYB20GCMvJzw5JEs4','CMvHC29U','C2L6zq','su5wquXjrf9buKDvtuvovfm','BgvUz3rO','r0furvDbwv9truXfq1rjt05FuKvrvuLsruq','DMvYC2LVBG','zgvSzxrL','zw50CMLLCW','zMLSDgvY','lI4Vy29Yzs93B3jRC3bHy2uTCgf0Aa','ChjVzMLSzq','CMvXDwvZDeLK','CNvUswq','CMvXDwLYzwq','yMLUzgLUz1nLBgvJDgLVBNm','mJe5nJi3nJHMC2vPr3i','C2vSzwn0Aw9U','Bwf4tgvUz3rO','Dw5JB25MAxjTzwq','zxHWB3j0CW','CMfUzg9TqNL0zxm','mJaYnc0Xms0Wnq','tuLtu0Lor18','Ag9ZDhm','yxnZAwDU','y29UBMvJDgLVBKLK','v09ss1nqqunfx0fnqKLhvu9vuW','yMLUza','vgHPCYbNyxrLD2f5igHHCYbUBYb2zxjPzMLLzcbJyxrHBg9NigzVCIb0Agf0ihrVB2WU','AxnfCNjVCG','ufjpsKvdvf9ut09mx0rju0fcteve','BM9KztPJCNLWDg8','AgfZ'];_0x4d45=function(){return _0x22addc;};return _0x4d45();}const _0x5ee6ce={};_0x5ee6ce[_0x58473b(0x180)]=WorkspaceGateway,_0x5ee6ce['validateIdentity']=validateIdentity,module[_0x58473b(0x12c)]=_0x5ee6ce;
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
const fs = require('node:fs');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const crypto = require('node:crypto');
|
|
4
|
+
|
|
5
|
+
const PACKAGED = path.basename(__filename) === 'technical-sources-check.js';
|
|
6
|
+
const ROOT = path.resolve(__dirname, PACKAGED ? '.' : '..');
|
|
7
|
+
const columns = ['ID', 'Repository', 'Role', 'Consumer', 'Ref type', 'Pinned ref', 'Resource digest', 'License / notice', 'Last reviewed', 'Refresh policy', 'Compatibility gate', 'Status', 'Notes'];
|
|
8
|
+
const branchColumns = ['Branch', 'Purpose', 'Base commit', 'Tip', 'Status', 'Included in main', 'Release / artifact', 'Last reviewed'];
|
|
9
|
+
const roles = new Set(['managed-backend', 'managed-bundle', 'addon', 'packaged-vendor', 'adapted-reference', 'citation-only']);
|
|
10
|
+
const statuses = new Set(['active', 'reference-only', 'needs-pinning', 'deprecated', 'blocked']);
|
|
11
|
+
const hash = bytes => crypto.createHash('sha256').update(bytes).digest('hex');
|
|
12
|
+
const repositoryKey = url => url.replace(/\/$/, '').replace(/\.git$/, '').toLowerCase();
|
|
13
|
+
const cells = line => line.slice(1, -1).split('|').map(cell => cell.trim());
|
|
14
|
+
|
|
15
|
+
function parseRegistry(markdown) {
|
|
16
|
+
const sources = [], branches = [];
|
|
17
|
+
let section = null, header = null;
|
|
18
|
+
for (const line of markdown.split(/\r?\n/)) {
|
|
19
|
+
if (line.startsWith('## ')) { section = line.slice(3); header = null; }
|
|
20
|
+
if (!line.startsWith('|') || !line.endsWith('|')) continue;
|
|
21
|
+
const values = cells(line);
|
|
22
|
+
if (values.every(value => /^:?-+:?$/.test(value))) continue;
|
|
23
|
+
if (!header) { header = values; continue; }
|
|
24
|
+
if (!['Integrated sources', 'Reviewed references', 'APT internal branches'].includes(section)) continue;
|
|
25
|
+
if (values.length !== header.length) throw new Error(`Invalid table row: ${values[0]}`);
|
|
26
|
+
const row = Object.fromEntries(header.map((key, i) => [key, values[i]]));
|
|
27
|
+
if (section === 'APT internal branches') {
|
|
28
|
+
if (header.join('|') !== branchColumns.join('|')) throw new Error('Invalid branch columns');
|
|
29
|
+
branches.push(row); continue;
|
|
30
|
+
}
|
|
31
|
+
if (header.join('|') !== columns.join('|')) throw new Error(`Invalid registry columns in ${section}`);
|
|
32
|
+
sources.push({ ...row, section });
|
|
33
|
+
}
|
|
34
|
+
if (!sources.length || !branches.length) throw new Error('Source and branch tables are required');
|
|
35
|
+
return { sources, branches };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function containedFile(root, relative) {
|
|
39
|
+
if (!relative || path.isAbsolute(relative) || relative.includes('\\') || relative.split('/').includes('..')) throw new Error(`Unsafe resource path: ${relative}`);
|
|
40
|
+
const file = path.resolve(root, relative);
|
|
41
|
+
const actual = fs.realpathSync(file), base = fs.realpathSync(root);
|
|
42
|
+
const delta = path.relative(base, actual);
|
|
43
|
+
if (delta.startsWith('..') || path.isAbsolute(delta) || !fs.statSync(actual).isFile()) throw new Error(`Resource escapes root: ${relative}`);
|
|
44
|
+
return actual;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function readJson(root, relative) { return JSON.parse(fs.readFileSync(containedFile(root, relative), 'utf8')); }
|
|
48
|
+
|
|
49
|
+
// Adapted skill snapshots use LF text, so a Windows checkout is the same snapshot.
|
|
50
|
+
function skillDigest(root, ids) {
|
|
51
|
+
const files = {};
|
|
52
|
+
for (const id of [...ids].sort()) {
|
|
53
|
+
const relative = `.agents/skills/${id}/SKILL.md`;
|
|
54
|
+
files[relative] = hash(fs.readFileSync(containedFile(root, relative), 'utf8').replace(/\r\n/g, '\n'));
|
|
55
|
+
}
|
|
56
|
+
return hash(JSON.stringify(files));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function bindings(root, packageOnly = false) {
|
|
60
|
+
const manifest = readJson(root, 'docs/upstream-manifest.json');
|
|
61
|
+
const out = (manifest.components || []).map(item => ({ repository: item.source, ref: item.gitRef, version: item.version, digest: item.resourceDigest, license: item.license,
|
|
62
|
+
role: item.status === 'managed-backend' ? 'managed-backend' : item.status === 'offline-skill-bundle' ? 'managed-bundle' : 'adapted-reference' }));
|
|
63
|
+
for (const id of ['ui-ux-pro-max', 'archify']) {
|
|
64
|
+
const item = manifest[id];
|
|
65
|
+
if (!item) throw new Error(`Missing companion manifest: ${id}`);
|
|
66
|
+
out.push({ repository: item.repository, ref: item.commit, version: item.tag, digest: item.resourceDigest, license: item.license, role: 'packaged-vendor' });
|
|
67
|
+
}
|
|
68
|
+
const lock = readJson(root, packageOnly && fs.existsSync(path.join(root, 'source-skills-lock.json')) ? 'source-skills-lock.json' : 'skills-lock.json');
|
|
69
|
+
const groups = {};
|
|
70
|
+
for (const [id, item] of Object.entries(lock.skills || {})) {
|
|
71
|
+
if (item.sourceType !== 'github' || !/^[\w.-]+\/[\w.-]+$/.test(item.source) || !/^[a-f0-9]{64}$/.test(item.computedHash)) throw new Error(`Invalid skill lock: ${id}`);
|
|
72
|
+
if (!item.skillPath || item.skillPath.includes('..') || path.isAbsolute(item.skillPath)) throw new Error(`Unsafe locked skill path: ${id}`);
|
|
73
|
+
(groups[item.source] ||= []).push(id);
|
|
74
|
+
}
|
|
75
|
+
for (const [repo, ids] of Object.entries(groups)) out.push({ repository: `https://github.com/${repo}`, digest: packageOnly ? null : skillDigest(root, ids), roles: ['adapted-reference', 'managed-bundle'] });
|
|
76
|
+
if (packageOnly) return out;
|
|
77
|
+
const profiles = require(path.join(root, 'src/backends/profiles.js'));
|
|
78
|
+
for (const [repo, version] of [
|
|
79
|
+
['colbymchenry/codegraph', profiles.CODEGRAPH_VERSION], ['tirth8205/code-review-graph', profiles.REVIEW_VERSIONS['code-review-graph']],
|
|
80
|
+
['modelcontextprotocol/servers', profiles.MEMORY_VERSION], ['microsoft/playwright-mcp', profiles.PLAYWRIGHT_MCP_VERSION],
|
|
81
|
+
['jlowin/fastmcp', profiles.REVIEW_VERSIONS.fastmcp], ['modelcontextprotocol/python-sdk', profiles.REVIEW_VERSIONS.mcp]
|
|
82
|
+
]) out.push({ repository: `https://github.com/${repo}`, version });
|
|
83
|
+
const ppt = require(path.join(root, 'src/installer/presentations.js'));
|
|
84
|
+
out.push({ repository: 'https://github.com/hugohe3/ppt-master', ref: ppt.COMMIT, version: ppt.VERSION });
|
|
85
|
+
const pkg = readJson(root, 'package.json'), packageLock = readJson(root, 'package-lock.json');
|
|
86
|
+
if (pkg.version !== packageLock.packages?.['']?.version || pkg.version !== packageLock.version) throw new Error('Package version drift');
|
|
87
|
+
for (const group of ['dependencies', 'devDependencies', 'optionalDependencies']) {
|
|
88
|
+
const declared = pkg[group] || {}, locked = packageLock.packages?.['']?.[group] || {};
|
|
89
|
+
if (Object.keys(declared).length !== Object.keys(locked).length || Object.entries(declared).some(([name, range]) => locked[name] !== range)) throw new Error(`Package lock declarations drift: ${group}`);
|
|
90
|
+
}
|
|
91
|
+
for (const name of Object.keys({ ...pkg.dependencies, ...pkg.devDependencies, ...pkg.optionalDependencies })) {
|
|
92
|
+
const installed = packageLock.packages?.[`node_modules/${name}`];
|
|
93
|
+
if (!installed?.version || !installed.integrity) throw new Error(`Missing package lock integrity: ${name}`);
|
|
94
|
+
out.push({ npm: name, version: installed.version, license: installed.license, role: 'addon' });
|
|
95
|
+
}
|
|
96
|
+
for (const id of ['ui-ux-pro-max', 'archify']) {
|
|
97
|
+
// Required companions cannot disappear from discovery when provenance is removed.
|
|
98
|
+
containedFile(root, `.agents/skills/${id}/provenance.json`);
|
|
99
|
+
}
|
|
100
|
+
const marketing = require(path.join(root, 'scripts/marketing-manifest.js')).validateManifest(path.join(root, '.agents/skills'), path.join(root, '.agents/marketing-manifest.json'));
|
|
101
|
+
out.push({ repository: marketing.upstream.repository, ref: marketing.upstream.commit, version: marketing.upstream.version, digest: marketing.bundleDigest, license: marketing.upstream.license });
|
|
102
|
+
// Discover additional imported companions instead of silently ignoring new provenance.
|
|
103
|
+
for (const item of fs.readdirSync(path.join(root, '.agents/skills'), { withFileTypes: true })) {
|
|
104
|
+
if (!item.isDirectory()) continue;
|
|
105
|
+
const relative = `.agents/skills/${item.name}/provenance.json`;
|
|
106
|
+
if (!fs.existsSync(path.join(root, relative))) continue;
|
|
107
|
+
const provenance = readJson(root, relative);
|
|
108
|
+
if (!provenance.files || !Object.keys(provenance.files).length || !provenance.license) throw new Error(`Incomplete provenance: ${item.name}`);
|
|
109
|
+
for (const [file, expected] of Object.entries(provenance.files)) {
|
|
110
|
+
if (!/^[a-f0-9]{64}$/.test(expected) || hash(fs.readFileSync(containedFile(root, `.agents/skills/${item.name}/vendor/${file}`))) !== expected) throw new Error(`Resource hash drift: ${item.name}/${file}`);
|
|
111
|
+
}
|
|
112
|
+
if (hash(JSON.stringify(provenance.files)) !== provenance.resourceDigest) throw new Error(`Resource digest drift: ${item.name}`);
|
|
113
|
+
out.push({ repository: provenance.repository, ref: provenance.commit, version: provenance.tag, digest: provenance.resourceDigest, license: provenance.license });
|
|
114
|
+
}
|
|
115
|
+
return out;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function validate(options = {}) {
|
|
119
|
+
const root = options.root || ROOT;
|
|
120
|
+
const errors = [], warnings = [];
|
|
121
|
+
let registry;
|
|
122
|
+
try { registry = parseRegistry(options.markdown ?? fs.readFileSync(containedFile(root, 'docs/technical-sources.md'), 'utf8')); }
|
|
123
|
+
catch (error) { return { ok: false, errors: [error.message], warnings, sources: [] }; }
|
|
124
|
+
const ids = new Set(), repos = new Map();
|
|
125
|
+
for (const row of registry.sources) {
|
|
126
|
+
const id = row.ID;
|
|
127
|
+
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id) || ids.has(id)) errors.push(`Invalid or duplicate ID: ${id}`);
|
|
128
|
+
ids.add(id);
|
|
129
|
+
try { const url = new URL(row.Repository); if (url.protocol !== 'https:' || url.username || url.password || url.search || url.hash) throw new Error(); }
|
|
130
|
+
catch { errors.push(`Invalid repository URL: ${id}`); }
|
|
131
|
+
const key = repositoryKey(row.Repository);
|
|
132
|
+
if (repos.has(key)) errors.push(`Duplicate repository: ${id}`);
|
|
133
|
+
repos.set(key, row);
|
|
134
|
+
for (const column of columns) if (!row[column]) errors.push(`Missing ${column}: ${id}`);
|
|
135
|
+
if (!roles.has(row.Role) || !statuses.has(row.Status)) errors.push(`Invalid role/status: ${id}`);
|
|
136
|
+
if (!['commit', 'tag', 'version', 'branch', 'unpinned'].includes(row['Ref type'])) errors.push(`Invalid ref type: ${id}`);
|
|
137
|
+
const ref = row['Pinned ref'].split(';')[0].trim();
|
|
138
|
+
if (row['Ref type'] === 'commit' && !/^[a-f0-9]{40}$/.test(ref)) errors.push(`Invalid commit: ${id}`);
|
|
139
|
+
if (row['Ref type'] === 'version' && !/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(ref)) errors.push(`Invalid version: ${id}`);
|
|
140
|
+
if (row['Ref type'] === 'tag' && !/^[^\s;|]+$/.test(ref)) errors.push(`Invalid tag: ${id}`);
|
|
141
|
+
if (['branch', 'unpinned'].includes(row['Ref type'])) {
|
|
142
|
+
if (!['needs-pinning', 'reference-only', 'deprecated', 'blocked'].includes(row.Status)) errors.push(`Floating source cannot be active: ${id}`);
|
|
143
|
+
}
|
|
144
|
+
if (row.Status === 'needs-pinning') warnings.push(`Needs pin/review: ${id}`);
|
|
145
|
+
if (row.section === 'Reviewed references' && (row.Status === 'active' || !['citation-only', 'adapted-reference'].includes(row.Role))) errors.push(`Reference incorrectly marked managed: ${id}`);
|
|
146
|
+
if (row.section === 'Integrated sources' && row.Role === 'citation-only') errors.push(`Citation incorrectly marked integrated: ${id}`);
|
|
147
|
+
const date = Date.parse(row['Last reviewed']);
|
|
148
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(row['Last reviewed']) || Number.isNaN(date) || new Date(date).toISOString().slice(0, 10) !== row['Last reviewed']) errors.push(`Invalid review date: ${id}`);
|
|
149
|
+
if (!/^[a-f0-9]{64}$/.test(row['Resource digest']) && row['Resource digest'] !== 'none') errors.push(`Invalid digest: ${id}`);
|
|
150
|
+
if (row['License / notice'] === 'unknown' && row.Status === 'active') errors.push(`License unknown for active source: ${id}`);
|
|
151
|
+
const notice = row['License / notice'].split('@')[1]?.trim();
|
|
152
|
+
if (notice && !notice.startsWith('https://') && !options.packageOnly) { try { containedFile(root, notice); } catch (error) { errors.push(error.message); } }
|
|
153
|
+
}
|
|
154
|
+
const branches = new Set();
|
|
155
|
+
for (const row of registry.branches) {
|
|
156
|
+
const date = Date.parse(row['Last reviewed']);
|
|
157
|
+
if (branchColumns.some(column => !row[column]) || branches.has(row.Branch) || !['active', 'merged', 'archived', 'local-only'].includes(row.Status) || !/^[a-f0-9]{40}$/.test(row['Base commit']) || !/^[a-f0-9]{40}$/.test(row.Tip) || !/^(yes(?: \(committed tip only\))?|no)$/.test(row['Included in main']) || !/^\d{4}-\d{2}-\d{2}$/.test(row['Last reviewed']) || Number.isNaN(date) || new Date(date).toISOString().slice(0, 10) !== row['Last reviewed']) errors.push(`Invalid branch snapshot: ${row.Branch}`);
|
|
158
|
+
branches.add(row.Branch);
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
for (const expected of bindings(root, options.packageOnly)) {
|
|
162
|
+
const row = expected.npm ? registry.sources.find(row => new RegExp(`(?:^|[; ]+)npm=${expected.npm.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?:[; ]|$)`).test(row.Notes)) : repos.get(repositoryKey(expected.repository || ''));
|
|
163
|
+
if (!row) { errors.push(`Source missing from registry: ${expected.repository || expected.npm}`); continue; }
|
|
164
|
+
if (row.section !== 'Integrated sources' || row.Role === 'citation-only' || expected.role && row.Role !== expected.role || expected.roles && !expected.roles.includes(row.Role)) errors.push(`Integrated source classified incorrectly: ${row.ID}`);
|
|
165
|
+
if (expected.ref && row['Pinned ref'].split(';')[0].trim() !== expected.ref) errors.push(`Ref drift: ${row.ID}`);
|
|
166
|
+
if (expected.version && !row['Pinned ref'].split(';').map(s => s.trim()).includes(`version=${expected.version}`) && row['Pinned ref'] !== expected.version) errors.push(`Version drift: ${row.ID} (${expected.version})`);
|
|
167
|
+
if (expected.digest && row['Resource digest'] !== expected.digest) errors.push(`Digest drift: ${row.ID}`);
|
|
168
|
+
if (expected.license && row['License / notice'].split('@')[0].trim() !== expected.license) errors.push(`License drift: ${row.ID}`);
|
|
169
|
+
}
|
|
170
|
+
} catch (error) { errors.push(error.message); }
|
|
171
|
+
return { ok: errors.length === 0, errors: [...new Set(errors)], warnings: [...new Set(warnings)], sources: registry.sources, branches: registry.branches };
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
async function getJson(url, fetcher = fetch) {
|
|
175
|
+
const response = await fetcher(url, { headers: { Accept: 'application/vnd.github+json', 'User-Agent': 'APT-technical-sources' }, signal: AbortSignal.timeout(15000) });
|
|
176
|
+
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
177
|
+
return response.json();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
async function refresh(options = {}) {
|
|
181
|
+
const local = validate(options);
|
|
182
|
+
const sources = options.source ? local.sources.filter(row => row.ID === options.source) : local.sources;
|
|
183
|
+
if (options.source && !sources.length) throw new Error(`Unknown source ID: ${options.source}`);
|
|
184
|
+
const results = [];
|
|
185
|
+
for (const row of sources) {
|
|
186
|
+
const repo = /^https:\/\/github\.com\/([\w.-]+\/[\w.-]+)$/.exec(row.Repository)?.[1];
|
|
187
|
+
if (!repo) { results.push({ id: row.ID, status: 'manual-review', reason: 'Official documentation source has no repository discovery endpoint' }); continue; }
|
|
188
|
+
try {
|
|
189
|
+
const base = `https://api.github.com/repos/${repo}`;
|
|
190
|
+
const metadata = await getJson(base, options.fetcher);
|
|
191
|
+
const [head, tags] = await Promise.all([getJson(`${base}/commits/${encodeURIComponent(metadata.default_branch)}`, options.fetcher), getJson(`${base}/tags?per_page=20`, options.fetcher)]);
|
|
192
|
+
let release;
|
|
193
|
+
try { release = await getJson(`${base}/releases/latest`, options.fetcher); }
|
|
194
|
+
catch (error) { if (error.message !== 'HTTP 404') throw error; }
|
|
195
|
+
const pin = row['Pinned ref'].split(';')[0].trim();
|
|
196
|
+
const updates = [];
|
|
197
|
+
if (['branch', 'unpinned'].includes(row['Ref type'])) updates.push('pin-review');
|
|
198
|
+
const npm = /(?:^|[; ]+)npm=([^; ]+)/.exec(row.Notes)?.[1];
|
|
199
|
+
let npmLatest = null;
|
|
200
|
+
if (npm) {
|
|
201
|
+
const packageInfo = await getJson(`https://registry.npmjs.org/${encodeURIComponent(npm)}/latest`, options.fetcher);
|
|
202
|
+
npmLatest = packageInfo.version;
|
|
203
|
+
if (npmLatest !== versionFromRow(row)) updates.push('npm-version-changed');
|
|
204
|
+
}
|
|
205
|
+
if (row['Ref type'] === 'commit' && head.sha !== pin) updates.push('branch-head-changed');
|
|
206
|
+
if (row['Ref type'] === 'tag' && tags[0]?.name !== pin) updates.push('tag-changed');
|
|
207
|
+
const version = /(?:^|;)\s*version=([^;]+)/.exec(row['Pinned ref'])?.[1] || (row['Ref type'] === 'version' ? pin : null);
|
|
208
|
+
if (version && release?.tag_name && release.tag_name.replace(/^v/, '') !== version.replace(/^v/, '')) updates.push('release-changed');
|
|
209
|
+
const license = metadata.license?.spdx_id || 'unknown';
|
|
210
|
+
if (license === 'unknown' || row['License / notice'].split('@')[0].trim() !== license) updates.push('license-review');
|
|
211
|
+
let comparison = null;
|
|
212
|
+
if (row['Ref type'] === 'commit') {
|
|
213
|
+
comparison = await getJson(`${base}/compare/${pin}...${head.sha}`, options.fetcher);
|
|
214
|
+
if (comparison.files?.some(file => /(?:^|\/)(?:SKILL\.md|LICENSE[^/]*|package\.json|pyproject\.toml)$/.test(file.filename) || file.status === 'removed' || file.status === 'renamed')) updates.push('structure-or-contract-review');
|
|
215
|
+
}
|
|
216
|
+
results.push({ id: row.ID, status: updates.length ? 'review-required' : 'unchanged', updates,
|
|
217
|
+
floating: ['branch', 'unpinned'].includes(row['Ref type']), canonicalRepository: metadata.html_url,
|
|
218
|
+
branch: metadata.default_branch, head: head.sha, tags: tags.map(tag => ({ name: tag.name, commit: tag.commit?.sha })),
|
|
219
|
+
release: release?.tag_name || null, npmLatest, license,
|
|
220
|
+
localDrift: local.errors.filter(error => error.includes(row.ID)),
|
|
221
|
+
compatibility: 'unverified', comparison: comparison ? { url: comparison.html_url, commits: comparison.total_commits, changedFiles: comparison.files?.length ?? null, filesMayBeTruncated: (comparison.files?.length || 0) >= 300 } : null });
|
|
222
|
+
} catch (error) { results.push({ id: row.ID, status: 'unreachable', error: error.message, compatibility: 'unverified' }); }
|
|
223
|
+
}
|
|
224
|
+
return { checkedAt: new Date().toISOString(), nonMutating: true, localValidation: { ok: local.ok, errors: local.errors, warnings: local.warnings }, results };
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function versionFromRow(row) { return /(?:^|;)\s*version=([^;]+)/.exec(row['Pinned ref'])?.[1] || (row['Ref type'] === 'version' ? row['Pinned ref'] : null); }
|
|
228
|
+
|
|
229
|
+
async function main(argv = process.argv.slice(2)) {
|
|
230
|
+
const action = argv.shift();
|
|
231
|
+
let source = null, json = false;
|
|
232
|
+
while (argv.length) {
|
|
233
|
+
const arg = argv.shift();
|
|
234
|
+
if (arg === '--json') json = true;
|
|
235
|
+
else if (arg === '--source' && argv[0] && !argv[0].startsWith('--')) source = argv.shift();
|
|
236
|
+
else throw new Error(`Unknown or incomplete option: ${arg}`);
|
|
237
|
+
}
|
|
238
|
+
if (!['validate', 'refresh'].includes(action)) throw new Error('Expected validate or refresh');
|
|
239
|
+
if (action === 'validate' && source) throw new Error('--source is only supported by refresh');
|
|
240
|
+
const report = action === 'validate' ? validate({ packageOnly: PACKAGED }) : await refresh({ source, packageOnly: PACKAGED });
|
|
241
|
+
const failed = action === 'validate' ? !report.ok : !report.localValidation.ok || report.results.some(item => item.status === 'unreachable');
|
|
242
|
+
if (json) console.log(JSON.stringify(report, null, 2));
|
|
243
|
+
else if (action === 'validate') { console.log(`${report.ok ? 'PASS' : 'FAIL'}: ${report.sources.length} sources validated offline`); for (const line of [...report.errors, ...report.warnings]) console.log(line); }
|
|
244
|
+
else { for (const row of report.results) console.log(`${row.id}: ${row.status}${row.error ? ` (${row.error})` : ''}`); console.log('Report only. Pins, skills and runtime were not changed. Compatibility remains unverified.'); }
|
|
245
|
+
process.exitCode = failed ? 1 : 0;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (require.main === module) main().catch(error => { if (process.argv.includes('--json')) console.log(JSON.stringify({ ok: false, error: error.message })); else console.error(error.message); process.exitCode = 1; });
|
|
249
|
+
module.exports = { columns, parseRegistry, containedFile, skillDigest, bindings, validate, refresh, main };
|