shadow-claw 1.43.0 → 1.44.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.
Files changed (104) hide show
  1. package/.well-known/mcp/server-card.json +1 -1
  2. package/.well-known/mcp.json +1 -1
  3. package/dist/cli/chunk--nlZNQrZ2.js +1 -0
  4. package/dist/cli/{chunk-CbhVal4Q.js → chunk-2IASlfOI.js} +1 -1
  5. package/dist/cli/chunk-2zUw4dTY.js +1 -0
  6. package/dist/cli/{chunk-C_vLt0YP2.js → chunk-B2WxN9-12.js} +11 -11
  7. package/dist/cli/{chunk-Cweo3Jpw.js → chunk-B5hVBRV-.js} +1 -1
  8. package/dist/cli/chunk-B7vuMvBg.js +1 -0
  9. package/dist/cli/{chunk-C9b5a_Uy.js → chunk-B9Fx2rWZ.js} +1 -1
  10. package/dist/cli/chunk-BChoeGdY2.js +1 -0
  11. package/dist/cli/{chunk-CcWCWTJe.js → chunk-BJmbRsHN.js} +1 -1
  12. package/dist/cli/{chunk-BN0tqRNn.js → chunk-BQyGyg86.js} +1 -1
  13. package/dist/cli/chunk-B_FQjokZ.js +1 -0
  14. package/dist/cli/chunk-BaAL1yLC.js +1 -0
  15. package/dist/cli/{chunk-L61wFp4H2.js → chunk-BaSEVtTB2.js} +1 -1
  16. package/dist/cli/chunk-BckYclkX2.js +1 -0
  17. package/dist/cli/chunk-Bh0Uxjld.js +1 -0
  18. package/dist/cli/{chunk-D57WTK9e2.js → chunk-By9miObI2.js} +2 -2
  19. package/dist/cli/chunk-C0cwwqX52.js +1 -0
  20. package/dist/cli/{chunk-DJ1pR9f82.js → chunk-C0vTb5Ur2.js} +1 -1
  21. package/dist/cli/{chunk-BBCAo_6N2.js → chunk-C3iVPEyi2.js} +1 -1
  22. package/dist/cli/{chunk-D3NWfUvq2.js → chunk-CJpZQ6NS2.js} +1 -1
  23. package/dist/cli/{chunk-Dhh0lHO6.js → chunk-CKksk-lA.js} +1 -1
  24. package/dist/cli/chunk-CKm7-SCu.js +1 -0
  25. package/dist/cli/{chunk-BPcMKhha2.js → chunk-CLKlXl_32.js} +1 -1
  26. package/dist/cli/{chunk-rvRQOKXp.js → chunk-CQeDQc3C.js} +1 -1
  27. package/dist/cli/{chunk-DYGlH-un.js → chunk-CSMegkz6.js} +1 -1
  28. package/dist/cli/{chunk-B1TEXFG-2.js → chunk-CTnzEqW82.js} +1 -1
  29. package/dist/cli/chunk-CiHV_7H62.js +1 -0
  30. package/dist/cli/{chunk-D9F645K62.js → chunk-CimeIb1j2.js} +1 -1
  31. package/dist/cli/{chunk-D-lQkf5X.js → chunk-CjhfhiNM.js} +1 -1
  32. package/dist/cli/{chunk-BTe1dZD0.js → chunk-ClBaEe8W.js} +1 -1
  33. package/dist/cli/{chunk-BmDywCXL.js → chunk-Cvv2Fuue.js} +1 -1
  34. package/dist/cli/{chunk-DcYfXgpg2.js → chunk-Cx8_qww-2.js} +1 -1
  35. package/dist/cli/{chunk-CvKmsXS02.js → chunk-D0UlHLhC2.js} +1 -1
  36. package/dist/cli/chunk-D0jQVYRk.js +5 -0
  37. package/dist/cli/chunk-D0sHV-Z82.js +1 -0
  38. package/dist/cli/{chunk-DeMPVxlQ.js → chunk-D2FGpjOO.js} +1 -1
  39. package/dist/cli/chunk-D3cH54jW.js +1 -0
  40. package/dist/cli/{chunk-Di4LxQG-2.js → chunk-D9dG7jP92.js} +1 -1
  41. package/dist/cli/{chunk-qTCLBos1.js → chunk-DKw-oTLT.js} +1 -1
  42. package/dist/cli/{chunk-BHnjkiBp2.js → chunk-DOkl85Te2.js} +1 -1
  43. package/dist/cli/{chunk-XS0fMLl1.js → chunk-DPySd-KC.js} +1 -1
  44. package/dist/cli/{chunk-BkTdHRZ6.js → chunk-DSleWP3c.js} +1 -1
  45. package/dist/cli/chunk-DjKQO7aV.js +1 -0
  46. package/dist/cli/{chunk-CA8_jPwF2.js → chunk-Dk750_9R2.js} +11 -11
  47. package/dist/cli/{chunk-nsFY_QXf.js → chunk-Do2xLVwC.js} +1 -1
  48. package/dist/cli/{chunk-DcMyZrds.js → chunk-DoVkBeQv.js} +1 -1
  49. package/dist/cli/chunk-DrB5Gd6y2.js +1 -0
  50. package/dist/cli/chunk-DwKjgkq92.js +1 -0
  51. package/dist/cli/{chunk-DJU6hg1K2.js → chunk-DxZ6DcRo2.js} +63 -63
  52. package/dist/cli/chunk-IGlHHKOH.js +1 -0
  53. package/dist/cli/{chunk-CpoiOFRV.js → chunk-NclDuGcY.js} +1 -1
  54. package/dist/cli/{chunk-CeFei3f_2.js → chunk-TO5qzf3J2.js} +303 -303
  55. package/dist/cli/{chunk-swUMQyE2.js → chunk-TYwbIsK9.js} +9 -9
  56. package/dist/cli/{chunk-CWs_KY8q.js → chunk-Xz02ooJU.js} +1 -1
  57. package/dist/cli/{chunk-DfKXmvNq.js → chunk-e4ARaRhY.js} +1 -1
  58. package/dist/cli/{chunk-DuTr5h_-.js → chunk-g3j2rSPJ.js} +9 -9
  59. package/dist/cli/{chunk-JMI-k9_C.js → chunk-j0KG-6x9.js} +1 -1
  60. package/dist/cli/chunk-ud_DUk_f2.js +1 -0
  61. package/dist/cli/{chunk-BzqpsHxW2.js → chunk-zUKEZHmz2.js} +1 -1
  62. package/dist/cli/cli.js +2 -2
  63. package/dist/headless-agent.js +10 -10
  64. package/dist/public/.well-known/mcp/server-card.json +1 -1
  65. package/dist/public/.well-known/mcp.json +1 -1
  66. package/dist/public/docs/example/article/index.html +1 -1
  67. package/dist/public/docs/publishing/index.html +1 -1
  68. package/dist/public/docs/skill-creator/index.html +1 -1
  69. package/dist/public/docs/subsystems/cli.md +4 -0
  70. package/dist/public/index.html +1 -1
  71. package/dist/public/main/index.html +1 -1
  72. package/dist/public/main/memory/index.html +1 -1
  73. package/dist/public/service-worker.js +1 -1
  74. package/dist/server.js +761 -761
  75. package/package.json +1 -1
  76. package/src/cli/cli.ts +5 -1
  77. package/src/cli/commands/agent.test.ts +97 -4
  78. package/src/cli/commands/agent.ts +28 -2
  79. package/src/db/sqlite/openSqliteDatabase.test.ts +24 -0
  80. package/src/db/sqlite/openSqliteDatabase.ts +8 -1
  81. package/dist/cli/chunk-0WvYaMdi.js +0 -1
  82. package/dist/cli/chunk-BXNdnbwK.js +0 -1
  83. package/dist/cli/chunk-BlNmgi3c2.js +0 -1
  84. package/dist/cli/chunk-C7irE8d42.js +0 -1
  85. package/dist/cli/chunk-Cbbk_aex2.js +0 -1
  86. package/dist/cli/chunk-CdNTakxH2.js +0 -1
  87. package/dist/cli/chunk-Cqd6ZDkT.js +0 -1
  88. package/dist/cli/chunk-CvoMdhST2.js +0 -1
  89. package/dist/cli/chunk-DCRmnjTH.js +0 -1
  90. package/dist/cli/chunk-DFLqhyP_.js +0 -5
  91. package/dist/cli/chunk-DLUNHJGc.js +0 -1
  92. package/dist/cli/chunk-DfwnnpVo.js +0 -1
  93. package/dist/cli/chunk-DhJvrfsM.js +0 -1
  94. package/dist/cli/chunk-DhQQhCTL2.js +0 -1
  95. package/dist/cli/chunk-Drx4e34U.js +0 -1
  96. package/dist/cli/chunk-DwEMut0N.js +0 -1
  97. package/dist/cli/chunk-STsbFGCh2.js +0 -1
  98. /package/dist/cli/{chunk-Bb_85Mew.js → chunk-Bb_85Mew2.js} +0 -0
  99. /package/dist/cli/{chunk-CrWRlKmP.js → chunk-CrWRlKmP2.js} +0 -0
  100. /package/dist/cli/{chunk-D2vZJXHH2.js → chunk-D2vZJXHH.js} +0 -0
  101. /package/dist/cli/{chunk-D5U9WJ9X.js → chunk-D5U9WJ9X2.js} +0 -0
  102. /package/dist/cli/{chunk-DV5sRVN1.js → chunk-DV5sRVN12.js} +0 -0
  103. /package/dist/cli/{chunk-DXSwo4q72.js → chunk-DXSwo4q7.js} +0 -0
  104. /package/dist/cli/{chunk-Dv5oFrVy2.js → chunk-Dv5oFrVy.js} +0 -0
@@ -1,4 +1,4 @@
1
- import{i as e}from"./chunk-DcMyZrds.js";import{t}from"./chunk-CpoiOFRV.js";import{t as n}from"./chunk-JMI-k9_C.js";import r from"node:fs";import i from"node:path";import a from"node:process";import{access as o,constants as s,mkdir as c,mkdtemp as l,readFile as u,writeFile as d}from"node:fs/promises";import{tmpdir as f}from"node:os";import p from"node:readline/promises";import m from"node:tty";function h(){let e=a.emitWarning;if(!e||e.__suppressed)return;let t=function(t,...n){if(!(typeof t==`string`&&(n[0]===`ExperimentalWarning`||t.includes(`ExperimentalWarning`)||t.includes(`SQLite`)))&&!(t&&typeof t==`object`&&(t.name===`ExperimentalWarning`||typeof t.message==`string`&&t.message.includes(`SQLite`))))return e.call(a,t,...n)};t.__suppressed=!0,a.emitWarning=t}h();const g=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function _(e){try{return await o(e,s.F_OK),!0}catch{return!1}}async function v(e,t){let n=[];if(e&&n.push(i.resolve(e)),t){let e=i.resolve(t);n.includes(e)||n.push(e)}if(e&&i.basename(i.resolve(e))===`.cache`){let t=i.dirname(i.resolve(e));n.includes(t)||n.push(t)}for(let e of n)for(let t of g){let n=i.join(e,t);if(await _(n))try{let e=await u(n,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:n,config:t}}catch{}}return null}function y(){return i.join(f(),`shadow-claw`)}function b(e){let t=i.resolve(e||a.cwd()),n=[i.join(t,`shadow-claw-config.json`),i.join(t,`shadow-claw.config.json`),i.join(t,`shadowclaw.config.json`),i.join(t,`pages`,`shadow-claw-config.json`),i.join(t,`pages`,`shadow-claw.config.json`),i.join(t,`site-config.json`),i.join(t,`pages`,`site-config.json`)];for(let e of n)if(r.existsSync(e))try{let n=r.readFileSync(e,`utf8`),a=JSON.parse(n);if(a&&typeof a.cacheDir==`string`&&a.cacheDir.trim())return i.resolve(t,a.cacheDir.trim());if(a&&a.server&&typeof a.server.cacheDir==`string`&&a.server.cacheDir.trim())return i.resolve(t,a.server.cacheDir.trim())}catch{}return null}function x(e,t=`.cache`){let n=i.resolve(e||a.cwd()),o=i.join(n,t),s=i.join(o,`database`),c=[o,i.join(o,`control-token.json`),i.join(o,`cli-peer-id`),s,i.join(s,`clients.db`),i.join(s,`agent.db`),i.join(s,`scheduled-tasks.db`),i.join(s,`push-subscriptions.db`),i.join(n,`database`,`clients.db`),i.join(n,`database`,`agent.db`)];for(let e of c)if(r.existsSync(e))return!0;return!1}async function S({contentRoot:e,stdin:t=a.stdin,stdout:n=a.stdout,onExit:o=e=>a.exit(e)}={}){let s=i.resolve(e||a.cwd()),c=i.join(s,`.cache`),l=y(),u=t,d=n,f=!1,h=null;if(t===a.stdin&&!a.stdin.isTTY&&!a.env.CI&&(a.stderr.isTTY||a.stdout.isTTY))try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;h=r.openSync(e,`r`),u=new m.ReadStream(h),d=a.stderr.isTTY?a.stderr:a.stdout,f=!0}catch{try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;u=r.createReadStream(e),d=a.stderr.isTTY?a.stderr:a.stdout,f=!0}catch{}}let g=p.createInterface({input:u,output:d}),_=!1,v=()=>{if(!_){_=!0,d.write(`
1
+ import{i as e}from"./chunk-ClBaEe8W.js";import{t}from"./chunk-BQyGyg86.js";import{t as n}from"./chunk-j0KG-6x9.js";import r from"node:fs";import i from"node:path";import a from"node:process";import{access as o,constants as s,mkdir as c,mkdtemp as l,readFile as u,writeFile as d}from"node:fs/promises";import{tmpdir as f}from"node:os";import p from"node:readline/promises";import m from"node:tty";function h(){let e=a.emitWarning;if(!e||e.__suppressed)return;let t=function(t,...n){if(!(typeof t==`string`&&(n[0]===`ExperimentalWarning`||t.includes(`ExperimentalWarning`)||t.includes(`SQLite`)))&&!(t&&typeof t==`object`&&(t.name===`ExperimentalWarning`||typeof t.message==`string`&&t.message.includes(`SQLite`))))return e.call(a,t,...n)};t.__suppressed=!0,a.emitWarning=t}h();const g=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function _(e){try{return await o(e,s.F_OK),!0}catch{return!1}}async function v(e,t){let n=[];if(e&&n.push(i.resolve(e)),t){let e=i.resolve(t);n.includes(e)||n.push(e)}if(e&&i.basename(i.resolve(e))===`.cache`){let t=i.dirname(i.resolve(e));n.includes(t)||n.push(t)}for(let e of n)for(let t of g){let n=i.join(e,t);if(await _(n))try{let e=await u(n,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:n,config:t}}catch{}}return null}function y(){return i.join(f(),`shadow-claw`)}function b(e){let t=i.resolve(e||a.cwd()),n=[i.join(t,`shadow-claw-config.json`),i.join(t,`shadow-claw.config.json`),i.join(t,`shadowclaw.config.json`),i.join(t,`pages`,`shadow-claw-config.json`),i.join(t,`pages`,`shadow-claw.config.json`),i.join(t,`site-config.json`),i.join(t,`pages`,`site-config.json`)];for(let e of n)if(r.existsSync(e))try{let n=r.readFileSync(e,`utf8`),a=JSON.parse(n);if(a&&typeof a.cacheDir==`string`&&a.cacheDir.trim())return i.resolve(t,a.cacheDir.trim());if(a&&a.server&&typeof a.server.cacheDir==`string`&&a.server.cacheDir.trim())return i.resolve(t,a.server.cacheDir.trim())}catch{}return null}function x(e,t=`.cache`){let n=i.resolve(e||a.cwd()),o=i.join(n,t),s=i.join(o,`database`),c=[o,i.join(o,`control-token.json`),i.join(o,`cli-peer-id`),s,i.join(s,`clients.db`),i.join(s,`agent.db`),i.join(s,`scheduled-tasks.db`),i.join(s,`push-subscriptions.db`),i.join(n,`database`,`clients.db`),i.join(n,`database`,`agent.db`)];for(let e of c)if(r.existsSync(e))return!0;return!1}async function S({contentRoot:e,stdin:t=a.stdin,stdout:n=a.stdout,onExit:o=e=>a.exit(e)}={}){let s=i.resolve(e||a.cwd()),c=i.join(s,`.cache`),l=y(),u=t,d=n,f=!1,h=null;if(t===a.stdin&&!a.stdin.isTTY&&!a.env.CI&&(a.stderr.isTTY||a.stdout.isTTY))try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;h=r.openSync(e,`r`),u=new m.ReadStream(h),d=a.stderr.isTTY?a.stderr:a.stdout,f=!0}catch{try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;u=r.createReadStream(e),d=a.stderr.isTTY?a.stderr:a.stdout,f=!0}catch{}}let g=p.createInterface({input:u,output:d}),_=!1,v=()=>{if(!_){_=!0,d.write(`
2
2
  Operation cancelled.
3
3
  `);try{g.close()}catch{}o(130)}};g.on(`SIGINT`,v),u&&typeof u.on==`function`&&u!==a.stdin&&u.on(`SIGINT`,v);let b=()=>v();a.on(`SIGINT`,b);let x=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&v()};u&&typeof u.on==`function`&&u.on(`data`,x);try{d.write(`
4
4
  ShadowClaw needs a directory to store cache and database files:
@@ -11,18 +11,18 @@ ShadowClaw needs a directory to store cache and database files:
11
11
  `),n.write(`Tip: You can pass --tmp, --cache-dir <dir>, set SHADOWCLAW_TMP=1, SHADOWCLAW_CACHE_DIR=<dir>, or configure "cacheDir" in shadow-claw.config.json to skip this prompt.
12
12
 
13
13
  `);let e=(await g.question(`Enter choice [1-3] or a directory path (default: 1): `)).trim();if(!e||e===`1`||e.toLowerCase()===`y`||e.toLowerCase()===`yes`)return n.write(`Using current directory cache: ${c}\n\n`),c;if(e===`2`||e.toLowerCase()===`tmp`||e.toLowerCase()===`temp`||e.toLowerCase()===`t`)return n.write(`Using temporary directory: ${l}\n\n`),l;if(e.toLowerCase()===`n`||e.toLowerCase()===`no`){let e=(await g.question(`Use temporary directory (${l}) instead? (Y/n): `)).trim();return e.toLowerCase()===`n`||e.toLowerCase()===`no`?(n.write(`Operation cancelled.
14
- `),o(0),l):(n.write(`Using temporary directory: ${l}\n\n`),l)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await g.question(`Enter custom directory path: `)).trim();if(!e)return n.write(`Using current directory cache: ${c}\n\n`),c;let t=i.resolve(s,e);return n.write(`Using custom directory: ${t}\n\n`),t}let t=i.resolve(s,e);return d.write(`Using directory: ${t}\n\n`),t}finally{a.removeListener(`SIGINT`,b),u&&typeof u.removeListener==`function`&&(u!==a.stdin&&u.removeListener(`SIGINT`,v),u.removeListener(`data`,x));try{g.close()}catch{}if(f){if(u&&typeof u.destroy==`function`)try{u.destroy()}catch{}if(h!=null)try{r.closeSync(h)}catch{}}}}async function C(e={}){let t=i.resolve(e.contentRoot||a.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((a.env.SHADOWCLAW_TMP||a.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let n=y();return{cacheDir:n,databaseDir:e.databaseDir?i.resolve(t,e.databaseDir):i.join(n,`database`)}}let n=(e.cacheDir||a.env.SHADOWCLAW_CACHE_DIR||``).trim();if(n){let r=i.resolve(t,n);return{cacheDir:r,databaseDir:e.databaseDir?i.resolve(t,e.databaseDir):i.join(r,`database`)}}let r=(e.databaseDir||a.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(r){let e=i.resolve(t,r);return{cacheDir:i.basename(e)===`database`?i.dirname(e):i.resolve(e,`..`),databaseDir:e}}let o=b(t);if(o)return{cacheDir:o,databaseDir:i.join(o,`database`)};let s=x(t),c=i.join(t,`.cache`),l=i.join(c,`database`);if(s||e.yes||e.y||[`1`,`true`,`yes`].includes((a.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:c,databaseDir:l};let u=e.stdin?!!e.stdin.isTTY:!!a.stdin.isTTY,d=!e.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),f=e.isTTY===void 0?u||d:!!e.isTTY,p=e.isCI===void 0?e.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!e.isCI;if(!f||p||e.quiet)return{cacheDir:c,databaseDir:l};let m=await S({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:i.join(m,`database`)}}function w(e,t,n){if(!n||typeof e?.executeNativeAiTask!=`function`)return;let{id:r,groupId:i,taskType:a,input:o}=n;return e.executeNativeAiTask({taskType:a,input:o,groupId:i,db:t}).then(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].resolve(e),delete t[r])}).catch(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].reject(e),delete t[r])})}async function T(e={}){let t=e.core||await n();t.setHeadlessMode(!0);let r,o;if(e.workspace)r=i.resolve(e.workspace),o=e.databaseDir?i.resolve(e.databaseDir):e.cacheDir?i.resolve(e.cacheDir,`database`):i.resolve(r,`database`);else{let t=await C({contentRoot:a.cwd(),cacheDir:e.cacheDir,databaseDir:e.databaseDir,tmp:e.tmp||e.temp,yes:e.yes||e.y,quiet:e.quiet,isTTY:e.isTTY,stdin:e.stdin,stdout:e.stdout}),n=i.join(f(),`shadow-claw`);await c(n,{recursive:!0}),r=await l(i.join(n,`workspace-`)),o=t.databaseDir}await c(r,{recursive:!0}),await c(o,{recursive:!0});let s=i.join(o,`agent.db`),u=t.openSqliteDatabase(s);t.setDB(u),t.setStorageRootFromPath(r);let d=(await v(r))?.config||{},p=d.settings||{},m=e.internetAccess??e.allowInternet??p.internetAccess??p.vm_bash_full_internet_access??p.fullInternetAccess??d.internetAccess;if(m!==void 0&&typeof t.setConfig==`function`){let e=t.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await t.setConfig(u,e,m?`true`:`false`)}let h={response:t=>{!e.quiet&&t.payload?.text&&console.log(t.payload.text)},error:t=>{!e.quiet&&t.payload?.error&&console.error(`Error: ${t.payload.error}`)},"tool-activity":t=>{!e.quiet&&e.verbose&&t.payload&&console.log(`[Tool] ${t.payload.tool} (${t.payload.status||`executing`})`)},"thinking-log":t=>{if(!e.quiet&&e.verbose&&t.payload){let e=t.payload.label||t.payload.level||`Log`;console.log(`[${e}] ${t.payload.message||``}`)}},"request-native-ai-task":e=>{w(t,u,e.payload)}};return t.setPostHandler(e=>{h[e.type]?.(e)}),{db:u,workspaceDir:r,dbPath:s,core:t}}function E(e={}){let{force:t=!1,stdin:n=a.stdin,timeoutMs:r}=e,i=n;return!t&&i?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],a=!1,o;r!=null&&r>0&&(o=setTimeout(()=>{a=!0,typeof i?.destroy==`function`&&i.destroy(),e(null)},r)),typeof i?.setEncoding==`function`&&i.setEncoding(`utf8`),i.on(`data`,e=>{a||n.push(typeof e==`string`?e:e.toString(`utf8`))}),i.on(`end`,()=>{if(o&&clearTimeout(o),a)return;let t=n.join(``).trim();e(t.length>0?t:null)}),i.on(`error`,e=>{o&&clearTimeout(o),!a&&t(e)})})}function D(e,t){let n=t&&typeof t==`object`?Object.keys(t.properties||{}):[];for(let t of[`text`,`prompt`,`content`,`input`])if(n.includes(t))return{[t]:e};return{input:e}}function O(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>String(e)).filter(Boolean)}async function k(t){let n=[];for(let r of t){let t=i.resolve(r),a;try{a=await u(t)}catch(e){throw Error(`Error: Failed to read attachment file "${r}": ${e.message}`)}let o=i.basename(t),s=e(o,``);n.push({fileName:o,mimeType:s,size:a.length,source:{kind:`local-file`,file:new Blob([new Uint8Array(a)],{type:s})}})}return n}const A=new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`show_toast`,`send_notification`,`spawn_subagent`]),j=`server:main`;async function M(e={}){let t;if(e.workspace)t=i.resolve(e.workspace);else{let e=i.join(f(),`shadow-claw`);await c(e,{recursive:!0}),t=await l(i.join(e,`workspace-`))}let n=i.join(t,`.agents`,`skills`),r=i.join(t,`.agents`,`tools`),o=i.join(t,`database`);await c(t,{recursive:!0}),await c(n,{recursive:!0}),await c(r,{recursive:!0}),await c(o,{recursive:!0});let s=e.provider,u=e.model,p=e.stdin?!!e.stdin.isTTY:!!a.stdin.isTTY,m=!e.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),h=e.isTTY===void 0?p||m:!!e.isTTY,g=e.isCI===void 0?e.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!e.isCI,_=h&&!g&&!e.quiet&&!e.yes&&!e.y;if(!s&&!u&&_){let{promptForAgentModel:n}=await import(`./chunk-DJ1pR9f82.js`),r=await n({workspaceDir:t,contentRoot:a.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:h});s=r.providerId,u=r.model}if(s||=`transformers_js_local`,!u){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-DJ1pR9f82.js`);u=s===`transformers_js_local`?e:`openrouter/free`}if(await v(t)||await d(i.join(t,`shadow-claw.config.json`),JSON.stringify({$schema:`https://json-schema.org/draft/2020-12/schema`,site:{title:`ShadowClaw Agent Workspace`,description:`Headless CLI agent workspace`},settings:{defaultProvider:`openrouter`,defaultModel:`openrouter/free`},agent:{defaultProvider:s,defaultModel:u}},null,2)+`
15
- `,`utf8`),e.download&&(s===`transformers_js_local`||s===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-DJ1pR9f82.js`);await t(u,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await T({workspace:t,quiet:!0}),{success:!0,workspace:t}}async function N(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,i=await n.discoverSkills(t,r);return{skills:i.skills,diagnostics:i.diagnostics}}async function P(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,i=null;if(e.toolsProfile||e.profile){let r=String(e.toolsProfile||e.profile).trim().toLowerCase(),a=n.DEFAULT_BUILTIN_PROFILE||null,o=[];if(typeof n.getConfig==`function`)try{let e=await n.getConfig(t,n.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof e==`string`?o=JSON.parse(e):Array.isArray(e)&&(o=e)}catch{}let s=[a,...o].filter(Boolean).find(e=>e.id&&String(e.id).toLowerCase()===r||e.name&&String(e.name).toLowerCase()===r);s&&(i=new Set(s.enabledToolNames||[]))}let a=[...n.TOOL_DEFINITIONS||[]];if(typeof n.loadDeclarativeTools==`function`)try{let e=await n.loadDeclarativeTools(t,r);if(e&&Array.isArray(e.tools))for(let t of e.tools)a.some(e=>e.name===t.name)||a.push(t)}catch{}return{tools:a.map(e=>({name:e.name,description:e.description,headlessSafe:!A.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function F(e,t,n={}){let{db:r,workspaceDir:o,core:s}=await T(n),c=n.group||s.DEFAULT_SERVER_GROUP_ID||j,l=(s.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!l&&typeof s.loadDeclarativeTools==`function`)try{l=(await s.loadDeclarativeTools(r,c)).tools.find(t=>t.name===e)}catch{}if(!l){let t=`Error: Tool "${e}" not found.`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let u=!A.has(l.name),f=t??n.input;if(f===`-`&&(f=void 0),f==null&&n._stdinData!=null){let e=n._stdinData,t;try{t=JSON.parse(e)}catch{t=D(e,l.input_schema)}f=t}if(f!=null){let t={};if(typeof f==`string`)try{t=JSON.parse(f)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}else typeof f==`object`&&(t=f);let p;try{let e=await L(r,s,o,{...n,interactive:!1});p={db:r,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let o=await s.executeTool(r,e,t,c,{invokeContext:p}),f=typeof o==`string`?o:JSON.stringify(o,null,2);return n.output?(await d(i.resolve(n.output),f,`utf8`),n.quiet||a.stderr.write(`Output written to ${n.output}\n`)):n.quiet||a.stdout.write(f+`
14
+ `),o(0),l):(n.write(`Using temporary directory: ${l}\n\n`),l)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await g.question(`Enter custom directory path: `)).trim();if(!e)return n.write(`Using current directory cache: ${c}\n\n`),c;let t=i.resolve(s,e);return n.write(`Using custom directory: ${t}\n\n`),t}let t=i.resolve(s,e);return d.write(`Using directory: ${t}\n\n`),t}finally{a.removeListener(`SIGINT`,b),u&&typeof u.removeListener==`function`&&(u!==a.stdin&&u.removeListener(`SIGINT`,v),u.removeListener(`data`,x));try{g.close()}catch{}if(f){if(u&&typeof u.destroy==`function`)try{u.destroy()}catch{}if(h!=null)try{r.closeSync(h)}catch{}}}}async function C(e={}){let t=i.resolve(e.contentRoot||a.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((a.env.SHADOWCLAW_TMP||a.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let n=y();return{cacheDir:n,databaseDir:e.databaseDir?i.resolve(t,e.databaseDir):i.join(n,`database`)}}let n=(e.cacheDir||a.env.SHADOWCLAW_CACHE_DIR||``).trim();if(n){let r=i.resolve(t,n);return{cacheDir:r,databaseDir:e.databaseDir?i.resolve(t,e.databaseDir):i.join(r,`database`)}}let r=(e.databaseDir||a.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(r){let e=i.resolve(t,r);return{cacheDir:i.basename(e)===`database`?i.dirname(e):i.resolve(e,`..`),databaseDir:e}}let o=b(t);if(o)return{cacheDir:o,databaseDir:i.join(o,`database`)};let s=x(t),c=i.join(t,`.cache`),l=i.join(c,`database`);if(s||e.yes||e.y||[`1`,`true`,`yes`].includes((a.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:c,databaseDir:l};let u=e.stdin?!!e.stdin.isTTY:!!a.stdin.isTTY,d=!e.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),f=e.isTTY===void 0?u||d:!!e.isTTY,p=e.isCI===void 0?e.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!e.isCI;if(!f||p||e.quiet)return{cacheDir:c,databaseDir:l};let m=await S({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:i.join(m,`database`)}}function w(e,t,n){if(!n||typeof e?.executeNativeAiTask!=`function`)return;let{id:r,groupId:i,taskType:a,input:o}=n;return e.executeNativeAiTask({taskType:a,input:o,groupId:i,db:t}).then(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].resolve(e),delete t[r])}).catch(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].reject(e),delete t[r])})}async function T(e={}){let t=e.core||await n();t.setHeadlessMode(!0);let r,o;if(e.workspace)r=i.resolve(e.workspace),o=e.databaseDir?i.resolve(e.databaseDir):e.cacheDir?i.resolve(e.cacheDir,`database`):i.resolve(r,`database`);else{let t=await C({contentRoot:a.cwd(),cacheDir:e.cacheDir,databaseDir:e.databaseDir,tmp:e.tmp||e.temp,yes:e.yes||e.y,quiet:e.quiet,isTTY:e.isTTY,stdin:e.stdin,stdout:e.stdout}),n=i.join(f(),`shadow-claw`);await c(n,{recursive:!0}),r=await l(i.join(n,`workspace-`)),o=t.databaseDir}await c(r,{recursive:!0}),await c(o,{recursive:!0});let s=i.join(o,`agent.db`),u=t.openSqliteDatabase(s);t.setDB(u),t.setStorageRootFromPath(r);let d=(await v(r))?.config||{},p=d.settings||{},m=e.internetAccess??e.allowInternet??p.internetAccess??p.vm_bash_full_internet_access??p.fullInternetAccess??d.internetAccess;if(m!==void 0&&typeof t.setConfig==`function`){let e=t.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await t.setConfig(u,e,m?`true`:`false`)}let h={response:t=>{!e.quiet&&t.payload?.text&&console.log(t.payload.text)},error:t=>{!e.quiet&&t.payload?.error&&console.error(`Error: ${t.payload.error}`)},"tool-activity":t=>{!e.quiet&&e.verbose&&t.payload&&console.log(`[Tool] ${t.payload.tool} (${t.payload.status||`executing`})`)},"thinking-log":t=>{if(!e.quiet&&e.verbose&&t.payload){let e=t.payload.label||t.payload.level||`Log`;console.log(`[${e}] ${t.payload.message||``}`)}},"request-native-ai-task":e=>{w(t,u,e.payload)}};return t.setPostHandler(e=>{h[e.type]?.(e)}),{db:u,workspaceDir:r,dbPath:s,core:t}}function E(e={}){let{force:t=!1,stdin:n=a.stdin,timeoutMs:r}=e,i=n;return!t&&i?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],a=!1,o;r!=null&&r>0&&(o=setTimeout(()=>{a=!0,typeof i?.destroy==`function`&&i.destroy(),e(null)},r)),typeof i?.setEncoding==`function`&&i.setEncoding(`utf8`),i.on(`data`,e=>{a||n.push(typeof e==`string`?e:e.toString(`utf8`))}),i.on(`end`,()=>{if(o&&clearTimeout(o),a)return;let t=n.join(``).trim();e(t.length>0?t:null)}),i.on(`error`,e=>{o&&clearTimeout(o),!a&&t(e)})})}function D(e,t){let n=t&&typeof t==`object`?Object.keys(t.properties||{}):[];for(let t of[`text`,`prompt`,`content`,`input`])if(n.includes(t))return{[t]:e};return{input:e}}function O(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>String(e)).filter(Boolean)}async function k(t){let n=[];for(let r of t){let t=i.resolve(r),a;try{a=await u(t)}catch(e){throw Error(`Error: Failed to read attachment file "${r}": ${e.message}`)}let o=i.basename(t),s=e(o,``);n.push({fileName:o,mimeType:s,size:a.length,source:{kind:`local-file`,file:new Blob([new Uint8Array(a)],{type:s})}})}return n}const A=new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`show_toast`,`send_notification`,`spawn_subagent`]),j=`server:main`;async function M(e={}){let t;if(e.workspace)t=i.resolve(e.workspace);else{let e=i.join(f(),`shadow-claw`);await c(e,{recursive:!0}),t=await l(i.join(e,`workspace-`))}let n=i.join(t,`.agents`,`skills`),r=i.join(t,`.agents`,`tools`),o=i.join(t,`database`);await c(t,{recursive:!0}),await c(n,{recursive:!0}),await c(r,{recursive:!0}),await c(o,{recursive:!0});let s=e.provider,u=e.model,p=e.stdin?!!e.stdin.isTTY:!!a.stdin.isTTY,m=!e.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),h=e.isTTY===void 0?p||m:!!e.isTTY,g=e.isCI===void 0?e.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!e.isCI,_=h&&!g&&!e.quiet&&!e.yes&&!e.y;if(!s&&!u&&_){let{promptForAgentModel:n}=await import(`./chunk-C0vTb5Ur2.js`),r=await n({workspaceDir:t,contentRoot:a.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:h});s=r.providerId,u=r.model}if(s||=`transformers_js_local`,!u){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-C0vTb5Ur2.js`);u=s===`transformers_js_local`?e:`openrouter/free`}if(await v(t)||await d(i.join(t,`shadow-claw.config.json`),JSON.stringify({$schema:`https://json-schema.org/draft/2020-12/schema`,site:{title:`ShadowClaw Agent Workspace`,description:`Headless CLI agent workspace`},settings:{defaultProvider:`openrouter`,defaultModel:`openrouter/free`},agent:{defaultProvider:s,defaultModel:u}},null,2)+`
15
+ `,`utf8`),e.download&&(s===`transformers_js_local`||s===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-C0vTb5Ur2.js`);await t(u,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await T({workspace:t,quiet:!0}),{success:!0,workspace:t}}async function N(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,i=await n.discoverSkills(t,r);return{skills:i.skills,diagnostics:i.diagnostics}}async function P(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,i=null;if(e.toolsProfile||e.profile){let r=String(e.toolsProfile||e.profile).trim().toLowerCase(),a=n.DEFAULT_BUILTIN_PROFILE||null,o=[];if(typeof n.getConfig==`function`)try{let e=await n.getConfig(t,n.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof e==`string`?o=JSON.parse(e):Array.isArray(e)&&(o=e)}catch{}let s=[a,...o].filter(Boolean).find(e=>e.id&&String(e.id).toLowerCase()===r||e.name&&String(e.name).toLowerCase()===r);s&&(i=new Set(s.enabledToolNames||[]))}let a=[...n.TOOL_DEFINITIONS||[]];if(typeof n.loadDeclarativeTools==`function`)try{let e=await n.loadDeclarativeTools(t,r);if(e&&Array.isArray(e.tools))for(let t of e.tools)a.some(e=>e.name===t.name)||a.push(t)}catch{}return{tools:a.map(e=>({name:e.name,description:e.description,headlessSafe:!A.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function F(e,t,n={}){let{db:r,workspaceDir:o,core:s}=await T(n),c=n.group||s.DEFAULT_SERVER_GROUP_ID||j,l=(s.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!l&&typeof s.loadDeclarativeTools==`function`)try{l=(await s.loadDeclarativeTools(r,c)).tools.find(t=>t.name===e)}catch{}if(!l){let t=`Error: Tool "${e}" not found.`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let u=!A.has(l.name),f=t??n.input;if(f===`-`&&(f=void 0),f==null&&n._stdinData!=null){let e=n._stdinData,t;try{t=JSON.parse(e)}catch{t=D(e,l.input_schema)}f=t}if(f!=null){let t={};if(typeof f==`string`)try{t=JSON.parse(f)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}else typeof f==`object`&&(t=f);let p;try{let e=await R(r,s,o,{...n,interactive:!1});p={db:r,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let o=await s.executeTool(r,e,t,c,{invokeContext:p}),f=typeof o==`string`?o:JSON.stringify(o,null,2);return n.output?(await d(i.resolve(n.output),f,`utf8`),n.quiet||a.stderr.write(`Output written to ${n.output}\n`)):n.quiet||a.stdout.write(f+`
16
16
  `),{success:!0,tool:l,headlessSafe:u,output:o}}catch(t){let r=t instanceof Error?t.message:String(t);return n.quiet||console.error(`Error executing tool "${e}": ${r}`),a.exitCode=1,{success:!1,error:r}}}if(!n.quiet){let e=u?`[headless-safe]`:`[browser-only]`;console.log(`Tool: ${l.name} ${e}\n`),console.log(`Description:\n ${l.description}\n`),l.input_schema&&(console.log(`Parameters (JSON Schema):`),console.log(JSON.stringify(l.input_schema,null,2)),console.log()),console.log(`Usage:`),console.log(` Direct CLI: npx shadow-claw agent tool ${l.name} '<json-input>'`),console.log(` Pipe input: echo '<text>' | npx shadow-claw agent tool ${l.name}`),console.log(` Agent Prompt: npx shadow-claw agent run "<instruction>"
17
- `)}return{success:!0,tool:l,headlessSafe:u}}async function I(e,t={}){let{db:n,core:r}=await T(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||j,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function L(e,t,n,r={}){let i=r.contentRoot??a.cwd(),o=await v(n,i),s=o?.config||{},c=s.settings||{},l=s.agent||c.agent||{},u=r.provider||a.env.SHADOW_CLAW_PROVIDER||a.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!u&&typeof t.getConfig==`function`&&(u=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!u&&r.model){let{isLlamafile:e}=await import(`./chunk-DJ1pR9f82.js`);e(r.model)?u=`llamafile`:/onnx/i.test(r.model)&&(u=`transformers_js_local`)}u||=l.defaultProvider||l.provider||c.defaultProvider||c.provider||s.defaultProvider;let d=r.stdin?!!r.stdin.isTTY:!!a.stdin.isTTY,f=!r.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),p=r.isTTY===void 0?d||f:!!r.isTTY,m=r.isCI===void 0?r.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!r.isCI,h=p&&!m&&!r.quiet&&r.interactive!==!1;if(!u)if(h){let{promptForAgentModel:e}=await import(`./chunk-DJ1pR9f82.js`),t=await e({workspaceDir:n,contentRoot:i,cacheDir:r.cacheDir,stdin:r.stdin,stdout:r.stdout,quiet:r.quiet,isTTY:p,service:r._transformersService});u=t.providerId,r.model=t.model}else u=`openrouter`;let g=typeof t.getProvider==`function`?t.getProvider(u):null;if(!g){let e=`Error: Unknown provider "${u}".`;throw Error(e)}let _;if(r.apiKey!==void 0)_=r.apiKey;else{if(_=a.env.SHADOW_CLAW_API_KEY,!_)switch(u){case`openrouter`:_=a.env.OPENROUTER_API_KEY;break;case`huggingface`:_=a.env.HUGGINGFACE_API_KEY||a.env.HF_TOKEN;break;case`gemini_proxy`:_=a.env.GEMINI_API_KEY;break}!_&&typeof t.getConfig==`function`&&(_=await t.getConfig(e,`api_key:${u}`)||await t.getConfig(e,`apiKey`))}let y=r.model||a.env.SHADOW_CLAW_MODEL||a.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||l.defaultModel||l.model||c.defaultModel||c.model||s.defaultModel||g?.defaultModel||(u===`transformers_js_local`?(await import(`./chunk-DJ1pR9f82.js`)).DEFAULT_LOCAL_MODEL:`default`);if(u===`transformers_js_local`||u===`llamafile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-DJ1pR9f82.js`);if(!e(y,r.cacheDir)){let e=r.stdout||a.stderr;if(r.download)r.quiet||e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:r.cacheDir,stream:e,isTTY:p,service:r._transformersService,progress:r.progress!==!1&&!r.noProgress,verbose:r.verbose});else if(h){let n=await import(`node:readline/promises`),i=await import(`node:tty`),o=await import(`node:fs`),s=r.stdin||a.stdin,c=e,l=!1,u=null;if(s===a.stdin&&!a.stdin.isTTY&&!a.env.CI&&(a.stderr.isTTY||a.stdout.isTTY))try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new i.ReadStream(u),c=a.stderr.isTTY?a.stderr:a.stdout,l=!0}catch{try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=a.stderr.isTTY?a.stderr:a.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),f=!1,m=()=>{if(!f){f=!0,c.write(`
17
+ `)}return{success:!0,tool:l,headlessSafe:u}}async function I(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,{clearGroupMessages:i}=await import(`./chunk-ud_DUk_f2.js`);return await i(t,r),e.quiet||console.log(`Cleared conversation history for group "${r}".`),{success:!0,groupId:r}}async function L(e,t={}){let{db:n,core:r}=await T(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||j,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function R(e,t,n,r={}){let i=r.contentRoot??a.cwd(),o=await v(n,i),s=o?.config||{},c=s.settings||{},l=s.agent||c.agent||{},u=r.provider||a.env.SHADOW_CLAW_PROVIDER||a.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!u&&typeof t.getConfig==`function`&&(u=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!u&&r.model){let{isLlamafile:e}=await import(`./chunk-C0vTb5Ur2.js`);e(r.model)?u=`llamafile`:/onnx/i.test(r.model)&&(u=`transformers_js_local`)}u||=l.defaultProvider||l.provider||c.defaultProvider||c.provider||s.defaultProvider;let d=r.stdin?!!r.stdin.isTTY:!!a.stdin.isTTY,f=!r.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),p=r.isTTY===void 0?d||f:!!r.isTTY,m=r.isCI===void 0?r.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!r.isCI,h=p&&!m&&!r.quiet&&r.interactive!==!1;if(!u)if(h){let{promptForAgentModel:e}=await import(`./chunk-C0vTb5Ur2.js`),t=await e({workspaceDir:n,contentRoot:i,cacheDir:r.cacheDir,stdin:r.stdin,stdout:r.stdout,quiet:r.quiet,isTTY:p,service:r._transformersService});u=t.providerId,r.model=t.model}else u=`openrouter`;let g=typeof t.getProvider==`function`?t.getProvider(u):null;if(!g){let e=`Error: Unknown provider "${u}".`;throw Error(e)}let _;if(r.apiKey!==void 0)_=r.apiKey;else{if(_=a.env.SHADOW_CLAW_API_KEY,!_)switch(u){case`openrouter`:_=a.env.OPENROUTER_API_KEY;break;case`huggingface`:_=a.env.HUGGINGFACE_API_KEY||a.env.HF_TOKEN;break;case`gemini_proxy`:_=a.env.GEMINI_API_KEY;break}!_&&typeof t.getConfig==`function`&&(_=await t.getConfig(e,`api_key:${u}`)||await t.getConfig(e,`apiKey`))}let y=r.model||a.env.SHADOW_CLAW_MODEL||a.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||l.defaultModel||l.model||c.defaultModel||c.model||s.defaultModel||g?.defaultModel||(u===`transformers_js_local`?(await import(`./chunk-C0vTb5Ur2.js`)).DEFAULT_LOCAL_MODEL:`default`);if(u===`transformers_js_local`||u===`llamafile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-C0vTb5Ur2.js`);if(!e(y,r.cacheDir)){let e=r.stdout||a.stderr;if(r.download)r.quiet||e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:r.cacheDir,stream:e,isTTY:p,service:r._transformersService,progress:r.progress!==!1&&!r.noProgress,verbose:r.verbose});else if(h){let n=await import(`node:readline/promises`),i=await import(`node:tty`),o=await import(`node:fs`),s=r.stdin||a.stdin,c=e,l=!1,u=null;if(s===a.stdin&&!a.stdin.isTTY&&!a.env.CI&&(a.stderr.isTTY||a.stdout.isTTY))try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new i.ReadStream(u),c=a.stderr.isTTY?a.stderr:a.stdout,l=!0}catch{try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=a.stderr.isTTY?a.stderr:a.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),f=!1,m=()=>{if(!f){f=!0,c.write(`
18
18
  Operation cancelled.
19
- `);try{d.close()}catch{}typeof r.onExit==`function`?r.onExit(130):a.exit(130)}};d.on(`SIGINT`,m),s&&typeof s.on==`function`&&s!==a.stdin&&s.on(`SIGINT`,m);let h=()=>m();a.on(`SIGINT`,h);let g=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&m()};s&&typeof s.on==`function`&&s.on(`data`,g);let _=``;try{_=(await d.question(`\nModel "${y}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{a.removeListener(`SIGINT`,h),s&&typeof s.removeListener==`function`&&(s!==a.stdin&&s.removeListener(`SIGINT`,m),s.removeListener(`data`,g));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}(_===``||_===`y`||_===`yes`)&&(e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:r.cacheDir,stream:e,isTTY:p,service:r._transformersService,progress:r.progress!==!1&&!r.noProgress,verbose:r.verbose}))}}}return{providerId:u,providerConfig:g,apiKey:_||``,model:y,workspaceConfigData:o,workspaceConfig:s,workspaceSettings:c,workspaceAgent:l}}async function R(e,t,n,r,i,a,o){let s=[...t.TOOL_DEFINITIONS||[]];if(typeof t.loadDeclarativeTools==`function`)try{let r=await t.loadDeclarativeTools(e,n);if(r&&Array.isArray(r.tools))for(let e of r.tools)s.some(t=>t.name===e.name)||s.push(e)}catch{}let c=s.filter(e=>!A.has(e.name)),l=c,u=null;async function d(){let n=t.DEFAULT_BUILTIN_PROFILE||null,a=[];if(typeof t.getConfig==`function`)try{let n=await t.getConfig(e,t.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof n==`string`?a=JSON.parse(n):Array.isArray(n)&&(a=n)}catch{}let o=r?.toolProfiles||i?.toolProfiles||r?.profiles||[];return[n,...a,...o].filter(Boolean)}if(o.noTools===!0||o.tools===!1||o.tools===`none`||o.tools===``)return l=[],{enabledTools:l,profileSystemPromptOverride:u};if(o.tools!==void 0&&o.tools!==null)return l=(Array.isArray(o.tools)?o.tools:String(o.tools).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===String(e))).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u};if(o.toolsProfile){let e=await d(),t=String(o.toolsProfile).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(!n)throw Error(`Error: Tool profile "${o.toolsProfile}" not found.`);let r=new Set(n.enabledToolNames||[]);if(l=c.filter(e=>r.has(e.name)),n.customTools&&Array.isArray(n.customTools))for(let e of n.customTools)!A.has(e.name)&&!l.some(t=>t.name===e.name)&&l.push(e);return n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}let f=a?.tools??a?.enabledTools;if(f!=null)return f===!1||f===`none`||f===``?(l=[],{enabledTools:l,profileSystemPromptOverride:u}):(l=(Array.isArray(f)?f:String(f).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===e)).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u});let p=a?.toolsProfile||a?.defaultToolsProfile;if(p){let e=await d(),t=String(p).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(n){let e=new Set(n.enabledToolNames||[]);return l=c.filter(t=>e.has(t.name)),n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}}return{enabledTools:l,profileSystemPromptOverride:u}}async function z(e,n={}){let{db:r,workspaceDir:o,core:s}=await T(n),c=n.group||s.DEFAULT_SERVER_GROUP_ID||j,l=n._stdinData??null;if(e===`-`?e=l||``:l&&(e=e?`${e}\n\n${l}`:l),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return n.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let f=[];try{f=await t(r,c,await k(O(n.file)))}catch(e){return n.quiet||console.error(e.message),a.exitCode=1,{success:!1,error:e.message}}let p,m,h,g,_,v,y,b;try{let e=await L(r,s,o,n);p=e.providerId,m=e.providerConfig,h=e.apiKey,g=e.model,_=e.workspaceConfigData,v=e.workspaceConfig,y=e.workspaceSettings,b=e.workspaceAgent}catch(e){return n.quiet||console.error(e.message),a.exitCode=1,{success:!1,error:e.message}}let x=n.internetAccess??n.allowInternet??y?.internetAccess??y?.vm_bash_full_internet_access??y?.fullInternetAccess??v?.internetAccess;if(x!==void 0&&typeof s.setConfig==`function`){let e=s.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await s.setConfig(r,e,x?`true`:`false`)}if(m.requiresApiKey!==!1&&!h){let e=p===`huggingface`?`HUGGINGFACE_API_KEY`:`${p.toUpperCase()}_API_KEY`,t=`Error: Provider "${p}" requires an API key, but none was provided.\nPlease provide an API key via --api-key <key> or export ${e}="...".`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let S=[];if(typeof s.getRecentMessages==`function`)try{S=await s.getRecentMessages(r,c,50)}catch{}let C={id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:c,role:`user`,sender:`user`,channel:`chat`,isFromMe:!1,isTrigger:!0,content:e,timestamp:Date.now(),...f.length>0?{attachments:f}:{}};if(typeof s.saveMessage==`function`)try{await s.saveMessage(r,C)}catch{}let E=m?.supportsStreaming===!0,D=n.stream!==!1&&n.streaming!==!1&&!n.noStream,A=E&&D,M=Number(n.maxTokens)||(typeof s.getModelMaxTokens==`function`?s.getModelMaxTokens(g):s.DEFAULT_MAX_TOKENS||8192);if(n.verbose&&!n.quiet){let e=m?.name||p,t=A?`streaming`:`standard`;a.stderr.write(`[Agent] Connecting to ${e} (${g}) [${t}]...\n`),a.stderr.write(`[Agent] Workspace: ${o}\n[Agent] Group: ${c}\n[Agent] Max tokens: ${M}\n`)}let N,P,F=!1,I=[];s.setPostHandler(async e=>{({"streaming-start":()=>{F=!0},"streaming-chunk":e=>{e.payload?.text&&(F=!0,N=(N||``)+e.payload.text,!n.quiet&&!n.output&&a.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-end":()=>{},response:e=>{if(e.payload?.text)if(N=e.payload.text,n.output){let t=d(i.resolve(n.output),e.payload.text,`utf8`).then(()=>{n.quiet||a.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});I.push(t)}else n.quiet||(F?e.payload.text.endsWith(`
19
+ `);try{d.close()}catch{}typeof r.onExit==`function`?r.onExit(130):a.exit(130)}};d.on(`SIGINT`,m),s&&typeof s.on==`function`&&s!==a.stdin&&s.on(`SIGINT`,m);let h=()=>m();a.on(`SIGINT`,h);let g=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&m()};s&&typeof s.on==`function`&&s.on(`data`,g);let _=``;try{_=(await d.question(`\nModel "${y}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{a.removeListener(`SIGINT`,h),s&&typeof s.removeListener==`function`&&(s!==a.stdin&&s.removeListener(`SIGINT`,m),s.removeListener(`data`,g));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}(_===``||_===`y`||_===`yes`)&&(e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:r.cacheDir,stream:e,isTTY:p,service:r._transformersService,progress:r.progress!==!1&&!r.noProgress,verbose:r.verbose}))}}}return{providerId:u,providerConfig:g,apiKey:_||``,model:y,workspaceConfigData:o,workspaceConfig:s,workspaceSettings:c,workspaceAgent:l}}async function z(e,t,n,r,i,a,o){let s=[...t.TOOL_DEFINITIONS||[]];if(typeof t.loadDeclarativeTools==`function`)try{let r=await t.loadDeclarativeTools(e,n);if(r&&Array.isArray(r.tools))for(let e of r.tools)s.some(t=>t.name===e.name)||s.push(e)}catch{}let c=s.filter(e=>!A.has(e.name)),l=c,u=null;async function d(){let n=t.DEFAULT_BUILTIN_PROFILE||null,a=[];if(typeof t.getConfig==`function`)try{let n=await t.getConfig(e,t.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof n==`string`?a=JSON.parse(n):Array.isArray(n)&&(a=n)}catch{}let o=r?.toolProfiles||i?.toolProfiles||r?.profiles||[];return[n,...a,...o].filter(Boolean)}if(o.noTools===!0||o.tools===!1||o.tools===`none`||o.tools===``)return l=[],{enabledTools:l,profileSystemPromptOverride:u};if(o.tools!==void 0&&o.tools!==null)return l=(Array.isArray(o.tools)?o.tools:String(o.tools).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===String(e))).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u};if(o.toolsProfile){let e=await d(),t=String(o.toolsProfile).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(!n)throw Error(`Error: Tool profile "${o.toolsProfile}" not found.`);let r=new Set(n.enabledToolNames||[]);if(l=c.filter(e=>r.has(e.name)),n.customTools&&Array.isArray(n.customTools))for(let e of n.customTools)!A.has(e.name)&&!l.some(t=>t.name===e.name)&&l.push(e);return n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}let f=a?.tools??a?.enabledTools;if(f!=null)return f===!1||f===`none`||f===``?(l=[],{enabledTools:l,profileSystemPromptOverride:u}):(l=(Array.isArray(f)?f:String(f).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===e)).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u});let p=a?.toolsProfile||a?.defaultToolsProfile;if(p){let e=await d(),t=String(p).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(n){let e=new Set(n.enabledToolNames||[]);return l=c.filter(t=>e.has(t.name)),n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}}return{enabledTools:l,profileSystemPromptOverride:u}}async function B(e,n={}){let{db:r,workspaceDir:o,core:s}=await T(n),c=n.group||s.DEFAULT_SERVER_GROUP_ID||j,l=n._stdinData??null;if(e===`-`?e=l||``:l&&(e=e?`${e}\n\n${l}`:l),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return n.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let f=[];try{f=await t(r,c,await k(O(n.file)))}catch(e){return n.quiet||console.error(e.message),a.exitCode=1,{success:!1,error:e.message}}let p,m,h,g,_,v,y,b;try{let e=await R(r,s,o,n);p=e.providerId,m=e.providerConfig,h=e.apiKey,g=e.model,_=e.workspaceConfigData,v=e.workspaceConfig,y=e.workspaceSettings,b=e.workspaceAgent}catch(e){return n.quiet||console.error(e.message),a.exitCode=1,{success:!1,error:e.message}}let x=n.internetAccess??n.allowInternet??y?.internetAccess??y?.vm_bash_full_internet_access??y?.fullInternetAccess??v?.internetAccess;if(x!==void 0&&typeof s.setConfig==`function`){let e=s.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await s.setConfig(r,e,x?`true`:`false`)}if(m.requiresApiKey!==!1&&!h){let e=p===`huggingface`?`HUGGINGFACE_API_KEY`:`${p.toUpperCase()}_API_KEY`,t=`Error: Provider "${p}" requires an API key, but none was provided.\nPlease provide an API key via --api-key <key> or export ${e}="...".`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let S=[];if(n.history!==!1&&typeof s.getRecentMessages==`function`)try{S=await s.getRecentMessages(r,c,50)}catch{}let C={id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:c,role:`user`,sender:`user`,channel:`chat`,isFromMe:!1,isTrigger:!0,content:e,timestamp:Date.now(),...f.length>0?{attachments:f}:{}};if(typeof s.saveMessage==`function`)try{await s.saveMessage(r,C)}catch{}let E=m?.supportsStreaming===!0,D=n.stream!==!1&&n.streaming!==!1&&!n.noStream,A=E&&D,M=Number(n.maxTokens)||(typeof s.getModelMaxTokens==`function`?s.getModelMaxTokens(g):s.DEFAULT_MAX_TOKENS||8192);if(n.verbose&&!n.quiet){let e=m?.name||p,t=A?`streaming`:`standard`;a.stderr.write(`[Agent] Connecting to ${e} (${g}) [${t}]...\n`),a.stderr.write(`[Agent] Workspace: ${o}\n[Agent] Group: ${c}\n[Agent] Max tokens: ${M}\n`)}let N,P,F=!1,I=[];s.setPostHandler(async e=>{({"streaming-start":()=>{F=!0},"streaming-chunk":e=>{e.payload?.text&&(F=!0,N=(N||``)+e.payload.text,!n.quiet&&!n.output&&a.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-end":()=>{},response:e=>{if(e.payload?.text)if(N=e.payload.text,n.output){let t=d(i.resolve(n.output),e.payload.text,`utf8`).then(()=>{n.quiet||a.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});I.push(t)}else n.quiet||(F?e.payload.text.endsWith(`
20
20
  `)||a.stdout.write(`
21
21
  `):a.stdout.write(e.payload.text+`
22
- `))},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&a.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(P=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;a.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;a.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;a.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;a.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(n.verbose&&!n.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,r=t.completion_tokens??t.output_tokens??0,i=t.total_tokens??n+r;a.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${r}, Total: ${i}\n`)}},"request-native-ai-task":e=>{w(s,r,e.payload)}})[e.type]?.(e)});let z;try{z=await R(r,s,c,v,y,b,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let{enabledTools:B,profileSystemPromptOverride:V}=z,H=n.systemPrompt;if(!H&&n.systemPromptFile)try{H=await u(i.resolve(n.systemPromptFile),`utf8`)}catch(e){let t=`Error: Failed to read system prompt file "${n.systemPromptFile}": ${e.message}`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}if(H||=a.env.SHADOW_CLAW_SYSTEM_PROMPT||a.env.SHADOWCLAW_SYSTEM_PROMPT,!H&&V&&(H=V),!H&&b?.systemPromptFile)try{let e=_?.configPath?i.dirname(_.configPath):o;H=await u(i.resolve(e,b.systemPromptFile),`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(H||=b?.systemPrompt||y?.systemPrompt||y?.systemPromptOverride,!H&&typeof s.getConfig==`function`)try{let e=await s.getConfig(r,s.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(H=e)}catch{}H||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`;let U={apiKey:h||``,assistantName:`ShadowClaw`,enabledTools:B,groupId:c,maxTokens:M,messages:[...S,C],model:g,provider:p,streaming:A,verbose:!!n.verbose,systemPrompt:H},W=new AbortController;n.abortSignal&&(n.abortSignal.aborted?W.abort():n.abortSignal.addEventListener(`abort`,()=>W.abort(),{once:!0}));let G=!1,K=()=>{if(!G){G=!0,W.abort();try{typeof s.cleanupAllLlamafileProcesses==`function`&&s.cleanupAllLlamafileProcesses()}catch{}}};a.on(`SIGINT`,K);let q=n.invokeHandler||s.handleInvoke;try{await q(r,U,W.signal)}catch(e){P=e instanceof Error?e.message:String(e),!G&&!n.quiet&&console.error(`Error: ${P}`)}finally{a.removeListener(`SIGINT`,K)}if(G)return n.quiet||a.stderr.write(`
22
+ `))},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&a.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(P=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;a.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;a.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;a.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;a.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(n.verbose&&!n.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,r=t.completion_tokens??t.output_tokens??0,i=t.total_tokens??n+r;a.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${r}, Total: ${i}\n`)}},"request-native-ai-task":e=>{w(s,r,e.payload)}})[e.type]?.(e)});let L;try{L=await z(r,s,c,v,y,b,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let{enabledTools:B,profileSystemPromptOverride:V}=L,H=n.systemPrompt;if(!H&&n.systemPromptFile)try{H=await u(i.resolve(n.systemPromptFile),`utf8`)}catch(e){let t=`Error: Failed to read system prompt file "${n.systemPromptFile}": ${e.message}`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}if(H||=a.env.SHADOW_CLAW_SYSTEM_PROMPT||a.env.SHADOWCLAW_SYSTEM_PROMPT,!H&&V&&(H=V),!H&&b?.systemPromptFile)try{let e=_?.configPath?i.dirname(_.configPath):o;H=await u(i.resolve(e,b.systemPromptFile),`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(H||=b?.systemPrompt||y?.systemPrompt||y?.systemPromptOverride,!H&&typeof s.getConfig==`function`)try{let e=await s.getConfig(r,s.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(H=e)}catch{}H||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`;let U={apiKey:h||``,assistantName:`ShadowClaw`,enabledTools:B,groupId:c,maxTokens:M,messages:[...S,C],model:g,provider:p,streaming:A,verbose:!!n.verbose,systemPrompt:H},W=new AbortController;n.abortSignal&&(n.abortSignal.aborted?W.abort():n.abortSignal.addEventListener(`abort`,()=>W.abort(),{once:!0}));let G=!1,K=()=>{if(!G){G=!0,W.abort();try{typeof s.cleanupAllLlamafileProcesses==`function`&&s.cleanupAllLlamafileProcesses()}catch{}}};a.on(`SIGINT`,K);let q=n.invokeHandler||s.handleInvoke;try{await q(r,U,W.signal)}catch(e){P=e instanceof Error?e.message:String(e),!G&&!n.quiet&&console.error(`Error: ${P}`)}finally{a.removeListener(`SIGINT`,K)}if(G)return n.quiet||a.stderr.write(`
23
23
  Operation cancelled.
24
24
  `),a.exitCode=130,typeof n.onExit==`function`&&n.onExit(130),{success:!1,error:`Operation cancelled.`};if(P&&F&&!n.quiet&&!n.output&&a.stdout.write(`
25
- `),P)return a.exitCode=1,{success:!1,error:P};if(N&&typeof s.saveMessage==`function`)try{await s.saveMessage(r,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:c,role:`assistant`,content:N,timestamp:Date.now()})}catch{}if(n.output&&N&&I.length===0){let e=d(i.resolve(n.output),N,`utf8`).then(()=>{n.quiet||a.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});I.push(e)}return await Promise.all(I),typeof s.setPostHandler==`function`&&s.setPostHandler(null),{success:!0,response:N,model:g,provider:p}}async function B(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:o,downloadLocalModel:s,fetchRemoteModels:c,DEFAULT_LOCAL_MODEL:l}=await import(`./chunk-DJ1pR9f82.js`),u=n.workspace?i.resolve(n.workspace):a.cwd(),f=e||`list`;if(f===`list`||f===`remote`){let e=f===`remote`||!!(n.remote||n.all||n.huggingface),i=await v(u),s=i?.config?.agent?.defaultModel||i?.config?.settings?.defaultModel||l;if(e){n.quiet||a.stdout.write(`
25
+ `),P)return a.exitCode=1,{success:!1,error:P};if(N&&typeof s.saveMessage==`function`)try{await s.saveMessage(r,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:c,role:`assistant`,content:N,timestamp:Date.now()})}catch{}if(n.output&&N&&I.length===0){let e=d(i.resolve(n.output),N,`utf8`).then(()=>{n.quiet||a.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});I.push(e)}return await Promise.all(I),typeof s.setPostHandler==`function`&&s.setPostHandler(null),{success:!0,response:N,model:g,provider:p}}async function V(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:o,downloadLocalModel:s,fetchRemoteModels:c,DEFAULT_LOCAL_MODEL:l}=await import(`./chunk-C0vTb5Ur2.js`),u=n.workspace?i.resolve(n.workspace):a.cwd(),f=e||`list`;if(f===`list`||f===`remote`){let e=f===`remote`||!!(n.remote||n.all||n.huggingface),i=await v(u),s=i?.config?.agent?.defaultModel||i?.config?.settings?.defaultModel||l;if(e){n.quiet||a.stdout.write(`
26
26
  Fetching available ONNX models from Hugging Face (onnx-community)...
27
27
  `);let e=await c({cacheDir:n.cacheDir,query:n.query||(f===`remote`&&t?t:void 0)});if(!n.quiet)if(e.length===0)a.stdout.write(`No models found on Hugging Face or could not reach huggingface.co.
28
28
 
@@ -36,5 +36,5 @@ Curated Transformers.js Models (Local ONNX):
36
36
  `);for(let e of d){let t=e.id===s,n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;a.stdout.write(` • ${e.id}${r}${n}\n`),a.stdout.write(` Name: ${e.name}\n`),a.stdout.write(` Context: ${e.contextLength.toLocaleString()} tokens | Tools: ${e.supportsTools?`Yes`:`No`}\n`),a.stdout.write(` ${e.description}\n\n`)}a.stdout.write(`Curated Llamafile Models (Local Executable):
37
37
 
38
38
  `);for(let e of p){let t=e.fileName===s||e.id===s||s.endsWith(e.fileName),n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;a.stdout.write(` • ${e.fileName}${r}${n}\n`),a.stdout.write(` Name: ${e.name}\n`),a.stdout.write(` URL: ${e.url}\n`),a.stdout.write(` ${e.description}\n\n`)}a.stdout.write("Tip: Run `shadow-claw agent model list --remote` (or `shadow-claw agent model remote`) to browse all ONNX models from Hugging Face.\n\n")}return{success:!0,models:d,llamafileModels:p,defaultModel:s}}if(f===`download`){let e=t||n.model||l;n.verbose&&!n.quiet&&a.stderr.write(`Preparing to download model: ${e}\n`);let r=await s(e,{cacheDir:n.cacheDir,verbose:n.verbose,isTTY:n.isTTY,progress:n.progress!==!1&&!n.noProgress});return r.success||(a.exitCode=1),r}if(f===`set`){let e=t||n.model;if(!e){let e=`Error: Please specify a model ID to set as default.`;return n.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let r=await v(u),o=r?.configPath||i.join(u,`shadow-claw.config.json`),s=r?.config||{},c={...s,agent:{...s.agent||{},defaultModel:e}};return await d(o,JSON.stringify(c,null,2)+`
39
- `,`utf8`),n.quiet||a.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:o}}let p=`Unknown model action: "${f}". Available: list, download, set`;return n.quiet||console.error(p),a.exitCode=1,{success:!1,error:p}}async function V(e,t={}){let n=(e||``).trim();if(!n){let e=`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`;return t.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let{db:r,core:i}=await T(t),o=t.group||i.DEFAULT_SERVER_GROUP_ID||j,s=i.fetchDiscoveryManifest||(await import(`./chunk-BlNmgi3c2.js`)).fetchDiscoveryManifest,c=i.importRemoteArtifacts||(await import(`./chunk-Cbbk_aex2.js`)).importRemoteArtifacts,l=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let u;try{u=await s(n,l)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),a.exitCode=1,{success:!1,error:n}}let{manifest:d,siteUrl:f,manifestUrl:p}=u,m=d.tools||[],h=d.skills||[],g=d.scripts||[];t.quiet||console.log(`Discovered: ${d.name||`Remote Site`} (${h.length} skill${h.length===1?``:`s`}, ${m.length} tool${m.length===1?``:`s`}, ${g.length} script${g.length===1?``:`s`})`);let _=m.map(e=>e.name),v=h.map(e=>e.name),y=g.map(e=>e.name),b,x,S;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];b=e(t.tools),x=e(t.skills),S=e(t.scripts)}else b=_,x=v,S=y;let C=t.autoEnable!==!1,w=!!t.overwrite,E;try{E=await c(r,o,d,{toolNames:b,skillNames:x,scriptNames:S},{autoEnable:C,overwrite:w,fetchFn:l,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),a.exitCode=1,{success:!1,error:n}}let D=E.tools.filter(e=>e.status===`imported`),O=E.skills.filter(e=>e.status===`imported`),k=E.scripts.filter(e=>e.status===`imported`),A=E.tools.filter(e=>e.status===`skipped`),M=E.skills.filter(e=>e.status===`skipped`),N=E.scripts.filter(e=>e.status===`skipped`),P=E.tools.filter(e=>e.status===`failed`),F=E.skills.filter(e=>e.status===`failed`),I=E.scripts.filter(e=>e.status===`failed`),L=D.length+O.length+k.length,R=A.length+M.length+N.length,z=P.length+F.length+I.length;if(!t.quiet){console.log(`
40
- Importing artifacts:`);for(let e of[...E.tools,...E.skills,...E.scripts]){let t=E.tools.includes(e)?`tool`:E.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(z>0?`\nCompleted with ${z} error${z===1?``:`s`}. Successfully imported ${L} items, ${R} skipped.`:`\nSuccessfully imported ${L} item${L===1?``:`s`} (${D.length} tool${D.length===1?``:`s`}, ${O.length} skill${O.length===1?``:`s`}, ${k.length} script${k.length===1?``:`s`}).`)}let B=z===0||L>0;return B||(a.exitCode=1),{success:B,manifest:d,siteUrl:f,manifestUrl:p,result:E,importedCount:L,skippedCount:R,failedCount:z}}async function H(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:a.stdin.isTTY?null:await E({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await M({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=await N(i);if(e.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${e.skills.length}):\n`);for(let t of e.skills)console.log(` - ${t.name}: ${t.description||`No description`}`)}return e}case`tools`:{let e=r[0];if(e)return await F(e,r[1],i);let t=await P(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),a.exitCode=1;return}return await F(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),a.exitCode=1;return}return await I(e,i)}case`run`:return await z(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await B(e,t,i)}case`import`:{let e=r[0];return e?await V(e,i):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),a.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-DwEMut0N.js`);return t(e)}))({...i,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|listen> [args...]`)}}export{B as a,N as c,T as d,C as f,M as i,F as l,H as n,z as o,v as p,V as r,I as s,L as t,P as u};
39
+ `,`utf8`),n.quiet||a.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:o}}let p=`Unknown model action: "${f}". Available: list, download, set`;return n.quiet||console.error(p),a.exitCode=1,{success:!1,error:p}}async function H(e,t={}){let n=(e||``).trim();if(!n){let e=`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`;return t.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let{db:r,core:i}=await T(t),o=t.group||i.DEFAULT_SERVER_GROUP_ID||j,s=i.fetchDiscoveryManifest||(await import(`./chunk-D0sHV-Z82.js`)).fetchDiscoveryManifest,c=i.importRemoteArtifacts||(await import(`./chunk-CiHV_7H62.js`)).importRemoteArtifacts,l=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let u;try{u=await s(n,l)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),a.exitCode=1,{success:!1,error:n}}let{manifest:d,siteUrl:f,manifestUrl:p}=u,m=d.tools||[],h=d.skills||[],g=d.scripts||[];t.quiet||console.log(`Discovered: ${d.name||`Remote Site`} (${h.length} skill${h.length===1?``:`s`}, ${m.length} tool${m.length===1?``:`s`}, ${g.length} script${g.length===1?``:`s`})`);let _=m.map(e=>e.name),v=h.map(e=>e.name),y=g.map(e=>e.name),b,x,S;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];b=e(t.tools),x=e(t.skills),S=e(t.scripts)}else b=_,x=v,S=y;let C=t.autoEnable!==!1,w=!!t.overwrite,E;try{E=await c(r,o,d,{toolNames:b,skillNames:x,scriptNames:S},{autoEnable:C,overwrite:w,fetchFn:l,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),a.exitCode=1,{success:!1,error:n}}let D=E.tools.filter(e=>e.status===`imported`),O=E.skills.filter(e=>e.status===`imported`),k=E.scripts.filter(e=>e.status===`imported`),A=E.tools.filter(e=>e.status===`skipped`),M=E.skills.filter(e=>e.status===`skipped`),N=E.scripts.filter(e=>e.status===`skipped`),P=E.tools.filter(e=>e.status===`failed`),F=E.skills.filter(e=>e.status===`failed`),I=E.scripts.filter(e=>e.status===`failed`),L=D.length+O.length+k.length,R=A.length+M.length+N.length,z=P.length+F.length+I.length;if(!t.quiet){console.log(`
40
+ Importing artifacts:`);for(let e of[...E.tools,...E.skills,...E.scripts]){let t=E.tools.includes(e)?`tool`:E.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(z>0?`\nCompleted with ${z} error${z===1?``:`s`}. Successfully imported ${L} items, ${R} skipped.`:`\nSuccessfully imported ${L} item${L===1?``:`s`} (${D.length} tool${D.length===1?``:`s`}, ${O.length} skill${O.length===1?``:`s`}, ${k.length} script${k.length===1?``:`s`}).`)}let B=z===0||L>0;return B||(a.exitCode=1),{success:B,manifest:d,siteUrl:f,manifestUrl:p,result:E,importedCount:L,skippedCount:R,failedCount:z}}async function U(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:a.stdin.isTTY?null:await E({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await M({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=await N(i);if(e.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${e.skills.length}):\n`);for(let t of e.skills)console.log(` - ${t.name}: ${t.description||`No description`}`)}return e}case`tools`:{let e=r[0];if(e)return await F(e,r[1],i);let t=await P(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),a.exitCode=1;return}return await F(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),a.exitCode=1;return}return await L(e,i)}case`clear`:return await I(i);case`run`:return await B(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await V(e,t,i)}case`import`:{let e=r[0];return e?await H(e,i):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),a.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-IGlHHKOH.js`);return t(e)}))({...i,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|clear|listen> [args...]`)}}export{M as a,L as c,P as d,T as f,H as i,N as l,v as m,I as n,V as o,C as p,U as r,B as s,R as t,F as u};
@@ -1,2 +1,2 @@
1
- import{r as e}from"./chunk-BQCWtrzh.js";import{T as t,h as n,r}from"./chunk-Jiq-cxA5.js";import"./chunk-DFLqhyP_.js";import{t as i}from"./chunk-Dhh0lHO6.js";import{a}from"./chunk-BK1G-2UN.js";import{t as o}from"./chunk-CbhVal4Q.js";async function s(e,...t){let n=e;for(let e of t){let t=await n.getDirectoryHandle(e,{create:!0});if(typeof n.isSameEntry==`function`&&await n.isSameEntry(t))throw Error(`Directory navigation failed: "${e}" resolved to the same directory as its parent. The stored directory handle may be stale — try re-selecting the storage folder.`);n=t}return n}let c=null;async function l(e,t){try{return await e.entries().next(),`granted`}catch{return t}}function u(){let e=t();return e?`${n}-${e}`:n}async function d(){try{if(typeof navigator<`u`&&navigator.storage&&typeof navigator.storage.getDirectory==`function`){let e=await navigator.storage.getDirectory(),t=u();return await e.getDirectoryHandle(t,{create:!0})}}catch(e){console.warn(`OPFS is unavailable (e.g. Firefox Private Browsing). Using in-memory storage fallback:`,e)}return a()}function f(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`}async function p(e){if(c)return c;try{let t=await i(e,r.STORAGE_HANDLE);if(f(t)){let e=t;if(typeof e.queryPermission==`function`&&await e.queryPermission({mode:`readwrite`})!==`granted`&&typeof e.requestPermission==`function`)try{await e.requestPermission({mode:`readwrite`})}catch{}return e}}catch(e){console.warn(`Failed to retrieve local storage handle from DB:`,e)}return d()}function m(e){c=e}function h(){c=null}function g(e){return e instanceof DOMException&&e.name===`InvalidStateError`}async function _(e){if(c)try{let e=await c.queryPermission({mode:`readwrite`});return{type:`local`,permission:e===`granted`?`granted`:await l(c,e),name:c.name}}catch{console.warn(`Getting storage status failed for explicit storage root.`)}try{let t=await i(e,r.STORAGE_HANDLE);if(f(t)){let e=t,n=await e.queryPermission({mode:`readwrite`});return{type:`local`,permission:n===`granted`?`granted`:await l(e,n),name:e.name}}}catch(e){console.warn(`Failed to check storage status:`,e)}return{type:`opfs`,permission:`granted`,name:`OPFS`}}async function v(t,n){let r=await p(t);return e()?r:s(r,`groups`,n.replace(/:/g,`-`))}function y(e){let t=e.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);if(t.length===0)throw Error(`Empty file path`);let n=t.pop();if(t.some(e=>e===`..`||e===`.`)||n===`..`||n===`.`){let t=Error(`SecurityError: Path traversal is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return{dirs:t,filename:n||``}}async function b(e,t){let n=e?.createWritable,r=Reflect.get(e,`createWriteable`),i=typeof n==`function`?n.bind(e):typeof r==`function`?r.bind(e):null;if(i){let e=await i();await e.write(S(t)),await e.close();return}if(typeof e.createSyncAccessHandle==`function`){let n=await e.createSyncAccessHandle();try{let e=await C(t);n.truncate(0),n.write(e,{at:0}),typeof n.flush==`function`&&n.flush()}finally{n.close()}return}throw Error(`Writable file streams are not supported by this browser/storage backend.`)}async function x(e,t){if(typeof globalThis.Worker!=`function`)throw Error(`Writable file streams are not supported by this browser/storage backend.`);let n=await C(t);return new Promise((t,r)=>{let i=``,a=null;try{let e=[`self.onmessage = async (e) => {`,` try {`,` const { pathSegments, bytes } = e.data;`,` let dir = await navigator.storage.getDirectory();`,` for (let i = 0; i < pathSegments.length - 1; i++) {`,` dir = await dir.getDirectoryHandle(pathSegments[i], { create: true });`,` }`,` const filename = pathSegments[pathSegments.length - 1];`,` const fh = await dir.getFileHandle(filename, { create: true });`,` const h = await fh.createSyncAccessHandle();`,` try {`,` h.truncate(0);`,` h.write(bytes, { at: 0 });`,` if (typeof h.flush === 'function') h.flush();`,` } finally { h.close(); }`,` self.postMessage({ ok: true });`,` } catch (err) {`,` self.postMessage({ error: err.message || String(err) });`,` }`,`};`].join(`
1
+ import{r as e}from"./chunk-BQCWtrzh.js";import{T as t,h as n,r}from"./chunk-Jiq-cxA5.js";import"./chunk-D0jQVYRk.js";import{t as i}from"./chunk-CKksk-lA.js";import{a}from"./chunk-BK1G-2UN.js";import{t as o}from"./chunk-Do2xLVwC.js";async function s(e,...t){let n=e;for(let e of t){let t=await n.getDirectoryHandle(e,{create:!0});if(typeof n.isSameEntry==`function`&&await n.isSameEntry(t))throw Error(`Directory navigation failed: "${e}" resolved to the same directory as its parent. The stored directory handle may be stale — try re-selecting the storage folder.`);n=t}return n}let c=null;async function l(e,t){try{return await e.entries().next(),`granted`}catch{return t}}function u(){let e=t();return e?`${n}-${e}`:n}async function d(){try{if(typeof navigator<`u`&&navigator.storage&&typeof navigator.storage.getDirectory==`function`){let e=await navigator.storage.getDirectory(),t=u();return await e.getDirectoryHandle(t,{create:!0})}}catch(e){console.warn(`OPFS is unavailable (e.g. Firefox Private Browsing). Using in-memory storage fallback:`,e)}return a()}function f(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`}async function p(e){if(c)return c;try{let t=await i(e,r.STORAGE_HANDLE);if(f(t)){let e=t;if(typeof e.queryPermission==`function`&&await e.queryPermission({mode:`readwrite`})!==`granted`&&typeof e.requestPermission==`function`)try{await e.requestPermission({mode:`readwrite`})}catch{}return e}}catch(e){console.warn(`Failed to retrieve local storage handle from DB:`,e)}return d()}function m(e){c=e}function h(){c=null}function g(e){return e instanceof DOMException&&e.name===`InvalidStateError`}async function _(e){if(c)try{let e=await c.queryPermission({mode:`readwrite`});return{type:`local`,permission:e===`granted`?`granted`:await l(c,e),name:c.name}}catch{console.warn(`Getting storage status failed for explicit storage root.`)}try{let t=await i(e,r.STORAGE_HANDLE);if(f(t)){let e=t,n=await e.queryPermission({mode:`readwrite`});return{type:`local`,permission:n===`granted`?`granted`:await l(e,n),name:e.name}}}catch(e){console.warn(`Failed to check storage status:`,e)}return{type:`opfs`,permission:`granted`,name:`OPFS`}}async function v(t,n){let r=await p(t);return e()?r:s(r,`groups`,n.replace(/:/g,`-`))}function y(e){let t=e.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);if(t.length===0)throw Error(`Empty file path`);let n=t.pop();if(t.some(e=>e===`..`||e===`.`)||n===`..`||n===`.`){let t=Error(`SecurityError: Path traversal is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return{dirs:t,filename:n||``}}async function b(e,t){let n=e?.createWritable,r=Reflect.get(e,`createWriteable`),i=typeof n==`function`?n.bind(e):typeof r==`function`?r.bind(e):null;if(i){let e=await i();await e.write(S(t)),await e.close();return}if(typeof e.createSyncAccessHandle==`function`){let n=await e.createSyncAccessHandle();try{let e=await C(t);n.truncate(0),n.write(e,{at:0}),typeof n.flush==`function`&&n.flush()}finally{n.close()}return}throw Error(`Writable file streams are not supported by this browser/storage backend.`)}async function x(e,t){if(typeof globalThis.Worker!=`function`)throw Error(`Writable file streams are not supported by this browser/storage backend.`);let n=await C(t);return new Promise((t,r)=>{let i=``,a=null;try{let e=[`self.onmessage = async (e) => {`,` try {`,` const { pathSegments, bytes } = e.data;`,` let dir = await navigator.storage.getDirectory();`,` for (let i = 0; i < pathSegments.length - 1; i++) {`,` dir = await dir.getDirectoryHandle(pathSegments[i], { create: true });`,` }`,` const filename = pathSegments[pathSegments.length - 1];`,` const fh = await dir.getFileHandle(filename, { create: true });`,` const h = await fh.createSyncAccessHandle();`,` try {`,` h.truncate(0);`,` h.write(bytes, { at: 0 });`,` if (typeof h.flush === 'function') h.flush();`,` } finally { h.close(); }`,` self.postMessage({ ok: true });`,` } catch (err) {`,` self.postMessage({ error: err.message || String(err) });`,` }`,`};`].join(`
2
2
  `);i=URL.createObjectURL(new Blob([e],{type:`text/javascript`})),a=new Worker(o(i))}catch{i&&URL.revokeObjectURL(i),r(Error(`Writable file streams are not supported by this browser/storage backend.`));return}let s=()=>{a&&a.terminate(),URL.revokeObjectURL(i)};a.onmessage=e=>{s(),e.data?.error?r(Error(e.data.error)):t()},a.onerror=e=>{s(),r(Error(e.message||`Worker file write failed`))},a.postMessage({pathSegments:e,bytes:n},[n.buffer])})}function S(e){if(typeof e==`string`||e instanceof Blob)return e;if(e instanceof Uint8Array){let t=new Uint8Array(e.byteLength);return t.set(e),new Blob([t])}return new Blob([e])}async function C(e){return e instanceof Uint8Array?e:typeof e==`string`?new TextEncoder().encode(e):e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array}export{u as a,h as c,v as i,g as l,x as n,p as o,y as r,_ as s,b as t,m as u};
@@ -1,3 +1,3 @@
1
- import{a as e,n as t,o as n,r}from"./chunk-DHi40kQk.js";import{n as i}from"./chunk-CpoiOFRV.js";import a from"node:fs";import o from"node:path";import s from"process";import{Buffer as c}from"buffer";import l from"node:http";import{tmpdir as u}from"node:os";function d(e={}){let t=e.agent!==!1,n;if(e.workspace)n=o.resolve(e.workspace);else{let e=o.join(u(),`shadow-claw`);a.mkdirSync(e,{recursive:!0}),n=a.mkdtempSync(o.join(e,`workspace-`))}let r=e.transfersDir||o.join(n,`transfers`),s={"send-message":async(n,r)=>{let i=n?.text??n?.prompt??n?.message;if(!i||typeof i!=`string`||!i.trim())throw Error(`Missing text or prompt parameter`);let a=r?.remotePeerId||`remote`,o=n.groupId||`peer:${a}`;if(!t)return e.verbose&&console.log(`[webrtc-listen] Message received from ${a} (agent disabled): "${i.trim()}"`),{success:!0,queued:!0,groupId:o,text:`Message received (agent disabled)`};e.verbose&&console.log(`[webrtc-listen] Prompt from ${a}: "${i.length>80?i.slice(0,77)+`...`:i}"`);let s=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-BXNdnbwK.js`);return n(e,t)}))(i.trim(),{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:o,quiet:!e.verbose,stream:!1});if(!s?.success)throw Error(s?.error||`Agent execution failed`);return{success:!0,reply:s.response,text:s.response,model:s.model,provider:s.provider,groupId:o}},prompt:async(e,t)=>s[`send-message`](e,t),"send-file":async(n,s)=>{let{fileName:l,data:u,prompt:d,groupId:f}=n||{};if(!l||typeof l!=`string`||!u)throw Error(`Missing fileName or data in send-file args`);let p=i(l);await a.promises.mkdir(r,{recursive:!0});let m=o.join(r,p),h=c.isBuffer(u)?u:c.from(u,`base64`);await a.promises.writeFile(m,h);let g=s?.remotePeerId||`remote`,_=f||`peer:${g}`;e.verbose&&console.log(`[webrtc-listen] Saved file "${p}" (${h.length} bytes) to ${m}`);let v;if(d&&typeof d==`string`&&d.trim()&&t){let t=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-BXNdnbwK.js`);return n(e,t)}))(`[Attached file: ${p} (${h.length} bytes) saved at ${m}]\n\n${d.trim()}`,{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:_,quiet:!e.verbose,stream:!1});t?.success&&(v=t.response)}return{success:!0,fileName:p,path:m,size:h.length,reply:v,text:v}},"transfer-file":async(e,t)=>s[`send-file`](e,t),"list-tools":async()=>{try{let{TOOL_DEFINITIONS:e}=await import(`./chunk-C0xoMqcL2.js`);return{tools:e.map(e=>e.name)}}catch{return{tools:[]}}},ping:async t=>({ok:!0,peerId:e.peerId||``,timestamp:Date.now()})};return s}function f(t,n){return new Promise((r,i)=>{let s=e(n);try{a.unlinkSync(s)}catch{}try{a.mkdirSync(o.dirname(s),{recursive:!0})}catch{}let c=l.createServer(async(e,n)=>{if(e.method===`GET`&&e.url===`/ping`){n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,peerId:t.cliPeerId}));return}if(e.method===`GET`&&e.url===`/clients`){let e=Array.from(t._connections.keys()).map(e=>{let n=t._peerCards?.get(e);return{clientId:e,peerId:e,deviceLabel:n?.name||`Browser Peer (${e})`,capabilities:n?.capabilities||[`webrtc`,`peerjs`],version:n?.version||`1.0.0`,transport:`webrtc`,connectedAt:Date.now(),lastSeen:Date.now()}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,clients:e}));return}if(e.method===`POST`&&e.url===`/command`){let r=``;e.on(`data`,e=>r+=e),e.on(`end`,async()=>{try{let{targetPeerId:e,action:i,args:a,timeoutMs:o}=JSON.parse(r);if(!e){n.writeHead(400,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`targetPeerId is required`}));return}let s=t._connections.get(e);if(!s){let r=Array.from(t._connections.keys());n.writeHead(503,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`No DataChannel open to peer "${e}". Make sure the browser has connected to this listener first.`+(r.length?` Connected peers: ${r.join(`, `)}`:` No peers are currently connected.`)}));return}let c=`${Date.now()}-${Math.random().toString(36).slice(2)}`,l={id:c,type:`command:execute`,payload:{commandId:c,action:i,args:a||{}}},u=await new Promise((e,n)=>{let r=setTimeout(()=>{t._pendingIpc.delete(c),n(Error(`Command "${i}" timed out after ${o||3e4}ms`))},o||3e4);t._pendingIpc.set(c,t=>{clearTimeout(r),e(t)});try{s.send(l)}catch(e){clearTimeout(r),t._pendingIpc.delete(c),n(e)}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify(u))}catch(e){n.writeHead(500,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:e.message}))}});return}n.writeHead(404),n.end()});c.listen(s,()=>{console.log(`[webrtc-listen] IPC socket: ${s}`),r(c)}),c.on(`error`,i)})}async function p(e={}){let i=e.host||s.env.SHADOWCLAW_HOST||`127.0.0.1`,a=e.port?parseInt(String(e.port),10):parseInt(s.env.SHADOWCLAW_PORT||`8888`,10),o=e.path||`/`,c=!!(e.secure||e.https||[`1`,`true`,`yes`].includes((s.env.SHADOWCLAW_HTTPS||``).toLowerCase().trim())),l=!!(e.insecure===!1||[`0`,`false`,`no`].includes((s.env.SHADOWCLAW_TLS_REJECT_UNAUTHORIZED||``).toLowerCase().trim())),u=e.trustedPeer?Array.isArray(e.trustedPeer)?e.trustedPeer:[e.trustedPeer]:[],p=n(e.peerId,e.cacheDir);console.log(`WebRTC CLI Peer ID : ${p}`),console.log(`Signaling server : ${c?`wss`:`ws`}://${i}:${a}${o}`),c&&!l&&console.log(`TLS verification : disabled (self-signed cert allowed)`),u.length>0?console.log(`Trusted peers : ${u.join(`, `)}`):console.log(`Trusted peers : (any — add --trusted-peer <id> to restrict)`),console.log(``),console.log(`Add this CLI Peer ID as a trusted peer in the browser:`),console.log(` Settings → WebRTC/PeerJS → Trusted Peer IDs → "${p}"`),console.log(``);let m={...d({...e,peerId:p}),...e.handlers||{}},h=new t({host:i,port:a,path:o,secure:c,rejectUnauthorized:l,trustedPeerIds:u,peerId:e.peerId,cacheDir:e.cacheDir,renewPeerId:!!e.renewPeerId,verbose:!!e.verbose,handlers:m}),g=new Map;h._pendingIpc=g;let _=h._setupConnection.bind(h);h._setupConnection=function(e,t){_(e,t),e.on(`data`,e=>{let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return}if(!(!t||typeof t!=`object`)&&t.type===`command:result`){let e=t.payload||{},n=g.get(e.commandId);n&&(g.delete(e.commandId),n(e))}})};let v=t=>{if(console.log(`
1
+ import{a as e,n as t,o as n,r}from"./chunk-DHi40kQk.js";import{n as i}from"./chunk-BQyGyg86.js";import a from"node:fs";import o from"node:path";import s from"process";import{Buffer as c}from"buffer";import l from"node:http";import{tmpdir as u}from"node:os";function d(e={}){let t=e.agent!==!1,n;if(e.workspace)n=o.resolve(e.workspace);else{let e=o.join(u(),`shadow-claw`);a.mkdirSync(e,{recursive:!0}),n=a.mkdtempSync(o.join(e,`workspace-`))}let r=e.transfersDir||o.join(n,`transfers`),s={"send-message":async(n,r)=>{let i=n?.text??n?.prompt??n?.message;if(!i||typeof i!=`string`||!i.trim())throw Error(`Missing text or prompt parameter`);let a=r?.remotePeerId||`remote`,o=n.groupId||`peer:${a}`;if(!t)return e.verbose&&console.log(`[webrtc-listen] Message received from ${a} (agent disabled): "${i.trim()}"`),{success:!0,queued:!0,groupId:o,text:`Message received (agent disabled)`};e.verbose&&console.log(`[webrtc-listen] Prompt from ${a}: "${i.length>80?i.slice(0,77)+`...`:i}"`);let s=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-CKm7-SCu.js`);return n(e,t)}))(i.trim(),{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:o,quiet:!e.verbose,stream:!1});if(!s?.success)throw Error(s?.error||`Agent execution failed`);return{success:!0,reply:s.response,text:s.response,model:s.model,provider:s.provider,groupId:o}},prompt:async(e,t)=>s[`send-message`](e,t),"send-file":async(n,s)=>{let{fileName:l,data:u,prompt:d,groupId:f}=n||{};if(!l||typeof l!=`string`||!u)throw Error(`Missing fileName or data in send-file args`);let p=i(l);await a.promises.mkdir(r,{recursive:!0});let m=o.join(r,p),h=c.isBuffer(u)?u:c.from(u,`base64`);await a.promises.writeFile(m,h);let g=s?.remotePeerId||`remote`,_=f||`peer:${g}`;e.verbose&&console.log(`[webrtc-listen] Saved file "${p}" (${h.length} bytes) to ${m}`);let v;if(d&&typeof d==`string`&&d.trim()&&t){let t=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-CKm7-SCu.js`);return n(e,t)}))(`[Attached file: ${p} (${h.length} bytes) saved at ${m}]\n\n${d.trim()}`,{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:_,quiet:!e.verbose,stream:!1});t?.success&&(v=t.response)}return{success:!0,fileName:p,path:m,size:h.length,reply:v,text:v}},"transfer-file":async(e,t)=>s[`send-file`](e,t),"list-tools":async()=>{try{let{TOOL_DEFINITIONS:e}=await import(`./chunk-C0xoMqcL2.js`);return{tools:e.map(e=>e.name)}}catch{return{tools:[]}}},ping:async t=>({ok:!0,peerId:e.peerId||``,timestamp:Date.now()})};return s}function f(t,n){return new Promise((r,i)=>{let s=e(n);try{a.unlinkSync(s)}catch{}try{a.mkdirSync(o.dirname(s),{recursive:!0})}catch{}let c=l.createServer(async(e,n)=>{if(e.method===`GET`&&e.url===`/ping`){n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,peerId:t.cliPeerId}));return}if(e.method===`GET`&&e.url===`/clients`){let e=Array.from(t._connections.keys()).map(e=>{let n=t._peerCards?.get(e);return{clientId:e,peerId:e,deviceLabel:n?.name||`Browser Peer (${e})`,capabilities:n?.capabilities||[`webrtc`,`peerjs`],version:n?.version||`1.0.0`,transport:`webrtc`,connectedAt:Date.now(),lastSeen:Date.now()}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,clients:e}));return}if(e.method===`POST`&&e.url===`/command`){let r=``;e.on(`data`,e=>r+=e),e.on(`end`,async()=>{try{let{targetPeerId:e,action:i,args:a,timeoutMs:o}=JSON.parse(r);if(!e){n.writeHead(400,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`targetPeerId is required`}));return}let s=t._connections.get(e);if(!s){let r=Array.from(t._connections.keys());n.writeHead(503,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`No DataChannel open to peer "${e}". Make sure the browser has connected to this listener first.`+(r.length?` Connected peers: ${r.join(`, `)}`:` No peers are currently connected.`)}));return}let c=`${Date.now()}-${Math.random().toString(36).slice(2)}`,l={id:c,type:`command:execute`,payload:{commandId:c,action:i,args:a||{}}},u=await new Promise((e,n)=>{let r=setTimeout(()=>{t._pendingIpc.delete(c),n(Error(`Command "${i}" timed out after ${o||3e4}ms`))},o||3e4);t._pendingIpc.set(c,t=>{clearTimeout(r),e(t)});try{s.send(l)}catch(e){clearTimeout(r),t._pendingIpc.delete(c),n(e)}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify(u))}catch(e){n.writeHead(500,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:e.message}))}});return}n.writeHead(404),n.end()});c.listen(s,()=>{console.log(`[webrtc-listen] IPC socket: ${s}`),r(c)}),c.on(`error`,i)})}async function p(e={}){let i=e.host||s.env.SHADOWCLAW_HOST||`127.0.0.1`,a=e.port?parseInt(String(e.port),10):parseInt(s.env.SHADOWCLAW_PORT||`8888`,10),o=e.path||`/`,c=!!(e.secure||e.https||[`1`,`true`,`yes`].includes((s.env.SHADOWCLAW_HTTPS||``).toLowerCase().trim())),l=!!(e.insecure===!1||[`0`,`false`,`no`].includes((s.env.SHADOWCLAW_TLS_REJECT_UNAUTHORIZED||``).toLowerCase().trim())),u=e.trustedPeer?Array.isArray(e.trustedPeer)?e.trustedPeer:[e.trustedPeer]:[],p=n(e.peerId,e.cacheDir);console.log(`WebRTC CLI Peer ID : ${p}`),console.log(`Signaling server : ${c?`wss`:`ws`}://${i}:${a}${o}`),c&&!l&&console.log(`TLS verification : disabled (self-signed cert allowed)`),u.length>0?console.log(`Trusted peers : ${u.join(`, `)}`):console.log(`Trusted peers : (any — add --trusted-peer <id> to restrict)`),console.log(``),console.log(`Add this CLI Peer ID as a trusted peer in the browser:`),console.log(` Settings → WebRTC/PeerJS → Trusted Peer IDs → "${p}"`),console.log(``);let m={...d({...e,peerId:p}),...e.handlers||{}},h=new t({host:i,port:a,path:o,secure:c,rejectUnauthorized:l,trustedPeerIds:u,peerId:e.peerId,cacheDir:e.cacheDir,renewPeerId:!!e.renewPeerId,verbose:!!e.verbose,handlers:m}),g=new Map;h._pendingIpc=g;let _=h._setupConnection.bind(h);h._setupConnection=function(e,t){_(e,t),e.on(`data`,e=>{let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return}if(!(!t||typeof t!=`object`)&&t.type===`command:result`){let e=t.payload||{},n=g.get(e.commandId);n&&(g.delete(e.commandId),n(e))}})};let v=t=>{if(console.log(`
2
2
  [webrtc-listen] Shutting down…`),r(e.cacheDir),t)try{t.close()}catch{}h.close(),s.exit(0)};try{await h.start();let t=await f(h,e.cacheDir);s.on(`SIGINT`,()=>v(t)),s.on(`SIGTERM`,()=>v(t)),console.log(`[webrtc-listen] Ready. Run commands with:
3
3
  node bin/cli.mjs send --transport webrtc --client <browser-peer-id> "message"`),await new Promise(()=>{})}catch(t){r(e.cacheDir),console.error(`Error starting WebRTC listener: ${t.message}`),s.exitCode=1}}export{p as n,f as r,d as t};
@@ -1,4 +1,4 @@
1
- import{i as e}from"./chunk-BTe1dZD0.js";import{t}from"./chunk-BN0tqRNn.js";import{t as n}from"./chunk-Cweo3Jpw.js";import r from"node:fs";import i from"node:path";import a from"node:process";import{access as o,constants as s,mkdir as c,mkdtemp as l,readFile as u,writeFile as d}from"node:fs/promises";import{tmpdir as f}from"node:os";import p from"node:readline/promises";import m from"node:tty";function h(){let e=a.emitWarning;if(!e||e.__suppressed)return;let t=function(t,...n){if(!(typeof t==`string`&&(n[0]===`ExperimentalWarning`||t.includes(`ExperimentalWarning`)||t.includes(`SQLite`)))&&!(t&&typeof t==`object`&&(t.name===`ExperimentalWarning`||typeof t.message==`string`&&t.message.includes(`SQLite`))))return e.call(a,t,...n)};t.__suppressed=!0,a.emitWarning=t}h();const g=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function _(e){try{return await o(e,s.F_OK),!0}catch{return!1}}async function v(e,t){let n=[];if(e&&n.push(i.resolve(e)),t){let e=i.resolve(t);n.includes(e)||n.push(e)}if(e&&i.basename(i.resolve(e))===`.cache`){let t=i.dirname(i.resolve(e));n.includes(t)||n.push(t)}for(let e of n)for(let t of g){let n=i.join(e,t);if(await _(n))try{let e=await u(n,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:n,config:t}}catch{}}return null}function y(){return i.join(f(),`shadow-claw`)}function b(e){let t=i.resolve(e||a.cwd()),n=[i.join(t,`shadow-claw-config.json`),i.join(t,`shadow-claw.config.json`),i.join(t,`shadowclaw.config.json`),i.join(t,`pages`,`shadow-claw-config.json`),i.join(t,`pages`,`shadow-claw.config.json`),i.join(t,`site-config.json`),i.join(t,`pages`,`site-config.json`)];for(let e of n)if(r.existsSync(e))try{let n=r.readFileSync(e,`utf8`),a=JSON.parse(n);if(a&&typeof a.cacheDir==`string`&&a.cacheDir.trim())return i.resolve(t,a.cacheDir.trim());if(a&&a.server&&typeof a.server.cacheDir==`string`&&a.server.cacheDir.trim())return i.resolve(t,a.server.cacheDir.trim())}catch{}return null}function x(e,t=`.cache`){let n=i.resolve(e||a.cwd()),o=i.join(n,t),s=i.join(o,`database`),c=[o,i.join(o,`control-token.json`),i.join(o,`cli-peer-id`),s,i.join(s,`clients.db`),i.join(s,`agent.db`),i.join(s,`scheduled-tasks.db`),i.join(s,`push-subscriptions.db`),i.join(n,`database`,`clients.db`),i.join(n,`database`,`agent.db`)];for(let e of c)if(r.existsSync(e))return!0;return!1}async function S({contentRoot:e,stdin:t=a.stdin,stdout:n=a.stdout,onExit:o=e=>a.exit(e)}={}){let s=i.resolve(e||a.cwd()),c=i.join(s,`.cache`),l=y(),u=t,d=n,f=!1,h=null;if(t===a.stdin&&!a.stdin.isTTY&&!a.env.CI&&(a.stderr.isTTY||a.stdout.isTTY))try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;h=r.openSync(e,`r`),u=new m.ReadStream(h),d=a.stderr.isTTY?a.stderr:a.stdout,f=!0}catch{try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;u=r.createReadStream(e),d=a.stderr.isTTY?a.stderr:a.stdout,f=!0}catch{}}let g=p.createInterface({input:u,output:d}),_=!1,v=()=>{if(!_){_=!0,d.write(`
1
+ import{i as e}from"./chunk-DoVkBeQv.js";import{t}from"./chunk-NclDuGcY.js";import{t as n}from"./chunk-B5hVBRV-.js";import r from"node:fs";import i from"node:path";import a from"node:process";import{access as o,constants as s,mkdir as c,mkdtemp as l,readFile as u,writeFile as d}from"node:fs/promises";import{tmpdir as f}from"node:os";import p from"node:readline/promises";import m from"node:tty";function h(){let e=a.emitWarning;if(!e||e.__suppressed)return;let t=function(t,...n){if(!(typeof t==`string`&&(n[0]===`ExperimentalWarning`||t.includes(`ExperimentalWarning`)||t.includes(`SQLite`)))&&!(t&&typeof t==`object`&&(t.name===`ExperimentalWarning`||typeof t.message==`string`&&t.message.includes(`SQLite`))))return e.call(a,t,...n)};t.__suppressed=!0,a.emitWarning=t}h();const g=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function _(e){try{return await o(e,s.F_OK),!0}catch{return!1}}async function v(e,t){let n=[];if(e&&n.push(i.resolve(e)),t){let e=i.resolve(t);n.includes(e)||n.push(e)}if(e&&i.basename(i.resolve(e))===`.cache`){let t=i.dirname(i.resolve(e));n.includes(t)||n.push(t)}for(let e of n)for(let t of g){let n=i.join(e,t);if(await _(n))try{let e=await u(n,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:n,config:t}}catch{}}return null}function y(){return i.join(f(),`shadow-claw`)}function b(e){let t=i.resolve(e||a.cwd()),n=[i.join(t,`shadow-claw-config.json`),i.join(t,`shadow-claw.config.json`),i.join(t,`shadowclaw.config.json`),i.join(t,`pages`,`shadow-claw-config.json`),i.join(t,`pages`,`shadow-claw.config.json`),i.join(t,`site-config.json`),i.join(t,`pages`,`site-config.json`)];for(let e of n)if(r.existsSync(e))try{let n=r.readFileSync(e,`utf8`),a=JSON.parse(n);if(a&&typeof a.cacheDir==`string`&&a.cacheDir.trim())return i.resolve(t,a.cacheDir.trim());if(a&&a.server&&typeof a.server.cacheDir==`string`&&a.server.cacheDir.trim())return i.resolve(t,a.server.cacheDir.trim())}catch{}return null}function x(e,t=`.cache`){let n=i.resolve(e||a.cwd()),o=i.join(n,t),s=i.join(o,`database`),c=[o,i.join(o,`control-token.json`),i.join(o,`cli-peer-id`),s,i.join(s,`clients.db`),i.join(s,`agent.db`),i.join(s,`scheduled-tasks.db`),i.join(s,`push-subscriptions.db`),i.join(n,`database`,`clients.db`),i.join(n,`database`,`agent.db`)];for(let e of c)if(r.existsSync(e))return!0;return!1}async function S({contentRoot:e,stdin:t=a.stdin,stdout:n=a.stdout,onExit:o=e=>a.exit(e)}={}){let s=i.resolve(e||a.cwd()),c=i.join(s,`.cache`),l=y(),u=t,d=n,f=!1,h=null;if(t===a.stdin&&!a.stdin.isTTY&&!a.env.CI&&(a.stderr.isTTY||a.stdout.isTTY))try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;h=r.openSync(e,`r`),u=new m.ReadStream(h),d=a.stderr.isTTY?a.stderr:a.stdout,f=!0}catch{try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;u=r.createReadStream(e),d=a.stderr.isTTY?a.stderr:a.stdout,f=!0}catch{}}let g=p.createInterface({input:u,output:d}),_=!1,v=()=>{if(!_){_=!0,d.write(`
2
2
  Operation cancelled.
3
3
  `);try{g.close()}catch{}o(130)}};g.on(`SIGINT`,v),u&&typeof u.on==`function`&&u!==a.stdin&&u.on(`SIGINT`,v);let b=()=>v();a.on(`SIGINT`,b);let x=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&v()};u&&typeof u.on==`function`&&u.on(`data`,x);try{d.write(`
4
4
  ShadowClaw needs a directory to store cache and database files:
@@ -11,18 +11,18 @@ ShadowClaw needs a directory to store cache and database files:
11
11
  `),n.write(`Tip: You can pass --tmp, --cache-dir <dir>, set SHADOWCLAW_TMP=1, SHADOWCLAW_CACHE_DIR=<dir>, or configure "cacheDir" in shadow-claw.config.json to skip this prompt.
12
12
 
13
13
  `);let e=(await g.question(`Enter choice [1-3] or a directory path (default: 1): `)).trim();if(!e||e===`1`||e.toLowerCase()===`y`||e.toLowerCase()===`yes`)return n.write(`Using current directory cache: ${c}\n\n`),c;if(e===`2`||e.toLowerCase()===`tmp`||e.toLowerCase()===`temp`||e.toLowerCase()===`t`)return n.write(`Using temporary directory: ${l}\n\n`),l;if(e.toLowerCase()===`n`||e.toLowerCase()===`no`){let e=(await g.question(`Use temporary directory (${l}) instead? (Y/n): `)).trim();return e.toLowerCase()===`n`||e.toLowerCase()===`no`?(n.write(`Operation cancelled.
14
- `),o(0),l):(n.write(`Using temporary directory: ${l}\n\n`),l)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await g.question(`Enter custom directory path: `)).trim();if(!e)return n.write(`Using current directory cache: ${c}\n\n`),c;let t=i.resolve(s,e);return n.write(`Using custom directory: ${t}\n\n`),t}let t=i.resolve(s,e);return d.write(`Using directory: ${t}\n\n`),t}finally{a.removeListener(`SIGINT`,b),u&&typeof u.removeListener==`function`&&(u!==a.stdin&&u.removeListener(`SIGINT`,v),u.removeListener(`data`,x));try{g.close()}catch{}if(f){if(u&&typeof u.destroy==`function`)try{u.destroy()}catch{}if(h!=null)try{r.closeSync(h)}catch{}}}}async function C(e={}){let t=i.resolve(e.contentRoot||a.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((a.env.SHADOWCLAW_TMP||a.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let n=y();return{cacheDir:n,databaseDir:e.databaseDir?i.resolve(t,e.databaseDir):i.join(n,`database`)}}let n=(e.cacheDir||a.env.SHADOWCLAW_CACHE_DIR||``).trim();if(n){let r=i.resolve(t,n);return{cacheDir:r,databaseDir:e.databaseDir?i.resolve(t,e.databaseDir):i.join(r,`database`)}}let r=(e.databaseDir||a.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(r){let e=i.resolve(t,r);return{cacheDir:i.basename(e)===`database`?i.dirname(e):i.resolve(e,`..`),databaseDir:e}}let o=b(t);if(o)return{cacheDir:o,databaseDir:i.join(o,`database`)};let s=x(t),c=i.join(t,`.cache`),l=i.join(c,`database`);if(s||e.yes||e.y||[`1`,`true`,`yes`].includes((a.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:c,databaseDir:l};let u=e.stdin?!!e.stdin.isTTY:!!a.stdin.isTTY,d=!e.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),f=e.isTTY===void 0?u||d:!!e.isTTY,p=e.isCI===void 0?e.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!e.isCI;if(!f||p||e.quiet)return{cacheDir:c,databaseDir:l};let m=await S({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:i.join(m,`database`)}}function w(e,t,n){if(!n||typeof e?.executeNativeAiTask!=`function`)return;let{id:r,groupId:i,taskType:a,input:o}=n;return e.executeNativeAiTask({taskType:a,input:o,groupId:i,db:t}).then(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].resolve(e),delete t[r])}).catch(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].reject(e),delete t[r])})}async function T(e={}){let t=e.core||await n();t.setHeadlessMode(!0);let r,o;if(e.workspace)r=i.resolve(e.workspace),o=e.databaseDir?i.resolve(e.databaseDir):e.cacheDir?i.resolve(e.cacheDir,`database`):i.resolve(r,`database`);else{let t=await C({contentRoot:a.cwd(),cacheDir:e.cacheDir,databaseDir:e.databaseDir,tmp:e.tmp||e.temp,yes:e.yes||e.y,quiet:e.quiet,isTTY:e.isTTY,stdin:e.stdin,stdout:e.stdout}),n=i.join(f(),`shadow-claw`);await c(n,{recursive:!0}),r=await l(i.join(n,`workspace-`)),o=t.databaseDir}await c(r,{recursive:!0}),await c(o,{recursive:!0});let s=i.join(o,`agent.db`),u=t.openSqliteDatabase(s);t.setDB(u),t.setStorageRootFromPath(r);let d=(await v(r))?.config||{},p=d.settings||{},m=e.internetAccess??e.allowInternet??p.internetAccess??p.vm_bash_full_internet_access??p.fullInternetAccess??d.internetAccess;if(m!==void 0&&typeof t.setConfig==`function`){let e=t.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await t.setConfig(u,e,m?`true`:`false`)}let h={response:t=>{!e.quiet&&t.payload?.text&&console.log(t.payload.text)},error:t=>{!e.quiet&&t.payload?.error&&console.error(`Error: ${t.payload.error}`)},"tool-activity":t=>{!e.quiet&&e.verbose&&t.payload&&console.log(`[Tool] ${t.payload.tool} (${t.payload.status||`executing`})`)},"thinking-log":t=>{if(!e.quiet&&e.verbose&&t.payload){let e=t.payload.label||t.payload.level||`Log`;console.log(`[${e}] ${t.payload.message||``}`)}},"request-native-ai-task":e=>{w(t,u,e.payload)}};return t.setPostHandler(e=>{h[e.type]?.(e)}),{db:u,workspaceDir:r,dbPath:s,core:t}}function E(e={}){let{force:t=!1,stdin:n=a.stdin,timeoutMs:r}=e,i=n;return!t&&i?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],a=!1,o;r!=null&&r>0&&(o=setTimeout(()=>{a=!0,typeof i?.destroy==`function`&&i.destroy(),e(null)},r)),typeof i?.setEncoding==`function`&&i.setEncoding(`utf8`),i.on(`data`,e=>{a||n.push(typeof e==`string`?e:e.toString(`utf8`))}),i.on(`end`,()=>{if(o&&clearTimeout(o),a)return;let t=n.join(``).trim();e(t.length>0?t:null)}),i.on(`error`,e=>{o&&clearTimeout(o),!a&&t(e)})})}function D(e,t){let n=t&&typeof t==`object`?Object.keys(t.properties||{}):[];for(let t of[`text`,`prompt`,`content`,`input`])if(n.includes(t))return{[t]:e};return{input:e}}function O(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>String(e)).filter(Boolean)}async function k(t){let n=[];for(let r of t){let t=i.resolve(r),a;try{a=await u(t)}catch(e){throw Error(`Error: Failed to read attachment file "${r}": ${e.message}`)}let o=i.basename(t),s=e(o,``);n.push({fileName:o,mimeType:s,size:a.length,source:{kind:`local-file`,file:new Blob([new Uint8Array(a)],{type:s})}})}return n}const A=new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`show_toast`,`send_notification`,`spawn_subagent`]),j=`server:main`;async function M(e={}){let t;if(e.workspace)t=i.resolve(e.workspace);else{let e=i.join(f(),`shadow-claw`);await c(e,{recursive:!0}),t=await l(i.join(e,`workspace-`))}let n=i.join(t,`.agents`,`skills`),r=i.join(t,`.agents`,`tools`),o=i.join(t,`database`);await c(t,{recursive:!0}),await c(n,{recursive:!0}),await c(r,{recursive:!0}),await c(o,{recursive:!0});let s=e.provider,u=e.model,p=e.stdin?!!e.stdin.isTTY:!!a.stdin.isTTY,m=!e.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),h=e.isTTY===void 0?p||m:!!e.isTTY,g=e.isCI===void 0?e.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!e.isCI,_=h&&!g&&!e.quiet&&!e.yes&&!e.y;if(!s&&!u&&_){let{promptForAgentModel:n}=await import(`./chunk-L61wFp4H2.js`),r=await n({workspaceDir:t,contentRoot:a.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:h});s=r.providerId,u=r.model}if(s||=`transformers_js_local`,!u){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-L61wFp4H2.js`);u=s===`transformers_js_local`?e:`openrouter/free`}if(await v(t)||await d(i.join(t,`shadow-claw.config.json`),JSON.stringify({$schema:`https://json-schema.org/draft/2020-12/schema`,site:{title:`ShadowClaw Agent Workspace`,description:`Headless CLI agent workspace`},settings:{defaultProvider:`openrouter`,defaultModel:`openrouter/free`},agent:{defaultProvider:s,defaultModel:u}},null,2)+`
15
- `,`utf8`),e.download&&(s===`transformers_js_local`||s===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-L61wFp4H2.js`);await t(u,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await T({workspace:t,quiet:!0}),{success:!0,workspace:t}}async function N(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,i=await n.discoverSkills(t,r);return{skills:i.skills,diagnostics:i.diagnostics}}async function P(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,i=null;if(e.toolsProfile||e.profile){let r=String(e.toolsProfile||e.profile).trim().toLowerCase(),a=n.DEFAULT_BUILTIN_PROFILE||null,o=[];if(typeof n.getConfig==`function`)try{let e=await n.getConfig(t,n.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof e==`string`?o=JSON.parse(e):Array.isArray(e)&&(o=e)}catch{}let s=[a,...o].filter(Boolean).find(e=>e.id&&String(e.id).toLowerCase()===r||e.name&&String(e.name).toLowerCase()===r);s&&(i=new Set(s.enabledToolNames||[]))}let a=[...n.TOOL_DEFINITIONS||[]];if(typeof n.loadDeclarativeTools==`function`)try{let e=await n.loadDeclarativeTools(t,r);if(e&&Array.isArray(e.tools))for(let t of e.tools)a.some(e=>e.name===t.name)||a.push(t)}catch{}return{tools:a.map(e=>({name:e.name,description:e.description,headlessSafe:!A.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function F(e,t,n={}){let{db:r,workspaceDir:o,core:s}=await T(n),c=n.group||s.DEFAULT_SERVER_GROUP_ID||j,l=(s.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!l&&typeof s.loadDeclarativeTools==`function`)try{l=(await s.loadDeclarativeTools(r,c)).tools.find(t=>t.name===e)}catch{}if(!l){let t=`Error: Tool "${e}" not found.`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let u=!A.has(l.name),f=t??n.input;if(f===`-`&&(f=void 0),f==null&&n._stdinData!=null){let e=n._stdinData,t;try{t=JSON.parse(e)}catch{t=D(e,l.input_schema)}f=t}if(f!=null){let t={};if(typeof f==`string`)try{t=JSON.parse(f)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}else typeof f==`object`&&(t=f);let p;try{let e=await L(r,s,o,{...n,interactive:!1});p={db:r,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let o=await s.executeTool(r,e,t,c,{invokeContext:p}),f=typeof o==`string`?o:JSON.stringify(o,null,2);return n.output?(await d(i.resolve(n.output),f,`utf8`),n.quiet||a.stderr.write(`Output written to ${n.output}\n`)):n.quiet||a.stdout.write(f+`
14
+ `),o(0),l):(n.write(`Using temporary directory: ${l}\n\n`),l)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await g.question(`Enter custom directory path: `)).trim();if(!e)return n.write(`Using current directory cache: ${c}\n\n`),c;let t=i.resolve(s,e);return n.write(`Using custom directory: ${t}\n\n`),t}let t=i.resolve(s,e);return d.write(`Using directory: ${t}\n\n`),t}finally{a.removeListener(`SIGINT`,b),u&&typeof u.removeListener==`function`&&(u!==a.stdin&&u.removeListener(`SIGINT`,v),u.removeListener(`data`,x));try{g.close()}catch{}if(f){if(u&&typeof u.destroy==`function`)try{u.destroy()}catch{}if(h!=null)try{r.closeSync(h)}catch{}}}}async function C(e={}){let t=i.resolve(e.contentRoot||a.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((a.env.SHADOWCLAW_TMP||a.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let n=y();return{cacheDir:n,databaseDir:e.databaseDir?i.resolve(t,e.databaseDir):i.join(n,`database`)}}let n=(e.cacheDir||a.env.SHADOWCLAW_CACHE_DIR||``).trim();if(n){let r=i.resolve(t,n);return{cacheDir:r,databaseDir:e.databaseDir?i.resolve(t,e.databaseDir):i.join(r,`database`)}}let r=(e.databaseDir||a.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(r){let e=i.resolve(t,r);return{cacheDir:i.basename(e)===`database`?i.dirname(e):i.resolve(e,`..`),databaseDir:e}}let o=b(t);if(o)return{cacheDir:o,databaseDir:i.join(o,`database`)};let s=x(t),c=i.join(t,`.cache`),l=i.join(c,`database`);if(s||e.yes||e.y||[`1`,`true`,`yes`].includes((a.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:c,databaseDir:l};let u=e.stdin?!!e.stdin.isTTY:!!a.stdin.isTTY,d=!e.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),f=e.isTTY===void 0?u||d:!!e.isTTY,p=e.isCI===void 0?e.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!e.isCI;if(!f||p||e.quiet)return{cacheDir:c,databaseDir:l};let m=await S({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:i.join(m,`database`)}}function w(e,t,n){if(!n||typeof e?.executeNativeAiTask!=`function`)return;let{id:r,groupId:i,taskType:a,input:o}=n;return e.executeNativeAiTask({taskType:a,input:o,groupId:i,db:t}).then(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].resolve(e),delete t[r])}).catch(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].reject(e),delete t[r])})}async function T(e={}){let t=e.core||await n();t.setHeadlessMode(!0);let r,o;if(e.workspace)r=i.resolve(e.workspace),o=e.databaseDir?i.resolve(e.databaseDir):e.cacheDir?i.resolve(e.cacheDir,`database`):i.resolve(r,`database`);else{let t=await C({contentRoot:a.cwd(),cacheDir:e.cacheDir,databaseDir:e.databaseDir,tmp:e.tmp||e.temp,yes:e.yes||e.y,quiet:e.quiet,isTTY:e.isTTY,stdin:e.stdin,stdout:e.stdout}),n=i.join(f(),`shadow-claw`);await c(n,{recursive:!0}),r=await l(i.join(n,`workspace-`)),o=t.databaseDir}await c(r,{recursive:!0}),await c(o,{recursive:!0});let s=i.join(o,`agent.db`),u=t.openSqliteDatabase(s);t.setDB(u),t.setStorageRootFromPath(r);let d=(await v(r))?.config||{},p=d.settings||{},m=e.internetAccess??e.allowInternet??p.internetAccess??p.vm_bash_full_internet_access??p.fullInternetAccess??d.internetAccess;if(m!==void 0&&typeof t.setConfig==`function`){let e=t.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await t.setConfig(u,e,m?`true`:`false`)}let h={response:t=>{!e.quiet&&t.payload?.text&&console.log(t.payload.text)},error:t=>{!e.quiet&&t.payload?.error&&console.error(`Error: ${t.payload.error}`)},"tool-activity":t=>{!e.quiet&&e.verbose&&t.payload&&console.log(`[Tool] ${t.payload.tool} (${t.payload.status||`executing`})`)},"thinking-log":t=>{if(!e.quiet&&e.verbose&&t.payload){let e=t.payload.label||t.payload.level||`Log`;console.log(`[${e}] ${t.payload.message||``}`)}},"request-native-ai-task":e=>{w(t,u,e.payload)}};return t.setPostHandler(e=>{h[e.type]?.(e)}),{db:u,workspaceDir:r,dbPath:s,core:t}}function E(e={}){let{force:t=!1,stdin:n=a.stdin,timeoutMs:r}=e,i=n;return!t&&i?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],a=!1,o;r!=null&&r>0&&(o=setTimeout(()=>{a=!0,typeof i?.destroy==`function`&&i.destroy(),e(null)},r)),typeof i?.setEncoding==`function`&&i.setEncoding(`utf8`),i.on(`data`,e=>{a||n.push(typeof e==`string`?e:e.toString(`utf8`))}),i.on(`end`,()=>{if(o&&clearTimeout(o),a)return;let t=n.join(``).trim();e(t.length>0?t:null)}),i.on(`error`,e=>{o&&clearTimeout(o),!a&&t(e)})})}function D(e,t){let n=t&&typeof t==`object`?Object.keys(t.properties||{}):[];for(let t of[`text`,`prompt`,`content`,`input`])if(n.includes(t))return{[t]:e};return{input:e}}function O(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>String(e)).filter(Boolean)}async function k(t){let n=[];for(let r of t){let t=i.resolve(r),a;try{a=await u(t)}catch(e){throw Error(`Error: Failed to read attachment file "${r}": ${e.message}`)}let o=i.basename(t),s=e(o,``);n.push({fileName:o,mimeType:s,size:a.length,source:{kind:`local-file`,file:new Blob([new Uint8Array(a)],{type:s})}})}return n}const A=new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`show_toast`,`send_notification`,`spawn_subagent`]),j=`server:main`;async function M(e={}){let t;if(e.workspace)t=i.resolve(e.workspace);else{let e=i.join(f(),`shadow-claw`);await c(e,{recursive:!0}),t=await l(i.join(e,`workspace-`))}let n=i.join(t,`.agents`,`skills`),r=i.join(t,`.agents`,`tools`),o=i.join(t,`database`);await c(t,{recursive:!0}),await c(n,{recursive:!0}),await c(r,{recursive:!0}),await c(o,{recursive:!0});let s=e.provider,u=e.model,p=e.stdin?!!e.stdin.isTTY:!!a.stdin.isTTY,m=!e.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),h=e.isTTY===void 0?p||m:!!e.isTTY,g=e.isCI===void 0?e.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!e.isCI,_=h&&!g&&!e.quiet&&!e.yes&&!e.y;if(!s&&!u&&_){let{promptForAgentModel:n}=await import(`./chunk-BaSEVtTB2.js`),r=await n({workspaceDir:t,contentRoot:a.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:h});s=r.providerId,u=r.model}if(s||=`transformers_js_local`,!u){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-BaSEVtTB2.js`);u=s===`transformers_js_local`?e:`openrouter/free`}if(await v(t)||await d(i.join(t,`shadow-claw.config.json`),JSON.stringify({$schema:`https://json-schema.org/draft/2020-12/schema`,site:{title:`ShadowClaw Agent Workspace`,description:`Headless CLI agent workspace`},settings:{defaultProvider:`openrouter`,defaultModel:`openrouter/free`},agent:{defaultProvider:s,defaultModel:u}},null,2)+`
15
+ `,`utf8`),e.download&&(s===`transformers_js_local`||s===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-BaSEVtTB2.js`);await t(u,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await T({workspace:t,quiet:!0}),{success:!0,workspace:t}}async function N(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,i=await n.discoverSkills(t,r);return{skills:i.skills,diagnostics:i.diagnostics}}async function P(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,i=null;if(e.toolsProfile||e.profile){let r=String(e.toolsProfile||e.profile).trim().toLowerCase(),a=n.DEFAULT_BUILTIN_PROFILE||null,o=[];if(typeof n.getConfig==`function`)try{let e=await n.getConfig(t,n.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof e==`string`?o=JSON.parse(e):Array.isArray(e)&&(o=e)}catch{}let s=[a,...o].filter(Boolean).find(e=>e.id&&String(e.id).toLowerCase()===r||e.name&&String(e.name).toLowerCase()===r);s&&(i=new Set(s.enabledToolNames||[]))}let a=[...n.TOOL_DEFINITIONS||[]];if(typeof n.loadDeclarativeTools==`function`)try{let e=await n.loadDeclarativeTools(t,r);if(e&&Array.isArray(e.tools))for(let t of e.tools)a.some(e=>e.name===t.name)||a.push(t)}catch{}return{tools:a.map(e=>({name:e.name,description:e.description,headlessSafe:!A.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function F(e,t,n={}){let{db:r,workspaceDir:o,core:s}=await T(n),c=n.group||s.DEFAULT_SERVER_GROUP_ID||j,l=(s.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!l&&typeof s.loadDeclarativeTools==`function`)try{l=(await s.loadDeclarativeTools(r,c)).tools.find(t=>t.name===e)}catch{}if(!l){let t=`Error: Tool "${e}" not found.`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let u=!A.has(l.name),f=t??n.input;if(f===`-`&&(f=void 0),f==null&&n._stdinData!=null){let e=n._stdinData,t;try{t=JSON.parse(e)}catch{t=D(e,l.input_schema)}f=t}if(f!=null){let t={};if(typeof f==`string`)try{t=JSON.parse(f)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}else typeof f==`object`&&(t=f);let p;try{let e=await R(r,s,o,{...n,interactive:!1});p={db:r,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let o=await s.executeTool(r,e,t,c,{invokeContext:p}),f=typeof o==`string`?o:JSON.stringify(o,null,2);return n.output?(await d(i.resolve(n.output),f,`utf8`),n.quiet||a.stderr.write(`Output written to ${n.output}\n`)):n.quiet||a.stdout.write(f+`
16
16
  `),{success:!0,tool:l,headlessSafe:u,output:o}}catch(t){let r=t instanceof Error?t.message:String(t);return n.quiet||console.error(`Error executing tool "${e}": ${r}`),a.exitCode=1,{success:!1,error:r}}}if(!n.quiet){let e=u?`[headless-safe]`:`[browser-only]`;console.log(`Tool: ${l.name} ${e}\n`),console.log(`Description:\n ${l.description}\n`),l.input_schema&&(console.log(`Parameters (JSON Schema):`),console.log(JSON.stringify(l.input_schema,null,2)),console.log()),console.log(`Usage:`),console.log(` Direct CLI: npx shadow-claw agent tool ${l.name} '<json-input>'`),console.log(` Pipe input: echo '<text>' | npx shadow-claw agent tool ${l.name}`),console.log(` Agent Prompt: npx shadow-claw agent run "<instruction>"
17
- `)}return{success:!0,tool:l,headlessSafe:u}}async function I(e,t={}){let{db:n,core:r}=await T(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||j,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function L(e,t,n,r={}){let i=r.contentRoot??a.cwd(),o=await v(n,i),s=o?.config||{},c=s.settings||{},l=s.agent||c.agent||{},u=r.provider||a.env.SHADOW_CLAW_PROVIDER||a.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!u&&typeof t.getConfig==`function`&&(u=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!u&&r.model){let{isLlamafile:e}=await import(`./chunk-L61wFp4H2.js`);e(r.model)?u=`llamafile`:/onnx/i.test(r.model)&&(u=`transformers_js_local`)}u||=l.defaultProvider||l.provider||c.defaultProvider||c.provider||s.defaultProvider;let d=r.stdin?!!r.stdin.isTTY:!!a.stdin.isTTY,f=!r.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),p=r.isTTY===void 0?d||f:!!r.isTTY,m=r.isCI===void 0?r.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!r.isCI,h=p&&!m&&!r.quiet&&r.interactive!==!1;if(!u)if(h){let{promptForAgentModel:e}=await import(`./chunk-L61wFp4H2.js`),t=await e({workspaceDir:n,contentRoot:i,cacheDir:r.cacheDir,stdin:r.stdin,stdout:r.stdout,quiet:r.quiet,isTTY:p,service:r._transformersService});u=t.providerId,r.model=t.model}else u=`openrouter`;let g=typeof t.getProvider==`function`?t.getProvider(u):null;if(!g){let e=`Error: Unknown provider "${u}".`;throw Error(e)}let _;if(r.apiKey!==void 0)_=r.apiKey;else{if(_=a.env.SHADOW_CLAW_API_KEY,!_)switch(u){case`openrouter`:_=a.env.OPENROUTER_API_KEY;break;case`huggingface`:_=a.env.HUGGINGFACE_API_KEY||a.env.HF_TOKEN;break;case`gemini_proxy`:_=a.env.GEMINI_API_KEY;break}!_&&typeof t.getConfig==`function`&&(_=await t.getConfig(e,`api_key:${u}`)||await t.getConfig(e,`apiKey`))}let y=r.model||a.env.SHADOW_CLAW_MODEL||a.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||l.defaultModel||l.model||c.defaultModel||c.model||s.defaultModel||g?.defaultModel||(u===`transformers_js_local`?(await import(`./chunk-L61wFp4H2.js`)).DEFAULT_LOCAL_MODEL:`default`);if(u===`transformers_js_local`||u===`llamafile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-L61wFp4H2.js`);if(!e(y,r.cacheDir)){let e=r.stdout||a.stderr;if(r.download)r.quiet||e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:r.cacheDir,stream:e,isTTY:p,service:r._transformersService,progress:r.progress!==!1&&!r.noProgress,verbose:r.verbose});else if(h){let n=await import(`node:readline/promises`),i=await import(`node:tty`),o=await import(`node:fs`),s=r.stdin||a.stdin,c=e,l=!1,u=null;if(s===a.stdin&&!a.stdin.isTTY&&!a.env.CI&&(a.stderr.isTTY||a.stdout.isTTY))try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new i.ReadStream(u),c=a.stderr.isTTY?a.stderr:a.stdout,l=!0}catch{try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=a.stderr.isTTY?a.stderr:a.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),f=!1,m=()=>{if(!f){f=!0,c.write(`
17
+ `)}return{success:!0,tool:l,headlessSafe:u}}async function I(e={}){let{db:t,core:n}=await T(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||j,{clearGroupMessages:i}=await import(`./chunk-ud_DUk_f2.js`);return await i(t,r),e.quiet||console.log(`Cleared conversation history for group "${r}".`),{success:!0,groupId:r}}async function L(e,t={}){let{db:n,core:r}=await T(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||j,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function R(e,t,n,r={}){let i=r.contentRoot??a.cwd(),o=await v(n,i),s=o?.config||{},c=s.settings||{},l=s.agent||c.agent||{},u=r.provider||a.env.SHADOW_CLAW_PROVIDER||a.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!u&&typeof t.getConfig==`function`&&(u=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!u&&r.model){let{isLlamafile:e}=await import(`./chunk-BaSEVtTB2.js`);e(r.model)?u=`llamafile`:/onnx/i.test(r.model)&&(u=`transformers_js_local`)}u||=l.defaultProvider||l.provider||c.defaultProvider||c.provider||s.defaultProvider;let d=r.stdin?!!r.stdin.isTTY:!!a.stdin.isTTY,f=!r.stdin&&!a.stdin.isTTY&&!!(a.stderr.isTTY||a.stdout.isTTY),p=r.isTTY===void 0?d||f:!!r.isTTY,m=r.isCI===void 0?r.isTTY===void 0&&!!(a.env.CI&&![`0`,`false`].includes(a.env.CI.toLowerCase())):!!r.isCI,h=p&&!m&&!r.quiet&&r.interactive!==!1;if(!u)if(h){let{promptForAgentModel:e}=await import(`./chunk-BaSEVtTB2.js`),t=await e({workspaceDir:n,contentRoot:i,cacheDir:r.cacheDir,stdin:r.stdin,stdout:r.stdout,quiet:r.quiet,isTTY:p,service:r._transformersService});u=t.providerId,r.model=t.model}else u=`openrouter`;let g=typeof t.getProvider==`function`?t.getProvider(u):null;if(!g){let e=`Error: Unknown provider "${u}".`;throw Error(e)}let _;if(r.apiKey!==void 0)_=r.apiKey;else{if(_=a.env.SHADOW_CLAW_API_KEY,!_)switch(u){case`openrouter`:_=a.env.OPENROUTER_API_KEY;break;case`huggingface`:_=a.env.HUGGINGFACE_API_KEY||a.env.HF_TOKEN;break;case`gemini_proxy`:_=a.env.GEMINI_API_KEY;break}!_&&typeof t.getConfig==`function`&&(_=await t.getConfig(e,`api_key:${u}`)||await t.getConfig(e,`apiKey`))}let y=r.model||a.env.SHADOW_CLAW_MODEL||a.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||l.defaultModel||l.model||c.defaultModel||c.model||s.defaultModel||g?.defaultModel||(u===`transformers_js_local`?(await import(`./chunk-BaSEVtTB2.js`)).DEFAULT_LOCAL_MODEL:`default`);if(u===`transformers_js_local`||u===`llamafile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-BaSEVtTB2.js`);if(!e(y,r.cacheDir)){let e=r.stdout||a.stderr;if(r.download)r.quiet||e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:r.cacheDir,stream:e,isTTY:p,service:r._transformersService,progress:r.progress!==!1&&!r.noProgress,verbose:r.verbose});else if(h){let n=await import(`node:readline/promises`),i=await import(`node:tty`),o=await import(`node:fs`),s=r.stdin||a.stdin,c=e,l=!1,u=null;if(s===a.stdin&&!a.stdin.isTTY&&!a.env.CI&&(a.stderr.isTTY||a.stdout.isTTY))try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new i.ReadStream(u),c=a.stderr.isTTY?a.stderr:a.stdout,l=!0}catch{try{let e=a.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=a.stderr.isTTY?a.stderr:a.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),f=!1,m=()=>{if(!f){f=!0,c.write(`
18
18
  Operation cancelled.
19
- `);try{d.close()}catch{}typeof r.onExit==`function`?r.onExit(130):a.exit(130)}};d.on(`SIGINT`,m),s&&typeof s.on==`function`&&s!==a.stdin&&s.on(`SIGINT`,m);let h=()=>m();a.on(`SIGINT`,h);let g=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&m()};s&&typeof s.on==`function`&&s.on(`data`,g);let _=``;try{_=(await d.question(`\nModel "${y}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{a.removeListener(`SIGINT`,h),s&&typeof s.removeListener==`function`&&(s!==a.stdin&&s.removeListener(`SIGINT`,m),s.removeListener(`data`,g));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}(_===``||_===`y`||_===`yes`)&&(e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:r.cacheDir,stream:e,isTTY:p,service:r._transformersService,progress:r.progress!==!1&&!r.noProgress,verbose:r.verbose}))}}}return{providerId:u,providerConfig:g,apiKey:_||``,model:y,workspaceConfigData:o,workspaceConfig:s,workspaceSettings:c,workspaceAgent:l}}async function R(e,t,n,r,i,a,o){let s=[...t.TOOL_DEFINITIONS||[]];if(typeof t.loadDeclarativeTools==`function`)try{let r=await t.loadDeclarativeTools(e,n);if(r&&Array.isArray(r.tools))for(let e of r.tools)s.some(t=>t.name===e.name)||s.push(e)}catch{}let c=s.filter(e=>!A.has(e.name)),l=c,u=null;async function d(){let n=t.DEFAULT_BUILTIN_PROFILE||null,a=[];if(typeof t.getConfig==`function`)try{let n=await t.getConfig(e,t.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof n==`string`?a=JSON.parse(n):Array.isArray(n)&&(a=n)}catch{}let o=r?.toolProfiles||i?.toolProfiles||r?.profiles||[];return[n,...a,...o].filter(Boolean)}if(o.noTools===!0||o.tools===!1||o.tools===`none`||o.tools===``)return l=[],{enabledTools:l,profileSystemPromptOverride:u};if(o.tools!==void 0&&o.tools!==null)return l=(Array.isArray(o.tools)?o.tools:String(o.tools).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===String(e))).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u};if(o.toolsProfile){let e=await d(),t=String(o.toolsProfile).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(!n)throw Error(`Error: Tool profile "${o.toolsProfile}" not found.`);let r=new Set(n.enabledToolNames||[]);if(l=c.filter(e=>r.has(e.name)),n.customTools&&Array.isArray(n.customTools))for(let e of n.customTools)!A.has(e.name)&&!l.some(t=>t.name===e.name)&&l.push(e);return n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}let f=a?.tools??a?.enabledTools;if(f!=null)return f===!1||f===`none`||f===``?(l=[],{enabledTools:l,profileSystemPromptOverride:u}):(l=(Array.isArray(f)?f:String(f).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===e)).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u});let p=a?.toolsProfile||a?.defaultToolsProfile;if(p){let e=await d(),t=String(p).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(n){let e=new Set(n.enabledToolNames||[]);return l=c.filter(t=>e.has(t.name)),n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}}return{enabledTools:l,profileSystemPromptOverride:u}}async function z(e,n={}){let{db:r,workspaceDir:o,core:s}=await T(n),c=n.group||s.DEFAULT_SERVER_GROUP_ID||j,l=n._stdinData??null;if(e===`-`?e=l||``:l&&(e=e?`${e}\n\n${l}`:l),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return n.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let f=[];try{f=await t(r,c,await k(O(n.file)))}catch(e){return n.quiet||console.error(e.message),a.exitCode=1,{success:!1,error:e.message}}let p,m,h,g,_,v,y,b;try{let e=await L(r,s,o,n);p=e.providerId,m=e.providerConfig,h=e.apiKey,g=e.model,_=e.workspaceConfigData,v=e.workspaceConfig,y=e.workspaceSettings,b=e.workspaceAgent}catch(e){return n.quiet||console.error(e.message),a.exitCode=1,{success:!1,error:e.message}}let x=n.internetAccess??n.allowInternet??y?.internetAccess??y?.vm_bash_full_internet_access??y?.fullInternetAccess??v?.internetAccess;if(x!==void 0&&typeof s.setConfig==`function`){let e=s.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await s.setConfig(r,e,x?`true`:`false`)}if(m.requiresApiKey!==!1&&!h){let e=p===`huggingface`?`HUGGINGFACE_API_KEY`:`${p.toUpperCase()}_API_KEY`,t=`Error: Provider "${p}" requires an API key, but none was provided.\nPlease provide an API key via --api-key <key> or export ${e}="...".`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let S=[];if(typeof s.getRecentMessages==`function`)try{S=await s.getRecentMessages(r,c,50)}catch{}let C={id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:c,role:`user`,sender:`user`,channel:`chat`,isFromMe:!1,isTrigger:!0,content:e,timestamp:Date.now(),...f.length>0?{attachments:f}:{}};if(typeof s.saveMessage==`function`)try{await s.saveMessage(r,C)}catch{}let E=m?.supportsStreaming===!0,D=n.stream!==!1&&n.streaming!==!1&&!n.noStream,A=E&&D,M=Number(n.maxTokens)||(typeof s.getModelMaxTokens==`function`?s.getModelMaxTokens(g):s.DEFAULT_MAX_TOKENS||8192);if(n.verbose&&!n.quiet){let e=m?.name||p,t=A?`streaming`:`standard`;a.stderr.write(`[Agent] Connecting to ${e} (${g}) [${t}]...\n`),a.stderr.write(`[Agent] Workspace: ${o}\n[Agent] Group: ${c}\n[Agent] Max tokens: ${M}\n`)}let N,P,F=!1,I=[];s.setPostHandler(async e=>{({"streaming-start":()=>{F=!0},"streaming-chunk":e=>{e.payload?.text&&(F=!0,N=(N||``)+e.payload.text,!n.quiet&&!n.output&&a.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-end":()=>{},response:e=>{if(e.payload?.text)if(N=e.payload.text,n.output){let t=d(i.resolve(n.output),e.payload.text,`utf8`).then(()=>{n.quiet||a.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});I.push(t)}else n.quiet||(F?e.payload.text.endsWith(`
19
+ `);try{d.close()}catch{}typeof r.onExit==`function`?r.onExit(130):a.exit(130)}};d.on(`SIGINT`,m),s&&typeof s.on==`function`&&s!==a.stdin&&s.on(`SIGINT`,m);let h=()=>m();a.on(`SIGINT`,h);let g=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&m()};s&&typeof s.on==`function`&&s.on(`data`,g);let _=``;try{_=(await d.question(`\nModel "${y}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{a.removeListener(`SIGINT`,h),s&&typeof s.removeListener==`function`&&(s!==a.stdin&&s.removeListener(`SIGINT`,m),s.removeListener(`data`,g));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}(_===``||_===`y`||_===`yes`)&&(e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:r.cacheDir,stream:e,isTTY:p,service:r._transformersService,progress:r.progress!==!1&&!r.noProgress,verbose:r.verbose}))}}}return{providerId:u,providerConfig:g,apiKey:_||``,model:y,workspaceConfigData:o,workspaceConfig:s,workspaceSettings:c,workspaceAgent:l}}async function z(e,t,n,r,i,a,o){let s=[...t.TOOL_DEFINITIONS||[]];if(typeof t.loadDeclarativeTools==`function`)try{let r=await t.loadDeclarativeTools(e,n);if(r&&Array.isArray(r.tools))for(let e of r.tools)s.some(t=>t.name===e.name)||s.push(e)}catch{}let c=s.filter(e=>!A.has(e.name)),l=c,u=null;async function d(){let n=t.DEFAULT_BUILTIN_PROFILE||null,a=[];if(typeof t.getConfig==`function`)try{let n=await t.getConfig(e,t.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof n==`string`?a=JSON.parse(n):Array.isArray(n)&&(a=n)}catch{}let o=r?.toolProfiles||i?.toolProfiles||r?.profiles||[];return[n,...a,...o].filter(Boolean)}if(o.noTools===!0||o.tools===!1||o.tools===`none`||o.tools===``)return l=[],{enabledTools:l,profileSystemPromptOverride:u};if(o.tools!==void 0&&o.tools!==null)return l=(Array.isArray(o.tools)?o.tools:String(o.tools).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===String(e))).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u};if(o.toolsProfile){let e=await d(),t=String(o.toolsProfile).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(!n)throw Error(`Error: Tool profile "${o.toolsProfile}" not found.`);let r=new Set(n.enabledToolNames||[]);if(l=c.filter(e=>r.has(e.name)),n.customTools&&Array.isArray(n.customTools))for(let e of n.customTools)!A.has(e.name)&&!l.some(t=>t.name===e.name)&&l.push(e);return n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}let f=a?.tools??a?.enabledTools;if(f!=null)return f===!1||f===`none`||f===``?(l=[],{enabledTools:l,profileSystemPromptOverride:u}):(l=(Array.isArray(f)?f:String(f).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===e)).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u});let p=a?.toolsProfile||a?.defaultToolsProfile;if(p){let e=await d(),t=String(p).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(n){let e=new Set(n.enabledToolNames||[]);return l=c.filter(t=>e.has(t.name)),n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}}return{enabledTools:l,profileSystemPromptOverride:u}}async function B(e,n={}){let{db:r,workspaceDir:o,core:s}=await T(n),c=n.group||s.DEFAULT_SERVER_GROUP_ID||j,l=n._stdinData??null;if(e===`-`?e=l||``:l&&(e=e?`${e}\n\n${l}`:l),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return n.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let f=[];try{f=await t(r,c,await k(O(n.file)))}catch(e){return n.quiet||console.error(e.message),a.exitCode=1,{success:!1,error:e.message}}let p,m,h,g,_,v,y,b;try{let e=await R(r,s,o,n);p=e.providerId,m=e.providerConfig,h=e.apiKey,g=e.model,_=e.workspaceConfigData,v=e.workspaceConfig,y=e.workspaceSettings,b=e.workspaceAgent}catch(e){return n.quiet||console.error(e.message),a.exitCode=1,{success:!1,error:e.message}}let x=n.internetAccess??n.allowInternet??y?.internetAccess??y?.vm_bash_full_internet_access??y?.fullInternetAccess??v?.internetAccess;if(x!==void 0&&typeof s.setConfig==`function`){let e=s.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await s.setConfig(r,e,x?`true`:`false`)}if(m.requiresApiKey!==!1&&!h){let e=p===`huggingface`?`HUGGINGFACE_API_KEY`:`${p.toUpperCase()}_API_KEY`,t=`Error: Provider "${p}" requires an API key, but none was provided.\nPlease provide an API key via --api-key <key> or export ${e}="...".`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let S=[];if(n.history!==!1&&typeof s.getRecentMessages==`function`)try{S=await s.getRecentMessages(r,c,50)}catch{}let C={id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:c,role:`user`,sender:`user`,channel:`chat`,isFromMe:!1,isTrigger:!0,content:e,timestamp:Date.now(),...f.length>0?{attachments:f}:{}};if(typeof s.saveMessage==`function`)try{await s.saveMessage(r,C)}catch{}let E=m?.supportsStreaming===!0,D=n.stream!==!1&&n.streaming!==!1&&!n.noStream,A=E&&D,M=Number(n.maxTokens)||(typeof s.getModelMaxTokens==`function`?s.getModelMaxTokens(g):s.DEFAULT_MAX_TOKENS||8192);if(n.verbose&&!n.quiet){let e=m?.name||p,t=A?`streaming`:`standard`;a.stderr.write(`[Agent] Connecting to ${e} (${g}) [${t}]...\n`),a.stderr.write(`[Agent] Workspace: ${o}\n[Agent] Group: ${c}\n[Agent] Max tokens: ${M}\n`)}let N,P,F=!1,I=[];s.setPostHandler(async e=>{({"streaming-start":()=>{F=!0},"streaming-chunk":e=>{e.payload?.text&&(F=!0,N=(N||``)+e.payload.text,!n.quiet&&!n.output&&a.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-end":()=>{},response:e=>{if(e.payload?.text)if(N=e.payload.text,n.output){let t=d(i.resolve(n.output),e.payload.text,`utf8`).then(()=>{n.quiet||a.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});I.push(t)}else n.quiet||(F?e.payload.text.endsWith(`
20
20
  `)||a.stdout.write(`
21
21
  `):a.stdout.write(e.payload.text+`
22
- `))},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&a.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(P=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;a.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;a.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;a.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;a.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(n.verbose&&!n.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,r=t.completion_tokens??t.output_tokens??0,i=t.total_tokens??n+r;a.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${r}, Total: ${i}\n`)}},"request-native-ai-task":e=>{w(s,r,e.payload)}})[e.type]?.(e)});let z;try{z=await R(r,s,c,v,y,b,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let{enabledTools:B,profileSystemPromptOverride:V}=z,H=n.systemPrompt;if(!H&&n.systemPromptFile)try{H=await u(i.resolve(n.systemPromptFile),`utf8`)}catch(e){let t=`Error: Failed to read system prompt file "${n.systemPromptFile}": ${e.message}`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}if(H||=a.env.SHADOW_CLAW_SYSTEM_PROMPT||a.env.SHADOWCLAW_SYSTEM_PROMPT,!H&&V&&(H=V),!H&&b?.systemPromptFile)try{let e=_?.configPath?i.dirname(_.configPath):o;H=await u(i.resolve(e,b.systemPromptFile),`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(H||=b?.systemPrompt||y?.systemPrompt||y?.systemPromptOverride,!H&&typeof s.getConfig==`function`)try{let e=await s.getConfig(r,s.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(H=e)}catch{}H||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`;let U={apiKey:h||``,assistantName:`ShadowClaw`,enabledTools:B,groupId:c,maxTokens:M,messages:[...S,C],model:g,provider:p,streaming:A,verbose:!!n.verbose,systemPrompt:H},W=new AbortController;n.abortSignal&&(n.abortSignal.aborted?W.abort():n.abortSignal.addEventListener(`abort`,()=>W.abort(),{once:!0}));let G=!1,K=()=>{if(!G){G=!0,W.abort();try{typeof s.cleanupAllLlamafileProcesses==`function`&&s.cleanupAllLlamafileProcesses()}catch{}}};a.on(`SIGINT`,K);let q=n.invokeHandler||s.handleInvoke;try{await q(r,U,W.signal)}catch(e){P=e instanceof Error?e.message:String(e),!G&&!n.quiet&&console.error(`Error: ${P}`)}finally{a.removeListener(`SIGINT`,K)}if(G)return n.quiet||a.stderr.write(`
22
+ `))},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&a.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(P=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;a.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;a.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;a.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;a.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(n.verbose&&!n.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,r=t.completion_tokens??t.output_tokens??0,i=t.total_tokens??n+r;a.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${r}, Total: ${i}\n`)}},"request-native-ai-task":e=>{w(s,r,e.payload)}})[e.type]?.(e)});let L;try{L=await z(r,s,c,v,y,b,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}let{enabledTools:B,profileSystemPromptOverride:V}=L,H=n.systemPrompt;if(!H&&n.systemPromptFile)try{H=await u(i.resolve(n.systemPromptFile),`utf8`)}catch(e){let t=`Error: Failed to read system prompt file "${n.systemPromptFile}": ${e.message}`;return n.quiet||console.error(t),a.exitCode=1,{success:!1,error:t}}if(H||=a.env.SHADOW_CLAW_SYSTEM_PROMPT||a.env.SHADOWCLAW_SYSTEM_PROMPT,!H&&V&&(H=V),!H&&b?.systemPromptFile)try{let e=_?.configPath?i.dirname(_.configPath):o;H=await u(i.resolve(e,b.systemPromptFile),`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(H||=b?.systemPrompt||y?.systemPrompt||y?.systemPromptOverride,!H&&typeof s.getConfig==`function`)try{let e=await s.getConfig(r,s.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(H=e)}catch{}H||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`;let U={apiKey:h||``,assistantName:`ShadowClaw`,enabledTools:B,groupId:c,maxTokens:M,messages:[...S,C],model:g,provider:p,streaming:A,verbose:!!n.verbose,systemPrompt:H},W=new AbortController;n.abortSignal&&(n.abortSignal.aborted?W.abort():n.abortSignal.addEventListener(`abort`,()=>W.abort(),{once:!0}));let G=!1,K=()=>{if(!G){G=!0,W.abort();try{typeof s.cleanupAllLlamafileProcesses==`function`&&s.cleanupAllLlamafileProcesses()}catch{}}};a.on(`SIGINT`,K);let q=n.invokeHandler||s.handleInvoke;try{await q(r,U,W.signal)}catch(e){P=e instanceof Error?e.message:String(e),!G&&!n.quiet&&console.error(`Error: ${P}`)}finally{a.removeListener(`SIGINT`,K)}if(G)return n.quiet||a.stderr.write(`
23
23
  Operation cancelled.
24
24
  `),a.exitCode=130,typeof n.onExit==`function`&&n.onExit(130),{success:!1,error:`Operation cancelled.`};if(P&&F&&!n.quiet&&!n.output&&a.stdout.write(`
25
- `),P)return a.exitCode=1,{success:!1,error:P};if(N&&typeof s.saveMessage==`function`)try{await s.saveMessage(r,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:c,role:`assistant`,content:N,timestamp:Date.now()})}catch{}if(n.output&&N&&I.length===0){let e=d(i.resolve(n.output),N,`utf8`).then(()=>{n.quiet||a.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});I.push(e)}return await Promise.all(I),typeof s.setPostHandler==`function`&&s.setPostHandler(null),{success:!0,response:N,model:g,provider:p}}async function B(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:o,downloadLocalModel:s,fetchRemoteModels:c,DEFAULT_LOCAL_MODEL:l}=await import(`./chunk-L61wFp4H2.js`),u=n.workspace?i.resolve(n.workspace):a.cwd(),f=e||`list`;if(f===`list`||f===`remote`){let e=f===`remote`||!!(n.remote||n.all||n.huggingface),i=await v(u),s=i?.config?.agent?.defaultModel||i?.config?.settings?.defaultModel||l;if(e){n.quiet||a.stdout.write(`
25
+ `),P)return a.exitCode=1,{success:!1,error:P};if(N&&typeof s.saveMessage==`function`)try{await s.saveMessage(r,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:c,role:`assistant`,content:N,timestamp:Date.now()})}catch{}if(n.output&&N&&I.length===0){let e=d(i.resolve(n.output),N,`utf8`).then(()=>{n.quiet||a.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});I.push(e)}return await Promise.all(I),typeof s.setPostHandler==`function`&&s.setPostHandler(null),{success:!0,response:N,model:g,provider:p}}async function V(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:o,downloadLocalModel:s,fetchRemoteModels:c,DEFAULT_LOCAL_MODEL:l}=await import(`./chunk-BaSEVtTB2.js`),u=n.workspace?i.resolve(n.workspace):a.cwd(),f=e||`list`;if(f===`list`||f===`remote`){let e=f===`remote`||!!(n.remote||n.all||n.huggingface),i=await v(u),s=i?.config?.agent?.defaultModel||i?.config?.settings?.defaultModel||l;if(e){n.quiet||a.stdout.write(`
26
26
  Fetching available ONNX models from Hugging Face (onnx-community)...
27
27
  `);let e=await c({cacheDir:n.cacheDir,query:n.query||(f===`remote`&&t?t:void 0)});if(!n.quiet)if(e.length===0)a.stdout.write(`No models found on Hugging Face or could not reach huggingface.co.
28
28
 
@@ -36,5 +36,5 @@ Curated Transformers.js Models (Local ONNX):
36
36
  `);for(let e of d){let t=e.id===s,n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;a.stdout.write(` • ${e.id}${r}${n}\n`),a.stdout.write(` Name: ${e.name}\n`),a.stdout.write(` Context: ${e.contextLength.toLocaleString()} tokens | Tools: ${e.supportsTools?`Yes`:`No`}\n`),a.stdout.write(` ${e.description}\n\n`)}a.stdout.write(`Curated Llamafile Models (Local Executable):
37
37
 
38
38
  `);for(let e of p){let t=e.fileName===s||e.id===s||s.endsWith(e.fileName),n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;a.stdout.write(` • ${e.fileName}${r}${n}\n`),a.stdout.write(` Name: ${e.name}\n`),a.stdout.write(` URL: ${e.url}\n`),a.stdout.write(` ${e.description}\n\n`)}a.stdout.write("Tip: Run `shadow-claw agent model list --remote` (or `shadow-claw agent model remote`) to browse all ONNX models from Hugging Face.\n\n")}return{success:!0,models:d,llamafileModels:p,defaultModel:s}}if(f===`download`){let e=t||n.model||l;n.verbose&&!n.quiet&&a.stderr.write(`Preparing to download model: ${e}\n`);let r=await s(e,{cacheDir:n.cacheDir,verbose:n.verbose,isTTY:n.isTTY,progress:n.progress!==!1&&!n.noProgress});return r.success||(a.exitCode=1),r}if(f===`set`){let e=t||n.model;if(!e){let e=`Error: Please specify a model ID to set as default.`;return n.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let r=await v(u),o=r?.configPath||i.join(u,`shadow-claw.config.json`),s=r?.config||{},c={...s,agent:{...s.agent||{},defaultModel:e}};return await d(o,JSON.stringify(c,null,2)+`
39
- `,`utf8`),n.quiet||a.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:o}}let p=`Unknown model action: "${f}". Available: list, download, set`;return n.quiet||console.error(p),a.exitCode=1,{success:!1,error:p}}async function V(e,t={}){let n=(e||``).trim();if(!n){let e=`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`;return t.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let{db:r,core:i}=await T(t),o=t.group||i.DEFAULT_SERVER_GROUP_ID||j,s=i.fetchDiscoveryManifest||(await import(`./chunk-DhQQhCTL2.js`)).fetchDiscoveryManifest,c=i.importRemoteArtifacts||(await import(`./chunk-STsbFGCh2.js`)).importRemoteArtifacts,l=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let u;try{u=await s(n,l)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),a.exitCode=1,{success:!1,error:n}}let{manifest:d,siteUrl:f,manifestUrl:p}=u,m=d.tools||[],h=d.skills||[],g=d.scripts||[];t.quiet||console.log(`Discovered: ${d.name||`Remote Site`} (${h.length} skill${h.length===1?``:`s`}, ${m.length} tool${m.length===1?``:`s`}, ${g.length} script${g.length===1?``:`s`})`);let _=m.map(e=>e.name),v=h.map(e=>e.name),y=g.map(e=>e.name),b,x,S;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];b=e(t.tools),x=e(t.skills),S=e(t.scripts)}else b=_,x=v,S=y;let C=t.autoEnable!==!1,w=!!t.overwrite,E;try{E=await c(r,o,d,{toolNames:b,skillNames:x,scriptNames:S},{autoEnable:C,overwrite:w,fetchFn:l,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),a.exitCode=1,{success:!1,error:n}}let D=E.tools.filter(e=>e.status===`imported`),O=E.skills.filter(e=>e.status===`imported`),k=E.scripts.filter(e=>e.status===`imported`),A=E.tools.filter(e=>e.status===`skipped`),M=E.skills.filter(e=>e.status===`skipped`),N=E.scripts.filter(e=>e.status===`skipped`),P=E.tools.filter(e=>e.status===`failed`),F=E.skills.filter(e=>e.status===`failed`),I=E.scripts.filter(e=>e.status===`failed`),L=D.length+O.length+k.length,R=A.length+M.length+N.length,z=P.length+F.length+I.length;if(!t.quiet){console.log(`
40
- Importing artifacts:`);for(let e of[...E.tools,...E.skills,...E.scripts]){let t=E.tools.includes(e)?`tool`:E.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(z>0?`\nCompleted with ${z} error${z===1?``:`s`}. Successfully imported ${L} items, ${R} skipped.`:`\nSuccessfully imported ${L} item${L===1?``:`s`} (${D.length} tool${D.length===1?``:`s`}, ${O.length} skill${O.length===1?``:`s`}, ${k.length} script${k.length===1?``:`s`}).`)}let B=z===0||L>0;return B||(a.exitCode=1),{success:B,manifest:d,siteUrl:f,manifestUrl:p,result:E,importedCount:L,skippedCount:R,failedCount:z}}async function H(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:a.stdin.isTTY?null:await E({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await M({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=await N(i);if(e.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${e.skills.length}):\n`);for(let t of e.skills)console.log(` - ${t.name}: ${t.description||`No description`}`)}return e}case`tools`:{let e=r[0];if(e)return await F(e,r[1],i);let t=await P(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),a.exitCode=1;return}return await F(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),a.exitCode=1;return}return await I(e,i)}case`run`:return await z(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await B(e,t,i)}case`import`:{let e=r[0];return e?await V(e,i):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),a.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-DhJvrfsM.js`);return t(e)}))({...i,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|listen> [args...]`)}}export{B as a,N as c,T as d,C as f,M as i,F as l,H as n,z as o,v as p,V as r,I as s,L as t,P as u};
39
+ `,`utf8`),n.quiet||a.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:o}}let p=`Unknown model action: "${f}". Available: list, download, set`;return n.quiet||console.error(p),a.exitCode=1,{success:!1,error:p}}async function H(e,t={}){let n=(e||``).trim();if(!n){let e=`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`;return t.quiet||console.error(e),a.exitCode=1,{success:!1,error:e}}let{db:r,core:i}=await T(t),o=t.group||i.DEFAULT_SERVER_GROUP_ID||j,s=i.fetchDiscoveryManifest||(await import(`./chunk-C0cwwqX52.js`)).fetchDiscoveryManifest,c=i.importRemoteArtifacts||(await import(`./chunk--nlZNQrZ2.js`)).importRemoteArtifacts,l=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let u;try{u=await s(n,l)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),a.exitCode=1,{success:!1,error:n}}let{manifest:d,siteUrl:f,manifestUrl:p}=u,m=d.tools||[],h=d.skills||[],g=d.scripts||[];t.quiet||console.log(`Discovered: ${d.name||`Remote Site`} (${h.length} skill${h.length===1?``:`s`}, ${m.length} tool${m.length===1?``:`s`}, ${g.length} script${g.length===1?``:`s`})`);let _=m.map(e=>e.name),v=h.map(e=>e.name),y=g.map(e=>e.name),b,x,S;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];b=e(t.tools),x=e(t.skills),S=e(t.scripts)}else b=_,x=v,S=y;let C=t.autoEnable!==!1,w=!!t.overwrite,E;try{E=await c(r,o,d,{toolNames:b,skillNames:x,scriptNames:S},{autoEnable:C,overwrite:w,fetchFn:l,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),a.exitCode=1,{success:!1,error:n}}let D=E.tools.filter(e=>e.status===`imported`),O=E.skills.filter(e=>e.status===`imported`),k=E.scripts.filter(e=>e.status===`imported`),A=E.tools.filter(e=>e.status===`skipped`),M=E.skills.filter(e=>e.status===`skipped`),N=E.scripts.filter(e=>e.status===`skipped`),P=E.tools.filter(e=>e.status===`failed`),F=E.skills.filter(e=>e.status===`failed`),I=E.scripts.filter(e=>e.status===`failed`),L=D.length+O.length+k.length,R=A.length+M.length+N.length,z=P.length+F.length+I.length;if(!t.quiet){console.log(`
40
+ Importing artifacts:`);for(let e of[...E.tools,...E.skills,...E.scripts]){let t=E.tools.includes(e)?`tool`:E.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(z>0?`\nCompleted with ${z} error${z===1?``:`s`}. Successfully imported ${L} items, ${R} skipped.`:`\nSuccessfully imported ${L} item${L===1?``:`s`} (${D.length} tool${D.length===1?``:`s`}, ${O.length} skill${O.length===1?``:`s`}, ${k.length} script${k.length===1?``:`s`}).`)}let B=z===0||L>0;return B||(a.exitCode=1),{success:B,manifest:d,siteUrl:f,manifestUrl:p,result:E,importedCount:L,skippedCount:R,failedCount:z}}async function U(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:a.stdin.isTTY?null:await E({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await M({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=await N(i);if(e.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${e.skills.length}):\n`);for(let t of e.skills)console.log(` - ${t.name}: ${t.description||`No description`}`)}return e}case`tools`:{let e=r[0];if(e)return await F(e,r[1],i);let t=await P(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),a.exitCode=1;return}return await F(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),a.exitCode=1;return}return await L(e,i)}case`clear`:return await I(i);case`run`:return await B(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await V(e,t,i)}case`import`:{let e=r[0];return e?await H(e,i):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),a.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-2zUw4dTY.js`);return t(e)}))({...i,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|clear|listen> [args...]`)}}export{M as a,L as c,P as d,T as f,H as i,N as l,v as m,I as n,V as o,C as p,U as r,B as s,R as t,F as u};
@@ -1 +1 @@
1
- import{t as e}from"./chunk-uAI_Zi6n.js";import{existsSync as t}from"node:fs";import n from"node:path";import{pathToFileURL as r}from"node:url";import i from"node:process";const a=e(import.meta.url);let o=null;async function s(){if(o)return o;let e=i.env.NODE_ENV===`test`,s=n.join(a,`dist/headless-agent.js`);if(!e&&t(s))return o=await import(r(s).href),o;try{return o={...await import(`./chunk-CA8_jPwF2.js`)},o}catch{try{return o={...await import(`./chunk-CA8_jPwF2.js`)},o}catch(e){if(t(s))return o={...await import(r(s).href)},o;throw e}}}export{s as t};
1
+ import{t as e}from"./chunk-uAI_Zi6n.js";import{existsSync as t}from"node:fs";import n from"node:path";import{pathToFileURL as r}from"node:url";import i from"node:process";const a=e(import.meta.url);let o=null;async function s(){if(o)return o;let e=i.env.NODE_ENV===`test`,s=n.join(a,`dist/headless-agent.js`);if(!e&&t(s))return o=await import(r(s).href),o;try{return o={...await import(`./chunk-Dk750_9R2.js`)},o}catch{try{return o={...await import(`./chunk-Dk750_9R2.js`)},o}catch(e){if(t(s))return o={...await import(r(s).href)},o;throw e}}}export{s as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./chunk-BChoeGdY2.js";export{e as clearGroupMessages};
@@ -1,4 +1,4 @@
1
- import{a as e,i as t,t as n}from"./chunk-8V8biNmG.js";import{t as r}from"./chunk-4SM9QyPF.js";import{n as i,t as a}from"./chunk-Drx4e34U.js";import{createRequire as o}from"node:module";import s from"node:path";import{spawnSync as c}from"node:child_process";import l from"process";import{Buffer as u}from"buffer";import d from"fs";import f from"node:events";import p from"node:stream";import m from"path";import{availableParallelism as h}from"node:os";import{createHash as g}from"node:crypto";import _ from"url";import{Readable as v}from"stream";import y from"node:util";import{createRequire as b}from"module";import{pipeline as x}from"stream/promises";let S=`warning`;Object.defineProperty({wasm:{},webgl:{},webgpu:{},versions:{common:`1.30.0`},set logLevel(e){if(e!==void 0){if(typeof e!=`string`||[`verbose`,`info`,`warning`,`error`,`fatal`].indexOf(e)===-1)throw Error(`Unsupported logging level: ${e}`);S=e}},get logLevel(){return S}},"logLevel",{enumerable:!0});const C=(e,t)=>{let n=typeof document<`u`?document.createElement(`canvas`):new OffscreenCanvas(1,1);n.width=e.dims[3],n.height=e.dims[2];let r=n.getContext(`2d`);if(r!=null){let i,a;t?.tensorLayout!==void 0&&t.tensorLayout===`NHWC`?(i=e.dims[2],a=e.dims[3]):(i=e.dims[3],a=e.dims[2]);let o=t?.format===void 0?`RGB`:t.format,s=t?.norm,c,l;s===void 0||s.mean===void 0?c=[255,255,255,255]:typeof s.mean==`number`?c=[s.mean,s.mean,s.mean,s.mean]:(c=[s.mean[0],s.mean[1],s.mean[2],0],s.mean[3]!==void 0&&(c[3]=s.mean[3])),s===void 0||s.bias===void 0?l=[0,0,0,0]:typeof s.bias==`number`?l=[s.bias,s.bias,s.bias,s.bias]:(l=[s.bias[0],s.bias[1],s.bias[2],0],s.bias[3]!==void 0&&(l[3]=s.bias[3]));let u=a*i,d=0,f=u,p=u*2,m=-1;o===`RGBA`?(d=0,f=u,p=u*2,m=u*3):o===`RGB`?(d=0,f=u,p=u*2):o===`RBG`&&(d=0,p=u,f=u*2);for(let t=0;t<a;t++)for(let n=0;n<i;n++){let i=(e.data[d++]-l[0])*c[0],a=(e.data[f++]-l[1])*c[1],o=(e.data[p++]-l[2])*c[2],s=m===-1?255:(e.data[m++]-l[3])*c[3];r.fillStyle=`rgba(`+i+`,`+a+`,`+o+`,`+s+`)`,r.fillRect(n,t,1,1)}if(`toDataURL`in n)return n.toDataURL();throw Error(`toDataURL is not supported`)}else throw Error(`Can not access image data`)},ee=(e,t)=>{let n=typeof document<`u`?document.createElement(`canvas`).getContext(`2d`):new OffscreenCanvas(1,1).getContext(`2d`),r;if(n!=null){let i,a,o;t?.tensorLayout!==void 0&&t.tensorLayout===`NHWC`?(i=e.dims[2],a=e.dims[1],o=e.dims[3]):(i=e.dims[3],a=e.dims[2],o=e.dims[1]);let s=t===void 0||t.format===void 0?`RGB`:t.format,c=t?.norm,l,u;c===void 0||c.mean===void 0?l=[255,255,255,255]:typeof c.mean==`number`?l=[c.mean,c.mean,c.mean,c.mean]:(l=[c.mean[0],c.mean[1],c.mean[2],255],c.mean[3]!==void 0&&(l[3]=c.mean[3])),c===void 0||c.bias===void 0?u=[0,0,0,0]:typeof c.bias==`number`?u=[c.bias,c.bias,c.bias,c.bias]:(u=[c.bias[0],c.bias[1],c.bias[2],0],c.bias[3]!==void 0&&(u[3]=c.bias[3]));let d=a*i;if(t!==void 0&&(t.format!==void 0&&o===4&&t.format!==`RGBA`||o===3&&t.format!==`RGB`&&t.format!==`BGR`))throw Error(`Tensor format doesn't match input tensor dims`);let f=0,p=1,m=2,h=3,g=0,_=d,v=d*2,y=-1;s===`RGBA`?(g=0,_=d,v=d*2,y=d*3):s===`RGB`?(g=0,_=d,v=d*2):s===`RBG`&&(g=0,v=d,_=d*2),r=n.createImageData(i,a);for(let t=0;t<a*i;f+=4,p+=4,m+=4,h+=4,t++)r.data[f]=(e.data[g++]-u[0])*l[0],r.data[p]=(e.data[_++]-u[1])*l[1],r.data[m]=(e.data[v++]-u[2])*l[2],r.data[h]=y===-1?255:(e.data[y++]-u[3])*l[3]}else throw Error(`Can not access image data`);return r},w=(e,t)=>{if(e===void 0)throw Error(`Image buffer must be defined`);if(t.height===void 0||t.width===void 0)throw Error(`Image height and width must be defined`);if(t.tensorLayout===`NHWC`)throw Error(`NHWC Tensor layout is not supported yet`);let{height:n,width:r}=t,i=t.norm??{mean:255,bias:0},a,o;a=typeof i.mean==`number`?[i.mean,i.mean,i.mean,i.mean]:[i.mean[0],i.mean[1],i.mean[2],i.mean[3]??255],o=typeof i.bias==`number`?[i.bias,i.bias,i.bias,i.bias]:[i.bias[0],i.bias[1],i.bias[2],i.bias[3]??0];let s=t.format===void 0?`RGBA`:t.format,c=t.tensorFormat===void 0||t.tensorFormat===void 0?`RGB`:t.tensorFormat,l=n*r,u=c===`RGBA`?new Float32Array(l*4):new Float32Array(l*3),d=4,f=0,p=1,m=2,h=3,g=0,_=l,v=l*2,y=-1;s===`RGB`&&(d=3,f=0,p=1,m=2,h=-1),c===`RGBA`?y=l*3:c===`RBG`?(g=0,v=l,_=l*2):c===`BGR`&&(v=0,_=l,g=l*2);for(let t=0;t<l;t++,f+=d,m+=d,p+=d,h+=d)u[g++]=(e[f]+o[0])/a[0],u[_++]=(e[p]+o[1])/a[1],u[v++]=(e[m]+o[2])/a[2],y!==-1&&h!==-1&&(u[y++]=(e[h]+o[3])/a[3]);return c===`RGBA`?new le(`float32`,u,[1,4,n,r]):new le(`float32`,u,[1,3,n,r])},T=async(e,t)=>{let n=typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement,r=typeof ImageData<`u`&&e instanceof ImageData,i=typeof ImageBitmap<`u`&&e instanceof ImageBitmap,a=typeof e==`string`,o,s=t??{},c=()=>{if(typeof document<`u`)return document.createElement(`canvas`);if(typeof OffscreenCanvas<`u`)return new OffscreenCanvas(1,1);throw Error(`Canvas is not supported`)},l=e=>typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||e instanceof OffscreenCanvas?e.getContext(`2d`):null;if(n){let n=c();n.width=e.width,n.height=e.height;let r=l(n);if(r!=null){let n=e.height,i=e.width;if(t!==void 0&&t.resizedHeight!==void 0&&t.resizedWidth!==void 0&&(n=t.resizedHeight,i=t.resizedWidth),t!==void 0){if(s=t,t.tensorFormat!==void 0)throw Error(`Image input config format must be RGBA for HTMLImageElement`);s.tensorFormat=`RGBA`,s.height=n,s.width=i}else s.tensorFormat=`RGBA`,s.height=n,s.width=i;r.drawImage(e,0,0),o=r.getImageData(0,0,i,n).data}else throw Error(`Can not access image data`)}else if(r){let n,r;if(t!==void 0&&t.resizedWidth!==void 0&&t.resizedHeight!==void 0?(n=t.resizedHeight,r=t.resizedWidth):(n=e.height,r=e.width),t!==void 0&&(s=t),s.format=`RGBA`,s.height=n,s.width=r,t!==void 0){let t=c();t.width=r,t.height=n;let i=l(t);if(i!=null)i.putImageData(e,0,0),o=i.getImageData(0,0,r,n).data;else throw Error(`Can not access image data`)}else o=e.data}else if(i){if(t===void 0)throw Error(`Please provide image config with format for Imagebitmap`);let n=c();n.width=e.width,n.height=e.height;let r=l(n);if(r!=null){let t=e.height,n=e.width;return r.drawImage(e,0,0,n,t),o=r.getImageData(0,0,n,t).data,s.height=t,s.width=n,w(o,s)}else throw Error(`Can not access image data`)}else if(a)return new Promise((t,n)=>{let r=c(),i=l(r);if(!e||!i)return n();let a=new Image;a.crossOrigin=`Anonymous`,a.src=e,a.onload=()=>{r.width=a.width,r.height=a.height,i.drawImage(a,0,0,r.width,r.height);let e=i.getImageData(0,0,r.width,r.height);s.height=r.height,s.width=r.width,t(w(e.data,s))}});else throw Error(`Input data provided is not supported - aborted tensor creation`);if(o!==void 0)return w(o,s);throw Error(`Input data provided is not supported - aborted tensor creation`)},te=(e,t)=>{let{width:n,height:r,download:i,dispose:a}=t;return new le({location:`texture`,type:`float32`,texture:e,dims:[1,r,n,4],download:i,dispose:a})},ne=(e,t)=>{let{dataType:n,dims:r,download:i,dispose:a}=t;return new le({location:`gpu-buffer`,type:n??`float32`,gpuBuffer:e,dims:r,download:i,dispose:a})},E=(e,t)=>{let{dataType:n,dims:r,download:i,dispose:a}=t;return new le({location:`ml-tensor`,type:n??`float32`,mlTensor:e,dims:r,download:i,dispose:a})},D=(e,t,n)=>new le({location:`cpu-pinned`,type:e,data:t,dims:n??[t.length]}),re=new Map([[`float32`,Float32Array],[`uint8`,Uint8Array],[`int8`,Int8Array],[`uint16`,Uint16Array],[`int16`,Int16Array],[`int32`,Int32Array],[`bool`,Uint8Array],[`float64`,Float64Array],[`uint32`,Uint32Array],[`int4`,Uint8Array],[`uint4`,Uint8Array]]),ie=new Map([[Float32Array,`float32`],[Uint8Array,`uint8`],[Int8Array,`int8`],[Uint16Array,`uint16`],[Int16Array,`int16`],[Int32Array,`int32`],[Float64Array,`float64`],[Uint32Array,`uint32`]]);let ae=!1;const oe=()=>{if(!ae){ae=!0;let e=typeof BigInt64Array<`u`&&BigInt64Array.from,t=typeof BigUint64Array<`u`&&BigUint64Array.from,n=globalThis.Float16Array,r=n!==void 0&&n.from;e&&(re.set(`int64`,BigInt64Array),ie.set(BigInt64Array,`int64`)),t&&(re.set(`uint64`,BigUint64Array),ie.set(BigUint64Array,`uint64`)),r?(re.set(`float16`,n),ie.set(n,`float16`)):re.set(`float16`,Uint16Array)}},se=e=>{let t=1;for(let n=0;n<e.length;n++){let r=e[n];if(typeof r!=`number`||!Number.isSafeInteger(r))throw TypeError(`dims[${n}] must be an integer, got: ${r}`);if(r<0)throw RangeError(`dims[${n}] must be a non-negative integer, got: ${r}`);t*=r}return t},ce=(e,t)=>{switch(e.location){case`cpu`:return new le(e.type,e.data,t);case`cpu-pinned`:return new le({location:`cpu-pinned`,data:e.data,type:e.type,dims:t});case`texture`:return new le({location:`texture`,texture:e.texture,type:e.type,dims:t});case`gpu-buffer`:return new le({location:`gpu-buffer`,gpuBuffer:e.gpuBuffer,type:e.type,dims:t});case`ml-tensor`:return new le({location:`ml-tensor`,mlTensor:e.mlTensor,type:e.type,dims:t});default:throw Error(`tensorReshape: tensor location ${e.location} is not supported`)}};var le=class{constructor(e,t,n){oe();let r,i;if(typeof e==`object`&&`location`in e)switch(this.dataLocation=e.location,r=e.type,i=e.dims,e.location){case`cpu-pinned`:{let t=re.get(r);if(!t)throw TypeError(`unsupported type "${r}" to create tensor from pinned buffer`);if(!(e.data instanceof t))throw TypeError(`buffer should be of type ${t.name}`);this.cpuData=e.data;break}case`texture`:if(r!==`float32`)throw TypeError(`unsupported type "${r}" to create tensor from texture`);this.gpuTextureData=e.texture,this.downloader=e.download,this.disposer=e.dispose;break;case`gpu-buffer`:if(r!==`float32`&&r!==`float16`&&r!==`int32`&&r!==`int64`&&r!==`uint32`&&r!==`uint8`&&r!==`bool`&&r!==`uint4`&&r!==`int4`)throw TypeError(`unsupported type "${r}" to create tensor from gpu buffer`);this.gpuBufferData=e.gpuBuffer,this.downloader=e.download,this.disposer=e.dispose;break;case`ml-tensor`:if(r!==`float32`&&r!==`float16`&&r!==`int32`&&r!==`int64`&&r!==`uint32`&&r!==`uint64`&&r!==`int8`&&r!==`uint8`&&r!==`bool`&&r!==`uint4`&&r!==`int4`)throw TypeError(`unsupported type "${r}" to create tensor from MLTensor`);this.mlTensorData=e.mlTensor,this.downloader=e.download,this.disposer=e.dispose;break;default:throw Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let a,o;if(typeof e==`string`)if(r=e,o=n,e===`string`){if(!Array.isArray(t))throw TypeError(`A string tensor's data must be a string array.`);a=t}else{let n=re.get(e);if(n===void 0)throw TypeError(`Unsupported tensor type: ${e}.`);if(Array.isArray(t)){if(e===`float16`&&n===Uint16Array||e===`uint4`||e===`int4`)throw TypeError(`Creating a ${e} tensor from number array is not supported. Please use ${n.name} as data.`);a=e===`uint64`||e===`int64`?n.from(t,BigInt):n.from(t)}else if(t instanceof n)a=t;else if(t instanceof Uint8ClampedArray)if(e===`uint8`)a=Uint8Array.from(t);else throw TypeError(`A Uint8ClampedArray tensor's data must be type of uint8`);else if(e===`float16`&&t instanceof Uint16Array&&n!==Uint16Array)a=new globalThis.Float16Array(t.buffer,t.byteOffset,t.length);else throw TypeError(`A ${r} tensor's data must be type of ${n}`)}else if(o=t,Array.isArray(e)){if(e.length===0)throw TypeError(`Tensor type cannot be inferred from an empty array.`);let t=typeof e[0];if(t===`string`)r=`string`,a=e;else if(t===`boolean`)r=`bool`,a=Uint8Array.from(e);else throw TypeError(`Invalid element type of data array: ${t}.`)}else if(e instanceof Uint8ClampedArray)r=`uint8`,a=Uint8Array.from(e);else{let t=ie.get(e.constructor);if(t===void 0)throw TypeError(`Unsupported type for tensor data: ${e.constructor}.`);r=t,a=e}if(o===void 0)o=[a.length];else if(!Array.isArray(o))throw TypeError(`A tensor's dims must be a number array`);i=o,this.cpuData=a,this.dataLocation=`cpu`}let a=se(i);if(this.cpuData&&a!==this.cpuData.length&&!((r===`uint4`||r===`int4`)&&Math.ceil(a/2)===this.cpuData.length))throw Error(`Tensor's size(${a}) does not match data length(${this.cpuData.length}).`);this.type=r,this.dims=i,this.size=a}static async fromImage(e,t){return T(e,t)}static fromTexture(e,t){return te(e,t)}static fromGpuBuffer(e,t){return ne(e,t)}static fromMLTensor(e,t){return E(e,t)}static fromPinnedBuffer(e,t,n){return D(e,t,n)}toDataURL(e){return C(this,e)}toImageData(e){return ee(this,e)}get data(){if(this.ensureValid(),!this.cpuData)throw Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw Error(`The data is not stored as a WebGL texture.`);return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw Error(`The data is not stored as a WebGPU buffer.`);return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw Error(`The data is not stored as a WebNN MLTensor.`);return this.mlTensorData}async getData(e){switch(this.ensureValid(),this.dataLocation){case`cpu`:case`cpu-pinned`:return this.data;case`texture`:case`gpu-buffer`:case`ml-tensor`:if(!this.downloader)throw Error(`The current tensor is not created with a specified data downloader.`);if(this.isDownloading)throw Error(`The current tensor is being downloaded.`);try{this.isDownloading=!0;let t=await this.downloader();return this.downloader=void 0,this.dataLocation=`cpu`,this.cpuData=t,e&&this.disposer&&(this.disposer(),this.disposer=void 0),t}finally{this.isDownloading=!1}default:throw Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw Error(`The current tensor is being downloaded.`);this.disposer&&=(this.disposer(),void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation=`none`}ensureValid(){if(this.dataLocation===`none`)throw Error(`The tensor is disposed.`)}reshape(e){if(this.ensureValid(),this.downloader||this.disposer)throw Error(`Cannot reshape a tensor that owns GPU resource.`);return ce(this,e)}};const ue=le,de=e=>e!=null
1
+ import{a as e,i as t,t as n}from"./chunk-8V8biNmG.js";import{t as r}from"./chunk-4SM9QyPF.js";import{n as i,t as a}from"./chunk-Drx4e34U2.js";import{createRequire as o}from"node:module";import s from"node:path";import{spawnSync as c}from"node:child_process";import l from"process";import{Buffer as u}from"buffer";import d from"fs";import f from"node:events";import p from"node:stream";import m from"path";import{availableParallelism as h}from"node:os";import{createHash as g}from"node:crypto";import _ from"url";import{Readable as v}from"stream";import y from"node:util";import{createRequire as b}from"module";import{pipeline as x}from"stream/promises";let S=`warning`;Object.defineProperty({wasm:{},webgl:{},webgpu:{},versions:{common:`1.30.0`},set logLevel(e){if(e!==void 0){if(typeof e!=`string`||[`verbose`,`info`,`warning`,`error`,`fatal`].indexOf(e)===-1)throw Error(`Unsupported logging level: ${e}`);S=e}},get logLevel(){return S}},"logLevel",{enumerable:!0});const C=(e,t)=>{let n=typeof document<`u`?document.createElement(`canvas`):new OffscreenCanvas(1,1);n.width=e.dims[3],n.height=e.dims[2];let r=n.getContext(`2d`);if(r!=null){let i,a;t?.tensorLayout!==void 0&&t.tensorLayout===`NHWC`?(i=e.dims[2],a=e.dims[3]):(i=e.dims[3],a=e.dims[2]);let o=t?.format===void 0?`RGB`:t.format,s=t?.norm,c,l;s===void 0||s.mean===void 0?c=[255,255,255,255]:typeof s.mean==`number`?c=[s.mean,s.mean,s.mean,s.mean]:(c=[s.mean[0],s.mean[1],s.mean[2],0],s.mean[3]!==void 0&&(c[3]=s.mean[3])),s===void 0||s.bias===void 0?l=[0,0,0,0]:typeof s.bias==`number`?l=[s.bias,s.bias,s.bias,s.bias]:(l=[s.bias[0],s.bias[1],s.bias[2],0],s.bias[3]!==void 0&&(l[3]=s.bias[3]));let u=a*i,d=0,f=u,p=u*2,m=-1;o===`RGBA`?(d=0,f=u,p=u*2,m=u*3):o===`RGB`?(d=0,f=u,p=u*2):o===`RBG`&&(d=0,p=u,f=u*2);for(let t=0;t<a;t++)for(let n=0;n<i;n++){let i=(e.data[d++]-l[0])*c[0],a=(e.data[f++]-l[1])*c[1],o=(e.data[p++]-l[2])*c[2],s=m===-1?255:(e.data[m++]-l[3])*c[3];r.fillStyle=`rgba(`+i+`,`+a+`,`+o+`,`+s+`)`,r.fillRect(n,t,1,1)}if(`toDataURL`in n)return n.toDataURL();throw Error(`toDataURL is not supported`)}else throw Error(`Can not access image data`)},ee=(e,t)=>{let n=typeof document<`u`?document.createElement(`canvas`).getContext(`2d`):new OffscreenCanvas(1,1).getContext(`2d`),r;if(n!=null){let i,a,o;t?.tensorLayout!==void 0&&t.tensorLayout===`NHWC`?(i=e.dims[2],a=e.dims[1],o=e.dims[3]):(i=e.dims[3],a=e.dims[2],o=e.dims[1]);let s=t===void 0||t.format===void 0?`RGB`:t.format,c=t?.norm,l,u;c===void 0||c.mean===void 0?l=[255,255,255,255]:typeof c.mean==`number`?l=[c.mean,c.mean,c.mean,c.mean]:(l=[c.mean[0],c.mean[1],c.mean[2],255],c.mean[3]!==void 0&&(l[3]=c.mean[3])),c===void 0||c.bias===void 0?u=[0,0,0,0]:typeof c.bias==`number`?u=[c.bias,c.bias,c.bias,c.bias]:(u=[c.bias[0],c.bias[1],c.bias[2],0],c.bias[3]!==void 0&&(u[3]=c.bias[3]));let d=a*i;if(t!==void 0&&(t.format!==void 0&&o===4&&t.format!==`RGBA`||o===3&&t.format!==`RGB`&&t.format!==`BGR`))throw Error(`Tensor format doesn't match input tensor dims`);let f=0,p=1,m=2,h=3,g=0,_=d,v=d*2,y=-1;s===`RGBA`?(g=0,_=d,v=d*2,y=d*3):s===`RGB`?(g=0,_=d,v=d*2):s===`RBG`&&(g=0,v=d,_=d*2),r=n.createImageData(i,a);for(let t=0;t<a*i;f+=4,p+=4,m+=4,h+=4,t++)r.data[f]=(e.data[g++]-u[0])*l[0],r.data[p]=(e.data[_++]-u[1])*l[1],r.data[m]=(e.data[v++]-u[2])*l[2],r.data[h]=y===-1?255:(e.data[y++]-u[3])*l[3]}else throw Error(`Can not access image data`);return r},w=(e,t)=>{if(e===void 0)throw Error(`Image buffer must be defined`);if(t.height===void 0||t.width===void 0)throw Error(`Image height and width must be defined`);if(t.tensorLayout===`NHWC`)throw Error(`NHWC Tensor layout is not supported yet`);let{height:n,width:r}=t,i=t.norm??{mean:255,bias:0},a,o;a=typeof i.mean==`number`?[i.mean,i.mean,i.mean,i.mean]:[i.mean[0],i.mean[1],i.mean[2],i.mean[3]??255],o=typeof i.bias==`number`?[i.bias,i.bias,i.bias,i.bias]:[i.bias[0],i.bias[1],i.bias[2],i.bias[3]??0];let s=t.format===void 0?`RGBA`:t.format,c=t.tensorFormat===void 0||t.tensorFormat===void 0?`RGB`:t.tensorFormat,l=n*r,u=c===`RGBA`?new Float32Array(l*4):new Float32Array(l*3),d=4,f=0,p=1,m=2,h=3,g=0,_=l,v=l*2,y=-1;s===`RGB`&&(d=3,f=0,p=1,m=2,h=-1),c===`RGBA`?y=l*3:c===`RBG`?(g=0,v=l,_=l*2):c===`BGR`&&(v=0,_=l,g=l*2);for(let t=0;t<l;t++,f+=d,m+=d,p+=d,h+=d)u[g++]=(e[f]+o[0])/a[0],u[_++]=(e[p]+o[1])/a[1],u[v++]=(e[m]+o[2])/a[2],y!==-1&&h!==-1&&(u[y++]=(e[h]+o[3])/a[3]);return c===`RGBA`?new le(`float32`,u,[1,4,n,r]):new le(`float32`,u,[1,3,n,r])},T=async(e,t)=>{let n=typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement,r=typeof ImageData<`u`&&e instanceof ImageData,i=typeof ImageBitmap<`u`&&e instanceof ImageBitmap,a=typeof e==`string`,o,s=t??{},c=()=>{if(typeof document<`u`)return document.createElement(`canvas`);if(typeof OffscreenCanvas<`u`)return new OffscreenCanvas(1,1);throw Error(`Canvas is not supported`)},l=e=>typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||e instanceof OffscreenCanvas?e.getContext(`2d`):null;if(n){let n=c();n.width=e.width,n.height=e.height;let r=l(n);if(r!=null){let n=e.height,i=e.width;if(t!==void 0&&t.resizedHeight!==void 0&&t.resizedWidth!==void 0&&(n=t.resizedHeight,i=t.resizedWidth),t!==void 0){if(s=t,t.tensorFormat!==void 0)throw Error(`Image input config format must be RGBA for HTMLImageElement`);s.tensorFormat=`RGBA`,s.height=n,s.width=i}else s.tensorFormat=`RGBA`,s.height=n,s.width=i;r.drawImage(e,0,0),o=r.getImageData(0,0,i,n).data}else throw Error(`Can not access image data`)}else if(r){let n,r;if(t!==void 0&&t.resizedWidth!==void 0&&t.resizedHeight!==void 0?(n=t.resizedHeight,r=t.resizedWidth):(n=e.height,r=e.width),t!==void 0&&(s=t),s.format=`RGBA`,s.height=n,s.width=r,t!==void 0){let t=c();t.width=r,t.height=n;let i=l(t);if(i!=null)i.putImageData(e,0,0),o=i.getImageData(0,0,r,n).data;else throw Error(`Can not access image data`)}else o=e.data}else if(i){if(t===void 0)throw Error(`Please provide image config with format for Imagebitmap`);let n=c();n.width=e.width,n.height=e.height;let r=l(n);if(r!=null){let t=e.height,n=e.width;return r.drawImage(e,0,0,n,t),o=r.getImageData(0,0,n,t).data,s.height=t,s.width=n,w(o,s)}else throw Error(`Can not access image data`)}else if(a)return new Promise((t,n)=>{let r=c(),i=l(r);if(!e||!i)return n();let a=new Image;a.crossOrigin=`Anonymous`,a.src=e,a.onload=()=>{r.width=a.width,r.height=a.height,i.drawImage(a,0,0,r.width,r.height);let e=i.getImageData(0,0,r.width,r.height);s.height=r.height,s.width=r.width,t(w(e.data,s))}});else throw Error(`Input data provided is not supported - aborted tensor creation`);if(o!==void 0)return w(o,s);throw Error(`Input data provided is not supported - aborted tensor creation`)},te=(e,t)=>{let{width:n,height:r,download:i,dispose:a}=t;return new le({location:`texture`,type:`float32`,texture:e,dims:[1,r,n,4],download:i,dispose:a})},ne=(e,t)=>{let{dataType:n,dims:r,download:i,dispose:a}=t;return new le({location:`gpu-buffer`,type:n??`float32`,gpuBuffer:e,dims:r,download:i,dispose:a})},E=(e,t)=>{let{dataType:n,dims:r,download:i,dispose:a}=t;return new le({location:`ml-tensor`,type:n??`float32`,mlTensor:e,dims:r,download:i,dispose:a})},D=(e,t,n)=>new le({location:`cpu-pinned`,type:e,data:t,dims:n??[t.length]}),re=new Map([[`float32`,Float32Array],[`uint8`,Uint8Array],[`int8`,Int8Array],[`uint16`,Uint16Array],[`int16`,Int16Array],[`int32`,Int32Array],[`bool`,Uint8Array],[`float64`,Float64Array],[`uint32`,Uint32Array],[`int4`,Uint8Array],[`uint4`,Uint8Array]]),ie=new Map([[Float32Array,`float32`],[Uint8Array,`uint8`],[Int8Array,`int8`],[Uint16Array,`uint16`],[Int16Array,`int16`],[Int32Array,`int32`],[Float64Array,`float64`],[Uint32Array,`uint32`]]);let ae=!1;const oe=()=>{if(!ae){ae=!0;let e=typeof BigInt64Array<`u`&&BigInt64Array.from,t=typeof BigUint64Array<`u`&&BigUint64Array.from,n=globalThis.Float16Array,r=n!==void 0&&n.from;e&&(re.set(`int64`,BigInt64Array),ie.set(BigInt64Array,`int64`)),t&&(re.set(`uint64`,BigUint64Array),ie.set(BigUint64Array,`uint64`)),r?(re.set(`float16`,n),ie.set(n,`float16`)):re.set(`float16`,Uint16Array)}},se=e=>{let t=1;for(let n=0;n<e.length;n++){let r=e[n];if(typeof r!=`number`||!Number.isSafeInteger(r))throw TypeError(`dims[${n}] must be an integer, got: ${r}`);if(r<0)throw RangeError(`dims[${n}] must be a non-negative integer, got: ${r}`);t*=r}return t},ce=(e,t)=>{switch(e.location){case`cpu`:return new le(e.type,e.data,t);case`cpu-pinned`:return new le({location:`cpu-pinned`,data:e.data,type:e.type,dims:t});case`texture`:return new le({location:`texture`,texture:e.texture,type:e.type,dims:t});case`gpu-buffer`:return new le({location:`gpu-buffer`,gpuBuffer:e.gpuBuffer,type:e.type,dims:t});case`ml-tensor`:return new le({location:`ml-tensor`,mlTensor:e.mlTensor,type:e.type,dims:t});default:throw Error(`tensorReshape: tensor location ${e.location} is not supported`)}};var le=class{constructor(e,t,n){oe();let r,i;if(typeof e==`object`&&`location`in e)switch(this.dataLocation=e.location,r=e.type,i=e.dims,e.location){case`cpu-pinned`:{let t=re.get(r);if(!t)throw TypeError(`unsupported type "${r}" to create tensor from pinned buffer`);if(!(e.data instanceof t))throw TypeError(`buffer should be of type ${t.name}`);this.cpuData=e.data;break}case`texture`:if(r!==`float32`)throw TypeError(`unsupported type "${r}" to create tensor from texture`);this.gpuTextureData=e.texture,this.downloader=e.download,this.disposer=e.dispose;break;case`gpu-buffer`:if(r!==`float32`&&r!==`float16`&&r!==`int32`&&r!==`int64`&&r!==`uint32`&&r!==`uint8`&&r!==`bool`&&r!==`uint4`&&r!==`int4`)throw TypeError(`unsupported type "${r}" to create tensor from gpu buffer`);this.gpuBufferData=e.gpuBuffer,this.downloader=e.download,this.disposer=e.dispose;break;case`ml-tensor`:if(r!==`float32`&&r!==`float16`&&r!==`int32`&&r!==`int64`&&r!==`uint32`&&r!==`uint64`&&r!==`int8`&&r!==`uint8`&&r!==`bool`&&r!==`uint4`&&r!==`int4`)throw TypeError(`unsupported type "${r}" to create tensor from MLTensor`);this.mlTensorData=e.mlTensor,this.downloader=e.download,this.disposer=e.dispose;break;default:throw Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let a,o;if(typeof e==`string`)if(r=e,o=n,e===`string`){if(!Array.isArray(t))throw TypeError(`A string tensor's data must be a string array.`);a=t}else{let n=re.get(e);if(n===void 0)throw TypeError(`Unsupported tensor type: ${e}.`);if(Array.isArray(t)){if(e===`float16`&&n===Uint16Array||e===`uint4`||e===`int4`)throw TypeError(`Creating a ${e} tensor from number array is not supported. Please use ${n.name} as data.`);a=e===`uint64`||e===`int64`?n.from(t,BigInt):n.from(t)}else if(t instanceof n)a=t;else if(t instanceof Uint8ClampedArray)if(e===`uint8`)a=Uint8Array.from(t);else throw TypeError(`A Uint8ClampedArray tensor's data must be type of uint8`);else if(e===`float16`&&t instanceof Uint16Array&&n!==Uint16Array)a=new globalThis.Float16Array(t.buffer,t.byteOffset,t.length);else throw TypeError(`A ${r} tensor's data must be type of ${n}`)}else if(o=t,Array.isArray(e)){if(e.length===0)throw TypeError(`Tensor type cannot be inferred from an empty array.`);let t=typeof e[0];if(t===`string`)r=`string`,a=e;else if(t===`boolean`)r=`bool`,a=Uint8Array.from(e);else throw TypeError(`Invalid element type of data array: ${t}.`)}else if(e instanceof Uint8ClampedArray)r=`uint8`,a=Uint8Array.from(e);else{let t=ie.get(e.constructor);if(t===void 0)throw TypeError(`Unsupported type for tensor data: ${e.constructor}.`);r=t,a=e}if(o===void 0)o=[a.length];else if(!Array.isArray(o))throw TypeError(`A tensor's dims must be a number array`);i=o,this.cpuData=a,this.dataLocation=`cpu`}let a=se(i);if(this.cpuData&&a!==this.cpuData.length&&!((r===`uint4`||r===`int4`)&&Math.ceil(a/2)===this.cpuData.length))throw Error(`Tensor's size(${a}) does not match data length(${this.cpuData.length}).`);this.type=r,this.dims=i,this.size=a}static async fromImage(e,t){return T(e,t)}static fromTexture(e,t){return te(e,t)}static fromGpuBuffer(e,t){return ne(e,t)}static fromMLTensor(e,t){return E(e,t)}static fromPinnedBuffer(e,t,n){return D(e,t,n)}toDataURL(e){return C(this,e)}toImageData(e){return ee(this,e)}get data(){if(this.ensureValid(),!this.cpuData)throw Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw Error(`The data is not stored as a WebGL texture.`);return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw Error(`The data is not stored as a WebGPU buffer.`);return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw Error(`The data is not stored as a WebNN MLTensor.`);return this.mlTensorData}async getData(e){switch(this.ensureValid(),this.dataLocation){case`cpu`:case`cpu-pinned`:return this.data;case`texture`:case`gpu-buffer`:case`ml-tensor`:if(!this.downloader)throw Error(`The current tensor is not created with a specified data downloader.`);if(this.isDownloading)throw Error(`The current tensor is being downloaded.`);try{this.isDownloading=!0;let t=await this.downloader();return this.downloader=void 0,this.dataLocation=`cpu`,this.cpuData=t,e&&this.disposer&&(this.disposer(),this.disposer=void 0),t}finally{this.isDownloading=!1}default:throw Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw Error(`The current tensor is being downloaded.`);this.disposer&&=(this.disposer(),void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation=`none`}ensureValid(){if(this.dataLocation===`none`)throw Error(`The tensor is disposed.`)}reshape(e){if(this.ensureValid(),this.downloader||this.disposer)throw Error(`Cannot reshape a tensor that owns GPU resource.`);return ce(this,e)}};const ue=le,de=e=>e!=null
2
2
  /*!
3
3
  Copyright 2013 Lovell Fuller and others.
4
4
  SPDX-License-Identifier: Apache-2.0