@swifty.js/swifty 0.0.31 → 0.0.33

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 (86) hide show
  1. package/README.md +110 -3
  2. package/dist/acp-5WRTN2LL.js +14 -0
  3. package/dist/agent-3CAPJCPD.js +4 -0
  4. package/dist/anthropic-FXRRA63E.js +4 -0
  5. package/dist/{bwrap-TPE6G4BM.js → bwrap-ZTS67W2K.js} +1 -1
  6. package/dist/checker-3O7QF7XV.js +4 -0
  7. package/dist/chunk-2U4IWZ6E.js +4 -0
  8. package/dist/chunk-35X3GW25.js +4 -0
  9. package/dist/chunk-4C3KJLJV.js +4 -0
  10. package/dist/chunk-4HSQBZBI.js +4 -0
  11. package/dist/{chunk-AGJYBJ5M.js → chunk-4PQYUHSN.js} +1 -1
  12. package/dist/chunk-6I3HEMIE.js +4 -0
  13. package/dist/{chunk-C3WGLVVZ.js → chunk-7JQHFZRD.js} +2 -2
  14. package/dist/chunk-C5WLP3DH.js +5 -0
  15. package/dist/chunk-FUKVR3XO.js +608 -0
  16. package/dist/chunk-FZORZF22.js +16 -0
  17. package/dist/chunk-G2TE2QZM.js +4 -0
  18. package/dist/chunk-I7XJSLRI.js +4 -0
  19. package/dist/{chunk-OQCEP2F5.js → chunk-IKQTIDRL.js} +1 -1
  20. package/dist/chunk-IZ7QOBSB.js +4 -0
  21. package/dist/chunk-LC7ZWLIH.js +4 -0
  22. package/dist/chunk-LHSUYZO5.js +4 -0
  23. package/dist/chunk-M4D66APS.js +67 -0
  24. package/dist/chunk-NAAAN2TD.js +60 -0
  25. package/dist/chunk-NCZR3AGA.js +65 -0
  26. package/dist/{server-BNT2IIKB.js → chunk-PXQD6GWP.js} +15 -22
  27. package/dist/{chunk-FPQ2LBL4.js → chunk-QQVDL4QT.js} +1 -1
  28. package/dist/{chunk-TCQ4EB4G.js → chunk-TNF3EHFY.js} +1 -1
  29. package/dist/chunk-XGUH7SGV.js +4 -0
  30. package/dist/chunk-YIKI3EPG.js +150 -0
  31. package/dist/chunk-YKWIZE5D.js +4 -0
  32. package/dist/{devtools-OJ75EP3T.js → devtools-WJM4UVVT.js} +1 -1
  33. package/dist/esm-46WSO26W.js +4 -0
  34. package/dist/esm-4DBD7ONK.js +229 -0
  35. package/dist/esm-6EDGM6QS.js +4 -0
  36. package/dist/esm-D6BB3FBR.js +4 -0
  37. package/dist/esm-P2KEXEEK.js +4 -0
  38. package/dist/esm-XYKZYVLV.js +4 -0
  39. package/dist/esm-YJVVI2QX.js +4 -0
  40. package/dist/getMachineId-bsd-NBOQ3GRQ.js +4 -0
  41. package/dist/getMachineId-darwin-6VBNSUFR.js +5 -0
  42. package/dist/getMachineId-linux-RQ33NIOO.js +4 -0
  43. package/dist/getMachineId-unsupported-IWOYPUHZ.js +4 -0
  44. package/dist/getMachineId-win-ITT3WXP6.js +4 -0
  45. package/dist/lib/agent-NNYCUIOF.js +10 -0
  46. package/dist/lib/{anthropic-R6DMXE7U.js → anthropic-B33M2AVN.js} +4 -4
  47. package/dist/lib/{checker-M7RKMKJQ.js → checker-UPY4CXUL.js} +3 -3
  48. package/dist/lib/{chunk-OQIQOU5S.js → chunk-3OFLDUAW.js} +121 -1
  49. package/dist/lib/{chunk-EY7HE52Q.js → chunk-3XCGUKGJ.js} +18 -24
  50. package/dist/lib/{chunk-J6AV7SIF.js → chunk-AFYPVA5C.js} +261 -25
  51. package/dist/lib/{chunk-FZ4Y6MBN.js → chunk-BCBD34D2.js} +1 -1
  52. package/dist/lib/{chunk-A4MXZA5Q.js → chunk-CFYAZWDA.js} +10 -4
  53. package/dist/lib/{chunk-4MDCRPVV.js → chunk-FODSMOWP.js} +6 -6
  54. package/dist/lib/chunk-GTHYQZRL.js +31 -0
  55. package/dist/lib/{chunk-EWE5IWZE.js → chunk-LDWFI6MR.js} +15 -4
  56. package/dist/lib/{chunk-OEPCNATU.js → chunk-TJLAJGG4.js} +2 -2
  57. package/dist/lib/index.d.ts +2339 -1581
  58. package/dist/lib/index.js +12210 -10961
  59. package/dist/lib/{openai-5N42ZYIJ.js → openai-C2PZFGJ2.js} +3 -3
  60. package/dist/lib/providers-UJEWP7C7.js +419 -0
  61. package/dist/lib/{tool-filter-XG2GXFVN.js → tool-filter-BFEINZIA.js} +1 -1
  62. package/dist/main.js +190 -183
  63. package/dist/{node-4LTSRXL2.js → node-A6KBFKOV.js} +1 -1
  64. package/dist/{openai-NQYARTT6.js → openai-WPEICAZ4.js} +1 -1
  65. package/dist/providers-WNYZUMZ3.js +6 -0
  66. package/dist/seatbelt-PSPJ5LBR.js +5 -0
  67. package/dist/server-YPBLBRDN.js +4 -0
  68. package/dist/src-3A5BCUSZ.js +4 -0
  69. package/dist/src-CRYFVH7Y.js +12 -0
  70. package/dist/src-Y77IB66J.js +4 -0
  71. package/dist/src-ZCW4GCG2.js +4 -0
  72. package/dist/{tool-filter-5NDJMSTD.js → tool-filter-X6IYME2K.js} +1 -1
  73. package/dist/turndown.es-WNOSVZF6.js +83 -0
  74. package/package.json +38 -15
  75. package/dist/agent-O6C4FCQY.js +0 -4
  76. package/dist/anthropic-CFM2DXMB.js +0 -4
  77. package/dist/checker-A6PGACKZ.js +0 -4
  78. package/dist/chunk-4ABFUBO4.js +0 -601
  79. package/dist/chunk-AQ3A5CF4.js +0 -5
  80. package/dist/chunk-MVVSONAE.js +0 -4
  81. package/dist/chunk-OTVZGPHD.js +0 -121
  82. package/dist/chunk-X3UA5OZL.js +0 -4
  83. package/dist/chunk-Y2UUXOQA.js +0 -4
  84. package/dist/chunk-YAXZ2OUD.js +0 -150
  85. package/dist/lib/agent-YRTROHXU.js +0 -10
  86. package/dist/seatbelt-YXUQ5XR3.js +0 -5
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import { createRequire as __swiftyCreateRequire } from "node:module";
3
- const require = __swiftyCreateRequire(import.meta.url);
4
- import{D as t,I as k,b as v,c as _,d as S}from"./chunk-OTVZGPHD.js";import{existsSync as B,readFileSync as F}from"fs";import{homedir as Y}from"os";import{join as G}from"path";function m(e){return!!e._zod}function u(e,n){return m(e)?v(e,n):e.safeParse(n)}async function Ee(e,n){return m(e)?await _(e,n):await e.safeParseAsync(n)}function Pe(e){if(!e)return;let n;if(m(e)?n=e._zod?.def?.shape:n=e.shape,!!n){if(typeof n=="function")try{return n()}catch{return}return n}}function H(e){return e.length===0?"object root":e.reduce((n,o,r)=>r===0?String(o):typeof o=="number"?`${n}[${o}]`:`${n}.${o}`,"")}function T(e){if(e&&typeof e=="object"){if("issues"in e&&Array.isArray(e.issues)&&e.issues.length>0)return e.issues.map(n=>n.path?.length?`${n.message} at ${H(n.path)}`:n.message).join(`
5
- `);if("message"in e&&typeof e.message=="string")return e.message;try{return JSON.stringify(e)}catch{return String(e)}}return String(e)}function we(e){if(m(e)){let s=e._zod?.def;if(s){if(s.value!==void 0)return s.value;if(Array.isArray(s.values)&&s.values.length>0)return s.values[0]}}let o=e._def;if(o){if(o.value!==void 0)return o.value;if(Array.isArray(o.values)&&o.values.length>0)return o.values[0]}let r=e.value;if(r!==void 0)return r}var E=k({module:"config"}),N={anthropic:"ANTHROPIC_API_KEY",openai:"OPENAI_API_KEY","openai-compat":"OPENAI_API_KEY"};function W(e){return x.has(e)}var x=new Set(Object.keys(N)),c=class extends Error{constructor(n){super(n),this.name="ConfigError"}};function Z(){return G(Y(),".swifty","config.yaml")}var h=["off","minimal","low","medium","high","xhigh","max"],p=t.enum(["none","minimal","low","medium","high","xhigh","max"]),J=t.enum(["low","medium","high","xhigh","max"]),X=t.strictObject({off:t.literal("none").nullable().optional(),minimal:p.nullable().optional(),low:p.nullable().optional(),medium:p.nullable().optional(),high:p.nullable().optional(),xhigh:p.nullable().optional(),max:p.nullable().optional()}),O=t.looseObject({name:t.string(),protocol:t.enum(["anthropic","openai","openai-compat"]),base_url:t.string(),model:t.string(),api_key:t.string().optional(),thinking:t.enum(h).optional(),reasoning:t.boolean().optional(),thinking_level_map:X.optional(),thinking_mode:t.enum(["budget","adaptive"]).optional(),context_window:t.coerce.number().optional(),max_output_tokens:t.coerce.number().optional()}),q="high",P=1e6,w=128e3,Q={minimal:1024,low:2048,medium:8192,high:16384,xhigh:32768,max:65536},ee=1024,ne=1024;function ze(e){return h.some(n=>n===e)}function oe(e){return ie(e,e.thinking??q)}function Re(e){return e==="off"?0:Q[e]}function j(e,n){if(n?.reasoning===!1)return null;if(e==="off")return"none";let o=n?.thinking_level_map?.[e];if(o!==void 0)return o;if(n?.protocol==="anthropic"&&n.thinking_mode==="adaptive"){if(e==="minimal")return"low";if(e==="xhigh")return"high"}return e}function te(e,n){let o=J.safeParse(j(e,n));return o.success?o.data:null}function re(e){return e.reasoning===!1||e.protocol==="anthropic"&&e.thinking_mode!=="adaptive"&&M(e)<ee+ne?["off"]:h.filter(n=>{if(n==="off")return!0;if(e.protocol==="anthropic"&&e.thinking_mode==="adaptive")return te(n,e)!==null;let o=j(n,e);return o!==null&&o!=="none"})}function ie(e,n){let o=re(e),r="off";for(let i of h)if(o.includes(i)&&(r=i),i===n)break;return r}function C(e){return{...e,thinking:oe(e),context_window:I(e),max_output_tokens:M(e)}}function I(e){return Number.isSafeInteger(e.context_window)&&(e.context_window??0)>0?e.context_window??P:P}function M(e){let n=e.max_output_tokens,o=Number.isSafeInteger(n)&&(n??0)>0?n??w:w;return Math.min(o,I(e))}function Ue(e){if(e.api_key)return e.api_key;let n=W(e.protocol)?N[e.protocol]:"";return n?process.env[n]??"":""}var z=t.object({name:t.string(),command:t.string().optional(),args:t.array(t.string()).optional(),url:t.string().optional(),transport:t.string().optional(),headers:t.record(t.string(),t.string()).optional(),env:t.record(t.string(),t.string()).optional()}),R=t.object({id:t.string().optional(),event:t.string(),condition:t.string().optional(),action:t.object({type:t.string(),command:t.string().optional(),url:t.string().optional(),method:t.string().optional(),prompt:t.string().optional()}),reject:t.boolean().optional(),once:t.boolean().optional(),async:t.boolean().optional(),on_error:t.string().optional()}),U=t.object({enabled:t.boolean().optional(),auto_allow:t.boolean().optional(),network_enabled:t.boolean().optional()}),se=t.looseObject({providers:t.array(O),permission_mode:t.string().optional(),mcp_servers:t.array(z).default([]),hooks:t.array(R).default([]),sandbox:U.optional(),enable_coordinator_mode:t.boolean().optional(),enable_fork:t.boolean().optional()});function Ke(e){return e.enable_fork!==!1}function ae(e){return typeof e=="object"&&e!==null}function A(e){let n=F(e,"utf-8"),o=S.load(n);if(!ae(o))return E.error({path:e},"invalid yaml"),{providers:[],mcp_servers:[],hooks:[]};let r=u(se,o);if(r.success){let l=r.data;return{...l,providers:l.providers.map(C)}}E.error({error:r.error},"config error");let i=[],s,f=[],a=[],g,y=!1,b=!0;if("providers"in o){let l=u(t.array(O),o.providers);if(l.success)i=l.data.map(C);else throw new c(`Invalid provider configuration in ${e}: ${T(l.error)}`)}if("permission_mode"in o&&typeof o.permission_mode=="string"&&(s=o.permission_mode),"mcp_servers"in o){let l=u(t.array(z),o.mcp_servers);l.success&&(f=l.data)}if("hooks"in o){let l=u(t.array(R),o.hooks);l.success&&(a=l.data)}if("sandbox"in o){let l=u(U,o.sandbox);l.success&&(g=l.data)}return"enable_coordinator_mode"in o&&(y=!!o.enable_coordinator_mode),"enable_fork"in o&&(b=!!o.enable_fork),{providers:i,permission_mode:s,mcp_servers:f,hooks:a,sandbox:g,enable_coordinator_mode:y,enable_fork:b}}function L(e){if(e.providers.length===0)throw new c("At least one provider MUST be configured.");let n=["name","protocol","base_url","model"];for(let o=0;o<e.providers.length;o++){let r=e.providers[o],i={name:r.name,protocol:r.protocol,base_url:r.base_url,model:r.model},s=n.filter(f=>!i[f].trim());if(s.length>0)throw new c(`Provider #${String(o+1)}: missing fields: ${s.join(", ")}`);if(!x.has(r.protocol))throw new c(`Provider #${String(o+1)}: invalid protocol '${r.protocol}', MUST be one of: ${Array.from(x).join(", ")}`)}}function De(e,n={}){if(e){let i=A(e);return(!n.allowEmptyProviders||i.providers.length>0)&&L(i),i}let o=Z();if(!B(o)){if(n.allowEmptyProviders)return{providers:[],mcp_servers:[],hooks:[]};throw new c(`No config file found, expected ${o}.`)}let r=A(o);return(!n.allowEmptyProviders||r.providers.length>0)&&L(r),r}var d=class extends Error{constructor(n){super(n),this.name="LLMError"}},K=class extends d{constructor(n){super(n),this.name="AuthenticationError"}},D=class extends d{retryAfter;constructor(n,o){super(n),this.name="RateLimitError",this.retryAfter=o}},V=class extends d{constructor(n){super(n),this.name="NetworkError"}},$=class extends d{constructor(n){super(n),this.name="ContextTooLongError"}};var le="Tool execution was interrupted. The tool may or may not have completed; verify before relying on its effects.",He="The user rejected this tool use. Nothing was changed (for file edits, the new content was NOT written).";function Be(e){let n=[];for(let o=0;o<e.length;o++){let r=e[o];if(r.role==="assistant"&&r.toolUses?.length){n.push(r);let i=new Set(r.toolUses.map(a=>a.toolUseId)),s=[],f=[];for(;o+1<e.length;){let a=e[o+1];if(a.role!=="user"||!a.toolResults?.length||a.toolUses?.length)break;o++,f.push(a);for(let g of a.toolResults)i.delete(g.toolUseId)&&s.push(g)}for(let a of i)s.push({toolUseId:a,content:le,isError:!0});n.push({...f[0]??{role:"user",content:""},toolResults:s});for(let a of f.slice(1))(a.content.length>0||a.thinkingBlocks?.length)&&n.push({...a,toolResults:[]});continue}if((r.toolResults?.length??0)>0){if(r.content.length===0&&!r.toolUses?.length&&!r.thinkingBlocks?.length)continue;n.push({...r,toolResults:[]})}else n.push(r)}return n}export{u as a,Ee as b,Pe as c,we as d,Z as e,h as f,O as g,q as h,P as i,w as j,ne as k,ze as l,oe as m,Re as n,j as o,te as p,re as q,ie as r,I as s,M as t,Ue as u,Ke as v,De as w,d as x,K as y,D as z,V as A,$ as B,He as C,Be as D};
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import { createRequire as __swiftyCreateRequire } from "node:module";
3
- const require = __swiftyCreateRequire(import.meta.url);
4
- import{c as C}from"./chunk-OQCEP2F5.js";import{D as p,I as D,K as j,R as c,d as y,e as S}from"./chunk-OTVZGPHD.js";import{readFileSync as U,writeFileSync as q,mkdirSync as V,statSync as z}from"fs";import{homedir as G,tmpdir as Y}from"os";import{join as g,resolve as f,dirname as I}from"path";import{realpathSync as O}from"fs";import{basename as T,dirname as M,isAbsolute as _,join as N,relative as L,resolve as A,sep as H}from"path";function d(n){let e=A(n),s=[];for(;;)try{return N(O(e),...s)}catch(t){if(!(t instanceof Error)||!("code"in t)||t.code!=="ENOENT"&&t.code!=="ENOTDIR")throw t;let r=M(e);if(r===e)return A(n);s.unshift(T(e)),e=r}}function m(n,e){let s=L(n,e);return s===""||s!==".."&&!s.startsWith(`..${H}`)&&!_(s)}var k=D({module:"permissions"}),Z=[],B=["basename","cat","cksum","cmp","column","comm","cut","df","dirname","du","echo","expr","false","fold","fmt","grep","groups","head","id","jq","locate","ls","md5","md5sum","nl","od","paste","pgrep","printenv","printf","ps","pwd","readlink","realpath","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shasum","stat","strings","tac","tail","tr","true","tty","type","uname","uptime","w","wc","whereis","which","who","whoami","ack","ag","alias","arch","base64","bat","bzcat","cal","col","cloc","diff","diff3","dig","dmesg","expand","factor","free","help","hexdump","host","iconv","info","locale","lscpu","lsblk","lsof","lspci","lsusb","man","mdfind","mdls","ncal","netstat","nproc","nslookup","objdump","otool","pbpaste","ping","readelf","rev","sdiff","seq","sum","sw_vers","tldr","traceroute","unexpand","vm_stat","whois","xxd","xzcat","zcat","zgrep","zipinfo",/^command\s+(?:-v|-V)\s+\S+(?:\s+\S+)*$/,/^date(?!.*\s(?:-s|--set)(?:=|\s|$))(?:\s.*)?$/,/^file(?!.*(?:\s--compile(?:=|\s|$)|\s-[^-\s]*C))(?:\s.*)?$/,/^find(?!.*\s(?:-delete|-exec(?:dir)?|-ok(?:dir)?|-fls|-fprint(?:0)?|-fprintf)(?:\s|$))(?:\s.*)?$/,/^fd(?!.*\s(?:-x|-X|--exec|--exec-batch)(?:=|\s|$))(?:\s.*)?$/,/^hostname(?:\s+(?:-[adfFiIsyVh]|--(?:alias|all-fqdns|all-ip-addresses|domain|fqdn|help|ip-address|long|nis|short|version|yp)))*$/,/^rg(?!.*\s(?:--pre|--pre-glob|--hostname-bin)(?:=|\s|$))(?:\s.*)?$/,/^sort(?!.*\s(?:-o|--output|--compress-program)(?:=|\s|$))(?:\s.*)?$/,/^ss(?!.*\s(?:--kill|-[^-\s]*K)(?:\s|$))(?:\s.*)?$/,/^tree(?!.*\s(?:-o|--output)(?:=|\s|$))(?:\s.*)?$/,/^git\s+(?:--version|version)$/,/^git\s+(?:blame|cat-file|count-objects|describe|for-each-ref|ls-files|ls-tree|merge-base|name-rev|rev-parse|shortlog|show-ref|status|verify-pack)(?:\s.*)?$/,/^git\s+(?:diff|log|show)(?!.*\s(?:--ext-diff|--output)(?:=|\s|$))(?:\s.*)?$/,/^git\s+branch$/,/^git\s+branch(?=.*\s(?:-a|--all|-r|--remotes|--list|--show-current|--contains|--no-contains|--merged|--no-merged)(?:=|\s|$))(?!.*\s(?:-[dDmMcCf]|--(?:copy|create-reflog|delete|edit-description|move|set-upstream-to|unset-upstream))(?:=|\s|$))(?:\s.*)?$/,/^git\s+config(?:\s+(?:--blob(?:=|\s)\S+|--file(?:=|\s)\S+|--fixed-value|--global|--local|--null|--show-names|--show-origin|--show-scope|--system|--worktree|-z))*\s+(?:--get|--get-all|--get-regexp|--get-urlmatch|--list|-l)(?:\s.*)?$/,/^git\s+notes\s+(?:list|show)(?:\s.*)?$/,/^git\s+reflog\s+show(?:\s.*)?$/,/^git\s+remote(?:\s+-v)?$/,/^git\s+remote\s+get-url(?:\s+(?:--all|--push))*\s+\S+$/,/^git\s+remote\s+show(?:\s+-n)?(?:\s+\S+)?$/,/^git\s+stash\s+(?:list|show)(?:\s.*)?$/,/^git\s+submodule\s+(?:status|summary)(?:\s.*)?$/,/^git\s+tag(?:\s+(?:-l|--list)(?:\s.*)?)?$/,/^git\s+worktree\s+list(?:\s.*)?$/,/^(?:bun|npm|pnpm|yarn)\s+(?:explain|help|info|list|ls|outdated|prefix|query|root|search|show|view|why)(?:\s.*)?$/,/^(?:npm|pnpm|yarn)\s+config\s+(?:get|list)(?:\s.*)?$/,/^npm\s+pkg\s+get(?:\s.*)?$/,/^bun\s+pm\s+ls(?:\s.*)?$/,/^(?:bun|cargo|clang|cmake|composer|deno|gcc|gem|node|npm|php|pip|pip3|pnpm|python|python3|ruby|rustc|swift|yarn)\s+(?:--version|-V)$/,/^(?:go|helm|kubectl|podman|terraform)\s+version(?:\s.*)?$/,/^(?:java|javac)\s+-version$/,/^dotnet\s+(?:--info|--list-runtimes|--list-sdks|--version)$/,/^(?:docker|podman)\s+(?:diff|events|images|info|inspect|logs|port|ps|stats|top|version)(?:\s.*)?$/,/^(?:docker|podman)\s+(?:container|image|network|volume)\s+(?:inspect|ls)(?:\s.*)?$/,/^docker\s+compose\s+(?:config|images|logs|ps|top|version)(?:\s.*)?$/,/^kubectl\s+(?:api-resources|api-versions|cluster-info|describe|explain|get|logs|top|version)(?:\s.*)?$/,/^kubectl\s+config\s+(?:current-context|get-contexts|view)(?:\s.*)?$/,/^helm\s+(?:env|get|history|list|search|show|status|version)(?:\s.*)?$/,/^terraform\s+(?:output|providers|show|version)(?:\s.*)?$/,/^terraform\s+workspace\s+(?:list|show)(?:\s.*)?$/,/^systemctl\s+(?:is-active|is-enabled|is-failed|list-dependencies|list-jobs|list-sockets|list-timers|list-unit-files|list-units|show|show-environment|status)(?:\s.*)?$/,/^launchctl\s+(?:error|hostinfo|list|managername|managerpid|manageruid|print|print-cache|procinfo|variant|version)(?:\s.*)?$/,/^journalctl(?!.*\s--(?:rotate|vacuum|flush|sync))(?:\s.*)?$/,/^defaults\s+read(?:\s.*)?$/,/^ifconfig$/,/^ipconfig(?:\s+\/(?:all|allcompartments|displaydns))?\s*$/,/^ip\s+(?:addr(?:ess)?|route)$/,/^ip\s+(?:addr(?:ess)?|link|route|neigh(?:bor)?)\s+(?:show|list)\b(?:\s.*)?$/,/^tar\s+(?:--list\b|-[a-zA-Z]*t[a-zA-Z]*)(?:\s.*)?$/,/^unzip\s+-[a-zA-Z]*l(?:\s.*)?$/,/^git\s+(?:grep|fsck|rev-list|whatchanged|help|diff-tree|diff-index|diff-files|ls-remote|verify-tag|verify-commit)(?:\s.*)?$/,/^git\s+archive(?!.*\s(?:-o|--output)(?:=|\s|$))(?:\s.*)?$/,/^svn\s+(?:status|stat|st|diff|di|log|info|list|ls|cat|blame|ann|annotate|proplist|propget|pg)(?:\s.*)?$/,/^hg\s+(?:status|st|log|diff|summary|id|identify|branches|tags|manifest|cat|files|locate|heads|tip|parents|paths|root)(?:\s.*)?$/,/^cargo\s+(?:tree|search|locate-project|verify-project|config\s+get)(?:\s.*)?$/,/^gem\s+(?:list|search|info|env|dependency|contents|specification|sources\s+(?:-l|--list))(?:\s.*)?$/,/^brew\s+(?:--version|-v|list|info|search|outdated|deps|uses|config|leaves|doctor)(?:\s.*)?$/,/^choco\s+(?:--version|list|info|search|outdated)(?:\s.*)?$/,/^apt(?:-get)?\s+list(?:\s.*)?$/,/^apt-cache\s+(?:search|show|showpkg|policy|depends|rdepends|pkgnames)(?:\s.*)?$/,/^dpkg\s+(?:-l|-L|-s|-S|--list|--listfiles|--status|--search)\b(?:\s.*)?$/,/^rpm\s+-q[a-zA-Z]*(?:\s.*)?$/,/^(?:aws|gh|gcloud|az)\s+--version$/,/^aws\s+(?:\S+\s+)?(?:describe|list|get|wait)-\S+(?:\s.*)?$/,/^aws\s+s3\s+ls(?:\s.*)?$/,/^gcloud\s+\S+(?:\s+\S+)*\s+(?:list|describe)(?:\s.*)?$/,/^az\s+\S+(?:\s+\S+)*\s+(?:list|show)(?:\s.*)?$/,/^gh\s+(?:pr|issue|repo|run|release|gist)\s+(?:view|list|status|checks|diff)(?:\s.*)?$/,/^(?:docker|podman)\s+(?:system\s+(?:df|info)|history|context\s+(?:ls|list|show|inspect))(?:\s.*)?$/,/^(?:Get-(?:Acl|Alias|AuthenticodeSignature|ChildItem|CimInstance|Clipboard|Command|ComputerInfo|Content|Counter|Culture|Date|DnsClientCache|EventLog|ExecutionPolicy|FileHash|Help|History|Host|HotFix|Item|ItemProperty|Location|Member|Module|NetAdapter|NetIPAddress|NetNeighbor|NetIPConfiguration|NetRoute|NetTCPConnection|NetUDPEndpoint|Package|PackageProvider|PnpDevice|Printer|Process|PSDrive|PSProvider|PSRepository|PSSnapin|ScheduledTask|Service|TimeZone|UICulture|Variable|Verb|WinEvent|WmiObject)|Compare-Object|Format-(?:Custom|Hex|List|Table|Wide)|Group-Object|Measure-Object|Out-String|Resolve-Path|Select-Object|Select-String|Sort-Object|Test-Path|Where-Object|Write-(?:Debug|Error|Host|Information|Output|Progress|Verbose|Warning))(?:\s.*)?$/i],X={Bash:"command",PowerShell:"command",ComputerUse:"action",ReadFile:"file_path",WriteFile:"file_path",EditFile:"file_path",Glob:"pattern",Grep:"pattern",InstallSkill:"source"},J=[];function v(n,e){if(n==="McpCall")return C(c(e,"server",""),c(e,"tool",""));let s=X[n];if(!s)return"";let t=e[s];return typeof t=="string"?t:n==="ComputerUse"&&Array.isArray(e.actions)?e.actions.map(r=>j(r)?c(r,"type"):"").filter(Boolean).join(","):""}var P=class{allowedRoots;denyWritePaths;projectDir;constructor(e){this.projectDir=f(e),this.allowedRoots=[this.projectDir,Y()],this.denyWritePaths=J.map(s=>g(this.projectDir,s))}addRoot(e){this.allowedRoots.push(f(e))}addDenyWrite(e){this.denyWritePaths.push(f(e))}checkDenyWrite(e){let s=f(this.projectDir,e),t=d(s);for(let r of this.denyWritePaths)if(m(r,s)||m(d(r),t))return{effect:"deny",reason:`Path ${e} is in deny-write list`};return null}check(e){let s=d(f(this.projectDir,e));for(let t of this.allowedRoots)if(m(d(t),s))return null;return{effect:"deny",reason:`Path ${e} is outside allowed directories`}}};function K(n,e){let s="^"+n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".")+"$";try{return new RegExp(s).test(e)}catch(t){return k.error({err:t},"permissions operation failed"),!1}}var Q=/^(\w+)\((.+)\)$/;function F(n){let e;try{e=U(n,"utf-8")}catch(i){return i.code!=="ENOENT"&&k.error({err:i},"permissions operation failed"),[]}let s=p.object({rule:p.string().optional(),effect:p.string().optional()}),t;try{let i=y.load(e);t=S(p.array(s),i)}catch(i){return k.error({err:i},"permissions operation failed"),[]}let r=[];for(let i of t){if(i.effect!=="allow"&&i.effect!=="deny"&&i.effect!=="ask")continue;let o=Q.exec((i.rule??"").trim());o&&r.push({tool:o[1],pattern:o[2],effect:i.effect})}return r}function h(n,e,s){let t=null;for(let r of n)if(!(r.tool!==e&&r.tool!=="*")&&K(r.pattern,s)){if(r.effect==="deny")return"deny";r.effect==="ask"?t="ask":t??="allow"}return t}var E=class{userPath;projectPath;cache=new Map;constructor(e){this.userPath=g(G(),".swifty","permissions.yaml"),this.projectPath=g(e,".swifty","permissions.yaml")}rulesFor(e){let s;try{s=z(e,{bigint:!0})}catch{return this.cache.delete(e),[]}let t=this.cache.get(e);if(t?.mtimeNs===s.mtimeNs&&t.size===s.size)return t.rules;let r=F(e);return this.cache.set(e,{mtimeNs:s.mtimeNs,size:s.size,rules:r}),r}snapshot(){return[this.userPath,this.projectPath].flatMap(e=>this.rulesFor(e))}evaluate(e,s){return h(this.snapshot(),e,s)}appendProjectRule(e){V(I(this.projectPath),{recursive:!0});let s=F(this.projectPath);if(s.some(i=>i.tool===e.tool&&i.pattern===e.pattern&&i.effect===e.effect))return;s.push(e);let r=s.map(i=>({rule:`${i.tool}(${i.pattern})`,effect:i.effect}));q(this.projectPath,y.dump(r),"utf-8")}};function ee(n){for(let e of Z)if(e.re.test(n))return e.reason;return""}function se(n){let e=n.trim();return/[\r\n&|;<>`(){}[\]]/.test(e)?!1:B.some(s=>typeof s=="string"?e===s||e.startsWith(s+" ")||e.startsWith(s+" "):(s.lastIndex=0,s.test(e)))}function te(n,e){switch(n){case"bypassPermissions":return"allow";case"plan":return e==="read"?"allow":"ask";case"acceptEdits":return e==="command"?"ask":"allow";default:return e==="read"?"allow":"ask"}}var W=class n{constructor(e,s="default"){this.workDir=e;this.mode=s,this.sandbox=new P(e),this.ruleEngine=new E(e)}workDir;mode;planFilePath="";sandboxEnabled=!1;sandboxAutoAllow=!1;sandbox;ruleEngine;forWorkDir(e){let s=new n(e,this.mode);return s.ruleEngine=this.ruleEngine,s.sandboxEnabled=this.sandboxEnabled,s.sandboxAutoAllow=this.sandboxAutoAllow,s}check(e,s,t){let r=v(e,t),i=null,o=()=>i??=this.ruleEngine.snapshot(),a=h(o(),e,r);if(a==="deny"||a==="ask")return{effect:a,reason:`Permission rule: ${a}`};if(this.mode==="plan"&&(e==="WriteFile"||e==="EditFile")){let u=c(t,"file_path","");if(this.planFilePath&&d(f(this.workDir,u))===d(f(this.workDir,this.planFilePath))&&!this.sandbox.checkDenyWrite(u))return{effect:"allow",reason:"Plan file write allowed in plan mode"}}if(s==="command"&&se(r))return{effect:"allow",reason:"Safe read-only command"};let x=s==="command"?ee(r):"";if(x)return{effect:"deny",reason:`Dangerous command blocked: ${x}`};if(this.sandboxEnabled&&this.sandboxAutoAllow&&e==="Bash"){let u=c(t,"command").split(/\s*(?:&&|\|\||[;|])\s*/).map(w=>w.trim()).filter(Boolean),l=!1;for(let w of u){let R=h(o(),e,w);if(R==="deny")return{effect:"deny",reason:"Permission rule: deny"};R==="ask"&&(l=!0)}return l?{effect:"ask",reason:"Permission rule: ask (sandbox does not override)"}:{effect:"allow",reason:"Sandbox auto-allow: OS sandbox active"}}let b=c(t,"file_path",c(t,"path",""));if((s==="read"||s==="write")&&b){if(s==="write"){let l=this.sandbox.checkDenyWrite(b);if(l)return l}let u=this.sandbox.check(b);if(u&&this.mode!=="bypassPermissions"){let l=this.ruleEngine.evaluate(e,r);return l?{effect:l,reason:`Permission rule: ${l}`}:{effect:"ask",reason:u.reason}}}let $=h(o(),e,r);return $?{effect:$,reason:`Permission rule: ${$}`}:{effect:te(this.mode,s),reason:`Mode: ${this.mode}`}}allowExtraRoot(e){this.sandbox.addRoot(e)}allowAlways(e,s){let t=v(e,s),r=e==="ReadFile"||e==="WriteFile"||e==="EditFile",i;if(r&&t){let o=f(this.workDir,t),a=!1;try{a=z(o).isDirectory()}catch{}i=g(a?o:I(o),"*")}else i=t.trim().split(/\s+/).slice(0,2).join(" ")+"*";this.ruleEngine.appendProjectRule({tool:e,pattern:i,effect:"allow"})}describeToolAction(e,s){let t=v(e,s);if(t)return t;let r=[];for(let[i,o]of Object.entries(s)){let a=String(o);a.length>80&&(a=a.slice(0,80)+"..."),r.push(`${i}: ${a}`)}return r.join(", ")}};export{d as a,m as b,v as c,P as d,h as e,E as f,se as g,W as h};