@invarn/cli 0.9.242 → 0.9.243
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/capture/android/VERSION +1 -0
- package/dist/capture/android/capture-build.cjs +2 -0
- package/dist/capture/android/controller.cjs +2 -0
- package/dist/capture/android/index.cjs +1 -0
- package/dist/capture/android/invarn-agent-0.26.0.aar +0 -0
- package/dist/capture/android/invarn-instrument-0.26.0.jar +0 -0
- package/dist/capture/android/invarn-reader-0.26.0.jar +0 -0
- package/dist/capture/android/verify-apk.cjs +2 -0
- package/dist/invarn.cjs +45 -7
- package/dist/local-run-worker.mjs +1 -115
- package/dist/sdk.d.mts +5 -0
- package/dist/sdk.mjs +40 -7
- package/package.json +2 -3
- package/dist/capture/VERSION +0 -1
- package/dist/capture/capture-build.cjs +0 -2
- package/dist/capture/controller.cjs +0 -2
- package/dist/capture/index.cjs +0 -1
- package/dist/capture/invarn-agent-0.25.0.aar +0 -0
- package/dist/capture/invarn-instrument-0.25.0.jar +0 -0
- package/dist/capture/invarn-reader-0.25.0.jar +0 -0
- package/dist/capture/verify-apk.cjs +0 -2
- /package/dist/capture/{environment.txt → android/environment.txt} +0 -0
- /package/dist/capture/{invarn-init-0.25.0.gradle → android/invarn-init-0.26.0.gradle} +0 -0
- /package/dist/capture/{third_party → android/third_party}/mediabunny/LICENSE +0 -0
- /package/dist/capture/{third_party → android/third_party}/mediabunny/NOTICE +0 -0
- /package/dist/capture/{third_party → android/third_party}/mediabunny/mediabunny.min.cjs +0 -0
- /package/dist/capture/{third_party → android/third_party}/scrcpy/LICENSE +0 -0
- /package/dist/capture/{third_party → android/third_party}/scrcpy/NOTICE +0 -0
- /package/dist/capture/{third_party → android/third_party}/scrcpy/scrcpy-server-v5.0 +0 -0
|
@@ -1,116 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// lib/local-run-worker.mjs
|
|
4
|
-
import { resolve } from "node:path";
|
|
5
|
-
var [, , pipelinePath, workflow] = process.argv;
|
|
6
|
-
if (!pipelinePath || !workflow) {
|
|
7
|
-
send({
|
|
8
|
-
type: "crashed",
|
|
9
|
-
error: "usage: local-run-worker <pipelinePath> <workflow>"
|
|
10
|
-
});
|
|
11
|
-
process.exit(2);
|
|
12
|
-
}
|
|
13
|
-
function send(msg) {
|
|
14
|
-
if (typeof process.send === "function") {
|
|
15
|
-
process.send(msg);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
async function drainStdioThenExit(code) {
|
|
19
|
-
const drainOne = (stream) => new Promise((resolve2) => {
|
|
20
|
-
try {
|
|
21
|
-
stream.write("", () => resolve2());
|
|
22
|
-
} catch {
|
|
23
|
-
resolve2();
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
const timeoutPromise = new Promise((resolve2) => {
|
|
27
|
-
const handle = setTimeout(resolve2, 200);
|
|
28
|
-
handle.unref();
|
|
29
|
-
});
|
|
30
|
-
await Promise.race([
|
|
31
|
-
Promise.all([drainOne(process.stdout), drainOne(process.stderr)]).then(
|
|
32
|
-
() => void 0
|
|
33
|
-
),
|
|
34
|
-
timeoutPromise
|
|
35
|
-
]);
|
|
36
|
-
process.exit(code);
|
|
37
|
-
}
|
|
38
|
-
async function main() {
|
|
39
|
-
send({ type: "started" });
|
|
40
|
-
let cibuildLib;
|
|
41
|
-
try {
|
|
42
|
-
cibuildLib = await import("@invarn/cibuild/lib");
|
|
43
|
-
} catch (err) {
|
|
44
|
-
send({
|
|
45
|
-
type: "crashed",
|
|
46
|
-
error: `failed to load @invarn/cibuild/lib: ${err?.message ?? String(err)}`
|
|
47
|
-
});
|
|
48
|
-
await drainStdioThenExit(2);
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const {
|
|
52
|
-
loadYAMLPipeline,
|
|
53
|
-
convertYAMLToPipelineDef,
|
|
54
|
-
PipelineRunner,
|
|
55
|
-
loadConfig
|
|
56
|
-
} = cibuildLib;
|
|
57
|
-
const absPath = resolve(process.cwd(), pipelinePath);
|
|
58
|
-
let yamlPipeline;
|
|
59
|
-
try {
|
|
60
|
-
yamlPipeline = loadYAMLPipeline(absPath);
|
|
61
|
-
} catch (err) {
|
|
62
|
-
send({
|
|
63
|
-
type: "failed",
|
|
64
|
-
exitCode: 1,
|
|
65
|
-
failureReason: `Pipeline YAML load failed: ${err?.message ?? String(err)}`
|
|
66
|
-
});
|
|
67
|
-
await drainStdioThenExit(1);
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
const config = loadConfig();
|
|
71
|
-
config.local = true;
|
|
72
|
-
let pipeline;
|
|
73
|
-
try {
|
|
74
|
-
const converted = await convertYAMLToPipelineDef(
|
|
75
|
-
yamlPipeline,
|
|
76
|
-
config,
|
|
77
|
-
workflow,
|
|
78
|
-
absPath
|
|
79
|
-
);
|
|
80
|
-
pipeline = converted.pipeline;
|
|
81
|
-
var warnings = converted.warnings;
|
|
82
|
-
var skippedSteps = converted.skippedSteps;
|
|
83
|
-
} catch (err) {
|
|
84
|
-
send({
|
|
85
|
-
type: "failed",
|
|
86
|
-
exitCode: 1,
|
|
87
|
-
failureReason: `Pipeline definition error: ${err?.message ?? String(err)}`
|
|
88
|
-
});
|
|
89
|
-
await drainStdioThenExit(1);
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const runner = new PipelineRunner(config);
|
|
93
|
-
try {
|
|
94
|
-
await runner.runPipeline(pipeline, warnings, skippedSteps);
|
|
95
|
-
send({ type: "completed", exitCode: 0 });
|
|
96
|
-
await drainStdioThenExit(0);
|
|
97
|
-
} catch (err) {
|
|
98
|
-
const message = err?.message ?? String(err);
|
|
99
|
-
const stepMatch = /Step\s+"([^"]+)"\s+failed/i.exec(message);
|
|
100
|
-
const failedStepName = stepMatch ? stepMatch[1] : null;
|
|
101
|
-
send({
|
|
102
|
-
type: "failed",
|
|
103
|
-
exitCode: typeof err?.exitCode === "number" ? err.exitCode : 1,
|
|
104
|
-
failureReason: message,
|
|
105
|
-
failedStepName
|
|
106
|
-
});
|
|
107
|
-
await drainStdioThenExit(1);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
main().catch(async (err) => {
|
|
111
|
-
send({
|
|
112
|
-
type: "crashed",
|
|
113
|
-
error: `worker uncaught: ${err?.message ?? String(err)}`
|
|
114
|
-
});
|
|
115
|
-
await drainStdioThenExit(2);
|
|
116
|
-
});
|
|
2
|
+
const _0x2bb7a8=_0x2ccb;(function(_0x48639c,_0x529183){const _0x2643af=_0x2ccb,_0x1a76bc=_0x48639c();while(!![]){try{const _0x54a350=-parseInt(_0x2643af(0x1a8,']@d1'))/0x1+parseInt(_0x2643af(0x189,'E&Qw'))/0x2*(-parseInt(_0x2643af(0x186,'aZBS'))/0x3)+-parseInt(_0x2643af(0x18d,'IhJ6'))/0x4*(parseInt(_0x2643af(0x19a,'IhJ6'))/0x5)+-parseInt(_0x2643af(0x1aa,'t)Q8'))/0x6*(-parseInt(_0x2643af(0x1a4,'16yJ'))/0x7)+parseInt(_0x2643af(0x199,'mMl)'))/0x8*(parseInt(_0x2643af(0x19b,'qnvq'))/0x9)+parseInt(_0x2643af(0x1a1,'I]nJ'))/0xa*(parseInt(_0x2643af(0x1a2,'mMl)'))/0xb)+parseInt(_0x2643af(0x1a6,'xS0u'))/0xc*(parseInt(_0x2643af(0x1a0,'aLIn'))/0xd);if(_0x54a350===_0x529183)break;else _0x1a76bc['push'](_0x1a76bc['shift']());}catch(_0x42204e){_0x1a76bc['push'](_0x1a76bc['shift']());}}}(_0x2313,0x8185b));import{resolve as _0x194b69}from'node:path';function _0x2ccb(_0x556ea1,_0x6a9cb1){_0x556ea1=_0x556ea1-0x183;const _0x231316=_0x2313();let _0x2ccb00=_0x231316[_0x556ea1];if(_0x2ccb['TSAMdQ']===undefined){var _0x344d9c=function(_0x34be71){const _0x2e8e4e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1645b7='',_0xc58da4='';for(let _0x468ffa=0x0,_0x229119,_0xfcfdd3,_0x2e36fb=0x0;_0xfcfdd3=_0x34be71['charAt'](_0x2e36fb++);~_0xfcfdd3&&(_0x229119=_0x468ffa%0x4?_0x229119*0x40+_0xfcfdd3:_0xfcfdd3,_0x468ffa++%0x4)?_0x1645b7+=String['fromCharCode'](0xff&_0x229119>>(-0x2*_0x468ffa&0x6)):0x0){_0xfcfdd3=_0x2e8e4e['indexOf'](_0xfcfdd3);}for(let _0x10b13f=0x0,_0x43fd3d=_0x1645b7['length'];_0x10b13f<_0x43fd3d;_0x10b13f++){_0xc58da4+='%'+('00'+_0x1645b7['charCodeAt'](_0x10b13f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xc58da4);};const _0x381373=function(_0x15ff92,_0xd65454){let _0x37f4b7=[],_0xb82f0a=0x0,_0x4fba45,_0x11544c='';_0x15ff92=_0x344d9c(_0x15ff92);let _0x5a4aa5;for(_0x5a4aa5=0x0;_0x5a4aa5<0x100;_0x5a4aa5++){_0x37f4b7[_0x5a4aa5]=_0x5a4aa5;}for(_0x5a4aa5=0x0;_0x5a4aa5<0x100;_0x5a4aa5++){_0xb82f0a=(_0xb82f0a+_0x37f4b7[_0x5a4aa5]+_0xd65454['charCodeAt'](_0x5a4aa5%_0xd65454['length']))%0x100,_0x4fba45=_0x37f4b7[_0x5a4aa5],_0x37f4b7[_0x5a4aa5]=_0x37f4b7[_0xb82f0a],_0x37f4b7[_0xb82f0a]=_0x4fba45;}_0x5a4aa5=0x0,_0xb82f0a=0x0;for(let _0x11d2a7=0x0;_0x11d2a7<_0x15ff92['length'];_0x11d2a7++){_0x5a4aa5=(_0x5a4aa5+0x1)%0x100,_0xb82f0a=(_0xb82f0a+_0x37f4b7[_0x5a4aa5])%0x100,_0x4fba45=_0x37f4b7[_0x5a4aa5],_0x37f4b7[_0x5a4aa5]=_0x37f4b7[_0xb82f0a],_0x37f4b7[_0xb82f0a]=_0x4fba45,_0x11544c+=String['fromCharCode'](_0x15ff92['charCodeAt'](_0x11d2a7)^_0x37f4b7[(_0x37f4b7[_0x5a4aa5]+_0x37f4b7[_0xb82f0a])%0x100]);}return _0x11544c;};_0x2ccb['fVbHgN']=_0x381373,_0x2ccb['iTIVza']={},_0x2ccb['TSAMdQ']=!![];}const _0xde9dac=_0x231316[0x0],_0x53fe89=_0x556ea1+_0xde9dac,_0x29a3c8=_0x2ccb['iTIVza'][_0x53fe89];return!_0x29a3c8?(_0x2ccb['lVyklv']===undefined&&(_0x2ccb['lVyklv']=!![]),_0x2ccb00=_0x2ccb['fVbHgN'](_0x2ccb00,_0x6a9cb1),_0x2ccb['iTIVza'][_0x53fe89]=_0x2ccb00):_0x2ccb00=_0x29a3c8,_0x2ccb00;}var [,,w,m]=process[_0x2bb7a8(0x19e,'IIXG')];(!w||!m)&&(i({'type':_0x2bb7a8(0x1ad,'zmM!'),'error':'usage:\x20local-run-worker\x20<pipelinePath>\x20<workflow>'}),process['exit'](0x2));function _0x2313(){const _0x2998f0=['r8kmcWi5','qYjWA0O','r1RcGSkYW5GhWRy','WPOeWQFdLCkSxW','CGH6ta','gZVcHvldUa','WQdcJmk7W5usWPNcQG0','W5FdMwrhW5yJWQa/Dmo0','ubPhW7pdL0xdKCkkFCkRW5Pz','FCk+iNyICa','bCo/WQxdMSoEW5L2W4nn','wmkQdZOF','W6FdRb7dVKe7WQCG','gSouW67cMCkNAee','nfmQerCmW6VdG8kgWQ3dPhm','WRZcLmocBq','BhJcKgq','WPBdQ8owW7GCW64fySk+W4aZFa','tCkiWONcTa','W7PvWONcHuu','w8ovlq','CIaRncVcISoKFmkWW4bct01PW6/dVHxdSmos','yeRcJSksW7S','D8oFqNpcJJi+','dmoiW73cJ8kP','W5VdKunZWRm','xIhdRSkHpSkTxmk7','nfvMqhz+W4hdMG','W4NcNtzcnbK6WQSYmmoJW6K','FvLqiNm','o8o3W6BdGW','W6lcLv4h','nfCMgHScW7BdM8k3WOldLeG','FNLBpSkKW4P/W4BcLW','g8oaW5tdTmkfaSoFuK3dHSoN','xsFcGCkhp8kXBSkWWQK','reHsfwqonG','WQ8VW5/dP1/cV8o4k17cTG','WR8EEN3dLa','xmojt8ojWPJcR8kZWQOwx042','W4tdSv4Poa','ah58ENldJSoZimkJW61Lwa','W61WWOtcPN/cQ8o6pL/cQXO+','WRNcUYfEvHlcHSk5W5LKW7K'];_0x2313=function(){return _0x2998f0;};return _0x2313();}function i(_0xad7e30){const _0x203e36=_0x2bb7a8,_0x25d7cf={'HoOdV':'function'};typeof process[_0x203e36(0x18e,'JH&W')]==_0x25d7cf['HoOdV']&&process['send'](_0xad7e30);}async function r(_0x1713bc){const _0x5e7faf=_0x2bb7a8,_0x48e458={'JGIHg':'kWDYa','fjAQP':function(_0x13388a,_0x4909d8,_0x28096e){return _0x13388a(_0x4909d8,_0x28096e);},'puSWR':function(_0x77c474,_0x259a6b){return _0x77c474(_0x259a6b);}};let _0xda05a3=_0x570e86=>new Promise(_0x53b700=>{const _0x21e405=_0x2ccb;try{_0x48e458['JGIHg']===_0x21e405(0x195,'zmM!')?_0x44dc81():_0x570e86['write']('',()=>_0x53b700());}catch{_0x53b700();}}),_0x286e9c=new Promise(_0xfeade=>{const _0x566429=_0x2ccb;_0x48e458['fjAQP'](setTimeout,_0xfeade,0xc8)[_0x566429(0x197,'6z7V')]();});await Promise[_0x5e7faf(0x18f,'^5dK')]([Promise[_0x5e7faf(0x193,'[6Mn')]([_0xda05a3(process['stdout']),_0x48e458['puSWR'](_0xda05a3,process[_0x5e7faf(0x1ae,'O*hd')])])[_0x5e7faf(0x183,'IhJ6')](()=>{}),_0x286e9c]),process[_0x5e7faf(0x191,'I]nJ')](_0x1713bc);}async function S(){const _0x3b8bce=_0x2bb7a8,_0x527ea2={'iOmtr':'started','HgEBZ':'TnuyV','EBoIi':'crashed','OsGGT':function(_0xb5a1ea,_0x16d391){return _0xb5a1ea(_0x16d391);},'yUdTw':function(_0x41d23a,_0x11516e){return _0x41d23a(_0x11516e);},'NDLIz':function(_0x15db9a,_0x4f21cc){return _0x15db9a===_0x4f21cc;},'PsJoO':function(_0x3d3930,_0xc44b6f){return _0x3d3930(_0xc44b6f);},'wRahs':_0x3b8bce(0x1a7,'t)Q8'),'DSxNb':'UJbUX','TtqDv':'failed','czSZP':'number'};i({'type':_0x527ea2['iOmtr']});let _0x171389;try{_0x3b8bce(0x1ab,'@2X]')!==_0x527ea2['HgEBZ']?_0x3b94ca=_0x22e137(_0xd5c13a):_0x171389=await import(_0x3b8bce(0x194,']@d1'));}catch(_0x3c3d03){i({'type':_0x527ea2[_0x3b8bce(0x1ac,'IhJ6')],'error':'failed\x20to\x20load\x20@invarn/cibuild/lib:\x20'+(_0x3c3d03?.[_0x3b8bce(0x1a3,'J0R4')]??String(_0x3c3d03))}),await _0x527ea2['OsGGT'](r,0x2);return;}let {loadYAMLPipeline:_0x181e70,convertYAMLToPipelineDef:_0x50253b,PipelineRunner:_0x347f40,loadConfig:_0x45530f}=_0x171389,_0x50d554=_0x194b69(process['cwd'](),w),_0x476917;try{_0x476917=_0x527ea2[_0x3b8bce(0x198,'t&FT')](_0x181e70,_0x50d554);}catch(_0x591a71){i({'type':'failed','exitCode':0x1,'failureReason':'Pipeline\x20YAML\x20load\x20failed:\x20'+(_0x591a71?.['message']??_0x527ea2['yUdTw'](String,_0x591a71))}),await r(0x1);return;}let _0x221958=_0x45530f();_0x221958['local']=!0x0;let _0x388eb7;try{if(_0x527ea2['NDLIz'](_0x3b8bce(0x18a,'@2X]'),_0x3b8bce(0x192,'16yJ')))_0x113a25['write']('',()=>_0x39b537());else{let _0x16386c=await _0x50253b(_0x476917,_0x221958,m,_0x50d554);_0x388eb7=_0x16386c[_0x3b8bce(0x185,'4%Nh')];var _0x156942=_0x16386c[_0x3b8bce(0x18b,'3IPV')],_0x5e183a=_0x16386c[_0x3b8bce(0x1a9,'16yJ')];}}catch(_0x168796){i({'type':_0x3b8bce(0x188,'KUJ*'),'exitCode':0x1,'failureReason':'Pipeline\x20definition\x20error:\x20'+(_0x168796?.['message']??String(_0x168796))}),await r(0x1);return;}let _0x2a534b=new _0x347f40(_0x221958);try{await _0x2a534b['runPipeline'](_0x388eb7,_0x156942,_0x5e183a),_0x527ea2['OsGGT'](i,{'type':'completed','exitCode':0x0}),await _0x527ea2['PsJoO'](r,0x0);}catch(_0x518f8a){if(_0x527ea2['NDLIz'](_0x527ea2['wRahs'],_0x527ea2[_0x3b8bce(0x184,'MA1k')]))try{_0xb82f0a['write']('',()=>_0x11544c());}catch{_0x11d2a7();}else{let _0x1ab992=_0x518f8a?.[_0x3b8bce(0x196,'A&Mt')]??String(_0x518f8a),_0xc5fad4=/Step\s+"([^"]+)"\s+failed/i[_0x3b8bce(0x19d,'1onP')](_0x1ab992),_0x366471=_0xc5fad4?_0xc5fad4[0x1]:null;i({'type':_0x527ea2[_0x3b8bce(0x19c,'J0R4')],'exitCode':typeof _0x518f8a?.['exitCode']==_0x527ea2['czSZP']?_0x518f8a['exitCode']:0x1,'failureReason':_0x1ab992,'failedStepName':_0x366471}),await _0x527ea2['PsJoO'](r,0x1);}}}S()['catch'](async _0x503a55=>{const _0x5c9bed=_0x2bb7a8,_0x50c359={'yuQqn':_0x5c9bed(0x18c,'6z7V'),'UEzyg':function(_0x2ade83,_0x436f57){return _0x2ade83(_0x436f57);}};i({'type':_0x50c359['yuQqn'],'error':'worker\x20uncaught:\x20'+(_0x503a55?.['message']??String(_0x503a55))}),await _0x50c359[_0x5c9bed(0x1a5,'OylE')](r,0x2);});
|
package/dist/sdk.d.mts
CHANGED
|
@@ -30,6 +30,11 @@ export interface CreateInvarnMcpServerOptions {
|
|
|
30
30
|
* Responses are structured JSON (`JSON.stringify(result, null, 2)` in a
|
|
31
31
|
* single text block) so the LLM parses fields reliably. The stdio CLI
|
|
32
32
|
* (`invarn mcp serve`) keeps its formatted prose for interactive use.
|
|
33
|
+
*
|
|
34
|
+
* The tools' descriptions are served by Invarn: the factory returns at once
|
|
35
|
+
* and asks for them with the token in the background (one request), and each
|
|
36
|
+
* tool carries a neutral one-line loading placeholder until they arrive, or, when Invarn
|
|
37
|
+
* cannot be reached or refuses the token, a line that says what to do.
|
|
33
38
|
*/
|
|
34
39
|
export function createInvarnMcpServer(
|
|
35
40
|
options?: CreateInvarnMcpServerOptions,
|