@makaio/framework 1.0.0-dev-1781260968078 → 1.0.0-dev-1781367632837
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/README.md +1 -1
- package/dist/.makaio-build.json +2 -2
- package/dist/adapter-UpcpZDOv.mjs +1 -0
- package/dist/adapter-subsystem/index.d.mts +493 -0
- package/dist/adapter-subsystem/index.mjs +1 -0
- package/dist/adapters/config/index.d.mts +1 -1
- package/dist/adapters/index.d.mts +12 -4
- package/dist/adapters/index.mjs +1 -1
- package/dist/bus/index.mjs +1 -1
- package/dist/clients/index.d.mts +4 -7
- package/dist/clients/index.mjs +1 -1
- package/dist/contracts/adapter/index.d.mts +2 -2
- package/dist/contracts/adapter/index.mjs +1 -1
- package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
- package/dist/contracts/artifact/index.d.mts +1 -1
- package/dist/contracts/client/index.d.mts +1 -1
- package/dist/contracts/config/index.d.mts +6 -6
- package/dist/contracts/extension/index.d.mts +2 -2
- package/dist/contracts/facet/index.d.mts +1 -1
- package/dist/contracts/index.d.mts +203 -38
- package/dist/contracts/index.mjs +1 -1
- package/dist/contracts/materialization/index.d.mts +3 -3
- package/dist/contracts/provider/index.d.mts +1 -1
- package/dist/contracts/session/index.d.mts +3 -3
- package/dist/contracts/session/index.mjs +1 -1
- package/dist/{definition-SiimP25_.d.mts → definition-DqJOg6Lv.d.mts} +1 -1
- package/dist/drizzle/0015_m_mqbh8q5b.sql +1 -0
- package/dist/drizzle/0016_m_mqbmq8h7.sql +1 -0
- package/dist/drizzle/0017_m_mqbnf924.sql +1 -0
- package/dist/drizzle/meta/_journal.json +21 -0
- package/dist/{handler-DSfSAlxx.mjs → handler-DqpiV9eA.mjs} +1 -1
- package/dist/handlers-BAB4fQNH.mjs +41 -0
- package/dist/inbound-hooks/index.d.mts +174 -0
- package/dist/inbound-hooks/index.mjs +1 -0
- package/dist/{index-BvSyOgTY.d.mts → index-7EPRy0nT.d.mts} +113 -44
- package/dist/{index-Cb64d5c5.d.mts → index-B7uYo0C6.d.mts} +20 -3
- package/dist/{index-B2xbnMZe.d.mts → index-BCKRUuI2.d.mts} +1 -1
- package/dist/{index-CARxIllg.d.mts → index-BFuke0jw.d.mts} +28 -28
- package/dist/{index-DTdqGAfH2.d.mts → index-BfUq8fO52.d.mts} +1 -1
- package/dist/{index-BtztOqaF.d.mts → index-BheaEhyI.d.mts} +6 -6
- package/dist/{index-CZ_TcT6J.d.mts → index-Bibt5jAX.d.mts} +8 -8
- package/dist/{index-D5CI1V5d.d.mts → index-C3zfJg6s.d.mts} +16 -16
- package/dist/{index-Buo9H8RK.d.mts → index-COPhs8Ay.d.mts} +1 -1
- package/dist/{index-CgjslA5-.d.mts → index-CcBAFO-1.d.mts} +4 -4
- package/dist/{index-BpniJgxu.d.mts → index-CncH-7wf.d.mts} +16 -16
- package/dist/{index-BQiHs8EF.d.mts → index-DdZ9PDEE.d.mts} +24 -24
- package/dist/{index-BDRKAxIV.d.mts → index-dAjtejnc.d.mts} +2 -2
- package/dist/{index-DDQkhhRo.d.mts → index-qGJoNJon.d.mts} +397 -157
- package/dist/{index-BKKNWqkP2.d.mts → index-zgm2j9V92.d.mts} +44 -2
- package/dist/kernel/extension/index.d.mts +1 -1
- package/dist/kernel/index.d.mts +2 -2
- package/dist/kernel/observability/index.d.mts +1 -1
- package/dist/mcp-http-server/index.d.mts +132 -19
- package/dist/mcp-http-server/index.mjs +1 -1
- package/dist/{namespace-D1Iw_d1P.d.mts → namespace--s0d86h-.d.mts} +144 -0
- package/dist/{namespace-CHMszppN.d.mts → namespace-6OzA9SwY.d.mts} +26 -26
- package/dist/{namespace-CqUGzG53.d.mts → namespace-Bx40zNgT.d.mts} +2 -2
- package/dist/{namespace-Ba4bxtHQ.d.mts → namespace-BxxBhcV_.d.mts} +9 -9
- package/dist/{namespace-7tsuJhQ9.d.mts → namespace-Cq8ScJGp.d.mts} +94 -58
- package/dist/{namespace-B73Sxj5L.d.mts → namespace-DI9_OYOU.d.mts} +6 -6
- package/dist/{namespace-DwE2g8Wm.mjs → namespace-Dfq6MDN9.mjs} +1 -1
- package/dist/{namespace-BBVtD1gu.d.mts → namespace-Do0AUzwu.d.mts} +6 -6
- package/dist/{namespace-DDCjoQUj.d.mts → namespace-aJJfBJU5.d.mts} +170 -0
- package/dist/{orchestrator-shared-Dt4WDse7.mjs → orchestrator-shared-BKFXaKPL.mjs} +1 -1
- package/dist/{package-BSnp1zOR.d.mts → package--RZnpN2J.d.mts} +2 -3
- package/dist/package-BzJvtM5O.mjs +1 -0
- package/dist/package-DzN_jdqd.mjs +1 -0
- package/dist/package.json +1 -1
- package/dist/primitive-runtime-CNC_bSac.mjs +1 -0
- package/dist/runtime-node/bus/runtime/namespace.d.mts +8 -8
- package/dist/runtime-node/bus/runtime/schemas.d.mts +11 -4
- package/dist/runtime-node/bus/runtime/schemas.mjs +1 -1
- package/dist/runtime-node/index.d.mts +27 -60
- package/dist/runtime-node/index.mjs +26 -26
- package/dist/runtime-node/workflow-worker/index.d.mts +1 -1
- package/dist/{schema-BNrM9LWb.d.mts → schema-C-yfxlRI.d.mts} +24 -4
- package/dist/{schema-BerZmr2q.mjs → schema-C3TgjrsV.mjs} +1 -1
- package/dist/{schema-BrnYlDwZ.mjs → schema-CzhOc7TV.mjs} +1 -1
- package/dist/{schemas-B5ToLwIs.d.mts → schemas-CJYNpT6v.d.mts} +6 -6
- package/dist/{schemas-lqvZ6UpK.d.mts → schemas-CW0h1h6l.d.mts} +3 -3
- package/dist/schemas-CuKayWhA.mjs +1 -0
- package/dist/{schemas-DAFYpgHk2.d.mts → schemas-DtJWNKZ_2.d.mts} +14 -14
- package/dist/{schemas-CkOSG2eJ.d.mts → schemas-t1VR6_b_.d.mts} +3 -3
- package/dist/services/adapter-subsystem/index.d.mts +2 -2
- package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
- package/dist/services/context-rules/index.d.mts +3 -3
- package/dist/services/execution-target/index.d.mts +2 -2
- package/dist/services/execution-target/namespace.d.mts +1 -1
- package/dist/services/execution-target/schemas.d.mts +1 -1
- package/dist/services/filesystem/namespace.d.mts +6 -6
- package/dist/services/filesystem/schemas.d.mts +3 -3
- package/dist/services/git/namespace.d.mts +2 -2
- package/dist/services/git/schemas.d.mts +2 -2
- package/dist/services/harness/index.d.mts +3 -4
- package/dist/services/harness/index.mjs +1 -1
- package/dist/services/index.d.mts +147 -50
- package/dist/services/index.mjs +1 -1
- package/dist/services/log-import/browser.d.mts +2 -2
- package/dist/services/log-import/index.d.mts +4 -5
- package/dist/services/log-import/index.mjs +1 -1
- package/dist/services/log-import/log-import.d.mts +1 -1
- package/dist/services/log-import/namespace.d.mts +2 -2
- package/dist/services/log-import/schemas.d.mts +1 -1
- package/dist/services/provider-context/index.mjs +1 -1
- package/dist/services/session/handlers/index.mjs +1 -1
- package/dist/services/session/index.d.mts +7 -7
- package/dist/services/session/index.mjs +1 -1
- package/dist/services/session/messages/namespace.d.mts +1 -1
- package/dist/services/session/messages/namespace.mjs +1 -1
- package/dist/services/session/orchestrator-testing/index.mjs +1 -1
- package/dist/services/session/session-events/namespace.d.mts +1 -1
- package/dist/services/session/session-events/namespace.mjs +1 -1
- package/dist/services/session/storage/namespace.d.mts +1 -1
- package/dist/services/session/storage/schema.d.mts +1 -1
- package/dist/services/session/storage/schema.mjs +1 -1
- package/dist/services/session/testing/index.mjs +5 -3
- package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
- package/dist/services/session/turns/namespace.d.mts +1 -1
- package/dist/services/session/turns/namespace.mjs +1 -1
- package/dist/services/settings/index.mjs +1 -1
- package/dist/services/settings/namespace.d.mts +14 -14
- package/dist/services/settings/storage/clients-namespace.mjs +1 -1
- package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
- package/dist/services/settings/storage/index.mjs +1 -1
- package/dist/services/settings/storage/providers-namespace.mjs +1 -1
- package/dist/services/subagent/index.d.mts +1 -1
- package/dist/services/subagent/index.mjs +1 -1
- package/dist/services/subagent-template/index.d.mts +1 -1
- package/dist/services/subagent-template/schemas.d.mts +1 -1
- package/dist/services/tool-approval/index.mjs +1 -1
- package/dist/services/tools/index.mjs +1 -1
- package/dist/services/tray-menu/index.d.mts +2 -2
- package/dist/services/tray-menu/namespace.d.mts +1 -1
- package/dist/services/tray-menu/schemas.d.mts +1 -1
- package/dist/services/turn/index.d.mts +1 -1
- package/dist/services/turn/namespace.d.mts +1 -1
- package/dist/services/turn/schemas.d.mts +72 -0
- package/dist/services/turn/schemas.mjs +1 -1
- package/dist/{session-C1Cami7U.mjs → session-BwX5_k47.mjs} +1 -1
- package/dist/session-P4nX60Xx.mjs +39 -0
- package/dist/{session-lineage-CXzV_hAP.d.mts → session-lineage-CKg6mErA.d.mts} +1 -1
- package/dist/storage/drizzle/index.d.mts +1 -1
- package/dist/storage/drizzle/index.mjs +1 -1
- package/dist/{tool-approval-service-Cb2F1yT6.mjs → tool-approval-service-DNHV5x0M.mjs} +1 -1
- package/dist/{tools-D5DVHC-R.mjs → tools-CQImrHAp.mjs} +1 -1
- package/dist/{types-DLVitCZP.d.mts → types-BOuU-0Vs.d.mts} +901 -718
- package/dist/{types-D5IMwOkJ.d.mts → types-D0fPFh-D.d.mts} +1 -1
- package/dist/{types-BMpIa4fx.d.mts → types-D6jnDjP2.d.mts} +18 -5
- package/dist/ui-components/index.d.mts +36 -37
- package/dist/ui-views/index.d.mts +2 -2
- package/dist/workflow-engine/index.d.mts +49 -16
- package/dist/workflow-engine/index.mjs +1 -1
- package/dist/workflow-engine/package.d.mts +1 -1
- package/dist/workflow-engine/package.mjs +1 -1
- package/dist/workflow-engine/workflow-orchestrator.mjs +1 -1
- package/package.json +18 -1
- package/dist/adapter-Dt2FDMs4.mjs +0 -1
- package/dist/drizzle/0001_messages_content_tsv.na.md +0 -18
- package/dist/drizzle/meta/0000_snapshot.json +0 -2813
- package/dist/drizzle/meta/0001_snapshot.json +0 -2820
- package/dist/drizzle/meta/0002_snapshot.json +0 -2827
- package/dist/drizzle/meta/0003_snapshot.json +0 -2834
- package/dist/drizzle/meta/0004_snapshot.json +0 -2842
- package/dist/drizzle/meta/0005_snapshot.json +0 -2849
- package/dist/drizzle/meta/0006_snapshot.json +0 -2865
- package/dist/drizzle/meta/0007_snapshot.json +0 -2879
- package/dist/drizzle/meta/0008_snapshot.json +0 -2886
- package/dist/drizzle/meta/0009_snapshot.json +0 -2901
- package/dist/drizzle/meta/0010_snapshot.json +0 -2908
- package/dist/drizzle/meta/0011_snapshot.json +0 -2915
- package/dist/drizzle/meta/0012_snapshot.json +0 -2934
- package/dist/drizzle/meta/0013_snapshot.json +0 -2954
- package/dist/drizzle/meta/0014_snapshot.json +0 -2959
- package/dist/handlers-C8EtpSqK.mjs +0 -41
- package/dist/package-Be2Ez4vv.mjs +0 -1
- package/dist/package-OE9dMQsq.mjs +0 -1
- package/dist/primitive-runtime-Xrc9xh6p.mjs +0 -1
- package/dist/schemas-CSUwpaNm.mjs +0 -1
- package/dist/session-KnewDVxt.mjs +0 -39
- /package/dist/{provider-context-lfG0BpqX.mjs → provider-context-wp4VSJFI.mjs} +0 -0
- /package/dist/{shared-schemas-CKe2uN4-.mjs → shared-schemas-DYL7a-No.mjs} +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import{TurnStorageSubjects as e}from"./services/turn/namespace.mjs";import{agents as t}from"./services/session/storage/schema.mjs";import{n,t as r}from"./schema-CzhOc7TV.mjs";import{n as i}from"./namespace-Dfq6MDN9.mjs";import{SessionStorageSubjects as a}from"./services/session/storage/namespace.mjs";import{n as o}from"./namespace-ENv7H7Na.mjs";import{r as s,t as c}from"./provider-context-wp4VSJFI.mjs";import{AdapterRuntimeSubjects as l}from"./services/adapter-runtime/namespace.mjs";import{ProviderStorageSubjects as u}from"./services/settings/storage/providers-namespace.mjs";import{ExecutionTargetSubjects as d}from"./services/execution-target/namespace.mjs";import{MessageStorageSubjects as f}from"./services/session/messages/namespace.mjs";import"./services/session/turns/namespace.mjs";import{ExtractedContextSchema as p}from"./services/compression/schemas.mjs";import{PreferencesSubjects as m}from"./services/preferences/storage-namespace.mjs";import{z as h}from"zod";import{AdapterSubjects as g,AgentResolutionSubjects as _,AgentStatusSchema as v,AgentSubjects as y,MakaioSessionAgentSchema as b,SessionSubjects as x,TurnInitiatorSchema as S,TurnUsageSchema as ee}from"@makaio/framework/contracts";import{createStorageNamespaceDefinition as C}from"@makaio/framework/storage";import{defineDialectSchema as te,getRawSqlExecutor as ne,getStorageEngine as re,resolveSchema as w}from"@makaio/framework/storage/drizzle";import{and as T,asc as E,desc as ie,eq as D,sql as ae}from"drizzle-orm";import{HookAbortError as O}from"@makaio/framework/hooks";import{AdapterRuntimeSubjects as oe}from"@makaio/framework/services/adapter-runtime";import{buildProviderContext as se}from"@makaio/framework/services/provider-context";const k=C(`agent`,{schemas:{get:{request:h.object({agentId:h.string()}),response:h.object({agent:b.nullable()})},set:{request:h.object({agentId:h.string(),agent:b}),response:h.object({success:h.boolean()})},delete:{request:h.object({agentId:h.string()}),response:h.object({success:h.boolean()})},listByAdapter:{request:h.object({adapterName:h.string(),status:h.enum([`idle`,`active`,`dead`,`disposed`,`all`]).optional()}),response:h.object({agents:h.array(b)})},listBySession:{request:h.object({sessionId:h.string()}),response:h.object({agents:h.array(b)})},updateStatus:{request:h.object({agentId:h.string(),status:v}),response:h.object({success:h.boolean()})},updateActivity:{request:h.object({agentId:h.string(),lastActivityAt:h.number()}),response:h.object({success:h.boolean()})},updateRuntime:{request:h.object({agentId:h.string(),adapterId:h.string().optional(),cwd:h.string().optional(),model:h.string().optional(),allowedDirectories:h.array(h.string()).optional(),providerConfigId:h.string().optional()}).refine(e=>e.adapterId!==void 0||e.cwd!==void 0||e.model!==void 0||e.allowedDirectories!==void 0||e.providerConfigId!==void 0,{message:`At least one runtime field (adapterId, cwd, model, allowedDirectories, or providerConfigId) must be provided`}),response:h.object({success:h.boolean()})}},extensions:{drizzle:{agents:t}}}),A=k.subjects;async function j(e,t,n){let{adapterId:r}=await e.request(l.resolveId,{adapterName:t,...n!==void 0&&{machineId:n}});return r}async function ce(e,t,n){if(!(!t||!n))try{let{config:r}=await e.request(o.getProviderConfig,{id:t});if(!r)return;let{provider:i}=await e.request(u.get,{id:r.definitionId}),a=i?.availableModels?.find(e=>e.name===n);return a?{supportedReasoningLevels:a.supportedReasoningLevels}:void 0}catch{return}}async function le(e,t){let{executionTarget:n}=await e.request(d.resolve,t);return n}async function M(e,t){let{sessionId:n,limit:r}=t,a=[],o=!1,s=!1,c;do{let{events:t,nextCursor:l}=await e.request(i.getEvents,{sessionId:n,options:{limit:1e4,...c&&{after:c}}});for(let i of t){if(i.type===`squash`){o=!0,a.length=0;let e=i.payload,t={messageId:`squash-${i.eventId}`,sessionId:n,turnId:null,role:`assistant`,contentText:e.summaryJson,blocks:[{type:`text`,content:e.summaryJson}],timestamp:i.timestamp};a.push(t)}else if(i.type===`message`){let t=i.payload,{message:n}=await e.request(f.get,{messageId:t.messageId});n&&a.push(n)}if(r&&a.length>=r){s=!0;break}}if(r&&a.length>=r)break;c=l??void 0}while(c);return{messages:a,hasSquashBoundary:o,sessionChain:[n],truncated:s,incomplete:!1}}const N=new class{actions=new Map;register(e){if(this.actions.has(e.id))throw Error(`Action already registered: ${e.id}`);this.actions.set(e.id,e)}get(e){return this.actions.get(e)}getAll(){return Array.from(this.actions.values())}getByCategory(e){return this.getAll().filter(t=>t.category===e)}reset(){this.actions.clear()}};async function P(e,t,n){let r=e,i,a;for(let e of t){let t=N.get(e.actionId);if(!t)throw Error(`Unknown action: ${e.actionId}`);let o={...n,...e.options},s=await t.execute(r,o);if(s.kind===`messages`)r=s.messages;else{i=s.json,a=s.tokenEstimate,r=[];break}}if(!i&&r.length>0){let e=r.reduce((e,t)=>e+JSON.stringify(t.blocks).length,0);a=Math.ceil(e/4)}return{messages:r,contextJson:i,tokenEstimate:a}}function F(e){return e.map(e=>({...e,blocks:e.blocks.filter(e=>e.type!==`reasoning`)}))}const ue={id:`strip-reasoning`,label:`Strip Reasoning`,description:`Remove reasoning/thinking blocks from messages`,category:`transformation`,async execute(e){return{kind:`messages`,messages:F(e)}}};function I(e){return e.map(e=>({...e,blocks:e.blocks.map(e=>{if(e.type===`tool_output`){let t=e.output.length;return{...e,output:`[output removed - ${t} chars]`}}return e})}))}const de={id:`strip-tool-outputs`,label:`Strip Tool Outputs`,description:`Remove tool output contents, keep structure`,category:`transformation`,async execute(e){return{kind:`messages`,messages:I(e)}}};async function L(e,t){let n=[],r=[],i=[],o=!1,s=!1,c=!1,l=[],u,d=t,f;for(;d;){let n=await e.request(a.get,{sessionId:d});if(!n.session){c=!0;break}d===t&&(u=n.session.forkTransforms??void 0),l.unshift({sessionId:d,forkPointMessageId:n.session.forkPointMessageId??void 0}),f=n.session.parentSessionId??void 0,d=f}for(let t=0;t<l.length;t++){let{sessionId:a}=l[t],c=t===l.length-1,u=l[t+1]?.forkPointMessageId;n.push(a);let d=await M(e,{sessionId:a});if(d.hasSquashBoundary&&(o=!0,c||(r.length=0)),d.truncated&&(s=!0),c)i=d.messages;else for(let e of d.messages)if(r.push(e),u&&e.messageId===u)break}return u&&(r=await fe(r,u)),{messages:[...r,...i],hasSquashBoundary:o,sessionChain:n,truncated:s,incomplete:c}}async function fe(e,t){if(t.segments?.length){let n=t.segments[0].fromMessageId,r=t.segments[t.segments.length-1].toMessageId,i=e.findIndex(e=>e.messageId===n),a=e.findIndex(e=>e.messageId===r);if(i===-1||a===-1||i>a)return R(e,t.segments);let o=e.slice(0,i),s=e.slice(i,a+1),c=e.slice(a+1),l=R(s,t.segments);return[...o,...l,...c]}let n=e;if(t.removedMessageIds?.length){let e=new Set(t.removedMessageIds);n=n.filter(t=>!e.has(t.messageId))}return t.appliedPipeline?.length&&(n=(await P(n,t.appliedPipeline)).messages),n}function pe(e,t){let n=e;return t.stripReasoning&&(n=F(n)),t.stripToolOutputs&&(n=I(n)),n}function R(e,t){let n=new Map;for(let t=0;t<e.length;t++)n.set(e[t].messageId,t);let r=[];for(let i of t){let t=n.get(i.fromMessageId),a=n.get(i.toMessageId);if(t===void 0||a===void 0){console.warn(`[getFullConversation] Skipping segment with missing boundary IDs`,{segmentKey:`${i.fromMessageId}..${i.toMessageId}`,fromMessageId:i.fromMessageId,toMessageId:i.toMessageId,hasFrom:t!==void 0,hasTo:a!==void 0});continue}let o=e.slice(t,a+1),s;switch(i.policy){case`exclude`:s=[];break;case`summarize`:if(i.summaryText){if(o.length===0)throw Error(`Cannot create synthetic summary message for empty segment: ${i.fromMessageId}..${i.toMessageId}`);s=[{messageId:`summary-${i.fromMessageId}-${i.toMessageId}`,turnId:null,sessionId:o[0].sessionId,role:`assistant`,contentText:i.summaryText,blocks:[{type:`text`,content:i.summaryText}],timestamp:o[o.length-1].timestamp}]}else s=o;break;default:s=o;break}if((i.policy!==`summarize`||!i.summaryText)&&i.overrides&&Object.keys(i.overrides).length>0){let e=new Set(Object.entries(i.overrides).filter(([,e])=>e===`exclude`).map(([e])=>e));s=s.filter(t=>!e.has(t.messageId))}s=pe(s,i),r.push(...s)}return r}function z(e){return{role:e.role,blocks:e.blocks}}async function me(e,t){return{messageHistory:(await L(e,t.sessionId)).messages.map(z),isFirstTurn:!0}}async function he(e,t,n,r){if(t.cwd===n)return{swapped:!1};let i=await e.request(y.cwd.change,{agentId:t.agentId,adapterId:t.adapterId,adapterName:t.adapterName,adapterSessionId:t.adapterSessionId??``,sessionId:t.sessionId,newCwd:n,...r?.skipWarning?{skipWarning:!0}:{}});if(!i.success)throw Error(`Failed to change cwd for agent ${t.agentId}: ${i.reason??`unknown`}`);return i.previousCwd?(t.cwd=n,{swapped:!0,previousCwd:i.previousCwd}):(t.cwd=n,{swapped:!1})}async function ge(e,t,n,r){let i=n===void 0||t.model===n,a=r?.reasoningEffort===void 0,o=!r?.providerConfigId;if(i&&a&&o)return{changed:!1};let c=r?.providerConfigId?await s(e,r.providerConfigId):void 0,l=await e.request(y.model.change,{agentId:t.agentId,adapterId:t.adapterId,adapterName:t.adapterName,adapterSessionId:t.adapterSessionId??``,...n!==void 0&&{newModel:n},...r?.reasoningEffort!==void 0&&{reasoningEffort:r.reasoningEffort},...r?.skipWarning!==void 0&&{skipWarning:r.skipWarning},...c!==void 0&&{providerContext:c}});if(!l.success)throw Error(`Failed to change model for agent ${t.agentId}: ${l.reason??`unknown`}`);return n!==void 0&&(t.model=n),{changed:!0,swapped:l.swapped??!1}}async function _e(e,t,n){let r=[],i=new Set;for(let a of t){let t=await e.requestOptional(g.getAgent,{adapterId:a.adapterId,agentId:a.agentId});if(t.handled&&t.data.agent!==null)r.push(a);else{let t=await B(e,a,n);r.push(t),i.add(t.agentId)}}return{verifiedAgents:r,recoveredAgentIds:i}}async function ve(e,t,n){let r=await L(e,t.sessionId),i=n?.pipeline??[];return{messageHistory:(i.length>0?(await P(r.messages,i)).messages:r.messages).map(z),isFirstTurn:!0}}async function B(e,t,n){let r=await j(e,t.adapterName).catch(()=>t.adapterId);return await e.request(g.rehydrateAgent,{adapterId:r,agentId:t.agentId,cwd:n.cwd,model:n.model??t.model,...t.adapterSessionId!==void 0&&{adapterSessionId:t.adapterSessionId}}),t.adapterId=r,t}const ye=n.postgres,V=te({turns:r},{turns:ye});function be(e){if(e)try{let t=JSON.parse(e),n=ee.safeParse(t);return n.success?n.data:void 0}catch{return}}function H(e){return e?JSON.stringify(e):null}function xe(e){if(e)try{let t=JSON.parse(e),n=S.safeParse(t);return n.success?n.data:void 0}catch{return}}function U(e){let t=xe(e.initiator);return{turnId:e.turnId,sessionId:e.sessionId,turnNumber:e.turnNumber,startedAt:e.startedAt,completedAt:e.completedAt??void 0,status:e.status,error:e.error??void 0,usage:be(e.usage),...t!==void 0&&{initiator:t}}}function Se(e,t){let n=[Ce(e,t),we(e,t),Te(e,t),Ee(e,t),De(e,t),Oe(e,t),ke(e,t)];return()=>n.forEach(e=>e())}function Ce(t,n){let r=ne(n),i=re(r.dialect),{turns:a}=w(n,V);return t.on(e.create,async e=>{let{sessionId:t,turnId:o,initiator:s}=e.payload,c=Date.now(),l=o??crypto.randomUUID(),u=H(s);for(let e=1;;e++)try{await r.run(ae`
|
|
2
|
+
WITH next_num AS (
|
|
3
|
+
SELECT COALESCE(MAX(turn_number), 0) + 1 AS n
|
|
4
|
+
FROM turns
|
|
5
|
+
WHERE session_id = ${t}
|
|
6
|
+
)
|
|
7
|
+
INSERT INTO turns (turn_id, session_id, turn_number, started_at, status, initiator)
|
|
8
|
+
SELECT ${l}, ${t}, n, ${c}, ${`active`}, ${u}
|
|
9
|
+
FROM next_num
|
|
10
|
+
`);break}catch(t){if(e>=32||!i.capabilities.maxCounterAssignmentRaces||!i.errors.isUniqueViolationError(t,`uniq_turns_session_number`))throw t}let[d]=await n.select({turnNumber:a.turnNumber}).from(a).where(D(a.turnId,l)),f={turnId:l,sessionId:t,turnNumber:d.turnNumber,startedAt:c,status:`active`,...s!==void 0&&{initiator:s}};e.setResult({turn:f})})}function we(t,n){let{turns:r}=w(n,V);return t.on(e.complete,async e=>{let{turnId:t,status:i,expectedStatus:a,error:o,usage:s}=e.payload,c={completedAt:Date.now(),status:i,error:o??null};s!==void 0&&(c.usage=JSON.stringify(s));let l=a?T(D(r.turnId,t),D(r.status,a)):D(r.turnId,t),u=await n.update(r).set(c).where(l).returning();if(u.length>0){e.setResult({turn:U(u[0]),transitioned:!0});return}let[d]=await n.select().from(r).where(D(r.turnId,t)).limit(1);if(!d)throw Error(`Turn not found: ${t}`);e.setResult({turn:U(d),transitioned:!1})})}function Te(t,n){let{turns:r}=w(n,V);return t.on(e.set,async e=>{let{turn:t}=e.payload,i={turnId:t.turnId,sessionId:t.sessionId,turnNumber:t.turnNumber,startedAt:t.startedAt,completedAt:t.completedAt??null,status:t.status,error:t.error??null,usage:t.usage?JSON.stringify(t.usage):null,initiator:H(t.initiator)};await n.insert(r).values(i).onConflictDoUpdate({target:r.turnId,set:i}),e.setResult({turn:t})})}function Ee(t,n){let{turns:r}=w(n,V);return t.on(e.get,async e=>{let{turnId:t}=e.payload,[i]=await n.select().from(r).where(D(r.turnId,t)).limit(1);e.setResult({turn:i?U(i):null})})}function De(t,n){let{turns:r}=w(n,V);return t.on(e.getBySession,async e=>{let{sessionId:t,limit:i,status:a}=e.payload,o=n.select().from(r).where(D(r.sessionId,t)).orderBy(E(r.turnNumber));a&&(o=n.select().from(r).where(T(D(r.sessionId,t),D(r.status,a))).orderBy(E(r.turnNumber))),i&&(o=o.limit(i));let s=await o;e.setResult({turns:s.map(U)})})}function Oe(t,n){let{turns:r}=w(n,V);return t.on(e.getActive,async e=>{let{sessionId:t}=e.payload,[i]=await n.select().from(r).where(T(D(r.sessionId,t),D(r.status,`active`))).orderBy(ie(r.turnNumber)).limit(1);e.setResult({turn:i?U(i):null})})}function ke(t,n){let{turns:r}=w(n,V);return t.on(e.listActive,async e=>{let t=await n.select().from(r).where(D(r.status,`active`)).orderBy(E(r.startedAt));e.setResult({turns:t.map(U)})})}function Ae(e){let t=new Map,n=new Map,r=new Map,i=je(t,n,r),a=[Me(e,i,r),Ne(e,t,i),Pe(e,i),Fe(e,t),Ie(e,t,n),Le(e,t,n),Re(e,t)];return()=>a.forEach(e=>e())}function je(e,t,n){return r=>{e.set(r.turnId,r);let i=t.get(r.sessionId)??[];i.includes(r.turnId)||i.push(r.turnId),t.set(r.sessionId,i);let a=n.get(r.sessionId)??0;r.turnNumber>a&&n.set(r.sessionId,r.turnNumber)}}function Me(t,n,r){return t.on(e.create,e=>{let{sessionId:t,turnId:i,initiator:a}=e.payload,o=Date.now(),s={turnId:i??crypto.randomUUID(),sessionId:t,turnNumber:(r.get(t)??0)+1,startedAt:o,status:`active`,...a!==void 0&&{initiator:a}};n(s),e.setResult({turn:s})})}function Ne(t,n,r){return t.on(e.complete,e=>{let{turnId:t,status:i,expectedStatus:a,error:o,usage:s}=e.payload,c=n.get(t);if(!c)throw Error(`Turn not found: ${t}`);if(a&&c.status!==a){e.setResult({turn:c,transitioned:!1});return}let l={...c,completedAt:Date.now(),status:i,error:o??void 0,usage:s??c.usage};r(l),e.setResult({turn:l,transitioned:!0})})}function Pe(t,n){return t.on(e.set,e=>{let{turn:t}=e.payload;n(t),e.setResult({turn:t})})}function Fe(t,n){return t.on(e.get,e=>{e.setResult({turn:n.get(e.payload.turnId)??null})})}function Ie(t,n,r){return t.on(e.getBySession,e=>{let{sessionId:t,status:i,limit:a}=e.payload,o=(r.get(t)??[]).map(e=>n.get(e)).filter(e=>!!e);i&&(o=o.filter(e=>e.status===i)),o.sort((e,t)=>e.turnNumber-t.turnNumber),a&&(o=o.slice(0,a)),e.setResult({turns:o})})}function Le(t,n,r){return t.on(e.getActive,e=>{let{sessionId:t}=e.payload,i=(r.get(t)??[]).map(e=>n.get(e)).filter(e=>!!e).filter(e=>e.status===`active`).sort((e,t)=>t.turnNumber-e.turnNumber).at(0);e.setResult({turn:i??null})})}function Re(t,n){return t.on(e.listActive,e=>{let t=[...n.values()].filter(e=>e.status===`active`).sort((e,t)=>e.startedAt-t.startedAt);e.setResult({turns:t})})}function W(e){return{source:e.source,...e.sourceId!==void 0&&{sourceId:e.sourceId}}}var G=class{turnId;sessionId;turnNumber;startedAt;_initiator;_agentIds;_messageIds=[];_completedAgents=new Set;_erroredAgents=new Map;constructor(e){if(!Number.isInteger(e.turnNumber)||e.turnNumber<1)throw Error(`turnNumber must be a positive integer`);this.turnId=e.turnId??crypto.randomUUID(),this.sessionId=e.sessionId,this.turnNumber=e.turnNumber,this.startedAt=e.startedAt??Date.now(),this._initiator=Object.freeze(W(e.initiator??{source:`user`})),this._agentIds=Object.freeze([...e.agentIds])}get agentIds(){return this._agentIds}get initiator(){return W(this._initiator)}get messageIds(){return this._messageIds}get completedAgents(){return this._completedAgents}get erroredAgents(){return this._erroredAgents}addMessage(e){this._messageIds.push(e)}markAgentCompleted(e){return this._completedAgents.add(e),this.checkCompletion()}markAgentErrored(e,t){return this._erroredAgents.set(e,t),this.checkCompletion()}hasAgent(e){return this._agentIds.includes(e)}isComplete(){return this._completedAgents.size+this._erroredAgents.size>=this._agentIds.length}getResult(){return{success:this._erroredAgents.size===0,errors:Array.from(this._erroredAgents.values())}}getContext(){if(this._messageIds.length===0)throw Error(`Turn ${this.turnId} has no messages yet`);return{turnId:this.turnId,messageId:this._messageIds[this._messageIds.length-1]}}getContextForMessage(e){return{turnId:this.turnId,messageId:e}}checkCompletion(){return this.isComplete()?{turnComplete:!0,result:this.getResult()}:{turnComplete:!1}}};function K(e){return typeof e==`string`?e:(Array.isArray(e.blocks)?e.blocks:[e.blocks]).filter(e=>e.type===`text`).map(e=>e.content).join(`
|
|
11
|
+
`)}function ze(e){return e}function Be(e){return typeof e==`string`?[{type:`text`,content:e}]:(Array.isArray(e.blocks)?e.blocks:[e.blocks]).map(ze)}async function Ve(e,t,n,r){let{session:i}=await e.request(x.get,{sessionId:t});if(i){if(i.status!==`active`)throw Error(`[getOrCreateSession] Session is not active: ${t}`);return{sessionId:t,session:i}}await e.request(x.create,{sessionId:t,originWindowId:r});let{session:a}=await e.request(x.get,{sessionId:t});if(!a)throw Error(`[getOrCreateSession] Failed to create session: ${t}`);return{sessionId:t,session:a}}function He(e,t){if(t===void 0){let t=e.agents.find(t=>t.agentId===e.leadAgentId);if(!t)throw Error(`[resolveTargetAgents] Lead agent not found: ${e.leadAgentId}`);return[t]}if(t===`all`)return e.agents;let n=new Set(t);return e.agents.filter(e=>n.has(e.agentId))}function Ue(e,t){for(let n of e.values())if(n.hasAgent(t))return n}function We(e,t){if(e===`extension`){let e=t?.trim();if(!e)throw Error(`extensionId is required when source is "extension"`);return{source:`extension`,sourceId:e}}return e?{source:e}:{source:`user`}}function q(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}async function J(e,t,n,r){let{adapterName:i}=await e.request(l.resolveName,{adapterId:t});if(n&&i!==n)throw Error(`${r}adapterName "${n}" does not match adapterId "${t}"`);return i}async function Ge(e,t,n,r,i,a,o,s,c,l){let u=n.map(async n=>{try{await e.request(y.sendMessage,{agentId:n.agentId,adapterId:n.adapterId,message:r,deliveryMode:o,messageId:i,turnId:a.turnId,sessionId:t.sessionId,sessionContext:c,...l!==void 0&&{responseSchema:l}}),await e.emit(x.user_message.acknowledged,{sessionId:a.sessionId,turnId:a.turnId,turnNumber:a.turnNumber,messageId:i,agentId:n.agentId})}catch(t){if(t instanceof O){await e.emit(x.user_message.completed,{sessionId:a.sessionId,turnId:a.turnId,turnNumber:a.turnNumber,messageId:i,agentId:n.agentId,outcome:`cancelled`});let t=a.markAgentCompleted(n.agentId);t.turnComplete&&await s(a,t.result);return}let r=t instanceof Error?t.message:String(t),o=a.markAgentErrored(n.agentId,r);await e.emit(x.user_message.completed,{sessionId:a.sessionId,turnId:a.turnId,turnNumber:a.turnNumber,messageId:i,agentId:n.agentId,outcome:`error`,error:r}),o.turnComplete&&await s(a,o.result)}});await Promise.all(u)}function Ke(e){return e.on(x.abandon,async t=>{let{parentSessionId:n,childSessionId:r}=t.payload,{session:i}=await e.request(x.get,{sessionId:r});if(!i)throw Error(`[abandon-handler] Child session not found: ${r}`);if(i.parentSessionId!==n)throw Error(`[abandon-handler] Invalid parent-child relationship: session ${r} is not a child of ${n}`+(i.parentSessionId?` (actual parent: ${i.parentSessionId})`:` (session has no parent)`));if(!(await e.request(x.close,{sessionId:r})).success)throw Error(`[abandon-handler] Failed to close child session: ${r}`);await e.emit(x.abandoned,{sessionId:r,parentSessionId:n}),t.setResult({success:!0})})}function qe(e,t,n){return e.on(x.agent.attach,async r=>{let{sessionId:i,agent:a,initialMessage:o,role:s}=r.payload,l=Je(a),u=await et(e,i),d=await Xe(e,i,o,a),{adapterName:f,adapterId:p}=await Ye(e,a.kind===`adapter`&&`adapterName`in a?a.adapterName:d?.adapterName,a.kind===`adapter`&&`adapterId`in a?a.adapterId:void 0,n),{providerConfigId:m,providerContext:h}=await Ze(e,a.providerConfigId,d),{runtimeOptions:_,mergedModel:v,mergedCwd:y}=$e(l,d,h),b=tt(u,s),x=rt(p,i,o,b,_,nt(u),d?.harnessId);h!==void 0&&await c(e,h);let S=await e.request(g.startAgent,x);if(!S.success)throw Error(`[attach-handler] Failed to start agent: ${S.message}`);let ee=a.kind===`persona`?a.personaId:void 0;await at(e,S,{adapterName:f,sessionId:i,role:b,timestamp:Date.now(),personaId:ee,profileId:d?.profileId,harnessId:d?.harnessId,providerConfigId:m,compressionMode:d?.compressionMode,model:v,cwd:y});let C=o&&S.messageId?await ot(e,t,i,S.agentId,S.messageId,o):void 0;r.setResult({agentId:S.agentId,adapterSessionId:S.adapterSessionId,role:b,...C&&{messageId:C.messageId,turnId:C.turnId}})})}function Je(e){return{...e.model!==void 0&&{model:e.model},...e.reasoningEffort!==void 0&&{reasoningEffort:e.reasoningEffort},...e.cwd!==void 0&&{cwd:e.cwd},...e.allowedTools!==void 0&&{allowedTools:e.allowedTools},...e.disallowedTools!==void 0&&{disallowedTools:e.disallowedTools},...e.allowedDirectories!==void 0&&{allowedDirectories:e.allowedDirectories},...e.systemPrompt!==void 0&&{systemPrompt:e.systemPrompt}}}async function Ye(e,t,n,r){let i=q(t),a=q(n);if(!i&&!a)throw Error(`[attach-handler] adapterName or adapterId is required — provide one explicitly or via persona/profile/virtualModel resolution`);if(a)return{adapterName:await J(e,a,i,`[attach-handler] `),adapterId:a};let o=i;return{adapterName:o,adapterId:await j(e,o,r)}}async function Xe(e,t,n,r){if(r.kind===`adapter`)return null;let i=n?K(n):void 0;return e.request(_.resolve,{selection:r,context:{sessionId:t,promptText:i}})}async function Ze(e,t,n){let r=t??n?.providerConfigId;return{providerConfigId:r,providerContext:r===void 0?void 0:await s(e,r)}}function Qe(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function $e(e,t,n){let r=e.model??t?.model,i=e.cwd;return{runtimeOptions:Qe({model:r,reasoningEffort:e.reasoningEffort??t?.reasoningEffort,cwd:i,allowedTools:e.allowedTools??t?.allowedTools,disallowedTools:e.disallowedTools??t?.disallowedTools,allowedDirectories:e.allowedDirectories??t?.allowedDirectories,systemPrompt:e.systemPrompt??t?.systemPrompt,providerContext:n}),mergedModel:r,mergedCwd:i}}async function et(e,t){let{session:n}=await e.request(x.get,{sessionId:t});if(!n)throw Error(`[attach-handler] Session not found: ${t}`);if(n.status!==`active`)throw Error(`[attach-handler] Session is not active: ${t}`);return n}function tt(e,t){let n=e.agents.length===0;return t??(n?`lead`:`member`)}function nt(e){if(e.isImported&&e.isOrchestrated===!1&&e.adapterSessionId)return e.adapterSessionId}function rt(e,t,n,r,i,a,o){return a?{mode:`resume`,adapterId:e,sessionId:t,adapterSessionId:a,role:r,...i,...n!==void 0&&{initialMessage:n},...o!==void 0&&{harnessId:o}}:{adapterId:e,sessionId:t,role:r,...i,...n!==void 0&&{initialMessage:n},...o!==void 0&&{harnessId:o}}}async function it(e,t){!t.personaId&&!t.profileId&&!t.harnessId&&!t.providerConfigId||await e.request(A.set,{agentId:t.agentId,agent:{agentId:t.agentId,adapterId:t.adapterId,adapterName:t.adapterName,sessionId:t.sessionId,role:t.role,status:`idle`,personaId:t.personaId,profileId:t.profileId,harnessId:t.harnessId,providerConfigId:t.providerConfigId,createdAt:t.timestamp,lastActivityAt:t.timestamp,...t.model!==void 0&&{model:t.model},...t.cwd!==void 0&&{cwd:t.cwd},...t.compressionMode!==void 0&&{compressionMode:t.compressionMode}}})}async function at(e,t,n){try{await it(e,{agentId:t.agentId,adapterId:t.adapterId,adapterName:n.adapterName,sessionId:n.sessionId,role:n.role,timestamp:n.timestamp,personaId:n.personaId,profileId:n.profileId,harnessId:n.harnessId,providerConfigId:n.providerConfigId,compressionMode:n.compressionMode,model:n.model,cwd:n.cwd})}catch(r){console.error(`[attach-handler] Failed to persist agent identity, rolling back started agent`,{sessionId:n.sessionId,agentId:t.agentId,adapterId:t.adapterId,error:r});try{await e.request(g.stopAgent,{adapterId:t.adapterId,agentId:t.agentId})}catch(e){console.error(`[attach-handler] Failed to rollback started agent after identity persistence failure`,{sessionId:n.sessionId,agentId:t.agentId,adapterId:t.adapterId,error:e})}throw r}}async function ot(t,n,r,i,a,o){let{turn:s}=await t.request(e.create,{sessionId:r}),c=new G({sessionId:r,agentIds:[i],turnId:s.turnId,turnNumber:s.turnNumber});return c.addMessage(a),n.set(r,c),await t.emit(x.turn.started,{sessionId:r,turnId:c.turnId,turnNumber:c.turnNumber,messageId:a,agentIds:[...c.agentIds]}),await t.emit(x.user_message.sent,{sessionId:r,turnId:c.turnId,turnNumber:c.turnNumber,messageId:a,content:o,agentIds:[...c.agentIds]}),await t.emit(x.user_message.acknowledged,{sessionId:r,turnId:c.turnId,turnNumber:c.turnNumber,messageId:a,agentId:i}),{messageId:a,turnId:c.turnId}}const st={id:`messages-to-context`,label:`Export as Context`,description:`Convert messages to context JSON (final step)`,category:`extraction`,async execute(e){let t=e.map(e=>({role:e.role,content:e.blocks.map(e=>e.type===`text`?e.content:e.type===`reasoning`?`[reasoning: ${e.content}]`:e.type===`tool_call`?`[tool: ${e.name}]`:e.type===`tool_output`?e.output:``).filter(Boolean).join(`
|
|
12
|
+
`)})),n=t.reduce((e,t)=>e+t.content.length,0),r=Math.ceil(n/4);return{kind:`context`,json:{type:`compressed-messages`,messageCount:e.length,messages:t},tokenEstimate:r}}},ct={id:`llm-summarize`,label:`Summarize`,description:`LLM-generated summary of selected messages`,category:`transformation`,async execute(e){return{kind:`messages`,messages:e}}};function lt(e){let t=[];for(let n of e){let e=n.blocks.filter(e=>e.type===`text`).map(e=>e.content).join(`
|
|
13
|
+
`);e&&(n.role===`user`?t.push(`[human]\n${e}\n[/human]`):n.role===`assistant`&&t.push(`[assistant]\n${e}\n[/assistant]`))}return`<conversation>\n${t.join(`
|
|
14
|
+
|
|
15
|
+
`)}\n</conversation>`}function ut(e){return{id:`llm-extract`,label:`LLM Extract`,description:`Extract structured context using a cheap LLM model (requires virtualModelId in options)`,category:`extraction`,async execute(t,n){let r={kind:`messages`,messages:t},i=n?.virtualModelId;if(typeof i!=`string`)return r;let a=(typeof n?.sessionId==`string`&&n.sessionId.length>0?n.sessionId:void 0)??t[0]?.sessionId;if(typeof a!=`string`||a.length===0)return r;try{let n=await e.request(_.resolve,{selection:{kind:`virtual-model`,virtualModelId:i},context:{sessionId:a}}),{adapterId:r}=await e.request(oe.resolveId,{adapterName:n.adapterName}),o=lt(t),s=n.providerConfigId?await se(e,n.providerConfigId):void 0,{text:c}=await e.request(g.infer,{adapterId:r,prompt:o,model:n.model,systemPrompt:`You are a context extraction assistant. Analyze the following conversation and extract structured information. Respond with ONLY valid JSON matching this exact schema — no markdown, no explanation, no code fences:
|
|
16
|
+
|
|
17
|
+
{
|
|
18
|
+
"resolved_items": ["string — completed work with resolution details"],
|
|
19
|
+
"known_bugs": [{ "issue": "string", "location": "string", "impact": "string" }],
|
|
20
|
+
"todos": [{ "issue": "string", "location": "string", "priority": "high|medium|low" }],
|
|
21
|
+
"key_decisions_and_rationale": ["string — decision with reasoning"],
|
|
22
|
+
"technical_details": {
|
|
23
|
+
"files": ["string — file paths mentioned"],
|
|
24
|
+
"schemas": {},
|
|
25
|
+
"apis": ["string — API endpoints or contracts"],
|
|
26
|
+
"config": {}
|
|
27
|
+
},
|
|
28
|
+
"constraints_and_requirements": ["string — constraints or non-negotiable requirements"],
|
|
29
|
+
"current_state": "string — one paragraph summary of where work stands now",
|
|
30
|
+
"roadmap": ["string — future work items in priority order"],
|
|
31
|
+
"data_flows": ["string — key data movement patterns"],
|
|
32
|
+
"component_interactions": { "ComponentName": "string — description of its role" },
|
|
33
|
+
"key_files": { "filepath": "string — what this file does" },
|
|
34
|
+
"helpful_hint": ["string — quick reference hints for resuming work"]
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
Rules:
|
|
38
|
+
- Omit array items you have no evidence for (prefer empty array over fabrication).
|
|
39
|
+
- current_state MUST be present; write "No summary available" if you cannot determine it.
|
|
40
|
+
- Extract only facts stated or clearly implied in the conversation. Do not invent.
|
|
41
|
+
- key_files and component_interactions should only include items explicitly mentioned.`,...s!==void 0&&{providerContext:s}}),l=c.trim().replace(/^```(?:json)?\s*/i,``).replace(/\s*```$/i,``).trim(),u=JSON.parse(l),d=p.parse(u),f=Math.ceil(JSON.stringify(d).length/4);return{kind:`context`,json:{...d},tokenEstimate:f}}catch(e){return console.warn(`[llm-extract] action failed`,{action:`llm-extract`,sessionId:a,error:e}),r}}}}let Y=!1,X=!1;function Z(e){Y||(Y=!0,N.register(ue),N.register(de),N.register(st),N.register(ct)),e&&!X&&(X=!0,N.register(ut(e)))}function dt(){Y=!1,X=!1}function ft(e){return Z(e),e.on(x.compress,async t=>{let{sessionId:n,pipeline:r}=t.payload,{messages:a}=await e.request(f.getBySession,{sessionId:n,limit:1e4}),o=await P(a,r,{sessionId:n});if(!o.contextJson)throw Error(`[compress-handler] Compress pipeline must produce context JSON (sessionId=${n})`);let s=a.map(e=>e.messageId),c=Math.ceil(a.reduce((e,t)=>e+JSON.stringify(t.blocks).length/4,0)),l=crypto.randomUUID();await e.request(i.append,{event:{sessionId:n,eventId:l,timestamp:Date.now(),type:`squash`,payload:{summaryJson:JSON.stringify(o.contextJson),tokensBefore:c,tokensAfter:o.tokenEstimate,compressedMessageIds:s}}}),await e.emit(x.compressed,{sessionId:n,eventId:l}),t.setResult({eventId:l,contextJson:o.contextJson,tokensBefore:c,tokensAfter:o.tokenEstimate})})}async function pt(e,t,n,r){if(!n.segments?.length)return!1;let i=[],a;do{let{messages:n,nextCursor:o}=await e.request(f.getBySession,{sessionId:t,order:`asc`,limit:200,after:a});i.push(...n),a=r&&n.some(e=>e.messageId===r)?void 0:o??void 0}while(a);if(i.length===0)throw Error(`[fork-handler] Segment transforms require at least one source message (sourceSessionId=${t})`);let o=i;if(r){let e=i.findIndex(e=>e.messageId===r);if(e===-1)throw Error(`[fork-handler] Fork point message not found in source message list: ${r} (sourceSessionId=${t})`);o=i.slice(0,e+1)}let s=new Map;o.forEach((e,t)=>{s.set(e.messageId,t)});let c=-1;for(let e of n.segments){if(!e.fromMessageId||!e.toMessageId)throw Error(`[fork-handler] Segment must have fromMessageId and toMessageId (sourceSessionId=${t})`);let n=s.get(e.fromMessageId),r=s.get(e.toMessageId);if(n===void 0||r===void 0)throw Error(`[fork-handler] Segment boundaries must reference source messages: ${e.fromMessageId}..${e.toMessageId} (sourceSessionId=${t})`);if(n>r)throw Error(`[fork-handler] Segment range is reversed: ${e.fromMessageId}..${e.toMessageId} (sourceSessionId=${t})`);if(n<=c)throw Error(`[fork-handler] Segments must not overlap and must be ordered (sourceSessionId=${t})`);if(n!==c+1)throw Error(`[fork-handler] Segments must be contiguous without gaps (sourceSessionId=${t})`);c=r}if(c!==o.length-1)throw Error(`[fork-handler] Segments must cover the entire source message range (sourceSessionId=${t})`);return!0}function mt(e){if(!e.segments?.length&&e.appliedPipeline?.length)for(let t of e.appliedPipeline){let e=N.get(t.actionId);if(!e)throw Error(`[fork-handler] Unknown action in pipeline: ${t.actionId}`);if(e.category!==`transformation`)throw Error(`[fork-handler] Action '${t.actionId}' is category '${e.category}', but only 'transformation' actions are allowed in fork transforms`)}}function ht(e){return e.on(x.fork,async t=>{let{sourceSessionId:n,fromMessageId:r,name:i,branchKind:a=`fork`,transforms:o,targetWorkingDirectory:s,existingSessionId:c}=t.payload,{session:l}=await e.request(x.get,{sessionId:n});if(!l)throw Error(`[fork-handler] Source session not found: ${n}`);if(r){let{message:t}=await e.request(f.get,{messageId:r});if(!t)throw Error(`[fork-handler] Fork point message not found: ${r} (sourceSessionId=${n})`);if(t.sessionId!==n)throw Error(`[fork-handler] Fork point message ${r} does not belong to session ${n}`)}o&&(await pt(e,n,o,r)||mt(o));let{sessionId:u}=await e.request(x.create,{...c?{sessionId:c}:{},parentSessionId:n,forkPointMessageId:r,branchKind:a,forkTransforms:o,...i?{title:i}:{},...s?{targetWorkingDirectory:s}:{}});await e.emit(x.branch.created,{sessionId:n,childSessionId:u,parentSessionId:n,kind:a,forkPointMessageId:r,transforms:o}),await e.emit(x.forked,{parentSessionId:n,childSessionId:u,forkPoint:r}),t.setResult({sessionId:u})})}function gt(e){return e.on(x.merge,async t=>{let{parentSessionId:n,childSessionId:r,summary:a}=t.payload,o=`merge:${n}:${r}`,{session:s}=await e.request(x.get,{sessionId:n});if(!s)throw Error(`[merge-handler] Parent session not found: ${n}`);if(s.status!==`active`)throw Error(`[merge-handler] Parent session is not active: ${n}`);let{session:c}=await e.request(x.get,{sessionId:r});if(!c)throw Error(`[merge-handler] Child session not found: ${r}`);if(c.parentSessionId!==n)throw Error(`[merge-handler] Invalid parent-child relationship: session ${r} is not a child of ${n}`+(c.parentSessionId?` (actual parent: ${c.parentSessionId})`:` (session has no parent)`));await e.emit(x.merging,{parentSessionId:n,childSessionId:r});let l=a??`Child session ${r} merged.`;if(!(await e.request(x.close,{sessionId:r})).success)throw Error(`[merge-handler] Failed to close child session: ${r}`);let u=JSON.stringify({handoff:l});await e.request(i.append,{event:{sessionId:n,eventId:o,timestamp:Date.now(),type:`branch.merged`,payload:{childSessionId:r,parentSessionId:n,resultJson:u}}}),await e.emit(x.branch.merged,{sessionId:n,childSessionId:r,parentSessionId:n,resultJson:u}),await e.emit(x.merged,{parentSessionId:n,childSessionId:r,handoff:l}),t.setResult({success:!0,handoff:l})})}async function Q(t,n,r,i,a){if(!(n.parentSessionId!==void 0&&(n.contextInheritance===`parent-history`||n.contextInheritance===void 0&&n.branchKind!==`subagent`))||i?.messageHistory)return i;let{turns:o}=await t.request(e.getBySession,{sessionId:r,limit:2});if(!(a&&o.length<=1))return i;let s=(await L(t,r)).messages.map(z);return{...i,messageHistory:s,isFirstTurn:!0,hasNewTransforms:n.forkTransforms!==void 0}}const $={enabled:!0,template:`User changed working directory from {oldCwd} to {newCwd}`};function _t(e,t,n){return e.replace(/\{oldCwd\}/g,t).replace(/\{newCwd\}/g,n)}function vt(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.enabled==`boolean`&&typeof t.template==`string`}async function yt(e){try{let t=await e.request(m.get,{key:{scope:`global`,surface:`ui`,context:`cwdChangeNotification`},category:`chat-display`});if(t.value!==null&&t.value!==void 0)return vt(t.value)?t.value:$}catch{}return $}function bt(e){let{baseContext:t,recoveryContext:n,isRecovered:r,isSwapped:i,swapMeta:a,cwdMessage:o,freshMessageHistory:s}=e,c=r&&n?{...t,...n}:t;if(!i)return c;let l=a&&o!==void 0?{cwdChange:{previousCwd:a.previousCwd,newCwd:a.newCwd,message:o}}:void 0;return c={...c,hasConnectorSwap:!0,...s!==void 0&&{messageHistory:s},...l&&{turnContext:{...c?.turnContext,...l}}},c}async function xt(e){let{bus:t,session:n,turn:r,message:i,messageId:a,deliveryMode:o,onTurnComplete:s,agent:c,agentContext:l,responseSchema:u}=e;try{await t.request(y.sendMessage,{agentId:c.agentId,adapterId:c.adapterId,message:i,deliveryMode:o,messageId:a,turnId:r.turnId,sessionId:n.sessionId,sessionContext:l,...u!==void 0&&{responseSchema:u}}),await t.emit(x.user_message.acknowledged,{sessionId:r.sessionId,turnId:r.turnId,turnNumber:r.turnNumber,messageId:a,agentId:c.agentId})}catch(e){if(e instanceof O){await t.emit(x.user_message.completed,{sessionId:r.sessionId,turnId:r.turnId,turnNumber:r.turnNumber,messageId:a,agentId:c.agentId,outcome:`cancelled`});let e=r.markAgentCompleted(c.agentId);e.turnComplete&&await s(r,e.result);return}let n=e instanceof Error?e.message:String(e),i=r.markAgentErrored(c.agentId,n);await t.emit(x.user_message.completed,{sessionId:r.sessionId,turnId:r.turnId,turnNumber:r.turnNumber,messageId:a,agentId:c.agentId,outcome:`error`,error:n}),i.turnComplete&&await s(r,i.result)}}async function St(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g){let _=await Q(e,t,t.sessionId,c,u),v=l?await l.enrichForDeliveryMode(_?.messageHistory,a.turnId,o):_?.messageHistory,y=_?{..._,messageHistory:v}:void 0,b=p?.size?await yt(e):$,x=n.map(async n=>{let c=m?.get(n.agentId),l=c&&b.enabled?_t(b.template,c.previousCwd,c.newCwd):void 0;await xt({bus:e,session:t,turn:a,message:r,messageId:i,deliveryMode:o,onTurnComplete:s,agent:n,agentContext:bt({baseContext:y,recoveryContext:d,isRecovered:f?.has(n.agentId)??!1,isSwapped:p?.has(n.agentId)??!1,swapMeta:c,cwdMessage:l,freshMessageHistory:h}),responseSchema:g})});await Promise.all(x)}export{M as A,he as C,me as D,_e as E,A as F,le as M,ce as N,L as O,k as P,ve as S,B as T,K as _,ft as a,Ae as b,qe as c,q as d,J as f,He as g,Ve as h,ht as i,j,N as k,Ke as l,Ue as m,Q as n,Z as o,We as p,gt as r,dt as s,St as t,Ge as u,Be as v,ge as w,Se as x,G as y};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import * as _$zod from "zod";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import * as _$_makaio_core0 from "@makaio/framework/core";
|
|
4
|
+
import { EventMessagePayload, SubjectDefinition, SubjectRecord } from "@makaio/framework/core";
|
|
5
|
+
import { IMakaioBus } from "@makaio/framework/bus";
|
|
6
|
+
import * as _$zod_v4_core0 from "zod/v4/core";
|
|
7
|
+
|
|
8
|
+
//#region packages/inbound-hooks/src/schemas.d.ts
|
|
9
|
+
/**
|
|
10
|
+
* Validates a hook source identifier.
|
|
11
|
+
*
|
|
12
|
+
* Source identifiers must be lowercase alphanumeric with hyphens only
|
|
13
|
+
* (e.g., `'git'`, `'claude-code'`).
|
|
14
|
+
*/
|
|
15
|
+
declare const InboundHookSourceSchema: z.ZodString;
|
|
16
|
+
/**
|
|
17
|
+
* Canonical schema for the raw inbound hook payload delivered on
|
|
18
|
+
* `hook:<source>.received`.
|
|
19
|
+
*
|
|
20
|
+
* Ingress bridges are intentionally dumb: they accept any native hook event
|
|
21
|
+
* and publish it verbatim on this subject. Downstream translators are
|
|
22
|
+
* responsible for interpreting `eventName` and mapping the `payload` to
|
|
23
|
+
* structured observations.
|
|
24
|
+
*/
|
|
25
|
+
declare const RawInboundHookPayloadSchema: z.ZodObject<{
|
|
26
|
+
eventName: z.ZodString;
|
|
27
|
+
receivedAt: z.ZodNumber;
|
|
28
|
+
argv: z.ZodArray<z.ZodString>;
|
|
29
|
+
stdinText: z.ZodString;
|
|
30
|
+
payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
31
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
type RawInboundHookPayload = z.infer<typeof RawInboundHookPayloadSchema>;
|
|
34
|
+
type InboundHookSource = z.infer<typeof InboundHookSourceSchema>;
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region packages/inbound-hooks/src/emit.d.ts
|
|
37
|
+
/**
|
|
38
|
+
* Options controlling fail-open behavior for hook bus emissions.
|
|
39
|
+
*/
|
|
40
|
+
interface InboundHookEmitOptions {
|
|
41
|
+
/**
|
|
42
|
+
* When `true`, bus failures are swallowed and the function resolves normally.
|
|
43
|
+
* Defaults to `true` for native hooks where bus unavailability must not
|
|
44
|
+
* crash the calling hook process.
|
|
45
|
+
*/
|
|
46
|
+
readonly failOpen?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Emit a raw inbound hook payload on the source-scoped `hook:<source>.received`
|
|
50
|
+
* subject.
|
|
51
|
+
* @param bus - Bus instance with `emit` support.
|
|
52
|
+
* @param source - Stable source identifier (e.g., `'git'`, `'claude-code'`).
|
|
53
|
+
* @param payload - Raw hook payload to emit.
|
|
54
|
+
* @param options - Emission options; `failOpen` defaults to `true`.
|
|
55
|
+
*/
|
|
56
|
+
declare function emitInboundHookReceived(bus: Pick<IMakaioBus, 'emit'>, source: string, payload: RawInboundHookPayload, options?: InboundHookEmitOptions): Promise<void>;
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region packages/inbound-hooks/src/fast-bus.d.ts
|
|
59
|
+
/**
|
|
60
|
+
* Options for the fast single-shot hook bus connection.
|
|
61
|
+
*/
|
|
62
|
+
interface FastHookBusOptions {
|
|
63
|
+
/** WebSocket URL of the bus server. Defaults to `ws://127.0.0.1:6252/bus`. */
|
|
64
|
+
readonly busUrl?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Milliseconds allowed for connect and emit before giving up.
|
|
67
|
+
* Defaults to `250`.
|
|
68
|
+
*/
|
|
69
|
+
readonly timeoutMs?: number;
|
|
70
|
+
/**
|
|
71
|
+
* Milliseconds to wait before giving up.
|
|
72
|
+
* @deprecated Use `timeoutMs`; the timeout now applies to the whole delivery path.
|
|
73
|
+
*/
|
|
74
|
+
readonly connectTimeoutMs?: number;
|
|
75
|
+
/** HMAC secret for bus authentication. Falls back to `MAKAIO_BUS_SECRET`. */
|
|
76
|
+
readonly secret?: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Connect to the local bus, emit a raw inbound hook payload, and disconnect.
|
|
80
|
+
*
|
|
81
|
+
* Optimized for fast-exit hook processes: uses a single short-lived WebSocket
|
|
82
|
+
* connection with a tight whole-operation timeout. All failures are swallowed
|
|
83
|
+
* so the calling hook process exits cleanly regardless of bus availability.
|
|
84
|
+
* @param source - Stable source identifier (e.g., `'git'`, `'claude-code'`).
|
|
85
|
+
* @param payload - Raw hook payload to emit.
|
|
86
|
+
* @param options - Bus connection options.
|
|
87
|
+
*/
|
|
88
|
+
declare function emitInboundHookReceivedFast(source: string, payload: RawInboundHookPayload, options?: FastHookBusOptions): Promise<void>;
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region packages/inbound-hooks/src/namespace.d.ts
|
|
91
|
+
type RawInboundHookSubjectRecord = SubjectRecord<'received', EventMessagePayload<RawInboundHookPayload>>;
|
|
92
|
+
/**
|
|
93
|
+
* Subject definition for the raw inbound hook event in a concrete
|
|
94
|
+
* `hook:<source>` namespace.
|
|
95
|
+
*/
|
|
96
|
+
type RawInboundHookReceivedSubject = SubjectDefinition<RawInboundHookSubjectRecord, 'received', `hook:${string}`>;
|
|
97
|
+
/**
|
|
98
|
+
* Normalize a hook source identifier to the canonical form used in
|
|
99
|
+
* `hook:<source>` namespaces.
|
|
100
|
+
* @param source - Raw source string (e.g., `'Git'`, `'CLAUDE-CODE'`).
|
|
101
|
+
* @returns Canonical lowercase source identifier.
|
|
102
|
+
*/
|
|
103
|
+
declare function normalizeInboundHookSource(source: string): string;
|
|
104
|
+
/**
|
|
105
|
+
* Create a bus namespace definition for the given inbound hook source.
|
|
106
|
+
*
|
|
107
|
+
* The namespace is suitable for registration via `bus.registerNamespace()`.
|
|
108
|
+
* @param source - Stable source identifier (e.g., `'git'`, `'claude-code'`).
|
|
109
|
+
* @returns Bus namespace definition scoped to `hook:<source>`.
|
|
110
|
+
*/
|
|
111
|
+
declare function createInboundHookNamespace(source: string): _$_makaio_core0.BusNamespaceDefinition<`hook:${string}`, {
|
|
112
|
+
received: _$zod.ZodObject<{
|
|
113
|
+
eventName: _$zod.ZodString;
|
|
114
|
+
receivedAt: _$zod.ZodNumber;
|
|
115
|
+
argv: _$zod.ZodArray<_$zod.ZodString>;
|
|
116
|
+
stdinText: _$zod.ZodString;
|
|
117
|
+
payload: _$zod.ZodRecord<_$zod.ZodString, _$zod.ZodUnknown>;
|
|
118
|
+
metadata: _$zod.ZodOptional<_$zod.ZodRecord<_$zod.ZodString, _$zod.ZodUnknown>>;
|
|
119
|
+
}, _$zod_v4_core0.$strip>;
|
|
120
|
+
}>;
|
|
121
|
+
/**
|
|
122
|
+
* Build a non-owning subject definition for `hook:<source>.received`.
|
|
123
|
+
*
|
|
124
|
+
* This is intentionally not a namespace registration. Namespace owners
|
|
125
|
+
* register the full `hook:<source>` namespace at boot time; the ingress
|
|
126
|
+
* bridge only needs to emit the raw event without accidentally registering
|
|
127
|
+
* a narrower schema before the concrete owner loads.
|
|
128
|
+
* @param source - Stable source identifier (e.g., `'git'`, `'claude-code'`).
|
|
129
|
+
* @returns Non-owning subject definition for the source's raw hook ingress.
|
|
130
|
+
*/
|
|
131
|
+
declare function createInboundHookReceivedSubject(source: string): RawInboundHookReceivedSubject;
|
|
132
|
+
//#endregion
|
|
133
|
+
//#region packages/inbound-hooks/src/stdio.d.ts
|
|
134
|
+
/**
|
|
135
|
+
* Read the current process stdin as UTF-8 text.
|
|
136
|
+
*
|
|
137
|
+
* Returns an empty string when stdin is an interactive TTY so the command
|
|
138
|
+
* does not hang waiting for user input.
|
|
139
|
+
* @param stdin - The stdin stream to consume (defaults to `process.stdin`).
|
|
140
|
+
* @returns The full stdin text, or an empty string for a TTY.
|
|
141
|
+
*/
|
|
142
|
+
declare function readProcessStdinText(stdin?: NodeJS.ReadStream): Promise<string>;
|
|
143
|
+
/**
|
|
144
|
+
* Read stdin without surfacing failures to the caller.
|
|
145
|
+
*
|
|
146
|
+
* Wraps any provided `readStdinText` function and swallows errors, returning
|
|
147
|
+
* an empty string on any failure. Preserves fail-open semantics: a hook
|
|
148
|
+
* bridge should never crash because stdin is unavailable.
|
|
149
|
+
* @param readStdinText - Function that reads stdin text; defaults to {@link readProcessStdinText}.
|
|
150
|
+
* @returns The full stdin text, or an empty string on any failure.
|
|
151
|
+
*/
|
|
152
|
+
declare function safeReadStdinText(readStdinText?: () => Promise<string>): Promise<string>;
|
|
153
|
+
/**
|
|
154
|
+
* Parse a JSON object from raw stdin text.
|
|
155
|
+
*
|
|
156
|
+
* Returns an empty object when the input is blank, non-JSON, or does not
|
|
157
|
+
* parse to an object. This preserves fail-open semantics: an event is always
|
|
158
|
+
* emitted even when the native caller sends nothing or malformed data.
|
|
159
|
+
* @param text - Raw text to parse.
|
|
160
|
+
* @returns A plain `Record<string, unknown>` or `{}` on failure.
|
|
161
|
+
*/
|
|
162
|
+
declare function parseJsonPayload(text: string): Record<string, unknown>;
|
|
163
|
+
/**
|
|
164
|
+
* Parse an optional JSON metadata string from a CLI flag.
|
|
165
|
+
*
|
|
166
|
+
* Returns `undefined` when absent or unparseable so the caller can omit the
|
|
167
|
+
* `metadata` field from the emitted payload entirely (rather than emitting
|
|
168
|
+
* `{}`).
|
|
169
|
+
* @param raw - Raw JSON string from a `--metadata-json` flag, or `undefined`.
|
|
170
|
+
* @returns A parsed metadata record, or `undefined` on absence or parse failure.
|
|
171
|
+
*/
|
|
172
|
+
declare function parseJsonMetadata(raw: string | undefined): Record<string, unknown> | undefined;
|
|
173
|
+
//#endregion
|
|
174
|
+
export { type FastHookBusOptions, type InboundHookEmitOptions, type InboundHookSource, InboundHookSourceSchema, type RawInboundHookPayload, RawInboundHookPayloadSchema, type RawInboundHookReceivedSubject, createInboundHookNamespace, createInboundHookReceivedSubject, emitInboundHookReceived, emitInboundHookReceivedFast, normalizeInboundHookSource, parseJsonMetadata, parseJsonPayload, readProcessStdinText, safeReadStdinText };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as e}from"zod";import{createBusNamespace as t}from"@makaio/framework/core";import{createBusInstance as n}from"@makaio/framework/bus";import{HmacAuth as r,WebSocketClientTransport as i}from"@makaio/framework/node/transports";import{text as a}from"node:stream/consumers";const o=e.string().regex(/^[a-z0-9-]+$/,`source must contain only lowercase letters, numbers, and hyphens`),s=e.object({eventName:e.string().min(1),receivedAt:e.number().int().finite().nonnegative(),argv:e.array(e.string()),stdinText:e.string(),payload:e.record(e.string(),e.unknown()),metadata:e.record(e.string(),e.unknown()).optional()});function c(e){return o.parse(e.trim().toLowerCase())}function l(e){return t(`hook:${c(e)}`,{received:s})}function u(e){return{subject:`received`,$meta:{namespace:`hook:${c(e)}`,isRequest:!1,local:!1,channel:!1}}}async function d(e,t,n,r={}){let i=r.failOpen??!0;try{await e.emit(u(t),n)}catch(e){if(!i)throw e}}async function f(e,t,a={}){let o=a.busUrl?.trim()||process.env.MAKAIO_BUS_URL?.trim()||`ws://127.0.0.1:6252/bus`,s=a.secret??process.env.MAKAIO_BUS_SECRET,c=s&&s.trim().length>0?new r({secret:s.trim()}):void 0,l=n({transports:[new i({url:o,name:`hook-${e}`,autoReconnect:!1,auth:c,debug:process.env.MAKAIO_DEBUG===`true`})]}),u=p(a.timeoutMs??a.connectTimeoutMs),f,h=!1,g=(async()=>{await l.connect(),!h&&await d(l,e,t,{failOpen:!0})})();g.catch(()=>void 0);try{await Promise.race([g,new Promise((e,t)=>{f=setTimeout(()=>{h=!0,t(Error(`hook bus delivery timeout`))},u)})])}catch{return}finally{clearTimeout(f),m(()=>l.disconnect())}}function p(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0?e:250}function m(e){try{e()}catch{}}async function h(e=process.stdin){return e.isTTY===!0?``:a(e)}async function g(e=h){try{return await e()}catch{return``}}function _(e){let t=e.trim();if(t.length!==0)try{let e=JSON.parse(t);if(typeof e==`object`&&e&&!Array.isArray(e))return e}catch{return}}function v(e){return _(e)??{}}function y(e){if(e!==void 0)return _(e)}export{o as InboundHookSourceSchema,s as RawInboundHookPayloadSchema,l as createInboundHookNamespace,u as createInboundHookReceivedSubject,d as emitInboundHookReceived,f as emitInboundHookReceivedFast,c as normalizeInboundHookSource,y as parseJsonMetadata,v as parseJsonPayload,h as readProcessStdinText,g as safeReadStdinText};
|