@agimon-ai/doompi-team 0.0.1-alpha.29 → 0.0.1-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/adapters/intercom/nativeTeamChannel.cjs +4 -4
- package/dist/src/adapters/intercom/nativeTeamChannel.mjs +4 -4
- package/dist/src/adapters/intercom/nativeTeamChannel.mjs.map +1 -1
- package/dist/src/adapters/pi/extension.cjs +1 -1
- package/dist/src/adapters/pi/extension.mjs +1 -1
- package/dist/src/adapters/pi/extension.mjs.map +1 -1
- package/dist/src/adapters/pi/promptRuntime.cjs +1 -1
- package/dist/src/adapters/pi/promptRuntime.mjs +1 -1
- package/dist/src/adapters/pi/teamRuntime.cjs +1 -1
- package/dist/src/adapters/pi/teamRuntime.mjs +1 -1
- package/dist/src/extensions/spawnPlan.cjs +3 -3
- package/dist/src/extensions/spawnPlan.mjs +3 -3
- package/dist/src/extensions/subagentPromptRuntime.cjs +3 -3
- package/dist/src/extensions/subagentPromptRuntime.mjs +11 -11
- package/dist/src/extensions/subagentPromptRuntime.mjs.map +1 -1
- package/dist/src/extensions/subagentTool.cjs +3 -3
- package/dist/src/extensions/subagentTool.mjs +4 -4
- package/dist/src/services/runs/background/asyncExecution.cjs +1 -1
- package/dist/src/services/runs/background/asyncExecution.mjs +1 -1
- package/dist/src/services/runs/background/asyncExecution.mjs.map +1 -1
- package/dist/src/services/runs/shared/piArgs.cjs +1 -1
- package/dist/src/services/runs/shared/piArgs.mjs +1 -1
- package/package.json +5 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../process/env.cjs"),n=require("../../shared/lruCache.cjs"),r=require("../atomicJson.cjs");require("../../shared/atomicJson.cjs");const i=require("../../shared/boundedKeySet.cjs"),a=require("../../shared/errors.cjs"),o=require("../../shared/paths.cjs"),s=require("../../shared/versioned.cjs");let c=require("node:fs");c=e.__toESM(c,1);let l=require("node:path");l=e.__toESM(l,1);let u=require("node:crypto");const d=`intercom`,f=`subagent.team.message`,p=`subagent.team.reply`,m=`members`,ee=`heartbeats`,h=`inboxes`,g=`replies`,te=`receipts`,ne=`team.json`,_=`.json`,v=`main`,y=`agent`,b=65536,x=4096,re=[`members`,`send`,`ask`,`reply`,`pending`],ie=/^[A-Za-z0-9._-]{1,256}$/,ae=/[^a-z0-9._-]+/g,S=/^[-.]+|[-.]+$/g,oe=`sha256`,C=`delivered`,se=`failed`,ce={oneOf:[...[`members`,`pending`].map(e=>({type:`object`,properties:{action:{const:e}},required:[`action`],additionalProperties:!1})),{type:`object`,properties:{action:{const:`send`},to:{type:`string`},message:{type:`string`}},required:[`action`,`to`,`message`],additionalProperties:!1},{type:`object`,properties:{action:{const:`ask`},to:{type:`string`},message:{type:`string`},timeoutMs:{type:`integer`,minimum:1}},required:[`action`,`to`,`message`],additionalProperties:!1},{type:`object`,properties:{action:{const:`reply`},requestId:{type:`string`},message:{type:`string`}},required:[`action`,`requestId`,`message`],additionalProperties:!1}]};function w(e){return typeof e==`string`&&ie.test(e)}function T(e){return typeof e==`number`&&Number.isInteger(e)}function E(e){return typeof e==`number`&&Number.isFinite(e)}function D(e){return typeof e==`string`&&e.trim().length>0}function O(e){return e===void 0||typeof e==`string`}function le(e){return e===void 0||T(e)}function ue(e){return e===`main`||e===`subagent`}function de(e){return e===`send`||e===`ask`}function k(e,t){return Buffer.byteLength(e,`utf-8`)<=t}function fe(e){return e instanceof Error?e.message:String(e)}function A(e){return process.env[e]?.trim()||void 0}function j(e){return(0,u.createHash)(oe).update(e).digest(`hex`)}function pe(){return(0,u.randomBytes)(32).toString(`base64url`)}function me(e){return`session-${j(e).slice(0,32)}`}function M(e){return e.trim().toLowerCase().replace(ae,`-`).replace(S,``).slice(0,48).replace(S,``)||y}function he(e,t){let n=`-${t+1}`,r=48-n.length;return`${e.slice(0,Math.max(r,0)).replace(S,``)||y}${n}`}function ge(e,t){if(e!==v)return e;if(t)throw Error(`Native team member name '${v}' is reserved for the root session.`);return`main-agent`}function N(e){if(!w(e))throw Error(`Invalid native team id.`);return l.join(o.scopeTeamDir(o.requireCurrentSessionScope()),e)}function P(e,t){if(!w(t))throw Error(`Invalid native team member id.`);return l.join(N(e.teamId),m,`${t}${_}`)}function F(e,t){if(!w(t))throw Error(`Invalid native team member id.`);return l.join(N(e.teamId),ee,`${t}${_}`)}function I(e,t){if(!w(t))throw Error(`Invalid native team member id.`);return l.join(N(e.teamId),h,t)}function L(e){return`${e}${_}`}function R(e,t,n){if(!w(n))throw Error(`Invalid native team message id.`);return l.join(I(e,t),L(n))}function _e(e,t){if(!w(t))throw Error(`Invalid native team request id.`);return l.join(N(e.teamId),g,`${t}${_}`)}function z(e,t,n){if(!w(t)||!w(n))throw Error(`Invalid intercom receipt identity.`);return l.join(N(e.teamId),te,t,`${n}${_}`)}function ve(e,t){return(0,u.createHash)(oe).update(`${e}:${t}`).digest(`hex`)}function ye(e){let t=N(e.teamId);for(let e of[m,ee,h,g,te])c.mkdirSync(l.join(t,e),{recursive:!0,mode:448})}function B(e){try{let t=JSON.parse(c.readFileSync(e,`utf-8`));return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}catch{return}}function V(e){try{return c.rmSync(e,{force:!0}),!0}catch(e){return e.code===`ENOENT`}}function be(e){try{return c.rmSync(e,{recursive:!0,force:!0}),!0}catch{return!1}}function xe(e){if(!(!s.parseVersioned(e,[1]).ok||!e)&&!(!w(e.teamId)||!D(e.rootSessionId)||e.mainMemberId!==v||!E(e.createdAt)||!E(e.updatedAt)))return{version:1,teamId:e.teamId,rootSessionId:e.rootSessionId,mainMemberId:v,createdAt:e.createdAt,updatedAt:e.updatedAt}}function Se(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e;if(!(!D(t.id)||!D(t.subject))&&!(!k(t.id,256)||!k(t.subject,x)))return{id:t.id,subject:t.subject}}function Ce(e){if(!s.parseVersioned(e,[1]).ok||!e||!w(e.teamId)||!D(e.rootSessionId)||!D(e.mainMemberId)||!w(e.memberId)||!ue(e.role)||!D(e.tokenHash)||!T(e.pid)||typeof e.active!=`boolean`||!E(e.joinedAt)||!O(e.agent)||!O(e.runId)||!le(e.childIndex)||!O(e.parentMemberId))return;let t=e.task===void 0?void 0:Se(e.task);if(!(e.task!==void 0&&!t))return{version:1,teamId:e.teamId,rootSessionId:e.rootSessionId,mainMemberId:e.mainMemberId,memberId:e.memberId,role:e.role,tokenHash:e.tokenHash,pid:e.pid,active:e.active,joinedAt:e.joinedAt,...E(e.leftAt)?{leftAt:e.leftAt}:{},...e.agent===void 0?{}:{agent:e.agent},...e.runId===void 0?{}:{runId:e.runId},...e.childIndex===void 0?{}:{childIndex:e.childIndex},...e.parentMemberId===void 0?{}:{parentMemberId:e.parentMemberId},...t?{task:t}:{}}}function we(e){if(!(!s.parseVersioned(e,[1]).ok||!e)&&!(!w(e.memberId)||!D(e.tokenHash)||!T(e.pid)||!E(e.heartbeatAt)))return{version:1,memberId:e.memberId,tokenHash:e.tokenHash,pid:e.pid,heartbeatAt:e.heartbeatAt}}function Te(e){if(!(!s.parseVersioned(e,[2]).ok||!e)&&!(e.type!==f||!w(e.id)||!w(e.teamId)||!de(e.kind)||!w(e.fromMemberId)||!w(e.toMemberId)||!D(e.senderTokenHash)||!T(e.seq)||typeof e.message!=`string`||!k(e.message,b)||!E(e.createdAt)||!E(e.expiresAt)))return{type:f,version:2,id:e.id,teamId:e.teamId,kind:e.kind,fromMemberId:e.fromMemberId,toMemberId:e.toMemberId,senderTokenHash:e.senderTokenHash,seq:e.seq,message:e.message,createdAt:e.createdAt,expiresAt:e.expiresAt}}function Ee(e){if(!(!s.parseVersioned(e,[2]).ok||!e)&&!(e.type!==p||!w(e.requestId)||!w(e.teamId)||!w(e.fromMemberId)||!w(e.toMemberId)||!D(e.senderTokenHash)||typeof e.message!=`string`||!k(e.message,b)||!E(e.createdAt)))return{type:p,version:2,requestId:e.requestId,teamId:e.teamId,fromMemberId:e.fromMemberId,toMemberId:e.toMemberId,senderTokenHash:e.senderTokenHash,message:e.message,createdAt:e.createdAt}}function De(e){if(!e||typeof e!=`object`||Array.isArray(e))throw a.invalidRequest(`Intercom params must be an object.`,`Use one documented intercom action shape.`);let t=e,n=re.find(e=>e===t.action);if(!n)throw new a.DoomTeamExpectedError(`unsupported_operation`,`Unsupported intercom action: ${String(t.action)}.`,!1,`Use members, send, ask, pending, or reply.`);if(!O(t.to)||!O(t.message)||!O(t.requestId))throw a.invalidRequest(`Intercom to, message and requestId values must be strings.`,`Correct the action fields and retry.`);if(t.timeoutMs!==void 0&&(!T(t.timeoutMs)||t.timeoutMs<1))throw a.invalidRequest(`Intercom timeoutMs must be a positive integer.`,`Correct timeoutMs and retry.`);let r=new Set(n===`members`||n===`pending`?[`action`]:n===`reply`?[`action`,`requestId`,`message`]:n===`ask`?[`action`,`to`,`message`,`timeoutMs`]:[`action`,`to`,`message`]),i=Object.keys(t).filter(e=>!r.has(e));if(i.length)throw a.invalidRequest(`Intercom action '${n}' does not accept: ${i.join(`, `)}.`,`Remove unknown fields and retry.`);return{action:n,...t.to===void 0?{}:{to:t.to},...t.message===void 0?{}:{message:t.message},...t.requestId===void 0?{}:{requestId:t.requestId},...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}}}function H(e,t){return Ce(B(P(e,t)))}function U(e,t){let n=we(B(F(e,t.memberId)));if(!(!n||n.memberId!==t.memberId||n.tokenHash!==t.tokenHash))return n}function Oe(e){if(e===process.pid)return!0;try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function ke(e,t){return U(e,t)?.heartbeatAt??t.leftAt??t.joinedAt}function W(e,t,n){return t.active&&Oe(t.pid)&&n-ke(e,t)<=3e4}function Ae(e){c.mkdirSync(I(e,e.memberId),{recursive:!0,mode:448}),r.writePrivateAtomicJson(P(e,e.memberId),e)}function G(e,t,n){let i={version:1,memberId:t.memberId,tokenHash:t.tokenHash,pid:t.pid,heartbeatAt:n};r.writePrivateAtomicJson(F(e,t.memberId),i)}function K(e){let t=l.join(N(e.teamId),m),n;try{n=c.readdirSync(t,{withFileTypes:!0})}catch{return[]}return n.filter(e=>e.isFile()&&e.name.endsWith(_)).map(e=>Ce(B(l.join(t,e.name)))).filter(e=>!!e).filter(t=>t.teamId===e.teamId&&t.rootSessionId===e.rootSessionId)}function q(e,t){return K(e).filter(n=>W(e,n,t)).sort((e,t)=>e.joinedAt-t.joinedAt||e.memberId.localeCompare(t.memberId))}function je(e=Date.now()){let t=Y();if(t)return{members:q(t,e).map($)}}function Me(e,t,n){let r=0;for(let i of K(e))i.memberId!==t&&(W(e,i,n)||n-ke(e,i)<=33e4||(be(I(e,i.memberId)),V(F(e,i.memberId)),V(P(e,i.memberId)),r+=1));return r}function Ne(e){let t=e.trim();if(!t)throw Error(`A root session id is required for native team communication.`);let n={version:1,teamId:me(t),rootSessionId:t,mainMemberId:v};ye(n);let i=l.join(N(n.teamId),ne),a=xe(B(i));if(a&&a.rootSessionId!==t)throw Error(`Native team identity collision detected.`);let o=Date.now(),s={...n,createdAt:a?.createdAt??o,updatedAt:o};return r.writePrivateAtomicJson(i,s),n}function J(e){return{[t.SUBAGENT_TEAM_ID_ENV]:e.teamId,[t.SUBAGENT_TEAM_ROOT_SESSION_ENV]:e.rootSessionId,[t.SUBAGENT_TEAM_MAIN_MEMBER_ENV]:e.mainMemberId}}function Pe(e){return{...J(e),[t.SUBAGENT_TEAM_MEMBER_ID_ENV]:e.memberId,[t.SUBAGENT_TEAM_MEMBER_TOKEN_ENV]:e.token}}function Fe(){return{[t.SUBAGENT_TEAM_MEMBER_ID_ENV]:void 0,[t.SUBAGENT_TEAM_MEMBER_TOKEN_ENV]:void 0}}function Ie(e){Object.assign(process.env,J(e))}function Le(e){e&&process.env.PI_SUBAGENT_TEAM_ID!==e.teamId||(delete process.env[t.SUBAGENT_TEAM_ID_ENV],delete process.env[t.SUBAGENT_TEAM_ROOT_SESSION_ENV],delete process.env[t.SUBAGENT_TEAM_MAIN_MEMBER_ENV])}function Y(){let e=A(t.SUBAGENT_TEAM_ID_ENV),n=A(t.SUBAGENT_TEAM_ROOT_SESSION_ENV),r=A(t.SUBAGENT_TEAM_MAIN_MEMBER_ENV);if(!e||!w(e)||!n||r!==v||e!==me(n))return;let i=xe(B(l.join(N(e),ne)));if(!(!i||i.rootSessionId!==n||i.teamId!==e))return{version:1,teamId:e,rootSessionId:n,mainMemberId:r}}function Re(e){if(!e)return;let t=e.id.trim(),n=e.subject.trim();if(!t||!k(t,256))throw Error(`Native team task id must be between 1 and 256 bytes.`);if(!n||!k(n,x))throw Error(`Native team task subject must be between 1 and ${x} bytes.`);return{id:t,subject:n}}function ze(e){if(e.role===`main`)return e.root.mainMemberId;let t=e.name!==void 0;if(!t&&!e.agent)throw Error(`An intercom member needs a name or an agent to derive one from.`);let n=ge(M(e.name??e.agent??y),t);if(e.runId){let t=M(e.runId).slice(0,8),r=48-t.length-1;return`${n.slice(0,r).replace(S,``)||y}-${t}`}return e.fanoutIndex===void 0?n:he(n,e.fanoutIndex)}function Be(e){let t=ze(e);if(!w(t))throw Error(`A safe native team member id is required.`);let n=pe(),r=j(n),i=Date.now(),a=Re(e.task),o={...e.root,memberId:t,token:n,role:e.role,...e.agent?{agent:e.agent}:{},...e.runId?{runId:e.runId}:{},...e.childIndex===void 0?{}:{childIndex:e.childIndex},...e.parentMemberId?{parentMemberId:e.parentMemberId}:{},...a?{task:a}:{}},s=H(e.root,t);s&&s.tokenHash!==r&&be(I(e.root,t));let{token:c,version:l,...u}=o,d={...u,version:1,tokenHash:r,pid:e.pid??process.pid,active:!0,joinedAt:i};Ae(d),G(e.root,d,i);let f=!1;return{context:o,dispose:()=>{if(f)return;f=!0;let n=H(e.root,t);if(!n||n.tokenHash!==r)return;let i=Date.now();Ae({...n,active:!1,leftAt:i}),G(e.root,n,i)}}}function X(){let e=Y(),n=A(t.SUBAGENT_TEAM_MEMBER_ID_ENV),r=A(t.SUBAGENT_TEAM_MEMBER_TOKEN_ENV);if(!e||!n||!w(n)||!r)return;let i=H(e,n);if(!(!i||i.teamId!==e.teamId||i.rootSessionId!==e.rootSessionId)&&!(i.tokenHash!==j(r)||!i.active))return{...e,memberId:n,token:r,role:i.role,...i.agent?{agent:i.agent}:{},...i.runId?{runId:i.runId}:{},...i.childIndex===void 0?{}:{childIndex:i.childIndex},...i.parentMemberId?{parentMemberId:i.parentMemberId}:{},...i.task?{task:i.task}:{}}}function Z(e,t){let n=H(e,e.memberId);if(!n||n.tokenHash!==j(e.token)||!W(e,n,t))throw Error(`This native team member is no longer active.`);return n}function Ve(e,t,n){let r=t?.trim();if(!r)throw a.invalidRequest(`to is required for intercom send and ask.`,`Provide an explicit recipient.`);let i=q(e,n).filter(t=>t.memberId!==e.memberId),o=M(r),s=i.find(e=>e.memberId===r||e.memberId===o);if(s)return s;let c=r.toLowerCase(),l=i.filter(e=>e.agent?.toLowerCase()===c||e.runId?.toLowerCase()===c||c===v&&e.role===`main`);if(l.length===1)return l[0];throw l.length>1?new a.DoomTeamExpectedError(`recipient_ambiguous`,`Multiple active intercom members match '${r}': ${l.map(e=>e.memberId).join(`, `)}.`,!1,`Retry with one exact member id.`):new a.DoomTeamExpectedError(`recipient_not_found`,`Active intercom member '${r}' was not found.`,!0,`Call intercom({"action":"members"}) and retry with an active member id.`)}function He(e){let t=e?.trim();if(!t)throw a.invalidRequest(`message is required for intercom communication.`,`Provide a nonblank message.`);if(!k(t,b))throw a.invalidRequest(`Intercom message exceeds 64 KiB.`,`Shorten the message and retry.`);return t}function Q(e,t,n){let r=H(e,t);return!!(r&&r.tokenHash===n)}function Ue(e,t,n){let r=I(e,e.memberId),i;try{i=c.readdirSync(r,{withFileTypes:!0})}catch{return{messages:[],foreignFiles:[]}}let a=[],o=[];for(let s of i){if(!s.isFile()||!s.name.endsWith(_)||n?.(s.name))continue;let i=l.join(r,s.name),c=Te(B(i));if(!c){V(i);continue}if(c.teamId!==e.teamId||c.toMemberId!==e.memberId){o.push(s.name);continue}if(c.expiresAt<t||!Q(e,c.fromMemberId,c.senderTokenHash)){V(i);continue}a.push(c)}return{messages:We(a),foreignFiles:o}}function We(e){let t=new Map;for(let n of e){let e=t.get(n.fromMemberId);e?e.push(n):t.set(n.fromMemberId,[n])}let n=[];for(let e of t.values())e.sort((e,t)=>e.seq-t.seq),n.push(e);let r=[];for(;;){let e,t;for(let r of n){let n=r[0];n&&(!t||n.createdAt<t.createdAt||n.createdAt===t.createdAt&&n.fromMemberId<t.fromMemberId)&&(e=r,t=n)}if(!e||!t)break;e.shift(),r.push(t)}return r}function Ge(e){let t=e.role===`main`?v:e.agent??e.memberId,n=e.runId?` [${e.runId}]`:``,r=e.task?`, task ${e.task.id}: ${e.task.subject}`:``;return`- ${e.memberId}: ${t}${n}${r}`}function $(e){return{name:e.memberId,role:e.role,...e.agent?{agent:e.agent}:{},...e.runId?{runId:e.runId}:{},...e.task?{task:e.task}:{}}}function Ke(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Error(`Native team request cancelled.`));return}let i,a=()=>{i&&clearTimeout(i),t?.removeEventListener(`abort`,o)},o=()=>{a(),r(Error(`Native team request cancelled.`))};i=setTimeout(()=>{a(),n()},e),t?.addEventListener(`abort`,o,{once:!0})})}function qe(e,t){let n=H(e,t.fromMemberId),r=`${t.fromMemberId}${n?.agent?` (${n.agent})`:``}`,i=n?.task?`, task ${n.task.id}`:``,a=[`${t.kind===`ask`?`Question`:`Message`} from ${r}${i}.`];return a.push(``,t.message),t.kind===`ask`&&a.push(``,`Reply with ${d}({ action: "reply", requestId: "${t.id}", message: "..." }).`),a.join(`
|
|
2
|
-
`)}function Je(e,t){try{return e.getAllTools().some(e=>e.name===t)}catch{return!1}}var Ye=class{pi;options;context;ownedMembershipDispose;poller;lastHeartbeatAt=0;lastGcAt=0;seenFiles=new
|
|
3
|
-
`):`No active members.`}],details:{members:e.map($)}}}if(o.action===`pending`){let e=Ue(
|
|
4
|
-
`):`No pending native team asks.`}],details:{pending:e.map(e=>({id:e.id,from:e.fromMemberId,message:e.message}))}}}let c=He(o.message);if(o.action===`reply`){let e=this.replyToRequest(
|
|
1
|
+
const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../process/env.cjs"),n=require("../../shared/lruCache.cjs"),r=require("../atomicJson.cjs");require("../../shared/atomicJson.cjs");const i=require("../../shared/errors.cjs"),a=require("../../shared/paths.cjs"),o=require("../../shared/boundedKeySet.cjs"),s=require("../../shared/versioned.cjs");let c=require("node:fs");c=e.__toESM(c,1);let l=require("node:path");l=e.__toESM(l,1);let u=require("node:crypto");const d=`intercom`,f=`subagent.team.message`,p=`subagent.team.reply`,m=`members`,ee=`heartbeats`,h=`inboxes`,g=`replies`,te=`receipts`,ne=`team.json`,_=`.json`,v=`main`,y=`agent`,b=65536,x=4096,re=[`members`,`send`,`ask`,`reply`,`pending`],ie=/^[A-Za-z0-9._-]{1,256}$/,ae=/[^a-z0-9._-]+/g,S=/^[-.]+|[-.]+$/g,oe=`sha256`,C=`delivered`,se=`failed`,ce={oneOf:[...[`members`,`pending`].map(e=>({type:`object`,properties:{action:{const:e}},required:[`action`],additionalProperties:!1})),{type:`object`,properties:{action:{const:`send`},to:{type:`string`},message:{type:`string`}},required:[`action`,`to`,`message`],additionalProperties:!1},{type:`object`,properties:{action:{const:`ask`},to:{type:`string`},message:{type:`string`},timeoutMs:{type:`integer`,minimum:1}},required:[`action`,`to`,`message`],additionalProperties:!1},{type:`object`,properties:{action:{const:`reply`},requestId:{type:`string`},message:{type:`string`}},required:[`action`,`requestId`,`message`],additionalProperties:!1}]};function w(e){return typeof e==`string`&&ie.test(e)}function T(e){return typeof e==`number`&&Number.isInteger(e)}function E(e){return typeof e==`number`&&Number.isFinite(e)}function D(e){return typeof e==`string`&&e.trim().length>0}function O(e){return e===void 0||typeof e==`string`}function le(e){return e===void 0||T(e)}function ue(e){return e===`main`||e===`subagent`}function de(e){return e===`send`||e===`ask`}function k(e,t){return Buffer.byteLength(e,`utf-8`)<=t}function fe(e){return e instanceof Error?e.message:String(e)}function A(e){return process.env[e]?.trim()||void 0}function j(e){return(0,u.createHash)(oe).update(e).digest(`hex`)}function pe(){return(0,u.randomBytes)(32).toString(`base64url`)}function me(e){return`session-${j(e).slice(0,32)}`}function M(e){return e.trim().toLowerCase().replace(ae,`-`).replace(S,``).slice(0,48).replace(S,``)||y}function he(e,t){let n=`-${t+1}`,r=48-n.length;return`${e.slice(0,Math.max(r,0)).replace(S,``)||y}${n}`}function ge(e,t){if(e!==v)return e;if(t)throw Error(`Native team member name '${v}' is reserved for the root session.`);return`main-agent`}function N(e){if(!w(e))throw Error(`Invalid native team id.`);return l.join(a.scopeTeamDir(a.requireCurrentSessionScope()),e)}function P(e,t){if(!w(t))throw Error(`Invalid native team member id.`);return l.join(N(e.teamId),m,`${t}${_}`)}function F(e,t){if(!w(t))throw Error(`Invalid native team member id.`);return l.join(N(e.teamId),ee,`${t}${_}`)}function I(e,t){if(!w(t))throw Error(`Invalid native team member id.`);return l.join(N(e.teamId),h,t)}function L(e){return`${e}${_}`}function R(e,t,n){if(!w(n))throw Error(`Invalid native team message id.`);return l.join(I(e,t),L(n))}function _e(e,t){if(!w(t))throw Error(`Invalid native team request id.`);return l.join(N(e.teamId),g,`${t}${_}`)}function z(e,t,n){if(!w(t)||!w(n))throw Error(`Invalid intercom receipt identity.`);return l.join(N(e.teamId),te,t,`${n}${_}`)}function ve(e,t){return(0,u.createHash)(oe).update(`${e}:${t}`).digest(`hex`)}function ye(e){let t=N(e.teamId);for(let e of[m,ee,h,g,te])c.mkdirSync(l.join(t,e),{recursive:!0,mode:448})}function B(e){try{let t=JSON.parse(c.readFileSync(e,`utf-8`));return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}catch{return}}function V(e){try{return c.rmSync(e,{force:!0}),!0}catch(e){return e.code===`ENOENT`}}function be(e){try{return c.rmSync(e,{recursive:!0,force:!0}),!0}catch{return!1}}function xe(e){if(!(!s.parseVersioned(e,[1]).ok||!e)&&!(!w(e.teamId)||!D(e.rootSessionId)||e.mainMemberId!==v||!E(e.createdAt)||!E(e.updatedAt)))return{version:1,teamId:e.teamId,rootSessionId:e.rootSessionId,mainMemberId:v,createdAt:e.createdAt,updatedAt:e.updatedAt}}function Se(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e;if(!(!D(t.id)||!D(t.subject))&&!(!k(t.id,256)||!k(t.subject,x)))return{id:t.id,subject:t.subject}}function Ce(e){if(!s.parseVersioned(e,[1]).ok||!e||!w(e.teamId)||!D(e.rootSessionId)||!D(e.mainMemberId)||!w(e.memberId)||!ue(e.role)||!D(e.tokenHash)||!T(e.pid)||typeof e.active!=`boolean`||!E(e.joinedAt)||!O(e.agent)||!O(e.runId)||!le(e.childIndex)||!O(e.parentMemberId))return;let t=e.task===void 0?void 0:Se(e.task);if(!(e.task!==void 0&&!t))return{version:1,teamId:e.teamId,rootSessionId:e.rootSessionId,mainMemberId:e.mainMemberId,memberId:e.memberId,role:e.role,tokenHash:e.tokenHash,pid:e.pid,active:e.active,joinedAt:e.joinedAt,...E(e.leftAt)?{leftAt:e.leftAt}:{},...e.agent===void 0?{}:{agent:e.agent},...e.runId===void 0?{}:{runId:e.runId},...e.childIndex===void 0?{}:{childIndex:e.childIndex},...e.parentMemberId===void 0?{}:{parentMemberId:e.parentMemberId},...t?{task:t}:{}}}function we(e){if(!(!s.parseVersioned(e,[1]).ok||!e)&&!(!w(e.memberId)||!D(e.tokenHash)||!T(e.pid)||!E(e.heartbeatAt)))return{version:1,memberId:e.memberId,tokenHash:e.tokenHash,pid:e.pid,heartbeatAt:e.heartbeatAt}}function Te(e){if(!(!s.parseVersioned(e,[2]).ok||!e)&&!(e.type!==f||!w(e.id)||!w(e.teamId)||!de(e.kind)||!w(e.fromMemberId)||!w(e.toMemberId)||!D(e.senderTokenHash)||!T(e.seq)||typeof e.message!=`string`||!k(e.message,b)||!E(e.createdAt)||!E(e.expiresAt)))return{type:f,version:2,id:e.id,teamId:e.teamId,kind:e.kind,fromMemberId:e.fromMemberId,toMemberId:e.toMemberId,senderTokenHash:e.senderTokenHash,seq:e.seq,message:e.message,createdAt:e.createdAt,expiresAt:e.expiresAt}}function Ee(e){if(!(!s.parseVersioned(e,[2]).ok||!e)&&!(e.type!==p||!w(e.requestId)||!w(e.teamId)||!w(e.fromMemberId)||!w(e.toMemberId)||!D(e.senderTokenHash)||typeof e.message!=`string`||!k(e.message,b)||!E(e.createdAt)))return{type:p,version:2,requestId:e.requestId,teamId:e.teamId,fromMemberId:e.fromMemberId,toMemberId:e.toMemberId,senderTokenHash:e.senderTokenHash,message:e.message,createdAt:e.createdAt}}function De(e){if(!e||typeof e!=`object`||Array.isArray(e))throw i.invalidRequest(`Intercom params must be an object.`,`Use one documented intercom action shape.`);let t=e,n=re.find(e=>e===t.action);if(!n)throw new i.DoomTeamExpectedError(`unsupported_operation`,`Unsupported intercom action: ${String(t.action)}.`,!1,`Use members, send, ask, pending, or reply.`);if(!O(t.to)||!O(t.message)||!O(t.requestId))throw i.invalidRequest(`Intercom to, message and requestId values must be strings.`,`Correct the action fields and retry.`);if(t.timeoutMs!==void 0&&(!T(t.timeoutMs)||t.timeoutMs<1))throw i.invalidRequest(`Intercom timeoutMs must be a positive integer.`,`Correct timeoutMs and retry.`);let r=new Set(n===`members`||n===`pending`?[`action`]:n===`reply`?[`action`,`requestId`,`message`]:n===`ask`?[`action`,`to`,`message`,`timeoutMs`]:[`action`,`to`,`message`]),a=Object.keys(t).filter(e=>!r.has(e));if(a.length)throw i.invalidRequest(`Intercom action '${n}' does not accept: ${a.join(`, `)}.`,`Remove unknown fields and retry.`);return{action:n,...t.to===void 0?{}:{to:t.to},...t.message===void 0?{}:{message:t.message},...t.requestId===void 0?{}:{requestId:t.requestId},...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}}}function H(e,t){return Ce(B(P(e,t)))}function U(e,t){let n=we(B(F(e,t.memberId)));if(!(!n||n.memberId!==t.memberId||n.tokenHash!==t.tokenHash))return n}function Oe(e){if(e===process.pid)return!0;try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function ke(e,t){return U(e,t)?.heartbeatAt??t.leftAt??t.joinedAt}function W(e,t,n){return t.active&&Oe(t.pid)&&n-ke(e,t)<=3e4}function Ae(e){c.mkdirSync(I(e,e.memberId),{recursive:!0,mode:448}),r.writePrivateAtomicJson(P(e,e.memberId),e)}function G(e,t,n){let i={version:1,memberId:t.memberId,tokenHash:t.tokenHash,pid:t.pid,heartbeatAt:n};r.writePrivateAtomicJson(F(e,t.memberId),i)}function K(e){let t=l.join(N(e.teamId),m),n;try{n=c.readdirSync(t,{withFileTypes:!0})}catch{return[]}return n.filter(e=>e.isFile()&&e.name.endsWith(_)).map(e=>Ce(B(l.join(t,e.name)))).filter(e=>!!e).filter(t=>t.teamId===e.teamId&&t.rootSessionId===e.rootSessionId)}function q(e,t){return K(e).filter(n=>W(e,n,t)).sort((e,t)=>e.joinedAt-t.joinedAt||e.memberId.localeCompare(t.memberId))}function je(e=Date.now()){let t=Y();if(t)return{members:q(t,e).map($)}}function Me(e,t,n){let r=0;for(let i of K(e))i.memberId!==t&&(W(e,i,n)||n-ke(e,i)<=33e4||(be(I(e,i.memberId)),V(F(e,i.memberId)),V(P(e,i.memberId)),r+=1));return r}function Ne(e){let t=e.trim();if(!t)throw Error(`A root session id is required for native team communication.`);let n={version:1,teamId:me(t),rootSessionId:t,mainMemberId:v};ye(n);let i=l.join(N(n.teamId),ne),a=xe(B(i));if(a&&a.rootSessionId!==t)throw Error(`Native team identity collision detected.`);let o=Date.now(),s={...n,createdAt:a?.createdAt??o,updatedAt:o};return r.writePrivateAtomicJson(i,s),n}function J(e){return{[t.SUBAGENT_TEAM_ID_ENV]:e.teamId,[t.SUBAGENT_TEAM_ROOT_SESSION_ENV]:e.rootSessionId,[t.SUBAGENT_TEAM_MAIN_MEMBER_ENV]:e.mainMemberId}}function Pe(e){return{...J(e),[t.SUBAGENT_TEAM_MEMBER_ID_ENV]:e.memberId,[t.SUBAGENT_TEAM_MEMBER_TOKEN_ENV]:e.token}}function Fe(){return{[t.SUBAGENT_TEAM_MEMBER_ID_ENV]:void 0,[t.SUBAGENT_TEAM_MEMBER_TOKEN_ENV]:void 0}}function Ie(e){Object.assign(process.env,J(e))}function Le(e){e&&process.env.PI_SUBAGENT_TEAM_ID!==e.teamId||(delete process.env[t.SUBAGENT_TEAM_ID_ENV],delete process.env[t.SUBAGENT_TEAM_ROOT_SESSION_ENV],delete process.env[t.SUBAGENT_TEAM_MAIN_MEMBER_ENV])}function Y(){let e=A(t.SUBAGENT_TEAM_ID_ENV),n=A(t.SUBAGENT_TEAM_ROOT_SESSION_ENV),r=A(t.SUBAGENT_TEAM_MAIN_MEMBER_ENV);if(!e||!w(e)||!n||r!==v||e!==me(n))return;let i=xe(B(l.join(N(e),ne)));if(!(!i||i.rootSessionId!==n||i.teamId!==e))return{version:1,teamId:e,rootSessionId:n,mainMemberId:r}}function Re(e){if(!e)return;let t=e.id.trim(),n=e.subject.trim();if(!t||!k(t,256))throw Error(`Native team task id must be between 1 and 256 bytes.`);if(!n||!k(n,x))throw Error(`Native team task subject must be between 1 and ${x} bytes.`);return{id:t,subject:n}}function ze(e){if(e.role===`main`)return e.root.mainMemberId;let t=e.name!==void 0;if(!t&&!e.agent)throw Error(`An intercom member needs a name or an agent to derive one from.`);let n=ge(M(e.name??e.agent??y),t);if(e.runId){let t=M(e.runId).slice(0,8),r=48-t.length-1;return`${n.slice(0,r).replace(S,``)||y}-${t}`}return e.fanoutIndex===void 0?n:he(n,e.fanoutIndex)}function Be(e){let t=ze(e);if(!w(t))throw Error(`A safe native team member id is required.`);let n=pe(),r=j(n),i=Date.now(),a=Re(e.task),o={...e.root,memberId:t,token:n,role:e.role,...e.agent?{agent:e.agent}:{},...e.runId?{runId:e.runId}:{},...e.childIndex===void 0?{}:{childIndex:e.childIndex},...e.parentMemberId?{parentMemberId:e.parentMemberId}:{},...a?{task:a}:{}},s=H(e.root,t);s&&s.tokenHash!==r&&be(I(e.root,t));let{token:c,version:l,...u}=o,d={...u,version:1,tokenHash:r,pid:e.pid??process.pid,active:!0,joinedAt:i};Ae(d),G(e.root,d,i);let f=!1;return{context:o,dispose:()=>{if(f)return;f=!0;let n=H(e.root,t);if(!n||n.tokenHash!==r)return;let i=Date.now();Ae({...n,active:!1,leftAt:i}),G(e.root,n,i)}}}function X(){let e=Y(),n=A(t.SUBAGENT_TEAM_MEMBER_ID_ENV),r=A(t.SUBAGENT_TEAM_MEMBER_TOKEN_ENV);if(!e||!n||!w(n)||!r)return;let i=H(e,n);if(!(!i||i.teamId!==e.teamId||i.rootSessionId!==e.rootSessionId)&&!(i.tokenHash!==j(r)||!i.active))return{...e,memberId:n,token:r,role:i.role,...i.agent?{agent:i.agent}:{},...i.runId?{runId:i.runId}:{},...i.childIndex===void 0?{}:{childIndex:i.childIndex},...i.parentMemberId?{parentMemberId:i.parentMemberId}:{},...i.task?{task:i.task}:{}}}function Z(e,t){let n=H(e,e.memberId);if(!n||n.tokenHash!==j(e.token)||!W(e,n,t))throw Error(`This native team member is no longer active.`);return n}function Ve(e,t,n){let r=t?.trim();if(!r)throw i.invalidRequest(`to is required for intercom send and ask.`,`Provide an explicit recipient.`);let a=q(e,n).filter(t=>t.memberId!==e.memberId),o=M(r),s=a.find(e=>e.memberId===r||e.memberId===o);if(s)return s;let c=r.toLowerCase(),l=a.filter(e=>e.agent?.toLowerCase()===c||e.runId?.toLowerCase()===c||c===v&&e.role===`main`);if(l.length===1)return l[0];throw l.length>1?new i.DoomTeamExpectedError(`recipient_ambiguous`,`Multiple active intercom members match '${r}': ${l.map(e=>e.memberId).join(`, `)}.`,!1,`Retry with one exact member id.`):new i.DoomTeamExpectedError(`recipient_not_found`,`Active intercom member '${r}' was not found.`,!0,`Call intercom({"action":"members"}) and retry with an active member id.`)}function He(e){let t=e?.trim();if(!t)throw i.invalidRequest(`message is required for intercom communication.`,`Provide a nonblank message.`);if(!k(t,b))throw i.invalidRequest(`Intercom message exceeds 64 KiB.`,`Shorten the message and retry.`);return t}function Q(e,t,n){let r=H(e,t);return!!(r&&r.tokenHash===n)}function Ue(e,t,n){let r=I(e,e.memberId),i;try{i=c.readdirSync(r,{withFileTypes:!0})}catch{return{messages:[],foreignFiles:[]}}let a=[],o=[];for(let s of i){if(!s.isFile()||!s.name.endsWith(_)||n?.(s.name))continue;let i=l.join(r,s.name),c=Te(B(i));if(!c){V(i);continue}if(c.teamId!==e.teamId||c.toMemberId!==e.memberId){o.push(s.name);continue}if(c.expiresAt<t||!Q(e,c.fromMemberId,c.senderTokenHash)){V(i);continue}a.push(c)}return{messages:We(a),foreignFiles:o}}function We(e){let t=new Map;for(let n of e){let e=t.get(n.fromMemberId);e?e.push(n):t.set(n.fromMemberId,[n])}let n=[];for(let e of t.values())e.sort((e,t)=>e.seq-t.seq),n.push(e);let r=[];for(;;){let e,t;for(let r of n){let n=r[0];n&&(!t||n.createdAt<t.createdAt||n.createdAt===t.createdAt&&n.fromMemberId<t.fromMemberId)&&(e=r,t=n)}if(!e||!t)break;e.shift(),r.push(t)}return r}function Ge(e){let t=e.role===`main`?v:e.agent??e.memberId,n=e.runId?` [${e.runId}]`:``,r=e.task?`, task ${e.task.id}: ${e.task.subject}`:``;return`- ${e.memberId}: ${t}${n}${r}`}function $(e){return{name:e.memberId,role:e.role,...e.agent?{agent:e.agent}:{},...e.runId?{runId:e.runId}:{},...e.task?{task:e.task}:{}}}function Ke(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Error(`Native team request cancelled.`));return}let i,a=()=>{i&&clearTimeout(i),t?.removeEventListener(`abort`,o)},o=()=>{a(),r(Error(`Native team request cancelled.`))};i=setTimeout(()=>{a(),n()},e),t?.addEventListener(`abort`,o,{once:!0})})}function qe(e,t){let n=H(e,t.fromMemberId),r=`${t.fromMemberId}${n?.agent?` (${n.agent})`:``}`,i=n?.task?`, task ${n.task.id}`:``,a=[`${t.kind===`ask`?`Question`:`Message`} from ${r}${i}.`];return a.push(``,t.message),t.kind===`ask`&&a.push(``,`Reply with ${d}({ action: "reply", requestId: "${t.id}", message: "..." }).`),a.join(`
|
|
2
|
+
`)}function Je(e,t){try{return e.getAllTools().some(e=>e.name===t)}catch{return!1}}var Ye=class{pi;options;context;ownedMembershipDispose;poller;lastHeartbeatAt=0;lastGcAt=0;seenFiles=new o.BoundedKeySet(1024);deliveryAttempts=new n.LruCache(256);undeliverableMessages=[];outboundSeq=0;constructor(e,t){if(this.pi=e,this.options=t,Je(e,`intercom`))throw Error(`[tool_conflict] A foreign '${d}' tool is already registered. Recovery: disable the competing extension and reload Doom Team.`);e.registerTool(this.buildTool())}current(){return this.context}undeliverable(){return this.undeliverableMessages}bindMainSession(e){let t=Ne(e);Ie(t);let n=Be({root:t,role:`main`});return this.startBinding(n.context,n.dispose)}bindChildFromEnvironment(){let e=X();if(e)return this.context?.memberId===e.memberId&&this.context.token===e.token?this.context:this.startBinding(e)}dispose(){let e=this.context;this.stopBinding(),e?.role===`main`&&Le(e)}startBinding(e,t){return this.stopBinding(),this.context=e,this.ownedMembershipDispose=t,this.poll(),this.poller=setInterval(()=>{this.poll()},this.options.pollIntervalMs),this.poller.unref?.(),e}stopBinding(){this.poller&&clearInterval(this.poller),this.poller=void 0,this.ownedMembershipDispose?.(),this.ownedMembershipDispose=void 0,this.seenFiles.clear(),this.deliveryAttempts.clear(),this.lastHeartbeatAt=0,this.lastGcAt=0,this.outboundSeq=0,this.context=void 0}poll(){let e=this.context;if(!e)return;let t=this.options.now();this.heartbeat(e,t),this.collectGarbageIfDue(e,t);let n=Ue(e,t,e=>this.seenFiles.has(e));for(let e of n.foreignFiles)this.seenFiles.add(e);for(let t of n.messages)this.deliverOnce(e,t)}deliverOnce(e,t){let n=L(t.id);try{this.deliver(e,t)}catch(r){let i=(this.deliveryAttempts.get(n)??0)+1;if(i<this.options.maxDeliveryAttempts){this.deliveryAttempts.set(n,i);return}this.deliveryAttempts.delete(n),this.seenFiles.add(n),this.reportUndeliverable(e,t,i,r);return}this.seenFiles.add(n),this.deliveryAttempts.delete(n),r.writePrivateAtomicJson(z(e,t.fromMemberId,t.id),{version:1,messageId:t.id,state:C,deliveredAt:this.options.now()}),t.kind===`send`&&V(R(e,e.memberId,t.id))}deliver(e,t){let n=qe(e,t);if(e.role===`subagent`){this.pi.sendUserMessage(n,{deliverAs:`steer`});return}this.pi.sendMessage({customType:`intercom_message`,content:n,display:!0,details:{id:t.id,kind:t.kind,from:t.fromMemberId,to:t.toMemberId,seq:t.seq}},{triggerTurn:!0,deliverAs:`steer`})}reportUndeliverable(e,t,n,i){let a={messageId:t.id,fromMemberId:t.fromMemberId,kind:t.kind,attempts:n,reason:fe(i),at:this.options.now()};for(this.undeliverableMessages.push(a),r.writePrivateAtomicJson(z(e,t.fromMemberId,t.id),{version:1,messageId:t.id,state:se,reason:a.reason,failedAt:a.at});this.undeliverableMessages.length>32;)this.undeliverableMessages.shift();try{return this.pi.sendMessage({customType:`intercom_undeliverable`,content:`Native team message ${t.id} from ${t.fromMemberId} could not be delivered after ${n} attempts: ${a.reason}`,display:!0,details:{...a}},{triggerTurn:!0,deliverAs:`steer`}),!0}catch{return!1}}heartbeat(e,t){if(t-this.lastHeartbeatAt<this.options.heartbeatIntervalMs)return;let n=H(e,e.memberId);!n||n.tokenHash!==j(e.token)||!n.active||(this.lastHeartbeatAt=t,G(e,n,t))}collectGarbageIfDue(e,t){if(!(t-this.lastGcAt<this.options.gcIntervalMs)){this.lastGcAt=t;try{Me(e,e.memberId,t)}catch(n){for(this.undeliverableMessages.push({messageId:``,fromMemberId:e.memberId,kind:`send`,attempts:0,reason:`Native team directory sweep failed: ${fe(n)}`,at:t});this.undeliverableMessages.length>32;)this.undeliverableMessages.shift()}}}nextSeq(){return this.outboundSeq+=1,this.outboundSeq}queueMessage(e,t,n,i,a,o){if(Z(e,a),!W(e,t,a))throw Error(`Native team member '${t.memberId}' is no longer active.`);let s={type:f,version:2,id:o,teamId:e.teamId,kind:n,fromMemberId:e.memberId,toMemberId:t.memberId,senderTokenHash:j(e.token),seq:this.nextSeq(),message:i,createdAt:a,expiresAt:a+864e5};return c.mkdirSync(I(e,t.memberId),{recursive:!0,mode:448}),r.writePrivateAtomicJson(R(e,t.memberId,s.id),s),s}replyToRequest(e,t,n,a){if(!t||!w(t))throw Error(`requestId must be a valid intercom request id.`);Z(e,a);let o=R(e,e.memberId,t),s=Te(B(o));if(!s||s.kind!==`ask`||s.teamId!==e.teamId||s.toMemberId!==e.memberId||!Q(e,s.fromMemberId,s.senderTokenHash))throw new i.DoomTeamExpectedError(`recipient_not_found`,`No pending intercom ask matches requestId '${t}'.`,!1,`Call intercom({"action":"pending"}) and retry with an exact requestId.`);let c={type:p,version:2,requestId:t,teamId:e.teamId,fromMemberId:e.memberId,toMemberId:s.fromMemberId,senderTokenHash:j(e.token),message:n,createdAt:a};return r.writePrivateAtomicJson(_e(e,t),c),V(o),this.seenFiles.delete(L(t)),c}async waitForReply(e,t,n,r,a){let o=_e(e,n.id),s=this.options.now()+(a??this.options.askTimeoutMs);for(;this.options.now()<=s;){if(r?.aborted)throw Error(`Native team request cancelled.`);let a=Ee(B(o));if(a&&a.teamId===e.teamId&&a.requestId===n.id&&a.fromMemberId===t.memberId&&a.toMemberId===e.memberId&&Q(e,a.fromMemberId,a.senderTokenHash))return V(o),a;let s=H(e,t.memberId);if(!s||!W(e,s,this.options.now()))throw new i.DoomTeamExpectedError(`communication_unavailable`,`Intercom member '${t.memberId}' became unreachable before replying.`,!0,`Call intercom({"action":"members"}) and decide whether to retry with an active member.`);await Ke(this.options.replyPollIntervalMs,r)}throw new i.DoomTeamExpectedError(`reply_timeout`,`Timed out waiting for intercom member '${t.memberId}' to reply.`,!0,`Check member status before deciding whether to ask again.`)}buildTool(){return{name:d,label:`Intercom`,description:`Communicate with active agents in this root session. Use members, send, ask, pending, or reply. The stable root identity is main.`,promptGuidelines:[`Send only new progress, blockers, or decisions. Do not repeat the task brief, sender task, or delegation instructions because the recipient already has them.`],parameters:ce,execute:async(e,t,n,r)=>{let a=this.context;if(!a)throw new i.DoomTeamExpectedError(`communication_unavailable`,`Intercom is not active for this session.`,!0,`Wait for session startup or reload Doom Team.`);let o=De(t),s=this.options.now();if(Z(a,s),o.action===`members`){let e=q(a,s);return{content:[{type:`text`,text:e.length?e.map(Ge).join(`
|
|
3
|
+
`):`No active members.`}],details:{members:e.map($)}}}if(o.action===`pending`){let e=Ue(a,s).messages.filter(e=>e.kind===`ask`),t=e.map(e=>`- ${e.id}: from ${e.fromMemberId}. Reply with ${d}({ action: "reply", requestId: "${e.id}", message: "..." }).`);return{content:[{type:`text`,text:t.length?t.join(`
|
|
4
|
+
`):`No pending native team asks.`}],details:{pending:e.map(e=>({id:e.id,from:e.fromMemberId,message:e.message}))}}}let c=He(o.message);if(o.action===`reply`){let e=this.replyToRequest(a,o.requestId,c,s);return{content:[{type:`text`,text:`Replied to native team request ${e.requestId}.`}],details:{requestId:e.requestId,to:e.toMemberId}}}let l=Ve(a,o.to,s);o.action===`ask`&&r?.({content:[{type:`text`,text:`Waiting for ${l.memberId} to reply...`}],details:{action:`ask`,to:l.memberId,partial:!0}});let u=ve(a.memberId,e),f=B(z(a,a.memberId,u));if(f?.state===se){let e=typeof f.reason==`string`?f.reason:`unknown error`;throw new i.DoomTeamExpectedError(`delivery_unconfirmed`,`Intercom message ${u} failed: ${e}`,!1,`Call intercom({"action":"members"}) and do not resend automatically.`)}if(o.action===`send`&&f?.state===C)return{content:[{type:`text`,text:`Message ${u} delivered to ${l.memberId}.`}],details:{state:C,delivered:!0,messageId:u,to:l.memberId}};let p=this.queueMessage(a,l,o.action,c,s,u);if(o.action===`send`)return{content:[{type:`text`,text:`Message ${p.id} queued for ${l.memberId}; delivery is not yet confirmed. Do not resend.`}],details:{state:`queued`,delivered:!1,messageId:p.id,to:l.memberId,seq:p.seq}};try{let e=await this.waitForReply(a,l,p,n,o.timeoutMs);return{content:[{type:`text`,text:`Reply from ${l.memberId}:\n${e.message}`}],details:{requestId:p.id,from:l.memberId,reply:e.message}}}finally{V(R(a,l.memberId,p.id))}}}}},Xe=class{runtimes=new WeakMap;pollIntervalMs=250;replyPollIntervalMs=250;heartbeatIntervalMs=5e3;gcIntervalMs=6e4;askTimeoutMs=6e5;maxDeliveryAttempts=5;now(){return Date.now()}createRuntime(e){let t=this.runtimes.get(e);if(t)return t;let n=new Ye(e,{pollIntervalMs:this.pollIntervalMs,replyPollIntervalMs:this.replyPollIntervalMs,heartbeatIntervalMs:this.heartbeatIntervalMs,gcIntervalMs:this.gcIntervalMs,askTimeoutMs:this.askTimeoutMs,maxDeliveryAttempts:this.maxDeliveryAttempts,now:()=>this.now()});return this.runtimes.set(e,n),e.on(`session_shutdown`,()=>{this.runtimes.get(e)?.dispose()}),n}registerClient(e){a.tryCurrentSessionScope()&&X()&&this.createRuntime(e).bindChildFromEnvironment()}};exports.HEARTBEAT_STALE_MS=3e4,exports.NATIVE_TEAM_TOOL_NAME=d,exports.NativeTeamChannelService=Xe,exports.applyNativeTeamRootEnvironment=Ie,exports.clearNativeTeamMemberEnvironment=Fe,exports.clearNativeTeamRootEnvironment=Le,exports.ensureNativeTeamRoot=Ne,exports.listMemberRecords=K,exports.nativeTeamMemberEnvironment=Pe,exports.nativeTeamRootEnvironment=J,exports.normalizeTeamMemberName=M,exports.processAlive=Oe,exports.readActiveNativeTeamSnapshot=je,exports.readHeartbeat=U,exports.readMember=H,exports.readNativeTeamMemberFromEnvironment=X,exports.readNativeTeamRootFromEnvironment=Y,exports.registerNativeTeamMember=Be,exports.teamDir=N;
|
|
5
5
|
//# sourceMappingURL=nativeTeamChannel.cjs.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{__esmMin as e}from"../../../_virtual/_rolldown/runtime.mjs";import{SUBAGENT_TEAM_ID_ENV as t,SUBAGENT_TEAM_MAIN_MEMBER_ENV as n,SUBAGENT_TEAM_MEMBER_ID_ENV as r,SUBAGENT_TEAM_MEMBER_TOKEN_ENV as i,SUBAGENT_TEAM_ROOT_SESSION_ENV as a,init_env as o}from"../process/env.mjs";import{LruCache as s,init_lruCache as c}from"../../shared/lruCache.mjs";import{writePrivateAtomicJson as l}from"../atomicJson.mjs";import{init_atomicJson as u}from"../../shared/atomicJson.mjs";import{BoundedKeySet as d,init_boundedKeySet as ee}from"../../shared/boundedKeySet.mjs";import{DoomTeamExpectedError as f,init_errors as te,invalidRequest as p}from"../../shared/errors.mjs";import{init_paths as ne,requireCurrentSessionScope as re,scopeTeamDir as ie,tryCurrentSessionScope as ae}from"../../shared/paths.mjs";import{init_versioned as oe,parseVersioned as m}from"../../shared/versioned.mjs";import*as h from"node:fs";import*as g from"node:path";import{createHash as se,randomBytes as ce}from"node:crypto";function _(e){return typeof e==`string`&&At.test(e)}function v(e){return typeof e==`number`&&Number.isInteger(e)}function y(e){return typeof e==`number`&&Number.isFinite(e)}function b(e){return typeof e==`string`&&e.trim().length>0}function x(e){return e===void 0||typeof e==`string`}function le(e){return e===void 0||v(e)}function ue(e){return e===`main`||e===`subagent`}function de(e){return e===`send`||e===`ask`}function S(e,t){return Buffer.byteLength(e,`utf-8`)<=t}function fe(e){return e instanceof Error?e.message:String(e)}function C(e){return process.env[e]?.trim()||void 0}function w(e){return se(Q).update(e).digest(`hex`)}function pe(){return ce(Nt).toString(`base64url`)}function me(e){return`${It}${w(e).slice(0,Mt)}`}function T(e){return e.trim().toLowerCase().replace(jt,ht).replace(Z,``).slice(0,H).replace(Z,``)||V}function he(e,t){let n=`${ht}${t+gt}`,r=H-n.length;return`${e.slice(0,Math.max(r,0)).replace(Z,``)||V}${n}`}function ge(e,t){if(e!==B)return e;if(t)throw Error(`Native team member name '${B}' is reserved for the root session.`);return mt}function E(e){if(!_(e))throw Error(`Invalid native team id.`);return g.join(ie(re()),e)}function _e(e,t){if(!_(t))throw Error(`Invalid native team member id.`);return g.join(E(e.teamId),I,`${t}${z}`)}function ve(e,t){if(!_(t))throw Error(`Invalid native team member id.`);return g.join(E(e.teamId),dt,`${t}${z}`)}function D(e,t){if(!_(t))throw Error(`Invalid native team member id.`);return g.join(E(e.teamId),ft,t)}function ye(e){return`${e}${z}`}function O(e,t,n){if(!_(n))throw Error(`Invalid native team message id.`);return g.join(D(e,t),ye(n))}function be(e,t){if(!_(t))throw Error(`Invalid native team request id.`);return g.join(E(e.teamId),pt,`${t}${z}`)}function xe(e,t,n){if(!_(t)||!_(n))throw Error(`Invalid intercom receipt identity.`);return g.join(E(e.teamId),L,t,`${n}${z}`)}function Se(e,t){return se(Q).update(`${e}:${t}`).digest(`hex`)}function Ce(e){let t=E(e.teamId);for(let e of[I,dt,ft,pt,L])h.mkdirSync(g.join(t,e),{recursive:!0,mode:U})}function k(e){try{let t=JSON.parse(h.readFileSync(e,`utf-8`));return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}catch{return}}function A(e){try{return h.rmSync(e,{force:!0}),!0}catch(e){return e.code===`ENOENT`}}function we(e){try{return h.rmSync(e,{recursive:!0,force:!0}),!0}catch{return!1}}function Te(e){if(!(!m(e,[q]).ok||!e)&&!(!_(e.teamId)||!b(e.rootSessionId)||e.mainMemberId!==B||!y(e.createdAt)||!y(e.updatedAt)))return{version:q,teamId:e.teamId,rootSessionId:e.rootSessionId,mainMemberId:B,createdAt:e.createdAt,updatedAt:e.updatedAt}}function Ee(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e;if(!(!b(t.id)||!b(t.subject))&&!(!S(t.id,G)||!S(t.subject,K)))return{id:t.id,subject:t.subject}}function De(e){if(!m(e,[J]).ok||!e||!_(e.teamId)||!b(e.rootSessionId)||!b(e.mainMemberId)||!_(e.memberId)||!ue(e.role)||!b(e.tokenHash)||!v(e.pid)||typeof e.active!=`boolean`||!y(e.joinedAt)||!x(e.agent)||!x(e.runId)||!le(e.childIndex)||!x(e.parentMemberId))return;let t=e.task===void 0?void 0:Ee(e.task);if(!(e.task!==void 0&&!t))return{version:J,teamId:e.teamId,rootSessionId:e.rootSessionId,mainMemberId:e.mainMemberId,memberId:e.memberId,role:e.role,tokenHash:e.tokenHash,pid:e.pid,active:e.active,joinedAt:e.joinedAt,...y(e.leftAt)?{leftAt:e.leftAt}:{},...e.agent===void 0?{}:{agent:e.agent},...e.runId===void 0?{}:{runId:e.runId},...e.childIndex===void 0?{}:{childIndex:e.childIndex},...e.parentMemberId===void 0?{}:{parentMemberId:e.parentMemberId},...t?{task:t}:{}}}function Oe(e){if(!(!m(e,[Y]).ok||!e)&&!(!_(e.memberId)||!b(e.tokenHash)||!v(e.pid)||!y(e.heartbeatAt)))return{version:Y,memberId:e.memberId,tokenHash:e.tokenHash,pid:e.pid,heartbeatAt:e.heartbeatAt}}function ke(e){if(!(!m(e,[X]).ok||!e)&&!(e.type!==P||!_(e.id)||!_(e.teamId)||!de(e.kind)||!_(e.fromMemberId)||!_(e.toMemberId)||!b(e.senderTokenHash)||!v(e.seq)||typeof e.message!=`string`||!S(e.message,W)||!y(e.createdAt)||!y(e.expiresAt)))return{type:P,version:X,id:e.id,teamId:e.teamId,kind:e.kind,fromMemberId:e.fromMemberId,toMemberId:e.toMemberId,senderTokenHash:e.senderTokenHash,seq:e.seq,message:e.message,createdAt:e.createdAt,expiresAt:e.expiresAt}}function Ae(e){if(!(!m(e,[X]).ok||!e)&&!(e.type!==F||!_(e.requestId)||!_(e.teamId)||!_(e.fromMemberId)||!_(e.toMemberId)||!b(e.senderTokenHash)||typeof e.message!=`string`||!S(e.message,W)||!y(e.createdAt)))return{type:F,version:X,requestId:e.requestId,teamId:e.teamId,fromMemberId:e.fromMemberId,toMemberId:e.toMemberId,senderTokenHash:e.senderTokenHash,message:e.message,createdAt:e.createdAt}}function je(e){if(!e||typeof e!=`object`||Array.isArray(e))throw p(`Intercom params must be an object.`,`Use one documented intercom action shape.`);let t=e,n=kt.find(e=>e===t.action);if(!n)throw new f(`unsupported_operation`,`Unsupported intercom action: ${String(t.action)}.`,!1,`Use members, send, ask, pending, or reply.`);if(!x(t.to)||!x(t.message)||!x(t.requestId))throw p(`Intercom to, message and requestId values must be strings.`,`Correct the action fields and retry.`);if(t.timeoutMs!==void 0&&(!v(t.timeoutMs)||t.timeoutMs<1))throw p(`Intercom timeoutMs must be a positive integer.`,`Correct timeoutMs and retry.`);let r=new Set(n===`members`||n===`pending`?[`action`]:n===`reply`?[`action`,`requestId`,`message`]:n===`ask`?[`action`,`to`,`message`,`timeoutMs`]:[`action`,`to`,`message`]),i=Object.keys(t).filter(e=>!r.has(e));if(i.length)throw p(`Intercom action '${n}' does not accept: ${i.join(`, `)}.`,`Remove unknown fields and retry.`);return{action:n,...t.to===void 0?{}:{to:t.to},...t.message===void 0?{}:{message:t.message},...t.requestId===void 0?{}:{requestId:t.requestId},...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}}}function j(e,t){return De(k(_e(e,t)))}function Me(e,t){let n=Oe(k(ve(e,t.memberId)));if(!(!n||n.memberId!==t.memberId||n.tokenHash!==t.tokenHash))return n}function Ne(e){if(e===process.pid)return!0;try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function Pe(e,t){return Me(e,t)?.heartbeatAt??t.leftAt??t.joinedAt}function M(e,t,n){return t.active&&Ne(t.pid)&&n-Pe(e,t)<=3e4}function Fe(e){h.mkdirSync(D(e,e.memberId),{recursive:!0,mode:U}),l(_e(e,e.memberId),e)}function Ie(e,t,n){let r={version:Y,memberId:t.memberId,tokenHash:t.tokenHash,pid:t.pid,heartbeatAt:n};l(ve(e,t.memberId),r)}function Le(e){let t=g.join(E(e.teamId),I),n;try{n=h.readdirSync(t,{withFileTypes:!0})}catch{return[]}return n.filter(e=>e.isFile()&&e.name.endsWith(z)).map(e=>De(k(g.join(t,e.name)))).filter(e=>!!e).filter(t=>t.teamId===e.teamId&&t.rootSessionId===e.rootSessionId)}function Re(e,t){return Le(e).filter(n=>M(e,n,t)).sort((e,t)=>e.joinedAt-t.joinedAt||e.memberId.localeCompare(t.memberId))}function ze(e=Date.now()){let t=qe();if(t)return{members:Re(t,e).map(at)}}function Be(e,t,n){let r=0;for(let i of Le(e))i.memberId!==t&&(M(e,i,n)||n-Pe(e,i)<=33e4||(we(D(e,i.memberId)),A(ve(e,i.memberId)),A(_e(e,i.memberId)),r+=1));return r}function Ve(e){let t=e.trim();if(!t)throw Error(`A root session id is required for native team communication.`);let n={version:q,teamId:me(t),rootSessionId:t,mainMemberId:B};Ce(n);let r=g.join(E(n.teamId),R),i=Te(k(r));if(i&&i.rootSessionId!==t)throw Error(`Native team identity collision detected.`);let a=Date.now(),o={...n,createdAt:i?.createdAt??a,updatedAt:a};return l(r,o),n}function He(e){return{[t]:e.teamId,[a]:e.rootSessionId,[n]:e.mainMemberId}}function Ue(e){return{...He(e),[r]:e.memberId,[i]:e.token}}function We(){return{[r]:void 0,[i]:void 0}}function Ge(e){Object.assign(process.env,He(e))}function Ke(e){e&&process.env.PI_SUBAGENT_TEAM_ID!==e.teamId||(delete process.env[t],delete process.env[a],delete process.env[n])}function qe(){let e=C(t),r=C(a),i=C(n);if(!e||!_(e)||!r||i!==B||e!==me(r))return;let o=Te(k(g.join(E(e),R)));if(!(!o||o.rootSessionId!==r||o.teamId!==e))return{version:q,teamId:e,rootSessionId:r,mainMemberId:i}}function Je(e){if(!e)return;let t=e.id.trim(),n=e.subject.trim();if(!t||!S(t,G))throw Error(`Native team task id must be between 1 and ${G} bytes.`);if(!n||!S(n,K))throw Error(`Native team task subject must be between 1 and ${K} bytes.`);return{id:t,subject:n}}function Ye(e){if(e.role===`main`)return e.root.mainMemberId;let t=e.name!==void 0;if(!t&&!e.agent)throw Error(`An intercom member needs a name or an agent to derive one from.`);let n=ge(T(e.name??e.agent??V),t);if(e.runId){let t=T(e.runId).slice(0,8),r=H-t.length-1;return`${n.slice(0,r).replace(Z,``)||V}-${t}`}return e.fanoutIndex===void 0?n:he(n,e.fanoutIndex)}function Xe(e){let t=Ye(e);if(!_(t))throw Error(`A safe native team member id is required.`);let n=pe(),r=w(n),i=Date.now(),a=Je(e.task),o={...e.root,memberId:t,token:n,role:e.role,...e.agent?{agent:e.agent}:{},...e.runId?{runId:e.runId}:{},...e.childIndex===void 0?{}:{childIndex:e.childIndex},...e.parentMemberId?{parentMemberId:e.parentMemberId}:{},...a?{task:a}:{}},s=j(e.root,t);s&&s.tokenHash!==r&&we(D(e.root,t));let{token:c,version:l,...u}=o,d={...u,version:J,tokenHash:r,pid:e.pid??process.pid,active:!0,joinedAt:i};Fe(d),Ie(e.root,d,i);let ee=!1;return{context:o,dispose:()=>{if(ee)return;ee=!0;let n=j(e.root,t);if(!n||n.tokenHash!==r)return;let i=Date.now();Fe({...n,active:!1,leftAt:i}),Ie(e.root,n,i)}}}function Ze(){let e=qe(),t=C(r),n=C(i);if(!e||!t||!_(t)||!n)return;let a=j(e,t);if(!(!a||a.teamId!==e.teamId||a.rootSessionId!==e.rootSessionId)&&!(a.tokenHash!==w(n)||!a.active))return{...e,memberId:t,token:n,role:a.role,...a.agent?{agent:a.agent}:{},...a.runId?{runId:a.runId}:{},...a.childIndex===void 0?{}:{childIndex:a.childIndex},...a.parentMemberId?{parentMemberId:a.parentMemberId}:{},...a.task?{task:a.task}:{}}}function Qe(e,t){let n=j(e,e.memberId);if(!n||n.tokenHash!==w(e.token)||!M(e,n,t))throw Error(`This native team member is no longer active.`);return n}function $e(e,t,n){let r=t?.trim();if(!r)throw p(`to is required for intercom send and ask.`,`Provide an explicit recipient.`);let i=Re(e,n).filter(t=>t.memberId!==e.memberId),a=T(r),o=i.find(e=>e.memberId===r||e.memberId===a);if(o)return o;let s=r.toLowerCase(),c=i.filter(e=>e.agent?.toLowerCase()===s||e.runId?.toLowerCase()===s||s===B&&e.role===`main`);if(c.length===1)return c[0];throw c.length>1?new f(`recipient_ambiguous`,`Multiple active intercom members match '${r}': ${c.map(e=>e.memberId).join(`, `)}.`,!1,`Retry with one exact member id.`):new f(`recipient_not_found`,`Active intercom member '${r}' was not found.`,!0,`Call intercom({"action":"members"}) and retry with an active member id.`)}function et(e){let t=e?.trim();if(!t)throw p(`message is required for intercom communication.`,`Provide a nonblank message.`);if(!S(t,W))throw p(`Intercom message exceeds 64 KiB.`,`Shorten the message and retry.`);return t}function tt(e,t,n){let r=j(e,t);return!!(r&&r.tokenHash===n)}function nt(e,t,n){let r=D(e,e.memberId),i;try{i=h.readdirSync(r,{withFileTypes:!0})}catch{return{messages:[],foreignFiles:[]}}let a=[],o=[];for(let s of i){if(!s.isFile()||!s.name.endsWith(z)||n?.(s.name))continue;let i=g.join(r,s.name),c=ke(k(i));if(!c){A(i);continue}if(c.teamId!==e.teamId||c.toMemberId!==e.memberId){o.push(s.name);continue}if(c.expiresAt<t||!tt(e,c.fromMemberId,c.senderTokenHash)){A(i);continue}a.push(c)}return{messages:rt(a),foreignFiles:o}}function rt(e){let t=new Map;for(let n of e){let e=t.get(n.fromMemberId);e?e.push(n):t.set(n.fromMemberId,[n])}let n=[];for(let e of t.values())e.sort((e,t)=>e.seq-t.seq),n.push(e);let r=[];for(;;){let e,t;for(let r of n){let n=r[0];n&&(!t||n.createdAt<t.createdAt||n.createdAt===t.createdAt&&n.fromMemberId<t.fromMemberId)&&(e=r,t=n)}if(!e||!t)break;e.shift(),r.push(t)}return r}function it(e){let t=e.role===`main`?B:e.agent??e.memberId,n=e.runId?` [${e.runId}]`:``,r=e.task?`, task ${e.task.id}: ${e.task.subject}`:``;return`- ${e.memberId}: ${t}${n}${r}`}function at(e){return{name:e.memberId,role:e.role,...e.agent?{agent:e.agent}:{},...e.runId?{runId:e.runId}:{},...e.task?{task:e.task}:{}}}function ot(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Error(`Native team request cancelled.`));return}let i,a=()=>{i&&clearTimeout(i),t?.removeEventListener(`abort`,o)},o=()=>{a(),r(Error(`Native team request cancelled.`))};i=setTimeout(()=>{a(),n()},e),t?.addEventListener(`abort`,o,{once:!0})})}function st(e,t){let n=j(e,t.fromMemberId),r=`${t.fromMemberId}${n?.agent?` (${n.agent})`:``}`,i=n?.task?`, task ${n.task.id}`:``,a=[`${t.kind===`ask`?`Question`:`Message`} from ${r}${i}.`];return a.push(``,t.message),t.kind===`ask`&&a.push(``,`Reply with ${N}({ action: "reply", requestId: "${t.id}", message: "..." }).`),a.join(`
|
|
2
|
-
`)}function
|
|
3
|
-
`):`No active members.`}],details:{members:e.map(
|
|
4
|
-
`):`No pending native team asks.`}],details:{pending:e.map(e=>({id:e.id,from:e.fromMemberId,message:e.message}))}}}let s=
|
|
1
|
+
import{__esmMin as e}from"../../../_virtual/_rolldown/runtime.mjs";import{SUBAGENT_TEAM_ID_ENV as t,SUBAGENT_TEAM_MAIN_MEMBER_ENV as n,SUBAGENT_TEAM_MEMBER_ID_ENV as r,SUBAGENT_TEAM_MEMBER_TOKEN_ENV as i,SUBAGENT_TEAM_ROOT_SESSION_ENV as a,init_env as o}from"../process/env.mjs";import{LruCache as s,init_lruCache as c}from"../../shared/lruCache.mjs";import{writePrivateAtomicJson as l}from"../atomicJson.mjs";import{init_atomicJson as u}from"../../shared/atomicJson.mjs";import{DoomTeamExpectedError as d,init_errors as f,invalidRequest as p}from"../../shared/errors.mjs";import{init_paths as ee,requireCurrentSessionScope as te,scopeTeamDir as ne,tryCurrentSessionScope as re}from"../../shared/paths.mjs";import{BoundedKeySet as ie,init_boundedKeySet as ae}from"../../shared/boundedKeySet.mjs";import{init_versioned as oe,parseVersioned as m}from"../../shared/versioned.mjs";import*as h from"node:fs";import*as g from"node:path";import{createHash as se,randomBytes as ce}from"node:crypto";function _(e){return typeof e==`string`&&kt.test(e)}function v(e){return typeof e==`number`&&Number.isInteger(e)}function y(e){return typeof e==`number`&&Number.isFinite(e)}function b(e){return typeof e==`string`&&e.trim().length>0}function x(e){return e===void 0||typeof e==`string`}function le(e){return e===void 0||v(e)}function ue(e){return e===`main`||e===`subagent`}function de(e){return e===`send`||e===`ask`}function S(e,t){return Buffer.byteLength(e,`utf-8`)<=t}function fe(e){return e instanceof Error?e.message:String(e)}function C(e){return process.env[e]?.trim()||void 0}function w(e){return se(Nt).update(e).digest(`hex`)}function pe(){return ce(Mt).toString(`base64url`)}function me(e){return`${It}${w(e).slice(0,jt)}`}function T(e){return e.trim().toLowerCase().replace(At,mt).replace(Q,``).slice(0,U).replace(Q,``)||H}function he(e,t){let n=`${mt}${t+ht}`,r=U-n.length;return`${e.slice(0,Math.max(r,0)).replace(Q,``)||H}${n}`}function ge(e,t){if(e!==V)return e;if(t)throw Error(`Native team member name '${V}' is reserved for the root session.`);return pt}function E(e){if(!_(e))throw Error(`Invalid native team id.`);return g.join(ne(te()),e)}function _e(e,t){if(!_(t))throw Error(`Invalid native team member id.`);return g.join(E(e.teamId),R,`${t}${B}`)}function D(e,t){if(!_(t))throw Error(`Invalid native team member id.`);return g.join(E(e.teamId),lt,`${t}${B}`)}function O(e,t){if(!_(t))throw Error(`Invalid native team member id.`);return g.join(E(e.teamId),ut,t)}function ve(e){return`${e}${B}`}function k(e,t,n){if(!_(n))throw Error(`Invalid native team message id.`);return g.join(O(e,t),ve(n))}function ye(e,t){if(!_(t))throw Error(`Invalid native team request id.`);return g.join(E(e.teamId),dt,`${t}${B}`)}function A(e,t,n){if(!_(t)||!_(n))throw Error(`Invalid intercom receipt identity.`);return g.join(E(e.teamId),ft,t,`${n}${B}`)}function be(e,t){return se(Nt).update(`${e}:${t}`).digest(`hex`)}function xe(e){let t=E(e.teamId);for(let e of[R,lt,ut,dt,ft])h.mkdirSync(g.join(t,e),{recursive:!0,mode:W})}function j(e){try{let t=JSON.parse(h.readFileSync(e,`utf-8`));return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}catch{return}}function M(e){try{return h.rmSync(e,{force:!0}),!0}catch(e){return e.code===`ENOENT`}}function Se(e){try{return h.rmSync(e,{recursive:!0,force:!0}),!0}catch{return!1}}function Ce(e){if(!(!m(e,[J]).ok||!e)&&!(!_(e.teamId)||!b(e.rootSessionId)||e.mainMemberId!==V||!y(e.createdAt)||!y(e.updatedAt)))return{version:J,teamId:e.teamId,rootSessionId:e.rootSessionId,mainMemberId:V,createdAt:e.createdAt,updatedAt:e.updatedAt}}function we(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e;if(!(!b(t.id)||!b(t.subject))&&!(!S(t.id,K)||!S(t.subject,q)))return{id:t.id,subject:t.subject}}function Te(e){if(!m(e,[Y]).ok||!e||!_(e.teamId)||!b(e.rootSessionId)||!b(e.mainMemberId)||!_(e.memberId)||!ue(e.role)||!b(e.tokenHash)||!v(e.pid)||typeof e.active!=`boolean`||!y(e.joinedAt)||!x(e.agent)||!x(e.runId)||!le(e.childIndex)||!x(e.parentMemberId))return;let t=e.task===void 0?void 0:we(e.task);if(!(e.task!==void 0&&!t))return{version:Y,teamId:e.teamId,rootSessionId:e.rootSessionId,mainMemberId:e.mainMemberId,memberId:e.memberId,role:e.role,tokenHash:e.tokenHash,pid:e.pid,active:e.active,joinedAt:e.joinedAt,...y(e.leftAt)?{leftAt:e.leftAt}:{},...e.agent===void 0?{}:{agent:e.agent},...e.runId===void 0?{}:{runId:e.runId},...e.childIndex===void 0?{}:{childIndex:e.childIndex},...e.parentMemberId===void 0?{}:{parentMemberId:e.parentMemberId},...t?{task:t}:{}}}function Ee(e){if(!(!m(e,[X]).ok||!e)&&!(!_(e.memberId)||!b(e.tokenHash)||!v(e.pid)||!y(e.heartbeatAt)))return{version:X,memberId:e.memberId,tokenHash:e.tokenHash,pid:e.pid,heartbeatAt:e.heartbeatAt}}function De(e){if(!(!m(e,[Z]).ok||!e)&&!(e.type!==I||!_(e.id)||!_(e.teamId)||!de(e.kind)||!_(e.fromMemberId)||!_(e.toMemberId)||!b(e.senderTokenHash)||!v(e.seq)||typeof e.message!=`string`||!S(e.message,G)||!y(e.createdAt)||!y(e.expiresAt)))return{type:I,version:Z,id:e.id,teamId:e.teamId,kind:e.kind,fromMemberId:e.fromMemberId,toMemberId:e.toMemberId,senderTokenHash:e.senderTokenHash,seq:e.seq,message:e.message,createdAt:e.createdAt,expiresAt:e.expiresAt}}function Oe(e){if(!(!m(e,[Z]).ok||!e)&&!(e.type!==L||!_(e.requestId)||!_(e.teamId)||!_(e.fromMemberId)||!_(e.toMemberId)||!b(e.senderTokenHash)||typeof e.message!=`string`||!S(e.message,G)||!y(e.createdAt)))return{type:L,version:Z,requestId:e.requestId,teamId:e.teamId,fromMemberId:e.fromMemberId,toMemberId:e.toMemberId,senderTokenHash:e.senderTokenHash,message:e.message,createdAt:e.createdAt}}function ke(e){if(!e||typeof e!=`object`||Array.isArray(e))throw p(`Intercom params must be an object.`,`Use one documented intercom action shape.`);let t=e,n=Ot.find(e=>e===t.action);if(!n)throw new d(`unsupported_operation`,`Unsupported intercom action: ${String(t.action)}.`,!1,`Use members, send, ask, pending, or reply.`);if(!x(t.to)||!x(t.message)||!x(t.requestId))throw p(`Intercom to, message and requestId values must be strings.`,`Correct the action fields and retry.`);if(t.timeoutMs!==void 0&&(!v(t.timeoutMs)||t.timeoutMs<1))throw p(`Intercom timeoutMs must be a positive integer.`,`Correct timeoutMs and retry.`);let r=new Set(n===`members`||n===`pending`?[`action`]:n===`reply`?[`action`,`requestId`,`message`]:n===`ask`?[`action`,`to`,`message`,`timeoutMs`]:[`action`,`to`,`message`]),i=Object.keys(t).filter(e=>!r.has(e));if(i.length)throw p(`Intercom action '${n}' does not accept: ${i.join(`, `)}.`,`Remove unknown fields and retry.`);return{action:n,...t.to===void 0?{}:{to:t.to},...t.message===void 0?{}:{message:t.message},...t.requestId===void 0?{}:{requestId:t.requestId},...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}}}function N(e,t){return Te(j(_e(e,t)))}function Ae(e,t){let n=Ee(j(D(e,t.memberId)));if(!(!n||n.memberId!==t.memberId||n.tokenHash!==t.tokenHash))return n}function je(e){if(e===process.pid)return!0;try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function Me(e,t){return Ae(e,t)?.heartbeatAt??t.leftAt??t.joinedAt}function P(e,t,n){return t.active&&je(t.pid)&&n-Me(e,t)<=3e4}function Ne(e){h.mkdirSync(O(e,e.memberId),{recursive:!0,mode:W}),l(_e(e,e.memberId),e)}function Pe(e,t,n){let r={version:X,memberId:t.memberId,tokenHash:t.tokenHash,pid:t.pid,heartbeatAt:n};l(D(e,t.memberId),r)}function Fe(e){let t=g.join(E(e.teamId),R),n;try{n=h.readdirSync(t,{withFileTypes:!0})}catch{return[]}return n.filter(e=>e.isFile()&&e.name.endsWith(B)).map(e=>Te(j(g.join(t,e.name)))).filter(e=>!!e).filter(t=>t.teamId===e.teamId&&t.rootSessionId===e.rootSessionId)}function Ie(e,t){return Fe(e).filter(n=>P(e,n,t)).sort((e,t)=>e.joinedAt-t.joinedAt||e.memberId.localeCompare(t.memberId))}function Le(e=Date.now()){let t=Ge();if(t)return{members:Ie(t,e).map(rt)}}function Re(e,t,n){let r=0;for(let i of Fe(e))i.memberId!==t&&(P(e,i,n)||n-Me(e,i)<=33e4||(Se(O(e,i.memberId)),M(D(e,i.memberId)),M(_e(e,i.memberId)),r+=1));return r}function ze(e){let t=e.trim();if(!t)throw Error(`A root session id is required for native team communication.`);let n={version:J,teamId:me(t),rootSessionId:t,mainMemberId:V};xe(n);let r=g.join(E(n.teamId),z),i=Ce(j(r));if(i&&i.rootSessionId!==t)throw Error(`Native team identity collision detected.`);let a=Date.now(),o={...n,createdAt:i?.createdAt??a,updatedAt:a};return l(r,o),n}function Be(e){return{[t]:e.teamId,[a]:e.rootSessionId,[n]:e.mainMemberId}}function Ve(e){return{...Be(e),[r]:e.memberId,[i]:e.token}}function He(){return{[r]:void 0,[i]:void 0}}function Ue(e){Object.assign(process.env,Be(e))}function We(e){e&&process.env.PI_SUBAGENT_TEAM_ID!==e.teamId||(delete process.env[t],delete process.env[a],delete process.env[n])}function Ge(){let e=C(t),r=C(a),i=C(n);if(!e||!_(e)||!r||i!==V||e!==me(r))return;let o=Ce(j(g.join(E(e),z)));if(!(!o||o.rootSessionId!==r||o.teamId!==e))return{version:J,teamId:e,rootSessionId:r,mainMemberId:i}}function Ke(e){if(!e)return;let t=e.id.trim(),n=e.subject.trim();if(!t||!S(t,K))throw Error(`Native team task id must be between 1 and ${K} bytes.`);if(!n||!S(n,q))throw Error(`Native team task subject must be between 1 and ${q} bytes.`);return{id:t,subject:n}}function qe(e){if(e.role===`main`)return e.root.mainMemberId;let t=e.name!==void 0;if(!t&&!e.agent)throw Error(`An intercom member needs a name or an agent to derive one from.`);let n=ge(T(e.name??e.agent??H),t);if(e.runId){let t=T(e.runId).slice(0,8),r=U-t.length-1;return`${n.slice(0,r).replace(Q,``)||H}-${t}`}return e.fanoutIndex===void 0?n:he(n,e.fanoutIndex)}function Je(e){let t=qe(e);if(!_(t))throw Error(`A safe native team member id is required.`);let n=pe(),r=w(n),i=Date.now(),a=Ke(e.task),o={...e.root,memberId:t,token:n,role:e.role,...e.agent?{agent:e.agent}:{},...e.runId?{runId:e.runId}:{},...e.childIndex===void 0?{}:{childIndex:e.childIndex},...e.parentMemberId?{parentMemberId:e.parentMemberId}:{},...a?{task:a}:{}},s=N(e.root,t);s&&s.tokenHash!==r&&Se(O(e.root,t));let{token:c,version:l,...u}=o,d={...u,version:Y,tokenHash:r,pid:e.pid??process.pid,active:!0,joinedAt:i};Ne(d),Pe(e.root,d,i);let f=!1;return{context:o,dispose:()=>{if(f)return;f=!0;let n=N(e.root,t);if(!n||n.tokenHash!==r)return;let i=Date.now();Ne({...n,active:!1,leftAt:i}),Pe(e.root,n,i)}}}function Ye(){let e=Ge(),t=C(r),n=C(i);if(!e||!t||!_(t)||!n)return;let a=N(e,t);if(!(!a||a.teamId!==e.teamId||a.rootSessionId!==e.rootSessionId)&&!(a.tokenHash!==w(n)||!a.active))return{...e,memberId:t,token:n,role:a.role,...a.agent?{agent:a.agent}:{},...a.runId?{runId:a.runId}:{},...a.childIndex===void 0?{}:{childIndex:a.childIndex},...a.parentMemberId?{parentMemberId:a.parentMemberId}:{},...a.task?{task:a.task}:{}}}function Xe(e,t){let n=N(e,e.memberId);if(!n||n.tokenHash!==w(e.token)||!P(e,n,t))throw Error(`This native team member is no longer active.`);return n}function Ze(e,t,n){let r=t?.trim();if(!r)throw p(`to is required for intercom send and ask.`,`Provide an explicit recipient.`);let i=Ie(e,n).filter(t=>t.memberId!==e.memberId),a=T(r),o=i.find(e=>e.memberId===r||e.memberId===a);if(o)return o;let s=r.toLowerCase(),c=i.filter(e=>e.agent?.toLowerCase()===s||e.runId?.toLowerCase()===s||s===V&&e.role===`main`);if(c.length===1)return c[0];throw c.length>1?new d(`recipient_ambiguous`,`Multiple active intercom members match '${r}': ${c.map(e=>e.memberId).join(`, `)}.`,!1,`Retry with one exact member id.`):new d(`recipient_not_found`,`Active intercom member '${r}' was not found.`,!0,`Call intercom({"action":"members"}) and retry with an active member id.`)}function Qe(e){let t=e?.trim();if(!t)throw p(`message is required for intercom communication.`,`Provide a nonblank message.`);if(!S(t,G))throw p(`Intercom message exceeds 64 KiB.`,`Shorten the message and retry.`);return t}function $e(e,t,n){let r=N(e,t);return!!(r&&r.tokenHash===n)}function et(e,t,n){let r=O(e,e.memberId),i;try{i=h.readdirSync(r,{withFileTypes:!0})}catch{return{messages:[],foreignFiles:[]}}let a=[],o=[];for(let s of i){if(!s.isFile()||!s.name.endsWith(B)||n?.(s.name))continue;let i=g.join(r,s.name),c=De(j(i));if(!c){M(i);continue}if(c.teamId!==e.teamId||c.toMemberId!==e.memberId){o.push(s.name);continue}if(c.expiresAt<t||!$e(e,c.fromMemberId,c.senderTokenHash)){M(i);continue}a.push(c)}return{messages:tt(a),foreignFiles:o}}function tt(e){let t=new Map;for(let n of e){let e=t.get(n.fromMemberId);e?e.push(n):t.set(n.fromMemberId,[n])}let n=[];for(let e of t.values())e.sort((e,t)=>e.seq-t.seq),n.push(e);let r=[];for(;;){let e,t;for(let r of n){let n=r[0];n&&(!t||n.createdAt<t.createdAt||n.createdAt===t.createdAt&&n.fromMemberId<t.fromMemberId)&&(e=r,t=n)}if(!e||!t)break;e.shift(),r.push(t)}return r}function nt(e){let t=e.role===`main`?V:e.agent??e.memberId,n=e.runId?` [${e.runId}]`:``,r=e.task?`, task ${e.task.id}: ${e.task.subject}`:``;return`- ${e.memberId}: ${t}${n}${r}`}function rt(e){return{name:e.memberId,role:e.role,...e.agent?{agent:e.agent}:{},...e.runId?{runId:e.runId}:{},...e.task?{task:e.task}:{}}}function it(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Error(`Native team request cancelled.`));return}let i,a=()=>{i&&clearTimeout(i),t?.removeEventListener(`abort`,o)},o=()=>{a(),r(Error(`Native team request cancelled.`))};i=setTimeout(()=>{a(),n()},e),t?.addEventListener(`abort`,o,{once:!0})})}function at(e,t){let n=N(e,t.fromMemberId),r=`${t.fromMemberId}${n?.agent?` (${n.agent})`:``}`,i=n?.task?`, task ${n.task.id}`:``,a=[`${t.kind===`ask`?`Question`:`Message`} from ${r}${i}.`];return a.push(``,t.message),t.kind===`ask`&&a.push(``,`Reply with ${F}({ action: "reply", requestId: "${t.id}", message: "..." }).`),a.join(`
|
|
2
|
+
`)}function ot(e,t){try{return e.getAllTools().some(e=>e.name===t)}catch{return!1}}var F,I,L,st,ct,R,lt,ut,dt,ft,z,B,V,pt,H,U,mt,ht,W,G,K,q,gt,_t,vt,yt,bt,xt,St,Ct,wt,Tt,Et,Dt,J,Y,X,Z,Ot,kt,At,Q,jt,Mt,Nt,Pt,$,Ft,It,Lt,Rt,zt,Bt=e((()=>{o(),u(),ae(),f(),c(),ee(),oe(),F=`intercom`,I=`subagent.team.message`,L=`subagent.team.reply`,st=`intercom_message`,ct=`intercom_undeliverable`,R=`members`,lt=`heartbeats`,ut=`inboxes`,dt=`replies`,ft=`receipts`,z=`team.json`,B=`.json`,V=`main`,pt=`main-agent`,H=`agent`,U=48,mt=`-`,ht=1,W=448,G=65536,K=256,q=4096,gt=864e5,_t=6e5,vt=5e3,yt=3e4,bt=250,xt=250,St=5,Ct=1,wt=1024,Tt=256,Et=32,Dt=6e4,J=1,Y=1,X=1,Z=2,Ot=[`members`,`send`,`ask`,`reply`,`pending`],kt=/^[A-Za-z0-9._-]{1,256}$/,At=/[^a-z0-9._-]+/g,Q=/^[-.]+|[-.]+$/g,jt=32,Mt=32,Nt=`sha256`,Pt=1,$=`delivered`,Ft=`failed`,It=`session-`,Lt={oneOf:[...[`members`,`pending`].map(e=>({type:`object`,properties:{action:{const:e}},required:[`action`],additionalProperties:!1})),{type:`object`,properties:{action:{const:`send`},to:{type:`string`},message:{type:`string`}},required:[`action`,`to`,`message`],additionalProperties:!1},{type:`object`,properties:{action:{const:`ask`},to:{type:`string`},message:{type:`string`},timeoutMs:{type:`integer`,minimum:1}},required:[`action`,`to`,`message`],additionalProperties:!1},{type:`object`,properties:{action:{const:`reply`},requestId:{type:`string`},message:{type:`string`}},required:[`action`,`requestId`,`message`],additionalProperties:!1}]},Rt=class{pi;options;context;ownedMembershipDispose;poller;lastHeartbeatAt=0;lastGcAt=0;seenFiles=new ie(wt);deliveryAttempts=new s(Tt);undeliverableMessages=[];outboundSeq=0;constructor(e,t){if(this.pi=e,this.options=t,ot(e,`intercom`))throw Error(`[tool_conflict] A foreign '${F}' tool is already registered. Recovery: disable the competing extension and reload Doom Team.`);e.registerTool(this.buildTool())}current(){return this.context}undeliverable(){return this.undeliverableMessages}bindMainSession(e){let t=ze(e);Ue(t);let n=Je({root:t,role:`main`});return this.startBinding(n.context,n.dispose)}bindChildFromEnvironment(){let e=Ye();if(e)return this.context?.memberId===e.memberId&&this.context.token===e.token?this.context:this.startBinding(e)}dispose(){let e=this.context;this.stopBinding(),e?.role===`main`&&We(e)}startBinding(e,t){return this.stopBinding(),this.context=e,this.ownedMembershipDispose=t,this.poll(),this.poller=setInterval(()=>{this.poll()},this.options.pollIntervalMs),this.poller.unref?.(),e}stopBinding(){this.poller&&clearInterval(this.poller),this.poller=void 0,this.ownedMembershipDispose?.(),this.ownedMembershipDispose=void 0,this.seenFiles.clear(),this.deliveryAttempts.clear(),this.lastHeartbeatAt=0,this.lastGcAt=0,this.outboundSeq=0,this.context=void 0}poll(){let e=this.context;if(!e)return;let t=this.options.now();this.heartbeat(e,t),this.collectGarbageIfDue(e,t);let n=et(e,t,e=>this.seenFiles.has(e));for(let e of n.foreignFiles)this.seenFiles.add(e);for(let t of n.messages)this.deliverOnce(e,t)}deliverOnce(e,t){let n=ve(t.id);try{this.deliver(e,t)}catch(r){let i=(this.deliveryAttempts.get(n)??0)+Ct;if(i<this.options.maxDeliveryAttempts){this.deliveryAttempts.set(n,i);return}this.deliveryAttempts.delete(n),this.seenFiles.add(n),this.reportUndeliverable(e,t,i,r);return}this.seenFiles.add(n),this.deliveryAttempts.delete(n),l(A(e,t.fromMemberId,t.id),{version:Pt,messageId:t.id,state:$,deliveredAt:this.options.now()}),t.kind===`send`&&M(k(e,e.memberId,t.id))}deliver(e,t){let n=at(e,t);if(e.role===`subagent`){this.pi.sendUserMessage(n,{deliverAs:`steer`});return}this.pi.sendMessage({customType:st,content:n,display:!0,details:{id:t.id,kind:t.kind,from:t.fromMemberId,to:t.toMemberId,seq:t.seq}},{triggerTurn:!0,deliverAs:`steer`})}reportUndeliverable(e,t,n,r){let i={messageId:t.id,fromMemberId:t.fromMemberId,kind:t.kind,attempts:n,reason:fe(r),at:this.options.now()};for(this.undeliverableMessages.push(i),l(A(e,t.fromMemberId,t.id),{version:Pt,messageId:t.id,state:Ft,reason:i.reason,failedAt:i.at});this.undeliverableMessages.length>Et;)this.undeliverableMessages.shift();try{return this.pi.sendMessage({customType:ct,content:`Native team message ${t.id} from ${t.fromMemberId} could not be delivered after ${n} attempts: ${i.reason}`,display:!0,details:{...i}},{triggerTurn:!0,deliverAs:`steer`}),!0}catch{return!1}}heartbeat(e,t){if(t-this.lastHeartbeatAt<this.options.heartbeatIntervalMs)return;let n=N(e,e.memberId);!n||n.tokenHash!==w(e.token)||!n.active||(this.lastHeartbeatAt=t,Pe(e,n,t))}collectGarbageIfDue(e,t){if(!(t-this.lastGcAt<this.options.gcIntervalMs)){this.lastGcAt=t;try{Re(e,e.memberId,t)}catch(n){for(this.undeliverableMessages.push({messageId:``,fromMemberId:e.memberId,kind:`send`,attempts:0,reason:`Native team directory sweep failed: ${fe(n)}`,at:t});this.undeliverableMessages.length>Et;)this.undeliverableMessages.shift()}}}nextSeq(){return this.outboundSeq+=1,this.outboundSeq}queueMessage(e,t,n,r,i,a){if(Xe(e,i),!P(e,t,i))throw Error(`Native team member '${t.memberId}' is no longer active.`);let o={type:I,version:Z,id:a,teamId:e.teamId,kind:n,fromMemberId:e.memberId,toMemberId:t.memberId,senderTokenHash:w(e.token),seq:this.nextSeq(),message:r,createdAt:i,expiresAt:i+gt};return h.mkdirSync(O(e,t.memberId),{recursive:!0,mode:W}),l(k(e,t.memberId,o.id),o),o}replyToRequest(e,t,n,r){if(!t||!_(t))throw Error(`requestId must be a valid intercom request id.`);Xe(e,r);let i=k(e,e.memberId,t),a=De(j(i));if(!a||a.kind!==`ask`||a.teamId!==e.teamId||a.toMemberId!==e.memberId||!$e(e,a.fromMemberId,a.senderTokenHash))throw new d(`recipient_not_found`,`No pending intercom ask matches requestId '${t}'.`,!1,`Call intercom({"action":"pending"}) and retry with an exact requestId.`);let o={type:L,version:Z,requestId:t,teamId:e.teamId,fromMemberId:e.memberId,toMemberId:a.fromMemberId,senderTokenHash:w(e.token),message:n,createdAt:r};return l(ye(e,t),o),M(i),this.seenFiles.delete(ve(t)),o}async waitForReply(e,t,n,r,i){let a=ye(e,n.id),o=this.options.now()+(i??this.options.askTimeoutMs);for(;this.options.now()<=o;){if(r?.aborted)throw Error(`Native team request cancelled.`);let i=Oe(j(a));if(i&&i.teamId===e.teamId&&i.requestId===n.id&&i.fromMemberId===t.memberId&&i.toMemberId===e.memberId&&$e(e,i.fromMemberId,i.senderTokenHash))return M(a),i;let o=N(e,t.memberId);if(!o||!P(e,o,this.options.now()))throw new d(`communication_unavailable`,`Intercom member '${t.memberId}' became unreachable before replying.`,!0,`Call intercom({"action":"members"}) and decide whether to retry with an active member.`);await it(this.options.replyPollIntervalMs,r)}throw new d(`reply_timeout`,`Timed out waiting for intercom member '${t.memberId}' to reply.`,!0,`Check member status before deciding whether to ask again.`)}buildTool(){return{name:F,label:`Intercom`,description:`Communicate with active agents in this root session. Use members, send, ask, pending, or reply. The stable root identity is main.`,promptGuidelines:[`Send only new progress, blockers, or decisions. Do not repeat the task brief, sender task, or delegation instructions because the recipient already has them.`],parameters:Lt,execute:async(e,t,n,r)=>{let i=this.context;if(!i)throw new d(`communication_unavailable`,`Intercom is not active for this session.`,!0,`Wait for session startup or reload Doom Team.`);let a=ke(t),o=this.options.now();if(Xe(i,o),a.action===`members`){let e=Ie(i,o);return{content:[{type:`text`,text:e.length?e.map(nt).join(`
|
|
3
|
+
`):`No active members.`}],details:{members:e.map(rt)}}}if(a.action===`pending`){let e=et(i,o).messages.filter(e=>e.kind===`ask`),t=e.map(e=>`- ${e.id}: from ${e.fromMemberId}. Reply with ${F}({ action: "reply", requestId: "${e.id}", message: "..." }).`);return{content:[{type:`text`,text:t.length?t.join(`
|
|
4
|
+
`):`No pending native team asks.`}],details:{pending:e.map(e=>({id:e.id,from:e.fromMemberId,message:e.message}))}}}let s=Qe(a.message);if(a.action===`reply`){let e=this.replyToRequest(i,a.requestId,s,o);return{content:[{type:`text`,text:`Replied to native team request ${e.requestId}.`}],details:{requestId:e.requestId,to:e.toMemberId}}}let c=Ze(i,a.to,o);a.action===`ask`&&r?.({content:[{type:`text`,text:`Waiting for ${c.memberId} to reply...`}],details:{action:`ask`,to:c.memberId,partial:!0}});let l=be(i.memberId,e),u=j(A(i,i.memberId,l));if(u?.state===Ft){let e=typeof u.reason==`string`?u.reason:`unknown error`;throw new d(`delivery_unconfirmed`,`Intercom message ${l} failed: ${e}`,!1,`Call intercom({"action":"members"}) and do not resend automatically.`)}if(a.action===`send`&&u?.state===$)return{content:[{type:`text`,text:`Message ${l} delivered to ${c.memberId}.`}],details:{state:$,delivered:!0,messageId:l,to:c.memberId}};let f=this.queueMessage(i,c,a.action,s,o,l);if(a.action===`send`)return{content:[{type:`text`,text:`Message ${f.id} queued for ${c.memberId}; delivery is not yet confirmed. Do not resend.`}],details:{state:`queued`,delivered:!1,messageId:f.id,to:c.memberId,seq:f.seq}};try{let e=await this.waitForReply(i,c,f,n,a.timeoutMs);return{content:[{type:`text`,text:`Reply from ${c.memberId}:\n${e.message}`}],details:{requestId:f.id,from:c.memberId,reply:e.message}}}finally{M(k(i,c.memberId,f.id))}}}}},zt=class{runtimes=new WeakMap;pollIntervalMs=bt;replyPollIntervalMs=xt;heartbeatIntervalMs=vt;gcIntervalMs=Dt;askTimeoutMs=_t;maxDeliveryAttempts=St;now(){return Date.now()}createRuntime(e){let t=this.runtimes.get(e);if(t)return t;let n=new Rt(e,{pollIntervalMs:this.pollIntervalMs,replyPollIntervalMs:this.replyPollIntervalMs,heartbeatIntervalMs:this.heartbeatIntervalMs,gcIntervalMs:this.gcIntervalMs,askTimeoutMs:this.askTimeoutMs,maxDeliveryAttempts:this.maxDeliveryAttempts,now:()=>this.now()});return this.runtimes.set(e,n),e.on(`session_shutdown`,()=>{this.runtimes.get(e)?.dispose()}),n}registerClient(e){re()&&Ye()&&this.createRuntime(e).bindChildFromEnvironment()}}}));Bt();export{yt as HEARTBEAT_STALE_MS,F as NATIVE_TEAM_TOOL_NAME,zt as NativeTeamChannelService,Ue as applyNativeTeamRootEnvironment,He as clearNativeTeamMemberEnvironment,We as clearNativeTeamRootEnvironment,ze as ensureNativeTeamRoot,Bt as init_nativeTeamChannel,Fe as listMemberRecords,Ve as nativeTeamMemberEnvironment,Be as nativeTeamRootEnvironment,T as normalizeTeamMemberName,je as processAlive,Le as readActiveNativeTeamSnapshot,Ae as readHeartbeat,N as readMember,Ye as readNativeTeamMemberFromEnvironment,Ge as readNativeTeamRootFromEnvironment,Je as registerNativeTeamMember,E as teamDir};
|
|
5
5
|
//# sourceMappingURL=nativeTeamChannel.mjs.map
|