@myagentroam/node 0.9.62 → 0.9.65

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.
Files changed (161) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/dist/capabilities.js +110 -2
  4. package/dist/claude-agent-sdk.js +330 -2
  5. package/dist/claude-channel.js +44 -2
  6. package/dist/codex-app-server.js +510 -2
  7. package/dist/config.js +106 -2
  8. package/dist/connector/node-connector-options.js +1 -2
  9. package/dist/connector/node-operation-router.js +22 -2
  10. package/dist/connector.js +1736 -2
  11. package/dist/control-outbound-scheduler.js +153 -2
  12. package/dist/database.js +639 -2
  13. package/dist/fake-runner.js +129 -2
  14. package/dist/git-askpass.js +12 -0
  15. package/dist/git-execution-helper.js +266 -0
  16. package/dist/health.js +3 -2
  17. package/dist/main.js +57 -2
  18. package/dist/mcp-installation-model.js +1 -2
  19. package/dist/migrations/v004.js +55 -3
  20. package/dist/migrations/v005.js +13 -3
  21. package/dist/migrations/v006.js +90 -3
  22. package/dist/migrations/v007.js +22 -3
  23. package/dist/migrations/v008.js +18 -3
  24. package/dist/migrations/v009.js +70 -4
  25. package/dist/migrations/v010.js +43 -3
  26. package/dist/migrations/v011.js +20 -3
  27. package/dist/migrations/v012.js +8 -0
  28. package/dist/native-jsonl-reader.js +186 -2
  29. package/dist/native-session-history.js +1143 -2
  30. package/dist/opencode-runtime.js +80 -2
  31. package/dist/opencode-server.js +259 -2
  32. package/dist/operational.js +122 -2
  33. package/dist/process-tree.js +18 -2
  34. package/dist/ripgrep-binary.js +31 -2
  35. package/dist/rotating-log.js +67 -2
  36. package/dist/runner/abstract-runner.js +260 -2
  37. package/dist/runner/claude/managed-run-controller.js +355 -2
  38. package/dist/runner/claude/tool-normalizer.js +120 -2
  39. package/dist/runner/claude-code-runner.js +303 -2
  40. package/dist/runner/codex/composer-image-markers.js +8 -2
  41. package/dist/runner/codex/conversation-parser.js +913 -2
  42. package/dist/runner/codex/managed-run-controller.js +494 -2
  43. package/dist/runner/codex/tool-normalizer.js +214 -2
  44. package/dist/runner/codex-runner.js +585 -2
  45. package/dist/runner/fake-test-runner.js +47 -2
  46. package/dist/runner/mar-agent/conversation-normalizer.js +644 -2
  47. package/dist/runner/mar-agent/executor-stdio-client-transport.js +139 -2
  48. package/dist/runner/mar-agent/generated-images.js +41 -2
  49. package/dist/runner/mar-agent/history-projection.js +106 -2
  50. package/dist/runner/mar-agent/hosted-conversation-runtime.js +446 -2
  51. package/dist/runner/mar-agent/managed-run-controller.js +785 -2
  52. package/dist/runner/mar-agent/mcp-client-pool.js +233 -2
  53. package/dist/runner/mar-agent/runtime-model-factory.js +326 -2
  54. package/dist/runner/mar-agent-runner.js +458 -2
  55. package/dist/runner/opencode/conversation-parser.js +221 -2
  56. package/dist/runner/opencode/managed-run-controller.js +588 -2
  57. package/dist/runner/opencode/tool-normalizer.js +80 -2
  58. package/dist/runner/opencode-runner.js +426 -2
  59. package/dist/runner/runner-registry.js +87 -2
  60. package/dist/runner-command-engine.js +71 -2
  61. package/dist/runner-profiles.js +323 -2
  62. package/dist/runner-usage.js +190 -2
  63. package/dist/runtime-command-detector.js +73 -2
  64. package/dist/runtime-model.js +1 -2
  65. package/dist/runtime-state.js +1509 -2
  66. package/dist/service/attachment-domain-state.js +7 -2
  67. package/dist/service/bubblewrap-sandbox-executor.js +543 -2
  68. package/dist/service/continuous-run-coordinator.js +425 -2
  69. package/dist/service/conversation-history-service.js +552 -2
  70. package/dist/service/conversation-hosting-capability-service.js +61 -2
  71. package/dist/service/conversation-hosting-enablement-service.js +91 -2
  72. package/dist/service/conversation-hosting-maintenance-service.js +174 -2
  73. package/dist/service/conversation-segment-service.js +162 -2
  74. package/dist/service/conversation-template-node-service.js +992 -2
  75. package/dist/service/external-session-resume-service.js +152 -2
  76. package/dist/service/fake-managed-run-service.js +60 -2
  77. package/dist/service/git-execution-service.js +418 -0
  78. package/dist/service/git-operation-service.js +57 -0
  79. package/dist/service/hosted-conversation-node-service.js +1982 -2
  80. package/dist/service/hosted-conversation-store.js +1405 -2
  81. package/dist/service/managed-runner-session-service.js +35 -2
  82. package/dist/service/mar-agent-model-transport-test-service.js +88 -2
  83. package/dist/service/mcp-installation-verifier.js +87 -2
  84. package/dist/service/mcp-node-operation-service.js +90 -2
  85. package/dist/service/mission-mcp-server.js +124 -2
  86. package/dist/service/mission-mcp-stdio.js +40 -2
  87. package/dist/service/mission-runtime.js +142 -2
  88. package/dist/service/native-session-projection-service.js +274 -2
  89. package/dist/service/native-session-watch-service.js +683 -2
  90. package/dist/service/node-connection-lifecycle-service.js +88 -2
  91. package/dist/service/node-control-channel.js +85 -2
  92. package/dist/service/node-control-message-service.js +109 -2
  93. package/dist/service/node-request-service.js +62 -2
  94. package/dist/service/node-run-event-bridge.js +88 -2
  95. package/dist/service/node-terminal-channel.js +202 -2
  96. package/dist/service/node-upgrade-coordinator.js +137 -2
  97. package/dist/service/node-workspace-coordinator.js +97 -2
  98. package/dist/service/recent-run-projection-service.js +99 -2
  99. package/dist/service/run-attachment-service.js +321 -2
  100. package/dist/service/run-domain-state.js +4 -2
  101. package/dist/service/run-event-service.js +246 -2
  102. package/dist/service/run-ownership-policy.js +22 -2
  103. package/dist/service/run-workbench-service.js +120 -2
  104. package/dist/service/runner-channel-message-service.js +20 -2
  105. package/dist/service/runner-interaction-service.js +243 -2
  106. package/dist/service/runner-service.js +69 -2
  107. package/dist/service/runtime-credential-control-service.js +95 -2
  108. package/dist/service/session-catalog-service.js +404 -2
  109. package/dist/service/session-command-service.js +125 -2
  110. package/dist/service/session-context-service.js +128 -2
  111. package/dist/service/session-domain-state.js +9 -2
  112. package/dist/service/session-identity-service.js +86 -2
  113. package/dist/service/session-lifecycle-service.js +248 -2
  114. package/dist/service/session-message-service.js +270 -2
  115. package/dist/service/session-presentation-service.js +43 -2
  116. package/dist/service/session-query-service.js +82 -2
  117. package/dist/service/session-watch-slot-coordinator.js +21 -2
  118. package/dist/service/skill-directory-service.js +238 -2
  119. package/dist/service/skill-install-service.js +434 -2
  120. package/dist/service/skill-node-operation-service.js +206 -2
  121. package/dist/service/terminal-relay-state.js +3 -2
  122. package/dist/service/terminal-service.js +90 -2
  123. package/dist/service/web-search-error.js +40 -2
  124. package/dist/service/workbench-event-service.js +21 -2
  125. package/dist/service/workbench-manifest-service.js +69 -2
  126. package/dist/service/workspace-change-service.js +290 -2
  127. package/dist/service/workspace-content-search-service.js +457 -2
  128. package/dist/service/workspace-domain-state.js +41 -2
  129. package/dist/service/workspace-file-service.js +150 -2
  130. package/dist/service/workspace-git-exclude-service.js +119 -2
  131. package/dist/service/workspace-queue-workbench-service.js +176 -2
  132. package/dist/service/workspace-service.js +92 -2
  133. package/dist/service/workspace-session-service.js +154 -2
  134. package/dist/service/workspace-upload-service.js +262 -2
  135. package/dist/service/workspace-watch-controller.js +68 -2
  136. package/dist/service/workspace-watch-service.js +170 -2
  137. package/dist/service/workspace-watch-snapshot-service.js +218 -2
  138. package/dist/service/workspace-workbench-service.js +239 -2
  139. package/dist/service.js +91 -2
  140. package/dist/storage.js +32 -2
  141. package/dist/supervisor.js +136 -2
  142. package/dist/terminal.js +496 -2
  143. package/dist/util/git-credential-client.js +32 -0
  144. package/dist/util/node-operation-data.js +9 -2
  145. package/dist/util/node-operation-parsers.js +382 -2
  146. package/dist/util/personal-instructions.js +34 -2
  147. package/dist/util/runner-error.js +70 -2
  148. package/dist/util/runner-native-session-parsers.js +510 -2
  149. package/dist/util/safe-error.js +8 -2
  150. package/dist/util/secret-environment.js +25 -2
  151. package/dist/workspace.js +1793 -2
  152. package/package.json +11 -8
  153. package/vendor/ripgrep/darwin-arm64/rg +0 -0
  154. package/vendor/ripgrep/darwin-x64/rg +0 -0
  155. package/vendor/ripgrep/manifest.json +12 -0
  156. package/README.md +0 -42
  157. package/dist/event-buffer.js +0 -2
  158. package/dist/migrations/v001.js +0 -107
  159. package/dist/migrations/v002.js +0 -2
  160. package/dist/migrations/v003.js +0 -2
  161. package/dist/service/mcp-package-installer.js +0 -2
package/dist/config.js CHANGED
@@ -1,2 +1,106 @@
1
- /* mar-release-protected */
2
- function _0x1fc5(){const _0xb55c4c=['DhjPBq','C3rYAw5NAwz5','Aw5Hy3rPDMvszxrLBNrPB25eyxLZ','BgvUz3rO','CgXHDgzVCM0','zxzLCNK','B2jQzwn0','BM9KzuLK','zw5HyMXLza','zgf0yurPCMvJDg9YEq','ntG5ndK1v01uAxjc','CM9VDa','nZa3wfvTtvnc','nZuYnZm2t1DQBNLd','CMvNAxn0CMf0Aw9Uvg9Rzw4','y29UDMvYC2f0Aw9Usg9ZDgLUzW','CgfYC2u','mtm0nZe1mgX2yu9Pvq','mtqYmZjAqxrcteu','AxnbCNjHEq','ywXSB3DLzfjVB3rZ','C3bSAxq','AxnjBNrLz2vY','C29Tzq','C3rYAw5N','y3DK','y3jLzgvUDgLHBa','C3rHCNrZv2L0Aa','A2v5CW','C3rVCMveAxjLy3rVCNK','tK9erv9dt05gsuDFsu5wquXjra','DxrMoa','yM9VBgvHBG','BM9Kzs1YDw50Aw1LlNnXBgL0zq','C2vYDMvYvxjS','D2LUmZi','zgf0ys9TyxiTBM9Kzs5QC29U','ndC4oda0svbZDhjL','odeWmZLlCgrXCxu','otu5ndvrq21IB3i','zgf0ywjHC2vqyxrO'];_0x1fc5=function(){return _0xb55c4c;};return _0x1fc5();}const _0x140c75=_0x14ba;(function(_0x5dc6bc,_0x4c52b8){const _0x41adf0=_0x14ba,_0x587bbf=_0x5dc6bc();while(!![]){try{const _0x22237a=parseInt(_0x41adf0(0x1ee))/(-0x1de3+-0xa7f+0x2863)+-parseInt(_0x41adf0(0x1ec))/(0x15d8+0x1*-0x181f+0x27*0xf)+parseInt(_0x41adf0(0x1ed))/(0x914+0x1fee+-0x28ff)+parseInt(_0x41adf0(0x1d4))/(-0x458+0x3*0xc3d+-0xb*0x2f1)+parseInt(_0x41adf0(0x1d1))/(0x3*-0x417+0x1d84+0x2a*-0x69)+-parseInt(_0x41adf0(0x1d8))/(-0xab4+0x39*-0x13+0xef5)+-parseInt(_0x41adf0(0x1d3))/(-0x83e+-0x17b*-0xd+-0x119*0xa)*(-parseInt(_0x41adf0(0x1d9))/(-0x1621+0x2669*-0x1+0x3c92));if(_0x22237a===_0x4c52b8)break;else _0x587bbf['push'](_0x587bbf['shift']());}catch(_0x436f8b){_0x587bbf['push'](_0x587bbf['shift']());}}}(_0x1fc5,-0xe2*-0x4cb+-0x3301f*0x1+-0x9541*-0x2));import{chmod,mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,isAbsolute,relative,resolve,sep,win32}from'node:path';export function nodeConfigPath(){const _0x235b60=_0x14ba;return resolve(process.env['MAR_NODE_CONFIG']??_0x235b60(0x1eb));}export async function loadNodeConfig(_0x54009a=nodeConfigPath()){const _0x2e5d1b=_0x14ba,_0x547b82=JSON[_0x2e5d1b(0x1d7)](await readFile(_0x54009a,_0x2e5d1b(0x1e6)));if(typeof _0x547b82!==_0x2e5d1b(0x1f6)||_0x547b82===null||!(_0x2e5d1b(0x1e9)in _0x547b82)||typeof _0x547b82[_0x2e5d1b(0x1e9)]!==_0x2e5d1b(0x1df)||_0x2e5d1b(0x1ef)in _0x547b82||_0x2e5d1b(0x1db)in _0x547b82&&(!Array[_0x2e5d1b(0x1da)](_0x547b82[_0x2e5d1b(0x1db)])||!_0x547b82[_0x2e5d1b(0x1db)][_0x2e5d1b(0x1f5)](_0x3e0b52=>typeof _0x3e0b52===_0x2e5d1b(0x1df))))throw new Error(_0x2e5d1b(0x1e5));const _0x5c2f4d=_0x547b82,_0x381231=_0x1093ab=>typeof _0x5c2f4d[_0x1093ab]===_0x2e5d1b(0x1df)?_0x5c2f4d[_0x1093ab]:undefined,_0x39a4c9=_0x381231(_0x2e5d1b(0x1f7)),_0xba9a39=_0x381231(_0x2e5d1b(0x1e1)),_0xc000e1=_0x381231(_0x2e5d1b(0x1d5)),_0x1192b0=_0x381231(_0x2e5d1b(0x1d0)),_0x55c6d2=Array[_0x2e5d1b(0x1da)](_0x5c2f4d[_0x2e5d1b(0x1db)])?_0x5c2f4d[_0x2e5d1b(0x1db)]:defaultAllowedRoots(),_0x1d8941=parseConversationHosting(_0x5c2f4d[_0x2e5d1b(0x1d6)]);return{'serverUrl':_0x547b82[_0x2e5d1b(0x1e9)],'allowedRoots':_0x55c6d2,..._0x39a4c9===undefined?{}:{'nodeId':_0x39a4c9},..._0xba9a39===undefined?{}:{'credential':_0xba9a39},..._0xc000e1===undefined?{}:{'registrationToken':_0xc000e1},..._0x1192b0===undefined?{}:{'dataDirectory':_0x1192b0},..._0x1d8941===undefined?{}:{'conversationHosting':_0x1d8941}};}export function defaultAllowedRoots(_0xbb4091=process[_0x140c75(0x1f4)],_0x5a7e74=homedir(),_0x5aeeb5=process[_0x140c75(0x1e0)]()){const _0x11d0d3=_0x140c75;return _0xbb4091===_0x11d0d3(0x1ea)?[win32[_0x11d0d3(0x1d7)](_0x5aeeb5)[_0x11d0d3(0x1d2)]]:[_0x5a7e74];}export function nodeDatabasePath(_0xf66889,_0x3b5b19=nodeConfigPath()){const _0x348ec1=_0x140c75;return resolve(nodeDataDirectory(_0xf66889,_0x3b5b19),_0x348ec1(0x1e8));}function _0x14ba(_0x11bd21,_0x3b93bb){_0x11bd21=_0x11bd21-(0x913+-0x2559+0x1e15);const _0x60981d=_0x1fc5();let _0x8d1030=_0x60981d[_0x11bd21];if(_0x14ba['ldqlKe']===undefined){var _0x59a102=function(_0x845aac){const _0x3422d3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4eac0c='',_0x431994='';for(let _0xab8bce=0x3a7+-0x1729+0x9c1*0x2,_0x238b9c,_0x2f2867,_0x174b67=0x1e*0xe2+-0xf97*-0x1+-0x2a13;_0x2f2867=_0x845aac['charAt'](_0x174b67++);~_0x2f2867&&(_0x238b9c=_0xab8bce%(-0x1*-0x281+0x1d2*0x4+-0x1*0x9c5)?_0x238b9c*(0x1294+0x989+-0x1bdd)+_0x2f2867:_0x2f2867,_0xab8bce++%(-0x47b+-0x23bd+-0x203*-0x14))?_0x4eac0c+=String['fromCharCode'](0xcd5+-0x2aa+-0x24b*0x4&_0x238b9c>>(-(0xe*0x2d+-0x1*0x1ca5+0x1a31)*_0xab8bce&-0x2*-0xd71+0x1f3*0x4+0x2*-0x1154)):-0x1d10+0x9bf*-0x1+0x1*0x26cf){_0x2f2867=_0x3422d3['indexOf'](_0x2f2867);}for(let _0x8ae323=0x828+-0x1d84+-0x4*-0x557,_0x29f492=_0x4eac0c['length'];_0x8ae323<_0x29f492;_0x8ae323++){_0x431994+='%'+('00'+_0x4eac0c['charCodeAt'](_0x8ae323)['toString'](0xbc3+-0x2639*0x1+0x1a86))['slice'](-(-0x1*-0x98f+0x2*-0x167+-0x1*0x6bf));}return decodeURIComponent(_0x431994);};_0x14ba['GZxVus']=_0x59a102,_0x14ba['emlfLd']={},_0x14ba['ldqlKe']=!![];}const _0x4c16d0=_0x60981d[-0x21ec+0x27*0x83+0xdf7];_0x14ba['dShYka']!==_0x4c16d0&&(_0x14ba['emlfLd']={},_0x14ba['dShYka']=_0x4c16d0);const _0x3f7c44=_0x14ba['emlfLd'][_0x11bd21];return _0x3f7c44===undefined?(_0x8d1030=_0x14ba['GZxVus'](_0x8d1030),_0x14ba['emlfLd'][_0x11bd21]=_0x8d1030):_0x8d1030=_0x3f7c44,_0x8d1030;}export function nodeDataDirectory(_0x2c43b7,_0x3c029a=nodeConfigPath()){const _0x2cbb18=_0x140c75;if(_0x2c43b7[_0x2cbb18(0x1d0)]!==undefined)return resolve(dirname(_0x3c029a),_0x2c43b7[_0x2cbb18(0x1d0)]);return resolve(dirname(_0x3c029a));}export function hostedConversationStorePath(_0x28b477,_0x4998c4=nodeConfigPath()){const _0x577135=_0x140c75,_0x42db45=_0x28b477[_0x577135(0x1d6)];if(_0x42db45?.[_0x577135(0x1cf)]!==!![])return undefined;const _0x447cdb=_0x42db45[_0x577135(0x1e4)];if(!validStoreDirectory(_0x447cdb))throw new Error(_0x577135(0x1e5));const _0x2df3c1=nodeDataDirectory(_0x28b477,_0x4998c4),_0x649dc6=resolve(_0x2df3c1,_0x447cdb),_0x480bea=relative(_0x2df3c1,_0x649dc6);if(_0x480bea[_0x577135(0x1f3)]===0xa2*0x32+0x1*0x1a7c+-0x3a20||_0x480bea==='..'||_0x480bea[_0x577135(0x1e2)]('..'+sep))throw new Error(_0x577135(0x1e5));return _0x649dc6;}export async function saveNodeConfig(_0x1e6c35,_0x37940b=nodeConfigPath()){const _0x117b53=_0x140c75;await mkdir(dirname(_0x37940b),{'recursive':!![],'mode':0x1c0}),await writeFile(_0x37940b,JSON[_0x117b53(0x1f1)](_0x1e6c35,undefined,0x2*-0x1282+0x281+0x2285*0x1)+'\x0a',{'mode':0x180}),process[_0x117b53(0x1f4)]!==_0x117b53(0x1ea)&&await chmod(_0x37940b,0xb*0x1b5+-0x152+-0xff5);}function parseConversationHosting(_0x442b77){const _0x30623e=_0x140c75;if(_0x442b77===undefined)return undefined;if(typeof _0x442b77!==_0x30623e(0x1f6)||_0x442b77===null||Array[_0x30623e(0x1da)](_0x442b77)||typeof _0x442b77[_0x30623e(0x1cf)]!==_0x30623e(0x1e7)||Object[_0x30623e(0x1e3)](_0x442b77)[_0x30623e(0x1de)](_0x60981d=>_0x60981d!==_0x30623e(0x1cf)&&_0x60981d!==_0x30623e(0x1e4)&&_0x60981d!==_0x30623e(0x1f2)))throw new Error(_0x30623e(0x1e5));const _0x205387=_0x442b77[_0x30623e(0x1cf)],_0x11bd21=_0x442b77[_0x30623e(0x1e4)],_0x3b93bb=_0x442b77[_0x30623e(0x1f2)]??-0x22bf+-0x47b+0x2776;if(_0x11bd21!==undefined&&(typeof _0x11bd21!==_0x30623e(0x1df)||!validStoreDirectory(_0x11bd21)))throw new Error(_0x30623e(0x1e5));if(!Number[_0x30623e(0x1dd)](_0x3b93bb)||_0x3b93bb<-0x3*-0x276+-0x1c05+0x14a4||_0x3b93bb>-0x10fd*-0x2+0x11*-0x182+-0x1*0x6eb)throw new Error(_0x30623e(0x1e5));if(_0x205387&&_0x11bd21===undefined)throw new Error(_0x30623e(0x1e5));return{'enabled':_0x205387,..._0x11bd21===undefined?{}:{'storeDirectory':_0x11bd21},'inactiveRetentionDays':_0x3b93bb};}function validStoreDirectory(_0x8d1030){const _0x76af8a=_0x140c75;if(typeof _0x8d1030!==_0x76af8a(0x1df)||_0x8d1030[_0x76af8a(0x1f0)]()!==_0x8d1030||_0x8d1030[_0x76af8a(0x1f3)]===0x893*-0x2+0x1ae2+0x59*-0x1c)return![];if(isAbsolute(_0x8d1030)||_0x8d1030==='.'||_0x8d1030==='..')return![];return!_0x8d1030[_0x76af8a(0x1dc)]('/')[_0x76af8a(0x1de)](_0x59a102=>_0x59a102[_0x76af8a(0x1f3)]===0x1b75+0x7bb+-0x2330||_0x59a102==='.'||_0x59a102==='..');}
1
+ import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { dirname, isAbsolute, relative, resolve, sep, win32 } from 'node:path';
4
+ export function nodeConfigPath() {
5
+ return resolve(process.env['MAR_NODE_CONFIG'] ?? 'data/mar-node.json');
6
+ }
7
+ export async function loadNodeConfig(path = nodeConfigPath()) {
8
+ const parsed = JSON.parse(await readFile(path, 'utf8'));
9
+ if (typeof parsed !== 'object' ||
10
+ parsed === null ||
11
+ !('serverUrl' in parsed) ||
12
+ typeof parsed.serverUrl !== 'string' ||
13
+ 'databasePath' in parsed ||
14
+ ('allowedRoots' in parsed &&
15
+ (!Array.isArray(parsed.allowedRoots) ||
16
+ !parsed.allowedRoots.every((root) => typeof root === 'string')))) {
17
+ throw new Error('NODE_CONFIG_INVALID');
18
+ }
19
+ const input = parsed;
20
+ const optionalString = (name) => typeof input[name] === 'string' ? input[name] : undefined;
21
+ const nodeId = optionalString('nodeId');
22
+ const credential = optionalString('credential');
23
+ const registrationToken = optionalString('registrationToken');
24
+ const dataDirectory = optionalString('dataDirectory');
25
+ const allowedRoots = Array.isArray(input['allowedRoots'])
26
+ ? input['allowedRoots']
27
+ : defaultAllowedRoots();
28
+ const conversationHosting = parseConversationHosting(input['conversationHosting']);
29
+ return {
30
+ serverUrl: parsed.serverUrl,
31
+ allowedRoots,
32
+ ...(nodeId === undefined ? {} : { nodeId }),
33
+ ...(credential === undefined ? {} : { credential }),
34
+ ...(registrationToken === undefined ? {} : { registrationToken }),
35
+ ...(dataDirectory === undefined ? {} : { dataDirectory }),
36
+ ...(conversationHosting === undefined ? {} : { conversationHosting })
37
+ };
38
+ }
39
+ /** Uses the Node service account's scope when no Workspace roots are configured. */
40
+ export function defaultAllowedRoots(platform = process.platform, homePath = homedir(), currentDirectory = process.cwd()) {
41
+ return platform === 'win32' ? [win32.parse(currentDirectory).root] : [homePath];
42
+ }
43
+ export function nodeDatabasePath(config, configPath = nodeConfigPath()) {
44
+ return resolve(nodeDataDirectory(config, configPath), 'node-runtime.sqlite');
45
+ }
46
+ export function nodeDataDirectory(config, configPath = nodeConfigPath()) {
47
+ if (config.dataDirectory !== undefined)
48
+ return resolve(dirname(configPath), config.dataDirectory);
49
+ return resolve(dirname(configPath));
50
+ }
51
+ export function hostedConversationStorePath(config, configPath = nodeConfigPath()) {
52
+ const hosting = config.conversationHosting;
53
+ if (hosting?.enabled !== true)
54
+ return undefined;
55
+ const configured = hosting.storeDirectory;
56
+ if (!validStoreDirectory(configured))
57
+ throw new Error('NODE_CONFIG_INVALID');
58
+ const dataDirectory = nodeDataDirectory(config, configPath);
59
+ const store = resolve(dataDirectory, configured);
60
+ const relation = relative(dataDirectory, store);
61
+ if (relation.length === 0 || relation === '..' || relation.startsWith(`..${sep}`))
62
+ throw new Error('NODE_CONFIG_INVALID');
63
+ return store;
64
+ }
65
+ /** Credentials are always written with owner-only POSIX permissions where supported. */
66
+ export async function saveNodeConfig(config, path = nodeConfigPath()) {
67
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
68
+ await writeFile(path, `${JSON.stringify(config, undefined, 2)}\n`, { mode: 0o600 });
69
+ if (process.platform !== 'win32') {
70
+ await chmod(path, 0o600);
71
+ }
72
+ }
73
+ function parseConversationHosting(value) {
74
+ if (value === undefined)
75
+ return undefined;
76
+ if (typeof value !== 'object' ||
77
+ value === null ||
78
+ Array.isArray(value) ||
79
+ typeof value['enabled'] !== 'boolean' ||
80
+ Object.keys(value).some((key) => key !== 'enabled' && key !== 'storeDirectory' && key !== 'inactiveRetentionDays'))
81
+ throw new Error('NODE_CONFIG_INVALID');
82
+ const enabled = value['enabled'];
83
+ const storeDirectory = value['storeDirectory'];
84
+ const inactiveRetentionDays = value['inactiveRetentionDays'] ?? 60;
85
+ if (storeDirectory !== undefined &&
86
+ (typeof storeDirectory !== 'string' || !validStoreDirectory(storeDirectory)))
87
+ throw new Error('NODE_CONFIG_INVALID');
88
+ if (!Number.isInteger(inactiveRetentionDays) ||
89
+ inactiveRetentionDays < 1 ||
90
+ inactiveRetentionDays > 365)
91
+ throw new Error('NODE_CONFIG_INVALID');
92
+ if (enabled && storeDirectory === undefined)
93
+ throw new Error('NODE_CONFIG_INVALID');
94
+ return {
95
+ enabled,
96
+ ...(storeDirectory === undefined ? {} : { storeDirectory }),
97
+ inactiveRetentionDays: inactiveRetentionDays
98
+ };
99
+ }
100
+ function validStoreDirectory(value) {
101
+ if (typeof value !== 'string' || value.trim() !== value || value.length === 0)
102
+ return false;
103
+ if (isAbsolute(value) || value === '.' || value === '..')
104
+ return false;
105
+ return !value.split('/').some((part) => part.length === 0 || part === '.' || part === '..');
106
+ }
@@ -1,2 +1 @@
1
- /* mar-release-protected */
2
- export{};
1
+ export {};
@@ -1,2 +1,22 @@
1
- /* mar-release-protected */
2
- const _0x178f5a=_0x139b;function _0x139b(_0x60f191,_0x5d8fb1){_0x60f191=_0x60f191-(-0x8c*-0x1d+0x4db+0x5*-0x409);const _0x588c24=_0x3c16();let _0x273a4b=_0x588c24[_0x60f191];if(_0x139b['qiMLoz']===undefined){var _0x36b7c0=function(_0x4dc197){const _0x43e5e1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x234262='',_0x251deb='';for(let _0x46bb56=-0x1*0x13c9+-0xe39+0x2202,_0x4e4013,_0x5324bc,_0x181332=-0x9c7+0x553*-0x5+0x2*0x1233;_0x5324bc=_0x4dc197['charAt'](_0x181332++);~_0x5324bc&&(_0x4e4013=_0x46bb56%(-0x1ed9+0x1b4*-0x10+0x57*0xab)?_0x4e4013*(0x3*0x3cd+-0x9d*-0x3+-0xcfe)+_0x5324bc:_0x5324bc,_0x46bb56++%(-0x15e2*0x1+-0xd0*0x2c+0x5e*0x9d))?_0x234262+=String['fromCharCode'](-0x2390+-0x9c7*-0x2+0x1101&_0x4e4013>>(-(0x2*-0x306+0x5a6+-0x2*-0x34)*_0x46bb56&-0x42f+0xf0b*-0x1+-0x8*-0x268)):-0x2*-0xaa1+-0x1*0x31e+-0x1224){_0x5324bc=_0x43e5e1['indexOf'](_0x5324bc);}for(let _0x316ec3=0x117f+-0x22a0+0x1121,_0x51cf57=_0x234262['length'];_0x316ec3<_0x51cf57;_0x316ec3++){_0x251deb+='%'+('00'+_0x234262['charCodeAt'](_0x316ec3)['toString'](0x16b4+-0xe1d*0x1+-0x887))['slice'](-(-0x10df+0xa5c+0x1*0x685));}return decodeURIComponent(_0x251deb);};_0x139b['onDvee']=_0x36b7c0,_0x139b['nQechu']={},_0x139b['qiMLoz']=!![];}const _0x493ce7=_0x588c24[0x371*-0xb+-0xb2*-0x8+-0x7*-0x49d];_0x139b['xpTuhA']!==_0x493ce7&&(_0x139b['nQechu']={},_0x139b['xpTuhA']=_0x493ce7);const _0x1b3150=_0x139b['nQechu'][_0x60f191];return _0x1b3150===undefined?(_0x273a4b=_0x139b['onDvee'](_0x273a4b),_0x139b['nQechu'][_0x60f191]=_0x273a4b):_0x273a4b=_0x1b3150,_0x273a4b;}function _0x3c16(){const _0x51755c=['zw50CMLLCW','nJy1nZqYngvJB0DLDa','AgfZ','CMvZB2X2zq','mtrpyKrRt0S','mZq4DNHWA09p','t1bfuKfusu9ox1vou1vque9sveve','ndu4ntqWnNnTuhfPwG','ota3mZy0mfzRrNnKwG','CMvNAxn0zxjbBgW','mtCXotqYmfL3t3HtDq','mtHcExjmy3C','mJKZntj2re5dzuS','CMvQzwn0','AgfUzgXLCNm','C2v0','CMvNAxn0zxi','z2v0','zxHLy3v0zq','mtm3nJu0y050uMP6','tK9erv9puevsqvrjt05FquXsrufewv9sruDju1rfuKveoG','otu1nZy2n09hyuryuG'];_0x3c16=function(){return _0x51755c;};return _0x3c16();}(function(_0x2d056f,_0x28262b){const _0x1e6007=_0x139b,_0x18da60=_0x2d056f();while(!![]){try{const _0x2654a5=parseInt(_0x1e6007(0x8e))/(0x359*0xa+-0x6ef+0x4f*-0x56)*(-parseInt(_0x1e6007(0x9d))/(0xed*-0xb+-0x3*0x2e3+0xfe*0x13))+parseInt(_0x1e6007(0x96))/(0x1cd+0xc6f+0xe39*-0x1)*(-parseInt(_0x1e6007(0x8f))/(0xe46+0x26bd*-0x1+0x187b*0x1))+parseInt(_0x1e6007(0x94))/(-0x1*0x1b3f+0x1a66+0xde)*(-parseInt(_0x1e6007(0x95))/(0x14cd+0x705+-0x6*0x4a2))+parseInt(_0x1e6007(0x91))/(-0x161*0x1+0xa36+0x1*-0x8ce)+parseInt(_0x1e6007(0x8b))/(0x494*-0x6+0xc95+0xeeb)+parseInt(_0x1e6007(0x9f))/(0x1*-0xd74+0x1188+-0xcf*0x5)+parseInt(_0x1e6007(0x92))/(-0x1b6e+0x1dd2+0x2b*-0xe);if(_0x2654a5===_0x28262b)break;else _0x18da60['push'](_0x18da60['shift']());}catch(_0x515ce7){_0x18da60['push'](_0x18da60['shift']());}}}(_0x3c16,-0x306*-0xe6+-0xd0c94+0x427*0x4bb));export class NodeOperationRouter{[_0x178f5a(0x98)]=new Map();[_0x178f5a(0x9a)](_0x2f8de8,_0x2353fc){const _0x337311=_0x178f5a;if(this[_0x337311(0x98)][_0x337311(0x8c)](_0x2f8de8))throw new Error(_0x337311(0x9e)+_0x2f8de8);this[_0x337311(0x98)][_0x337311(0x99)](_0x2f8de8,_0x2353fc);}[_0x178f5a(0x93)](_0x208754){const _0x4a4a69=_0x178f5a;for(const [_0x23c17d,_0xf327c6]of Object[_0x4a4a69(0x8a)](_0x208754))this[_0x4a4a69(0x9a)](_0x23c17d,_0xf327c6);}[_0x178f5a(0x8c)](_0x2ce50c){const _0x2856a4=_0x178f5a;return this[_0x2856a4(0x98)][_0x2856a4(0x8c)](_0x2ce50c);}[_0x178f5a(0x9c)](_0x4c5c25,_0x577396){const _0x3bffa2=_0x178f5a,_0x503341=this[_0x3bffa2(0x98)][_0x3bffa2(0x9b)](_0x4c5c25);if(_0x503341===undefined)return Promise[_0x3bffa2(0x97)](new Error(_0x3bffa2(0x90)));return Promise[_0x3bffa2(0x8d)](_0x503341(_0x577396));}}
1
+ /** Exact allow-list dispatcher for protocol-defined Node operations. */
2
+ export class NodeOperationRouter {
3
+ handlers = new Map();
4
+ register(operation, handler) {
5
+ if (this.handlers.has(operation))
6
+ throw new Error(`NODE_OPERATION_ALREADY_REGISTERED:${operation}`);
7
+ this.handlers.set(operation, handler);
8
+ }
9
+ registerAll(handlers) {
10
+ for (const [operation, handler] of Object.entries(handlers))
11
+ this.register(operation, handler);
12
+ }
13
+ has(operation) {
14
+ return this.handlers.has(operation);
15
+ }
16
+ execute(operation, data) {
17
+ const handler = this.handlers.get(operation);
18
+ if (handler === undefined)
19
+ return Promise.reject(new Error('OPERATION_UNSUPPORTED'));
20
+ return Promise.resolve(handler(data));
21
+ }
22
+ }