agent-device 0.7.21 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -0
- package/dist/src/224.js +2 -0
- package/dist/src/274.js +1 -0
- package/dist/src/331.js +3 -0
- package/dist/src/bin.d.ts +1 -0
- package/dist/src/bin.js +65 -61
- package/dist/src/cli-client-commands.d.ts +8 -0
- package/dist/src/cli.d.ts +6 -0
- package/dist/src/client-normalizers.d.ts +21 -0
- package/dist/src/client-types.d.ts +267 -0
- package/dist/src/client.d.ts +5 -0
- package/dist/src/core/app-events.d.ts +8 -0
- package/dist/src/core/batch.d.ts +17 -0
- package/dist/src/core/capabilities.d.ts +3 -0
- package/dist/src/core/dispatch-payload.d.ts +1 -0
- package/dist/src/core/dispatch-resolve.d.ts +28 -0
- package/dist/src/core/dispatch-series.d.ts +7 -0
- package/dist/src/core/dispatch.d.ts +34 -0
- package/dist/src/core/open-target.d.ts +4 -0
- package/dist/src/core/settings-contract.d.ts +8 -0
- package/dist/src/daemon/action-utils.d.ts +3 -0
- package/dist/src/daemon/app-log-android.d.ts +4 -0
- package/dist/src/daemon/app-log-ios.d.ts +6 -0
- package/dist/src/daemon/app-log-process.d.ts +15 -0
- package/dist/src/daemon/app-log-stream.d.ts +19 -0
- package/dist/src/daemon/app-log.d.ts +28 -0
- package/dist/src/daemon/artifact-archive.d.ts +12 -0
- package/dist/src/daemon/artifact-download.d.ts +12 -0
- package/dist/src/daemon/artifact-materialization.d.ts +17 -0
- package/dist/src/daemon/artifact-registry.d.ts +12 -0
- package/dist/src/daemon/config.d.ts +16 -0
- package/dist/src/daemon/context.d.ts +22 -0
- package/dist/src/daemon/device-ready.d.ts +6 -0
- package/dist/src/daemon/handlers/find.d.ts +40 -0
- package/dist/src/daemon/handlers/install-source.d.ts +10 -0
- package/dist/src/daemon/handlers/interaction.d.ts +14 -0
- package/dist/src/daemon/handlers/lease.d.ts +8 -0
- package/dist/src/daemon/handlers/parse-utils.d.ts +3 -0
- package/dist/src/daemon/handlers/record-trace.d.ts +15 -0
- package/dist/src/daemon/handlers/session-replay-heal.d.ts +8 -0
- package/dist/src/daemon/handlers/session-replay-script.d.ts +3 -0
- package/dist/src/daemon/handlers/session.d.ts +67 -0
- package/dist/src/daemon/handlers/snapshot.d.ts +32 -0
- package/dist/src/daemon/http-server.d.ts +26 -0
- package/dist/src/daemon/is-predicates.d.ts +14 -0
- package/dist/src/daemon/lease-context.d.ts +9 -0
- package/dist/src/daemon/lease-registry.d.ts +63 -0
- package/dist/src/daemon/materialized-path-registry.d.ts +15 -0
- package/dist/src/daemon/network-log.d.ts +32 -0
- package/dist/src/daemon/request-cancel.d.ts +9 -0
- package/dist/src/daemon/request-lock-policy.d.ts +2 -0
- package/dist/src/daemon/request-router.d.ts +17 -0
- package/dist/src/daemon/runtime-hints.d.ts +19 -0
- package/dist/src/daemon/script-utils.d.ts +15 -0
- package/dist/src/daemon/scroll-planner.d.ts +12 -0
- package/dist/src/daemon/selectors.d.ts +65 -0
- package/dist/src/daemon/server-lifecycle.d.ts +23 -0
- package/dist/src/daemon/session-routing.d.ts +3 -0
- package/dist/src/daemon/session-selector.d.ts +10 -0
- package/dist/src/daemon/session-store.d.ts +32 -0
- package/dist/src/daemon/snapshot-diff.d.ts +20 -0
- package/dist/src/daemon/snapshot-processing.d.ts +8 -0
- package/dist/src/daemon/transport.d.ts +6 -0
- package/dist/src/daemon/types.d.ts +118 -0
- package/dist/src/daemon/upload-registry.d.ts +7 -0
- package/dist/src/daemon/upload.d.ts +5 -0
- package/dist/src/daemon-client.d.ts +40 -0
- package/dist/src/daemon.d.ts +1 -0
- package/dist/src/daemon.js +36 -36
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +1 -0
- package/dist/src/platforms/android/adb.d.ts +5 -0
- package/dist/src/platforms/android/app-lifecycle.d.ts +30 -0
- package/dist/src/platforms/android/device-input-state.d.ts +19 -0
- package/dist/src/platforms/android/devices.d.ts +22 -0
- package/dist/src/platforms/android/index.d.ts +7 -0
- package/dist/src/platforms/android/input-actions.d.ts +12 -0
- package/dist/src/platforms/android/install-artifact.d.ts +11 -0
- package/dist/src/platforms/android/manifest.d.ts +1 -0
- package/dist/src/platforms/android/notifications.d.ts +11 -0
- package/dist/src/platforms/android/open-target.d.ts +4 -0
- package/dist/src/platforms/android/settings.d.ts +3 -0
- package/dist/src/platforms/android/snapshot.d.ts +8 -0
- package/dist/src/platforms/android/ui-hierarchy.d.ts +21 -0
- package/dist/src/platforms/appearance.d.ts +2 -0
- package/dist/src/platforms/boot-diagnostics.d.ts +14 -0
- package/dist/src/platforms/install-source.d.ts +26 -0
- package/dist/src/platforms/ios/apps.d.ts +34 -0
- package/dist/src/platforms/ios/config.d.ts +9 -0
- package/dist/src/platforms/ios/devicectl.d.ts +13 -0
- package/dist/src/platforms/ios/devices.d.ts +39 -0
- package/dist/src/platforms/ios/ensure-simulator.d.ts +18 -0
- package/dist/src/platforms/ios/index.d.ts +3 -0
- package/dist/src/platforms/ios/install-artifact.d.ts +18 -0
- package/dist/src/platforms/ios/launch-diagnostics.d.ts +11 -0
- package/dist/src/platforms/ios/plist.d.ts +1 -0
- package/dist/src/platforms/ios/runner-client.d.ts +36 -0
- package/dist/src/platforms/ios/runner-errors.d.ts +20 -0
- package/dist/src/platforms/ios/runner-session.d.ts +25 -0
- package/dist/src/platforms/ios/runner-transport.d.ts +10 -0
- package/dist/src/platforms/ios/runner-xctestrun.d.ts +18 -0
- package/dist/src/platforms/ios/screenshot.d.ts +13 -0
- package/dist/src/platforms/ios/simctl.d.ts +7 -0
- package/dist/src/platforms/ios/simulator.d.ts +11 -0
- package/dist/src/platforms/permission-utils.d.ts +9 -0
- package/dist/src/upload-client.d.ts +7 -0
- package/dist/src/utils/args.d.ts +27 -0
- package/dist/src/utils/cli-config.d.ts +9 -0
- package/dist/src/utils/cli-option-schema.d.ts +19 -0
- package/dist/src/utils/cli-options.d.ts +13 -0
- package/dist/src/utils/command-schema.d.ts +98 -0
- package/dist/src/utils/device-isolation.d.ts +3 -0
- package/dist/src/utils/device.d.ts +27 -0
- package/dist/src/utils/diagnostics.d.ts +30 -0
- package/dist/src/utils/errors.d.ts +26 -0
- package/dist/src/utils/exec.d.ts +32 -0
- package/dist/src/utils/finders.d.ts +12 -0
- package/dist/src/utils/interactive.d.ts +1 -0
- package/dist/src/utils/interactors.d.ts +31 -0
- package/dist/src/utils/json-input.d.ts +1 -0
- package/dist/src/utils/keyed-lock.d.ts +1 -0
- package/dist/src/utils/output.d.ts +25 -0
- package/dist/src/utils/payload-input.d.ts +12 -0
- package/dist/src/utils/process-identity.d.ts +11 -0
- package/dist/src/utils/retry.d.ts +54 -0
- package/dist/src/utils/session-binding.d.ts +18 -0
- package/dist/src/utils/snapshot-lines.d.ts +12 -0
- package/dist/src/utils/snapshot.d.ts +42 -0
- package/dist/src/utils/timeouts.d.ts +3 -0
- package/dist/src/utils/version.d.ts +2 -0
- package/package.json +9 -1
- package/skills/agent-device/SKILL.md +36 -0
- package/skills/agent-device/references/remote-tenancy.md +11 -0
- package/skills/agent-device/references/session-management.md +37 -1
- package/dist/src/678.js +0 -3
package/dist/src/678.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{AsyncLocalStorage as e}from"node:async_hooks";import t from"node:crypto";import r,{promises as n}from"node:fs";import o from"node:os";import i from"node:path";import{URL as a,fileURLToPath as s,pathToFileURL as c}from"node:url";import{spawn as l,spawnSync as d}from"node:child_process";let u=new e,f=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key)/i,m=/(bearer\s+[a-z0-9._-]+|(?:api[_-]?key|token|secret|password)\s*[=:]\s*\S+)/i;function p(){return t.randomBytes(8).toString("hex")}async function h(e,r){let n={...e,diagnosticId:`${Date.now().toString(36)}-${t.randomBytes(4).toString("hex")}`,events:[]};return await u.run(n,r)}function g(){let e=u.getStore();return e?{diagnosticId:e.diagnosticId,requestId:e.requestId,session:e.session,command:e.command,debug:e.debug}:{}}function w(e){let t=u.getStore();if(!t)return;let n={ts:new Date().toISOString(),level:e.level??"info",phase:e.phase,session:t.session,requestId:t.requestId,command:t.command,durationMs:e.durationMs,data:e.data?v(e.data):void 0};if(t.events.push(n),!t.debug)return;let o=`[agent-device][diag] ${JSON.stringify(n)}
|
|
2
|
-
`;try{t.logPath&&r.appendFile(t.logPath,o,()=>{}),t.traceLogPath&&r.appendFile(t.traceLogPath,o,()=>{}),t.logPath||t.traceLogPath||process.stderr.write(o)}catch{}}async function S(e,t,r){let n=Date.now();try{let o=await t();return w({level:"info",phase:e,durationMs:Date.now()-n,data:r}),o}catch(t){throw w({level:"error",phase:e,durationMs:Date.now()-n,data:{...r??{},error:t instanceof Error?t.message:String(t)}}),t}}function y(e={}){let t=u.getStore();if(!t||!e.force&&!t.debug||0===t.events.length)return null;try{let e=(t.session??"default").replace(/[^a-zA-Z0-9._-]/g,"_"),n=new Date().toISOString().slice(0,10),a=i.join(o.homedir(),".agent-device","logs",e,n);r.mkdirSync(a,{recursive:!0});let s=new Date().toISOString().replace(/[:.]/g,"-"),c=i.join(a,`${s}-${t.diagnosticId}.ndjson`),l=t.events.map(e=>JSON.stringify(v(e)));return r.writeFileSync(c,`${l.join("\n")}
|
|
3
|
-
`),t.events=[],c}catch{return null}}function v(e){return function e(t,r,n){if(null==t)return t;if("string"==typeof t){var o=t,i=n;let e=o.trim();if(!e)return o;if(i&&f.test(i)||m.test(e))return"[REDACTED]";let r=function(e){try{let t=new URL(e);return t.search&&(t.search="?REDACTED"),(t.username||t.password)&&(t.username="REDACTED",t.password="REDACTED"),t.toString()}catch{return null}}(e);return r||(e.length>400?`${e.slice(0,200)}...<truncated>`:e)}if("object"!=typeof t)return t;if(r.has(t))return"[Circular]";if(r.add(t),Array.isArray(t))return t.map(t=>e(t,r));let a={};for(let[n,o]of Object.entries(t)){if(f.test(n)){a[n]="[REDACTED]";continue}a[n]=e(o,r,n)}return a}(e,new WeakSet)}class A extends Error{code;details;cause;constructor(e,t,r,n){super(t),this.code=e,this.details=r,this.cause=n}}function I(e){return e instanceof A?e:e instanceof Error?new A("UNKNOWN",e.message,void 0,e):new A("UNKNOWN","Unknown error",{err:e})}function E(e,t={}){let r=I(e),n=r.details?v(r.details):void 0,o=n&&"string"==typeof n.hint?n.hint:void 0,i=(n&&"string"==typeof n.diagnosticId?n.diagnosticId:void 0)??t.diagnosticId,a=(n&&"string"==typeof n.logPath?n.logPath:void 0)??t.logPath,s=o??function(e){switch(e){case"INVALID_ARGS":return"Check command arguments and run --help for usage examples.";case"SESSION_NOT_FOUND":return"Run open first or pass an explicit device selector.";case"TOOL_MISSING":return"Install required platform tooling and ensure it is available in PATH.";case"DEVICE_NOT_FOUND":return"Verify the target device is booted/connected and selectors match.";case"UNSUPPORTED_OPERATION":return"This command is not available for the selected platform/device.";case"COMMAND_FAILED":default:return"Retry with --debug and inspect diagnostics log for details.";case"UNAUTHORIZED":return"Refresh daemon metadata and retry the command."}}(r.code),c=function(e){if(!e)return;let t={...e};return delete t.hint,delete t.diagnosticId,delete t.logPath,Object.keys(t).length>0?t:void 0}(n),l=function(e,t,r){if("COMMAND_FAILED"!==e||r?.processExitError!==!0)return t;let n=function(e){let t=[/^an error was encountered processing the command/i,/^underlying error\b/i,/^simulator device failed to complete the requested operation/i];for(let r of e.split("\n")){let e=r.trim();if(e&&!t.some(t=>t.test(e)))return e.length>200?`${e.slice(0,200)}...`:e}return null}("string"==typeof r?.stderr?r.stderr:"");return n||t}(r.code,r.message,n);return{code:r.code,message:l,hint:s,diagnosticId:i,logPath:a,details:c}}let D="<wifi|airplane|location> <on|off>",$="appearance <light|dark|toggle>",b="faceid <match|nonmatch|enroll|unenroll>",N="touchid <match|nonmatch|enroll|unenroll>",_="fingerprint <match|nonmatch>",M="permission <grant|deny|reset> <camera|microphone|photos|contacts|contacts-limited|notifications|calendar|location|location-always|media-library|motion|reminders|siri> [full|limited]",L=`settings ${D} | settings ${$} | settings ${b} | settings ${N} | settings ${_} | settings ${M}`,T=`settings requires ${D}, ${$}, ${b}, ${N}, ${_}, or ${M}`;function O(e){let t=[],r=[];for(let n of e){let e=n.depth??0;for(;t.length>0&&e<=t[t.length-1];)t.pop();let o=n.label?.trim()||n.value?.trim()||n.identifier?.trim()||"",i=P(n.type??"Element"),a="group"===i&&!o;a&&t.push(e);let s=a?e:Math.max(0,e-t.length);r.push({node:n,depth:s,type:i,text:x(n,s,a,i)})}return r}function x(e,t,r,n){let o=n??P(e.type??"Element"),i=C(e,o),a=" ".repeat(t),s=e.ref?`@${e.ref}`:"",c=[!1===e.enabled?"disabled":null].filter(Boolean).join(", "),l=c?` [${c}]`:"",d=i?` "${i}"`:"";return r?`${a}${s} [${o}]${l}`.trimEnd():`${a}${s} [${o}]${d}${l}`.trimEnd()}function C(e,t){var r,n;let o=e.label?.trim(),i=e.value?.trim();if("text-field"===(r=t)||"text-view"===r||"search"===r){if(i)return i;if(o)return o}else if(o)return o;if(i)return i;let a=e.identifier?.trim();return!a||(n=a,/^[\w.]+:id\/[\w.-]+$/i.test(n)&&("group"===t||"image"===t||"list"===t||"collection"===t))?"":a}function P(e){let t=e.replace(/XCUIElementType/gi,"").toLowerCase(),r=e.includes(".")&&(e.startsWith("android.")||e.startsWith("androidx.")||e.startsWith("com."));switch(t.includes(".")&&(t=t.replace(/^android\.widget\./,"").replace(/^android\.view\./,"").replace(/^android\.webkit\./,"").replace(/^androidx\./,"").replace(/^com\.google\.android\./,"").replace(/^com\.android\./,"")),t){case"application":return"application";case"navigationbar":return"navigation-bar";case"tabbar":return"tab-bar";case"button":case"imagebutton":return"button";case"link":return"link";case"cell":return"cell";case"statictext":case"checkedtextview":return"text";case"textfield":case"edittext":return"text-field";case"textview":return r?"text":"text-view";case"textarea":return"text-view";case"switch":return"switch";case"slider":return"slider";case"image":case"imageview":return"image";case"webview":return"webview";case"framelayout":case"linearlayout":case"relativelayout":case"constraintlayout":case"viewgroup":case"view":case"group":return"group";case"listview":case"recyclerview":return"list";case"collectionview":return"collection";case"searchfield":return"search";case"segmentedcontrol":return"segmented-control";case"window":return"window";case"checkbox":return"checkbox";case"radio":return"radio";case"menuitem":return"menu-item";case"toolbar":return"toolbar";case"scrollarea":case"scrollview":case"nestedscrollview":return"scroll-area";case"table":return"table";default:return t||"element"}}function R(){try{let e=k();return JSON.parse(r.readFileSync(i.join(e,"package.json"),"utf8")).version??"0.0.0"}catch{return"0.0.0"}}function k(){let e=i.dirname(s(import.meta.url)),t=e;for(let e=0;e<6;e+=1){let e=i.join(t,"package.json");if(r.existsSync(e))return t;t=i.dirname(t)}return e}async function F(e,t,r={}){return new Promise((n,o)=>{let i=l(e,t,{cwd:r.cwd,env:r.env,stdio:["pipe","pipe","pipe"],detached:r.detached}),a="",s=r.binaryStdout?Buffer.alloc(0):void 0,c="",d=!1,u=q(r.timeoutMs),f=u?setTimeout(()=>{d=!0,i.kill("SIGKILL")},u):null;r.binaryStdout||i.stdout.setEncoding("utf8"),i.stderr.setEncoding("utf8"),void 0!==r.stdin&&i.stdin.write(r.stdin),i.stdin.end(),i.stdout.on("data",e=>{r.binaryStdout?s=Buffer.concat([s??Buffer.alloc(0),Buffer.isBuffer(e)?e:Buffer.from(e)]):a+=e}),i.stderr.on("data",e=>{c+=e}),i.on("error",r=>{(f&&clearTimeout(f),"ENOENT"===r.code)?o(new A("TOOL_MISSING",`${e} not found in PATH`,{cmd:e},r)):o(new A("COMMAND_FAILED",`Failed to run ${e}`,{cmd:e,args:t},r))}),i.on("close",i=>{f&&clearTimeout(f);let l=i??1;d&&u?o(new A("COMMAND_FAILED",`${e} timed out after ${u}ms`,{cmd:e,args:t,stdout:a,stderr:c,exitCode:l,timeoutMs:u})):0===l||r.allowFailure?n({stdout:a,stderr:c,exitCode:l,stdoutBuffer:s}):o(new A("COMMAND_FAILED",`${e} exited with code ${l}`,{cmd:e,args:t,stdout:a,stderr:c,exitCode:l,processExitError:!0}))})})}async function B(e){try{var t;let{shell:r,args:n}=(t=e,"win32"===process.platform?{shell:"cmd.exe",args:["/c","where",t]}:{shell:"bash",args:["-lc",`command -v ${t}`]}),o=await F(r,n,{allowFailure:!0});return 0===o.exitCode&&o.stdout.trim().length>0}catch{return!1}}function j(e,t,r={}){let n=d(e,t,{cwd:r.cwd,env:r.env,stdio:["pipe","pipe","pipe"],encoding:r.binaryStdout?void 0:"utf8",input:r.stdin,timeout:q(r.timeoutMs)});if(n.error){let o=n.error.code;if("ETIMEDOUT"===o)throw new A("COMMAND_FAILED",`${e} timed out after ${q(r.timeoutMs)}ms`,{cmd:e,args:t,timeoutMs:q(r.timeoutMs)},n.error);if("ENOENT"===o)throw new A("TOOL_MISSING",`${e} not found in PATH`,{cmd:e},n.error);throw new A("COMMAND_FAILED",`Failed to run ${e}`,{cmd:e,args:t},n.error)}let o=r.binaryStdout?Buffer.isBuffer(n.stdout)?n.stdout:Buffer.from(n.stdout??""):void 0,i=r.binaryStdout?"":"string"==typeof n.stdout?n.stdout:(n.stdout??"").toString(),a="string"==typeof n.stderr?n.stderr:(n.stderr??"").toString(),s=n.status??1;if(0!==s&&!r.allowFailure)throw new A("COMMAND_FAILED",`${e} exited with code ${s}`,{cmd:e,args:t,stdout:i,stderr:a,exitCode:s,processExitError:!0});return{stdout:i,stderr:a,exitCode:s,stdoutBuffer:o}}function G(e,t,r={}){l(e,t,{cwd:r.cwd,env:r.env,stdio:"ignore",detached:!0}).unref()}async function U(e,t,r={}){return new Promise((n,o)=>{let i=l(e,t,{cwd:r.cwd,env:r.env,stdio:["pipe","pipe","pipe"],detached:r.detached});r.onSpawn?.(i);let a="",s="",c=r.binaryStdout?Buffer.alloc(0):void 0;r.binaryStdout||i.stdout.setEncoding("utf8"),i.stderr.setEncoding("utf8"),void 0!==r.stdin&&i.stdin.write(r.stdin),i.stdin.end(),i.stdout.on("data",e=>{if(r.binaryStdout){c=Buffer.concat([c??Buffer.alloc(0),Buffer.isBuffer(e)?e:Buffer.from(e)]);return}let t=String(e);a+=t,r.onStdoutChunk?.(t)}),i.stderr.on("data",e=>{let t=String(e);s+=t,r.onStderrChunk?.(t)}),i.on("error",r=>{"ENOENT"===r.code?o(new A("TOOL_MISSING",`${e} not found in PATH`,{cmd:e},r)):o(new A("COMMAND_FAILED",`Failed to run ${e}`,{cmd:e,args:t},r))}),i.on("close",i=>{let l=i??1;0===l||r.allowFailure?n({stdout:a,stderr:s,exitCode:l,stdoutBuffer:c}):o(new A("COMMAND_FAILED",`${e} exited with code ${l}`,{cmd:e,args:t,stdout:a,stderr:s,exitCode:l,processExitError:!0}))})})}function V(e,t,r={}){let n=l(e,t,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"],detached:r.detached}),o="",i="";n.stdout.setEncoding("utf8"),n.stderr.setEncoding("utf8"),n.stdout.on("data",e=>{o+=e}),n.stderr.on("data",e=>{i+=e});let a=new Promise((a,s)=>{n.on("error",r=>{"ENOENT"===r.code?s(new A("TOOL_MISSING",`${e} not found in PATH`,{cmd:e},r)):s(new A("COMMAND_FAILED",`Failed to run ${e}`,{cmd:e,args:t},r))}),n.on("close",n=>{let c=n??1;0===c||r.allowFailure?a({stdout:o,stderr:i,exitCode:c}):s(new A("COMMAND_FAILED",`${e} exited with code ${c}`,{cmd:e,args:t,stdout:o,stderr:i,exitCode:c,processExitError:!0}))})});return{child:n,wait:a}}function q(e){if(!Number.isFinite(e))return;let t=Math.floor(e);if(!(t<=0))return t}let H=[/(^|[\/\s"'=])dist\/src\/daemon\.js($|[\s"'])/,/(^|[\/\s"'=])src\/daemon\.ts($|[\s"'])/];function z(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}}function J(e){if(!Number.isInteger(e)||e<=0)return null;try{let t=j("ps",["-p",String(e),"-o","lstart="],{allowFailure:!0,timeoutMs:1e3});if(0!==t.exitCode)return null;let r=t.stdout.trim();return r.length>0?r:null}catch{return null}}function W(e){if(!Number.isInteger(e)||e<=0)return null;try{let t=j("ps",["-p",String(e),"-o","command="],{allowFailure:!0,timeoutMs:1e3});if(0!==t.exitCode)return null;let r=t.stdout.trim();return r.length>0?r:null}catch{return null}}function K(e,t){let r;if(!z(e))return!1;if(t){let r=J(e);if(!r||r!==t)return!1}let n=W(e);return!!n&&!!(r=n.toLowerCase().replaceAll("\\","/")).includes("agent-device")&&H.some(e=>e.test(r))}function Z(e,t){try{return process.kill(e,t),!0}catch(t){let e=t.code;if("ESRCH"===e||"EPERM"===e)return!1;throw t}}async function X(e,t){if(!z(e))return!0;let r=Date.now();for(;Date.now()-r<t;)if(await new Promise(e=>setTimeout(e,50)),!z(e))return!0;return!z(e)}async function Q(e,t){!K(e,t.expectedStartTime)||!Z(e,"SIGTERM")||await X(e,t.termTimeoutMs)||Z(e,"SIGKILL")&&await X(e,t.killTimeoutMs)}function Y(e){let t,r=(t=(e??"").trim())?"~"===t?o.homedir():t.startsWith("~/")?i.join(o.homedir(),t.slice(2)):i.resolve(t):i.join(o.homedir(),".agent-device");return{baseDir:r,infoPath:i.join(r,"daemon.json"),lockPath:i.join(r,"daemon.lock"),logPath:i.join(r,"daemon.log"),sessionsDir:i.join(r,"sessions")}}function ee(e){let t=(e??"").trim().toLowerCase();return"http"===t?"http":"dual"===t?"dual":"socket"}function et(e){let t=(e??"").trim().toLowerCase();return"auto"===t?"auto":"socket"===t?"socket":"http"===t?"http":"auto"}function er(e){return"tenant"===(e??"").trim().toLowerCase()?"tenant":"none"}function en(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}let eo=100,ei=new Set(["batch","replay"]);function ea(e){let t;try{t=JSON.parse(e)}catch{throw new A("INVALID_ARGS","Batch steps must be valid JSON.")}if(!Array.isArray(t)||0===t.length)throw new A("INVALID_ARGS","Batch steps must be a non-empty JSON array.");return t}function es(e,t){if(!Array.isArray(e)||0===e.length)throw new A("INVALID_ARGS","batch requires a non-empty batchSteps array.");if(e.length>t)throw new A("INVALID_ARGS",`batch has ${e.length} steps; max allowed is ${t}.`);let r=[];for(let t=0;t<e.length;t+=1){let n=e[t];if(!n||"object"!=typeof n)throw new A("INVALID_ARGS",`Invalid batch step at index ${t}.`);let o="string"==typeof n.command?n.command.trim().toLowerCase():"";if(!o)throw new A("INVALID_ARGS",`Batch step ${t+1} requires command.`);if(ei.has(o))throw new A("INVALID_ARGS",`Batch step ${t+1} cannot run ${o}.`);if(void 0!==n.positionals&&!Array.isArray(n.positionals))throw new A("INVALID_ARGS",`Batch step ${t+1} positionals must be an array.`);let i=n.positionals??[];if(i.some(e=>"string"!=typeof e))throw new A("INVALID_ARGS",`Batch step ${t+1} positionals must contain only strings.`);if(void 0!==n.flags&&("object"!=typeof n.flags||Array.isArray(n.flags)||!n.flags))throw new A("INVALID_ARGS",`Batch step ${t+1} flags must be an object.`);r.push({command:o,positionals:i,flags:n.flags??{}})}return r}export{default as node_net}from"node:net";export{default as node_http}from"node:http";export{A as AppError,eo as DEFAULT_BATCH_MAX_STEPS,T as SETTINGS_INVALID_ARGS_MESSAGE,L as SETTINGS_USAGE_OVERRIDE,I as asAppError,O as buildSnapshotDisplayLines,p as createRequestId,C as displayLabel,w as emitDiagnostic,a as external_node_url_URL,s as fileURLToPath,k as findProjectRoot,y as flushDiagnosticsToSessionFile,P as formatRole,x as formatSnapshotLine,g as getDiagnosticsMeta,K as isAgentDeviceDaemonProcess,z as isProcessAlive,t as node_crypto,r as node_fs,o as node_os,i as node_path,E as normalizeError,en as normalizeTenantId,ea as parseBatchStepsJson,c as pathToFileURL,n as promises,W as readProcessCommand,J as readProcessStartTime,R as readVersion,Y as resolveDaemonPaths,ee as resolveDaemonServerMode,et as resolveDaemonTransportPreference,er as resolveSessionIsolationMode,F as runCmd,V as runCmdBackground,G as runCmdDetached,U as runCmdStreaming,j as runCmdSync,l as spawn,Q as stopProcessForTakeover,es as validateAndNormalizeBatchSteps,B as whichCmd,S as withDiagnosticTimer,h as withDiagnosticsScope};
|