@akasecurity/cli 0.9.12 → 0.9.13

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 (113) hide show
  1. package/dist/cli.js +553 -82
  2. package/extension/background.js +1 -1
  3. package/extension/bridge.js +1 -0
  4. package/extension/content.js +1 -1
  5. package/extension/manifest.json +24 -1
  6. package/extension/popup.html +9 -0
  7. package/extension/popup.js +1 -1
  8. package/extension/tap.js +1 -0
  9. package/native-host/host.js +919 -142
  10. package/native-host/scan-worker.js +209 -17
  11. package/native-host/sync.js +250 -32
  12. package/package.json +6 -6
  13. package/web-ui/web-ui/.next/BUILD_ID +1 -1
  14. package/web-ui/web-ui/.next/app-build-manifest.json +72 -72
  15. package/web-ui/web-ui/.next/app-path-routes-manifest.json +7 -7
  16. package/web-ui/web-ui/.next/build-manifest.json +2 -2
  17. package/web-ui/web-ui/.next/prerender-manifest.json +18 -18
  18. package/web-ui/web-ui/.next/server/app/(app)/activity/page.js +2 -2
  19. package/web-ui/web-ui/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  20. package/web-ui/web-ui/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  21. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js +2 -2
  22. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js.nft.json +1 -1
  23. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page_client-reference-manifest.js +1 -1
  24. package/web-ui/web-ui/.next/server/app/(app)/detections/page.js +2 -2
  25. package/web-ui/web-ui/.next/server/app/(app)/detections/page.js.nft.json +1 -1
  26. package/web-ui/web-ui/.next/server/app/(app)/detections/page_client-reference-manifest.js +1 -1
  27. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js +2 -2
  28. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js.nft.json +1 -1
  29. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page_client-reference-manifest.js +1 -1
  30. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js +1 -1
  31. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js.nft.json +1 -1
  32. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page_client-reference-manifest.js +1 -1
  33. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js +1 -1
  34. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js.nft.json +1 -1
  35. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page_client-reference-manifest.js +1 -1
  36. package/web-ui/web-ui/.next/server/app/(app)/findings/page.js +2 -2
  37. package/web-ui/web-ui/.next/server/app/(app)/findings/page.js.nft.json +1 -1
  38. package/web-ui/web-ui/.next/server/app/(app)/findings/page_client-reference-manifest.js +1 -1
  39. package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js +2 -2
  40. package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js.nft.json +1 -1
  41. package/web-ui/web-ui/.next/server/app/(app)/inventory/page_client-reference-manifest.js +1 -1
  42. package/web-ui/web-ui/.next/server/app/(app)/policies/page.js +2 -2
  43. package/web-ui/web-ui/.next/server/app/(app)/policies/page.js.nft.json +1 -1
  44. package/web-ui/web-ui/.next/server/app/(app)/policies/page_client-reference-manifest.js +1 -1
  45. package/web-ui/web-ui/.next/server/app/(app)/scan/page.js +3 -3
  46. package/web-ui/web-ui/.next/server/app/(app)/scan/page.js.nft.json +1 -1
  47. package/web-ui/web-ui/.next/server/app/(app)/scan/page_client-reference-manifest.js +1 -1
  48. package/web-ui/web-ui/.next/server/app/(app)/security/page.js +1 -1
  49. package/web-ui/web-ui/.next/server/app/(app)/security/page.js.nft.json +1 -1
  50. package/web-ui/web-ui/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  51. package/web-ui/web-ui/.next/server/app/(app)/settings/page.js +2 -2
  52. package/web-ui/web-ui/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  53. package/web-ui/web-ui/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  54. package/web-ui/web-ui/.next/server/app/(app)/updates/page.js +2 -2
  55. package/web-ui/web-ui/.next/server/app/(app)/updates/page.js.nft.json +1 -1
  56. package/web-ui/web-ui/.next/server/app/(app)/updates/page_client-reference-manifest.js +1 -1
  57. package/web-ui/web-ui/.next/server/app/(app)/vault/page.js +2 -2
  58. package/web-ui/web-ui/.next/server/app/(app)/vault/page.js.nft.json +1 -1
  59. package/web-ui/web-ui/.next/server/app/(app)/vault/page_client-reference-manifest.js +1 -1
  60. package/web-ui/web-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  61. package/web-ui/web-ui/.next/server/app/_not-found.html +1 -1
  62. package/web-ui/web-ui/.next/server/app/_not-found.rsc +2 -2
  63. package/web-ui/web-ui/.next/server/app/index.html +1 -1
  64. package/web-ui/web-ui/.next/server/app/index.rsc +2 -2
  65. package/web-ui/web-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  66. package/web-ui/web-ui/.next/server/app-paths-manifest.json +7 -7
  67. package/web-ui/web-ui/.next/server/chunks/121.js +1 -1
  68. package/web-ui/web-ui/.next/server/chunks/130.js +1026 -0
  69. package/web-ui/web-ui/.next/server/chunks/290.js +1 -1
  70. package/web-ui/web-ui/.next/server/chunks/3.js +1017 -0
  71. package/web-ui/web-ui/.next/server/chunks/300.js +1 -0
  72. package/web-ui/web-ui/.next/server/chunks/475.js +1 -1
  73. package/web-ui/web-ui/.next/server/chunks/662.js +1 -0
  74. package/web-ui/web-ui/.next/server/chunks/70.js +1 -0
  75. package/web-ui/web-ui/.next/server/functions-config-manifest.json +6 -6
  76. package/web-ui/web-ui/.next/server/middleware-manifest.json +5 -5
  77. package/web-ui/web-ui/.next/server/pages/404.html +1 -1
  78. package/web-ui/web-ui/.next/server/pages/500.html +1 -1
  79. package/web-ui/web-ui/.next/server/server-reference-manifest.js +1 -1
  80. package/web-ui/web-ui/.next/server/server-reference-manifest.json +1 -1
  81. package/web-ui/web-ui/.next/static/chunks/421-cc967c01935826d1.js +1 -0
  82. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/{page-a27c8937989448e4.js → page-41fba0354cc950be.js} +1 -1
  83. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/{page-2b805f9e1f995092.js → page-d2e03c3ab61af01a.js} +1 -1
  84. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/{page-a87cfee370c4e0f4.js → page-566036afcc87e4c9.js} +1 -1
  85. package/web-ui/web-ui/.next/static/chunks/app/(app)/{error-190085728a856072.js → error-4baae46bcee63009.js} +1 -1
  86. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/{page-4e214491c7be8d43.js → page-73dbcf0078b82ec4.js} +1 -1
  87. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-8051503193da1baf.js +1 -0
  88. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/{page-f16ba40d88e414b1.js → page-32c8a853bc8b5d34.js} +1 -1
  89. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-dc8fadb56d6d1e77.js +1 -0
  90. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-9b49ef42350ea7bd.js +1 -0
  91. package/web-ui/web-ui/.next/static/chunks/app/(app)/{layout-cb3c8c7b6b33414c.js → layout-f5f361f817f90ac9.js} +1 -1
  92. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/{page-ab639e48f60ad7ee.js → page-01b303adf3c8ee56.js} +1 -1
  93. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-8db3b62245c333a3.js +1 -0
  94. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/{page-a3095119b3e87341.js → page-7a4ba61626e0d130.js} +1 -1
  95. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-0930b49f6ab951bc.js +1 -0
  96. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/{page-5b32bd569c9569d9.js → page-9b04f3441a1a3f96.js} +1 -1
  97. package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/page-911a76e75f5a1419.js +1 -0
  98. package/web-ui/web-ui/.next/static/css/298a651f6af38209.css +2 -0
  99. package/web-ui/web-ui/dist/scan-worker.js +209 -17
  100. package/web-ui/web-ui/.next/server/chunks/611.js +0 -1015
  101. package/web-ui/web-ui/.next/server/chunks/7.js +0 -1
  102. package/web-ui/web-ui/.next/server/chunks/816.js +0 -1
  103. package/web-ui/web-ui/.next/server/chunks/968.js +0 -1006
  104. package/web-ui/web-ui/.next/static/chunks/674-d8237c5d0faa4a53.js +0 -1
  105. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-c1bb992ee1f12566.js +0 -1
  106. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-59c76da638f22b0e.js +0 -1
  107. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-c37447caf89a86e1.js +0 -1
  108. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-494614fccc8c62cc.js +0 -1
  109. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-469613d499e41093.js +0 -1
  110. package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/page-3152ceb31f024b8d.js +0 -1
  111. package/web-ui/web-ui/.next/static/css/6e72259eccdf4435.css +0 -2
  112. /package/web-ui/web-ui/.next/static/{PMeePXfXsQ2xxrXppySG_ → pkVZ1_T311YNkJgZOLTx5}/_buildManifest.js +0 -0
  113. /package/web-ui/web-ui/.next/static/{PMeePXfXsQ2xxrXppySG_ → pkVZ1_T311YNkJgZOLTx5}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";(()=>{var a="com.akasecurity.aka";var u=3e3,r=null,d=0,o=new Map;function l(e){let n=e,t=n.requestId;if(t===void 0)return;let s=o.get(t);s&&(o.delete(t),s(n))}function f(){r=null;for(let[e,n]of o)n({type:"error",requestId:e,ok:!1,message:"native host disconnected"});o.clear()}function g(){let e=chrome.runtime.connectNative(a);return e.onMessage.addListener(l),e.onDisconnect.addListener(f),e}function m(e){let n=`${Date.now().toString()}-${(d++).toString()}`;return new Promise(t=>{let s=setTimeout(()=>{o.delete(n)&&t({type:"error",requestId:n,ok:!1,message:"the AKA native host did not respond in time"})},u),i=c=>{clearTimeout(s),t(c)};o.set(n,i);try{(r??(r=g())).postMessage({...e,requestId:n})}catch{o.delete(n),i({type:"error",requestId:n,ok:!1,message:"failed to reach the AKA native host \u2014 is it installed? Run `aka extension install`."})}})}function p(e){return typeof e=="object"&&e!==null&&"type"in e}chrome.runtime.onMessage.addListener((e,n,t)=>p(e)?(m(e).then(t).catch(()=>{t({type:"error",requestId:void 0,ok:!1,message:"relay failed"})}),!0):!1);})();
1
+ "use strict";(()=>{var a="com.akasecurity.aka";var d=3e3,r=null,l=0,o=new Map;function f(e){let n=e,t=n.requestId;if(t===void 0)return;let s=o.get(t);s&&(o.delete(t),s(n))}function g(){r=null;for(let[e,n]of o)n({type:"error",requestId:e,ok:!1,message:"native host disconnected"});o.clear()}function m(){let e=chrome.runtime.connectNative(a);return e.onMessage.addListener(f),e.onDisconnect.addListener(g),e}function p(e){let n=`${Date.now().toString()}-${(l++).toString()}`;return new Promise(t=>{let s=setTimeout(()=>{o.delete(n)&&t({type:"error",requestId:n,ok:!1,message:"the AKA native host did not respond in time"})},d),i=c=>{clearTimeout(s),t(c)};o.set(n,i);try{(r??(r=m())).postMessage({...e,requestId:n})}catch{o.delete(n),i({type:"error",requestId:n,ok:!1,message:"failed to reach the AKA native host \u2014 is it installed? Run `aka extension install`."})}})}function k(e){return typeof e=="object"&&e!==null&&"type"in e}chrome.runtime.onMessage.addListener((e,n,t)=>k(e)?(p(e).then(t).catch(()=>{t({type:"error",requestId:void 0,ok:!1,message:"relay failed"})}),!0):!1);})();
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var G="data:";function R(e){if(!e.startsWith(G))return null;let t=e.slice(G.length);return t.startsWith(" ")?t.slice(1):t}var B=10,D=13;function K(){let e=[],t=!1;function r(){let n=e.length===1?e[0]??"":e.join("");return e=[],n}return{push(n){let s=[],i=0;if(t){if(n.length===0)return s;t=!1;let a=R(r());a!==null&&s.push(a),n.charCodeAt(0)===B&&(i=1)}let p=i;for(;i<n.length;){let a=n.charCodeAt(i);if(a!==B&&a!==D){i+=1;continue}if(e.push(n.slice(p,i)),a===D&&i===n.length-1)return t=!0,s;let u=R(r());u!==null&&s.push(u),i+=a===D&&n.charCodeAt(i+1)===B?2:1,p=i}return p<n.length&&e.push(n.slice(p)),s},end(){t=!1;let n=r();if(n==="")return[];let s=R(n);return s===null?[]:[s]}}}var q='<template data-web-mobile-dpu-frame="',W="</template>",z=1024*1024,Se=9;function Z(){let e="",t=0;function r(n,s){for(;;){let i=e.indexOf(q,t);if(i===-1){let l=Math.max(0,e.length-(q.length-1));e=e.slice(l),t=0;return}let p=i+q.length,a=e.indexOf('"',p);if(a===-1){if(e.length-p>Se){t=i+1;continue}t=i;return}let u=e.slice(p,a),m=/^[0-9]{1,9}$/.test(u)?Number(u):-1;if(m<0||m>z||e.charAt(a+1)!==">"){if(m>=0&&m<=z&&a+1>=e.length){t=i;return}t=i+1;continue}let h=a+2,f=h+m;if(e.length<f){t=i;return}let d=e.startsWith(W,f);if(!d&&e.length<f+W.length&&!s){t=i;return}if(!d&&!s){t=i+1;continue}n.push(e.slice(h,f)),e=e.slice(d?f+W.length:f),t=0}}return{push(n){let s=[];return e+=n,r(s,!1),s},end(){let n=[];return r(n,!0),e="",t=0,n}}}function v(e){for(let t of e){let r=document.querySelector(t);if(r)return r}return null}function V(e){return e.tagName==="TEXTAREA"||e.tagName==="INPUT"}function ye(e){let t=e.tagName==="TEXTAREA"?HTMLTextAreaElement.prototype:HTMLInputElement.prototype;return Object.getOwnPropertyDescriptor(t,"value")?.set}function w(e){return V(e)?e.value:e.innerText}function P(e,t){if(e.focus(),V(e)){let r=ye(e);r?r.call(e,t):e.value=t}else e.textContent=t;e.dispatchEvent(new InputEvent("input",{bubbles:!0,cancelable:!0}))}function Te(e){if(e.getAttribute("aria-expanded")==="true")return!0;let t=e.getAttribute("aria-activedescendant");if(t!==null&&t!=="")return!0;let r=e.getAttribute("aria-controls");if(r===null)return!1;for(let n of r.split(/\s+/))if(n!==""&&document.getElementById(n)?.getAttribute("role")==="listbox")return!0;return!1}function C(e,t){let r=n=>{if(n.key!=="Enter"||n.shiftKey||n.isComposing)return;let s=n.target;!(s instanceof Node)||!e.contains(s)||Te(e)||t(n)};return document.addEventListener("keydown",r,!0),()=>{document.removeEventListener("keydown",r,!0)}}function I(e,t){return e.addEventListener("click",t,!0),()=>{e.removeEventListener("click",t,!0)}}var ve=["#prompt-textarea",'form [contenteditable="true"][role="textbox"]','form [contenteditable="true"]'],_e=['[data-testid="send-button"]','button[aria-label*="send" i]'];function H(){return v(_e)}var Ae={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function Y(e){return e.includes("&")?e.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g,(t,r)=>{if(r.startsWith("#")){let n=r.charAt(1)==="x"||r.charAt(1)==="X",s=n?r.slice(2):r.slice(1),i=Number.parseInt(s,n?16:10);return!Number.isInteger(i)||i<0||i>1114111||i>=55296&&i<=57343?t:String.fromCodePoint(i)}return Ae[r.toLowerCase()]??t}):e}var ke=16;function we(e){let t=e;for(let r=0;r<ke;r+=1){let n=t.replace(/<\?[^>]*>/g,"").replace(/<\/?[a-zA-Z][^>]*>/g,"");if(n===t)return Y(t);t=n}return Y(t.replace(/</g,""))}function F(e,t){let n=new RegExp(`\\b${t}="([^"]*)"`).exec(e)?.[1];return n===void 0||n===""?void 0:n}function Pe(e,t,r){let n=new RegExp(`<(/?)${t}(?=[\\s/>])`,"g");n.lastIndex=r;let s=1;for(;;){let i=n.exec(e);if(i===null)return-1;if(i[1]==="/"){if(s-=1,s===0)return i.index}else s+=1}}var J=/<([a-zA-Z][a-zA-Z0-9-]*)\b([^>]*\bdata-assistant-stream-block="[^"]*"[^>]*)>/g;function Ce(){let e=Z(),t=new Map,r,n,s=!1;function i(a){for(r??=F(a,"data-message-id"),n??=F(a,"data-conversation-id"),J.lastIndex=0;;){let u=J.exec(a);if(u===null)return;let[m,h,f]=u;if(h===void 0||f===void 0)continue;let d=F(f,"data-assistant-stream-block-index")??"0";if(!/^[0-9]{1,6}$/.test(d))continue;let l=Pe(a,h,u.index+m.length);l!==-1&&t.set(Number(d),we(a.slice(u.index+m.length,l)))}}function p(){return[...t.keys()].sort((a,u)=>a-u).map(a=>t.get(a)??"").join("")}return{push(a){if(!s)for(let u of e.push(a))i(u)},end(){if(!s){for(let u of e.end())i(u);s=!0}if(r===void 0)return null;let a=p();return{messageId:r,usageSource:"none",toolCalls:[],...n!==void 0?{conversationId:n}:{},...a!==""?{responseText:a}:{}}}}}var Q={id:"chatgpt",hostnames:["chatgpt.com","chat.openai.com"],findComposer(){return v(ve)},findSendButton:H,extractText:w,setText:P,watchSubmit(e,t){let r=C(e,t),n=H(),s=n?I(n,t):void 0;return()=>{r(),s?.()}},submit(){let e=H();return e?(e.click(),!0):!1},endpoints:[],requiredPaths:{request:[],response:[]},protocolTokens:[],parseRequest:()=>({requiredPathsSeen:!1}),parseStream:Ce};var Ie=['div[contenteditable="true"][aria-label*="claude" i]','fieldset [contenteditable="true"]','form [contenteditable="true"]'],Me=['button[aria-label*="send" i]','fieldset button[type="submit"]'],Ne="api",Oe="organizations",ne="chat_conversations",Le="completion",ee="[0-9a-fA-F-]{36}";function Re(e){let t;try{t=new URL(e).pathname}catch{return}let r=t.split("/"),n=r.indexOf(ne);if(n===-1)return;let s=r[n+1];return s===void 0||s===""?void 0:s}var Be=new RegExp(`^/${Ne}/${Oe}/${ee}/${ne}/${ee}/${Le}$`);function U(){return v(Me)}function _(e){return typeof e=="string"&&e.length>0}function te(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}function A(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function De(e){let t=Re(e.url),r=K(),n,s,i,p=new Map,a=!1;function u(f){let d=p.get(f);if(d!==void 0)return d;let l=[];return p.set(f,l),l}function m(f){let d;try{d=JSON.parse(f)}catch{return}if(A(d))switch(d.type){case"message_start":{if(n!==void 0)return;let l=d.message;if(!A(l))return;_(l.uuid)&&(n=l.uuid),_(l.model)&&(s=l.model),_(l.stop_reason)&&(i=l.stop_reason);return}case"content_block_start":te(d.index)&&u(d.index);return;case"content_block_delta":{if(!te(d.index))return;let l=d.delta;if(!A(l)||l.type!=="text_delta"||typeof l.text!="string")return;u(d.index).push(l.text);return}case"content_block_stop":case"message_stop":return;case"message_delta":{let l=d.delta;A(l)&&_(l.stop_reason)&&(i=l.stop_reason);return}case"conversation_ready":return;case"message_limit":return;default:return}}function h(){if(!a){for(let f of r.end())m(f);a=!0}}return{push(f){if(!a)for(let d of r.push(f))m(d)},end(){if(h(),n===void 0)return null;let f=[...p.keys()].sort((d,l)=>d-l).map(d=>(p.get(d)??[]).join("")).join("");return{messageId:n,usageSource:"none",toolCalls:[],...t!==void 0?{conversationId:t}:{},...s!==void 0?{model:s}:{},...i!==void 0?{stopReason:i}:{},...f!==""?{responseText:f}:{}}}}}var re={id:"claude-ai",hostnames:["claude.ai"],findComposer(){return v(Ie)},findSendButton:U,extractText:w,setText:P,watchSubmit(e,t){let r=C(e,t),n=U(),s=n?I(n,t):void 0;return()=>{r(),s?.()}},submit(){let e=U();return e?(e.click(),!0):!1},endpoints:[{host:"claude.ai",path:Be,kind:"conversation"}],requiredPaths:{request:["model","prompt"],response:["messageId","model"]},protocolTokens:["api","organizations","chat_conversations","completion","conversation_ready","message_start","content_block_start","content_block_delta","content_block_stop","message_delta","message_limit","message_stop","text_delta"],parseRequest:e=>{let t;try{t=JSON.parse(e)}catch{return{requiredPathsSeen:!1}}if(!A(t))return{requiredPathsSeen:!1};let r=_(t.model)?t.model:void 0,n=_(t.prompt)?t.prompt:void 0;return{...r!==void 0?{model:r}:{},...n!==void 0?{prompt:n}:{},requiredPathsSeen:r!==void 0&&n!==void 0}},parseStream:De};var oe=[Q,re],ft=oe.flatMap(e=>e.hostnames);function se(e){return oe.find(t=>t.hostnames.includes(e))??null}var qe=["watching","composer-only","button-only","unattached","unknown"];function ie(e){let t=e.__akaWebSessionId;if(typeof t=="string"&&t!=="")return t;let r=crypto.randomUUID();return e.__akaWebSessionId=r,r}function ae(e,t){e.__akaNoteDomSend=t}function ce(e,t){e.__akaNoteEnforcement=t}function de(e){let t=e.__akaEnforcement;return qe.includes(t)?t:"unknown"}var ue="aka-tap";var We=5e3,He=3,le=3,Fe=2*1024*1024,Ue=1024*1024,$e=64;function Xe(e,t){return e.length>t?!0:new TextEncoder().encode(e).byteLength>t}function je(e,t){let r=new TextEncoder().encode(e);if(r.byteLength<=t)return{text:e,truncated:!1};let n=t;for(;n>0&&((r[n]??0)&192)===128;)n-=1;return{text:new TextDecoder().decode(r.subarray(0,n)),truncated:!0}}function Ge(e,t){let r=e;for(let n of t.split(".")){if(typeof r!="object"||r===null)return;r=r[n]}return r}function ze(e){let t=[];for(let r of e.endpoints)try{t.push({host:r.host,path:new RegExp(`^(?:${r.path.source})`),kind:r.kind,source:r})}catch{}return t}function pe(e,t){let r;try{r=new URL(t)}catch{return null}for(let n of e)if(r.host===n.host&&n.path.test(`${r.pathname}${r.search}`))return n;return null}function vt(e,t){return pe(e,t)?.kind??null}function Ke(e){let{adapter:t,sessionId:r,relay:n,now:s,readEnforcement:i}=e,p=ze(t),a=p.filter(o=>o.kind==="conversation").length,u=new Map,m=[],h=new Set,f=!1,d=!1,l=!1,$=0,X=0,b=0,M=0,N=0,y=null;function fe(o){return pe(p,o)}function k(){let o=s()-We;for(;m.length>0&&(m[0]??0)<=o;)m.shift(),N+=1}function me(o){let c=fe(o.url);if(c?.kind!=="conversation")return;k(),m.shift(),X+=1;let g,x;if(o.body!==null)if(Xe(o.body,Ue))M+=1;else try{let E=t.parseRequest(o.body,{url:o.url,endpoint:c.source});if(g=E.model,x=E.conversationId,!E.requiredPathsSeen)for(let xe of t.requiredPaths.request)h.add(xe)}catch{b+=1}let S=null;try{S=t.parseStream({url:o.url,endpoint:c.source})}catch{b+=1}if(u.set(o.id,{startedAt:s(),assembler:S,model:g,conversationId:x,truncatedOnWire:!1,broken:!1}),u.size>$e){let E=u.keys().next().value;E!==void 0&&u.delete(E)}}function ge(o){let c=u.get(o.id);if(!(c===void 0||c.broken||c.assembler===null))try{c.assembler.push(o.text)}catch{b+=1,c.broken=!0}}function he(o){let c=u.get(o.id);if(c===void 0||(u.delete(o.id),c.broken||c.assembler===null)||!o.ok)return;let g;try{g=c.assembler.end()}catch{b+=1;return}if(g===null||g.messageId.trim()===""){b+=1;return}for(let E of t.requiredPaths.response)Ge(g,E)===void 0&&h.add(E);let x=g.responseText===void 0?null:je(g.responseText,Fe),S={...g,startedAt:g.startedAt??new Date(c.startedAt).toISOString(),...g.model===void 0&&c.model!==void 0?{model:c.model}:{},...g.conversationId===void 0&&c.conversationId!==void 0?{conversationId:c.conversationId}:{},...x===null?{}:{responseText:x.text},truncated:c.truncatedOnWire||(x?.truncated??!1)};l=!0;try{n({type:"exchange",sessionId:r,tool:t.id,exchange:S})}catch{}}function Ee(o){let c=u.get(o.id);switch(o.reason){case"unparsed_body":M+=1;return;case"truncated":c!==void 0&&(c.truncatedOnWire=!0);return;case"aborted":c!==void 0&&(c.broken=!0);return;case"tap_error":c!==void 0&&(c.broken=!0),b+=1;return}}function be(o){switch(o.type){case"ready":return;case"patched":f=o.fetch,d=o.xhr;return;case"request":me(o);return;case"chunk":ge(o);return;case"end":he(o);return;case"error":Ee(o);return}}function O(){return k(),{patched:f||d,live:l,blind:N>=He,sendsSeenDom:$,exchangesSeenNet:X,parseFailures:b,unparsedBodies:M,shapeMisses:[...h],conversationEndpoints:a,closed:!1,enforcement:i()}}function j(o){return[N,o.patched,o.live,o.blind,o.conversationEndpoints,o.enforcement,o.shapeMisses.length,Math.min(o.parseFailures,le),Math.min(o.unparsedBodies,le)].join("|")}function L(){let o=O(),c=o.enforcement!=="unknown"&&o.enforcement!=="watching";if(!f&&!d&&y===null&&!c)return;let g=j(o);if(g===y)return;let x=y;y=g;let S=()=>{y===g&&(y=x)};try{n({type:"capture_status",sessionId:r,tool:t.id,status:o}).then(E=>{E||S()},S)}catch{S()}}return{onTapMessage(o){try{be(o)}catch{b+=1,"id"in o&&u.delete(o.id)}k(),L()},status(){return O()},noteEnforcementChange(){L()},noteDomSend(){k(),$+=1,m.push(s()),L()},reportStatus({closed:o}){let c={...O(),closed:o};y=j(c);try{n({type:"capture_status",sessionId:r,tool:t.id,status:c})}catch{}}}}function Ze(e,t){let r=!1,n=s=>{try{if(r||s.source!==e)return;let i=s.data;if(typeof i!="object"||i===null||i.tag!==ue)return;let p=s.ports[0];if(p===void 0)return;r=!0,e.removeEventListener("message",n),p.addEventListener("message",a=>{try{t(a.data)}catch{}}),p.start()}catch{}};e.addEventListener("message",n)}function Ve(e){try{return chrome.runtime.sendMessage(e).then(()=>!0,()=>!1)}catch{return Promise.resolve(!1)}}function Ye(e){let{win:t,hostname:r,relay:n,now:s}=e,i=se(r);if(!i)return null;let p=Ke({adapter:i,sessionId:ie(t),relay:n,now:s,readEnforcement:()=>de(t)});return ae(t,()=>{p.noteDomSend()}),ce(t,()=>{p.noteEnforcementChange()}),Ze(t,a=>{p.onTapMessage(a)}),t.addEventListener("pagehide",()=>{p.reportStatus({closed:!0})}),p}function Je(){try{if(typeof window>"u")return;Ye({win:window,hostname:location.hostname,relay:Ve,now:()=>Date.now()})}catch{}}Je();})();
@@ -1 +1 @@
1
- "use strict";(()=>{function v(e){let{adapter:t,sessionId:o,relay:r,showBanner:n}=e,u=!1,d=!1;function l(i){return u=!0,setTimeout(()=>{u=!1},0),t.submit(i)?!0:(u=!1,n("AKA could not send this message \u2014 the send button was not found, so the site may have changed. Your text is still in the composer and was NOT sent.","block"),!1)}async function m(i,c){let s=await r({type:"capture",sessionId:o,tool:t.id,kind:"prompt",text:c}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));if(s.type!=="capture"){l(i);return}if(s.action==="block"){n(`AKA blocked this message \u2014 flagged ${s.ruleIds.join(", ")}. Remove it and resend.`,"block");return}if(s.action==="redact"){if(typeof s.text!="string"){n(`AKA could not redact this message (${s.ruleIds.join(", ")}) \u2014 remove the flagged content and resend.`,"block");return}if(t.setText(i,s.text),t.extractText(i).trim()!==s.text.trim()){n("AKA could not redact this message \u2014 remove the flagged content and resend.","block");return}if(!l(i))return;n(`AKA redacted sensitive content (${s.ruleIds.join(", ")}) before sending.`,"redact");return}if(s.action==="warn"){if(!l(i))return;n(`AKA flagged sensitive content (${s.ruleIds.join(", ")}) \u2014 sent unchanged.`,"warn");return}l(i)}return{handleSubmit(i,c){if(u){u=!1;return}let s=t.extractText(c);s.trim()!==""&&(i.preventDefault(),i.stopImmediatePropagation(),!d&&(d=!0,m(c,s).finally(()=>{d=!1})))}}}function p(e){for(let t of e){let o=document.querySelector(t);if(o)return o}return null}function y(e){return e.tagName==="TEXTAREA"||e.tagName==="INPUT"}function H(e){let t=e.tagName==="TEXTAREA"?HTMLTextAreaElement.prototype:HTMLInputElement.prototype;return Object.getOwnPropertyDescriptor(t,"value")?.set}function f(e){return y(e)?e.value:e.innerText}function h(e,t){if(e.focus(),y(e)){let o=H(e);o?o.call(e,t):e.value=t}else e.textContent=t;e.dispatchEvent(new InputEvent("input",{bubbles:!0,cancelable:!0}))}function R(e){if(e.getAttribute("aria-expanded")==="true")return!0;let t=e.getAttribute("aria-activedescendant");if(t!==null&&t!=="")return!0;let o=e.getAttribute("aria-controls");if(o===null)return!1;for(let r of o.split(/\s+/))if(r!==""&&document.getElementById(r)?.getAttribute("role")==="listbox")return!0;return!1}function T(e,t){let o=r=>{if(r.key!=="Enter"||r.shiftKey||r.isComposing)return;let n=r.target;!(n instanceof Node)||!e.contains(n)||R(e)||t(r)};return document.addEventListener("keydown",o,!0),()=>{document.removeEventListener("keydown",o,!0)}}function g(e,t){return e.addEventListener("click",t,!0),()=>{e.removeEventListener("click",t,!0)}}var C=["#prompt-textarea",'form [contenteditable="true"][role="textbox"]','form [contenteditable="true"]'],I=['[data-testid="send-button"]','button[aria-label*="send" i]'];function b(){return p(I)}var A={id:"chatgpt",hostnames:["chatgpt.com","chat.openai.com"],findComposer(){return p(C)},findSendButton:b,extractText:f,setText:h,watchSubmit(e,t){let o=T(e,t),r=b(),n=r?g(r,t):void 0;return()=>{o(),n?.()}},submit(){let e=b();return e?(e.click(),!0):!1}};var P=['div[contenteditable="true"][aria-label*="claude" i]','fieldset [contenteditable="true"]','form [contenteditable="true"]'],O=['button[aria-label*="send" i]','fieldset button[type="submit"]'];function E(){return p(O)}var k={id:"claude-ai",hostnames:["claude.ai"],findComposer(){return p(P)},findSendButton:E,extractText:f,setText:h,watchSubmit(e,t){let o=T(e,t),r=E(),n=r?g(r,t):void 0;return()=>{o(),n?.()}},submit(){let e=E();return e?(e.click(),!0):!1}};var w=[A,k],V=w.flatMap(e=>e.hostnames);function S(e){return w.find(t=>t.hostnames.includes(e))??null}var L=S(location.hostname);L&&N(L);function N(e){let t=crypto.randomUUID(),o=v({adapter:e,sessionId:t,relay:M,showBanner:q}),r=null,n=null,u=null,d=!1;function l(){d=!1;let i=e.findComposer(),c=e.findSendButton();if(!(i===r&&c===n))if(u?.(),r=i,n=c,r&&n){let s=r;u=e.watchSubmit(s,B=>{o.handleSubmit(B,s)})}else u=null}function m(){d||(d=!0,requestAnimationFrame(l))}m(),new MutationObserver(m).observe(document.body,{childList:!0,subtree:!0}),M({type:"session_start",sessionId:t,tool:e.id,hostname:location.hostname}).catch(()=>{})}function M(e){return chrome.runtime.sendMessage(e)}var a=null,x=null;function q(e,t){a||(a=document.createElement("div"),a.style.all="initial",a.style.position="fixed",a.style.zIndex="2147483647",a.style.bottom="24px",a.style.left="50%",a.style.transform="translateX(-50%)",document.body.append(a));let o=a.shadowRoot??a.attachShadow({mode:"open"}),r=t==="block"?"#dc2626":t==="redact"?"#d97706":"#2563eb",n=document.createElement("div");n.style.font="13px/1.4 system-ui, sans-serif",n.style.background=r,n.style.color="white",n.style.padding="8px 14px",n.style.borderRadius="8px",n.style.boxShadow="0 4px 12px rgba(0,0,0,0.25)",n.style.maxWidth="480px",n.textContent=e,o.replaceChildren(n),x&&clearTimeout(x),x=setTimeout(()=>{a?.remove(),a=null},6e3)}})();
1
+ "use strict";(()=>{var w="aka exception approve",F="More: aka exception --help";function G(e){let t=e.blockedRef?` (${e.blockedRef.maskedValue})`:"";return{headline:`AKA blocked this message \u2014 flagged ${e.ruleIds}${t}.`,advice:"Remove the flagged content and resend.",approveIntro:"If this is intentional and you accept the risk, grant an exception:",command:e.blockedRef?`${w} ${e.blockedRef.reference}`:w,help:F}}function W(e){if(e!==void 0)return{intro:"To allow this exact value intentionally, run:",command:`${w} ${e.reference}`,help:F}}function M(e,t){let r=W(t?.[0]);return r?{...e,exception:r}:e}function j(e){let{adapter:t,sessionId:r,relay:n,showBanner:o,noteSend:i}=e,a=!1,s=!1;function d(f){if(a=!0,setTimeout(()=>{a=!1},0),t.submit(f)){try{i()}catch{}return!0}return a=!1,o({tone:"block",message:"AKA could not send this message \u2014 the send button was not found, so the site may have changed. Your text is still in the composer and was NOT sent."}),!1}async function p(f,l){let c=await n({type:"capture",sessionId:r,tool:t.id,kind:"prompt",text:l}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));if(c.type!=="capture"){d(f);return}if(c.action==="block"){let u=G({ruleIds:c.ruleIds.join(", "),blockedRef:c.blockedReferences?.[0]});o({tone:"block",message:`${u.headline} ${u.advice}`,exception:{intro:u.approveIntro,command:u.command,help:u.help}});return}if(c.action==="redact"){if(typeof c.text!="string"){o(M({tone:"block",message:`AKA could not redact this message (${c.ruleIds.join(", ")}) \u2014 remove the flagged content and resend.`},c.blockedReferences));return}if(t.setText(f,c.text),t.extractText(f).trim()!==c.text.trim()){o(M({tone:"block",message:"AKA could not redact this message \u2014 remove the flagged content and resend."},c.blockedReferences));return}if(!d(f))return;o(M({tone:"redact",message:`AKA redacted sensitive content (${c.ruleIds.join(", ")}) before sending.`},c.blockedReferences));return}if(c.action==="warn"){if(!d(f))return;o({tone:"warn",message:`AKA flagged sensitive content (${c.ruleIds.join(", ")}) \u2014 sent unchanged.`});return}d(f)}return{handleSubmit(f,l){if(a){a=!1;return}let c=t.extractText(l);c.trim()!==""&&(f.preventDefault(),f.stopImmediatePropagation(),!s&&(s=!0,p(l,c).finally(()=>{s=!1})))}}}var K="data:";function I(e){if(!e.startsWith(K))return null;let t=e.slice(K.length);return t.startsWith(" ")?t.slice(1):t}var C=10,L=13;function X(){let e=[],t=!1;function r(){let n=e.length===1?e[0]??"":e.join("");return e=[],n}return{push(n){let o=[],i=0;if(t){if(n.length===0)return o;t=!1;let s=I(r());s!==null&&o.push(s),n.charCodeAt(0)===C&&(i=1)}let a=i;for(;i<n.length;){let s=n.charCodeAt(i);if(s!==C&&s!==L){i+=1;continue}if(e.push(n.slice(a,i)),s===L&&i===n.length-1)return t=!0,o;let d=I(r());d!==null&&o.push(d),i+=s===L&&n.charCodeAt(i+1)===C?2:1,a=i}return a<n.length&&e.push(n.slice(a)),o},end(){t=!1;let n=r();if(n==="")return[];let o=I(n);return o===null?[]:[o]}}}var N='<template data-web-mobile-dpu-frame="',B="</template>",U=1024*1024,le=9;function z(){let e="",t=0;function r(n,o){for(;;){let i=e.indexOf(N,t);if(i===-1){let u=Math.max(0,e.length-(N.length-1));e=e.slice(u),t=0;return}let a=i+N.length,s=e.indexOf('"',a);if(s===-1){if(e.length-a>le){t=i+1;continue}t=i;return}let d=e.slice(a,s),p=/^[0-9]{1,9}$/.test(d)?Number(d):-1;if(p<0||p>U||e.charAt(s+1)!==">"){if(p>=0&&p<=U&&s+1>=e.length){t=i;return}t=i+1;continue}let f=s+2,l=f+p;if(e.length<l){t=i;return}let c=e.startsWith(B,l);if(!c&&e.length<l+B.length&&!o){t=i;return}if(!c&&!o){t=i+1;continue}n.push(e.slice(f,l)),e=e.slice(c?l+B.length:l),t=0}}return{push(n){let o=[];return e+=n,r(o,!1),o},end(){let n=[];return r(n,!0),e="",t=0,n}}}function x(e){for(let t of e){let r=document.querySelector(t);if(r)return r}return null}function V(e){return e.tagName==="TEXTAREA"||e.tagName==="INPUT"}function de(e){let t=e.tagName==="TEXTAREA"?HTMLTextAreaElement.prototype:HTMLInputElement.prototype;return Object.getOwnPropertyDescriptor(t,"value")?.set}function T(e){return V(e)?e.value:e.innerText}function v(e,t){if(e.focus(),V(e)){let r=de(e);r?r.call(e,t):e.value=t}else e.textContent=t;e.dispatchEvent(new InputEvent("input",{bubbles:!0,cancelable:!0}))}function fe(e){if(e.getAttribute("aria-expanded")==="true")return!0;let t=e.getAttribute("aria-activedescendant");if(t!==null&&t!=="")return!0;let r=e.getAttribute("aria-controls");if(r===null)return!1;for(let n of r.split(/\s+/))if(n!==""&&document.getElementById(n)?.getAttribute("role")==="listbox")return!0;return!1}function k(e,t){let r=n=>{if(n.key!=="Enter"||n.shiftKey||n.isComposing)return;let o=n.target;!(o instanceof Node)||!e.contains(o)||fe(e)||t(n)};return document.addEventListener("keydown",r,!0),()=>{document.removeEventListener("keydown",r,!0)}}function A(e,t){return e.addEventListener("click",t,!0),()=>{e.removeEventListener("click",t,!0)}}var pe=["#prompt-textarea",'form [contenteditable="true"][role="textbox"]','form [contenteditable="true"]'],me=['[data-testid="send-button"]','button[aria-label*="send" i]'];function P(){return x(me)}var ge={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function Z(e){return e.includes("&")?e.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g,(t,r)=>{if(r.startsWith("#")){let n=r.charAt(1)==="x"||r.charAt(1)==="X",o=n?r.slice(2):r.slice(1),i=Number.parseInt(o,n?16:10);return!Number.isInteger(i)||i<0||i>1114111||i>=55296&&i<=57343?t:String.fromCodePoint(i)}return ge[r.toLowerCase()]??t}):e}var he=16;function xe(e){let t=e;for(let r=0;r<he;r+=1){let n=t.replace(/<\?[^>]*>/g,"").replace(/<\/?[a-zA-Z][^>]*>/g,"");if(n===t)return Z(t);t=n}return Z(t.replace(/</g,""))}function O(e,t){let n=new RegExp(`\\b${t}="([^"]*)"`).exec(e)?.[1];return n===void 0||n===""?void 0:n}function Ee(e,t,r){let n=new RegExp(`<(/?)${t}(?=[\\s/>])`,"g");n.lastIndex=r;let o=1;for(;;){let i=n.exec(e);if(i===null)return-1;if(i[1]==="/"){if(o-=1,o===0)return i.index}else o+=1}}var J=/<([a-zA-Z][a-zA-Z0-9-]*)\b([^>]*\bdata-assistant-stream-block="[^"]*"[^>]*)>/g;function be(){let e=z(),t=new Map,r,n,o=!1;function i(s){for(r??=O(s,"data-message-id"),n??=O(s,"data-conversation-id"),J.lastIndex=0;;){let d=J.exec(s);if(d===null)return;let[p,f,l]=d;if(f===void 0||l===void 0)continue;let c=O(l,"data-assistant-stream-block-index")??"0";if(!/^[0-9]{1,6}$/.test(c))continue;let u=Ee(s,f,d.index+p.length);u!==-1&&t.set(Number(c),xe(s.slice(d.index+p.length,u)))}}function a(){return[...t.keys()].sort((s,d)=>s-d).map(s=>t.get(s)??"").join("")}return{push(s){if(!o)for(let d of e.push(s))i(d)},end(){if(!o){for(let d of e.end())i(d);o=!0}if(r===void 0)return null;let s=a();return{messageId:r,usageSource:"none",toolCalls:[],...n!==void 0?{conversationId:n}:{},...s!==""?{responseText:s}:{}}}}}var Y={id:"chatgpt",hostnames:["chatgpt.com","chat.openai.com"],findComposer(){return x(pe)},findSendButton:P,extractText:T,setText:v,watchSubmit(e,t){let r=k(e,t),n=P(),o=n?A(n,t):void 0;return()=>{r(),o?.()}},submit(){let e=P();return e?(e.click(),!0):!1},endpoints:[],requiredPaths:{request:[],response:[]},protocolTokens:[],parseRequest:()=>({requiredPathsSeen:!1}),parseStream:be};var ye=['div[contenteditable="true"][aria-label*="claude" i]','fieldset [contenteditable="true"]','form [contenteditable="true"]'],Se=['button[aria-label*="send" i]','fieldset button[type="submit"]'],Te="api",ve="organizations",te="chat_conversations",ke="completion",Q="[0-9a-fA-F-]{36}";function Ae(e){let t;try{t=new URL(e).pathname}catch{return}let r=t.split("/"),n=r.indexOf(te);if(n===-1)return;let o=r[n+1];return o===void 0||o===""?void 0:o}var _e=new RegExp(`^/${Te}/${ve}/${Q}/${te}/${Q}/${ke}$`);function H(){return x(Se)}function E(e){return typeof e=="string"&&e.length>0}function ee(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}function y(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Re(e){let t=Ae(e.url),r=X(),n,o,i,a=new Map,s=!1;function d(l){let c=a.get(l);if(c!==void 0)return c;let u=[];return a.set(l,u),u}function p(l){let c;try{c=JSON.parse(l)}catch{return}if(y(c))switch(c.type){case"message_start":{if(n!==void 0)return;let u=c.message;if(!y(u))return;E(u.uuid)&&(n=u.uuid),E(u.model)&&(o=u.model),E(u.stop_reason)&&(i=u.stop_reason);return}case"content_block_start":ee(c.index)&&d(c.index);return;case"content_block_delta":{if(!ee(c.index))return;let u=c.delta;if(!y(u)||u.type!=="text_delta"||typeof u.text!="string")return;d(c.index).push(u.text);return}case"content_block_stop":case"message_stop":return;case"message_delta":{let u=c.delta;y(u)&&E(u.stop_reason)&&(i=u.stop_reason);return}case"conversation_ready":return;case"message_limit":return;default:return}}function f(){if(!s){for(let l of r.end())p(l);s=!0}}return{push(l){if(!s)for(let c of r.push(l))p(c)},end(){if(f(),n===void 0)return null;let l=[...a.keys()].sort((c,u)=>c-u).map(c=>(a.get(c)??[]).join("")).join("");return{messageId:n,usageSource:"none",toolCalls:[],...t!==void 0?{conversationId:t}:{},...o!==void 0?{model:o}:{},...i!==void 0?{stopReason:i}:{},...l!==""?{responseText:l}:{}}}}}var ne={id:"claude-ai",hostnames:["claude.ai"],findComposer(){return x(ye)},findSendButton:H,extractText:T,setText:v,watchSubmit(e,t){let r=k(e,t),n=H(),o=n?A(n,t):void 0;return()=>{r(),o?.()}},submit(){let e=H();return e?(e.click(),!0):!1},endpoints:[{host:"claude.ai",path:_e,kind:"conversation"}],requiredPaths:{request:["model","prompt"],response:["messageId","model"]},protocolTokens:["api","organizations","chat_conversations","completion","conversation_ready","message_start","content_block_start","content_block_delta","content_block_stop","message_delta","message_limit","message_stop","text_delta"],parseRequest:e=>{let t;try{t=JSON.parse(e)}catch{return{requiredPathsSeen:!1}}if(!y(t))return{requiredPathsSeen:!1};let r=E(t.model)?t.model:void 0,n=E(t.prompt)?t.prompt:void 0;return{...r!==void 0?{model:r}:{},...n!==void 0?{prompt:n}:{},requiredPathsSeen:r!==void 0&&n!==void 0}},parseStream:Re};var re=[Y,ne],et=re.flatMap(e=>e.hostnames);function oe(e){return re.find(t=>t.hostnames.includes(e))??null}function se(e){let t=e.__akaWebSessionId;if(typeof t=="string"&&t!=="")return t;let r=crypto.randomUUID();return e.__akaWebSessionId=r,r}function ie(e){try{e.__akaNoteDomSend?.()}catch{}}function D(e,t){e.__akaEnforcement=t;try{e.__akaNoteEnforcement?.()}catch{}}var ae=oe(location.hostname);ae&&Ie(ae);function we(e,t){return e&&t?"watching":e?"composer-only":t?"button-only":"unattached"}var Me=2e3;function Ie(e){let t=window,r=se(t),n=j({adapter:e,sessionId:r,relay:ce,showBanner:Be,noteSend:()=>{ie(t)}}),o="unknown",i=null,a=null;function s(g){if(g==="watching"){a&&clearTimeout(a),a=null,i=null,o!=="watching"&&(o="watching",D(t,"watching"));return}if(g===o){a&&clearTimeout(a),a=null,i=null;return}g!==i&&(a&&clearTimeout(a),i=g,a=setTimeout(()=>{a=null,i=null,o=g,D(t,g)},Me))}let d=null,p=null,f=null,l=!1;function c(){l=!1;let g=e.findComposer(),R=e.findSendButton();if(s(we(g,R)),!(g===d&&R===p))if(f?.(),d=g,p=R,d&&p){let $=d;f=e.watchSubmit($,ue=>{n.handleSubmit(ue,$)})}else f=null}function u(){l||(l=!0,requestAnimationFrame(c))}u(),new MutationObserver(u).observe(document.body,{childList:!0,subtree:!0}),ce({type:"session_start",sessionId:r,tool:e.id,hostname:location.hostname}).catch(()=>{})}function ce(e){return chrome.runtime.sendMessage(e)}var m=null,b=null,_=null,S=null,Ce=20;function Le(){return{root:document.documentElement,body:document.body}}function q(){S?.disconnect(),S=null}function Ne(e){q();let t=0,r=null,n=null,o=new MutationObserver(()=>{let a=i();if(!(a===null||e.parentNode===a)){if(t>=Ce){o.disconnect(),S===o&&(S=null);return}t===0&&setTimeout(()=>{t=0},0),t+=1,a.append(e)}});function i(){let{root:a,body:s}=Le();return(a!==r||s!==n)&&(o.disconnect(),o.observe(document,{childList:!0}),a&&o.observe(a,{childList:!0}),s&&o.observe(s,{childList:!0}),r=a,n=s),s}i(),S=o}function Be(e){m&&!m.isConnected&&(m=null,b=null),m||(m=document.createElement("div"),m.style.all="initial",m.style.position="fixed",m.style.zIndex="2147483647",m.style.bottom="24px",m.style.left="50%",m.style.transform="translateX(-50%)",document.body.append(m)),b?.host!==m&&(b=m.attachShadow({mode:"closed"}));let t=b,r=e.tone==="block"?"#dc2626":e.tone==="redact"?"#d97706":"#2563eb",n=document.createElement("div");n.style.font="13px/1.4 system-ui, sans-serif",n.style.background=r,n.style.color="white",n.style.padding="8px 14px",n.style.borderRadius="8px",n.style.boxShadow="0 4px 12px rgba(0,0,0,0.25)",n.style.maxWidth="480px";let o=document.createElement("div");if(o.textContent=e.message,n.append(o),e.exception){let i=document.createElement("div");i.style.marginTop="6px",i.textContent=e.exception.intro;let a=document.createElement("code");a.style.display="block",a.style.marginTop="4px",a.style.padding="4px 6px",a.style.background="rgba(0,0,0,0.25)",a.style.borderRadius="4px",a.style.font="12px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace",a.style.userSelect="none",a.textContent=e.exception.command;let s=document.createElement("button");s.style.all="unset",s.style.cursor="pointer",s.style.marginTop="6px",s.style.marginRight="12px",s.style.textDecoration="underline",s.textContent="Copy command";let d=e.exception.command;s.addEventListener("click",()=>{navigator.clipboard.writeText(d).then(()=>{s.textContent="Copied"},()=>{s.textContent="Copy failed \u2014 type the approve command into a terminal"})});let p=document.createElement("div");p.style.marginTop="6px",p.style.opacity="0.85",p.style.userSelect="none",p.textContent=e.exception.help;let f=document.createElement("button");f.style.all="unset",f.style.cursor="pointer",f.style.marginTop="8px",f.style.textDecoration="underline",f.textContent="Dismiss";let l=m;f.addEventListener("click",()=>{l.remove(),m===l&&(q(),m=null,b=null)}),n.append(i,a,p,s,f)}return t.replaceChildren(n),_&&clearTimeout(_),_=null,e.exception?Ne(m):(q(),_=setTimeout(()=>{m?.remove(),m=null,b=null},6e3)),t}})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "AI Traffic Control",
4
- "version": "0.9.12",
4
+ "version": "0.9.13",
5
5
  "description": "Local secret detection and redaction for ChatGPT and Claude.ai web chat.",
6
6
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqnwx5Snbi3oZ7mDBC78NaTHO6dTKYRtCqr29YnOImR47UM21tP1us3KF6FjQMtR6tAsffflRok1PThQpjBNwYdRM+stvPIUr5GqBRQL1Ge///kZaVz7eCptCjKg00ygk2HwelaCNt6nWy6czIcM3/HssrNflw42IKsBORW7qQ+KhhKqlABjkRUDvBcuhwOU34HHMJxeP2XdyI5T5msqVJN1nVA+X9T/18dP7cCSzkp9RwLN1hvQMS6n3A1R0HUCmfra1lb1KqQhy3EBdm2VwxTDGVPfGYbTdNSyRT70wzcZy1IdQkfT6YOy1M//+yT7Vu9p/aajs+dNNn/zUn0qJyQIDAQAB",
7
7
  "icons": {
@@ -13,6 +13,29 @@
13
13
  "service_worker": "background.js"
14
14
  },
15
15
  "content_scripts": [
16
+ {
17
+ "matches": [
18
+ "https://chatgpt.com/*",
19
+ "https://chat.openai.com/*",
20
+ "https://claude.ai/*"
21
+ ],
22
+ "js": [
23
+ "bridge.js"
24
+ ],
25
+ "run_at": "document_start"
26
+ },
27
+ {
28
+ "matches": [
29
+ "https://chatgpt.com/*",
30
+ "https://chat.openai.com/*",
31
+ "https://claude.ai/*"
32
+ ],
33
+ "js": [
34
+ "tap.js"
35
+ ],
36
+ "run_at": "document_start",
37
+ "world": "MAIN"
38
+ },
16
39
  {
17
40
  "matches": [
18
41
  "https://chatgpt.com/*",
@@ -39,6 +39,9 @@
39
39
  .muted {
40
40
  color: #6b7280;
41
41
  }
42
+ .tone-error {
43
+ color: #dc2626;
44
+ }
42
45
  button {
43
46
  width: 100%;
44
47
  margin-top: 8px;
@@ -63,6 +66,12 @@
63
66
  <div id="findings-row" class="row muted" hidden>
64
67
  <span id="findings-text"></span>
65
68
  </div>
69
+ <div id="capture-section" hidden>
70
+ <div id="capture-not-enabled" class="row muted" hidden>
71
+ network capture not enabled — see Settings
72
+ </div>
73
+ <div id="capture-sites"></div>
74
+ </div>
66
75
  <button id="open-dashboard">Open dashboard</button>
67
76
  <script src="popup.js"></script>
68
77
  </body>
@@ -1 +1 @@
1
- "use strict";(()=>{var d="http://localhost:4319/security";function s(e){return chrome.runtime.sendMessage(e)}function r(e,t){let n=document.getElementById("status-dot"),o=document.getElementById("status-text");n&&(n.className=`dot ${t==="pending"?"":t}`.trim()),o&&(o.textContent=e)}function a(e){let t=document.getElementById("findings-row"),n=document.getElementById("findings-text");!t||!n||(n.textContent=`${e.toString()} finding${e===1?"":"s"} recorded (all time)`,t.hidden=!1)}async function i(){let e=await s({type:"ping"}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));if(e.type!=="ping"){r("Native host not reachable \u2014 run `aka extension install`","error");return}r(e.onboarded?"Connected":"Connected (not onboarded \u2014 run aka:setup)","ok");let t=await s({type:"health"}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));t.type==="health"&&a(t.findings)}document.getElementById("open-dashboard")?.addEventListener("click",()=>{chrome.tabs.create({url:d})});i();})();
1
+ "use strict";(()=>{var p="http://localhost:4319/security",i={chatgpt:"ChatGPT","claude-ai":"Claude.ai"},f=new Set(["blind","degraded"]),m={"composer-only":"not enforcing \u2014 send button not found","button-only":"not enforcing \u2014 composer not found",unattached:"not enforcing \u2014 composer and send button not found"},g=m;function y(e){let n=document.getElementById("capture-section"),t=document.getElementById("capture-not-enabled"),o=document.getElementById("capture-sites");if(!n||!t||!o)return;if(n.hidden=!1,!e.consented){t.hidden=!1,o.replaceChildren();return}t.hidden=!0;let l=e.sites.flatMap(r=>{let a=document.createElement("div");a.className=`row ${f.has(r.state)?"tone-error":"muted"}`,a.textContent=`${i[r.tool]}: ${r.state}`;let c=r.enforcement===void 0?void 0:g[r.enforcement];if(c===void 0)return[a];let d=document.createElement("div");return d.className="row tone-error",d.textContent=`${i[r.tool]}: ${c}`,[a,d]});o.replaceChildren(...l)}function s(e){return chrome.runtime.sendMessage(e)}function u(e,n){let t=document.getElementById("status-dot"),o=document.getElementById("status-text");t&&(t.className=`dot ${n==="pending"?"":n}`.trim()),o&&(o.textContent=e)}function h(e){let n=document.getElementById("findings-row"),t=document.getElementById("findings-text");!n||!t||(t.textContent=`${e.toString()} finding${e===1?"":"s"} recorded (all time)`,n.hidden=!1)}async function E(){let e=await s({type:"ping"}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));if(e.type!=="ping"){u("Native host not reachable \u2014 run `aka extension install`","error");return}u(e.onboarded?"Connected":"Connected (not onboarded \u2014 run aka:setup)","ok");let n=await s({type:"health"}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));n.type==="health"&&h(n.findings);let t=await s({type:"capture_state"}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));t.type==="capture_state"&&y(t)}document.getElementById("open-dashboard")?.addEventListener("click",()=>{chrome.tabs.create({url:p})});E();})();
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var D=[{host:"claude.ai",path:"^\\/api\\/organizations\\/[0-9a-fA-F-]{36}\\/chat_conversations\\/[0-9a-fA-F-]{36}\\/completion$",kind:"conversation"}];var se="aka-tap",ie=typeof D>"u"?[]:D,ce=4*1024*1024,ae=1024*1024,ue=4*1024*1024;function K(a){for(let h=0;h<a.length;h+=1){let i=a.charCodeAt(h);if(!(i>31)&&!(i===9||i===10||i===13))return!0}return!1}var de=1e4;function f(a,h){let i=a;for(;i!==null;){let R=Object.getOwnPropertyDescriptor(i,h);if(R!==void 0)return R.get;i=Object.getPrototypeOf(i)}}function E(a,h){let i=a;for(;i!==null;){let R=Object.getOwnPropertyDescriptor(i,h);if(R!==void 0)return R.value;i=Object.getPrototypeOf(i)}}var W=E(RegExp.prototype,"test"),M=URL,G=f(URL.prototype,"host"),J=f(URL.prototype,"pathname"),V=f(URL.prototype,"search"),Z=f(URL.prototype,"href"),j=TextDecoder,S=E(TextDecoder.prototype,"decode"),C=Uint8Array,le=f(ArrayBuffer.prototype,"byteLength"),fe=f(Object.getPrototypeOf(Uint8Array.prototype),"byteLength"),F=typeof DecompressionStream=="function"?DecompressionStream:void 0;function pe(a){for(let h of[fe,le])if(h!==void 0)try{let i=h.call(a);if(typeof i=="number"&&Number.isFinite(i))return i}catch{}}function ye(a,h,i){let R=1,N=[];for(let t of i)try{N.push({host:t.host,path:new RegExp(`^(?:${t.path})`)})}catch{}function o(t){try{h.postMessage(t)}catch{}}function X(t){try{let e=new M(t,a.location.href);return Z===void 0?t:String(Z.call(e))}catch{return t}}function I(t){if(W===void 0||G===void 0||J===void 0||V===void 0)return!1;let e;try{e=new M(t)}catch{return!1}for(let n of N)try{if(G.call(e)!==n.host)continue;let d=`${String(J.call(e))}${String(V.call(e))}`;if(W.call(n.path,d)===!0)return!0}catch{}return!1}function ee(t){if(S===void 0)return null;let e=pe(t);if(e===void 0||e>ae)return null;let n;try{n=String(S.call(new j("utf-8",{fatal:!0}),t))}catch{return null}return K(n)?null:n}function te(t){try{let e=t;return e.buffer===void 0?new C(t):new C(e.buffer,e.byteOffset??0,e.byteLength)}catch{return null}}function ne(t){let e=te(t);return e!==null&&e.length>2&&e[0]===31&&e[1]===139&&e[2]===8}async function re(t){if(F===void 0)throw new Error("no decompressor");let e=new F("gzip"),n=e.writable.getWriter();n.write(t).catch(()=>{}),n.close().catch(()=>{});let d=e.readable.getReader(),g=[],p=0;for(;;){let m=await d.read();if(m.done)break;let w=m.value;if(p+=w.byteLength,p>ue)throw await d.cancel().catch(()=>{}),new Error("inflate ceiling");g.push(w)}let k=new C(p),T=0;for(let m of g)k.set(m,T),T+=m.byteLength;if(S===void 0)throw new Error("no decoder");let y=String(S.call(new j("utf-8",{fatal:!0}),k));if(K(y))throw new Error("control bytes");return y}function z(t){if(t==null)return{kind:"sync",body:null};if(typeof t=="string")return{kind:"sync",body:t};if(typeof t=="object"){let e=t;if(typeof e.getReader=="function")return{kind:"unreadable"};if(typeof e.byteLength=="number"){if(F!==void 0&&ne(t))return{kind:"deferred",body:re(t)};let n=ee(t);return n===null?{kind:"unreadable"}:{kind:"sync",body:n}}if(typeof e.forEach=="function"){let n=[];return e.forEach((d,g)=>{let p=typeof d=="string"?d:"";n.push(`${encodeURIComponent(g)}=${encodeURIComponent(p)}`)}),{kind:"sync",body:n.join("&")}}}return{kind:"unreadable"}}function Y(t,e,n,d){return t.kind==="unreadable"?(o({type:"error",id:e,reason:"unparsed_body"}),null):t.kind==="sync"?(o({type:"request",id:e,url:n,method:d,body:t.body}),Promise.resolve()):new Promise(g=>{let p=!1,k=y=>{p||(p=!0,clearTimeout(T),o({type:"request",id:e,url:n,method:d,body:y}),g())},T=setTimeout(()=>{k(null)},de);t.body.then(y=>{k(y)},()=>{k(null)})})}let $=!1;try{let t=f(Request.prototype,"url"),e=f(Request.prototype,"method"),n=f(Request.prototype,"body"),d=f(Response.prototype,"status"),g=f(Response.prototype,"ok"),p=f(Response.prototype,"body"),k=E(Request.prototype,"clone"),T=E(Request.prototype,"text"),y=E(Response.prototype,"clone"),m=E(Response.prototype,"text");if(typeof a.fetch=="function"&&S!==void 0&&t!==void 0&&e!==void 0&&n!==void 0&&k!==void 0&&T!==void 0&&d!==void 0&&g!==void 0&&p!==void 0&&y!==void 0&&m!==void 0){let w=a.fetch.bind(a),P=s=>{try{if(n.call(s)===null)return{kind:"sync",body:null};let r=k.call(s);return{kind:"deferred",body:T.call(r)}}catch{return{kind:"unreadable"}}},q=(s,r)=>{let u=0,c=!1,l=()=>{o({type:"error",id:s,reason:"tap_error"}),o({type:"end",id:s,status:u,ok:c})};try{let b=d.call(r);u=typeof b=="number"?b:0,c=g.call(r)===!0;let v=p.call(r);if(v===null){m.call(r).then(L=>{try{L&&o({type:"chunk",id:s,text:L}),o({type:"end",id:s,status:u,ok:c})}catch{l()}},l);return}let O=v.getReader(),A=new j,_=0,U=()=>{O.read().then(L=>{try{if(L.done){let B=String(S.call(A));B&&o({type:"chunk",id:s,text:B}),o({type:"end",id:s,status:u,ok:c});return}_+=L.value.byteLength;let Q=String(S.call(A,L.value,{stream:!0}));if(Q&&o({type:"chunk",id:s,text:Q}),_>=ce){o({type:"error",id:s,reason:"truncated"}),o({type:"end",id:s,status:u,ok:c});let B=()=>{};O.cancel().then(B,B);return}U()}catch{l()}},l)};U()}catch{l()}},x=s=>{let r=s[0],u=s[1],c,l,b=null;if(typeof r=="string"||r instanceof M)c=X(String(r)),l=u?.method??"GET";else{let _=t.call(r),U=e.call(r);if(typeof _!="string"||typeof U!="string")return null;b=r,c=X(_),l=u?.method??U}if(!I(c))return null;let v=b!==null&&u?.body===void 0?P(b):z(u?.body),O=R++,A=Y(v,O,c,l);return A===null?null:{id:O,started:A}};a.fetch=(...s)=>{let r;try{r=x(s)}catch{r=null}let u=w(...s);if(!r)return u;let{id:c,started:l}=r;try{return u.then(void 0,()=>{l.then(()=>{o({type:"error",id:c,reason:"aborted"}),o({type:"end",id:c,status:0,ok:!1})})}),u.then(b=>{try{let v=y.call(b),O=()=>{q(c,v)};l.then(O,O)}catch{o({type:"error",id:c,reason:"tap_error"}),o({type:"end",id:c,status:0,ok:!1})}return b})}catch{return u}},$=!0}}catch{}let H=!1;try{let t=a.XMLHttpRequest;if(typeof t=="function"){let e=t.prototype,n=f(e,"status"),d=f(e,"responseType"),g=f(e,"responseText"),p=E(e,"addEventListener");if(n!==void 0&&d!==void 0&&g!==void 0&&p!==void 0){let k=e.open,T=e.send,y=new WeakMap;e.open=function(...w){try{y.set(this,{method:String(w[0]),url:X(String(w[1]))})}catch{}k.call(this,...w)},e.send=function(w){try{let P=y.get(this);if(P&&I(P.url)){let q=z(w),x=R++,s=Y(q,x,P.url,P.method);s!==null&&p.call(this,"loadend",()=>{if(y.get(this)!==P)return;let r;try{let u=n.call(this),c=typeof u=="number"?u:0,l=d.call(this),b=l===""||l==="text"?g.call(this):"",v=typeof b=="string"?b:"";r=()=>{v&&o({type:"chunk",id:x,text:v}),o({type:"end",id:x,status:c,ok:c>=200&&c<300})}}catch{r=()=>{o({type:"error",id:x,reason:"tap_error"}),o({type:"end",id:x,status:0,ok:!1})}}s.then(r,r)},{once:!0})}}catch{}T.call(this,w)},H=!0}}}catch{}o({type:"ready"}),o({type:"patched",fetch:$,xhr:H})}function he(){try{if(typeof window>"u"||typeof MessageChannel>"u")return;let a=new MessageChannel;ye(window,a.port1,ie),window.postMessage({tag:se},"*",[a.port2])}catch{}}he();})();