agent-embassy 1.0.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 (145) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/CONTRIBUTING.md +122 -0
  3. package/LICENSE +21 -0
  4. package/README.md +185 -0
  5. package/README.zh-CN.md +185 -0
  6. package/SECURITY.md +224 -0
  7. package/assets/live-dashboard/app.css +1610 -0
  8. package/assets/mark-seal.svg +7 -0
  9. package/assets/mark.svg +7 -0
  10. package/assets/social-preview.png +0 -0
  11. package/assets/vendor/react/LICENSE +21 -0
  12. package/assets/vendor/react/react-dom.production.min.js +267 -0
  13. package/assets/vendor/react/react.production.min.js +31 -0
  14. package/dist/src/errors.d.ts +5 -0
  15. package/dist/src/errors.js +11 -0
  16. package/dist/src/errors.js.map +1 -0
  17. package/dist/src/gateway/claude-compatibility-scratch.d.ts +18 -0
  18. package/dist/src/gateway/claude-compatibility-scratch.js +158 -0
  19. package/dist/src/gateway/claude-compatibility-scratch.js.map +1 -0
  20. package/dist/src/gateway/claude-helper-client.d.ts +43 -0
  21. package/dist/src/gateway/claude-helper-client.js +212 -0
  22. package/dist/src/gateway/claude-helper-client.js.map +1 -0
  23. package/dist/src/gateway/claude-helper-protocol.d.ts +172 -0
  24. package/dist/src/gateway/claude-helper-protocol.js +373 -0
  25. package/dist/src/gateway/claude-helper-protocol.js.map +1 -0
  26. package/dist/src/gateway/claude-helper-supervisor.d.ts +74 -0
  27. package/dist/src/gateway/claude-helper-supervisor.js +497 -0
  28. package/dist/src/gateway/claude-helper-supervisor.js.map +1 -0
  29. package/dist/src/gateway/claude-helper.d.ts +1 -0
  30. package/dist/src/gateway/claude-helper.js +269 -0
  31. package/dist/src/gateway/claude-helper.js.map +1 -0
  32. package/dist/src/gateway/claude-peer.d.ts +273 -0
  33. package/dist/src/gateway/claude-peer.js +2359 -0
  34. package/dist/src/gateway/claude-peer.js.map +1 -0
  35. package/dist/src/gateway/claude-runtime.d.ts +40 -0
  36. package/dist/src/gateway/claude-runtime.js +302 -0
  37. package/dist/src/gateway/claude-runtime.js.map +1 -0
  38. package/dist/src/gateway/cli-copy.d.ts +8 -0
  39. package/dist/src/gateway/cli-copy.en.d.ts +13 -0
  40. package/dist/src/gateway/cli-copy.en.js +43 -0
  41. package/dist/src/gateway/cli-copy.en.js.map +1 -0
  42. package/dist/src/gateway/cli-copy.js +19 -0
  43. package/dist/src/gateway/cli-copy.js.map +1 -0
  44. package/dist/src/gateway/cli-copy.zh-CN.d.ts +13 -0
  45. package/dist/src/gateway/cli-copy.zh-CN.js +43 -0
  46. package/dist/src/gateway/cli-copy.zh-CN.js.map +1 -0
  47. package/dist/src/gateway/cli.d.ts +44 -0
  48. package/dist/src/gateway/cli.js +969 -0
  49. package/dist/src/gateway/cli.js.map +1 -0
  50. package/dist/src/gateway/codex-app-server.d.ts +310 -0
  51. package/dist/src/gateway/codex-app-server.js +1746 -0
  52. package/dist/src/gateway/codex-app-server.js.map +1 -0
  53. package/dist/src/gateway/codex-local-transport.d.ts +81 -0
  54. package/dist/src/gateway/codex-local-transport.js +617 -0
  55. package/dist/src/gateway/codex-local-transport.js.map +1 -0
  56. package/dist/src/gateway/codex-registration-generation.d.ts +5 -0
  57. package/dist/src/gateway/codex-registration-generation.js +19 -0
  58. package/dist/src/gateway/codex-registration-generation.js.map +1 -0
  59. package/dist/src/gateway/codex-registration-succession.d.ts +209 -0
  60. package/dist/src/gateway/codex-registration-succession.js +588 -0
  61. package/dist/src/gateway/codex-registration-succession.js.map +1 -0
  62. package/dist/src/gateway/compatibility.d.ts +70 -0
  63. package/dist/src/gateway/compatibility.js +252 -0
  64. package/dist/src/gateway/compatibility.js.map +1 -0
  65. package/dist/src/gateway/config.d.ts +24 -0
  66. package/dist/src/gateway/config.js +130 -0
  67. package/dist/src/gateway/config.js.map +1 -0
  68. package/dist/src/gateway/control.d.ts +308 -0
  69. package/dist/src/gateway/control.js +1573 -0
  70. package/dist/src/gateway/control.js.map +1 -0
  71. package/dist/src/gateway/dashboard-copy.d.ts +7 -0
  72. package/dist/src/gateway/dashboard-copy.en.d.ts +506 -0
  73. package/dist/src/gateway/dashboard-copy.en.js +507 -0
  74. package/dist/src/gateway/dashboard-copy.en.js.map +1 -0
  75. package/dist/src/gateway/dashboard-copy.js +516 -0
  76. package/dist/src/gateway/dashboard-copy.js.map +1 -0
  77. package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +506 -0
  78. package/dist/src/gateway/dashboard-copy.zh-CN.js +507 -0
  79. package/dist/src/gateway/dashboard-copy.zh-CN.js.map +1 -0
  80. package/dist/src/gateway/dashboard-model.d.ts +207 -0
  81. package/dist/src/gateway/dashboard-model.js +720 -0
  82. package/dist/src/gateway/dashboard-model.js.map +1 -0
  83. package/dist/src/gateway/dashboard.d.ts +26 -0
  84. package/dist/src/gateway/dashboard.js +941 -0
  85. package/dist/src/gateway/dashboard.js.map +1 -0
  86. package/dist/src/gateway/delivery-machine.d.ts +235 -0
  87. package/dist/src/gateway/delivery-machine.js +540 -0
  88. package/dist/src/gateway/delivery-machine.js.map +1 -0
  89. package/dist/src/gateway/instance-lease.d.ts +21 -0
  90. package/dist/src/gateway/instance-lease.js +549 -0
  91. package/dist/src/gateway/instance-lease.js.map +1 -0
  92. package/dist/src/gateway/live-dashboard-app/app.js +2914 -0
  93. package/dist/src/gateway/live-dashboard-assets.d.ts +10 -0
  94. package/dist/src/gateway/live-dashboard-assets.js +73 -0
  95. package/dist/src/gateway/live-dashboard-assets.js.map +1 -0
  96. package/dist/src/gateway/live-dashboard-bootstrap.d.ts +36 -0
  97. package/dist/src/gateway/live-dashboard-bootstrap.js +176 -0
  98. package/dist/src/gateway/live-dashboard-bootstrap.js.map +1 -0
  99. package/dist/src/gateway/live-dashboard-command.d.ts +54 -0
  100. package/dist/src/gateway/live-dashboard-command.js +324 -0
  101. package/dist/src/gateway/live-dashboard-command.js.map +1 -0
  102. package/dist/src/gateway/live-dashboard-http.d.ts +41 -0
  103. package/dist/src/gateway/live-dashboard-http.js +445 -0
  104. package/dist/src/gateway/live-dashboard-http.js.map +1 -0
  105. package/dist/src/gateway/live-dashboard-protocol.d.ts +38 -0
  106. package/dist/src/gateway/live-dashboard-protocol.js +156 -0
  107. package/dist/src/gateway/live-dashboard-protocol.js.map +1 -0
  108. package/dist/src/gateway/live-dashboard-server.d.ts +33 -0
  109. package/dist/src/gateway/live-dashboard-server.js +130 -0
  110. package/dist/src/gateway/live-dashboard-server.js.map +1 -0
  111. package/dist/src/gateway/live-dashboard-stream.d.ts +46 -0
  112. package/dist/src/gateway/live-dashboard-stream.js +233 -0
  113. package/dist/src/gateway/live-dashboard-stream.js.map +1 -0
  114. package/dist/src/gateway/live-dashboard.d.ts +31 -0
  115. package/dist/src/gateway/live-dashboard.js +190 -0
  116. package/dist/src/gateway/live-dashboard.js.map +1 -0
  117. package/dist/src/gateway/locale.d.ts +4 -0
  118. package/dist/src/gateway/locale.js +10 -0
  119. package/dist/src/gateway/locale.js.map +1 -0
  120. package/dist/src/gateway/progress-watch-machine.d.ts +97 -0
  121. package/dist/src/gateway/progress-watch-machine.js +172 -0
  122. package/dist/src/gateway/progress-watch-machine.js.map +1 -0
  123. package/dist/src/gateway/providers.d.ts +287 -0
  124. package/dist/src/gateway/providers.js +2451 -0
  125. package/dist/src/gateway/providers.js.map +1 -0
  126. package/dist/src/gateway/server.d.ts +57 -0
  127. package/dist/src/gateway/server.js +264 -0
  128. package/dist/src/gateway/server.js.map +1 -0
  129. package/dist/src/gateway/service.d.ts +449 -0
  130. package/dist/src/gateway/service.js +4831 -0
  131. package/dist/src/gateway/service.js.map +1 -0
  132. package/dist/src/gateway/store.d.ts +340 -0
  133. package/dist/src/gateway/store.js +4047 -0
  134. package/dist/src/gateway/store.js.map +1 -0
  135. package/dist/src/gateway/types.d.ts +514 -0
  136. package/dist/src/gateway/types.js +414 -0
  137. package/dist/src/gateway/types.js.map +1 -0
  138. package/dist/src/mutex.d.ts +4 -0
  139. package/dist/src/mutex.js +23 -0
  140. package/dist/src/mutex.js.map +1 -0
  141. package/docs/DESIGN.md +134 -0
  142. package/docs/GATEWAY-ARCHITECTURE.md +858 -0
  143. package/package.json +80 -0
  144. package/skills/embassy-peer/SKILL.md +198 -0
  145. package/skills/embassy-peer/agents/openai.yaml +4 -0
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license React
3
+ * react.production.min.js
4
+ *
5
+ * Copyright (c) Facebook, Inc. and its affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ (function(){'use strict';(function(c,x){"object"===typeof exports&&"undefined"!==typeof module?x(exports):"function"===typeof define&&define.amd?define(["exports"],x):(c=c||self,x(c.React={}))})(this,function(c){function x(a){if(null===a||"object"!==typeof a)return null;a=V&&a[V]||a["@@iterator"];return"function"===typeof a?a:null}function w(a,b,e){this.props=a;this.context=b;this.refs=W;this.updater=e||X}function Y(){}function K(a,b,e){this.props=a;this.context=b;this.refs=W;this.updater=e||X}function Z(a,b,
11
+ e){var m,d={},c=null,h=null;if(null!=b)for(m in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(c=""+b.key),b)aa.call(b,m)&&!ba.hasOwnProperty(m)&&(d[m]=b[m]);var l=arguments.length-2;if(1===l)d.children=e;else if(1<l){for(var f=Array(l),k=0;k<l;k++)f[k]=arguments[k+2];d.children=f}if(a&&a.defaultProps)for(m in l=a.defaultProps,l)void 0===d[m]&&(d[m]=l[m]);return{$$typeof:y,type:a,key:c,ref:h,props:d,_owner:L.current}}function oa(a,b){return{$$typeof:y,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}
12
+ function M(a){return"object"===typeof a&&null!==a&&a.$$typeof===y}function pa(a){var b={"=":"=0",":":"=2"};return"$"+a.replace(/[=:]/g,function(a){return b[a]})}function N(a,b){return"object"===typeof a&&null!==a&&null!=a.key?pa(""+a.key):b.toString(36)}function B(a,b,e,m,d){var c=typeof a;if("undefined"===c||"boolean"===c)a=null;var h=!1;if(null===a)h=!0;else switch(c){case "string":case "number":h=!0;break;case "object":switch(a.$$typeof){case y:case qa:h=!0}}if(h)return h=a,d=d(h),a=""===m?"."+
13
+ N(h,0):m,ca(d)?(e="",null!=a&&(e=a.replace(da,"$&/")+"/"),B(d,b,e,"",function(a){return a})):null!=d&&(M(d)&&(d=oa(d,e+(!d.key||h&&h.key===d.key?"":(""+d.key).replace(da,"$&/")+"/")+a)),b.push(d)),1;h=0;m=""===m?".":m+":";if(ca(a))for(var l=0;l<a.length;l++){c=a[l];var f=m+N(c,l);h+=B(c,b,e,f,d)}else if(f=x(a),"function"===typeof f)for(a=f.call(a),l=0;!(c=a.next()).done;)c=c.value,f=m+N(c,l++),h+=B(c,b,e,f,d);else if("object"===c)throw b=String(a),Error("Objects are not valid as a React child (found: "+
14
+ ("[object Object]"===b?"object with keys {"+Object.keys(a).join(", ")+"}":b)+"). If you meant to render a collection of children, use an array instead.");return h}function C(a,b,e){if(null==a)return a;var c=[],d=0;B(a,c,"","",function(a){return b.call(e,a,d++)});return c}function ra(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=
15
+ 0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}function O(a,b){var e=a.length;a.push(b);a:for(;0<e;){var c=e-1>>>1,d=a[c];if(0<D(d,b))a[c]=b,a[e]=d,e=c;else break a}}function p(a){return 0===a.length?null:a[0]}function E(a){if(0===a.length)return null;var b=a[0],e=a.pop();if(e!==b){a[0]=e;a:for(var c=0,d=a.length,k=d>>>1;c<k;){var h=2*(c+1)-1,l=a[h],f=h+1,g=a[f];if(0>D(l,e))f<d&&0>D(g,l)?(a[c]=g,a[f]=e,c=f):(a[c]=l,a[h]=e,c=h);else if(f<d&&0>D(g,e))a[c]=g,a[f]=e,c=f;else break a}}return b}
16
+ function D(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}function P(a){for(var b=p(r);null!==b;){if(null===b.callback)E(r);else if(b.startTime<=a)E(r),b.sortIndex=b.expirationTime,O(q,b);else break;b=p(r)}}function Q(a){z=!1;P(a);if(!u)if(null!==p(q))u=!0,R(S);else{var b=p(r);null!==b&&T(Q,b.startTime-a)}}function S(a,b){u=!1;z&&(z=!1,ea(A),A=-1);F=!0;var c=k;try{P(b);for(n=p(q);null!==n&&(!(n.expirationTime>b)||a&&!fa());){var m=n.callback;if("function"===typeof m){n.callback=null;
17
+ k=n.priorityLevel;var d=m(n.expirationTime<=b);b=v();"function"===typeof d?n.callback=d:n===p(q)&&E(q);P(b)}else E(q);n=p(q)}if(null!==n)var g=!0;else{var h=p(r);null!==h&&T(Q,h.startTime-b);g=!1}return g}finally{n=null,k=c,F=!1}}function fa(){return v()-ha<ia?!1:!0}function R(a){G=a;H||(H=!0,I())}function T(a,b){A=ja(function(){a(v())},b)}function ka(a){throw Error("act(...) is not supported in production builds of React.");}var y=Symbol.for("react.element"),qa=Symbol.for("react.portal"),sa=Symbol.for("react.fragment"),
18
+ ta=Symbol.for("react.strict_mode"),ua=Symbol.for("react.profiler"),va=Symbol.for("react.provider"),wa=Symbol.for("react.context"),xa=Symbol.for("react.forward_ref"),ya=Symbol.for("react.suspense"),za=Symbol.for("react.memo"),Aa=Symbol.for("react.lazy"),V=Symbol.iterator,X={isMounted:function(a){return!1},enqueueForceUpdate:function(a,b,c){},enqueueReplaceState:function(a,b,c,m){},enqueueSetState:function(a,b,c,m){}},la=Object.assign,W={};w.prototype.isReactComponent={};w.prototype.setState=function(a,
19
+ b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,a,b,"setState")};w.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate")};Y.prototype=w.prototype;var t=K.prototype=new Y;t.constructor=K;la(t,w.prototype);t.isPureReactComponent=!0;var ca=Array.isArray,aa=Object.prototype.hasOwnProperty,L={current:null},
20
+ ba={key:!0,ref:!0,__self:!0,__source:!0},da=/\/+/g,g={current:null},J={transition:null};if("object"===typeof performance&&"function"===typeof performance.now){var Ba=performance;var v=function(){return Ba.now()}}else{var ma=Date,Ca=ma.now();v=function(){return ma.now()-Ca}}var q=[],r=[],Da=1,n=null,k=3,F=!1,u=!1,z=!1,ja="function"===typeof setTimeout?setTimeout:null,ea="function"===typeof clearTimeout?clearTimeout:null,na="undefined"!==typeof setImmediate?setImmediate:null;"undefined"!==typeof navigator&&
21
+ void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var H=!1,G=null,A=-1,ia=5,ha=-1,U=function(){if(null!==G){var a=v();ha=a;var b=!0;try{b=G(!0,a)}finally{b?I():(H=!1,G=null)}}else H=!1};if("function"===typeof na)var I=function(){na(U)};else if("undefined"!==typeof MessageChannel){t=new MessageChannel;var Ea=t.port2;t.port1.onmessage=U;I=function(){Ea.postMessage(null)}}else I=function(){ja(U,0)};t={ReactCurrentDispatcher:g,
22
+ ReactCurrentOwner:L,ReactCurrentBatchConfig:J,Scheduler:{__proto__:null,unstable_ImmediatePriority:1,unstable_UserBlockingPriority:2,unstable_NormalPriority:3,unstable_IdlePriority:5,unstable_LowPriority:4,unstable_runWithPriority:function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=k;k=a;try{return b()}finally{k=c}},unstable_next:function(a){switch(k){case 1:case 2:case 3:var b=3;break;default:b=k}var c=k;k=b;try{return a()}finally{k=c}},unstable_scheduleCallback:function(a,
23
+ b,c){var e=v();"object"===typeof c&&null!==c?(c=c.delay,c="number"===typeof c&&0<c?e+c:e):c=e;switch(a){case 1:var d=-1;break;case 2:d=250;break;case 5:d=1073741823;break;case 4:d=1E4;break;default:d=5E3}d=c+d;a={id:Da++,callback:b,priorityLevel:a,startTime:c,expirationTime:d,sortIndex:-1};c>e?(a.sortIndex=c,O(r,a),null===p(q)&&a===p(r)&&(z?(ea(A),A=-1):z=!0,T(Q,c-e))):(a.sortIndex=d,O(q,a),u||F||(u=!0,R(S)));return a},unstable_cancelCallback:function(a){a.callback=null},unstable_wrapCallback:function(a){var b=
24
+ k;return function(){var c=k;k=b;try{return a.apply(this,arguments)}finally{k=c}}},unstable_getCurrentPriorityLevel:function(){return k},unstable_shouldYield:fa,unstable_requestPaint:function(){},unstable_continueExecution:function(){u||F||(u=!0,R(S))},unstable_pauseExecution:function(){},unstable_getFirstCallbackNode:function(){return p(q)},get unstable_now(){return v},unstable_forceFrameRate:function(a){0>a||125<a?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):
25
+ ia=0<a?Math.floor(1E3/a):5},unstable_Profiling:null}};c.Children={map:C,forEach:function(a,b,c){C(a,function(){b.apply(this,arguments)},c)},count:function(a){var b=0;C(a,function(){b++});return b},toArray:function(a){return C(a,function(a){return a})||[]},only:function(a){if(!M(a))throw Error("React.Children.only expected to receive a single React element child.");return a}};c.Component=w;c.Fragment=sa;c.Profiler=ua;c.PureComponent=K;c.StrictMode=ta;c.Suspense=ya;c.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=
26
+ t;c.act=ka;c.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+a+".");var e=la({},a.props),d=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=L.current);void 0!==b.key&&(d=""+b.key);if(a.type&&a.type.defaultProps)var l=a.type.defaultProps;for(f in b)aa.call(b,f)&&!ba.hasOwnProperty(f)&&(e[f]=void 0===b[f]&&void 0!==l?l[f]:b[f])}var f=arguments.length-2;if(1===f)e.children=c;else if(1<f){l=
27
+ Array(f);for(var g=0;g<f;g++)l[g]=arguments[g+2];e.children=l}return{$$typeof:y,type:a.type,key:d,ref:k,props:e,_owner:h}};c.createContext=function(a){a={$$typeof:wa,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:va,_context:a};return a.Consumer=a};c.createElement=Z;c.createFactory=function(a){var b=Z.bind(null,a);b.type=a;return b};c.createRef=function(){return{current:null}};c.forwardRef=function(a){return{$$typeof:xa,
28
+ render:a}};c.isValidElement=M;c.lazy=function(a){return{$$typeof:Aa,_payload:{_status:-1,_result:a},_init:ra}};c.memo=function(a,b){return{$$typeof:za,type:a,compare:void 0===b?null:b}};c.startTransition=function(a,b){b=J.transition;J.transition={};try{a()}finally{J.transition=b}};c.unstable_act=ka;c.useCallback=function(a,b){return g.current.useCallback(a,b)};c.useContext=function(a){return g.current.useContext(a)};c.useDebugValue=function(a,b){};c.useDeferredValue=function(a){return g.current.useDeferredValue(a)};
29
+ c.useEffect=function(a,b){return g.current.useEffect(a,b)};c.useId=function(){return g.current.useId()};c.useImperativeHandle=function(a,b,c){return g.current.useImperativeHandle(a,b,c)};c.useInsertionEffect=function(a,b){return g.current.useInsertionEffect(a,b)};c.useLayoutEffect=function(a,b){return g.current.useLayoutEffect(a,b)};c.useMemo=function(a,b){return g.current.useMemo(a,b)};c.useReducer=function(a,b,c){return g.current.useReducer(a,b,c)};c.useRef=function(a){return g.current.useRef(a)};
30
+ c.useState=function(a){return g.current.useState(a)};c.useSyncExternalStore=function(a,b,c){return g.current.useSyncExternalStore(a,b,c)};c.useTransition=function(){return g.current.useTransition()};c.version="18.3.1"});
31
+ })();
@@ -0,0 +1,5 @@
1
+ export declare class BridgeError extends Error {
2
+ readonly code: string;
3
+ readonly recoverable: boolean;
4
+ constructor(code: string, message: string, recoverable?: boolean);
5
+ }
@@ -0,0 +1,11 @@
1
+ export class BridgeError extends Error {
2
+ code;
3
+ recoverable;
4
+ constructor(code, message, recoverable = false) {
5
+ super(message);
6
+ this.name = "BridgeError";
7
+ this.code = code;
8
+ this.recoverable = recoverable;
9
+ }
10
+ }
11
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAS;IACb,WAAW,CAAU;IAE9B,YAAY,IAAY,EAAE,OAAe,EAAE,WAAW,GAAG,KAAK;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { type ChildProcessWithoutNullStreams, type SpawnOptionsWithoutStdio } from "node:child_process";
2
+ import type { AttestedClaudePeerRuntime } from "./claude-runtime.js";
3
+ export type ClaudeCompatibilityScratch = Readonly<{
4
+ name: string;
5
+ sessionId: string;
6
+ assertRunning: () => void;
7
+ close: () => Promise<void>;
8
+ }>;
9
+ export type ClaudeCompatibilityScratchFactory = () => Promise<ClaudeCompatibilityScratch>;
10
+ type ScratchDependencies = Readonly<{
11
+ spawn?: (command: string, args: readonly string[], options: SpawnOptionsWithoutStdio) => ChildProcessWithoutNullStreams;
12
+ userInfo?: () => {
13
+ homedir: string;
14
+ username: string;
15
+ };
16
+ }>;
17
+ export declare function startClaudeCompatibilityScratch(runtime: AttestedClaudePeerRuntime, dependencies?: ScratchDependencies): Promise<ClaudeCompatibilityScratch>;
18
+ export {};
@@ -0,0 +1,158 @@
1
+ import { randomBytes, randomUUID } from "node:crypto";
2
+ import { spawn as nodeSpawn, } from "node:child_process";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { BridgeError } from "../errors.js";
6
+ const MAX_SCRATCH_OUTPUT_BYTES = 64 * 1024;
7
+ const SCRATCH_START_TIMEOUT_MS = 2_000;
8
+ const SCRATCH_CLOSE_TIMEOUT_MS = 2_000;
9
+ function waitForSpawn(child) {
10
+ return new Promise((resolve, reject) => {
11
+ const timer = setTimeout(() => {
12
+ cleanup();
13
+ reject(new Error("scratch spawn timeout"));
14
+ }, SCRATCH_START_TIMEOUT_MS);
15
+ timer.unref();
16
+ const cleanup = () => {
17
+ clearTimeout(timer);
18
+ child.off("spawn", onSpawn);
19
+ child.off("error", onError);
20
+ child.off("exit", onExit);
21
+ };
22
+ const onSpawn = () => {
23
+ cleanup();
24
+ resolve();
25
+ };
26
+ const onError = (error) => {
27
+ cleanup();
28
+ reject(error);
29
+ };
30
+ const onExit = () => {
31
+ cleanup();
32
+ reject(new Error("scratch exited before ready"));
33
+ };
34
+ child.once("spawn", onSpawn);
35
+ child.once("error", onError);
36
+ child.once("exit", onExit);
37
+ });
38
+ }
39
+ function waitForExit(child, timeoutMs) {
40
+ if (child.exitCode !== null || child.signalCode !== null) {
41
+ return Promise.resolve(true);
42
+ }
43
+ return new Promise((resolve) => {
44
+ const timer = setTimeout(() => {
45
+ cleanup();
46
+ resolve(false);
47
+ }, timeoutMs);
48
+ timer.unref();
49
+ const cleanup = () => {
50
+ clearTimeout(timer);
51
+ child.off("exit", onExit);
52
+ };
53
+ const onExit = () => {
54
+ cleanup();
55
+ resolve(true);
56
+ };
57
+ child.once("exit", onExit);
58
+ });
59
+ }
60
+ export async function startClaudeCompatibilityScratch(runtime, dependencies = {}) {
61
+ const user = (dependencies.userInfo ?? os.userInfo)();
62
+ if (!path.isAbsolute(user.homedir) ||
63
+ path.normalize(user.homedir) !== user.homedir ||
64
+ user.homedir.includes("\0") ||
65
+ !/^[A-Za-z0-9._-]{1,128}$/.test(user.username)) {
66
+ throw new BridgeError("CLAUDE_CERTIFICATION_USER_INVALID", "The bounded Claude certification scratch requires one canonical local user.");
67
+ }
68
+ const sessionId = randomUUID();
69
+ const name = `embassy-compat-${randomBytes(6).toString("hex")}`;
70
+ const args = [
71
+ "--print",
72
+ "--input-format",
73
+ "stream-json",
74
+ "--output-format",
75
+ "stream-json",
76
+ "--verbose",
77
+ "--session-id",
78
+ sessionId,
79
+ "--name",
80
+ name,
81
+ "--safe-mode",
82
+ "--tools",
83
+ "",
84
+ "--strict-mcp-config",
85
+ "--no-session-persistence",
86
+ "--permission-mode",
87
+ "dontAsk",
88
+ "--settings",
89
+ '{"crossSessionInbound":"accept"}',
90
+ ];
91
+ const spawn = dependencies.spawn ??
92
+ ((command, argv, options) => nodeSpawn(command, [...argv], options));
93
+ let child;
94
+ try {
95
+ child = spawn(runtime.claudeExecutable, args, {
96
+ cwd: user.homedir,
97
+ detached: false,
98
+ env: {
99
+ HOME: user.homedir,
100
+ USER: user.username,
101
+ LOGNAME: user.username,
102
+ SHELL: "/bin/zsh",
103
+ PATH: "/usr/bin:/bin:/usr/sbin:/sbin",
104
+ TMPDIR: os.tmpdir(),
105
+ },
106
+ shell: false,
107
+ stdio: "pipe",
108
+ });
109
+ }
110
+ catch {
111
+ throw new BridgeError("CLAUDE_CERTIFICATION_SCRATCH_UNAVAILABLE", "The bounded Claude certification scratch could not start.", true);
112
+ }
113
+ let outputBytes = 0;
114
+ let outputOverflow = false;
115
+ const observeOutput = (chunk) => {
116
+ outputBytes += Buffer.byteLength(chunk);
117
+ if (outputBytes > MAX_SCRATCH_OUTPUT_BYTES && !outputOverflow) {
118
+ outputOverflow = true;
119
+ child.kill("SIGTERM");
120
+ }
121
+ };
122
+ child.stdout.on("data", observeOutput);
123
+ child.stderr.on("data", observeOutput);
124
+ try {
125
+ await waitForSpawn(child);
126
+ }
127
+ catch {
128
+ child.kill("SIGKILL");
129
+ await waitForExit(child, SCRATCH_CLOSE_TIMEOUT_MS);
130
+ throw new BridgeError("CLAUDE_CERTIFICATION_SCRATCH_UNAVAILABLE", "The bounded Claude certification scratch did not become ready.", true);
131
+ }
132
+ let closeOperation;
133
+ return {
134
+ name,
135
+ sessionId,
136
+ assertRunning: () => {
137
+ if (outputOverflow ||
138
+ child.exitCode !== null ||
139
+ child.signalCode !== null) {
140
+ throw new BridgeError("CLAUDE_CERTIFICATION_SCRATCH_EXITED", "The bounded Claude certification scratch exited before settlement.", true);
141
+ }
142
+ },
143
+ close: () => {
144
+ closeOperation ??= (async () => {
145
+ child.stdin.end();
146
+ if (await waitForExit(child, SCRATCH_CLOSE_TIMEOUT_MS))
147
+ return;
148
+ child.kill("SIGTERM");
149
+ if (await waitForExit(child, SCRATCH_CLOSE_TIMEOUT_MS))
150
+ return;
151
+ child.kill("SIGKILL");
152
+ await waitForExit(child, SCRATCH_CLOSE_TIMEOUT_MS);
153
+ })();
154
+ return closeOperation;
155
+ },
156
+ };
157
+ }
158
+ //# sourceMappingURL=claude-compatibility-scratch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-compatibility-scratch.js","sourceRoot":"","sources":["../../../src/gateway/claude-compatibility-scratch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { AttestedClaudePeerRuntime } from "./claude-runtime.js";
2
+ import type { GatewayDeliveryNoticeMode } from "./config.js";
3
+ import { type ClaudeNativeHelperCommand, type ClaudeNativeHelperEvent, type ClaudeNativeHelperRegistration, type ClaudeNativeHelperResult } from "./claude-helper-protocol.js";
4
+ import type { DashboardLocale } from "./locale.js";
5
+ export type ClaudeNativeHelperClientCallbacks = Readonly<{
6
+ onEvent: (event: ClaudeNativeHelperEvent) => void;
7
+ onExit: (event: Readonly<{
8
+ code: number | null;
9
+ signal: NodeJS.Signals | null;
10
+ }>) => void;
11
+ }>;
12
+ export type ClaudeNativeHelperClientStartOptions = Readonly<{
13
+ entryPath?: string;
14
+ runtime: AttestedClaudePeerRuntime;
15
+ hostId: "this-mac";
16
+ locale: DashboardLocale;
17
+ deliveryNotices: GatewayDeliveryNoticeMode;
18
+ maxPendingMessages: number;
19
+ registration: ClaudeNativeHelperRegistration;
20
+ callbacks: ClaudeNativeHelperClientCallbacks;
21
+ }>;
22
+ export interface ClaudeNativeHelperClientLike {
23
+ readonly pid: number;
24
+ readonly registration: ClaudeNativeHelperRegistration;
25
+ generation: string;
26
+ request(command: ClaudeNativeHelperCommand, timeoutMs?: number): Promise<ClaudeNativeHelperResult>;
27
+ close(): Promise<void>;
28
+ forceClose(): Promise<void>;
29
+ }
30
+ export type ClaudeNativeHelperFactory = (options: ClaudeNativeHelperClientStartOptions) => Promise<ClaudeNativeHelperClientLike>;
31
+ export declare function defaultClaudeNativeHelperEntryPath(): string;
32
+ export declare class ClaudeNativeHelperClient implements ClaudeNativeHelperClientLike {
33
+ #private;
34
+ readonly pid: number;
35
+ readonly registration: ClaudeNativeHelperRegistration;
36
+ generation: string;
37
+ private constructor();
38
+ static start(options: ClaudeNativeHelperClientStartOptions): Promise<ClaudeNativeHelperClient>;
39
+ request(command: ClaudeNativeHelperCommand, timeoutMs?: number): Promise<ClaudeNativeHelperResult>;
40
+ close(): Promise<void>;
41
+ forceClose(): Promise<void>;
42
+ }
43
+ export declare const createClaudeNativeHelper: ClaudeNativeHelperFactory;
@@ -0,0 +1,212 @@
1
+ import { fork, } from "node:child_process";
2
+ import { randomBytes } from "node:crypto";
3
+ import { fileURLToPath } from "node:url";
4
+ import { BridgeError } from "../errors.js";
5
+ import { assertClaudeNativeHelperIpcSize, CLAUDE_NATIVE_HELPER_MAX_REQUESTS, CLAUDE_NATIVE_HELPER_PROTOCOL_VERSION, isClaudeNativeHelperChildMessage, } from "./claude-helper-protocol.js";
6
+ const DEFAULT_REQUEST_TIMEOUT_MS = 5_000;
7
+ const CLOSE_TIMEOUT_MS = 2_000;
8
+ export function defaultClaudeNativeHelperEntryPath() {
9
+ return fileURLToPath(new URL("./claude-helper.js", import.meta.url));
10
+ }
11
+ function requestId() {
12
+ return randomBytes(18).toString("base64url");
13
+ }
14
+ function helperFault(code, recoverable = false) {
15
+ return new BridgeError(code, "The supervised native Claude helper could not complete its bounded operation.", recoverable);
16
+ }
17
+ function sendIpc(child, value) {
18
+ assertClaudeNativeHelperIpcSize(value);
19
+ if (!child.connected || child.killed) {
20
+ return Promise.reject(helperFault("CLAUDE_NATIVE_HELPER_UNAVAILABLE", true));
21
+ }
22
+ return new Promise((resolve, reject) => {
23
+ child.send(value, (error) => {
24
+ if (error === null)
25
+ resolve();
26
+ else
27
+ reject(helperFault("CLAUDE_NATIVE_HELPER_IPC_FAILED", true));
28
+ });
29
+ });
30
+ }
31
+ export class ClaudeNativeHelperClient {
32
+ pid;
33
+ registration;
34
+ generation;
35
+ #child;
36
+ #callbacks;
37
+ #pending = new Map();
38
+ #closed = false;
39
+ #exitSettled = false;
40
+ #exitPromise;
41
+ #resolveExit;
42
+ constructor(child, registration, callbacks) {
43
+ if (!Number.isSafeInteger(child.pid) || (child.pid ?? 0) <= 0) {
44
+ throw helperFault("CLAUDE_NATIVE_HELPER_PID_INVALID");
45
+ }
46
+ this.pid = child.pid;
47
+ this.registration = registration;
48
+ this.generation = "";
49
+ this.#child = child;
50
+ this.#callbacks = callbacks;
51
+ this.#exitPromise = new Promise((resolve) => {
52
+ this.#resolveExit = resolve;
53
+ });
54
+ child.on("message", (value) => this.#onMessage(value));
55
+ child.once("error", () => this.#fail(helperFault("CLAUDE_NATIVE_HELPER_SPAWN_FAILED")));
56
+ child.once("disconnect", () => {
57
+ if (!this.#exitSettled) {
58
+ this.#fail(helperFault("CLAUDE_NATIVE_HELPER_DISCONNECTED"));
59
+ }
60
+ });
61
+ child.once("exit", (code, signal) => this.#onExit(code, signal));
62
+ }
63
+ static async start(options) {
64
+ const entryPath = options.entryPath ?? defaultClaudeNativeHelperEntryPath();
65
+ const child = fork(entryPath, [], {
66
+ cwd: "/",
67
+ env: {
68
+ LANG: "C",
69
+ LC_ALL: "C",
70
+ TZ: "UTC",
71
+ },
72
+ execPath: process.execPath,
73
+ execArgv: [],
74
+ serialization: "json",
75
+ stdio: ["ignore", "ignore", "ignore", "ipc"],
76
+ });
77
+ const client = new ClaudeNativeHelperClient(child, options.registration, options.callbacks);
78
+ const init = {
79
+ protocolVersion: CLAUDE_NATIVE_HELPER_PROTOCOL_VERSION,
80
+ type: "initialize",
81
+ requestId: requestId(),
82
+ runtime: { ...options.runtime },
83
+ hostId: options.hostId,
84
+ locale: options.locale,
85
+ deliveryNotices: options.deliveryNotices,
86
+ maxPendingMessages: options.maxPendingMessages,
87
+ registration: { ...options.registration },
88
+ };
89
+ try {
90
+ const result = await client.#requestEnvelope(init, DEFAULT_REQUEST_TIMEOUT_MS);
91
+ if (!("generation" in result) ||
92
+ typeof result.generation !== "string" ||
93
+ result.generation.length === 0) {
94
+ throw helperFault("CLAUDE_NATIVE_HELPER_INVALID_RESPONSE");
95
+ }
96
+ client.generation = result.generation;
97
+ return client;
98
+ }
99
+ catch (error) {
100
+ await client.forceClose();
101
+ throw error;
102
+ }
103
+ }
104
+ async request(command, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
105
+ return await this.#requestEnvelope({
106
+ protocolVersion: CLAUDE_NATIVE_HELPER_PROTOCOL_VERSION,
107
+ type: "request",
108
+ requestId: requestId(),
109
+ command,
110
+ }, timeoutMs);
111
+ }
112
+ async close() {
113
+ if (this.#closed)
114
+ return await this.#exitPromise;
115
+ try {
116
+ await this.request({ method: "close" }, CLOSE_TIMEOUT_MS);
117
+ }
118
+ catch {
119
+ this.#child.kill("SIGTERM");
120
+ }
121
+ this.#closed = true;
122
+ const timer = setTimeout(() => this.#child.kill("SIGKILL"), CLOSE_TIMEOUT_MS);
123
+ timer.unref();
124
+ await this.#exitPromise;
125
+ clearTimeout(timer);
126
+ }
127
+ async forceClose() {
128
+ if (!this.#closed)
129
+ this.#closed = true;
130
+ if (!this.#exitSettled)
131
+ this.#child.kill("SIGTERM");
132
+ const timer = setTimeout(() => this.#child.kill("SIGKILL"), CLOSE_TIMEOUT_MS);
133
+ timer.unref();
134
+ await this.#exitPromise;
135
+ clearTimeout(timer);
136
+ }
137
+ async #requestEnvelope(envelope, timeoutMs) {
138
+ if (this.#closed || this.#exitSettled) {
139
+ throw helperFault("CLAUDE_NATIVE_HELPER_UNAVAILABLE", true);
140
+ }
141
+ if (this.#pending.size >= CLAUDE_NATIVE_HELPER_MAX_REQUESTS) {
142
+ throw helperFault("CLAUDE_NATIVE_HELPER_REQUEST_CAPACITY", true);
143
+ }
144
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 60_000) {
145
+ throw helperFault("CLAUDE_NATIVE_HELPER_TIMEOUT_INVALID");
146
+ }
147
+ const promise = new Promise((resolve, reject) => {
148
+ const timer = setTimeout(() => {
149
+ this.#pending.delete(envelope.requestId);
150
+ reject(helperFault("CLAUDE_NATIVE_HELPER_REQUEST_TIMEOUT"));
151
+ }, timeoutMs);
152
+ timer.unref();
153
+ this.#pending.set(envelope.requestId, { resolve, reject, timer });
154
+ });
155
+ try {
156
+ await sendIpc(this.#child, envelope);
157
+ }
158
+ catch (error) {
159
+ const pending = this.#pending.get(envelope.requestId);
160
+ if (pending !== undefined) {
161
+ clearTimeout(pending.timer);
162
+ this.#pending.delete(envelope.requestId);
163
+ pending.reject(error);
164
+ }
165
+ }
166
+ return await promise;
167
+ }
168
+ #onMessage(value) {
169
+ try {
170
+ assertClaudeNativeHelperIpcSize(value);
171
+ if (!isClaudeNativeHelperChildMessage(value)) {
172
+ throw helperFault("CLAUDE_NATIVE_HELPER_PROTOCOL_INVALID");
173
+ }
174
+ }
175
+ catch (error) {
176
+ this.#fail(error);
177
+ this.#child.kill("SIGTERM");
178
+ return;
179
+ }
180
+ const message = value;
181
+ if (message.type === "event") {
182
+ this.#callbacks.onEvent(message.value);
183
+ return;
184
+ }
185
+ const pending = this.#pending.get(message.requestId);
186
+ if (pending === undefined)
187
+ return;
188
+ clearTimeout(pending.timer);
189
+ this.#pending.delete(message.requestId);
190
+ if (message.ok)
191
+ pending.resolve(message.result);
192
+ else
193
+ pending.reject(helperFault(message.error.code, message.error.recoverable));
194
+ }
195
+ #fail(error) {
196
+ for (const pending of this.#pending.values()) {
197
+ clearTimeout(pending.timer);
198
+ pending.reject(error);
199
+ }
200
+ this.#pending.clear();
201
+ }
202
+ #onExit(code, signal) {
203
+ if (this.#exitSettled)
204
+ return;
205
+ this.#exitSettled = true;
206
+ this.#fail(helperFault("CLAUDE_NATIVE_HELPER_EXITED"));
207
+ this.#resolveExit();
208
+ this.#callbacks.onExit({ code, signal });
209
+ }
210
+ }
211
+ export const createClaudeNativeHelper = async (options) => await ClaudeNativeHelperClient.start(options);
212
+ //# sourceMappingURL=claude-helper-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-helper-client.js","sourceRoot":"","sources":["../../../src/gateway/claude-helper-client.ts"],"names":[],"mappings":"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"}