@myagentroam/node 0.9.8 → 0.9.10
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/dist/capabilities.js +2 -92
- package/dist/claude-agent-sdk.js +2 -330
- package/dist/claude-channel.js +2 -44
- package/dist/codex-app-server.js +2 -503
- package/dist/config.js +2 -56
- package/dist/connector/node-connector-options.js +2 -1
- package/dist/connector/node-operation-router.js +2 -22
- package/dist/connector.js +2 -841
- package/dist/control-outbound-scheduler.js +2 -154
- package/dist/database.js +2 -1418
- package/dist/event-buffer.js +2 -19
- package/dist/fake-runner.js +2 -129
- package/dist/health.js +2 -3
- package/dist/main.js +2 -54
- package/dist/migrations/v001.js +3 -144
- package/dist/migrations/v002.js +2 -143
- package/dist/migrations/v003.js +2 -44
- package/dist/migrations/v004.js +34 -30
- package/dist/native-jsonl-reader.js +2 -186
- package/dist/native-session-history.js +2 -1119
- package/dist/opencode-runtime.js +2 -80
- package/dist/opencode-server.js +2 -263
- package/dist/operational.js +2 -122
- package/dist/process-tree.js +2 -18
- package/dist/rotating-log.js +2 -67
- package/dist/runner/abstract-runner.js +2 -232
- package/dist/runner/claude/managed-run-controller.js +2 -345
- package/dist/runner/claude-code-runner.js +2 -303
- package/dist/runner/codex/composer-image-markers.js +2 -0
- package/dist/runner/codex/conversation-parser.js +2 -861
- package/dist/runner/codex/managed-run-controller.js +2 -460
- package/dist/runner/codex-runner.js +2 -628
- package/dist/runner/fake-test-runner.js +2 -47
- package/dist/runner/opencode/conversation-parser.js +2 -221
- package/dist/runner/opencode/managed-run-controller.js +2 -537
- package/dist/runner/opencode-runner.js +2 -448
- package/dist/runner/runner-registry.js +2 -90
- package/dist/runner-command-engine.js +2 -70
- package/dist/runner-profiles.js +2 -215
- package/dist/runner-usage.js +2 -190
- package/dist/runtime-command-detector.js +2 -73
- package/dist/runtime-state.js +2 -973
- package/dist/service/attachment-domain-state.js +2 -7
- package/dist/service/conversation-history-service.js +2 -457
- package/dist/service/conversation-segment-service.js +2 -162
- package/dist/service/external-session-resume-service.js +2 -118
- package/dist/service/fake-managed-run-service.js +2 -60
- package/dist/service/managed-runner-session-service.js +2 -35
- package/dist/service/mcp-installation-verifier.js +2 -87
- package/dist/service/mcp-node-operation-service.js +2 -90
- package/dist/service/mcp-package-installer.js +2 -136
- package/dist/service/native-session-projection-service.js +2 -280
- package/dist/service/native-session-watch-service.js +2 -383
- package/dist/service/node-connection-lifecycle-service.js +2 -83
- package/dist/service/node-control-channel.js +2 -85
- package/dist/service/node-control-message-service.js +2 -107
- package/dist/service/node-request-service.js +2 -52
- package/dist/service/node-run-event-bridge.js +2 -83
- package/dist/service/node-terminal-channel.js +2 -182
- package/dist/service/node-upgrade-coordinator.js +2 -137
- package/dist/service/node-workspace-coordinator.js +2 -70
- package/dist/service/recent-run-projection-service.js +2 -0
- package/dist/service/run-attachment-service.js +2 -194
- package/dist/service/run-domain-state.js +2 -4
- package/dist/service/run-event-service.js +2 -193
- package/dist/service/run-workbench-service.js +2 -104
- package/dist/service/runner-channel-message-service.js +2 -20
- package/dist/service/runner-interaction-service.js +2 -243
- package/dist/service/runner-service.js +2 -71
- package/dist/service/session-catalog-service.js +2 -224
- package/dist/service/session-command-service.js +2 -76
- package/dist/service/session-context-service.js +2 -101
- package/dist/service/session-domain-state.js +2 -9
- package/dist/service/session-identity-service.js +2 -86
- package/dist/service/session-lifecycle-service.js +2 -240
- package/dist/service/session-message-service.js +2 -173
- package/dist/service/session-presentation-service.js +2 -43
- package/dist/service/session-query-service.js +2 -82
- package/dist/service/skill-directory-service.js +2 -238
- package/dist/service/skill-install-service.js +2 -434
- package/dist/service/skill-node-operation-service.js +2 -206
- package/dist/service/terminal-relay-state.js +2 -3
- package/dist/service/terminal-service.js +2 -52
- package/dist/service/workbench-event-service.js +2 -19
- package/dist/service/workbench-manifest-service.js +2 -69
- package/dist/service/workspace-change-service.js +2 -86
- package/dist/service/workspace-content-search-service.js +2 -477
- package/dist/service/workspace-domain-state.js +2 -41
- package/dist/service/workspace-file-service.js +2 -122
- package/dist/service/workspace-git-exclude-service.js +2 -119
- package/dist/service/workspace-queue-workbench-service.js +2 -304
- package/dist/service/workspace-service.js +2 -69
- package/dist/service/workspace-session-service.js +2 -139
- package/dist/service/workspace-upload-service.js +2 -262
- package/dist/service/workspace-watch-service.js +2 -146
- package/dist/service/workspace-workbench-service.js +2 -405
- package/dist/service.js +2 -38
- package/dist/storage.js +2 -32
- package/dist/supervisor.js +2 -136
- package/dist/terminal.js +2 -416
- package/dist/util/node-operation-parsers.js +2 -382
- package/dist/util/personal-instructions.js +2 -31
- package/dist/util/runner-error.js +2 -52
- package/dist/util/runner-native-session-parsers.js +2 -490
- package/dist/util/safe-error.js +2 -5
- package/dist/util/secret-environment.js +2 -25
- package/dist/workspace.js +2 -1519
- package/package.json +3 -3
- package/dist/capabilities.d.ts +0 -12
- package/dist/claude-agent-sdk.d.ts +0 -92
- package/dist/claude-channel.d.ts +0 -28
- package/dist/codex-app-server.d.ts +0 -133
- package/dist/config.d.ts +0 -18
- package/dist/connector/node-connector-options.d.ts +0 -27
- package/dist/connector/node-operation-router.d.ts +0 -9
- package/dist/connector.d.ts +0 -93
- package/dist/control-outbound-scheduler.d.ts +0 -29
- package/dist/database.d.ts +0 -305
- package/dist/event-buffer.d.ts +0 -9
- package/dist/fake-runner.d.ts +0 -42
- package/dist/health.d.ts +0 -4
- package/dist/main.d.ts +0 -2
- package/dist/migrations/v001.d.ts +0 -3
- package/dist/migrations/v002.d.ts +0 -4
- package/dist/migrations/v003.d.ts +0 -4
- package/dist/migrations/v004.d.ts +0 -4
- package/dist/native-jsonl-reader.d.ts +0 -35
- package/dist/native-session-history.d.ts +0 -126
- package/dist/opencode-runtime.d.ts +0 -33
- package/dist/opencode-server.d.ts +0 -49
- package/dist/operational.d.ts +0 -39
- package/dist/process-tree.d.ts +0 -9
- package/dist/rotating-log.d.ts +0 -17
- package/dist/runner/abstract-runner.d.ts +0 -172
- package/dist/runner/claude/managed-run-controller.d.ts +0 -51
- package/dist/runner/claude-code-runner.d.ts +0 -72
- package/dist/runner/codex/conversation-parser.d.ts +0 -59
- package/dist/runner/codex/managed-run-controller.d.ts +0 -90
- package/dist/runner/codex-runner.d.ts +0 -103
- package/dist/runner/fake-test-runner.d.ts +0 -26
- package/dist/runner/opencode/conversation-parser.d.ts +0 -31
- package/dist/runner/opencode/managed-run-controller.d.ts +0 -82
- package/dist/runner/opencode-runner.d.ts +0 -71
- package/dist/runner/runner-registry.d.ts +0 -19
- package/dist/runner-command-engine.d.ts +0 -28
- package/dist/runner-profiles.d.ts +0 -15
- package/dist/runner-usage.d.ts +0 -33
- package/dist/runtime-command-detector.d.ts +0 -3
- package/dist/runtime-state.d.ts +0 -169
- package/dist/service/attachment-domain-state.d.ts +0 -7
- package/dist/service/conversation-history-service.d.ts +0 -43
- package/dist/service/conversation-segment-service.d.ts +0 -20
- package/dist/service/external-session-resume-service.d.ts +0 -34
- package/dist/service/fake-managed-run-service.d.ts +0 -28
- package/dist/service/managed-runner-session-service.d.ts +0 -12
- package/dist/service/mcp-installation-verifier.d.ts +0 -9
- package/dist/service/mcp-node-operation-service.d.ts +0 -11
- package/dist/service/mcp-package-installer.d.ts +0 -8
- package/dist/service/native-session-projection-service.d.ts +0 -52
- package/dist/service/native-session-watch-service.d.ts +0 -62
- package/dist/service/node-connection-lifecycle-service.d.ts +0 -35
- package/dist/service/node-control-channel.d.ts +0 -32
- package/dist/service/node-control-message-service.d.ts +0 -27
- package/dist/service/node-request-service.d.ts +0 -14
- package/dist/service/node-run-event-bridge.d.ts +0 -40
- package/dist/service/node-terminal-channel.d.ts +0 -29
- package/dist/service/node-upgrade-coordinator.d.ts +0 -29
- package/dist/service/node-workspace-coordinator.d.ts +0 -29
- package/dist/service/run-attachment-service.d.ts +0 -38
- package/dist/service/run-domain-state.d.ts +0 -4
- package/dist/service/run-event-service.d.ts +0 -33
- package/dist/service/run-workbench-service.d.ts +0 -25
- package/dist/service/runner-channel-message-service.d.ts +0 -13
- package/dist/service/runner-interaction-service.d.ts +0 -39
- package/dist/service/runner-service.d.ts +0 -46
- package/dist/service/session-catalog-service.d.ts +0 -45
- package/dist/service/session-command-service.d.ts +0 -24
- package/dist/service/session-context-service.d.ts +0 -35
- package/dist/service/session-domain-state.d.ts +0 -9
- package/dist/service/session-identity-service.d.ts +0 -24
- package/dist/service/session-lifecycle-service.d.ts +0 -31
- package/dist/service/session-message-service.d.ts +0 -33
- package/dist/service/session-presentation-service.d.ts +0 -34
- package/dist/service/session-query-service.d.ts +0 -35
- package/dist/service/skill-directory-service.d.ts +0 -20
- package/dist/service/skill-install-service.d.ts +0 -21
- package/dist/service/skill-node-operation-service.d.ts +0 -44
- package/dist/service/terminal-relay-state.d.ts +0 -6
- package/dist/service/terminal-service.d.ts +0 -12
- package/dist/service/workbench-event-service.d.ts +0 -9
- package/dist/service/workbench-manifest-service.d.ts +0 -90
- package/dist/service/workspace-change-service.d.ts +0 -9
- package/dist/service/workspace-content-search-service.d.ts +0 -14
- package/dist/service/workspace-domain-state.d.ts +0 -79
- package/dist/service/workspace-file-service.d.ts +0 -18
- package/dist/service/workspace-git-exclude-service.d.ts +0 -4
- package/dist/service/workspace-queue-workbench-service.d.ts +0 -86
- package/dist/service/workspace-service.d.ts +0 -15
- package/dist/service/workspace-session-service.d.ts +0 -23
- package/dist/service/workspace-upload-service.d.ts +0 -39
- package/dist/service/workspace-watch-service.d.ts +0 -23
- package/dist/service/workspace-workbench-service.d.ts +0 -58
- package/dist/service.d.ts +0 -4
- package/dist/storage.d.ts +0 -2
- package/dist/supervisor.d.ts +0 -1
- package/dist/terminal.d.ts +0 -133
- package/dist/util/node-operation-parsers.d.ts +0 -92
- package/dist/util/personal-instructions.d.ts +0 -2
- package/dist/util/runner-error.d.ts +0 -6
- package/dist/util/runner-native-session-parsers.d.ts +0 -74
- package/dist/util/safe-error.d.ts +0 -2
- package/dist/util/secret-environment.d.ts +0 -1
- package/dist/workspace.d.ts +0 -217
package/dist/opencode-runtime.js
CHANGED
|
@@ -1,80 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
const PROBE_TIMEOUT_MS = 3_000;
|
|
4
|
-
export function probeOpenCode(command = 'opencode') {
|
|
5
|
-
const invocation = platformCliInvocation(command, ['--version']);
|
|
6
|
-
const result = spawnSync(invocation.command, invocation.args, {
|
|
7
|
-
windowsHide: true,
|
|
8
|
-
env: minimalRunnerEnvironment(),
|
|
9
|
-
timeout: PROBE_TIMEOUT_MS,
|
|
10
|
-
encoding: 'utf8'
|
|
11
|
-
});
|
|
12
|
-
if (result.status !== 0 || result.error !== undefined)
|
|
13
|
-
return { available: false, compatible: false };
|
|
14
|
-
return openCodeProbeResult(`${result.stdout}${result.stderr}`);
|
|
15
|
-
}
|
|
16
|
-
export async function probeOpenCodeAsync(command = 'opencode') {
|
|
17
|
-
const invocation = platformCliInvocation(command, ['--version']);
|
|
18
|
-
const result = await runRunnerProbe(invocation.command, invocation.args, {
|
|
19
|
-
env: minimalRunnerEnvironment(),
|
|
20
|
-
timeoutMs: PROBE_TIMEOUT_MS
|
|
21
|
-
});
|
|
22
|
-
return result.status === 0
|
|
23
|
-
? openCodeProbeResult(`${result.stdout}${result.stderr}`)
|
|
24
|
-
: { available: false, compatible: false };
|
|
25
|
-
}
|
|
26
|
-
function openCodeProbeResult(output) {
|
|
27
|
-
const version = output.trim().replace(/^v/i, '').slice(0, 128);
|
|
28
|
-
return {
|
|
29
|
-
available: version.length > 0,
|
|
30
|
-
compatible: /^1\.18\./.test(version),
|
|
31
|
-
...(version.length === 0 ? {} : { version })
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
export function openCodeProfileModels(catalog) {
|
|
35
|
-
const connected = new Set(catalog.connected ?? []);
|
|
36
|
-
return (catalog.all ?? [])
|
|
37
|
-
.filter((provider) => typeof provider.id === 'string' &&
|
|
38
|
-
connected.has(provider.id) &&
|
|
39
|
-
provider.source === 'config')
|
|
40
|
-
.flatMap((provider) => {
|
|
41
|
-
const providerId = provider.id;
|
|
42
|
-
return Object.entries(provider.models ?? {}).flatMap(([key, model]) => {
|
|
43
|
-
const modelId = boundedString(model.id) ?? boundedString(key);
|
|
44
|
-
if (modelId === undefined)
|
|
45
|
-
return [];
|
|
46
|
-
const variants = Object.entries(model.variants ?? {})
|
|
47
|
-
.filter(([, value]) => value.disabled !== true)
|
|
48
|
-
.map(([id]) => id)
|
|
49
|
-
.filter((id) => id.length > 0 && id.length <= 64)
|
|
50
|
-
.slice(0, 32);
|
|
51
|
-
return [
|
|
52
|
-
{
|
|
53
|
-
id: `${providerId}/${modelId}`.slice(0, 128),
|
|
54
|
-
label: (boundedString(model.name) ?? modelId).slice(0, 128),
|
|
55
|
-
supportedEfforts: variants
|
|
56
|
-
}
|
|
57
|
-
];
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
export function openCodeContextLimits(catalog) {
|
|
62
|
-
const connected = new Set(catalog.connected ?? []);
|
|
63
|
-
return new Map((catalog.all ?? [])
|
|
64
|
-
.filter((provider) => typeof provider.id === 'string' &&
|
|
65
|
-
connected.has(provider.id) &&
|
|
66
|
-
provider.source === 'config')
|
|
67
|
-
.flatMap((provider) => Object.entries(provider.models ?? {}).flatMap(([key, model]) => {
|
|
68
|
-
const modelId = boundedString(model.id) ?? boundedString(key);
|
|
69
|
-
const context = model.limit?.context;
|
|
70
|
-
return modelId !== undefined && Number.isSafeInteger(context) && (context ?? 0) > 0
|
|
71
|
-
? [[`${provider.id}/${modelId}`, context]]
|
|
72
|
-
: [];
|
|
73
|
-
})));
|
|
74
|
-
}
|
|
75
|
-
function boundedString(value) {
|
|
76
|
-
if (typeof value !== 'string')
|
|
77
|
-
return undefined;
|
|
78
|
-
const trimmed = value.trim();
|
|
79
|
-
return trimmed.length > 0 && trimmed.length <= 4096 ? trimmed : undefined;
|
|
80
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
const _0x4db73d=_0x2c15;(function(_0x4894d1,_0x4665cc){const _0x1c0a8d=_0x2c15,_0x24cc83=_0x4894d1();while(!![]){try{const _0x2917e1=-parseInt(_0x1c0a8d(0x106))/(0x1d8b+0x10cc+-0x2e56)*(parseInt(_0x1c0a8d(0x116))/(0x19c0+0x1b11+-0xb*0x4cd))+-parseInt(_0x1c0a8d(0x10b))/(-0x16bd*-0x1+-0x3*0x3e1+-0xb17)*(parseInt(_0x1c0a8d(0x115))/(-0x8*-0x3b2+-0x1*-0x2069+0x11*-0x3a5))+-parseInt(_0x1c0a8d(0x12d))/(-0x9*0x1c+-0x1*0x687+0x788)+-parseInt(_0x1c0a8d(0x125))/(-0x14*-0x18a+-0x417+-0x1aab)*(parseInt(_0x1c0a8d(0x11c))/(0x1*0x77f+0x255*-0xf+0x1b83))+parseInt(_0x1c0a8d(0x121))/(-0x1ea8+-0x15bd+0x346d)*(-parseInt(_0x1c0a8d(0x109))/(-0x117b*-0x2+-0xa*0x14e+0x3*-0x74b))+-parseInt(_0x1c0a8d(0x10d))/(0x12db*0x2+-0x12f*-0xa+0x2*-0x18c1)+parseInt(_0x1c0a8d(0x10c))/(-0x1*-0x2525+-0x3cf+-0x214b);if(_0x2917e1===_0x4665cc)break;else _0x24cc83['push'](_0x24cc83['shift']());}catch(_0x1a343b){_0x24cc83['push'](_0x24cc83['shift']());}}}(_0x381b,-0x3e97f+0xca8bf*0x1+-0x685d*0x2));import{spawnSync}from'node:child_process';function _0x2c15(_0x95d870,_0x49e08d){_0x95d870=_0x95d870-(-0xeb2+-0x121b+0x21d2);const _0x10c8f4=_0x381b();let _0x1c7545=_0x10c8f4[_0x95d870];if(_0x2c15['NcvfIu']===undefined){var _0x3fd066=function(_0x314057){const _0x5347a1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3b6085='',_0x4767d3='';for(let _0x13f4d2=0x3*-0x87b+-0x5*-0x33b+0x94a,_0x271090,_0x2a4622,_0x3f9493=0x3*0x935+0x5*0x6b7+0x8be*-0x7;_0x2a4622=_0x314057['charAt'](_0x3f9493++);~_0x2a4622&&(_0x271090=_0x13f4d2%(0x13e*0x3+0x1*-0x1147+0xd91)?_0x271090*(-0xe83+-0x17*-0x15+-0x2*-0x670)+_0x2a4622:_0x2a4622,_0x13f4d2++%(0x1f8+-0x270d+0x2519))?_0x3b6085+=String['fromCharCode'](-0x59+0x229f*-0x1+0x23f7&_0x271090>>(-(0xfe7+-0x835*0x3+-0x1*-0x8ba)*_0x13f4d2&-0x15c4+0x59*0xf+0x1093)):-0x29*0x3d+-0x4ef*0x2+0x13a3){_0x2a4622=_0x5347a1['indexOf'](_0x2a4622);}for(let _0x4f8be1=-0x13*-0x37+-0x23*-0x8+0x52d*-0x1,_0x3c85f5=_0x3b6085['length'];_0x4f8be1<_0x3c85f5;_0x4f8be1++){_0x4767d3+='%'+('00'+_0x3b6085['charCodeAt'](_0x4f8be1)['toString'](-0x20*0x56+0xb93+0x27*-0x5))['slice'](-(0xe85+-0x17cb+-0x8*-0x129));}return decodeURIComponent(_0x4767d3);};_0x2c15['SGNXWF']=_0x3fd066,_0x2c15['toZlfN']={},_0x2c15['NcvfIu']=!![];}const _0x408158=_0x10c8f4[0x14ac+0x4*-0x687+0x570];_0x2c15['ZQbSJd']!==_0x408158&&(_0x2c15['toZlfN']={},_0x2c15['ZQbSJd']=_0x408158);const _0x1b64d0=_0x2c15['toZlfN'][_0x95d870];return _0x1b64d0===undefined?(_0x1c7545=_0x2c15['SGNXWF'](_0x1c7545),_0x2c15['toZlfN'][_0x95d870]=_0x1c7545):_0x1c7545=_0x1b64d0,_0x1c7545;}import{minimalRunnerEnvironment,platformCliInvocation,runRunnerProbe}from'./operational.js';const PROBE_TIMEOUT_MS=0x6ec*-0x2+0x1*-0xbcf+0x3*0xc75;export function probeOpenCode(_0x76d3bb=_0x4db73d(0x119)){const _0x564bf8=_0x4db73d,_0x2751a4=platformCliInvocation(_0x76d3bb,[_0x564bf8(0x113)]),_0x49915=spawnSync(_0x2751a4[_0x564bf8(0x10e)],_0x2751a4[_0x564bf8(0x122)],{'windowsHide':!![],'env':minimalRunnerEnvironment(),'timeout':PROBE_TIMEOUT_MS,'encoding':_0x564bf8(0x10a)});if(_0x49915[_0x564bf8(0x10f)]!==-0xa*-0x283+0xe55*0x2+0x4*-0xd72||_0x49915[_0x564bf8(0x114)]!==undefined)return{'available':![],'compatible':![]};return openCodeProbeResult(''+_0x49915[_0x564bf8(0x11d)]+_0x49915[_0x564bf8(0x107)]);}export async function probeOpenCodeAsync(_0x141055=_0x4db73d(0x119)){const _0x53e693=_0x4db73d,_0x2829a8=platformCliInvocation(_0x141055,[_0x53e693(0x113)]),_0x5ebec0=await runRunnerProbe(_0x2829a8[_0x53e693(0x10e)],_0x2829a8[_0x53e693(0x122)],{'env':minimalRunnerEnvironment(),'timeoutMs':PROBE_TIMEOUT_MS});return _0x5ebec0[_0x53e693(0x10f)]===-0x1*0x1efe+-0x2e7*0x5+-0x1*-0x2d81?openCodeProbeResult(''+_0x5ebec0[_0x53e693(0x11d)]+_0x5ebec0[_0x53e693(0x107)]):{'available':![],'compatible':![]};}function openCodeProbeResult(_0x5c0792){const _0xf18da1=_0x4db73d,_0x249bd0=_0x5c0792[_0xf18da1(0x12b)]()[_0xf18da1(0x129)](/^v/i,'')[_0xf18da1(0x11e)](0x1f8+-0x270d+0x2515,-0x59+0x229f*-0x1+0x2378);return{'available':_0x249bd0[_0xf18da1(0x111)]>0xfe7+-0x835*0x3+-0x1*-0x8b8,'compatible':/^1\.18\./[_0xf18da1(0x112)](_0x249bd0),..._0x249bd0[_0xf18da1(0x111)]===-0x15c4+0x59*0xf+0x108d?{}:{'version':_0x249bd0}};}function _0x381b(){const _0x1a7d71=['C3rKzxjY','y29UDgv4Da','ouzeufH5Eq','DxrMoa','nKnSwvzcAa','ndC5nJC0mJvvwxbHBKO','mta3odK0mfrjD2TgtG','y29TBwfUza','C3rHDhvZ','zMLSDgvY','BgvUz3rO','DgvZDa','ls12zxjZAw9U','zxjYB3i','mtyXntiZmKrpBeXovq','mtHKBgvhvNG','BMfTzq','ywXS','B3bLBMnVzgu','DMfYAwfUDhm','zw50CMLLCW','n2TPBxLKrW','C3rKB3v0','C2XPy2u','y29UBMvJDgvK','AgfZ','nJeXmtK5mNHPENDXsG','yxjNCW','C291CMnL','zgLZywjSzwq','ndq4mtuWoerSEu1RyW','BwfW','Bw9KzwXZ','zMXHDe1HCa','CMvWBgfJzq','BgLTAxq','DhjPBq','y29UzMLN','nde1otaWnxbzzg9lvW','AxntywzLsw50zwDLCG','C3rYAw5N','nJq3mZDODeffufG'];_0x381b=function(){return _0x1a7d71;};return _0x381b();}export function openCodeProfileModels(_0x15cab4){const _0xff69ea=_0x4db73d,_0x41d8e9=new Set(_0x15cab4[_0xff69ea(0x11f)]??[]);return(_0x15cab4[_0xff69ea(0x118)]??[])[_0xff69ea(0x110)](_0x17326d=>typeof _0x17326d['id']===_0xff69ea(0x105)&&_0x41d8e9[_0xff69ea(0x120)](_0x17326d['id'])&&_0x17326d[_0xff69ea(0x123)]===_0xff69ea(0x12c))[_0xff69ea(0x128)](_0x48c094=>{const _0x226381=_0xff69ea,_0x29ee24=_0x48c094['id'];return Object[_0x226381(0x11b)](_0x48c094[_0x226381(0x127)]??{})[_0x226381(0x128)](([_0xe6a322,_0x27cae5])=>{const _0x286d2b=_0x226381,_0xc6a021=boundedString(_0x27cae5['id'])??boundedString(_0xe6a322);if(_0xc6a021===undefined)return[];const _0x2fd25a=Object[_0x286d2b(0x11b)](_0x27cae5[_0x286d2b(0x11a)]??{})[_0x286d2b(0x110)](([,_0x44d6f8])=>_0x44d6f8[_0x286d2b(0x124)]!==!![])[_0x286d2b(0x126)](([_0x289bae])=>_0x289bae)[_0x286d2b(0x110)](_0x1e751c=>_0x1e751c[_0x286d2b(0x111)]>-0x29*0x3d+-0x4ef*0x2+0x13a3&&_0x1e751c[_0x286d2b(0x111)]<=-0x13*-0x37+-0x23*-0x8+0x4ed*-0x1)[_0x286d2b(0x11e)](-0x20*0x56+0xb93+0xd3*-0x1,0xe85+-0x17cb+-0x2*-0x4b3);return[{'id':(_0x29ee24+'/'+_0xc6a021)[_0x286d2b(0x11e)](0x14ac+0x4*-0x687+0x570,-0x1f66+0x1575+0x1b*0x63),'label':(boundedString(_0x27cae5[_0x286d2b(0x117)])??_0xc6a021)[_0x286d2b(0x11e)](0x9*-0x1d9+-0x29*-0x8+0xf59,0x4*-0x11c+-0xb*-0x12f+0x1*-0x815),'supportedEfforts':_0x2fd25a}];});});}export function openCodeContextLimits(_0x370134){const _0x44eb78=_0x4db73d,_0x15a33a=new Set(_0x370134[_0x44eb78(0x11f)]??[]);return new Map((_0x370134[_0x44eb78(0x118)]??[])[_0x44eb78(0x110)](_0x3a5422=>typeof _0x3a5422['id']===_0x44eb78(0x105)&&_0x15a33a[_0x44eb78(0x120)](_0x3a5422['id'])&&_0x3a5422[_0x44eb78(0x123)]===_0x44eb78(0x12c))[_0x44eb78(0x128)](_0x218fe4=>Object[_0x44eb78(0x11b)](_0x218fe4[_0x44eb78(0x127)]??{})[_0x44eb78(0x128)](([_0x50d9be,_0x5e555e])=>{const _0x5d2d6a=_0x44eb78,_0x32c1a8=boundedString(_0x5e555e['id'])??boundedString(_0x50d9be),_0x39f74f=_0x5e555e[_0x5d2d6a(0x12a)]?.[_0x5d2d6a(0x108)];return _0x32c1a8!==undefined&&Number[_0x5d2d6a(0x12e)](_0x39f74f)&&(_0x39f74f??0x273+0x15e4+-0x1857)>0xd3*0x2+-0xd5b+0xbb5?[[_0x218fe4['id']+'/'+_0x32c1a8,_0x39f74f]]:[];})));}function boundedString(_0x5cf588){const _0x131ba0=_0x4db73d;if(typeof _0x5cf588!==_0x131ba0(0x105))return undefined;const _0x46b826=_0x5cf588[_0x131ba0(0x12b)]();return _0x46b826[_0x131ba0(0x111)]>0x2*0x1232+-0x25d2+-0x2*-0xb7&&_0x46b826[_0x131ba0(0x111)]<=-0x1893+-0x1cc1*0x1+-0xc*-0x5c7?_0x46b826:undefined;}
|
package/dist/opencode-server.js
CHANGED
|
@@ -1,263 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { randomBytes } from 'node:crypto';
|
|
3
|
-
import { createServer } from 'node:net';
|
|
4
|
-
import { minimalRunnerEnvironment, platformCliInvocation } from './operational.js';
|
|
5
|
-
import { terminateProcessTree } from './process-tree.js';
|
|
6
|
-
const START_TIMEOUT_MS = 10_000;
|
|
7
|
-
export class OpenCodeServerClient {
|
|
8
|
-
options;
|
|
9
|
-
child;
|
|
10
|
-
client;
|
|
11
|
-
starting;
|
|
12
|
-
environment = {};
|
|
13
|
-
constructor(options = {}) {
|
|
14
|
-
this.options = options;
|
|
15
|
-
}
|
|
16
|
-
configureEnvironment(environment) {
|
|
17
|
-
if (this.child !== undefined)
|
|
18
|
-
throw new Error('OPENCODE_SERVER_ALREADY_STARTED');
|
|
19
|
-
this.environment = { ...environment };
|
|
20
|
-
}
|
|
21
|
-
async start() {
|
|
22
|
-
if (this.client !== undefined)
|
|
23
|
-
return;
|
|
24
|
-
if (this.starting !== undefined)
|
|
25
|
-
return this.starting;
|
|
26
|
-
const starting = this.startServer();
|
|
27
|
-
this.starting = starting;
|
|
28
|
-
try {
|
|
29
|
-
await starting;
|
|
30
|
-
}
|
|
31
|
-
finally {
|
|
32
|
-
if (this.starting === starting)
|
|
33
|
-
this.starting = undefined;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
async startServer() {
|
|
37
|
-
const { createOpencodeClient } = await import('@opencode-ai/sdk/v2/client');
|
|
38
|
-
const port = await availablePort();
|
|
39
|
-
const password = randomBytes(24).toString('base64url');
|
|
40
|
-
const invocation = platformCliInvocation(this.options.command ?? 'opencode', [
|
|
41
|
-
'serve',
|
|
42
|
-
'--hostname',
|
|
43
|
-
'127.0.0.1',
|
|
44
|
-
'--port',
|
|
45
|
-
String(port)
|
|
46
|
-
]);
|
|
47
|
-
const spawnProcess = this.options.spawnProcess ?? spawn;
|
|
48
|
-
const child = spawnProcess(invocation.command, invocation.args, {
|
|
49
|
-
windowsHide: true,
|
|
50
|
-
detached: process.platform !== 'win32',
|
|
51
|
-
env: {
|
|
52
|
-
...minimalRunnerEnvironment(),
|
|
53
|
-
...this.environment,
|
|
54
|
-
OPENCODE_SERVER_USERNAME: 'opencode',
|
|
55
|
-
OPENCODE_SERVER_PASSWORD: password,
|
|
56
|
-
OPENCODE_DISABLE_AUTOUPDATE: 'true'
|
|
57
|
-
},
|
|
58
|
-
stdio: ['ignore', 'pipe', 'pipe']
|
|
59
|
-
});
|
|
60
|
-
this.child = child;
|
|
61
|
-
const authorization = `Basic ${Buffer.from(`opencode:${password}`).toString('base64')}`;
|
|
62
|
-
const client = createOpencodeClient({
|
|
63
|
-
baseUrl: `http://127.0.0.1:${port}`,
|
|
64
|
-
headers: { authorization },
|
|
65
|
-
throwOnError: true
|
|
66
|
-
});
|
|
67
|
-
try {
|
|
68
|
-
await waitUntilHealthy(`http://127.0.0.1:${port}/global/health`, authorization, child, this.options.startTimeoutMs ?? START_TIMEOUT_MS);
|
|
69
|
-
this.client = client;
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
await this.stop();
|
|
73
|
-
throw error;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
async providers(directory) {
|
|
77
|
-
const client = await this.requireClient();
|
|
78
|
-
return unwrap(await client.provider.list({ directory }));
|
|
79
|
-
}
|
|
80
|
-
async configureMcp(directory, mcp) {
|
|
81
|
-
const client = await this.requireClient();
|
|
82
|
-
if (typeof mcp !== 'object' || mcp === null || Array.isArray(mcp))
|
|
83
|
-
return;
|
|
84
|
-
for (const [name, config] of Object.entries(mcp)) {
|
|
85
|
-
await client.mcp.add({
|
|
86
|
-
directory,
|
|
87
|
-
name,
|
|
88
|
-
config: config
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
async sessions(directory, limit = 100) {
|
|
93
|
-
const client = await this.requireClient();
|
|
94
|
-
return unwrap(await client.session.list({ directory, limit }));
|
|
95
|
-
}
|
|
96
|
-
async sessionStatus(directory) {
|
|
97
|
-
const client = await this.requireClient();
|
|
98
|
-
return unwrap(await client.session.status({ directory }));
|
|
99
|
-
}
|
|
100
|
-
async createSession(directory, title) {
|
|
101
|
-
const client = await this.requireClient();
|
|
102
|
-
return unwrap(await client.session.create({ directory, ...(title === undefined ? {} : { title }) }));
|
|
103
|
-
}
|
|
104
|
-
async forkSession(directory, sessionID, messageID) {
|
|
105
|
-
const client = await this.requireClient();
|
|
106
|
-
return unwrap(await client.session.fork({ directory, sessionID, messageID }));
|
|
107
|
-
}
|
|
108
|
-
async messages(directory, sessionID, limit = 100) {
|
|
109
|
-
const client = await this.requireClient();
|
|
110
|
-
return unwrap(await client.session.messages({ directory, sessionID, limit }));
|
|
111
|
-
}
|
|
112
|
-
async updateSession(directory, sessionID, title) {
|
|
113
|
-
const client = await this.requireClient();
|
|
114
|
-
return unwrap(await client.session.update({ directory, sessionID, title }));
|
|
115
|
-
}
|
|
116
|
-
async deleteSession(directory, sessionID) {
|
|
117
|
-
const client = await this.requireClient();
|
|
118
|
-
return unwrap(await client.session.delete({ directory, sessionID }));
|
|
119
|
-
}
|
|
120
|
-
async abort(directory, sessionID) {
|
|
121
|
-
const client = await this.requireClient();
|
|
122
|
-
return unwrap(await client.session.abort({ directory, sessionID }));
|
|
123
|
-
}
|
|
124
|
-
async summarize(directory, sessionID, model) {
|
|
125
|
-
const client = await this.requireClient();
|
|
126
|
-
const separator = model.indexOf('/');
|
|
127
|
-
if (separator <= 0 || separator === model.length - 1)
|
|
128
|
-
throw new Error('OPENCODE_MODEL_INVALID');
|
|
129
|
-
return unwrap(await client.session.summarize({
|
|
130
|
-
directory,
|
|
131
|
-
sessionID,
|
|
132
|
-
providerID: model.slice(0, separator),
|
|
133
|
-
modelID: model.slice(separator + 1)
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
async replyPermission(directory, requestID, decision) {
|
|
137
|
-
const client = await this.requireClient();
|
|
138
|
-
return unwrap(await client.permission.reply({
|
|
139
|
-
directory,
|
|
140
|
-
requestID,
|
|
141
|
-
reply: decision === 'APPROVED' ? 'once' : 'reject'
|
|
142
|
-
}));
|
|
143
|
-
}
|
|
144
|
-
async replyQuestion(directory, requestID, answers) {
|
|
145
|
-
const client = await this.requireClient();
|
|
146
|
-
return unwrap(await client.question.reply({
|
|
147
|
-
directory,
|
|
148
|
-
requestID,
|
|
149
|
-
answers: answers.map((answer) => [...answer])
|
|
150
|
-
}));
|
|
151
|
-
}
|
|
152
|
-
async rejectQuestion(directory, requestID) {
|
|
153
|
-
const client = await this.requireClient();
|
|
154
|
-
return unwrap(await client.question.reject({ directory, requestID }));
|
|
155
|
-
}
|
|
156
|
-
async prompt(input) {
|
|
157
|
-
const client = await this.requireClient();
|
|
158
|
-
const separator = input.model.indexOf('/');
|
|
159
|
-
if (separator <= 0 || separator === input.model.length - 1)
|
|
160
|
-
throw new Error('OPENCODE_MODEL_INVALID');
|
|
161
|
-
return unwrap(await client.session.promptAsync({
|
|
162
|
-
directory: input.directory,
|
|
163
|
-
sessionID: input.sessionID,
|
|
164
|
-
model: {
|
|
165
|
-
providerID: input.model.slice(0, separator),
|
|
166
|
-
modelID: input.model.slice(separator + 1)
|
|
167
|
-
},
|
|
168
|
-
...(input.variant === undefined || input.variant.length === 0
|
|
169
|
-
? {}
|
|
170
|
-
: { variant: input.variant }),
|
|
171
|
-
...(input.agent === undefined ? {} : { agent: input.agent }),
|
|
172
|
-
...(input.system === undefined ? {} : { system: input.system }),
|
|
173
|
-
parts: [
|
|
174
|
-
{ type: 'text', text: input.text },
|
|
175
|
-
...(input.attachments ?? []).map((attachment) => ({
|
|
176
|
-
type: 'file',
|
|
177
|
-
mime: attachment.mime,
|
|
178
|
-
filename: attachment.name,
|
|
179
|
-
url: `data:${attachment.mime};base64,${attachment.dataBase64}`
|
|
180
|
-
}))
|
|
181
|
-
]
|
|
182
|
-
}));
|
|
183
|
-
}
|
|
184
|
-
async subscribe(directory, signal, onEvent, onReady) {
|
|
185
|
-
const client = await this.requireClient();
|
|
186
|
-
const stream = await client.event.subscribe({ directory }, { signal });
|
|
187
|
-
onReady?.();
|
|
188
|
-
for await (const event of stream.stream)
|
|
189
|
-
onEvent(event);
|
|
190
|
-
}
|
|
191
|
-
async stop() {
|
|
192
|
-
this.client = undefined;
|
|
193
|
-
const child = this.child;
|
|
194
|
-
this.child = undefined;
|
|
195
|
-
if (child === undefined)
|
|
196
|
-
return;
|
|
197
|
-
if (child.pid === undefined) {
|
|
198
|
-
child.kill('SIGTERM');
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
try {
|
|
202
|
-
await terminateProcessTree({
|
|
203
|
-
pid: child.pid,
|
|
204
|
-
kill: (signal) => child.kill(signal)
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
catch {
|
|
208
|
-
child.kill('SIGTERM');
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
async requireClient() {
|
|
212
|
-
await this.start();
|
|
213
|
-
return this.client;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
async function availablePort() {
|
|
217
|
-
return new Promise((resolve, reject) => {
|
|
218
|
-
const server = createServer();
|
|
219
|
-
server.once('error', reject);
|
|
220
|
-
server.listen(0, '127.0.0.1', () => {
|
|
221
|
-
const address = server.address();
|
|
222
|
-
const port = typeof address === 'object' && address !== null ? address.port : undefined;
|
|
223
|
-
server.close((error) => {
|
|
224
|
-
if (error !== undefined)
|
|
225
|
-
reject(error);
|
|
226
|
-
else if (port === undefined)
|
|
227
|
-
reject(new Error('OPENCODE_PORT_UNAVAILABLE'));
|
|
228
|
-
else
|
|
229
|
-
resolve(port);
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
async function waitUntilHealthy(url, authorization, child, timeoutMs) {
|
|
235
|
-
const deadline = Date.now() + timeoutMs;
|
|
236
|
-
while (Date.now() < deadline) {
|
|
237
|
-
if (child.exitCode !== null)
|
|
238
|
-
throw new Error('OPENCODE_SERVER_EXITED');
|
|
239
|
-
try {
|
|
240
|
-
const response = await fetch(url, {
|
|
241
|
-
headers: { authorization },
|
|
242
|
-
signal: AbortSignal.timeout(Math.min(1_000, Math.max(1, deadline - Date.now())))
|
|
243
|
-
});
|
|
244
|
-
if (response.ok)
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
catch {
|
|
248
|
-
// The child may still be binding its loopback socket.
|
|
249
|
-
}
|
|
250
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
251
|
-
}
|
|
252
|
-
throw new Error('OPENCODE_SERVER_START_TIMEOUT');
|
|
253
|
-
}
|
|
254
|
-
function unwrap(result) {
|
|
255
|
-
if (typeof result !== 'object' || result === null || !('data' in result))
|
|
256
|
-
return result;
|
|
257
|
-
const wrapped = result;
|
|
258
|
-
if (wrapped.error !== undefined)
|
|
259
|
-
throw new Error('OPENCODE_REQUEST_FAILED');
|
|
260
|
-
if (wrapped.data === undefined)
|
|
261
|
-
throw new Error('OPENCODE_RESPONSE_INVALID');
|
|
262
|
-
return wrapped.data;
|
|
263
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
const _0x39758c=_0x2cb5;(function(_0x28feff,_0x420e65){const _0x2ca913=_0x2cb5,_0xb41b50=_0x28feff();while(!![]){try{const _0x20e26a=-parseInt(_0x2ca913(0x206))/(0x125f*-0x1+-0xf86+0x21e6)*(parseInt(_0x2ca913(0x205))/(-0x261a+-0x15fd*-0x1+-0x101f*-0x1))+parseInt(_0x2ca913(0x23b))/(0x46e+0xe9*0x1d+-0x1d0*0x11)*(parseInt(_0x2ca913(0x238))/(0xb18+0x266+0x159*-0xa))+-parseInt(_0x2ca913(0x228))/(-0x29*0x23+0xd66+-0x7c6)*(parseInt(_0x2ca913(0x226))/(0x97e+-0x2c5+-0x6b3))+parseInt(_0x2ca913(0x20f))/(-0x1505+-0xec7+0x23d3)*(parseInt(_0x2ca913(0x21c))/(0x377*-0x5+-0x1acd+0x2c28))+-parseInt(_0x2ca913(0x22f))/(0xbf*0x12+0x1528*0x1+0x5*-0x6e9)*(-parseInt(_0x2ca913(0x217))/(-0x633*-0x1+0xdfd*0x1+-0x1426))+parseInt(_0x2ca913(0x1f2))/(-0x2283+0x1616+-0x31e*-0x4)+-parseInt(_0x2ca913(0x1d9))/(0x41f*0x1+0x9ea*0x3+-0x1*0x21d1)*(parseInt(_0x2ca913(0x1fa))/(-0x1a00+0x1*0x1442+0x5cb));if(_0x20e26a===_0x420e65)break;else _0xb41b50['push'](_0xb41b50['shift']());}catch(_0x521298){_0xb41b50['push'](_0xb41b50['shift']());}}}(_0x3682,0x3d7*0x52f+0xb2fe5+0x1*-0x1332d3));import{spawn}from'node:child_process';function _0x3682(){const _0x15d0e0=['ChjVDMLKzxjZ','t1bftKnprevFue9svf9vtKfwquLmqujmrq','BM93','zgvSzxrL','AwDUB3jL','DgLTzw91Da','qvbquK9wruq','y2HPBgq','CgvYBwLZC2LVBG','zgf0yujHC2u2na','B3bLBMnVzgu6','C3rYzwfT','C2vZC2LVBNm','zxzLBNq','zxjYB3i','t1bftKnprevFu0vsvKvsx1nuqvjux1rjtuvpvvq','BwLTzq','qg9Wzw5JB2rLlwfPl3nKAY92mI9JBgLLBNq','mtCXmJe5nNfyD3zpEq','BgLZDgvU','D2LUmZi','u0Lhvevstq','Cg9YDa','zM9YAW','ChjVBxb0qxn5BMm','y3jLyxrL','y29UzMLNDxjLrw52AxjVBM1LBNq','mti3lJaUmc4X','Aw5KzxHpzG','t1bftKnprevFtu9eruXFsu5wquXjra','ChjVDMLKzxi','C3rHDhvZ','ls1WB3j0','C2vZC2LVBLn0yxr1CW','ywrK','C3bHD25qCM9JzxnZ','ChjVBxb0','BwnW','CMvQzwn0','A2LSBa','CMvWBhK','Bwf4','zMLSzq','mtq4ntu2odDluvP6zg8','y2XVC2u','C3vIC2nYAwjL','BgvUz3rO','zw52AxjVBM1LBNq','zgf0ytO','Dg9tDhjPBMC','C3rHCNruAw1LB3v0txm','otfysu5OvKq','yxjNCW','BwvZC2fNzxm','yMfZzty0DxjS','Bw9KzwW','B25Jzq','t1bftKnprevFu0vsvKvsx0vysvrfra','DxbKyxrLu2vZC2LVBG','C2vZC2LVBKLe','CgLK','y2XPzw50','mJu3ndbns3vgwuC','mteZDKzVyxHp','ywjVCNq','C3vTBwfYAxPL','Dhj1zq','t1bftKnprevFuKvrvuvtvf9gquLmruq','B3b0Aw9UCW','DMfYAwfUDa','C3rVCa','zxHPDenVzgu','mZaXsuPKtMnn','C3rHCNrPBMC','C3rHCNrtzxj2zxi','zgvSzxrLu2vZC2LVBG','ls1OB3n0BMfTzq','CgXHDgzVCM0','zM9YA1nLC3nPB24','CMvQzwn0uxvLC3rPB24','nte4odmWEMH6uujM','BgLZDa','C2vZC2LVBG','C2XPy2u','ywrKCMvZCW','mtq4nZy4rxPHww9n','zgLYzwn0B3j5','B2jQzwn0','qMfZAwmG','C3rHCNq','y3jLyxrLu2vZC2LVBG','AxnbCNjHEq','y29TBwfUza','Ahr0CdOVlZeYnY4WlJaUmtO','zNjVBq','otzVBLLiANm','BwLU','mtGZmZG1zNHMwNfl','C3LZDgvT','CgLWzq','CMvWBhLrDwvZDgLVBG','zw50CMLLCW','zgf0yq','CMvWBhLqzxjTAxnZAw9U','nZj1AMXUrLK','yxr0ywnOBwvUDhm','l2DSB2jHBc9OzwfSDgG','CMvXDwLYzunSAwvUDa','y29UzMLNDxjLtwnW','yMfZzty0','o2jHC2u2ncW','C2vYDMu','B3bLBMnVzgu','mtj5tfrhCMu','Dgv4Da','t1bftKnprevFuKvtue9ou0vFsu5wquXjra','mti1ndeXn1jJug1Asa','BwfW','ywDLBNq','t1bftKnprevFu0vsvKvsx0fmuKvbrfLFu1rbuLrfra','BMfTzq','DxbKyxrL','CxvLC3rPB24'];_0x3682=function(){return _0x15d0e0;};return _0x3682();}import{randomBytes}from'node:crypto';import{createServer}from'node:net';import{minimalRunnerEnvironment,platformCliInvocation}from'./operational.js';import{terminateProcessTree}from'./process-tree.js';const START_TIMEOUT_MS=0x1d9*-0x29+0x3f1*-0x8+0x9259;export class OpenCodeServerClient{[_0x39758c(0x20b)];[_0x39758c(0x1ce)];[_0x39758c(0x204)];[_0x39758c(0x210)];[_0x39758c(0x1f6)]={};constructor(_0x3c6760={}){const _0x349a39=_0x39758c;this[_0x349a39(0x20b)]=_0x3c6760;}[_0x39758c(0x1e1)](_0x149497){const _0x22329e=_0x39758c;if(this[_0x22329e(0x1ce)]!==undefined)throw new Error(_0x22329e(0x23e));this[_0x22329e(0x1f6)]={..._0x149497};}async[_0x39758c(0x220)](){const _0x2280ba=_0x39758c;if(this[_0x2280ba(0x204)]!==undefined)return;if(this[_0x2280ba(0x210)]!==undefined)return this[_0x2280ba(0x210)];const _0x277bde=this[_0x2280ba(0x211)]();this[_0x2280ba(0x210)]=_0x277bde;try{await _0x277bde;}finally{if(this[_0x2280ba(0x210)]===_0x277bde)this[_0x2280ba(0x210)]=undefined;}}async[_0x39758c(0x211)](){const _0x2a7f43=_0x39758c,{createOpencodeClient:_0x40ca83}=await import(_0x2a7f43(0x1d8)),_0x1615b6=await availablePort(),_0x215ebf=randomBytes(0x13fb+0x69*-0x5f+0x1314)[_0x2a7f43(0x1f8)](_0x2a7f43(0x1fd)),_0x108c67=platformCliInvocation(this[_0x2a7f43(0x20b)][_0x2a7f43(0x223)]??_0x2a7f43(0x237),[_0x2a7f43(0x236),_0x2a7f43(0x213),_0x2a7f43(0x1e2),_0x2a7f43(0x1e7),String(_0x1615b6)]),_0x319f6e=this[_0x2a7f43(0x20b)][_0x2a7f43(0x1ea)]??spawn,_0x137e93=_0x319f6e(_0x108c67[_0x2a7f43(0x223)],_0x108c67[_0x2a7f43(0x1fb)],{'windowsHide':!![],'detached':process[_0x2a7f43(0x214)]!==_0x2a7f43(0x1db),'env':{...minimalRunnerEnvironment(),...this[_0x2a7f43(0x1f6)],'OPENCODE_SERVER_USERNAME':_0x2a7f43(0x237),'OPENCODE_SERVER_PASSWORD':_0x215ebf,'OPENCODE_DISABLE_AUTOUPDATE':_0x2a7f43(0x209)},'stdio':[_0x2a7f43(0x246),_0x2a7f43(0x22a),_0x2a7f43(0x22a)]});this[_0x2a7f43(0x1ce)]=_0x137e93;const _0x130e96=_0x2a7f43(0x21f)+Buffer[_0x2a7f43(0x225)](_0x2a7f43(0x1d1)+_0x215ebf)[_0x2a7f43(0x1f8)](_0x2a7f43(0x234)),_0x5454e1=_0x40ca83({'baseUrl':_0x2a7f43(0x224)+_0x1615b6,'headers':{'authorization':_0x130e96},'throwOnError':!![]});try{await waitUntilHealthy(_0x2a7f43(0x224)+_0x1615b6+_0x2a7f43(0x231),_0x130e96,_0x137e93,this[_0x2a7f43(0x20b)][_0x2a7f43(0x1f9)]??START_TIMEOUT_MS),this[_0x2a7f43(0x204)]=_0x5454e1;}catch(_0x165a70){await this[_0x2a7f43(0x20d)]();throw _0x165a70;}}async[_0x39758c(0x242)](_0x25b291){const _0x34f631=_0x39758c,_0x40b841=await this[_0x34f631(0x232)]();return unwrap(await _0x40b841[_0x34f631(0x1e5)][_0x34f631(0x218)]({'directory':_0x25b291}));}async[_0x39758c(0x233)](_0x3b20e3,_0x3b9081){const _0x1d0c03=_0x39758c,_0x1a6a23=await this[_0x1d0c03(0x232)]();if(typeof _0x3b9081!==_0x1d0c03(0x21e)||_0x3b9081===null||Array[_0x1d0c03(0x222)](_0x3b9081))return;for(const [_0x1325fe,_0xc99709]of Object[_0x1d0c03(0x22c)](_0x3b9081)){await _0x1a6a23[_0x1d0c03(0x1ec)][_0x1d0c03(0x1e9)]({'directory':_0x3b20e3,'name':_0x1325fe,'config':_0xc99709});}}async[_0x39758c(0x1d3)](_0x3281a3,_0x27480a=0x138+-0x1148+0x83a*0x2){const _0x53e42b=_0x39758c,_0x1102e4=await this[_0x53e42b(0x232)]();return unwrap(await _0x1102e4[_0x53e42b(0x219)][_0x53e42b(0x218)]({'directory':_0x3281a3,'limit':_0x27480a}));}async[_0x39758c(0x1e8)](_0x2fdbcd){const _0x3de9e7=_0x39758c,_0x274075=await this[_0x3de9e7(0x232)]();return unwrap(await _0x274075[_0x3de9e7(0x219)][_0x3de9e7(0x1e6)]({'directory':_0x2fdbcd}));}async[_0x39758c(0x221)](_0x4ae4da,_0x424fac){const _0x3470c0=_0x39758c,_0x52ca2e=await this[_0x3470c0(0x232)]();return unwrap(await _0x52ca2e[_0x3470c0(0x219)][_0x3470c0(0x1e0)]({'directory':_0x4ae4da,..._0x424fac===undefined?{}:{'title':_0x424fac}}));}async[_0x39758c(0x215)](_0x504653,_0x12c2e7,_0x4cadc7){const _0x410a15=_0x39758c,_0x18613c=await this[_0x410a15(0x232)]();return unwrap(await _0x18613c[_0x410a15(0x219)][_0x410a15(0x1de)]({'directory':_0x504653,'sessionID':_0x12c2e7,'messageID':_0x4cadc7}));}async[_0x39758c(0x1fc)](_0x566a0d,_0x389561,_0x2a8625=-0x4cb+-0x1*0x1549+0x268*0xb){const _0x40fe5b=_0x39758c,_0x120d06=await this[_0x40fe5b(0x232)]();return unwrap(await _0x120d06[_0x40fe5b(0x219)][_0x40fe5b(0x1fc)]({'directory':_0x566a0d,'sessionID':_0x389561,'limit':_0x2a8625}));}async[_0x39758c(0x201)](_0x5d5df6,_0x2016de,_0x149366){const _0x12e5b5=_0x39758c,_0x121cfa=await this[_0x12e5b5(0x232)]();return unwrap(await _0x121cfa[_0x12e5b5(0x219)][_0x12e5b5(0x240)]({'directory':_0x5d5df6,'sessionID':_0x2016de,'title':_0x149366}));}async[_0x39758c(0x212)](_0x23dec6,_0x302a40){const _0xcf54c4=_0x39758c,_0x4d7c8c=await this[_0xcf54c4(0x232)]();return unwrap(await _0x4d7c8c[_0xcf54c4(0x219)][_0xcf54c4(0x245)]({'directory':_0x23dec6,'sessionID':_0x302a40}));}async[_0x39758c(0x207)](_0x4138f3,_0x2a2eea){const _0x13bf42=_0x39758c,_0x4cb002=await this[_0x13bf42(0x232)]();return unwrap(await _0x4cb002[_0x13bf42(0x219)][_0x13bf42(0x207)]({'directory':_0x4138f3,'sessionID':_0x2a2eea}));}async[_0x39758c(0x208)](_0x43623b,_0x581b10,_0x1f251e){const _0x369444=_0x39758c,_0x161bc2=await this[_0x369444(0x232)](),_0x587220=_0x1f251e[_0x369444(0x1e3)]('/');if(_0x587220<=-0xd79*0x2+-0x9df+0x24d1||_0x587220===_0x1f251e[_0x369444(0x1f5)]-(-0x13*0xe5+0xb*0x1d+0xfc1*0x1))throw new Error(_0x369444(0x1e4));return unwrap(await _0x161bc2[_0x369444(0x219)][_0x369444(0x208)]({'directory':_0x43623b,'sessionID':_0x581b10,'providerID':_0x1f251e[_0x369444(0x21a)](-0x1*0x47f+0x18b7+-0x2*0xa1c,_0x587220),'modelID':_0x1f251e[_0x369444(0x21a)](_0x587220+(0x1546+0x6fb*-0x3+-0x54))}));}async[_0x39758c(0x22e)](_0x2a5acf,_0x2229b2,_0x40582c){const _0x5706fa=_0x39758c,_0x5a991b=await this[_0x5706fa(0x232)]();return unwrap(await _0x5a991b[_0x5706fa(0x1cf)][_0x5706fa(0x1ef)]({'directory':_0x2a5acf,'requestID':_0x2229b2,'reply':_0x40582c===_0x5706fa(0x248)?_0x5706fa(0x1ff):_0x5706fa(0x1ed)}));}async[_0x39758c(0x22b)](_0x396f41,_0x4f5237,_0x5a2151){const _0x1f5111=_0x39758c,_0x2dd560=await this[_0x1f5111(0x232)]();return unwrap(await _0x2dd560[_0x1f5111(0x241)][_0x1f5111(0x1ef)]({'directory':_0x396f41,'requestID':_0x4f5237,'answers':_0x5a2151[_0x1f5111(0x23c)](_0x227d9c=>[..._0x227d9c])}));}async[_0x39758c(0x216)](_0x38e490,_0x52eb7e){const _0x3391a9=_0x39758c,_0x3823f1=await this[_0x3391a9(0x232)]();return unwrap(await _0x3823f1[_0x3391a9(0x241)][_0x3391a9(0x1ed)]({'directory':_0x38e490,'requestID':_0x52eb7e}));}async[_0x39758c(0x1eb)](_0x13a0af){const _0x3f875d=_0x39758c,_0x2a0ced=await this[_0x3f875d(0x232)](),_0x32ea6d=_0x13a0af[_0x3f875d(0x1fe)][_0x3f875d(0x1e3)]('/');if(_0x32ea6d<=-0x1a*-0x83+-0x1efc+0x11ae||_0x32ea6d===_0x13a0af[_0x3f875d(0x1fe)][_0x3f875d(0x1f5)]-(0x564*-0x2+0x17e9+-0x78*0x1c))throw new Error(_0x3f875d(0x1e4));return unwrap(await _0x2a0ced[_0x3f875d(0x219)][_0x3f875d(0x1df)]({'directory':_0x13a0af[_0x3f875d(0x21d)],'sessionID':_0x13a0af[_0x3f875d(0x202)],'model':{'providerID':_0x13a0af[_0x3f875d(0x1fe)][_0x3f875d(0x21a)](0x65+0x20b9+-0x211e,_0x32ea6d),'modelID':_0x13a0af[_0x3f875d(0x1fe)][_0x3f875d(0x21a)](_0x32ea6d+(0x2*0x7e2+-0x1*-0x851+-0x1814))},..._0x13a0af[_0x3f875d(0x20c)]===undefined||_0x13a0af[_0x3f875d(0x20c)][_0x3f875d(0x1f5)]===-0x1*-0x218f+0x10ec*-0x1+0x10a3*-0x1?{}:{'variant':_0x13a0af[_0x3f875d(0x20c)]},..._0x13a0af[_0x3f875d(0x23d)]===undefined?{}:{'agent':_0x13a0af[_0x3f875d(0x23d)]},..._0x13a0af[_0x3f875d(0x229)]===undefined?{}:{'system':_0x13a0af[_0x3f875d(0x229)]},'parts':[{'type':_0x3f875d(0x239),'text':_0x13a0af[_0x3f875d(0x239)]},...(_0x13a0af[_0x3f875d(0x230)]??[])[_0x3f875d(0x23c)](_0x1b08d7=>({'type':_0x3f875d(0x1f1),'mime':_0x1b08d7[_0x3f875d(0x1d7)],'filename':_0x1b08d7[_0x3f875d(0x23f)],'url':_0x3f875d(0x1f7)+_0x1b08d7[_0x3f875d(0x1d7)]+_0x3f875d(0x235)+_0x1b08d7[_0x3f875d(0x1d0)]}))]}));}async[_0x39758c(0x1f4)](_0x2912c6,_0x5f08f9,_0x318b80,_0x4904d3){const _0x18b06a=_0x39758c,_0x28e20b=await this[_0x18b06a(0x232)](),_0x373708=await _0x28e20b[_0x18b06a(0x1d4)][_0x18b06a(0x1f4)]({'directory':_0x2912c6},{'signal':_0x5f08f9});_0x4904d3?.();for await(const _0x4a7d47 of _0x373708[_0x18b06a(0x1d2)])_0x318b80(_0x4a7d47);}async[_0x39758c(0x20d)](){const _0x528037=_0x39758c;this[_0x528037(0x204)]=undefined;const _0x2e7cb5=this[_0x528037(0x1ce)];this[_0x528037(0x1ce)]=undefined;if(_0x2e7cb5===undefined)return;if(_0x2e7cb5[_0x528037(0x203)]===undefined){_0x2e7cb5[_0x528037(0x1ee)](_0x528037(0x1dc));return;}try{await terminateProcessTree({'pid':_0x2e7cb5[_0x528037(0x203)],'kill':_0x38837d=>_0x2e7cb5[_0x528037(0x1ee)](_0x38837d)});}catch{_0x2e7cb5[_0x528037(0x1ee)](_0x528037(0x1dc));}}async[_0x39758c(0x232)](){const _0x595528=_0x39758c;return await this[_0x595528(0x220)](),this[_0x595528(0x204)];}}function _0x2cb5(_0x58a5fb,_0x1b098e){_0x58a5fb=_0x58a5fb-(-0x1*-0x21e6+0x10d*-0xd+-0x625*0x3);const _0x5aa68d=_0x3682();let _0x2a5706=_0x5aa68d[_0x58a5fb];if(_0x2cb5['PsUZpk']===undefined){var _0x47546b=function(_0x5eaf72){const _0x1168b9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2ae590='',_0x14c236='';for(let _0x400f0e=0xfaf+-0x1ba5+0x5fb*0x2,_0x5886cd,_0x25ba5a,_0x2f3226=0x24ca+-0x13fb*-0x1+-0x38c5;_0x25ba5a=_0x5eaf72['charAt'](_0x2f3226++);~_0x25ba5a&&(_0x5886cd=_0x400f0e%(0x179b+-0x36*-0x61+-0x2c0d)?_0x5886cd*(-0x2*0x11c7+0x26ec+-0x31e)+_0x25ba5a:_0x25ba5a,_0x400f0e++%(0x1a9*0xf+-0x100e+-0x8d5))?_0x2ae590+=String['fromCharCode'](0x15f7+-0x1730+0x238&_0x5886cd>>(-(0x13f+0x32*0x4b+0xfe3*-0x1)*_0x400f0e&-0x1*0x47f+0x18b7+-0xa*0x205)):0x1546+0x6fb*-0x3+-0x55){_0x25ba5a=_0x1168b9['indexOf'](_0x25ba5a);}for(let _0x2c4fd7=-0x1a*-0x83+-0x1efc+0x11ae,_0x324163=_0x2ae590['length'];_0x2c4fd7<_0x324163;_0x2c4fd7++){_0x14c236+='%'+('00'+_0x2ae590['charCodeAt'](_0x2c4fd7)['toString'](0x564*-0x2+0x17e9+-0x29d*0x5))['slice'](-(0x65+0x20b9+-0x211c));}return decodeURIComponent(_0x14c236);};_0x2cb5['HbbaPv']=_0x47546b,_0x2cb5['VIcsvb']={},_0x2cb5['PsUZpk']=!![];}const _0x5dd90a=_0x5aa68d[0x2*0x7e2+-0x1*-0x851+-0x1815];_0x2cb5['xnEvcA']!==_0x5dd90a&&(_0x2cb5['VIcsvb']={},_0x2cb5['xnEvcA']=_0x5dd90a);const _0x3a66a9=_0x2cb5['VIcsvb'][_0x58a5fb];return _0x3a66a9===undefined?(_0x2a5706=_0x2cb5['HbbaPv'](_0x2a5706),_0x2cb5['VIcsvb'][_0x58a5fb]=_0x2a5706):_0x2a5706=_0x3a66a9,_0x2a5706;}async function availablePort(){return new Promise((_0x168ea3,_0xe0dc0c)=>{const _0x5dd063=_0x2cb5,_0x964335=createServer();_0x964335[_0x5dd063(0x1ff)](_0x5dd063(0x1d5),_0xe0dc0c),_0x964335[_0x5dd063(0x1da)](-0x18cf+0x14f*-0x3+0x1cbc,_0x5dd063(0x1e2),()=>{const _0x5e6323=_0x5dd063,_0x5d8384=_0x964335[_0x5e6323(0x21b)](),_0x50c30c=typeof _0x5d8384===_0x5e6323(0x21e)&&_0x5d8384!==null?_0x5d8384[_0x5e6323(0x1dd)]:undefined;_0x964335[_0x5e6323(0x1f3)](_0x30b6c4=>{const _0x23fc93=_0x5e6323;if(_0x30b6c4!==undefined)_0xe0dc0c(_0x30b6c4);else{if(_0x50c30c===undefined)_0xe0dc0c(new Error(_0x23fc93(0x243)));else _0x168ea3(_0x50c30c);}});});});}async function waitUntilHealthy(_0x48b86b,_0x2a90f6,_0x4d7b95,_0xe8b00e){const _0x2e1210=_0x39758c,_0x2b8a17=Date[_0x2e1210(0x244)]()+_0xe8b00e;while(Date[_0x2e1210(0x244)]()<_0x2b8a17){if(_0x4d7b95[_0x2e1210(0x20e)]!==null)throw new Error(_0x2e1210(0x200));try{const _0xb48e13=await fetch(_0x48b86b,{'headers':{'authorization':_0x2a90f6},'signal':AbortSignal[_0x2e1210(0x247)](Math[_0x2e1210(0x227)](0x1*-0x67+0x162*-0x2+-0x1*-0x713,Math[_0x2e1210(0x1f0)](0x413+-0x1389+0xf77,_0x2b8a17-Date[_0x2e1210(0x244)]())))});if(_0xb48e13['ok'])return;}catch{}await new Promise(_0x18fe47=>setTimeout(_0x18fe47,0x1d8e+0xb4+-0x34*0x94));}throw new Error(_0x2e1210(0x1d6));}function unwrap(_0x590fee){const _0xc329ea=_0x39758c;if(typeof _0x590fee!==_0xc329ea(0x21e)||_0x590fee===null||!(_0xc329ea(0x22d)in _0x590fee))return _0x590fee;const _0x5b950d=_0x590fee;if(_0x5b950d[_0xc329ea(0x1d5)]!==undefined)throw new Error(_0xc329ea(0x20a));if(_0x5b950d[_0xc329ea(0x22d)]===undefined)throw new Error(_0xc329ea(0x23a));return _0x5b950d[_0xc329ea(0x22d)];}
|
package/dist/operational.js
CHANGED
|
@@ -1,122 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const secretKey = /(?:password|credential|token|cookie|authorization|secret|api[_-]?key)/i;
|
|
4
|
-
export function runRunnerProbe(command, args, options) {
|
|
5
|
-
return new Promise((resolve) => {
|
|
6
|
-
const child = spawn(command, args, {
|
|
7
|
-
windowsHide: true,
|
|
8
|
-
env: options.env,
|
|
9
|
-
stdio: ['ignore', 'pipe', 'pipe']
|
|
10
|
-
});
|
|
11
|
-
let stdout = '';
|
|
12
|
-
let stderr = '';
|
|
13
|
-
let settled = false;
|
|
14
|
-
const finish = (status) => {
|
|
15
|
-
if (settled)
|
|
16
|
-
return;
|
|
17
|
-
settled = true;
|
|
18
|
-
clearTimeout(timer);
|
|
19
|
-
resolve({ status, stdout, stderr });
|
|
20
|
-
};
|
|
21
|
-
const timer = setTimeout(() => {
|
|
22
|
-
finish(null);
|
|
23
|
-
child.kill();
|
|
24
|
-
}, options.timeoutMs);
|
|
25
|
-
child.stdout.setEncoding('utf8');
|
|
26
|
-
child.stderr.setEncoding('utf8');
|
|
27
|
-
child.stdout.on('data', (value) => (stdout += value));
|
|
28
|
-
child.stderr.on('data', (value) => (stderr += value));
|
|
29
|
-
child.once('error', () => finish(null));
|
|
30
|
-
child.once('close', (status) => finish(status));
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
export class NodeMetrics {
|
|
34
|
-
connectionAttempts = 0;
|
|
35
|
-
reconnects = 0;
|
|
36
|
-
heartbeats = 0;
|
|
37
|
-
runnerFailures = 0;
|
|
38
|
-
connectedAttempt() {
|
|
39
|
-
this.connectionAttempts += 1;
|
|
40
|
-
}
|
|
41
|
-
reconnectScheduled() {
|
|
42
|
-
this.reconnects += 1;
|
|
43
|
-
}
|
|
44
|
-
heartbeatSent() {
|
|
45
|
-
this.heartbeats += 1;
|
|
46
|
-
}
|
|
47
|
-
runnerFailed() {
|
|
48
|
-
this.runnerFailures += 1;
|
|
49
|
-
}
|
|
50
|
-
snapshot() {
|
|
51
|
-
return {
|
|
52
|
-
connectionAttempts: this.connectionAttempts,
|
|
53
|
-
reconnects: this.reconnects,
|
|
54
|
-
heartbeats: this.heartbeats,
|
|
55
|
-
runnerFailures: this.runnerFailures
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
export function redactLogValue(value) {
|
|
60
|
-
if (Array.isArray(value))
|
|
61
|
-
return value.map(redactLogValue);
|
|
62
|
-
if (value !== null && typeof value === 'object')
|
|
63
|
-
return Object.fromEntries(Object.entries(value).map(([key, item]) => [
|
|
64
|
-
key,
|
|
65
|
-
secretKey.test(key) ? '[REDACTED]' : redactLogValue(item)
|
|
66
|
-
]));
|
|
67
|
-
return value;
|
|
68
|
-
}
|
|
69
|
-
export function minimalRunnerEnvironment(input = process.env) {
|
|
70
|
-
const allowed = new Set([
|
|
71
|
-
'PATH',
|
|
72
|
-
'Path',
|
|
73
|
-
'HOME',
|
|
74
|
-
'USERPROFILE',
|
|
75
|
-
'TMPDIR',
|
|
76
|
-
'TMP',
|
|
77
|
-
'TEMP',
|
|
78
|
-
'SystemRoot',
|
|
79
|
-
'COMSPEC',
|
|
80
|
-
'LANG',
|
|
81
|
-
'LC_ALL',
|
|
82
|
-
'TERM'
|
|
83
|
-
]);
|
|
84
|
-
const output = {};
|
|
85
|
-
for (const [key, value] of Object.entries(input)) {
|
|
86
|
-
if (allowed.has(key) && !secretKey.test(key) && typeof value === 'string')
|
|
87
|
-
output[key] = value;
|
|
88
|
-
}
|
|
89
|
-
return output;
|
|
90
|
-
}
|
|
91
|
-
/** Windows npm CLIs are `.cmd` shims and require the controlled command processor path. */
|
|
92
|
-
export function platformCliCommand(command, platform = process.platform) {
|
|
93
|
-
if (platform !== 'win32' || /\.(?:cmd|exe|bat)$/i.test(command))
|
|
94
|
-
return command;
|
|
95
|
-
return `${command}.cmd`;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Runs only Node-owned CLI arguments through Windows' command processor so npm
|
|
99
|
-
* `.cmd` shims work without enabling `shell: true` on the actual child process.
|
|
100
|
-
*/
|
|
101
|
-
export function platformCliInvocation(command, args, platform = process.platform, comspec = process.env.ComSpec ?? process.env.COMSPEC ?? 'cmd.exe') {
|
|
102
|
-
const cliCommand = platformCliCommand(command, platform);
|
|
103
|
-
if (platform !== 'win32' || !/\.(?:cmd|bat)$/i.test(cliCommand))
|
|
104
|
-
return { command: cliCommand, args };
|
|
105
|
-
if (![cliCommand, ...args].every((value) => /^[A-Za-z0-9_@./:\\ -]+$/.test(value)))
|
|
106
|
-
throw new Error('NODE_CLI_COMMAND_INVALID');
|
|
107
|
-
return {
|
|
108
|
-
command: comspec,
|
|
109
|
-
args: [
|
|
110
|
-
'/d',
|
|
111
|
-
'/s',
|
|
112
|
-
'/c',
|
|
113
|
-
[cliCommand, ...args].map((value) => (value.includes(' ') ? `"${value}"` : value)).join(' ')
|
|
114
|
-
]
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
export function nodeLog(event, fields = {}) {
|
|
118
|
-
const safeFields = redactLogValue(fields);
|
|
119
|
-
const line = `${JSON.stringify({ timestamp: new Date().toISOString(), level: 'info', component: 'mar-node', event, ...safeFields })}\n`;
|
|
120
|
-
process.stdout.write(line);
|
|
121
|
-
writeNodeLog(line);
|
|
122
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
const _0x4e915a=_0x551d;(function(_0x510742,_0x346c5e){const _0x2f7bb9=_0x551d,_0x2ecf44=_0x510742();while(!![]){try{const _0x1913b5=parseInt(_0x2f7bb9(0xd9))/(-0x1115+-0x16df+0x27f5)*(-parseInt(_0x2f7bb9(0xd7))/(0x455*0x7+0x2179+-0x3fca))+parseInt(_0x2f7bb9(0x101))/(0x221c*-0x1+-0x21f0+-0x83*-0x85)+-parseInt(_0x2f7bb9(0xd4))/(0x1c9*0x8+-0x4cb*-0x2+-0x17da)+-parseInt(_0x2f7bb9(0xe5))/(-0x254b+0x1d0c+-0x2*-0x422)+parseInt(_0x2f7bb9(0x10b))/(0x1f8c+0xa6f+-0x29f5)+parseInt(_0x2f7bb9(0xe7))/(0xc1*-0x33+0x1*-0xd49+-0x1141*-0x3)*(-parseInt(_0x2f7bb9(0xe2))/(-0x131c+0x7*-0x237+0x22a5))+parseInt(_0x2f7bb9(0xf9))/(-0xcdd*-0x1+0x1b0e+0x13f1*-0x2);if(_0x1913b5===_0x346c5e)break;else _0x2ecf44['push'](_0x2ecf44['shift']());}catch(_0x4c7e20){_0x2ecf44['push'](_0x2ecf44['shift']());}}}(_0x39c7,-0x51710+0x10b4cf+-0x17*0x194f));import{spawn}from'node:child_process';import{writeNodeLog}from'./rotating-log.js';const secretKey=/(?:password|credential|token|cookie|authorization|secret|api[_-]?key)/i;export function runRunnerProbe(_0x273ecf,_0x3863d7,_0x1f6b59){return new Promise(_0x587fb8=>{const _0x145a75=_0x551d,_0x3a8468=spawn(_0x273ecf,_0x3863d7,{'windowsHide':!![],'env':_0x1f6b59[_0x145a75(0xf4)],'stdio':[_0x145a75(0xfa),_0x145a75(0xea),_0x145a75(0xea)]});let _0x34edfa='',_0x1cfcfd='',_0x6479cf=![];const _0x3d23b6=_0x588446=>{if(_0x6479cf)return;_0x6479cf=!![],clearTimeout(_0x2150a8),_0x587fb8({'status':_0x588446,'stdout':_0x34edfa,'stderr':_0x1cfcfd});},_0x2150a8=setTimeout(()=>{const _0x413430=_0x145a75;_0x3d23b6(null),_0x3a8468[_0x413430(0xf8)]();},_0x1f6b59[_0x145a75(0x100)]);_0x3a8468[_0x145a75(0x106)][_0x145a75(0xe4)](_0x145a75(0x107)),_0x3a8468[_0x145a75(0xda)][_0x145a75(0xe4)](_0x145a75(0x107)),_0x3a8468[_0x145a75(0x106)]['on'](_0x145a75(0xf3),_0x3fc871=>_0x34edfa+=_0x3fc871),_0x3a8468[_0x145a75(0xda)]['on'](_0x145a75(0xf3),_0x1d8e6c=>_0x1cfcfd+=_0x1d8e6c),_0x3a8468[_0x145a75(0xf1)](_0x145a75(0xef),()=>_0x3d23b6(null)),_0x3a8468[_0x145a75(0xf1)](_0x145a75(0xfc),_0x36e937=>_0x3d23b6(_0x36e937));});}export class NodeMetrics{[_0x4e915a(0xe1)]=0x355*-0x5+0x2*0x409+-0x1*-0x897;[_0x4e915a(0x10f)]=0x1b40+0x1a41*-0x1+-0xf*0x11;[_0x4e915a(0xd1)]=0x15*0x19f+0x17cd+-0x39d8;[_0x4e915a(0xd2)]=-0x49d*0x7+0x59*-0x2e+0x3049;[_0x4e915a(0x102)](){const _0x5ba2e2=_0x4e915a;this[_0x5ba2e2(0xe1)]+=-0x3*-0x2b9+0x45a+-0xc84;}[_0x4e915a(0xf0)](){const _0xf2a43d=_0x4e915a;this[_0xf2a43d(0x10f)]+=0x1d4*-0xd+0x6*0x2f9+0x1f*0x31;}[_0x4e915a(0x103)](){const _0x23639f=_0x4e915a;this[_0x23639f(0xd1)]+=-0x3*0x20b+-0xe0a+0x50b*0x4;}[_0x4e915a(0xd0)](){const _0x3f6d7c=_0x4e915a;this[_0x3f6d7c(0xd2)]+=0x2*0x3c2+0x13*-0xd0+0x7ed;}[_0x4e915a(0x10e)](){const _0x5b0c70=_0x4e915a;return{'connectionAttempts':this[_0x5b0c70(0xe1)],'reconnects':this[_0x5b0c70(0x10f)],'heartbeats':this[_0x5b0c70(0xd1)],'runnerFailures':this[_0x5b0c70(0xd2)]};}}export function redactLogValue(_0x59723b){const _0x447363=_0x4e915a;if(Array[_0x447363(0x110)](_0x59723b))return _0x59723b[_0x447363(0xe0)](redactLogValue);if(_0x59723b!==null&&typeof _0x59723b===_0x447363(0x10c))return Object[_0x447363(0xd8)](Object[_0x447363(0xfb)](_0x59723b)[_0x447363(0xe0)](([_0x5e2b91,_0x218be4])=>[_0x5e2b91,secretKey[_0x447363(0xde)](_0x5e2b91)?_0x447363(0xdd):redactLogValue(_0x218be4)]));return _0x59723b;}function _0x39c7(){const _0x1188d8=['CNvUBMvYrMfPBgvK','AgvHCNrIzwf0CW','CNvUBMvYrMfPBhvYzxm','C3rYAw5NAwz5','ndm3mdyZmKHICKrQAW','tenFquXm','AM9PBG','nJa0mNn4AwvkAa','zNjVBuvUDhjPzxm','mJu1BLzHEfPk','C3rKzxjY','vevnua','lMnTza','w1jfrefdvevexq','DgvZDa','BwfYlw5Vzgu','BwfW','y29UBMvJDgLVBKf0DgvTChrZ','mJu4odb3yvLLBg4','ve1qreLs','C2v0rw5JB2rPBMC','mZiZntGYmfj5D0f2wa','y21KlMv4zq','mJe3B0v1vez5','vevstq','u3LZDgvTuM9VDa','CgLWzq','q09nu1bfqW','CgXHDgzVCM0','AgfZ','teforW','zxjYB3i','CMvJB25Uzwn0u2nOzwr1BgvK','B25Jzq','ugf0Aa','zgf0yq','zw52','tK9erv9dteLFq09ntuforf9jtLzbteLe','C3rYAw5N','Dg9ju09tDhjPBMC','A2LSBa','mtC2nJu1nJb2uvftrxK','AwDUB3jL','zw50CMLLCW','y2XVC2u','zxzLCNK','Aw5JBhvKzxm','se9nrq','DgLTzw91De1Z','mZyZntu3ng5TBMz5DW','y29UBMvJDgvKqxr0zw1WDa','AgvHCNrIzwf0u2vUDa','D2LUmZi','D3jPDgu','C3rKB3v0','DxrMoa','Aw5MBW','vvnfuLbst0zjteu','uefusa','mJG4mtu2quvWvxvx','B2jQzwn0','ve1q','C25HChnOB3q','CMvJB25Uzwn0CW','AxnbCNjHEq'];_0x39c7=function(){return _0x1188d8;};return _0x39c7();}export function minimalRunnerEnvironment(_0x514112=process.env){const _0x197c21=_0x4e915a,_0x221a25=new Set([_0x197c21(0x10a),_0x197c21(0xf2),_0x197c21(0xff),_0x197c21(0x109),_0x197c21(0xe3),_0x197c21(0x10d),_0x197c21(0xdb),_0x197c21(0xe9),_0x197c21(0xeb),_0x197c21(0xee),_0x197c21(0xd5),_0x197c21(0xe8)]),_0x5cf563={};for(const [_0x2ffa48,_0x4725aa]of Object[_0x197c21(0xfb)](_0x514112)){if(_0x221a25[_0x197c21(0xed)](_0x2ffa48)&&!secretKey[_0x197c21(0xde)](_0x2ffa48)&&typeof _0x4725aa===_0x197c21(0xf6))_0x5cf563[_0x2ffa48]=_0x4725aa;}return _0x5cf563;}export function platformCliCommand(_0x53d427,_0x5edc23=process[_0x4e915a(0xec)]){const _0x16a9fd=_0x4e915a;if(_0x5edc23!==_0x16a9fd(0x104)||/\.(?:cmd|exe|bat)$/i[_0x16a9fd(0xde)](_0x53d427))return _0x53d427;return _0x53d427+_0x16a9fd(0xdc);}function _0x551d(_0x3a5f67,_0xb82031){_0x3a5f67=_0x3a5f67-(0x1c8*-0x9+-0xf81+0x49f*0x7);const _0x5236fd=_0x39c7();let _0x1b4cff=_0x5236fd[_0x3a5f67];if(_0x551d['YCpHNe']===undefined){var _0x11a1e7=function(_0x36490c){const _0x11b183='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5edfce='',_0x524dc9='';for(let _0x167d73=-0x1*0xc83+0x37*-0xb3+0xcbe*0x4,_0x318ef6,_0x2bc8a2,_0x355c1f=0xd00+-0x58*-0x10+-0x1280;_0x2bc8a2=_0x36490c['charAt'](_0x355c1f++);~_0x2bc8a2&&(_0x318ef6=_0x167d73%(-0xf*-0x15d+0x6fd*0x5+0x8*-0x6ec)?_0x318ef6*(-0xd62+-0x9d2+-0x9e*-0x26)+_0x2bc8a2:_0x2bc8a2,_0x167d73++%(0x12c8+0x1*0x17a7+-0x1*0x2a6b))?_0x5edfce+=String['fromCharCode'](-0x8f6+0x57*-0x47+0x1*0x2216&_0x318ef6>>(-(-0x2*-0x950+0x1dbe+-0x14*0x26b)*_0x167d73&0x7*-0x9a+0x1212+0x7*-0x1fa)):0x14ca+0xc93+-0x215d){_0x2bc8a2=_0x11b183['indexOf'](_0x2bc8a2);}for(let _0x4006ec=0x1*-0xd54+0x2170+-0x141c,_0x2dd7a3=_0x5edfce['length'];_0x4006ec<_0x2dd7a3;_0x4006ec++){_0x524dc9+='%'+('00'+_0x5edfce['charCodeAt'](_0x4006ec)['toString'](0xd*0xd9+-0x255e+0x1a69*0x1))['slice'](-(-0x1*-0x2615+0x1*-0xb96+0x1a7d*-0x1));}return decodeURIComponent(_0x524dc9);};_0x551d['SJKWIT']=_0x11a1e7,_0x551d['tPzLZf']={},_0x551d['YCpHNe']=!![];}const _0x424bda=_0x5236fd[0x26a6+-0x3b6+-0x22f0];_0x551d['qqHYpS']!==_0x424bda&&(_0x551d['tPzLZf']={},_0x551d['qqHYpS']=_0x424bda);const _0x1b4554=_0x551d['tPzLZf'][_0x3a5f67];return _0x1b4554===undefined?(_0x1b4cff=_0x551d['SJKWIT'](_0x1b4cff),_0x551d['tPzLZf'][_0x3a5f67]=_0x1b4cff):_0x1b4cff=_0x1b4554,_0x1b4cff;}export function platformCliInvocation(_0x2b2840,_0x239bb7,_0x2c7f32=process[_0x4e915a(0xec)],_0x1b6780=process.env.ComSpec??process.env.COMSPEC??_0x4e915a(0xe6)){const _0x11cf5a=_0x4e915a,_0x3a5f67=platformCliCommand(_0x2b2840,_0x2c7f32);if(_0x2c7f32!==_0x11cf5a(0x104)||!/\.(?:cmd|bat)$/i[_0x11cf5a(0xde)](_0x3a5f67))return{'command':_0x3a5f67,'args':_0x239bb7};if(![_0x3a5f67,..._0x239bb7][_0x11cf5a(0xfd)](_0xb82031=>/^[A-Za-z0-9_@./:\\ -]+$/[_0x11cf5a(0xde)](_0xb82031)))throw new Error(_0x11cf5a(0xf5));return{'command':_0x1b6780,'args':['/d','/s','/c',[_0x3a5f67,..._0x239bb7][_0x11cf5a(0xe0)](_0x5236fd=>_0x5236fd[_0x11cf5a(0xfe)]('\x20')?'\x22'+_0x5236fd+'\x22':_0x5236fd)[_0x11cf5a(0xd6)]('\x20')]};}export function nodeLog(_0x1b4cff,_0x11a1e7={}){const _0x1e6e4f=_0x4e915a,_0x424bda=redactLogValue(_0x11a1e7),_0x1b4554=JSON[_0x1e6e4f(0xd3)]({'timestamp':new Date()[_0x1e6e4f(0xf7)](),'level':_0x1e6e4f(0x108),'component':_0x1e6e4f(0xdf),'event':_0x1b4cff,..._0x424bda})+'\x0a';process[_0x1e6e4f(0x106)][_0x1e6e4f(0x105)](_0x1b4554),writeNodeLog(_0x1b4554);}
|
package/dist/process-tree.js
CHANGED
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const executeFile = promisify(execFile);
|
|
4
|
-
/** Kills the process group on Unix and the complete task tree on Windows. */
|
|
5
|
-
export async function terminateProcessTree(child, platform = process.platform, runCommand = executeFile) {
|
|
6
|
-
if (child.pid === undefined)
|
|
7
|
-
return;
|
|
8
|
-
if (platform === 'win32') {
|
|
9
|
-
await runCommand('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true });
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
try {
|
|
13
|
-
process.kill(-child.pid, 'SIGTERM');
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
child.kill('SIGTERM');
|
|
17
|
-
}
|
|
18
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
const _0x6bceb8=_0x322c;function _0x4861(){const _0x388b39=['ndi3odK0mNDwwgjMAa','mZbAr3DmB2e','ntmXmJzHr3jUBNi','mtu3mZq3r1zsEwn2','odCZmde3nNvSCKrNsG','ndeXndj6v1jrqxi','DgfZA2TPBgW','nZiWmZqYn0nzvfbdCW','u0Lhvevstq','mJC5nJyYnuvoANfPAW','CgLK','D2LUmZi','ndfWrgXhwKS','CgXHDgzVCM0','l3bPza','mtCYrwjjCKXN','A2LSBa'];_0x4861=function(){return _0x388b39;};return _0x4861();}(function(_0x55d059,_0x1c030e){const _0x31c681=_0x322c,_0x16bcbd=_0x55d059();while(!![]){try{const _0x27af01=-parseInt(_0x31c681(0x1f4))/(0x1289+0xf9*-0x1e+0xaa6)*(-parseInt(_0x31c681(0x1fb))/(0xe91+-0x8b*-0x37+0x2c6c*-0x1))+parseInt(_0x31c681(0x1fe))/(0x1*0xa+-0x244d+0x2446*0x1)*(-parseInt(_0x31c681(0x1f7))/(-0xc*0x75+0x123c+-0xcbc))+-parseInt(_0x31c681(0x202))/(0x45d*-0x1+0x1b69+-0x1707)+parseInt(_0x31c681(0x1f9))/(0x2586+-0x15cc+-0xfb4)+parseInt(_0x31c681(0x200))/(-0xe03*-0x1+-0xe*-0x229+-0x2c3a)+-parseInt(_0x31c681(0x1fd))/(0x1517*0x1+0x17f0+-0x1*0x2cff)+-parseInt(_0x31c681(0x1fc))/(0x1*-0x1139+0x5f*0x2f+0x2f*-0x1)*(-parseInt(_0x31c681(0x1fa))/(-0x3*0x112+-0x5de*0x5+0x2096));if(_0x27af01===_0x1c030e)break;else _0x16bcbd['push'](_0x16bcbd['shift']());}catch(_0x15c607){_0x16bcbd['push'](_0x16bcbd['shift']());}}}(_0x4861,0x4aeac+-0x9161*-0x5+0x24bea));function _0x322c(_0x464fa1,_0xc12ba4){_0x464fa1=_0x464fa1-(0x1*-0x1b46+0x15d7+0x762*0x1);const _0x27b357=_0x4861();let _0x50e380=_0x27b357[_0x464fa1];if(_0x322c['YPHywB']===undefined){var _0x4bcafb=function(_0x5422f4){const _0x10f479='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3e7aae='',_0x167015='';for(let _0x5ef5d5=0x1*-0x5fb+-0x1cee+0x3*0xba3,_0x5db1bb,_0x2fbc1b,_0x361769=0x210f+0x11e7*-0x1+-0xf28;_0x2fbc1b=_0x5422f4['charAt'](_0x361769++);~_0x2fbc1b&&(_0x5db1bb=_0x5ef5d5%(0x30a*0x4+-0x7ed+-0x437)?_0x5db1bb*(-0x1b7*0x14+-0x24ea+-0xbe9*-0x6)+_0x2fbc1b:_0x2fbc1b,_0x5ef5d5++%(-0x9b5*-0x1+-0x1b*-0x171+-0x309c))?_0x3e7aae+=String['fromCharCode'](-0x12b0+0x88*-0x18+0x1*0x206f&_0x5db1bb>>(-(-0xd79+-0x4*-0x1b7+-0x153*-0x5)*_0x5ef5d5&0x6ff+0x1455+-0x1b4e)):0x1719*-0x1+-0x4d8+0x1bf1){_0x2fbc1b=_0x10f479['indexOf'](_0x2fbc1b);}for(let _0x36bc0a=0x15e*-0x14+0x1*0x472+0x16e6,_0x3a3fbf=_0x3e7aae['length'];_0x36bc0a<_0x3a3fbf;_0x36bc0a++){_0x167015+='%'+('00'+_0x3e7aae['charCodeAt'](_0x36bc0a)['toString'](-0x8b9+-0xb41*0x2+0x1*0x1f4b))['slice'](-(0x2078+0x19ee+-0x3a64));}return decodeURIComponent(_0x167015);};_0x322c['bVbciJ']=_0x4bcafb,_0x322c['vYHuoF']={},_0x322c['YPHywB']=!![];}const _0x16045c=_0x27b357[0x25f0+-0x1c*-0x5c+-0x3000];_0x322c['zvomFj']!==_0x16045c&&(_0x322c['vYHuoF']={},_0x322c['zvomFj']=_0x16045c);const _0x4177e9=_0x322c['vYHuoF'][_0x464fa1];return _0x4177e9===undefined?(_0x50e380=_0x322c['bVbciJ'](_0x50e380),_0x322c['vYHuoF'][_0x464fa1]=_0x50e380):_0x50e380=_0x4177e9,_0x50e380;}import{execFile}from'node:child_process';import{promisify}from'node:util';const executeFile=promisify(execFile);export async function terminateProcessTree(_0x30662d,_0x9260b2=process[_0x6bceb8(0x1f5)],_0x536ab3=executeFile){const _0x412f1d=_0x6bceb8;if(_0x30662d[_0x412f1d(0x203)]===undefined)return;if(_0x9260b2===_0x412f1d(0x1f3)){await _0x536ab3(_0x412f1d(0x1ff),[_0x412f1d(0x1f6),String(_0x30662d[_0x412f1d(0x203)]),'/T','/F'],{'windowsHide':!![]});return;}try{process[_0x412f1d(0x1f8)](-_0x30662d[_0x412f1d(0x203)],_0x412f1d(0x201));}catch{_0x30662d[_0x412f1d(0x1f8)](_0x412f1d(0x201));}}
|
package/dist/rotating-log.js
CHANGED
|
@@ -1,67 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const DAY_MS = 24 * 60 * 60 * 1_000;
|
|
4
|
-
let sink;
|
|
5
|
-
export function configureNodeLog(dataDirectory) {
|
|
6
|
-
sink = new RotatingNodeLog(resolve(dataDirectory, 'logs'));
|
|
7
|
-
}
|
|
8
|
-
export function writeNodeLog(content) {
|
|
9
|
-
sink?.write(content);
|
|
10
|
-
}
|
|
11
|
-
export class RotatingNodeLog {
|
|
12
|
-
maxBytes;
|
|
13
|
-
retentionMs;
|
|
14
|
-
now;
|
|
15
|
-
activePath;
|
|
16
|
-
bytes = 0;
|
|
17
|
-
day = '';
|
|
18
|
-
rotation = 0;
|
|
19
|
-
lastCleanup = 0;
|
|
20
|
-
constructor(directory, maxBytes = 100 * 1024 * 1024, retentionMs = 7 * DAY_MS, now = Date.now) {
|
|
21
|
-
this.maxBytes = maxBytes;
|
|
22
|
-
this.retentionMs = retentionMs;
|
|
23
|
-
this.now = now;
|
|
24
|
-
mkdirSync(directory, { recursive: true });
|
|
25
|
-
this.activePath = resolve(directory, 'node.log');
|
|
26
|
-
try {
|
|
27
|
-
const stat = statSync(this.activePath);
|
|
28
|
-
this.bytes = stat.size;
|
|
29
|
-
this.day = new Date(stat.mtimeMs).toISOString().slice(0, 10);
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
this.day = this.currentDay();
|
|
33
|
-
}
|
|
34
|
-
this.cleanup();
|
|
35
|
-
}
|
|
36
|
-
write(content) {
|
|
37
|
-
const length = Buffer.byteLength(content);
|
|
38
|
-
const day = this.currentDay();
|
|
39
|
-
if (this.bytes > 0 && (this.bytes + length > this.maxBytes || day !== this.day))
|
|
40
|
-
this.rotate();
|
|
41
|
-
appendFileSync(this.activePath, content, { encoding: 'utf8', mode: 0o600 });
|
|
42
|
-
this.bytes += length;
|
|
43
|
-
this.day = day;
|
|
44
|
-
if (this.now() - this.lastCleanup >= DAY_MS)
|
|
45
|
-
this.cleanup();
|
|
46
|
-
}
|
|
47
|
-
currentDay() {
|
|
48
|
-
return new Date(this.now()).toISOString().slice(0, 10);
|
|
49
|
-
}
|
|
50
|
-
rotate() {
|
|
51
|
-
const suffix = `${this.day}-${this.now()}-${String(this.rotation++).padStart(3, '0')}`;
|
|
52
|
-
renameSync(this.activePath, resolve(this.activePath, '..', `node-${suffix}.log`));
|
|
53
|
-
this.bytes = 0;
|
|
54
|
-
}
|
|
55
|
-
cleanup() {
|
|
56
|
-
const directory = resolve(this.activePath, '..');
|
|
57
|
-
const cutoff = this.now() - this.retentionMs;
|
|
58
|
-
for (const entry of readdirSync(directory)) {
|
|
59
|
-
if (!entry.startsWith('node-') || !entry.endsWith('.log'))
|
|
60
|
-
continue;
|
|
61
|
-
const path = resolve(directory, entry);
|
|
62
|
-
if (statSync(path).mtimeMs < cutoff)
|
|
63
|
-
unlinkSync(path);
|
|
64
|
-
}
|
|
65
|
-
this.lastCleanup = this.now();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
function _0x3529(){const _0x316311=['zw5KC1DPDgG','Bg9NCW','mJi3nJG5nLvruwDQAG','C3rHCNrZv2L0Aa','CM90yxrL','odeYndqZmvrpEwvrAa','mxbfBezWzG','BM9Kzs5SB2C','mtberwTdBgm','mtCZmJuXnMzgrxvftG','BxrPBwvnCW','lMXVzW','BM93','CgfKu3rHCNq','D3jPDgu','oda0C2DgvxPR','C2L6zq','Bwf4qNL0zxm','BgfZDenSzwfUDxa','y2XLyw51Ca','zgf5','y3vYCMvUDerHEq','ywn0AxzLugf0Aa','mtu0mZu2mgP5tNLPwa','ndmXotfkBKLzzLO','nKXnv3zNvG','Dg9ju09tDhjPBMC','BM9Kzs0','nJG1odG2m3DNv2nfCq','yNL0zxm','yNL0zuXLBMD0Aa','DxrMoa','C2XPy2u','mtCYnZGZt1DRuwrW','mJi4mfbmteDyEq','CM90yxrPB24','nujvv0jODa','CMv0zw50Aw9Utxm'];_0x3529=function(){return _0x316311;};return _0x3529();}const _0x10d970=_0x31c9;(function(_0x18de8c,_0x248fab){const _0x2b24e0=_0x31c9,_0x27d329=_0x18de8c();while(!![]){try{const _0x38713b=-parseInt(_0x2b24e0(0x7c))/(-0x1d5b+0x22*-0x109+0x408e)*(-parseInt(_0x2b24e0(0x7f))/(0x1ea0+-0x10b8*0x1+-0x6f3*0x2))+parseInt(_0x2b24e0(0x8d))/(0x1f*-0x2f+0x926*-0x2+0x1800)+parseInt(_0x2b24e0(0x9e))/(0x716*0x5+-0xf94+-0x13d6*0x1)*(-parseInt(_0x2b24e0(0x9a))/(0xada+-0x1*-0x2673+-0x3148))+parseInt(_0x2b24e0(0x8f))/(-0x42*0x11+-0x50a+0x972)*(parseInt(_0x2b24e0(0x7b))/(0xe*0x12a+0x2317+-0x335c))+parseInt(_0x2b24e0(0x98))/(-0xb41+0x9f1*0x1+0x158*0x1)*(-parseInt(_0x2b24e0(0x8e))/(0x217*0xb+0x163*-0x4+-0x8b4*0x2))+parseInt(_0x2b24e0(0x7e))/(-0x1*0x10c3+0x188b*0x1+-0x1*0x7be)*(-parseInt(_0x2b24e0(0x92))/(0x1*0x2676+0x13d3+-0x3a3e))+parseInt(_0x2b24e0(0x85))/(-0x6b9+-0x1337+0x19fc)*(parseInt(_0x2b24e0(0x97))/(-0x2090+0x1377+-0x22*-0x63));if(_0x38713b===_0x248fab)break;else _0x27d329['push'](_0x27d329['shift']());}catch(_0x15aeb9){_0x27d329['push'](_0x27d329['shift']());}}}(_0x3529,0x1087*0x3d+0xba23*-0x14+0x17e69d));import{appendFileSync,mkdirSync,readdirSync,renameSync,statSync,unlinkSync}from'node:fs';import{resolve}from'node:path';const DAY_MS=(0x12ff+0x40f*0x9+-0x1d9*0x1e)*(0x22d2+0x198b+0x140b*-0x3)*(0x2697+-0x9e*-0x3+-0x2835)*(0x2*-0x2c8+-0xe67*0x2+0x2646);let sink;export function configureNodeLog(_0x73c103){const _0xb9c85c=_0x31c9;sink=new RotatingNodeLog(resolve(_0x73c103,_0xb9c85c(0x9d)));}function _0x31c9(_0x99aaf6,_0x4b43fb){_0x99aaf6=_0x99aaf6-(0x1*0x16ee+0x467+0x47a*-0x6);const _0x2973e4=_0x3529();let _0x3bc6b0=_0x2973e4[_0x99aaf6];if(_0x31c9['pSrpeD']===undefined){var _0x3a1c6a=function(_0x4b3e80){const _0x552c98='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x56cead='',_0x5abf9b='';for(let _0x3fd157=-0x1ff6+0x2605*-0x1+0x45fb,_0x1ea68b,_0x533dad,_0x48190c=-0xcaa*-0x3+0x2c5*0x9+-0x3eeb;_0x533dad=_0x4b3e80['charAt'](_0x48190c++);~_0x533dad&&(_0x1ea68b=_0x3fd157%(0xea6*-0x1+-0x35*-0xa9+-0x79*0x2b)?_0x1ea68b*(-0xcda+0x2*-0x2c8+-0x12aa*-0x1)+_0x533dad:_0x533dad,_0x3fd157++%(-0x174+0x7*-0x18e+0xc5a))?_0x56cead+=String['fromCharCode'](0x1*-0x1f18+0xf5f*-0x2+0x1*0x3ed5&_0x1ea68b>>(-(0xaba*0x2+-0x25d0+0x105e)*_0x3fd157&0x26*-0x94+-0x1f54+0x3552)):-0x3bb+-0x26e1+0x2a9c){_0x533dad=_0x552c98['indexOf'](_0x533dad);}for(let _0x3039d4=-0x2650+0xc5*0x16+-0x77*-0x2e,_0x50b8e1=_0x56cead['length'];_0x3039d4<_0x50b8e1;_0x3039d4++){_0x5abf9b+='%'+('00'+_0x56cead['charCodeAt'](_0x3039d4)['toString'](0x18c0+-0x1199+-0x717))['slice'](-(0x142b*0x1+0x5*0x2b0+-0x2199));}return decodeURIComponent(_0x5abf9b);};_0x31c9['zWfNGv']=_0x3a1c6a,_0x31c9['wvMciS']={},_0x31c9['pSrpeD']=!![];}const _0x14562c=_0x2973e4[-0xeb8+0x155b+-0x6a3];_0x31c9['aJtKiv']!==_0x14562c&&(_0x31c9['wvMciS']={},_0x31c9['aJtKiv']=_0x14562c);const _0x524f20=_0x31c9['wvMciS'][_0x99aaf6];return _0x524f20===undefined?(_0x3bc6b0=_0x31c9['zWfNGv'](_0x3bc6b0),_0x31c9['wvMciS'][_0x99aaf6]=_0x3bc6b0):_0x3bc6b0=_0x524f20,_0x3bc6b0;}export function writeNodeLog(_0x4b609b){const _0x59f773=_0x31c9;sink?.[_0x59f773(0x84)](_0x4b609b);}export class RotatingNodeLog{[_0x10d970(0x87)];[_0x10d970(0x9b)];[_0x10d970(0x82)];[_0x10d970(0x8c)];[_0x10d970(0x93)]=0x7*-0x18e+-0x1a03+0x24e5;[_0x10d970(0x8a)]='';[_0x10d970(0x99)]=0x1*-0x1ebe+0x1*0x19a+0x175*0x14;[_0x10d970(0x88)]=-0xa*0x3c8+0x134a+0x1286;constructor(_0x5c36ca,_0xe59a97=(-0x4*0x7d5+0x11d0+0xde8)*(-0x26e1+-0x1075+0x3b56)*(0xc5*0x16+-0x83*0x15+-0xd*0x2b),_0x264a36=(-0x15e3+0x7*-0x449+0x33e9*0x1)*DAY_MS,_0x1c80ee=Date[_0x10d970(0x82)]){const _0x975a0e=_0x10d970;this[_0x975a0e(0x87)]=_0xe59a97,this[_0x975a0e(0x9b)]=_0x264a36,this[_0x975a0e(0x82)]=_0x1c80ee,mkdirSync(_0x5c36ca,{'recursive':!![]}),this[_0x975a0e(0x8c)]=resolve(_0x5c36ca,_0x975a0e(0x7d));try{const _0x5f35f1=statSync(this[_0x975a0e(0x8c)]);this[_0x975a0e(0x93)]=_0x5f35f1[_0x975a0e(0x86)],this[_0x975a0e(0x8a)]=new Date(_0x5f35f1[_0x975a0e(0x80)])[_0x975a0e(0x90)]()[_0x975a0e(0x96)](0x1dab+0x67a+-0x13*0x1e7,-0x1bc3+-0x3*0x9c6+0x1*0x391f);}catch{this[_0x975a0e(0x8a)]=this[_0x975a0e(0x8b)]();}this[_0x975a0e(0x89)]();}[_0x10d970(0x84)](_0x585cf4){const _0x20224d=_0x10d970,_0x8a5feb=Buffer[_0x20224d(0x94)](_0x585cf4),_0x571aa9=this[_0x20224d(0x8b)]();if(this[_0x20224d(0x93)]>0x1669*-0x1+0x1c5e*0x1+-0x19*0x3d&&(this[_0x20224d(0x93)]+_0x8a5feb>this[_0x20224d(0x87)]||_0x571aa9!==this[_0x20224d(0x8a)]))this[_0x20224d(0x7a)]();appendFileSync(this[_0x20224d(0x8c)],_0x585cf4,{'encoding':_0x20224d(0x95),'mode':0x180}),this[_0x20224d(0x93)]+=_0x8a5feb,this[_0x20224d(0x8a)]=_0x571aa9;if(this[_0x20224d(0x82)]()-this[_0x20224d(0x88)]>=DAY_MS)this[_0x20224d(0x89)]();}[_0x10d970(0x8b)](){const _0x120c72=_0x10d970;return new Date(this[_0x120c72(0x82)]())[_0x120c72(0x90)]()[_0x120c72(0x96)](0x1d21*0x1+0x28*0x80+-0x3121,0x73e+-0x190d+0x3*0x5f3);}[_0x10d970(0x7a)](){const _0x5d1099=_0x10d970,_0x4e24e2=this[_0x5d1099(0x8a)]+'-'+this[_0x5d1099(0x82)]()+'-'+String(this[_0x5d1099(0x99)]++)[_0x5d1099(0x83)](0x53f+-0xc6b+0x72f,'0');renameSync(this[_0x5d1099(0x8c)],resolve(this[_0x5d1099(0x8c)],'..',_0x5d1099(0x91)+_0x4e24e2+_0x5d1099(0x81))),this[_0x5d1099(0x93)]=-0x1*-0x1f1f+-0xc9c+-0x1283;}[_0x10d970(0x89)](){const _0x4e65f6=_0x10d970,_0x3a6cc0=resolve(this[_0x4e65f6(0x8c)],'..'),_0x395de6=this[_0x4e65f6(0x82)]()-this[_0x4e65f6(0x9b)];for(const _0x226222 of readdirSync(_0x3a6cc0)){if(!_0x226222[_0x4e65f6(0x79)](_0x4e65f6(0x91))||!_0x226222[_0x4e65f6(0x9c)](_0x4e65f6(0x81)))continue;const _0x4c5111=resolve(_0x3a6cc0,_0x226222);if(statSync(_0x4c5111)[_0x4e65f6(0x80)]<_0x395de6)unlinkSync(_0x4c5111);}this[_0x4e65f6(0x88)]=this[_0x4e65f6(0x82)]();}}
|