@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
|
@@ -1,70 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
const CLAUDE_PLAN_TAG_CLOSE = '
|
|
3
|
-
/**
|
|
4
|
-
* Claude Agent SDK has no mid-session collaboration mode switch. Plan Mode is
|
|
5
|
-
* therefore declared as a fixed Node-owned instruction tag prepended to each
|
|
6
|
-
* Runner-bound input while the command state is active. The tag never appears
|
|
7
|
-
* in the user bubble; native history strips it again on read.
|
|
8
|
-
*/
|
|
9
|
-
export function withClaudePlanTag(input) {
|
|
10
|
-
return `${CLAUDE_PLAN_TAG_OPEN}
|
|
11
|
-
You are in Plan Mode. Perform only read-only analysis and planning. Do not create, modify, or delete files, and do not run commands with side effects. Wrap the complete final plan in <proposed_plan> and </proposed_plan> tags without repeating the plan outside those tags.
|
|
12
|
-
${CLAUDE_PLAN_TAG_CLOSE}
|
|
13
|
-
|
|
14
|
-
${input}`;
|
|
15
|
-
}
|
|
16
|
-
/** Removes one leading plan instruction tag from a native transcript user text. */
|
|
17
|
-
export function stripClaudePlanTag(text) {
|
|
18
|
-
if (!text.startsWith(CLAUDE_PLAN_TAG_OPEN))
|
|
19
|
-
return text;
|
|
20
|
-
const close = text.indexOf(CLAUDE_PLAN_TAG_CLOSE);
|
|
21
|
-
if (close === -1)
|
|
22
|
-
return text;
|
|
23
|
-
return text.slice(close + CLAUDE_PLAN_TAG_CLOSE.length).trimStart();
|
|
24
|
-
}
|
|
25
|
-
export function parseCommandInvocation(definition, input) {
|
|
26
|
-
const normalized = input.trim();
|
|
27
|
-
const prefix = `/${definition.descriptor.id}`;
|
|
28
|
-
if (!normalized.startsWith(prefix) ||
|
|
29
|
-
(normalized.length > prefix.length && !/\s/.test(normalized[prefix.length])))
|
|
30
|
-
throw new Error('RUNNER_COMMAND_INVALID');
|
|
31
|
-
const argument = normalized.slice(prefix.length).trim();
|
|
32
|
-
if ((definition.descriptor.interaction === 'IMMEDIATE_ACTION' ||
|
|
33
|
-
definition.descriptor.id === 'plan') &&
|
|
34
|
-
argument.length > 0)
|
|
35
|
-
throw new Error('RUNNER_COMMAND_ARGUMENT_INVALID');
|
|
36
|
-
return { input: normalized, argument };
|
|
37
|
-
}
|
|
38
|
-
export class CommandStateStore {
|
|
39
|
-
states = new Map();
|
|
40
|
-
list(sessionId) {
|
|
41
|
-
return [...(this.states.get(sessionId)?.values() ?? [])].filter((state) => state.active);
|
|
42
|
-
}
|
|
43
|
-
set(sessionId, state) {
|
|
44
|
-
const values = this.states.get(sessionId) ?? new Map();
|
|
45
|
-
values.set(state.commandId, state);
|
|
46
|
-
this.states.set(sessionId, values);
|
|
47
|
-
return this.list(sessionId);
|
|
48
|
-
}
|
|
49
|
-
clear(sessionId, commandId) {
|
|
50
|
-
this.states.get(sessionId)?.delete(commandId);
|
|
51
|
-
return this.list(sessionId);
|
|
52
|
-
}
|
|
53
|
-
removeSession(sessionId) {
|
|
54
|
-
this.states.delete(sessionId);
|
|
55
|
-
}
|
|
56
|
-
promoteSessionIdentity(sessionId, nativeSessionId) {
|
|
57
|
-
if (sessionId === nativeSessionId)
|
|
58
|
-
return;
|
|
59
|
-
const values = this.states.get(sessionId);
|
|
60
|
-
if (values === undefined)
|
|
61
|
-
return;
|
|
62
|
-
if (this.states.has(nativeSessionId))
|
|
63
|
-
throw new Error('SESSION_ID_CONFLICT');
|
|
64
|
-
this.states.delete(sessionId);
|
|
65
|
-
this.states.set(nativeSessionId, values);
|
|
66
|
-
}
|
|
67
|
-
get(sessionId, commandId) {
|
|
68
|
-
return this.states.get(sessionId)?.get(commandId);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
function _0xb169(_0x31893f,_0x498d18){_0x31893f=_0x31893f-(-0x1017*0x1+-0x1ce6+0x2d87);const _0x4cf30c=_0x4821();let _0x78a697=_0x4cf30c[_0x31893f];if(_0xb169['OcNmkr']===undefined){var _0x2c326b=function(_0x40590a){const _0x26b9f1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x13e1a3='',_0x136116='';for(let _0x38efc4=0x241b*-0x1+-0x2267*-0x1+-0xda*-0x2,_0x616c0d,_0x5b1070,_0x3d827f=0x248+0x13*0x1+0x25b*-0x1;_0x5b1070=_0x40590a['charAt'](_0x3d827f++);~_0x5b1070&&(_0x616c0d=_0x38efc4%(0xaa0+-0x1e3f+0x13a3)?_0x616c0d*(0x1c5e*-0x1+0x8f9*0x2+-0xaac*-0x1)+_0x5b1070:_0x5b1070,_0x38efc4++%(-0x1a2+-0x551*-0x3+-0xe4d))?_0x13e1a3+=String['fromCharCode'](-0x93*0x7+-0xb5*-0x1d+0x131*-0xd&_0x616c0d>>(-(0x2683+-0x26e7+-0x33*-0x2)*_0x38efc4&-0x6*-0x45c+0x117e+0x20*-0x15d)):-0xb23+-0x3*0xb99+0x2dee){_0x5b1070=_0x26b9f1['indexOf'](_0x5b1070);}for(let _0x26badd=-0x1cd*0xb+-0x1*0x2699+0x3a68,_0x45c320=_0x13e1a3['length'];_0x26badd<_0x45c320;_0x26badd++){_0x136116+='%'+('00'+_0x13e1a3['charCodeAt'](_0x26badd)['toString'](0x1*-0x1843+-0x17d*-0x6+0xf65))['slice'](-(-0x2441+-0xc*0x216+0x3d4b));}return decodeURIComponent(_0x136116);};_0xb169['sKbVsO']=_0x2c326b,_0xb169['MiLLbi']={},_0xb169['OcNmkr']=!![];}const _0x39076f=_0x4cf30c[-0x133*0x3+0x1f92+-0xb*0x28b];_0xb169['LOIDzr']!==_0x39076f&&(_0xb169['MiLLbi']={},_0xb169['LOIDzr']=_0x39076f);const _0x426b3f=_0xb169['MiLLbi'][_0x31893f];return _0x426b3f===undefined?(_0x78a697=_0xb169['sKbVsO'](_0x78a697),_0xb169['MiLLbi'][_0x31893f]=_0x78a697):_0x78a697=_0x426b3f,_0x78a697;}const _0x30cb57=_0xb169;(function(_0x7cafb1,_0x162292){const _0x35a6c9=_0xb169,_0x10b738=_0x7cafb1();while(!![]){try{const _0xf96bfd=-parseInt(_0x35a6c9(0x98))/(0x1e72+-0x26ad+0x3e*0x22)*(-parseInt(_0x35a6c9(0xa4))/(-0x29*-0x43+0x155f*-0x1+0xaa6))+parseInt(_0x35a6c9(0xa0))/(0x1*0x25b1+0x6*0x3c2+-0x3c3a)*(parseInt(_0x35a6c9(0xaa))/(0x4b5*0x3+-0x70d*-0x1+-0x1528))+-parseInt(_0x35a6c9(0xa2))/(0x23d*-0x6+0x1b67+-0xdf4)*(-parseInt(_0x35a6c9(0x90))/(-0x5e7*-0x5+0x2*-0x6b5+-0x1013*0x1))+-parseInt(_0x35a6c9(0x9b))/(0x9c2*0x3+0x1f54+-0x3c93)+parseInt(_0x35a6c9(0x96))/(-0xe25+-0x1165+0x1f92)*(-parseInt(_0x35a6c9(0x8f))/(0x2a1*0xb+-0x7a3+0x1*-0x153f))+-parseInt(_0x35a6c9(0x97))/(0x3d*-0xd+-0x8d7+0xbfa)+parseInt(_0x35a6c9(0xb2))/(-0x56f*-0x1+0x23da+-0x293e);if(_0xf96bfd===_0x162292)break;else _0x10b738['push'](_0x10b738['shift']());}catch(_0x13ce51){_0x10b738['push'](_0x10b738['shift']());}}}(_0x4821,0xae61*-0x1+0x35*-0x79f+0x6052f));const CLAUDE_PLAN_TAG_OPEN=_0x30cb57(0x93),CLAUDE_PLAN_TAG_CLOSE=_0x30cb57(0x9c);export function withClaudePlanTag(_0xf975a7){const _0x57ec3c=_0x30cb57;return CLAUDE_PLAN_TAG_OPEN+_0x57ec3c(0xa3)+CLAUDE_PLAN_TAG_CLOSE+'\x0a\x0a'+_0xf975a7;}export function stripClaudePlanTag(_0x2a0d5d){const _0x384d23=_0x30cb57;if(!_0x2a0d5d[_0x384d23(0xb0)](CLAUDE_PLAN_TAG_OPEN))return _0x2a0d5d;const _0xd113dc=_0x2a0d5d[_0x384d23(0x8d)](CLAUDE_PLAN_TAG_CLOSE);if(_0xd113dc===-(-0x6a7*-0x3+0x1*-0x1d60+0x96c))return _0x2a0d5d;return _0x2a0d5d[_0x384d23(0x92)](_0xd113dc+CLAUDE_PLAN_TAG_CLOSE[_0x384d23(0x94)])[_0x384d23(0xae)]();}export function parseCommandInvocation(_0x459723,_0x36979c){const _0x21cc47=_0x30cb57,_0x5ac2f4=_0x36979c[_0x21cc47(0xaf)](),_0x3c59be='/'+_0x459723[_0x21cc47(0xa9)]['id'];if(!_0x5ac2f4[_0x21cc47(0xb0)](_0x3c59be)||_0x5ac2f4[_0x21cc47(0x94)]>_0x3c59be[_0x21cc47(0x94)]&&!/\s/[_0x21cc47(0x91)](_0x5ac2f4[_0x3c59be[_0x21cc47(0x94)]]))throw new Error(_0x21cc47(0x9d));const _0x4e2ce5=_0x5ac2f4[_0x21cc47(0x92)](_0x3c59be[_0x21cc47(0x94)])[_0x21cc47(0xaf)]();if((_0x459723[_0x21cc47(0xa9)][_0x21cc47(0x8c)]===_0x21cc47(0xa6)||_0x459723[_0x21cc47(0xa9)]['id']===_0x21cc47(0xa1))&&_0x4e2ce5[_0x21cc47(0x94)]>0x563*0x1+-0x23bb*-0x1+-0x291e)throw new Error(_0x21cc47(0xa7));return{'input':_0x5ac2f4,'argument':_0x4e2ce5};}export class CommandStateStore{[_0x30cb57(0x8a)]=new Map();[_0x30cb57(0x9f)](_0x4969cf){const _0x546574=_0x30cb57;return[...this[_0x546574(0x8a)][_0x546574(0x95)](_0x4969cf)?.[_0x546574(0xa5)]()??[]][_0x546574(0x9a)](_0x1bb2c5=>_0x1bb2c5[_0x546574(0xad)]);}[_0x30cb57(0xab)](_0x2db19a,_0x4327a0){const _0x2a5d75=_0x30cb57,_0x29502f=this[_0x2a5d75(0x8a)][_0x2a5d75(0x95)](_0x2db19a)??new Map();return _0x29502f[_0x2a5d75(0xab)](_0x4327a0[_0x2a5d75(0x8b)],_0x4327a0),this[_0x2a5d75(0x8a)][_0x2a5d75(0xab)](_0x2db19a,_0x29502f),this[_0x2a5d75(0x9f)](_0x2db19a);}[_0x30cb57(0xb1)](_0x36172a,_0x162658){const _0x1abb59=_0x30cb57;return this[_0x1abb59(0x8a)][_0x1abb59(0x95)](_0x36172a)?.[_0x1abb59(0x9e)](_0x162658),this[_0x1abb59(0x9f)](_0x36172a);}[_0x30cb57(0xa8)](_0x17e43a){const _0x443a10=_0x30cb57;this[_0x443a10(0x8a)][_0x443a10(0x9e)](_0x17e43a);}[_0x30cb57(0xac)](_0x2ac7fe,_0x48b628){const _0x24940a=_0x30cb57;if(_0x2ac7fe===_0x48b628)return;const _0x3cd463=this[_0x24940a(0x8a)][_0x24940a(0x95)](_0x2ac7fe);if(_0x3cd463===undefined)return;if(this[_0x24940a(0x8a)][_0x24940a(0x99)](_0x48b628))throw new Error(_0x24940a(0x8e));this[_0x24940a(0x8a)][_0x24940a(0x9e)](_0x2ac7fe),this[_0x24940a(0x8a)][_0x24940a(0xab)](_0x48b628,_0x3cd463);}[_0x30cb57(0x95)](_0xc0f6ff,_0x40b509){const _0x1dc4d5=_0x30cb57;return this[_0x1dc4d5(0x8a)][_0x1dc4d5(0x95)](_0xc0f6ff)?.[_0x1dc4d5(0x95)](_0x40b509);}}function _0x4821(){const _0x35080e=['AgfZ','zMLSDgvY','mZqZnJC1nuzlsNzRyq','pc9WBgfUx21Vzgu+','uLvotKvsx0nptu1btKrFsu5wquXjra','zgvSzxrL','BgLZDa','mJrgqKXqz3y','CgXHBG','nxHwuwLLtG','cLLVDsbHCMuGAw4GugXHBIbnB2rLlIbqzxjMB3jTig9UBhKGCMvHzc1VBMX5igfUywX5C2LZigfUzcbWBgfUBMLUzY4Grg8GBM90ignYzwf0zsWGBw9KAwz5lcbVCIbKzwXLDguGzMLSzxmSigfUzcbKBYbUB3qGCNvUignVBw1HBMrZihDPDgGGC2LKzsbLzMzLy3rZlIbxCMfWihrOzsbJB21WBgv0zsbMAw5HBcbWBgfUigLUidXWCM9WB3nLzf9WBgfUpIbHBMqGpc9WCM9WB3nLzf9WBgfUpIb0ywDZihDPDgHVDxqGCMvWzwf0Aw5NihrOzsbWBgfUig91DhnPzguGDgHVC2uGDgfNCY4k','mKXOtxH3AG','DMfSDwvZ','su1nrurjqvrfx0fdveLptG','uLvotKvsx0nptu1btKrFqvjhvu1ftLrFsu5wquXjra','CMvTB3zLu2vZC2LVBG','zgvZy3jPChrVCG','mty4mJKYyMPJqNjK','C2v0','ChjVBw90zvnLC3nPB25jzgvUDgL0Eq','ywn0AxzL','DhjPBvn0yxj0','DhjPBq','C3rHCNrZv2L0Aa','y2XLyxi','mtaWnJy1ngnQsw1dAq','C3rHDgvZ','y29TBwfUzeLK','Aw50zxjHy3rPB24','Aw5KzxHpzG','u0vtu0LptL9jrf9dt05gteLdva','mZC4owTqAMLQyG','mJKXnJa0mNrct1bLEq','DgvZDa','C2XPy2u','phbSyw5FBw9Kzt4','BgvUz3rO','z2v0','mty5nKzKweH2tq','mJe3mJKWmeLkBMXxCq','mti5otaXzKH0zw1H'];_0x4821=function(){return _0x35080e;};return _0x4821();}
|
package/dist/runner-profiles.js
CHANGED
|
@@ -1,215 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
compact: 'Compact the current session context.',
|
|
3
|
-
plan: 'Toggle collaborative Plan Mode.'
|
|
4
|
-
};
|
|
5
|
-
const CLAUDE_MODEL_ENVIRONMENT = {
|
|
6
|
-
opus: 'ANTHROPIC_DEFAULT_OPUS_MODEL',
|
|
7
|
-
sonnet: 'ANTHROPIC_DEFAULT_SONNET_MODEL',
|
|
8
|
-
haiku: 'ANTHROPIC_DEFAULT_HAIKU_MODEL'
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* Keep product-visible permission modes and slash commands in one Node-owned
|
|
12
|
-
* definition. Codex models are supplied by App Server `model/list`; Claude
|
|
13
|
-
* aliases are accepted by the Agent SDK and avoid coupling the UI to a vendor
|
|
14
|
-
* version suffix.
|
|
15
|
-
*/
|
|
16
|
-
const definitions = {
|
|
17
|
-
codex: {
|
|
18
|
-
runner: 'codex',
|
|
19
|
-
models: [],
|
|
20
|
-
accessOptions: [
|
|
21
|
-
{
|
|
22
|
-
id: 'on-request',
|
|
23
|
-
label: 'On-request',
|
|
24
|
-
description: 'Ask when additional permission is required.'
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
id: 'workspace-write',
|
|
28
|
-
label: 'Workspace write',
|
|
29
|
-
description: 'Allow writes in the current Workspace.'
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
id: 'full-access',
|
|
33
|
-
label: 'Full access',
|
|
34
|
-
description: 'Allow full access without individual confirmations.'
|
|
35
|
-
},
|
|
36
|
-
{ id: 'read-only', label: 'Read-only', description: 'Restrict Codex to a read-only sandbox.' }
|
|
37
|
-
],
|
|
38
|
-
commands: [
|
|
39
|
-
{
|
|
40
|
-
id: 'compact',
|
|
41
|
-
label: '/compact',
|
|
42
|
-
description: COMMON_COMMAND_DESCRIPTIONS.compact,
|
|
43
|
-
inputHint: '/compact',
|
|
44
|
-
interaction: 'IMMEDIATE_ACTION'
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
id: 'plan',
|
|
48
|
-
label: '/plan',
|
|
49
|
-
stateLabel: 'Plan Mode',
|
|
50
|
-
description: COMMON_COMMAND_DESCRIPTIONS.plan,
|
|
51
|
-
inputHint: '/plan',
|
|
52
|
-
interaction: 'TOGGLE'
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
id: 'fast',
|
|
56
|
-
label: '/fast',
|
|
57
|
-
description: 'Toggle the fast service tier when supported.',
|
|
58
|
-
inputHint: '/fast',
|
|
59
|
-
interaction: 'TOGGLE'
|
|
60
|
-
}
|
|
61
|
-
].map((command) => ({
|
|
62
|
-
...command,
|
|
63
|
-
runner: 'codex',
|
|
64
|
-
source: 'CODEX_APP_SERVER',
|
|
65
|
-
available: true,
|
|
66
|
-
reasonCode: null
|
|
67
|
-
}))
|
|
68
|
-
},
|
|
69
|
-
'claude-code': {
|
|
70
|
-
runner: 'claude-code',
|
|
71
|
-
models: [
|
|
72
|
-
{
|
|
73
|
-
id: 'opus',
|
|
74
|
-
label: 'Claude Opus',
|
|
75
|
-
supportedEfforts: ['low', 'medium', 'high', 'xhigh', 'max']
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
id: 'sonnet',
|
|
79
|
-
label: 'Claude Sonnet',
|
|
80
|
-
supportedEfforts: ['low', 'medium', 'high', 'xhigh', 'max']
|
|
81
|
-
},
|
|
82
|
-
{ id: 'haiku', label: 'Claude Haiku', supportedEfforts: ['low', 'medium'] }
|
|
83
|
-
],
|
|
84
|
-
accessOptions: [
|
|
85
|
-
{ id: 'default', label: 'Default', description: 'Use Claude Code default confirmations.' },
|
|
86
|
-
{
|
|
87
|
-
id: 'accept-edits',
|
|
88
|
-
label: 'Accept edits',
|
|
89
|
-
description: 'Automatically accept edits in the current Workspace.'
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
id: 'bypass',
|
|
93
|
-
label: 'Bypass permissions',
|
|
94
|
-
description: 'Bypass permission confirmations.'
|
|
95
|
-
},
|
|
96
|
-
{ id: 'plan', label: 'Plan Mode', description: 'Run in Plan Mode without executing tools.' }
|
|
97
|
-
],
|
|
98
|
-
commands: [
|
|
99
|
-
{
|
|
100
|
-
id: 'compact',
|
|
101
|
-
runner: 'claude-code',
|
|
102
|
-
label: '/compact',
|
|
103
|
-
description: COMMON_COMMAND_DESCRIPTIONS.compact,
|
|
104
|
-
inputHint: '/compact',
|
|
105
|
-
source: 'CLAUDE_AGENT_SDK',
|
|
106
|
-
interaction: 'IMMEDIATE_ACTION',
|
|
107
|
-
available: true,
|
|
108
|
-
reasonCode: null
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
id: 'plan',
|
|
112
|
-
runner: 'claude-code',
|
|
113
|
-
label: '/plan',
|
|
114
|
-
stateLabel: 'Plan Mode',
|
|
115
|
-
description: COMMON_COMMAND_DESCRIPTIONS.plan,
|
|
116
|
-
inputHint: '/plan',
|
|
117
|
-
source: 'CLAUDE_AGENT_SDK',
|
|
118
|
-
interaction: 'TOGGLE',
|
|
119
|
-
available: true,
|
|
120
|
-
reasonCode: null
|
|
121
|
-
}
|
|
122
|
-
]
|
|
123
|
-
},
|
|
124
|
-
opencode: {
|
|
125
|
-
runner: 'opencode',
|
|
126
|
-
models: [],
|
|
127
|
-
accessOptions: [
|
|
128
|
-
{
|
|
129
|
-
id: 'default',
|
|
130
|
-
label: 'Default',
|
|
131
|
-
description: 'Use OpenCode and Workspace permission configuration.'
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
id: 'auto',
|
|
135
|
-
label: 'Auto approve',
|
|
136
|
-
description: 'Automatically allow requested tool permissions.'
|
|
137
|
-
}
|
|
138
|
-
],
|
|
139
|
-
commands: [
|
|
140
|
-
{
|
|
141
|
-
id: 'compact',
|
|
142
|
-
runner: 'opencode',
|
|
143
|
-
label: '/compact',
|
|
144
|
-
description: COMMON_COMMAND_DESCRIPTIONS.compact,
|
|
145
|
-
inputHint: '/compact',
|
|
146
|
-
source: 'OPENCODE_SERVER',
|
|
147
|
-
interaction: 'IMMEDIATE_ACTION',
|
|
148
|
-
available: true,
|
|
149
|
-
reasonCode: null
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
id: 'plan',
|
|
153
|
-
runner: 'opencode',
|
|
154
|
-
label: '/plan',
|
|
155
|
-
stateLabel: 'Plan Mode',
|
|
156
|
-
description: COMMON_COMMAND_DESCRIPTIONS.plan,
|
|
157
|
-
inputHint: '/plan',
|
|
158
|
-
source: 'OPENCODE_SERVER',
|
|
159
|
-
interaction: 'TOGGLE',
|
|
160
|
-
available: true,
|
|
161
|
-
reasonCode: null
|
|
162
|
-
}
|
|
163
|
-
]
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
export function declaredRunnerProfiles(input) {
|
|
167
|
-
return [
|
|
168
|
-
withCapabilities(definitions.codex, input.codexAvailable),
|
|
169
|
-
withCapabilities(claudeProfile(input.environment ?? process.env), input.claudeCodeAvailable),
|
|
170
|
-
withCapabilities(definitions.opencode, input.openCodeAvailable === true)
|
|
171
|
-
];
|
|
172
|
-
}
|
|
173
|
-
export function supportsRunnerConfiguration(input) {
|
|
174
|
-
const profile = input.runner === 'claude-code'
|
|
175
|
-
? claudeProfile(input.environment ?? process.env)
|
|
176
|
-
: definitions[input.runner];
|
|
177
|
-
const model = profile.models.find((candidate) => candidate.id === input.model);
|
|
178
|
-
return (model !== undefined &&
|
|
179
|
-
model.supportedEfforts.includes(input.effort) &&
|
|
180
|
-
profile.accessOptions.some((candidate) => candidate.id === input.access));
|
|
181
|
-
}
|
|
182
|
-
export function claudeDefaultModel(environment = process.env) {
|
|
183
|
-
return configuredClaudeModel('sonnet', environment) ?? 'sonnet';
|
|
184
|
-
}
|
|
185
|
-
function claudeProfile(environment) {
|
|
186
|
-
const profile = definitions['claude-code'];
|
|
187
|
-
const models = profile.models.map((model) => {
|
|
188
|
-
const configured = configuredClaudeModel(model.id, environment);
|
|
189
|
-
return configured === undefined ? model : { ...model, id: configured, label: configured };
|
|
190
|
-
});
|
|
191
|
-
return {
|
|
192
|
-
...profile,
|
|
193
|
-
models: models.filter((model, index) => models.findIndex((candidate) => candidate.id === model.id) === index)
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
function configuredClaudeModel(alias, environment) {
|
|
197
|
-
const environmentName = CLAUDE_MODEL_ENVIRONMENT[alias];
|
|
198
|
-
return (validModelName(environmentName === undefined ? undefined : environment[environmentName]) ??
|
|
199
|
-
(alias === 'sonnet' ? validModelName(environment['ANTHROPIC_MODEL']) : undefined));
|
|
200
|
-
}
|
|
201
|
-
function validModelName(value) {
|
|
202
|
-
const normalized = value?.trim();
|
|
203
|
-
return normalized !== undefined && normalized.length > 0 && normalized.length <= 128
|
|
204
|
-
? normalized
|
|
205
|
-
: undefined;
|
|
206
|
-
}
|
|
207
|
-
function withCapabilities(profile, available) {
|
|
208
|
-
return {
|
|
209
|
-
...profile,
|
|
210
|
-
commands: profile.commands.map((command) => available ? command : { ...command, available: false, reasonCode: 'RUNNER_UNAVAILABLE' }),
|
|
211
|
-
capabilities: available
|
|
212
|
-
? ['history.read', 'events.live', 'turn.start', 'turn.queue', 'turn.interrupt']
|
|
213
|
-
: []
|
|
214
|
-
};
|
|
215
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
const _0x3446b3=_0x2530;function _0x5ecd(){const _0x16f99c=['CgXHBG','qwnJzxb0igvKAxrZ','mJa4sxzbv0ve','zw52AxjVBM1LBNq','y29TBwfUzhm','CMvHzc1VBMX5','vxnLie9Wzw5dB2rLigfUzcbxB3jRC3bHy2uGCgvYBwLZC2LVBIbJB25MAwD1CMf0Aw9UlG','vxnLienSyxvKzsbdB2rLigrLzMf1BhqGy29UzMLYBwf0Aw9UCY4','Aw5JBhvKzxm','qNLWyxnZihbLCM1PC3nPB24Gy29UzMLYBwf0Aw9UCY4','qxnRihDOzw4GywrKAxrPB25HBcbWzxjTAxnZAw9UigLZihjLCxvPCMvKlG','mJuZnda0thnzB0Lp','q0Xbvurfx0fhru5ux1nesW','qu5usfjpueLdx0rfrKfvtfrFu09otKvux01prevm','qu5usfjpueLdx0rfrKfvtfrFt1bvu19nt0rfta','rgvMyxvSDa','qu5usfjpueLdx0rfrKfvtfrFsefjs1vFtu9eruW','q2XHDwrLie9WDxm','mtq2mtKWm2rAAwLAAG','mM1ZywPZyq','v29YA3nWywnLihDYAxrL','q2XHDwrLieHHAwT1','vg9Nz2XLignVBgXHyM9YyxrPDMuGugXHBIbnB2rLlG','mtuWnJe4nLrYswPIwa','y2XHDwrLlwnVzgu','EgHPz2G','DhvYBI5PBNrLCNj1Chq','uLvotKvsx1voqvzbsuXbqKXf','ywnJzxb0lwvKAxrZ','qxv0B21HDgLJywXSEsbHBgXVDYbYzxf1zxn0zwqGDg9VBcbWzxjTAxnZAw9UCY4','Bg93','BgvUz3rO','BwfW','yxv0BW','zNvSBc1Hy2nLC3m','qNLWyxnZihbLCM1PC3nPB25Z','zwzMB3j0','zMLUza','DhvYBI5ZDgfYDa','C29Tzq','zMLSDgvY','qwXSB3CGzNvSBcbHy2nLC3mGD2L0Ag91DcbPBMrPDMLKDwfSignVBMzPCM1HDgLVBNmU','B3bLBKnVzgvbDMfPBgfIBgu','AgLZDg9YEs5YzwfK','qxv0BYbHChbYB3zL','ve9hr0Xf','su1nrurjqvrfx0fdveLptG','uNvUigLUifbSyw4Gtw9Kzsb3AxrOB3v0igv4zwn1DgLUzYb0B29SCY4','AgfPA3u','qwXSB3CGD3jPDgvZigLUihrOzsbJDxjYzw50ifDVCMTZCgfJzs4','l3bSyw4','qxv0B21HDgLJywXSEsbHy2nLChqGzwrPDhmGAw4GDgHLign1CNjLBNqGv29YA3nWywnLlG','uMvZDhjPy3qGq29KzxGGDg8GysbYzwfKlw9UBhKGC2fUzgjVEc4','q29TCgfJDcb0AguGy3vYCMvUDcbZzxnZAw9UignVBNrLEhqU','D29YA3nWywnLlxDYAxrL','ugXHBIbnB2rL','DhjPBq','uMvHzc1VBMX5','yNLWyxnZ','nZK4nZe4ovHgEfPKEG','ywnJzxnZt3b0Aw9UCW','DhvYBI5XDwv1zq','qu5usfjpueLdx01prevm','rNvSBcbHy2nLC3m','C29UBMv0','zgvMyxvSDa','q2XHDwrLifnVBM5LDa','y29KzxHbDMfPBgfIBgu','y2XHDwrLq29Kzuf2ywLSywjSzq','y29TCgfJDa','ndG1mJa2mgDOrhbKzG','Bw9KzwW','t1bftKnprevFu0vsvKvs','mtC0nZG0oeDhA1vuua','B24TCMvXDwvZDa','AgLNAa','CNvUBMvY','zMLUzeLUzgv4','l2zHC3q','ywnJzxnZ','Bw9KzwXZ','t24TCMvXDwvZDa','B3b1CW','BwvKAxvT','zMfZDa','mZuZmdyWqwnqCwLA','zxzLBNrZlMXPDMu','B3bLBMnVzgu','Bwf4','q09ervHFqvbqx1nfuLzfuG','C3vWCg9YDgvKrwzMB3j0CW','y29KzxG','l2nVBxbHy3q','vg9Nz2XLihrOzsbMyxn0ihnLCNzPy2uGDgLLCIb3AgvUihn1ChbVCNrLzc4'];_0x5ecd=function(){return _0x16f99c;};return _0x5ecd();}(function(_0xe1712b,_0x22ba54){const _0x2ff840=_0x2530,_0x3e60b6=_0xe1712b();while(!![]){try{const _0x4bf2c4=parseInt(_0x2ff840(0x1e0))/(-0x1a3a+0xfb2*0x1+0x57*0x1f)*(-parseInt(_0x2ff840(0x1e1))/(-0x1*0x221b+-0xd19+0x1*0x2f36))+parseInt(_0x2ff840(0x1e5))/(-0x181f+-0x1e74+0x3696)+parseInt(_0x2ff840(0x214))/(0xc48+0x1a18+-0x265c)+-parseInt(_0x2ff840(0x223))/(-0x15cd+0x1fb2+-0x9e0)+parseInt(_0x2ff840(0x217))/(0x167*-0x2+0xdd3*-0x1+0x15*0xcb)+parseInt(_0x2ff840(0x209))/(0x1557+-0xb2*-0x12+-0x21d4)+parseInt(_0x2ff840(0x22e))/(0x38a+-0x1*-0x472+-0x7f4)*(-parseInt(_0x2ff840(0x1d9))/(-0x2c7*0xc+-0x19b8+0x3b15));if(_0x4bf2c4===_0x22ba54)break;else _0x3e60b6['push'](_0x3e60b6['shift']());}catch(_0x245658){_0x3e60b6['push'](_0x3e60b6['shift']());}}}(_0x5ecd,-0xc3b1*-0x20+-0x8d2b9+-0x27a1*0xe));const COMMON_COMMAND_DESCRIPTIONS={'compact':_0x3446b3(0x203),'plan':_0x3446b3(0x1e4)},CLAUDE_MODEL_ENVIRONMENT={'opus':_0x3446b3(0x1dc),'sonnet':_0x3446b3(0x1db),'haiku':_0x3446b3(0x1de)},definitions={'codex':{'runner':_0x3446b3(0x229),'models':[],'accessOptions':[{'id':_0x3446b3(0x218),'label':_0x3446b3(0x21f),'description':_0x3446b3(0x1d8)},{'id':_0x3446b3(0x204),'label':_0x3446b3(0x1e2),'description':_0x3446b3(0x1ff)},{'id':_0x3446b3(0x1f0),'label':_0x3446b3(0x20d),'description':_0x3446b3(0x1f7)},{'id':_0x3446b3(0x231),'label':_0x3446b3(0x207),'description':_0x3446b3(0x202)}],'commands':[{'id':_0x3446b3(0x213),'label':_0x3446b3(0x22a),'description':COMMON_COMMAND_DESCRIPTIONS[_0x3446b3(0x213)],'inputHint':_0x3446b3(0x22a),'interaction':_0x3446b3(0x1fc)},{'id':_0x3446b3(0x22c),'label':_0x3446b3(0x200),'stateLabel':_0x3446b3(0x205),'description':COMMON_COMMAND_DESCRIPTIONS[_0x3446b3(0x22c)],'inputHint':_0x3446b3(0x200),'interaction':_0x3446b3(0x1fb)},{'id':_0x3446b3(0x222),'label':_0x3446b3(0x21c),'description':_0x3446b3(0x22b),'inputHint':_0x3446b3(0x21c),'interaction':_0x3446b3(0x1fb)}][_0x3446b3(0x1ee)](_0x3bf36f=>({..._0x3bf36f,'runner':_0x3446b3(0x229),'source':_0x3446b3(0x227),'available':!![],'reasonCode':null}))},'claude-code':{'runner':_0x3446b3(0x1e6),'models':[{'id':_0x3446b3(0x220),'label':_0x3446b3(0x1df),'supportedEfforts':[_0x3446b3(0x1ec),_0x3446b3(0x221),_0x3446b3(0x219),_0x3446b3(0x1e7),_0x3446b3(0x226)]},{'id':_0x3446b3(0x20e),'label':_0x3446b3(0x210),'supportedEfforts':[_0x3446b3(0x1ec),_0x3446b3(0x221),_0x3446b3(0x219),_0x3446b3(0x1e7),_0x3446b3(0x226)]},{'id':_0x3446b3(0x1fe),'label':_0x3446b3(0x1e3),'supportedEfforts':[_0x3446b3(0x1ec),_0x3446b3(0x221)]}],'accessOptions':[{'id':_0x3446b3(0x20f),'label':_0x3446b3(0x1dd),'description':_0x3446b3(0x233)},{'id':_0x3446b3(0x1ea),'label':_0x3446b3(0x22d),'description':_0x3446b3(0x201)},{'id':_0x3446b3(0x208),'label':_0x3446b3(0x1f1),'description':_0x3446b3(0x1d7)},{'id':_0x3446b3(0x22c),'label':_0x3446b3(0x205),'description':_0x3446b3(0x1fd)}],'commands':[{'id':_0x3446b3(0x213),'runner':_0x3446b3(0x1e6),'label':_0x3446b3(0x22a),'description':COMMON_COMMAND_DESCRIPTIONS[_0x3446b3(0x213)],'inputHint':_0x3446b3(0x22a),'source':_0x3446b3(0x1da),'interaction':_0x3446b3(0x1fc),'available':!![],'reasonCode':null},{'id':_0x3446b3(0x22c),'runner':_0x3446b3(0x1e6),'label':_0x3446b3(0x200),'stateLabel':_0x3446b3(0x205),'description':COMMON_COMMAND_DESCRIPTIONS[_0x3446b3(0x22c)],'inputHint':_0x3446b3(0x200),'source':_0x3446b3(0x1da),'interaction':_0x3446b3(0x1fb),'available':!![],'reasonCode':null}]},'opencode':{'runner':_0x3446b3(0x225),'models':[],'accessOptions':[{'id':_0x3446b3(0x20f),'label':_0x3446b3(0x1dd),'description':_0x3446b3(0x232)},{'id':_0x3446b3(0x1ef),'label':_0x3446b3(0x1fa),'description':_0x3446b3(0x1eb)}],'commands':[{'id':_0x3446b3(0x213),'runner':_0x3446b3(0x225),'label':_0x3446b3(0x22a),'description':COMMON_COMMAND_DESCRIPTIONS[_0x3446b3(0x213)],'inputHint':_0x3446b3(0x22a),'source':_0x3446b3(0x216),'interaction':_0x3446b3(0x1fc),'available':!![],'reasonCode':null},{'id':_0x3446b3(0x22c),'runner':_0x3446b3(0x225),'label':_0x3446b3(0x200),'stateLabel':_0x3446b3(0x205),'description':COMMON_COMMAND_DESCRIPTIONS[_0x3446b3(0x22c)],'inputHint':_0x3446b3(0x200),'source':_0x3446b3(0x216),'interaction':_0x3446b3(0x1fb),'available':!![],'reasonCode':null}]}};export function declaredRunnerProfiles(_0x30d396){const _0xd7a846=_0x3446b3;return[withCapabilities(definitions[_0xd7a846(0x229)],_0x30d396[_0xd7a846(0x211)]),withCapabilities(claudeProfile(_0x30d396[_0xd7a846(0x22f)]??process.env),_0x30d396[_0xd7a846(0x212)]),withCapabilities(definitions[_0xd7a846(0x225)],_0x30d396[_0xd7a846(0x1f8)]===!![])];}export function supportsRunnerConfiguration(_0x2f4adb){const _0x4a2f27=_0x3446b3,_0x1f86e4=_0x2f4adb[_0x4a2f27(0x21a)]===_0x4a2f27(0x1e6)?claudeProfile(_0x2f4adb[_0x4a2f27(0x22f)]??process.env):definitions[_0x2f4adb[_0x4a2f27(0x21a)]],_0x402422=_0x1f86e4[_0x4a2f27(0x21e)][_0x4a2f27(0x1f3)](_0x9c71d3=>_0x9c71d3['id']===_0x2f4adb[_0x4a2f27(0x215)]);return _0x402422!==undefined&&_0x402422[_0x4a2f27(0x228)][_0x4a2f27(0x234)](_0x2f4adb[_0x4a2f27(0x1f2)])&&_0x1f86e4[_0x4a2f27(0x20a)][_0x4a2f27(0x1f5)](_0x47327e=>_0x47327e['id']===_0x2f4adb[_0x4a2f27(0x21d)]);}export function claudeDefaultModel(_0x5328af=process.env){const _0x386a95=_0x3446b3;return configuredClaudeModel(_0x386a95(0x20e),_0x5328af)??_0x386a95(0x20e);}function claudeProfile(_0x2ad973){const _0x4c1964=_0x3446b3,_0x1e8e82=definitions[_0x4c1964(0x1e6)],_0x3bbe1e=_0x1e8e82[_0x4c1964(0x21e)][_0x4c1964(0x1ee)](_0x56105a=>{const _0x49fac5=configuredClaudeModel(_0x56105a['id'],_0x2ad973);return _0x49fac5===undefined?_0x56105a:{..._0x56105a,'id':_0x49fac5,'label':_0x49fac5};});return{..._0x1e8e82,'models':_0x3bbe1e[_0x4c1964(0x1f6)]((_0x1523ee,_0x2decf9)=>_0x3bbe1e[_0x4c1964(0x21b)](_0x2c63b9=>_0x2c63b9['id']===_0x1523ee['id'])===_0x2decf9)};}function configuredClaudeModel(_0x375908,_0x52fdd2){const _0x453489=_0x3446b3,_0x2e52e4=CLAUDE_MODEL_ENVIRONMENT[_0x375908];return validModelName(_0x2e52e4===undefined?undefined:_0x52fdd2[_0x2e52e4])??(_0x375908===_0x453489(0x20e)?validModelName(_0x52fdd2[_0x453489(0x20c)]):undefined);}function validModelName(_0x2ac416){const _0x29703c=_0x3446b3,_0x764dc3=_0x2ac416?.[_0x29703c(0x206)]();return _0x764dc3!==undefined&&_0x764dc3[_0x29703c(0x1ed)]>-0x1*0x12ef+0x517+-0x1bb*-0x8&&_0x764dc3[_0x29703c(0x1ed)]<=-0x231f*0x1+-0x4*0x503+-0x37ab*-0x1?_0x764dc3:undefined;}function _0x2530(_0x305e3f,_0x52904f){_0x305e3f=_0x305e3f-(-0x3*-0xf9+0x969+-0x1*0xa7d);const _0x4c0d5e=_0x5ecd();let _0x1f1c53=_0x4c0d5e[_0x305e3f];if(_0x2530['qZsvye']===undefined){var _0xebe868=function(_0x3c817e){const _0x13d72f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x54decf='',_0x53bffa='';for(let _0x4cc68e=-0x3*0xb8d+0x3d*-0x78+0x3f3f,_0x5b6cd9,_0x399e2f,_0x2acb4c=-0x6c4+0x9c9+-0x305;_0x399e2f=_0x3c817e['charAt'](_0x2acb4c++);~_0x399e2f&&(_0x5b6cd9=_0x4cc68e%(-0x25*-0xf9+-0x2455*0x1+0x1*0x5c)?_0x5b6cd9*(-0x53*0x1+0x235*-0x6+0xdd1)+_0x399e2f:_0x399e2f,_0x4cc68e++%(0xe09*-0x1+0x9e0+0x42d))?_0x54decf+=String['fromCharCode'](-0x1*0x2b4+0x647+-0x294&_0x5b6cd9>>(-(0xd01*-0x3+0xed9+0xee*0x1a)*_0x4cc68e&0x32*-0x8+-0x5*-0x14a+-0x4dc)):-0x1da8+0x3*-0x2bd+0x25df){_0x399e2f=_0x13d72f['indexOf'](_0x399e2f);}for(let _0x5f1ea7=0x26db+-0x8fe*0x3+-0xbe1,_0x744392=_0x54decf['length'];_0x5f1ea7<_0x744392;_0x5f1ea7++){_0x53bffa+='%'+('00'+_0x54decf['charCodeAt'](_0x5f1ea7)['toString'](-0xb4c+-0x2701+0x325d))['slice'](-(-0xef*-0x1f+-0xd1a+-0x243*0x7));}return decodeURIComponent(_0x53bffa);};_0x2530['AALSWT']=_0xebe868,_0x2530['NrLFyj']={},_0x2530['qZsvye']=!![];}const _0x5da932=_0x4c0d5e[-0x1c46+0x4e4+0x1762];_0x2530['iewQIN']!==_0x5da932&&(_0x2530['NrLFyj']={},_0x2530['iewQIN']=_0x5da932);const _0x3b8882=_0x2530['NrLFyj'][_0x305e3f];return _0x3b8882===undefined?(_0x1f1c53=_0x2530['AALSWT'](_0x1f1c53),_0x2530['NrLFyj'][_0x305e3f]=_0x1f1c53):_0x1f1c53=_0x3b8882,_0x1f1c53;}function withCapabilities(_0x12b98,_0x41cef9){const _0x16030f=_0x3446b3;return{..._0x12b98,'commands':_0x12b98[_0x16030f(0x230)][_0x16030f(0x1ee)](_0x314a36=>_0x41cef9?_0x314a36:{..._0x314a36,'available':![],'reasonCode':_0x16030f(0x1e9)}),'capabilities':_0x41cef9?[_0x16030f(0x1f9),_0x16030f(0x224),_0x16030f(0x1f4),_0x16030f(0x20b),_0x16030f(0x1e8)]:[]};}
|
package/dist/runner-usage.js
CHANGED
|
@@ -1,190 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { homedir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
const CODEX_USAGE_URL = 'https://chatgpt.com/backend-api/wham/usage';
|
|
5
|
-
const CLAUDE_USAGE_URL = 'https://api.anthropic.com/api/oauth/usage';
|
|
6
|
-
const CREDENTIALS_MAX_BYTES = 256 * 1024;
|
|
7
|
-
const RESPONSE_MAX_BYTES = 256 * 1024;
|
|
8
|
-
const CODEX_CACHE_MS = 60_000;
|
|
9
|
-
const CLAUDE_CACHE_MS = 5 * 60_000;
|
|
10
|
-
export const USAGE_OAUTH_REQUIRED = 'OFFICIAL_OAUTH_REQUIRED';
|
|
11
|
-
export class RunnerUsageReader {
|
|
12
|
-
fetcher;
|
|
13
|
-
homePath;
|
|
14
|
-
now;
|
|
15
|
-
cache = new Map();
|
|
16
|
-
constructor(fetcher = fetch, homePath = homedir(), now = Date.now) {
|
|
17
|
-
this.fetcher = fetcher;
|
|
18
|
-
this.homePath = homePath;
|
|
19
|
-
this.now = now;
|
|
20
|
-
}
|
|
21
|
-
async status(runner) {
|
|
22
|
-
return (await this.credentials(runner)) === undefined
|
|
23
|
-
? unavailable(runner, USAGE_OAUTH_REQUIRED)
|
|
24
|
-
: { runner, available: true, reasonCode: null };
|
|
25
|
-
}
|
|
26
|
-
async read(runner) {
|
|
27
|
-
const status = await this.status(runner);
|
|
28
|
-
if (!status.available)
|
|
29
|
-
throw new Error(status.reasonCode ?? 'USAGE_UNAVAILABLE');
|
|
30
|
-
const cached = this.cache.get(runner);
|
|
31
|
-
const now = this.now();
|
|
32
|
-
if (cached !== undefined && now - cached.fetchedAt < cacheDuration(runner)) {
|
|
33
|
-
return { ...cached, cached: true };
|
|
34
|
-
}
|
|
35
|
-
const credentials = await this.credentials(runner);
|
|
36
|
-
if (credentials === undefined)
|
|
37
|
-
throw new Error(USAGE_OAUTH_REQUIRED);
|
|
38
|
-
const usage = runner === 'codex'
|
|
39
|
-
? await this.readCodex(credentials, now)
|
|
40
|
-
: await this.readClaude(credentials, now);
|
|
41
|
-
this.cache.set(runner, usage);
|
|
42
|
-
return usage;
|
|
43
|
-
}
|
|
44
|
-
async credentials(runner) {
|
|
45
|
-
const path = runner === 'codex'
|
|
46
|
-
? join(this.homePath, '.codex', 'auth.json')
|
|
47
|
-
: join(this.homePath, '.claude', '.credentials.json');
|
|
48
|
-
const value = await readJson(path);
|
|
49
|
-
return runner === 'codex' ? codexCredentials(value) : claudeCredentials(value);
|
|
50
|
-
}
|
|
51
|
-
async readCodex(credentials, fetchedAt) {
|
|
52
|
-
const headers = {
|
|
53
|
-
Authorization: `Bearer ${credentials.accessToken}`
|
|
54
|
-
};
|
|
55
|
-
if (credentials.accountId !== undefined)
|
|
56
|
-
headers['ChatGPT-Account-Id'] = credentials.accountId;
|
|
57
|
-
const value = await requestJson(this.fetcher, CODEX_USAGE_URL, headers);
|
|
58
|
-
const windows = [
|
|
59
|
-
codexUsageWindow(value, 'primary_window'),
|
|
60
|
-
codexUsageWindow(value, 'secondary_window')
|
|
61
|
-
].filter((window) => window !== undefined);
|
|
62
|
-
if (windows.length === 0)
|
|
63
|
-
throw new Error('USAGE_RESPONSE_INVALID');
|
|
64
|
-
return { runner: 'codex', windows, fetchedAt, cached: false };
|
|
65
|
-
}
|
|
66
|
-
async readClaude(credentials, fetchedAt) {
|
|
67
|
-
const value = await requestJson(this.fetcher, CLAUDE_USAGE_URL, {
|
|
68
|
-
Authorization: `Bearer ${credentials.accessToken}`,
|
|
69
|
-
'anthropic-beta': 'oauth-2025-04-20',
|
|
70
|
-
'Content-Type': 'application/json'
|
|
71
|
-
});
|
|
72
|
-
const windows = [
|
|
73
|
-
usageWindow(value, 'five_hour', '5-hour limit'),
|
|
74
|
-
usageWindow(value, 'seven_day', '7-day limit'),
|
|
75
|
-
usageWindow(value, 'seven_day_sonnet', '7-day Sonnet limit')
|
|
76
|
-
].filter((window) => window !== undefined);
|
|
77
|
-
if (windows.length === 0)
|
|
78
|
-
throw new Error('USAGE_RESPONSE_INVALID');
|
|
79
|
-
return { runner: 'claude-code', windows, fetchedAt, cached: false };
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
function unavailable(runner, reasonCode) {
|
|
83
|
-
return { runner, available: false, reasonCode };
|
|
84
|
-
}
|
|
85
|
-
function cacheDuration(runner) {
|
|
86
|
-
return runner === 'codex' ? CODEX_CACHE_MS : CLAUDE_CACHE_MS;
|
|
87
|
-
}
|
|
88
|
-
async function readJson(path) {
|
|
89
|
-
try {
|
|
90
|
-
const text = await readFile(path, 'utf8');
|
|
91
|
-
if (text.length > CREDENTIALS_MAX_BYTES)
|
|
92
|
-
return undefined;
|
|
93
|
-
return JSON.parse(text);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
function codexCredentials(value) {
|
|
100
|
-
const root = record(value);
|
|
101
|
-
const tokens = record(root?.tokens) ?? root;
|
|
102
|
-
const accessToken = string(tokens?.access_token) ?? string(tokens?.accessToken);
|
|
103
|
-
if (accessToken === undefined)
|
|
104
|
-
return undefined;
|
|
105
|
-
const accountId = string(tokens?.account_id) ?? string(tokens?.accountId) ?? string(root?.account_id);
|
|
106
|
-
return { accessToken, ...(accountId === undefined ? {} : { accountId }) };
|
|
107
|
-
}
|
|
108
|
-
function claudeCredentials(value) {
|
|
109
|
-
const credentials = record(record(value)?.claudeAiOauth);
|
|
110
|
-
const accessToken = string(credentials?.accessToken);
|
|
111
|
-
return accessToken === undefined ? undefined : { accessToken };
|
|
112
|
-
}
|
|
113
|
-
async function requestJson(fetcher, url, headers) {
|
|
114
|
-
const controller = new AbortController();
|
|
115
|
-
const timer = setTimeout(() => controller.abort(), 5_000);
|
|
116
|
-
try {
|
|
117
|
-
const response = await fetcher(url, {
|
|
118
|
-
method: 'GET',
|
|
119
|
-
headers,
|
|
120
|
-
redirect: 'error',
|
|
121
|
-
signal: controller.signal
|
|
122
|
-
});
|
|
123
|
-
if (response.status === 401 || response.status === 403)
|
|
124
|
-
throw new Error('USAGE_AUTHENTICATION_FAILED');
|
|
125
|
-
if (response.status === 429)
|
|
126
|
-
throw new Error('USAGE_RATE_LIMITED');
|
|
127
|
-
if (!response.ok)
|
|
128
|
-
throw new Error('USAGE_REQUEST_FAILED');
|
|
129
|
-
const text = await response.text();
|
|
130
|
-
if (text.length > RESPONSE_MAX_BYTES)
|
|
131
|
-
throw new Error('USAGE_RESPONSE_INVALID');
|
|
132
|
-
return JSON.parse(text);
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
if (error instanceof Error && error.name === 'AbortError')
|
|
136
|
-
throw new Error('USAGE_REQUEST_TIMEOUT');
|
|
137
|
-
throw error;
|
|
138
|
-
}
|
|
139
|
-
finally {
|
|
140
|
-
clearTimeout(timer);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
function usageWindow(value, key, label) {
|
|
144
|
-
const window = record(record(value)?.rate_limit)?.[key] ?? record(value)?.[key];
|
|
145
|
-
const source = record(window);
|
|
146
|
-
const usedPercentage = number(source?.utilization) ?? number(source?.used_percentage) ?? number(source?.used_percent);
|
|
147
|
-
if (usedPercentage === undefined || usedPercentage < 0 || usedPercentage > 100)
|
|
148
|
-
return undefined;
|
|
149
|
-
const resetsAt = timestamp(source?.resets_at) ?? timestamp(source?.reset_at);
|
|
150
|
-
return { id: key, label, usedPercentage, resetsAt };
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Codex backend window names are roles, not durations: depending on a plan,
|
|
154
|
-
* `primary_window` may itself be the weekly quota. Community clients classify
|
|
155
|
-
* them using the response's `limit_window_seconds`, never their position.
|
|
156
|
-
*/
|
|
157
|
-
function codexUsageWindow(value, key) {
|
|
158
|
-
const window = record(record(value)?.rate_limit)?.[key];
|
|
159
|
-
const duration = number(record(window)?.limit_window_seconds);
|
|
160
|
-
const label = duration !== undefined && approximately(duration, 5 * 60 * 60)
|
|
161
|
-
? '5-hour limit'
|
|
162
|
-
: duration !== undefined && approximately(duration, 7 * 24 * 60 * 60)
|
|
163
|
-
? '7-day limit'
|
|
164
|
-
: undefined;
|
|
165
|
-
return label === undefined ? undefined : usageWindow(value, key, label);
|
|
166
|
-
}
|
|
167
|
-
function approximately(value, expected) {
|
|
168
|
-
return Math.abs(value - expected) / expected <= 0.1;
|
|
169
|
-
}
|
|
170
|
-
function record(value) {
|
|
171
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
172
|
-
? value
|
|
173
|
-
: undefined;
|
|
174
|
-
}
|
|
175
|
-
function string(value) {
|
|
176
|
-
return typeof value === 'string' && value.length > 0 && value.length <= 20_000
|
|
177
|
-
? value
|
|
178
|
-
: undefined;
|
|
179
|
-
}
|
|
180
|
-
function number(value) {
|
|
181
|
-
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
182
|
-
}
|
|
183
|
-
function timestamp(value) {
|
|
184
|
-
if (typeof value === 'number' && Number.isFinite(value) && value >= 0)
|
|
185
|
-
return Math.floor(value < 10_000_000_000 ? value * 1_000 : value);
|
|
186
|
-
if (typeof value !== 'string')
|
|
187
|
-
return null;
|
|
188
|
-
const parsed = Date.parse(value);
|
|
189
|
-
return Number.isFinite(parsed) && parsed >= 0 ? parsed : null;
|
|
190
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
const _0x563799=_0x379f;(function(_0x49fef2,_0x14c3d0){const _0x54f947=_0x379f,_0x3b42b1=_0x49fef2();while(!![]){try{const _0x37d6e1=parseInt(_0x54f947(0x1c6))/(-0x53*-0x22+0x1d*0x6b+-0x1724)+parseInt(_0x54f947(0x1c8))/(-0x54*0x13+-0x23bf*-0x1+-0x1d81)+-parseInt(_0x54f947(0x1a2))/(-0x216+-0x17*0xe9+0x1708)+parseInt(_0x54f947(0x1d7))/(0x13e9+0x9*-0x2e7+0x63a)*(parseInt(_0x54f947(0x199))/(0xfd1*-0x1+-0x1bb9*0x1+-0x15*-0x213))+parseInt(_0x54f947(0x1ce))/(-0x16cd+-0x1bc0+0x3293)+parseInt(_0x54f947(0x1a3))/(-0x247*-0x11+-0xe31*-0x1+-0x34e1)+-parseInt(_0x54f947(0x1b9))/(0x53*0x3b+-0x2564+-0x1*-0x124b)*(parseInt(_0x54f947(0x18e))/(0x13dd+0x1498+-0xc7*0x34));if(_0x37d6e1===_0x14c3d0)break;else _0x3b42b1['push'](_0x3b42b1['shift']());}catch(_0x26a0cc){_0x3b42b1['push'](_0x3b42b1['shift']());}}}(_0x1a14,-0x1d*-0x8b12+0x3df8*0x1a+-0xb53f6));import{readFile}from'node:fs/promises';import{homedir}from'node:os';import{join}from'node:path';const CODEX_USAGE_URL=_0x563799(0x1c9),CLAUDE_USAGE_URL=_0x563799(0x19a),CREDENTIALS_MAX_BYTES=(-0x963*0x1+-0x7*-0x1f0+-0x32d)*(0x1293+-0x40c*0x5+0x45*0x15),RESPONSE_MAX_BYTES=(-0x2*-0x416+0x12c7+-0x19f3)*(0x1401+-0x1e7*-0x1+-0x11e8),CODEX_CACHE_MS=0x1b897*-0x1+-0xb*-0xbb0+-0x1*-0x22267,CLAUDE_CACHE_MS=(0x3*0x1df+0xb*-0x31f+0x1cbd)*(-0x1d78*0x2+0x1b12d+-0x6a9*0x15);export const USAGE_OAUTH_REQUIRED=_0x563799(0x1a8);export class RunnerUsageReader{[_0x563799(0x1da)];[_0x563799(0x1ca)];[_0x563799(0x1c0)];[_0x563799(0x1bc)]=new Map();constructor(_0x41de37=fetch,_0x2ceccd=homedir(),_0x3be3cb=Date[_0x563799(0x1c0)]){const _0x574e50=_0x563799;this[_0x574e50(0x1da)]=_0x41de37,this[_0x574e50(0x1ca)]=_0x2ceccd,this[_0x574e50(0x1c0)]=_0x3be3cb;}async[_0x563799(0x1d5)](_0x41f0f7){const _0x1f0624=_0x563799;return await this[_0x1f0624(0x1a7)](_0x41f0f7)===undefined?unavailable(_0x41f0f7,USAGE_OAUTH_REQUIRED):{'runner':_0x41f0f7,'available':!![],'reasonCode':null};}async[_0x563799(0x1c4)](_0x28a423){const _0x58734f=_0x563799,_0x16fd03=await this[_0x58734f(0x1d5)](_0x28a423);if(!_0x16fd03[_0x58734f(0x1cc)])throw new Error(_0x16fd03[_0x58734f(0x1c2)]??_0x58734f(0x191));const _0x51a520=this[_0x58734f(0x1bc)][_0x58734f(0x198)](_0x28a423),_0x12279b=this[_0x58734f(0x1c0)]();if(_0x51a520!==undefined&&_0x12279b-_0x51a520[_0x58734f(0x192)]<cacheDuration(_0x28a423))return{..._0x51a520,'cached':!![]};const _0x3953eb=await this[_0x58734f(0x1a7)](_0x28a423);if(_0x3953eb===undefined)throw new Error(USAGE_OAUTH_REQUIRED);const _0x24ef8f=_0x28a423===_0x58734f(0x1d2)?await this[_0x58734f(0x18d)](_0x3953eb,_0x12279b):await this[_0x58734f(0x18b)](_0x3953eb,_0x12279b);return this[_0x58734f(0x1bc)][_0x58734f(0x196)](_0x28a423,_0x24ef8f),_0x24ef8f;}async[_0x563799(0x1a7)](_0x40d746){const _0x566cdc=_0x563799,_0x3a9031=_0x40d746===_0x566cdc(0x1d2)?join(this[_0x566cdc(0x1ca)],_0x566cdc(0x194),_0x566cdc(0x195)):join(this[_0x566cdc(0x1ca)],_0x566cdc(0x1a5),_0x566cdc(0x1be)),_0x2e4e56=await readJson(_0x3a9031);return _0x40d746===_0x566cdc(0x1d2)?codexCredentials(_0x2e4e56):claudeCredentials(_0x2e4e56);}async[_0x563799(0x18d)](_0x58c2ef,_0x26b4f3){const _0x31a99c=_0x563799,_0x4f108e={'Authorization':_0x31a99c(0x1c1)+_0x58c2ef[_0x31a99c(0x190)]};if(_0x58c2ef[_0x31a99c(0x1b4)]!==undefined)_0x4f108e[_0x31a99c(0x1a4)]=_0x58c2ef[_0x31a99c(0x1b4)];const _0x16f0bc=await requestJson(this[_0x31a99c(0x1da)],CODEX_USAGE_URL,_0x4f108e),_0x34d22b=[codexUsageWindow(_0x16f0bc,_0x31a99c(0x1d8)),codexUsageWindow(_0x16f0bc,_0x31a99c(0x1b1))][_0x31a99c(0x19f)](_0x1c23ec=>_0x1c23ec!==undefined);if(_0x34d22b[_0x31a99c(0x1cd)]===-0x1792*-0x1+0x1*0xa60+-0xb*0x316)throw new Error(_0x31a99c(0x1b7));return{'runner':_0x31a99c(0x1d2),'windows':_0x34d22b,'fetchedAt':_0x26b4f3,'cached':![]};}async[_0x563799(0x18b)](_0x2c6016,_0x12c94f){const _0x523ba5=_0x563799,_0x10bbf8=await requestJson(this[_0x523ba5(0x1da)],CLAUDE_USAGE_URL,{'Authorization':_0x523ba5(0x1c1)+_0x2c6016[_0x523ba5(0x190)],'anthropic-beta':_0x523ba5(0x1d6),'Content-Type':_0x523ba5(0x1ba)}),_0x3a5440=[usageWindow(_0x10bbf8,_0x523ba5(0x1a9),_0x523ba5(0x1aa)),usageWindow(_0x10bbf8,_0x523ba5(0x1af),_0x523ba5(0x1d0)),usageWindow(_0x10bbf8,_0x523ba5(0x1b8),_0x523ba5(0x1ab))][_0x523ba5(0x19f)](_0x459779=>_0x459779!==undefined);if(_0x3a5440[_0x523ba5(0x1cd)]===-0x2606+-0x2*0x12c7+0xacc*0x7)throw new Error(_0x523ba5(0x1b7));return{'runner':_0x523ba5(0x19e),'windows':_0x3a5440,'fetchedAt':_0x12c94f,'cached':![]};}}function unavailable(_0x27399d,_0x342b92){return{'runner':_0x27399d,'available':![],'reasonCode':_0x342b92};}function cacheDuration(_0x2db8d4){const _0x52e3b2=_0x563799;return _0x2db8d4===_0x52e3b2(0x1d2)?CODEX_CACHE_MS:CLAUDE_CACHE_MS;}async function readJson(_0x173f6f){const _0x201a7b=_0x563799;try{const _0x21b468=await readFile(_0x173f6f,_0x201a7b(0x1b6));if(_0x21b468[_0x201a7b(0x1cd)]>CREDENTIALS_MAX_BYTES)return undefined;return JSON[_0x201a7b(0x19c)](_0x21b468);}catch{return undefined;}}function codexCredentials(_0x4da139){const _0x582bbc=_0x563799,_0x39798a=record(_0x4da139),_0x1535aa=record(_0x39798a?.[_0x582bbc(0x1ae)])??_0x39798a,_0x9db65=string(_0x1535aa?.[_0x582bbc(0x1ac)])??string(_0x1535aa?.[_0x582bbc(0x190)]);if(_0x9db65===undefined)return undefined;const _0x5aa77c=string(_0x1535aa?.[_0x582bbc(0x193)])??string(_0x1535aa?.[_0x582bbc(0x1b4)])??string(_0x39798a?.[_0x582bbc(0x193)]);return{'accessToken':_0x9db65,..._0x5aa77c===undefined?{}:{'accountId':_0x5aa77c}};}function claudeCredentials(_0x1f5a87){const _0x565aad=_0x563799,_0x1c41aa=record(record(_0x1f5a87)?.[_0x565aad(0x1db)]),_0x132c73=string(_0x1c41aa?.[_0x565aad(0x190)]);return _0x132c73===undefined?undefined:{'accessToken':_0x132c73};}async function requestJson(_0x473a0f,_0x42dadc,_0x185d05){const _0x7625f7=_0x563799,_0x635889=new AbortController(),_0x458d2a=setTimeout(()=>_0x635889[_0x7625f7(0x1d1)](),0xaaf+0x106*0x9+0x1*-0x5d);try{const _0x2b8a0d=await _0x473a0f(_0x42dadc,{'method':_0x7625f7(0x1c5),'headers':_0x185d05,'redirect':_0x7625f7(0x1cb),'signal':_0x635889[_0x7625f7(0x19d)]});if(_0x2b8a0d[_0x7625f7(0x1d5)]===-0x1def+0x9+-0xf*-0x219||_0x2b8a0d[_0x7625f7(0x1d5)]===-0x18+0x2af*0x4+0x1*-0x911)throw new Error(_0x7625f7(0x19b));if(_0x2b8a0d[_0x7625f7(0x1d5)]===0x1a2*-0x1+0x3d5+-0x86)throw new Error(_0x7625f7(0x1c7));if(!_0x2b8a0d['ok'])throw new Error(_0x7625f7(0x1d9));const _0x2386a9=await _0x2b8a0d[_0x7625f7(0x1a0)]();if(_0x2386a9[_0x7625f7(0x1cd)]>RESPONSE_MAX_BYTES)throw new Error(_0x7625f7(0x1b7));return JSON[_0x7625f7(0x19c)](_0x2386a9);}catch(_0x28282d){if(_0x28282d instanceof Error&&_0x28282d[_0x7625f7(0x1ad)]===_0x7625f7(0x1a6))throw new Error(_0x7625f7(0x1d3));throw _0x28282d;}finally{clearTimeout(_0x458d2a);}}function _0x1a14(){const _0x3300f5=['DxnLzf9WzxjJzw50','ywnJB3vUDeLK','ywjZ','DxrMoa','vvnbr0vFuKvtue9ou0vFsu5wquXjra','C2v2zw5Fzgf5x3nVBM5LDa','nZy4ntzPt1b5vMO','yxbWBgLJyxrPB24VANnVBG','CMf0zv9SAw1PDa','y2fJAgu','BNvTyMvY','lMnYzwrLBNrPywXZlMPZB24','CMvZzxrZx2f0','BM93','qMvHCMvYia','CMvHC29Uq29Kzq','DxnLzf9WzxjJzw50ywDL','CMvHza','r0vu','mta0mZq0ow1pEvnLvG','vvnbr0vFuKfurv9msu1jveve','mtCZmZK4mLDgBxD0sa','Ahr0Chm6lY9JAgf0z3b0lMnVBs9IywnRzw5KlwfWAs93AgfTl3vZywDL','Ag9TzvbHDgG','zxjYB3i','yxzHAwXHyMXL','BgvUz3rO','mZe0odGWmgrItgjkwG','zMXVB3i','nY1KyxKGBgLTAxq','ywjVCNq','y29KzxG','vvnbr0vFuKvrvuvtvf9usu1ft1vu','C3rYAw5N','C3rHDhvZ','B2f1DgGTmJaYns0Wnc0Yma','mJC2mZmWnfvWtK9fzq','ChjPBwfYEv93Aw5KB3C','vvnbr0vFuKvrvuvtvf9gquLmruq','zMv0y2HLCG','y2XHDwrLqwLpyxv0Aa','CMvHzenSyxvKzq','AxngAw5PDgu','CMvHzenVzgv4','mJqZoxbVrMPLqG','AxnbCNjHEq','ywnJzxnZvg9Rzw4','vvnbr0vFvu5bvKfjtefcteu','zMv0y2HLzef0','ywnJB3vUDf9Pza','lMnVzgv4','yxv0Ac5QC29U','C2v0','CMvZzxrFyxq','z2v0','mtbrwMzZu1u','Ahr0Chm6lY9HCgKUyw50AhjVCgLJlMnVBs9HCgKVB2f1DgGVDxnHz2u','vvnbr0vFqvvusevoveLdqvrjt05FrKfjteve','CgfYC2u','C2LNBMfS','y2XHDwrLlwnVzgu','zMLSDgvY','Dgv4Da','B2jQzwn0','mtKYmda5ouvwA25bAa','ota0mtKWs01Yu2Di','q2HHDeDqvc1by2nVDw50luLK','lMnSyxvKzq','qwjVCNrfCNjVCG','y3jLzgvUDgLHBhm','t0zgsunjquXFt0fvveHFuKvrvuLsruq','zML2zv9OB3vY','ns1OB3vYigXPBwL0','nY1KyxKGu29UBMv0igXPBwL0','ywnJzxnZx3rVA2vU','BMfTzq','Dg9Rzw5Z','C2v2zw5Fzgf5','BgLTAxrFD2LUzg93x3nLy29Uzhm','C2vJB25Kyxj5x3DPBMrVDW','DxrPBgL6yxrPB24'];_0x1a14=function(){return _0x3300f5;};return _0x1a14();}function usageWindow(_0x140f62,_0x3d255a,_0x3867fa){const _0xab403e=_0x563799,_0x3d2494=record(record(_0x140f62)?.[_0xab403e(0x1bb)])?.[_0x3d255a]??record(_0x140f62)?.[_0x3d255a],_0x5f5146=record(_0x3d2494),_0x3e3671=number(_0x5f5146?.[_0xab403e(0x1b2)])??number(_0x5f5146?.[_0xab403e(0x1c3)])??number(_0x5f5146?.[_0xab403e(0x1b3)]);if(_0x3e3671===undefined||_0x3e3671<-0xf8+-0x2b*-0xc9+-0x20cb||_0x3e3671>0x70f*-0x5+-0x9*0x3b4+-0x4503*-0x1)return undefined;const _0x306542=timestamp(_0x5f5146?.[_0xab403e(0x1bf)])??timestamp(_0x5f5146?.[_0xab403e(0x197)]);return{'id':_0x3d255a,'label':_0x3867fa,'usedPercentage':_0x3e3671,'resetsAt':_0x306542};}function codexUsageWindow(_0x33227c,_0x435149){const _0xcc0666=_0x563799,_0x5505f9=record(record(_0x33227c)?.[_0xcc0666(0x1bb)])?.[_0x435149],_0x754b77=number(record(_0x5505f9)?.[_0xcc0666(0x1b0)]),_0x431629=_0x754b77!==undefined&&approximately(_0x754b77,(0x1a8a+-0xaab+-0xfda)*(0x1*0x1716+0x1*-0x201d+0x943)*(-0x976+-0x1253*-0x1+-0x8a1))?_0xcc0666(0x1aa):_0x754b77!==undefined&&approximately(_0x754b77,(-0x1*-0x14b0+-0x13a*-0x3+-0x1857)*(-0x3*0xaf1+-0xfba+0x30a5)*(-0x3*0x2af+0x18c3+-0x107a)*(-0x38f*0x4+-0x1cf1*-0x1+0x5*-0x2e5))?_0xcc0666(0x1d0):undefined;return _0x431629===undefined?undefined:usageWindow(_0x33227c,_0x435149,_0x431629);}function approximately(_0x23b57f,_0x7c3e32){const _0x539b57=_0x563799;return Math[_0x539b57(0x1b5)](_0x23b57f-_0x7c3e32)/_0x7c3e32<=-0x4*0x925+-0x1fa1+0x4435+0.1;}function record(_0x5e8be9){const _0x4a20d7=_0x563799;return _0x5e8be9!==null&&typeof _0x5e8be9===_0x4a20d7(0x1a1)&&!Array[_0x4a20d7(0x18f)](_0x5e8be9)?_0x5e8be9:undefined;}function string(_0x4d7e4e){const _0x3d7dae=_0x563799;return typeof _0x4d7e4e===_0x3d7dae(0x1d4)&&_0x4d7e4e[_0x3d7dae(0x1cd)]>-0x24a9+0x12ae+-0x1*-0x11fb&&_0x4d7e4e[_0x3d7dae(0x1cd)]<=0x1*-0x1e5+0x8fde+-0x3fd9?_0x4d7e4e:undefined;}function number(_0x1c4906){const _0xe14eef=_0x563799;return typeof _0x1c4906===_0xe14eef(0x1bd)&&Number[_0xe14eef(0x18c)](_0x1c4906)?_0x1c4906:undefined;}function _0x379f(_0x2db247,_0x345d3e){_0x2db247=_0x2db247-(-0x1d8a+-0x222+0x2137);const _0x44eee4=_0x1a14();let _0x5a941f=_0x44eee4[_0x2db247];if(_0x379f['ZQLdFG']===undefined){var _0x1bbaed=function(_0x58e596){const _0x2de7aa='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x540198='',_0x1e2521='';for(let _0x199d7d=-0x8f5+0x13b4+-0x3*0x395,_0x49d436,_0x702759,_0x5d73d7=0xd90+-0x1*-0x3bb+-0x114b;_0x702759=_0x58e596['charAt'](_0x5d73d7++);~_0x702759&&(_0x49d436=_0x199d7d%(0x1293+-0x40c*0x5+0x21*0xd)?_0x49d436*(-0x2*-0x416+0x12c7+-0x1ab3)+_0x702759:_0x702759,_0x199d7d++%(0x1401+-0x1e7*-0x1+-0x15e4))?_0x540198+=String['fromCharCode'](0x24b8*-0x1+-0x1*-0xab7+-0x2*-0xd80&_0x49d436>>(-(0x3*0x1df+0xb*-0x31f+0x1cba)*_0x199d7d&-0x4e9*0x1+0x2419+-0x1f2a*0x1)):-0x1792*-0x1+0x1*0xa60+-0xb*0x316){_0x702759=_0x2de7aa['indexOf'](_0x702759);}for(let _0x5834d2=-0x2606+-0x2*0x12c7+0xacc*0x7,_0x363504=_0x540198['length'];_0x5834d2<_0x363504;_0x5834d2++){_0x1e2521+='%'+('00'+_0x540198['charCodeAt'](_0x5834d2)['toString'](0xaaf+0x106*0x9+0x1*-0x13d5))['slice'](-(-0x1def+0x9+-0x2c*-0xae));}return decodeURIComponent(_0x1e2521);};_0x379f['iitJmZ']=_0x1bbaed,_0x379f['GhXTZI']={},_0x379f['ZQLdFG']=!![];}const _0xd64ebb=_0x44eee4[-0x18+0x2af*0x4+0x1*-0xaa4];_0x379f['sPxKtL']!==_0xd64ebb&&(_0x379f['GhXTZI']={},_0x379f['sPxKtL']=_0xd64ebb);const _0x2e81a2=_0x379f['GhXTZI'][_0x2db247];return _0x2e81a2===undefined?(_0x5a941f=_0x379f['iitJmZ'](_0x5a941f),_0x379f['GhXTZI'][_0x2db247]=_0x5a941f):_0x5a941f=_0x2e81a2,_0x5a941f;}function timestamp(_0x1848db){const _0x60e786=_0x563799;if(typeof _0x1848db===_0x60e786(0x1bd)&&Number[_0x60e786(0x18c)](_0x1848db)&&_0x1848db>=0xc96+0x1616+0xe*-0x27a)return Math[_0x60e786(0x1cf)](_0x1848db<0x46887539b+0x260f6a221+-0x2*0x23ab908de?_0x1848db*(-0x279*-0x9+0x1*-0x1b41+0x8e8):_0x1848db);if(typeof _0x1848db!==_0x60e786(0x1d4))return null;const _0x5039f4=Date[_0x60e786(0x19c)](_0x1848db);return Number[_0x60e786(0x18c)](_0x5039f4)&&_0x5039f4>=-0x19bf+-0x57*-0x35+-0x3*-0x294?_0x5039f4:null;}
|
|
@@ -1,73 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const execFileAsync = promisify(execFile);
|
|
4
|
-
const COMMANDS = [
|
|
5
|
-
{ id: 'npx', candidates: ['npx'], versionArguments: ['--version'] },
|
|
6
|
-
{ id: 'git', candidates: ['git'], versionArguments: ['--version'] },
|
|
7
|
-
{ id: 'python', candidates: ['python3', 'python'], versionArguments: ['--version'] },
|
|
8
|
-
{ id: 'pip', candidates: ['pip3', 'pip'], versionArguments: ['--version'] }
|
|
9
|
-
];
|
|
10
|
-
export async function detectRuntimeCommands() {
|
|
11
|
-
return Promise.all(COMMANDS.map(detectCommand));
|
|
12
|
-
}
|
|
13
|
-
async function detectCommand(descriptor) {
|
|
14
|
-
for (const command of descriptor.candidates) {
|
|
15
|
-
try {
|
|
16
|
-
const [{ stdout, stderr }, path] = await Promise.all([
|
|
17
|
-
executeVersion(command, descriptor.versionArguments),
|
|
18
|
-
resolveCommandPath(command)
|
|
19
|
-
]);
|
|
20
|
-
const version = normalizeVersion(descriptor.id, `${stdout}${stderr}`.trim().split(/\r?\n/u)[0]?.trim() ?? '');
|
|
21
|
-
return {
|
|
22
|
-
id: descriptor.id,
|
|
23
|
-
command,
|
|
24
|
-
available: true,
|
|
25
|
-
...(version === undefined || version === '' ? {} : { version }),
|
|
26
|
-
...(path === undefined ? {} : { path })
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
// Try the platform-compatible fallback command name.
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
id: descriptor.id,
|
|
35
|
-
command: descriptor.candidates[0],
|
|
36
|
-
available: false
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
export function normalizeVersion(id, value) {
|
|
40
|
-
const normalized = value.trim();
|
|
41
|
-
if (normalized === '')
|
|
42
|
-
return undefined;
|
|
43
|
-
const patterns = {
|
|
44
|
-
git: /^git version\s+(\S+)/iu,
|
|
45
|
-
python: /^python\s+(\S+)/iu,
|
|
46
|
-
pip: /^pip\s+(\S+)/iu
|
|
47
|
-
};
|
|
48
|
-
const match = patterns[id]?.exec(normalized);
|
|
49
|
-
return (match?.[1] ?? normalized).slice(0, 512);
|
|
50
|
-
}
|
|
51
|
-
async function executeVersion(command, args) {
|
|
52
|
-
const executable = process.platform === 'win32' ? process.env['ComSpec'] || 'cmd.exe' : command;
|
|
53
|
-
const commandArgs = process.platform === 'win32' ? ['/d', '/s', '/c', [command, ...args].join(' ')] : [...args];
|
|
54
|
-
return execFileAsync(executable, commandArgs, {
|
|
55
|
-
timeout: 5_000,
|
|
56
|
-
maxBuffer: 64 * 1024,
|
|
57
|
-
windowsHide: true
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
async function resolveCommandPath(command) {
|
|
61
|
-
try {
|
|
62
|
-
const resolver = process.platform === 'win32' ? 'where.exe' : 'which';
|
|
63
|
-
const { stdout } = await execFileAsync(resolver, [command], {
|
|
64
|
-
timeout: 2_000,
|
|
65
|
-
maxBuffer: 64 * 1024,
|
|
66
|
-
windowsHide: true
|
|
67
|
-
});
|
|
68
|
-
return stdout.trim().split(/\r?\n/u)[0]?.trim().slice(0, 2048) || undefined;
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
const _0x447caf=_0x1240;function _0x1240(_0x28e166,_0x856f3d){_0x28e166=_0x28e166-(-0xbc*-0x2f+0x257+0x65*-0x5a);const _0x8a2088=_0x473e();let _0x547372=_0x8a2088[_0x28e166];if(_0x1240['HQrKwX']===undefined){var _0x5e7908=function(_0x1295c7){const _0x1f3099='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2bcf95='',_0x162183='';for(let _0x463907=0xdfa+-0x2c*0xb0+0x1046,_0x2b1544,_0x3a507f,_0x350490=-0xf*0xa0+0x1f6+0x76a;_0x3a507f=_0x1295c7['charAt'](_0x350490++);~_0x3a507f&&(_0x2b1544=_0x463907%(0x189b+-0x239d+0x53*0x22)?_0x2b1544*(-0x5e6+0x9a7+-0x381)+_0x3a507f:_0x3a507f,_0x463907++%(0x20d9+-0x87+0x5*-0x676))?_0x2bcf95+=String['fromCharCode'](-0x269b+0x90f*0x4+0x35e&_0x2b1544>>(-(-0xd19*0x1+-0x733+0x144e)*_0x463907&-0x1f*-0x115+0x5fb+0x13c*-0x20)):-0x20e3+-0x21c4*-0x1+-0xe1){_0x3a507f=_0x1f3099['indexOf'](_0x3a507f);}for(let _0x95c095=-0x1a83+0x3e1+0x16a2,_0x2ddc13=_0x2bcf95['length'];_0x95c095<_0x2ddc13;_0x95c095++){_0x162183+='%'+('00'+_0x2bcf95['charCodeAt'](_0x95c095)['toString'](0x18bc+0x1d58+0x1*-0x3604))['slice'](-(0x24ad+0x12b*0x10+0x17f*-0x25));}return decodeURIComponent(_0x162183);};_0x1240['OZVEWg']=_0x5e7908,_0x1240['CMuaBy']={},_0x1240['HQrKwX']=!![];}const _0x3fdd42=_0x8a2088[-0x21*-0x7f+0x21fe*-0x1+0x119f*0x1];_0x1240['YhzjVo']!==_0x3fdd42&&(_0x1240['CMuaBy']={},_0x1240['YhzjVo']=_0x3fdd42);const _0x58f203=_0x1240['CMuaBy'][_0x28e166];return _0x58f203===undefined?(_0x547372=_0x1240['OZVEWg'](_0x547372),_0x1240['CMuaBy'][_0x28e166]=_0x547372):_0x547372=_0x58f203,_0x547372;}(function(_0x41aaaf,_0x268cab){const _0x3387b9=_0x1240,_0x2271f8=_0x41aaaf();while(!![]){try{const _0x2bd285=parseInt(_0x3387b9(0x159))/(-0x3*-0x502+0x1277+0x1*-0x217c)*(parseInt(_0x3387b9(0x15a))/(0x18ee+-0x6*-0x241+-0x2672))+-parseInt(_0x3387b9(0x160))/(-0x70e*0x2+-0xecc+0x1*0x1ceb)+-parseInt(_0x3387b9(0x166))/(-0x5*0x30+0x1a76+0xcc1*-0x2)+parseInt(_0x3387b9(0x162))/(0x12*-0xc1+0x211+-0x127*-0xa)*(parseInt(_0x3387b9(0x16d))/(-0x1*0x2147+-0x21c2+0x430f))+-parseInt(_0x3387b9(0x15b))/(-0x24e7+0x53*-0x59+-0x5fb*-0xb)*(parseInt(_0x3387b9(0x163))/(0x2e2*0x6+0x2608+-0x374c*0x1))+-parseInt(_0x3387b9(0x170))/(0x21c6+-0x21e4+0x27)+parseInt(_0x3387b9(0x16f))/(-0xe53+0xc2+0xd9b);if(_0x2bd285===_0x268cab)break;else _0x2271f8['push'](_0x2271f8['shift']());}catch(_0xfbfa9c){_0x2271f8['push'](_0x2271f8['shift']());}}}(_0x473e,0x4*-0x10fbd+-0x28b*-0x3e1+0x1ae81));import{execFile}from'node:child_process';import{promisify}from'node:util';const execFileAsync=promisify(execFile),COMMANDS=[{'id':_0x447caf(0x16a),'candidates':[_0x447caf(0x16a)],'versionArguments':[_0x447caf(0x176)]},{'id':_0x447caf(0x16e),'candidates':[_0x447caf(0x16e)],'versionArguments':[_0x447caf(0x176)]},{'id':_0x447caf(0x173),'candidates':[_0x447caf(0x167),_0x447caf(0x173)],'versionArguments':[_0x447caf(0x176)]},{'id':_0x447caf(0x161),'candidates':[_0x447caf(0x164),_0x447caf(0x161)],'versionArguments':[_0x447caf(0x176)]}];export async function detectRuntimeCommands(){const _0x24be7f=_0x447caf;return Promise[_0x24be7f(0x172)](COMMANDS[_0x24be7f(0x15d)](detectCommand));}async function detectCommand(_0x28e166){const _0x5a2feb=_0x447caf;for(const _0x856f3d of _0x28e166[_0x5a2feb(0x174)]){try{const [{stdout:_0x8a2088,stderr:_0x547372},_0x5e7908]=await Promise[_0x5a2feb(0x172)]([executeVersion(_0x856f3d,_0x28e166[_0x5a2feb(0x175)]),resolveCommandPath(_0x856f3d)]),_0x3fdd42=normalizeVersion(_0x28e166['id'],(''+_0x8a2088+_0x547372)[_0x5a2feb(0x169)]()[_0x5a2feb(0x15e)](/\r?\n/u)[0xcd+-0xfe8+0x1*0xf1b]?.[_0x5a2feb(0x169)]()??'');return{'id':_0x28e166['id'],'command':_0x856f3d,'available':!![],..._0x3fdd42===undefined||_0x3fdd42===''?{}:{'version':_0x3fdd42},..._0x5e7908===undefined?{}:{'path':_0x5e7908}};}catch{}}return{'id':_0x28e166['id'],'command':_0x28e166[_0x5a2feb(0x174)][-0x9ce+-0x1ac1*0x1+0x248f],'available':![]};}export function normalizeVersion(_0x58f203,_0x1295c7){const _0x29e38b=_0x447caf,_0x1f3099=_0x1295c7[_0x29e38b(0x169)]();if(_0x1f3099==='')return undefined;const _0x2bcf95={'git':/^git version\s+(\S+)/iu,'python':/^python\s+(\S+)/iu,'pip':/^pip\s+(\S+)/iu},_0x162183=_0x2bcf95[_0x58f203]?.[_0x29e38b(0x168)](_0x1f3099);return(_0x162183?.[-0x1*0x119b+-0x7*-0x3e0+-0x984]??_0x1f3099)[_0x29e38b(0x15c)](-0x519+0x20d9+-0x1bc0,0x2067+-0x2d0*-0x4+0x29a7*-0x1);}function _0x473e(){const _0x463835=['D2HPy2G','D2LUmZi','mtmWogHbuhjfBG','z2L0','odGYoti4mfjOueHMzq','ndy1mZG0nK1zzK9bqW','D2HLCMuUzxHL','ywXS','ChL0Ag9U','y2fUzgLKyxrLCW','DMvYC2LVBKfYz3vTzw50CW','ls12zxjZAw9U','y21KlMv4zq','nZe0mw1Av09Xwq','mJyYqxnxt0v1','nteZmJmYm1LxCfbbva','C2XPy2u','BwfW','C3bSAxq','CgXHDgzVCM0','mtuWnZK4nMTysMPouq','CgLW','mtiZndbArvDSzLC','ohveCMfMvW','CgLWmW','AM9PBG','ntaWmZq0uefSBhPh','ChL0Ag9UmW','zxHLyW','DhjPBq','BNb4'];_0x473e=function(){return _0x463835;};return _0x473e();}async function executeVersion(_0x463907,_0x2b1544){const _0x529f81=_0x447caf,_0x3a507f=process[_0x529f81(0x15f)]===_0x529f81(0x16c)?process.env['ComSpec']||_0x529f81(0x177):_0x463907,_0x350490=process[_0x529f81(0x15f)]===_0x529f81(0x16c)?['/d','/s','/c',[_0x463907,..._0x2b1544][_0x529f81(0x165)]('\x20')]:[..._0x2b1544];return execFileAsync(_0x3a507f,_0x350490,{'timeout':0x1388,'maxBuffer':(-0xa60+-0xd19*0x1+0x17b9)*(0x3*-0x294+0x218b+-0x15cf),'windowsHide':!![]});}async function resolveCommandPath(_0x95c095){const _0x241e54=_0x447caf;try{const _0x2ddc13=process[_0x241e54(0x15f)]===_0x241e54(0x16c)?_0x241e54(0x171):_0x241e54(0x16b),{stdout:_0x461361}=await execFileAsync(_0x2ddc13,[_0x95c095],{'timeout':0x7d0,'maxBuffer':(0x7d+-0x1a95*-0x1+-0x1ad2*0x1)*(-0xf*0x5f+-0x1a83+0x2414),'windowsHide':!![]});return _0x461361[_0x241e54(0x169)]()[_0x241e54(0x15e)](/\r?\n/u)[0x18bc+0x1d58+0x1*-0x3614]?.[_0x241e54(0x169)]()[_0x241e54(0x15c)](0x24ad+0x12b*0x10+0x375d*-0x1,-0x21*-0x7f+0x21fe*-0x1+0x199f*0x1)||undefined;}catch{return undefined;}}
|