@robota-sdk/agent-session 3.1.2 → 3.2.1
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/CHANGELOG.md +36 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/node.cjs +11 -11
- package/dist/node.d.cts +4 -17
- package/dist/node.d.cts.map +1 -1
- package/dist/node.d.ts +4 -17
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +9 -9
- package/dist/node.js.map +1 -1
- package/dist/{session-claims-BQGdD3Fe.cjs → session-claims-CVHnnUhA.cjs} +1 -1
- package/dist/{session-claims-D-Azmxq6.js → session-claims-DB4Q00_J.js} +2 -2
- package/dist/{session-claims-D-Azmxq6.js.map → session-claims-DB4Q00_J.js.map} +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# @robota-sdk/agent-session
|
|
2
2
|
|
|
3
|
+
## 3.2.1
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- Updated dependencies [9e86321]
|
|
7
|
+
- @robota-sdk/agent-node-lock@3.2.1
|
|
8
|
+
- @robota-sdk/agent-core@3.2.1
|
|
9
|
+
- @robota-sdk/agent-file-authority@3.2.1
|
|
10
|
+
- @robota-sdk/agent-interface-execution@3.2.1
|
|
11
|
+
- @robota-sdk/agent-interface-session@3.2.1
|
|
12
|
+
|
|
13
|
+
## 3.2.0
|
|
14
|
+
### Minor Changes
|
|
15
|
+
|
|
16
|
+
- e5ce7d6: Preserve restored background task identities and prepare scheduled tasks before resuming them. A resumed schedule activates only after the store confirms a complete save; an unknown result stops initialization without assuming which record is present. Paused schedules stay paused, and a normal shutdown retains scheduled tasks for the next resume.
|
|
17
|
+
|
|
18
|
+
When a claimed session has a background manager, it requires an exclusively bound built-in manager. Scheduled tasks in a claimed session require the built-in scheduled runner and a verifiable writer claim. Restoring schedules also requires a store that supplies the restore transaction. Custom managers and scheduled runners remain available to unpersisted sessions, but their saved schedules cannot be resumed. A manager must reserve restored IDs before a session with stored tasks can resume; an already-used manager is refused for a restore.
|
|
19
|
+
|
|
20
|
+
The built-in stores serialize claim verification and record replacement with cooperating marker transitions. This requires all writers sharing a session directory to use the operation lock; older writers must be stopped before upgrading. A same-user program that replaces the lock path can bypass this coordination. External commands do not have an exactly-once guarantee.
|
|
21
|
+
|
|
22
|
+
When a claimed session detects that it no longer owns the writer claim, it stops admitting wakes and reports a failure without intentionally saving over the new owner. A claim lost after an effect check can still permit an external effect. In-flight subprocess cancellation is best effort, and a process that has already started may still have effects.
|
|
23
|
+
- ad5e9fb: Allow a verified owner driving an attached terminal to review an unverified stored session. Bind each decision to the attached surface and the exact claimed bytes, and discard it when the owner cancels or the link or keys are lost.
|
|
24
|
+
|
|
25
|
+
### Patch Changes
|
|
26
|
+
|
|
27
|
+
- 384a855: Coordinate cooperating Node processes with an operating-system-backed operation lock.
|
|
28
|
+
- Updated dependencies [e5ce7d6]
|
|
29
|
+
- Updated dependencies [12ab3f5]
|
|
30
|
+
- Updated dependencies [ffaf7d5]
|
|
31
|
+
- Updated dependencies [384a855]
|
|
32
|
+
- Updated dependencies [ad5e9fb]
|
|
33
|
+
- @robota-sdk/agent-interface-session@3.2.0
|
|
34
|
+
- @robota-sdk/agent-interface-execution@3.2.0
|
|
35
|
+
- @robota-sdk/agent-core@3.2.0
|
|
36
|
+
- @robota-sdk/agent-node-lock@3.2.0
|
|
37
|
+
- @robota-sdk/agent-file-authority@3.2.0
|
|
38
|
+
|
|
3
39
|
## 3.1.2
|
|
4
40
|
### Patch Changes
|
|
5
41
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./session-claims-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./session-claims-CVHnnUhA.cjs");let t=require("@robota-sdk/agent-core");function n(e){if((typeof e==`object`&&e||typeof e==`function`)&&`then`in e&&typeof e.then==`function`)throw Promise.resolve(e).catch(()=>void 0),Error(`Session checkpoint must acknowledge synchronously; asynchronous persistence is unsupported`)}function r(e){if(typeof e!=`string`||e.length===0)throw Error("Session requires `cwd`: the absolute path this session executes in (ARCH-010). It feeds every hook input, CLAUDE_PROJECT_DIR, the permission root and the persisted record. Pass `process.cwd()` explicitly if that is genuinely what you mean.");if(!(0,t.isAbsolutePath)(e))throw Error(`Session requires an ABSOLUTE \`cwd\`; got ${JSON.stringify(e)} (ARCH-010). A relative root is resolved against the process directory downstream, which is the ambient value this field exists to replace. Resolve it at your composition root.`);return e}var i=class extends Error{recoverable=!0;constructor(e){super(e),this.name=`SessionBusyError`}},a=class{controller=null;settlement=Promise.resolve();settle;get drained(){return this.settlement}claim(){if(this.controller!==null)throw new i(`This session is already running a turn. A session is a single conversation: await the turn in flight, abort() it and await it, or use a separate session for concurrent work.`);return this.settlement=new Promise(e=>{this.settle=e}),this.controller=new AbortController,this.controller}release(e){this.controller===e&&(this.controller=null,this.settle?.(),this.settle=void 0)}abort(){this.controller?.abort()}isRunning(){return this.controller!==null}},o=class{cwd;constructor(e){this.cwd=r(e)}turnClaim=new a;permissionModeGuards=new Set;getPermissionMode(){return this.permissionMode}setPermissionMode(e){for(let t of this.permissionModeGuards)t(e);this.permissionMode=e}addPermissionModeGuard(e){return this.permissionModeGuards.add(e),()=>this.permissionModeGuards.delete(e)}getActivePresetId(){return this.activePresetId}setActivePresetId(e){this.activePresetId=e}getParallelSubagentsEnabled(){return this.parallelSubagentsEnabled}setParallelSubagentsEnabled(e){this.parallelSubagentsEnabled=e}getSessionId(){return this.sessionId}getCwd(){return this.cwd}getSystemMessage(){return this.systemMessage}updateSystemMessage(e){this.assertInputAllowed(),this.systemMessage=e,this.agent.updateSystemPrompt(e)}async applyModelOptions(e){await this.agent.ensureReady();let t=e.model??this.model;this.agent.setModel({provider:this.aiProvider.name,model:t,...e.effort!==void 0&&{effort:e.effort},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxOutputTokens!==void 0&&{maxTokens:e.maxOutputTokens}}),this.setActiveModel(t)}setActiveModel(e){this.model=e,this.contextTracker.setModel(e),this.compactionOrchestrator.setModel(e)}getModelEffort(){let e=this.agent.getModel;if(e===void 0)return`auto`;try{return e.call(this.agent).effort??`auto`}catch(e){if(e instanceof Error&&/disposed/i.test(e.message))return`auto`;throw e}}async withScopedModelEffort(e,t){let n=this.getModelEffort();await this.applyModelOptions({effort:e});try{return await t()}finally{await this.applyModelOptions({effort:n})}}async applyAgentName(e){await this.agent.updateConfiguration({name:e})}getToolSchemas(){return this.toolSchemas}getMessageCount(){return this.messageCount}applyPresetToolLists(e){this.permissionEnforcer.applyPresetToolLists(e)}getPermissionRules(){let e=this.permissionEnforcer.currentPermissionRules();return{allow:[...e.allow],deny:[...e.deny],ask:[...e.ask]}}getSessionAllowedTools(){return this.permissionEnforcer.getSessionAllowedTools()}checkToolPermission(e,t,n){return this.permissionEnforcer.checkDelegatedToolCall(e,t,n)}requireClassifierFor(e){if(e===`auto`&&!this.permissionEnforcer.hasPermissionClassifier())throw Error(`Auto mode is unavailable: this session has no permission classifier.`)}retryPermissionDenial(e){return this.permissionEnforcer.allowRetryOfDenial(e)}getRecentPermissionDenials(){return this.permissionEnforcer.getRecentDenials()}clearSessionAllowedTools(){this.permissionEnforcer.clearSessionAllowedTools()}abort(){this.turnClaim.abort()}isRunning(){return this.turnClaim.isRunning()}getContextState(){return this.contextTracker.getContextState()}syncContextFromHistory(){this.contextTracker.updateFromHistory(this.agent.getHistory())}getAutoCompactThreshold(){return this.contextTracker.getAutoCompactThreshold()}setAutoCompactThreshold(e){this.contextTracker.setAutoCompactThreshold(e)}getHistory(){return structuredClone(this.agent.getHistory())}getFullHistory(){return structuredClone(this.agent.getFullHistory())}getSessionTokenUsage(){let e=0,t=0,n=!1;for(let r of this.getFullHistory()){if(r.category!==`event`||r.type!==`usage-summary`)continue;let i=r.data;e+=i?.promptTokens??0,t+=i?.completionTokens??0,n=!0}return n?{inputTokens:e,outputTokens:t}:void 0}getModelId(){return this.model}getOfferedToolSchemas(){return this.agent.getOfferedToolSchemas()}getProvider(){return this.aiProvider}getProviderId(){return this.aiProvider.name}addHistoryEntry(e){this.assertInputAllowed(),this.agent.addHistoryEntry(e)}injectMessage(e,t,n){this.assertInputAllowed(),this.agent.injectMessage(e,t,n)}injectRawMessage(e){this.assertInputAllowed(),this.agent.injectRawMessage(e)}clearHistory(){this.assertInputAllowed(),this.agent.clearHistory(),this.contextTracker.reset()}};function s(e){return JSON.stringify(typeof e==`string`?e:e??``)}function c(e){let n=(e.parts??[]).flatMap(e=>{let n=(0,t.nonVisualObservationText)(e);return n===void 0?[]:[n]});return n.length>0?JSON.stringify({content:e.content,observations:n}):s(e.content)}function l(e){let n=(0,t.peerDriverOf)(e);return n?`user [from ${JSON.stringify((0,t.printablePeerDriver)(n))}]`:`user`}function u(e){switch(e.role){case`user`:return[`${l(e)}: ${c(e)}`];case`assistant`:{let t=[];e.content!==null&&e.content!==``&&t.push(`assistant: ${c(e)}`);for(let n of e.toolCalls??[])t.push(`assistant tool call ${JSON.stringify(n.function.name)} [${JSON.stringify(n.id)}]: ${s(n.function.arguments)}`);return t.length>0?t:[`assistant: ""`]}case`tool`:return[`tool result${e.name?` ${JSON.stringify(e.name)}`:``} [${JSON.stringify(e.toolCallId)}]: ${c(e)}`];case`system`:return[`system: ${c(e)}`]}}function d(e){return e.map(e=>u(e).join(`
|
|
2
2
|
`))}function f(e,t){if(!Array.isArray(e))throw Error(`${t} requires \`hookTypeExecutors\`: the executors that run a hook's handlers. On Node pass \`[new CommandExecutor(), new HttpExecutor()]\` from \`@robota-sdk/agent-core/node\`; pass \`[]\` to run no hook handlers.`);return e}var p=class extends Error{constructor(e){super(e),this.name=`CompactionError`}};const m=[`Summarize the following conversation concisely, preserving:`,`- User's original requests and goals`,`- Key decisions, conclusions, and important state`,`- Identifiers, names, and references needed to continue the work`,`- Current task status and next steps`,`Drop verbose intermediate outputs and exploratory work that didn't lead to results.`].join(`
|
|
3
3
|
`);var h=class{sessionId;cwd;model;hooks;compactInstructions;basePrompt;hookTypeExecutors;constructor(e){this.sessionId=e.sessionId,this.cwd=e.cwd,this.model=e.model,this.hooks=e.hooks,this.compactInstructions=e.compactInstructions,this.basePrompt=e.basePrompt,this.hookTypeExecutors=f(e.hookTypeExecutors,`CompactionOrchestrator`)}setModel(e){this.model=e}async compact(e,n,r,i,a=`manual`,o,s){if(i?.throwIfAborted(),n.length===0)throw new p(`Compaction was asked to summarise an empty history; conversation history preserved untouched`);let c={session_id:this.sessionId,cwd:this.cwd,hook_event_name:`PreCompact`,trigger:a};await(0,t.runHooks)(this.hooks,`PreCompact`,c,this.hookTypeExecutors,o);let l=this.buildCompactionPrompt(n,r),u=(0,t.randomId)(),d=(0,t.randomId)(),f=e.resolveModelRoute?.(this.model,d)??{provider:e.name,model:this.model},m=await(0,t.callJournaledProvider)(async(n,r)=>{try{return await e.chat(n,r)}catch(e){throw i?.aborted?(0,t.createAbortError)(`Compaction cancelled`,e):e}},[{id:(0,t.randomId)(),role:`user`,content:l,state:`complete`,timestamp:new Date}],{model:this.model,executionId:d,onTextDelta:()=>{},onModelFallback:e=>{f={...e.to}},toolChoice:`none`,preserveContextWindow:!0,...i===void 0?{}:{signal:i}},s?{journal:s,executionId:d,callId:u,route:()=>({providerId:f.provider,modelId:f.model})}:void 0);if(i?.throwIfAborted(),typeof m.content!=`string`||m.content.trim()===``)throw new p(`Compaction produced an invalid summary (provider=${e.name}, content type=${typeof m.content}); conversation history preserved untouched`);return m.content}buildCompactionPrompt(e,t){let n=t??this.compactInstructions??``,r=n?`\nAdditional focus:\n${n}\n`:``,i=d(e).join(`
|
|
4
4
|
`);return[this.basePrompt??m,r,``,`Conversation:`,i].join(`
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,l as c,m as l,o as u,p as d,r as f,s as p,t as m,u as h,v as g,y as _}from"./session-claims-
|
|
1
|
+
import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,l as c,m as l,o as u,p as d,r as f,s as p,t as m,u as h,v as g,y as _}from"./session-claims-DB4Q00_J.js";import{CONTEXT_ESTIMATE_CHARS_PER_TOKEN as v,ConversationAgent as y,DEFAULT_ABSTRACT_EVENT_SERVICE as b,ExecutionRecoveryError as x,ExecutionSuspendedError as S,ObservableEventService as ee,PROVIDER_CALL_EVENTS as C,PROVIDER_FALLBACK_EVENTS as te,TOOL_BODY_EVENTS as ne,TOOL_PERMISSION_EVENTS as re,TRUST_TO_MODE as ie,allowRulesForAutoMode as ae,applyPresetToolLists as oe,callJournaledProvider as se,createAbortError as ce,createLogger as w,createSystemMessage as le,createToolMessage as ue,createUserMessage as de,estimateContextTokensFromMessages as fe,evaluatePermission as pe,findInvalidPermissionPatterns as me,findPermissionPatternWarnings as he,getModelContextWindow as ge,getProviderCapabilities as _e,getToolPermissionProfile as T,isAbortFailure as ve,isAbsolutePath as E,isEnforcing as ye,isExecutionControlError as be,isModelEffort as xe,isToolDeniedOutright as Se,matchesAnyPattern as Ce,messageToHistoryEntry as we,nonVisualObservationText as Te,peerDriverOf as Ee,printablePeerDriver as De,projectPermissionPolicy as Oe,randomId as D,readModelFallbackNotice as ke,registerToolPermissionProfile as Ae,requiresFreshApproval as je,resolvePath as Me,runHooks as O,sha256Hex as Ne,snapshotToolProvenance as Pe,traceEnvFor as Fe,utf8ByteLength as Ie,wasToolResultAdmitted as Le,withToolProvenance as Re}from"@robota-sdk/agent-core";function ze(e){if((typeof e==`object`&&e||typeof e==`function`)&&`then`in e&&typeof e.then==`function`)throw Promise.resolve(e).catch(()=>void 0),Error(`Session checkpoint must acknowledge synchronously; asynchronous persistence is unsupported`)}function Be(e){if(typeof e!=`string`||e.length===0)throw Error("Session requires `cwd`: the absolute path this session executes in (ARCH-010). It feeds every hook input, CLAUDE_PROJECT_DIR, the permission root and the persisted record. Pass `process.cwd()` explicitly if that is genuinely what you mean.");if(!E(e))throw Error(`Session requires an ABSOLUTE \`cwd\`; got ${JSON.stringify(e)} (ARCH-010). A relative root is resolved against the process directory downstream, which is the ambient value this field exists to replace. Resolve it at your composition root.`);return e}var Ve=class extends Error{recoverable=!0;constructor(e){super(e),this.name=`SessionBusyError`}},He=class{controller=null;settlement=Promise.resolve();settle;get drained(){return this.settlement}claim(){if(this.controller!==null)throw new Ve(`This session is already running a turn. A session is a single conversation: await the turn in flight, abort() it and await it, or use a separate session for concurrent work.`);return this.settlement=new Promise(e=>{this.settle=e}),this.controller=new AbortController,this.controller}release(e){this.controller===e&&(this.controller=null,this.settle?.(),this.settle=void 0)}abort(){this.controller?.abort()}isRunning(){return this.controller!==null}},Ue=class{cwd;constructor(e){this.cwd=Be(e)}turnClaim=new He;permissionModeGuards=new Set;getPermissionMode(){return this.permissionMode}setPermissionMode(e){for(let t of this.permissionModeGuards)t(e);this.permissionMode=e}addPermissionModeGuard(e){return this.permissionModeGuards.add(e),()=>this.permissionModeGuards.delete(e)}getActivePresetId(){return this.activePresetId}setActivePresetId(e){this.activePresetId=e}getParallelSubagentsEnabled(){return this.parallelSubagentsEnabled}setParallelSubagentsEnabled(e){this.parallelSubagentsEnabled=e}getSessionId(){return this.sessionId}getCwd(){return this.cwd}getSystemMessage(){return this.systemMessage}updateSystemMessage(e){this.assertInputAllowed(),this.systemMessage=e,this.agent.updateSystemPrompt(e)}async applyModelOptions(e){await this.agent.ensureReady();let t=e.model??this.model;this.agent.setModel({provider:this.aiProvider.name,model:t,...e.effort!==void 0&&{effort:e.effort},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxOutputTokens!==void 0&&{maxTokens:e.maxOutputTokens}}),this.setActiveModel(t)}setActiveModel(e){this.model=e,this.contextTracker.setModel(e),this.compactionOrchestrator.setModel(e)}getModelEffort(){let e=this.agent.getModel;if(e===void 0)return`auto`;try{return e.call(this.agent).effort??`auto`}catch(e){if(e instanceof Error&&/disposed/i.test(e.message))return`auto`;throw e}}async withScopedModelEffort(e,t){let n=this.getModelEffort();await this.applyModelOptions({effort:e});try{return await t()}finally{await this.applyModelOptions({effort:n})}}async applyAgentName(e){await this.agent.updateConfiguration({name:e})}getToolSchemas(){return this.toolSchemas}getMessageCount(){return this.messageCount}applyPresetToolLists(e){this.permissionEnforcer.applyPresetToolLists(e)}getPermissionRules(){let e=this.permissionEnforcer.currentPermissionRules();return{allow:[...e.allow],deny:[...e.deny],ask:[...e.ask]}}getSessionAllowedTools(){return this.permissionEnforcer.getSessionAllowedTools()}checkToolPermission(e,t,n){return this.permissionEnforcer.checkDelegatedToolCall(e,t,n)}requireClassifierFor(e){if(e===`auto`&&!this.permissionEnforcer.hasPermissionClassifier())throw Error(`Auto mode is unavailable: this session has no permission classifier.`)}retryPermissionDenial(e){return this.permissionEnforcer.allowRetryOfDenial(e)}getRecentPermissionDenials(){return this.permissionEnforcer.getRecentDenials()}clearSessionAllowedTools(){this.permissionEnforcer.clearSessionAllowedTools()}abort(){this.turnClaim.abort()}isRunning(){return this.turnClaim.isRunning()}getContextState(){return this.contextTracker.getContextState()}syncContextFromHistory(){this.contextTracker.updateFromHistory(this.agent.getHistory())}getAutoCompactThreshold(){return this.contextTracker.getAutoCompactThreshold()}setAutoCompactThreshold(e){this.contextTracker.setAutoCompactThreshold(e)}getHistory(){return structuredClone(this.agent.getHistory())}getFullHistory(){return structuredClone(this.agent.getFullHistory())}getSessionTokenUsage(){let e=0,t=0,n=!1;for(let r of this.getFullHistory()){if(r.category!==`event`||r.type!==`usage-summary`)continue;let i=r.data;e+=i?.promptTokens??0,t+=i?.completionTokens??0,n=!0}return n?{inputTokens:e,outputTokens:t}:void 0}getModelId(){return this.model}getOfferedToolSchemas(){return this.agent.getOfferedToolSchemas()}getProvider(){return this.aiProvider}getProviderId(){return this.aiProvider.name}addHistoryEntry(e){this.assertInputAllowed(),this.agent.addHistoryEntry(e)}injectMessage(e,t,n){this.assertInputAllowed(),this.agent.injectMessage(e,t,n)}injectRawMessage(e){this.assertInputAllowed(),this.agent.injectRawMessage(e)}clearHistory(){this.assertInputAllowed(),this.agent.clearHistory(),this.contextTracker.reset()}};function We(e){return JSON.stringify(typeof e==`string`?e:e??``)}function k(e){let t=(e.parts??[]).flatMap(e=>{let t=Te(e);return t===void 0?[]:[t]});return t.length>0?JSON.stringify({content:e.content,observations:t}):We(e.content)}function Ge(e){let t=Ee(e);return t?`user [from ${JSON.stringify(De(t))}]`:`user`}function Ke(e){switch(e.role){case`user`:return[`${Ge(e)}: ${k(e)}`];case`assistant`:{let t=[];e.content!==null&&e.content!==``&&t.push(`assistant: ${k(e)}`);for(let n of e.toolCalls??[])t.push(`assistant tool call ${JSON.stringify(n.function.name)} [${JSON.stringify(n.id)}]: ${We(n.function.arguments)}`);return t.length>0?t:[`assistant: ""`]}case`tool`:return[`tool result${e.name?` ${JSON.stringify(e.name)}`:``} [${JSON.stringify(e.toolCallId)}]: ${k(e)}`];case`system`:return[`system: ${k(e)}`]}}function qe(e){return e.map(e=>Ke(e).join(`
|
|
2
2
|
`))}function A(e,t){if(!Array.isArray(e))throw Error(`${t} requires \`hookTypeExecutors\`: the executors that run a hook's handlers. On Node pass \`[new CommandExecutor(), new HttpExecutor()]\` from \`@robota-sdk/agent-core/node\`; pass \`[]\` to run no hook handlers.`);return e}var j=class extends Error{constructor(e){super(e),this.name=`CompactionError`}};const Je=[`Summarize the following conversation concisely, preserving:`,`- User's original requests and goals`,`- Key decisions, conclusions, and important state`,`- Identifiers, names, and references needed to continue the work`,`- Current task status and next steps`,`Drop verbose intermediate outputs and exploratory work that didn't lead to results.`].join(`
|
|
3
3
|
`);var Ye=class{sessionId;cwd;model;hooks;compactInstructions;basePrompt;hookTypeExecutors;constructor(e){this.sessionId=e.sessionId,this.cwd=e.cwd,this.model=e.model,this.hooks=e.hooks,this.compactInstructions=e.compactInstructions,this.basePrompt=e.basePrompt,this.hookTypeExecutors=A(e.hookTypeExecutors,`CompactionOrchestrator`)}setModel(e){this.model=e}async compact(e,t,n,r,i=`manual`,a,o){if(r?.throwIfAborted(),t.length===0)throw new j(`Compaction was asked to summarise an empty history; conversation history preserved untouched`);let s={session_id:this.sessionId,cwd:this.cwd,hook_event_name:`PreCompact`,trigger:i};await O(this.hooks,`PreCompact`,s,this.hookTypeExecutors,a);let c=this.buildCompactionPrompt(t,n),l=D(),u=D(),d=e.resolveModelRoute?.(this.model,u)??{provider:e.name,model:this.model},f=await se(async(t,n)=>{try{return await e.chat(t,n)}catch(e){throw r?.aborted?ce(`Compaction cancelled`,e):e}},[{id:D(),role:`user`,content:c,state:`complete`,timestamp:new Date}],{model:this.model,executionId:u,onTextDelta:()=>{},onModelFallback:e=>{d={...e.to}},toolChoice:`none`,preserveContextWindow:!0,...r===void 0?{}:{signal:r}},o?{journal:o,executionId:u,callId:l,route:()=>({providerId:d.provider,modelId:d.model})}:void 0);if(r?.throwIfAborted(),typeof f.content!=`string`||f.content.trim()===``)throw new j(`Compaction produced an invalid summary (provider=${e.name}, content type=${typeof f.content}); conversation history preserved untouched`);return f.content}buildCompactionPrompt(e,t){let n=t??this.compactInstructions??``,r=n?`\nAdditional focus:\n${n}\n`:``,i=qe(e).join(`
|
|
4
4
|
`);return[this.basePrompt??Je,r,``,`Conversation:`,i].join(`
|
package/dist/node.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require("./session-claims-BQGdD3Fe.cjs");let l=require("@robota-sdk/agent-core"),u=require("node:fs"),d=require("node:path"),f=require("koffi");f=s(f,1);let p=require("fs"),m=require("path"),h=require("@robota-sdk/agent-core/node"),g=require("node:buffer"),_=require("node:crypto"),ee=require("@robota-sdk/agent-file-authority"),v;const te=[];function ne(){if(v!==void 0)return v;let e=f.load(`kernel32.dll`);te.push(e);let t=f.pointer(`RobotaSessionOperationGuardHandle`,f.opaque()),n=f.struct(`RobotaSessionOperationGuardAttributes`,{FileAttributes:`uint32_t`,ReparseTag:`uint32_t`}),r=f.struct(`RobotaSessionOperationGuardStandard`,{AllocationSize:`int64_t`,EndOfFile:`int64_t`,NumberOfLinks:`uint32_t`,DeletePending:`uint8_t`,Directory:`uint8_t`});return v={open:e.func(`CreateFileW`,t,[f.pointer(`char16_t`),`uint32_t`,`uint32_t`,`void *`,`uint32_t`,`uint32_t`,t]),close:e.func(`CloseHandle`,`bool`,[t]),lastError:e.func(`GetLastError`,`uint32_t`,[]),attributes:e.func(`GetFileInformationByHandleEx`,`bool`,[t,`int32_t`,f.out(f.pointer(n)),`uint32_t`]),attributeType:n,standard:e.func(`GetFileInformationByHandleEx`,`bool`,[t,`int32_t`,f.out(f.pointer(r)),`uint32_t`]),standardType:r},v}function re(e){let t=ne(),n=t.open(e,3221225472,0,null,4,2097280,null);if(n===null||BigInt.asIntN(64,n)===-1n){let e=t.lastError();if(e===32)return;throw Error(`Could not acquire a process operation lock (Windows error ${e}).`)}try{let e={},r={};if(!t.attributes(n,9,e,f.sizeof(t.attributeType))||!t.standard(n,1,r,f.sizeof(t.standardType))||(e.FileAttributes??0)&1024||r.Directory!==0||r.NumberOfLinks!==1)throw Error(`The process operation lock is not a unique regular file.`);let i=!1;return Object.freeze({release:()=>{if(!i&&(i=!0,!t.close(n)))throw Error(`Could not release a process operation lock.`)}})}catch(e){throw t.close(n),e}}const ie=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;let y;const ae=[];function oe(){if(y===void 0){let e=f.load(process.platform===`darwin`?`/usr/lib/libSystem.B.dylib`:`libc.so.6`);ae.push(e),y=e.func(`int flock(int fd, int operation)`)}return y}function se(e){let t=(0,u.openSync)(e,u.constants.O_RDWR|u.constants.O_CREAT|(u.constants.O_NOFOLLOW??0),384);try{let n=(0,u.fstatSync)(t,{bigint:!0}),r=(0,u.lstatSync)(e,{bigint:!0});if(!n.isFile()||n.nlink!==1n||n.dev!==r.dev||n.ino!==r.ino)throw Error(`The process operation lock is not a unique regular file.`);(0,u.fchmodSync)(t,384);let i=oe();if(i(t,6)!==0){let e=f.errno();if(e===f.os.errno.EAGAIN||e===f.os.errno.EWOULDBLOCK){(0,u.closeSync)(t);return}throw Error(`Could not acquire a process operation lock (errno ${e}).`)}let a=!1;return Object.freeze({release:()=>{if(!a){a=!0;try{i(t,8)}finally{(0,u.closeSync)(t)}}}})}catch(e){throw(0,u.closeSync)(t),e}}function b(e){let t=(0,d.resolve)(e);return Object.freeze({tryAcquire:e=>{if(!ie.test(e))throw Error(`A process operation lock name must be one safe path component.`);let n=(0,d.join)(t,`${e}.guard`);if(process.platform===`win32`)return re(n);if(process.platform===`darwin`||process.platform===`linux`)return se(n);throw Error(`Process operation locking is unsupported on this platform.`)}})}const ce=`the sealed session file does not open for this session: it is damaged or sealed with other keys`,le=/^[0-9a-f]{64}$/;function ue(e){return typeof e==`string`&&le.test(e)}function x(e){return(0,_.createHash)(`sha256`).update(e).digest(`hex`)}function de(e,t){return g.Buffer.from(e.buffer,e.byteOffset,e.byteLength).equals(t)}function S(e){return{kind:`session-record`,id:e}}function C(e){return g.Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString(`utf8`)}function fe(e){return JSON.stringify({schemaVersion:2,record:e},null,2)}function pe(e,t){let n=fe(e),r=g.Buffer.from(n,`utf8`);return{stored:t===void 0?r:t.sealBytes(r,S(e.id)),text:n}}function me(e,t,n){if(!(0,l.isSealedArtifactBytes)(t))return`plain`;if(!(0,l.isCurrentSealedArtifactBytes)(t))return`newer-format`;let r;try{r=n.openBytes(t,S(e))}catch(e){if((0,l.isArtifactLockedError)(e))throw e;return`does-not-open`}return r.fill(0),`sealed`}function he(e,t,n){return n.sealBytes(t,S(e))}function ge(e){let t;try{t=JSON.parse(e)}catch{return{status:`corrupt`,issues:[{path:``,message:`the session file is not JSON`}]}}let n=c.b(t);return n.status===`valid`?{status:`valid`,record:n.record}:n.status===`unsupported`?{status:`unsupported`,schemaVersion:n.schemaVersion,...n.cwd===void 0?{}:{cwd:n.cwd}}:{status:`corrupt`,issues:n.issues,...n.cwd===void 0?{}:{cwd:n.cwd}}}function w(e,t){let n=ge(t);return n.status!==`valid`||n.record.id===e?n:{status:`corrupt`,issues:[{path:`id`,message:`the record belongs to another session id`}]}}function _e(e,t){return w(e,C(t)).status===`valid`}function ve(e){return e===void 0?{kind:`absent`}:(0,l.isSealedArtifactBytes)(e)?{kind:`sealed`,bytes:e}:{kind:`plain`,bytes:e}}function T(e){return e.kind===`sealed`||e.kind===`plain`?e.bytes:void 0}var ye=class{#e=new Map;#t=new Set;#n=new Set;#r;constructor(e=()=>!1){this.#r=e}get size(){return this.#t.size}state(e){return this.#e.get(e)}hold(e,t){this.#i(e).held=t,this.#t.delete(e),this.#t.add(e);for(let e of this.#t){if(this.#t.size<=32)break;this.#e.get(e)?.held?.kind===`pinned`||this.#r(e)||this.dropHeld(e)}}holdHandoff(e,t){this.#i(e).handoff=t,this.#n.delete(e),this.#n.add(e);for(let e of this.#n){if(this.#n.size<=8)break;this.dropHandoff(e)}}dropHeld(e){this.#t.delete(e),this.#a(e,e=>delete e.held)}dropHandoff(e){this.#n.delete(e),this.#a(e,e=>delete e.handoff)}taint(e){this.#i(e).tainted=!0}untaint(e){this.#a(e,e=>e.tainted=!1)}setPending(e,t){this.#i(e).pendingDigest=t}clearPending(e){this.#a(e,e=>delete e.pendingDigest)}pending(){let e=[];for(let[t,n]of this.#e)n.pendingDigest!==void 0&&e.push([t,n.pendingDigest]);return e}forget(e){this.#t.delete(e),this.#n.delete(e),this.#a(e,e=>{delete e.held,delete e.handoff,delete e.pendingDigest})}#i(e){let t=this.#e.get(e);return t===void 0&&(t={tainted:!1},this.#e.set(e,t)),t}#a(e,t){let n=this.#e.get(e);n!==void 0&&(t(n),n.held===void 0&&n.handoff===void 0&&n.pendingDigest===void 0&&!n.tainted&&this.#e.delete(e))}};const be=`rsh2.`,xe={owner:!0,unverified:!1},Se=/^[A-Za-z0-9_-]+$/,Ce=new TextDecoder(`utf-8`,{fatal:!0});function we(e,t,n){return`${be}${n?`owner`:`unverified`}.${e}.${g.Buffer.from(t,`utf8`).toString(`base64url`)}`}function Te(e){if(typeof e!=`string`||!e.startsWith(be))return;let[t,n,r,...i]=e.slice(5).split(`.`);if(t!==`owner`&&t!==`unverified`||i.length>0||n===void 0||r===void 0||!ue(n)||!Se.test(r))return;let a=g.Buffer.from(r,`base64url`);if(a.toString(`base64url`)===r)try{return{digest:n,text:Ce.decode(a),owner:xe[t]}}catch{return}}const Ee=`robota-authorship/v1 `,E=g.Buffer.from(Ee,`ascii`),De=/^[A-Za-z0-9_-]+$/;function Oe(e,t){let n=g.Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString(`base64url`);return g.Buffer.concat([g.Buffer.from(`${Ee}${n}\n`,`ascii`),t])}function ke(e){let t=g.Buffer.from(e.buffer,e.byteOffset,e.byteLength);if(t.length<E.length||!t.subarray(0,E.length).equals(E))return{envelope:e,tag:void 0};let n=t.indexOf(10,E.length);if(n<0)return{envelope:e,tag:`malformed`};let r=t.subarray(E.length,n).toString(`latin1`),i=e.subarray(n+1);if(!De.test(r))return{envelope:i,tag:`malformed`};let a=g.Buffer.from(r,`base64url`);return a.length!==32||a.toString(`base64url`)!==r?{envelope:i,tag:`malformed`}:{envelope:i,tag:a}}const D={probe:{writer:!1,takes:!1,holds:!1,taints:!0},hold:{writer:!0,takes:!0,holds:!0,taints:!0},list:{writer:!1,takes:!1,holds:!1,taints:!1},held:{writer:!0,takes:!0,holds:!1,taints:!0},export:{writer:!0,takes:!1,holds:!1,taints:!0},claim:{writer:!0,takes:!0,holds:!0,taints:!0},save:{writer:!0,takes:!1,holds:!1,taints:!1}},O=Object.freeze({status:`locked`,reason:`no-keys`}),k=Object.freeze({status:`locked`,reason:`changed`}),Ae=Object.freeze({status:`locked`}),je=Object.freeze({status:`missing`});function A(e,t,n,r){return{status:`valid`,record:e.record,authorship:t?`verified`:`unverified`,...n===void 0?{}:{digest:n},...r?{diverged:!0}:{}}}function j(e,t,n){let r;try{r=e.openBytes(n,S(t))}catch(e){return(0,l.isArtifactLockedError)(e)?e.reason===`no-keys`?{kind:`no-keys`}:{kind:`locked`}:{kind:`does-not-open`}}try{let{envelope:n,tag:i}=ke(r),a=!1;if(i instanceof Uint8Array&&e.verifyAuthorship!==void 0)try{a=e.verifyAuthorship(n,i,S(t))===!0}catch{a=!1}return{kind:`text`,text:C(n),verified:a}}finally{r.fill(0)}}function Me(e,t,n){let r,i=!1;if(!(0,l.isSealedArtifactBytes)(t))r=C(t);else{if(!(0,l.isCurrentSealedArtifactBytes)(t))return{status:`unsupported`,schemaVersion:void 0};let a=j(n,e,t);if(a.kind===`locked`)return Ae;if(a.kind===`no-keys`)return O;if(a.kind===`does-not-open`)return{status:`corrupt`,issues:[{path:``,message:ce}]};r=a.text,i=a.verified}let a=w(e,r);return a.status===`valid`?A(a,i,x(t),!1):a}var Ne=class{#e;#t;#n;#r;#i;#a;constructor(e,t,n,r,i){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.#i=i,e.tagAuthorship!==void 0&&e.onUnlock!==void 0&&(this.#a=()=>this.#g(),e.onUnlock(this.#a))}read(e,t,n,r,i){let a=this.guarded(e,t,i);if(a!==void 0)return a;if(t.kind===`absent`){let t=r();return t.status===`valid`?this.#l(e,t,`unverified`,void 0,i,!1):t}let o=T(t);return o===void 0?n:this.decode(e,o,i)}decode(e,t,n){let r,i=!1;if(!(0,l.isSealedArtifactBytes)(t))r=C(t);else{if(!(0,l.isCurrentSealedArtifactBytes)(t))return{status:`unsupported`,schemaVersion:void 0};let n=j(this.#e,e,t);if(n.kind===`locked`)return Ae;if(n.kind===`no-keys`)return O;if(n.kind===`does-not-open`)return{status:`corrupt`,issues:[{path:``,message:ce}]};r=n.text,i=n.verified}let a=w(e,r);if(a.status!==`valid`)return a;let o=x(t),s=this.#n.state(e),c=i||this.#s(s,s?.held,o)?`owner`:`unverified`;return D[n].holds&&this.#n.hold(e,{digest:o,text:r,kind:c}),this.#l(e,a,c,o,n,!1)}claimRead(e,t,n,r,i){let a=this.#n.state(e)?.held,o=T(n);return!t&&a!==void 0&&o!==void 0&&x(o)===a.digest?this.#c(e,a,`claim`,!1):this.read(e,n,r,i,`claim`)}beforeClaim(e,t,n){if(this.#n.state(e)?.held?.kind===`pinned`&&!n)throw this.#r.refusal(e,`has_writer`);t&&(this.#n.dropHeld(e),this.#n.dropHandoff(e))}guarded(e,t,n){let r=this.#n.state(e),i=this.#o(e,r),a=i?void 0:r?.handoff;if(!i&&a===void 0)return;let o=D[n],s=T(t),c=s===void 0?void 0:x(s);if(a!==void 0)return o.takes&&this.#n.dropHandoff(e),s===void 0||c!==a.digest?k:(o.takes&&this.#n.hold(e,a),this.#c(e,a,n,!1));let u=r?.held;if(u!==void 0&&c===u.digest)return this.#c(e,u,n,!1);let d=!1;if(u?.kind!==`pinned`&&t.kind===`sealed`&&(0,l.isCurrentSealedArtifactBytes)(t.bytes)){let r=j(this.#e,e,t.bytes);if(r.kind===`text`&&r.verified&&c!==void 0){let t=w(e,r.text);if(t.status===`valid`)return n!==`save`&&this.#n.hold(e,{digest:c,text:r.text,kind:`owner`}),A(t,!0,c,!1)}d=r.kind===`locked`}return t.kind===`absent`?u===void 0?je:this.#c(e,u,n,!0):o.writer||u===void 0?d?Ae:k:this.#c(e,u,n,!0)}assertReplaceable(e,t){let n=this.guarded(e,t,`save`);if(n!==void 0){if(n.status!==`locked`)return;throw new c.a(e,n.reason===`changed`?`changed`:`locked`)}switch(t.kind){case`absent`:case`plain`:return;case`unreadable`:case`oversized`:throw new c.a(e,`unreadable`);case`sealed`:break}let r=t.bytes;if(!(0,l.isCurrentSealedArtifactBytes)(r))throw new c.a(e,`newer-format`);let i=this.#n.state(e)?.held;if(i!==void 0&&i.digest===x(r))return;let a=j(this.#e,e,r);if(a.kind!==`text`)throw new c.a(e,i===void 0?a.kind===`locked`||a.kind===`no-keys`?a.kind:`does-not-open`:`changed`)}prepare(e,t,n){let r=g.Buffer.from(t,`utf8`),i=this.#d(e,n),a=r,o=!1;if(i===`owner`){let t=this.#f(e,r);t===`locked`?o=n.handoff!==!0:t!==void 0&&(a=Oe(t,r))}try{return{stored:this.#e.sealBytes(a,S(e)),text:t,heldAs:i,tagPending:o}}finally{a!==r&&a.fill(0)}}wrote(e,t,n){let r=this.#n.state(e)?.held,i=t.heldAs===`pinned`&&r?.kind===`pinned`&&r.vouched,a={digest:x(t.stored),text:t.text,kind:t.heldAs,...i===!0?{vouched:i}:{}};n&&!this.#r.has(e)&&t.heldAs!==`pinned`?(this.#n.dropHeld(e),this.#n.holdHandoff(e,a)):(this.#n.dropHandoff(e),this.#n.hold(e,a)),t.tagPending?this.#n.setPending(e,a.digest):this.#n.clearPending(e)}wroteIfPresent(e,t,n,r){n.kind===`sealed`&&de(n.bytes,t.stored)&&this.wrote(e,t,r)}held(e,t){let n=this.guarded(e,t,`held`);if(n!==void 0)return n;let r=this.#n.state(e)?.held;if(r===void 0)return;let i=T(t);return i===void 0||x(i)!==r.digest?k:this.#c(e,r,`held`,!1)}exportHeld(e,t,n){if(t.kind!==`sealed`||!(0,l.isCurrentSealedArtifactBytes)(t.bytes))return;let r=x(t.bytes),i=(e,t)=>we(r,e,t===`owner`),a=this.#n.state(e);if(this.#o(e,a)){if(n.handoffOnly===!0)return;let a=this.guarded(e,t,`export`),o=this.#n.state(e)?.held;return a?.status!==`valid`||a.diverged===!0||o?.digest!==r?void 0:i(o.text,a.authorship===`verified`?`owner`:`unverified`)}let o=a?.handoff;if(o!==void 0)return n.keep!==!0&&this.#n.dropHandoff(e),o.digest===r?(this.#u(e,o.kind,`export`),i(o.text,o.kind)):void 0;if(n.handoffOnly===!0)return;let s=j(this.#e,e,t.bytes);if(s.kind!==`text`||w(e,s.text).status!==`valid`)return;let c=s.verified||this.#s(a,a?.held,r)?`owner`:`unverified`;return this.#u(e,c,`export`),i(s.text,c)}importHeld(e,t){let n=Te(t);if(n===void 0)throw TypeError(`The held record is not a token this build issues.`);if(w(e,n.text).status!==`valid`)throw TypeError(`The held record is not a valid record of this session.`);this.#r.assertUnclaimed(e),this.#n.dropHandoff(e),this.#n.hold(e,{digest:n.digest,text:n.text,kind:`pinned`,...n.owner?{vouched:!0}:{}})}adopt(e,t){if(!ue(t))return`changed`;let n=this.#n.state(e),r=this.#t.current(e),i=T(r),a=i===void 0?void 0:x(i),o=n?.held;if(o!==void 0&&o.digest===t&&o.kind!==`pinned`)return this.#n.hold(e,{...o,kind:`owner`}),this.#n.untaint(e),a===t&&this.#m(e,t,o.text,!0)===`pending`?`pending`:`adopted`;if(i===void 0||a!==t||this.#e.tagAuthorship===void 0)return`changed`;let s=this.#p(e,r,i);if(s===`locked`)return this.#n.untaint(e),this.#n.setPending(e,t),`pending`;if(s===void 0||w(e,s).status!==`valid`)return`changed`;let c=this.#m(e,t,s,!1);return c!==`changed`&&this.#n.untaint(e),c}heldDigest(e){return this.#n.state(e)?.held?.digest}forget(e){this.#n.forget(e)}onUnlock(e){return this.#e.onUnlock?.(e)??(()=>void 0)}#o(e,t){return this.#r.has(e)||t?.held?.kind===`pinned`}#s(e,t,n){return e?.pendingDigest===n||t?.kind===`owner`&&t.digest===n}#c(e,t,n,r){let i=w(e,t.text);if(i.status!==`valid`)return i;if(t.kind===`pinned`)return A(i,t.vouched===!0,t.digest,r);let a=this.#s(this.#n.state(e),t,t.digest)?`owner`:`unverified`;return this.#l(e,i,a,t.digest,n,r)}#l(e,t,n,r,i,a){return this.#u(e,n,i),A(t,n===`owner`,r,a)}#u(e,t,n){t!==`owner`&&D[n].taints&&!this.#o(e,this.#n.state(e))&&this.#n.taint(e)}#d(e,t){let n=this.#n.state(e),r=n?.held??n?.handoff;return r?.kind===`pinned`?`pinned`:t.provenance===`unverified`||!this.#r.has(e)&&n?.tainted===!0?`unverified`:r===void 0?t.provenance===`owner`?`owner`:`unverified`:r.kind}#f(e,t){if(this.#e.tagAuthorship!==void 0)try{return this.#e.tagAuthorship(t,S(e))}catch(e){if((0,l.isArtifactLockedError)(e))return`locked`;throw e}}#p(e,t,n){if(t.kind!==`sealed`)return C(n);if(!(0,l.isCurrentSealedArtifactBytes)(n))return;let r=j(this.#e,e,n);return r.kind===`locked`?`locked`:r.kind===`text`?r.text:void 0}#m(e,t,n,r){let i=g.Buffer.from(n,`utf8`),a=this.#f(e,i);return a===`locked`?(this.#n.setPending(e,t),`pending`):a===void 0||this.#h(e,i,n,a,t,r)?`adopted`:`changed`}#h(e,t,n,r,i,a){let o=Oe(r,t),s;try{s=this.#e.sealBytes(o,S(e))}finally{o.fill(0)}let c=T(this.#t.current(e));if(c===void 0||x(c)!==i)return!1;let l={stored:s,text:n,heldAs:`owner`,tagPending:!1};try{this.#t.replace(e,s)}catch(t){throw a&&this.wroteIfPresent(e,l,this.#t.current(e),!1),t}return this.#n.clearPending(e),a&&this.wrote(e,l,!1),!0}#g(){for(let[e,t]of this.#n.pending()){this.#n.clearPending(e);try{this.#i(e,()=>this.#_(e,t))}catch{}}}#_(e,t){let n=this.#t.current(e),r=T(n);if(r===void 0||x(r)!==t)return;let i=this.#n.state(e)?.held,a=i?.digest===t,o=a?i.text:this.#p(e,n,r);if(o===void 0||o===`locked`||w(e,o).status!==`valid`)return;let s=g.Buffer.from(o,`utf8`),c=this.#f(e,s);c instanceof Uint8Array&&this.#h(e,s,o,c,t,a)}};function Pe(e){let t=e;if(typeof t?.acquire!=`function`||typeof t.takeOver!=`function`||typeof t.endLease!=`function`||typeof t.inspect!=`function`)throw TypeError(`A session store holds a writer marker for every id it writes: build it with the markers of its claims directory.`)}function M(e){if(typeof e!=`object`||!e)throw TypeError(`Session store options must be an object, such as { sealing }.`);return N(e.sealing),e.sealing}function N(e){if(e===`plain`)return;let t=typeof e==`object`&&e?e.sealer:void 0;if(!(typeof t==`object`&&t&&typeof t.sealBytes==`function`&&typeof t.openBytes==`function`))throw TypeError(`A session store states how it seals: { sealer }, or 'plain'.`)}var Fe=class{#e;#t;#n;#r;#i;authorship;constructor(e,t,n,r={}){if(N(e),Pe(n),this.#e=e===`plain`?void 0:e.sealer,this.#t=t,this.#n=n,this.#r=new c.n(r.releaseCommand===void 0?{}:{releaseCommand:r.releaseCommand},{pid:process.pid,windows:process.platform===`win32`}),this.#e===void 0){this.#i=void 0,this.authorship=void 0;return}let i=new Ne(this.#e,t,new ye(e=>this.#r.has(e)),this.#r,(e,t)=>this.#l(e,t));this.#i=i,this.authorship=Object.freeze({adopt:(e,t)=>{c.m(e);let n=this.#l(e,()=>i.adopt(e,t));return n===`has_writer`?`has_writer`:n},heldDigest:e=>(c.m(e),i.heldDigest(e)),onUnlock:e=>i.onUnlock(e)})}get seals(){return this.#e!==void 0}load(e,t={}){return this.#u(e,t.hold===!0?`hold`:`probe`)}listed(e){return this.#u(e,`list`)}claim(e,t={}){this.#r.assertUnclaimed(e);let n=t.fresh===!0;this.#i?.beforeClaim(e,n,t.lease!==void 0);let r=t.copy===!0?void 0:this.#o(e,t.lease),i=()=>this.#r.open(e,n,r,()=>{let{file:t,unreadable:r}=this.#t.load(e);return this.#i===void 0?this.#d(e,t,r):this.#i.claimRead(e,n,t,r,()=>this.#p(e))});if(r===void 0)return i();try{return this.#c(e,r,i)}catch(e){throw r.release(),e}}lend(e){this.#r.assertUnclaimed(e);let t=(0,_.randomBytes)(32).toString(`hex`),n=(0,_.createHash)(`sha256`).update(t,`utf8`).digest(`hex`),r=this.#n.acquire(e,{leaseDigest:n});if(r.status!==`acquired`)throw this.#r.refusal(e,`has_writer`,{holder:c.i(r.holder)});let i=this.#r.lend(e,()=>{let t=this.#n.inspect(e);return t.status===`held`?t.holder:void 0}),a=!1;return Object.freeze({nonce:t,end:()=>{if(!a){a=!0;try{this.#n.endLease(e,n)}finally{i()}}}})}hasWriter(e){if(this.#r.has(e)||this.#r.isLent(e))return!0;let t=this.#n.inspect(e);return t.status===`held`&&t.holder.liveness!==`gone`}save(e,t={}){let n=e.id,r=this.#r.markerForSave(n,t.claim);if(r!==void 0){this.#c(n,r,()=>this.#a(e,t));return}this.#s(n,()=>this.#a(e,t))}delete(e,t){this.#r.markerForSave(e,void 0),this.#s(e,()=>{this.forget(e),t()})}#a(e,t){let n=e.id,r=this.#t.current(n),i=this.#i;if(i===void 0){this.#f(n,r),this.#t.replace(n,pe(e,void 0).stored);return}i.assertReplaceable(n,r);let a=i.prepare(n,fe(e),t),o=t.handoff===!0;try{this.#t.replace(n,a.stored)}catch(e){throw i.wroteIfPresent(n,a,this.#m(n),o),e}i.wrote(n,a,o)}loadHeld(e){return this.#i?.held(e,this.#t.current(e))}exportHeld(e,t={}){return this.#i?.exportHeld(e,this.#t.current(e),t)}importHeld(e,t){if(this.#i===void 0)throw TypeError(`A store that seals nothing does not take a held record: it would write it in plaintext.`);this.#i.importHeld(e,t)}forget(e){this.#i?.forget(e)}#o(e,t){if(t===void 0){let t=this.#n.acquire(e);if(t.status===`acquired`)return t.handle;throw this.#r.refusal(e,`has_writer`,{holder:c.i(t.holder)})}let n=this.#n.takeOver(e,t);if(n.status===`acquired`)return n.handle;throw n.status===`absent`?this.#r.refusal(e,`released`,{lease:!0}):this.#r.refusal(e,`has_writer`,{holder:c.i(n.holder)})}#s(e,t){let n=this.#n.acquire(e);if(n.status!==`acquired`)throw this.#r.refusal(e,`has_writer`,{holder:c.i(n.holder)});try{return this.#c(e,n.handle,t)}finally{n.handle.release()}}#c(e,t,n){let r=t.withGuard(n);if(r.status===`ran`)return r.value;throw this.#r.refusal(e,r.status===`lost`?`released`:`has_writer`)}#l(e,t){try{let n=this.#r.markerForWrite(e);if(n!==void 0)return this.#c(e,n,t)}catch(e){if(c.r(e))return`has_writer`;throw e}let n=this.#n.acquire(e);if(n.status!==`acquired`)return`has_writer`;try{return this.#c(e,n.handle,t)}catch(e){if(c.r(e))return`has_writer`;throw e}finally{n.handle.release()}}#u(e,t){let{file:n,unreadable:r}=this.#t.load(e);return this.#i===void 0?this.#d(e,n,r):this.#i.read(e,n,r,()=>this.#p(e),t)}#d(e,t,n){if(t.kind===`absent`)return this.#p(e);let r=T(t);return r===void 0?n:(0,l.isSealedArtifactBytes)(r)?(0,l.isCurrentSealedArtifactBytes)(r)?O:{status:`unsupported`,schemaVersion:void 0}:w(e,C(r))}#f(e,t){switch(t.kind){case`absent`:case`plain`:case`oversized`:return;case`unreadable`:throw new c.a(e,`unreadable`);case`sealed`:throw new c.a(e,(0,l.isCurrentSealedArtifactBytes)(t.bytes)?`no-keys`:`newer-format`)}}#p(e){return this.#t.rebuild?.(e)??je}#m(e){try{return this.#t.current(e)}catch{return{kind:`unreadable`}}}};function P(e){return typeof e==`object`&&e?e.code:void 0}function Ie(e){let t=P(e);return typeof t==`string`&&/^E[A-Z0-9]+$/.test(t)?`could not read the session file (${t})`:`could not read the session file`}function Le(e,t){let n=Buffer.alloc(Math.max((0,p.fstatSync)(e).size,t.length));t.copy(n,0);let r=t.length;for(;r<n.length;){let t=(0,p.readSync)(e,n,r,n.length-r,r);if(t===0)break;r+=t}return n.subarray(0,r)}const Re=Object.freeze({status:`missing`}),F=`claims`;function ze(e){let t=0,n=0;for(let{outcome:r}of e)r.status===`locked`&&(r.reason===`no-keys`?n+=1:t+=1);return n===0?{locked:t}:{locked:t,noKeys:n}}function Be(e,t){let n=e=>e.outcome.status===`valid`?new Date(e.outcome.record.updatedAt).getTime():0;return n(t)-n(e)}var Ve=class{baseDir;ownedRoot;records;constructor(e,t){let n=M(t);this.records=new Fe(n,{load:e=>this.loadFile(e),current:e=>this.readExisting(this.filePath(e)),replace:(e,t)=>{this.ensureDir(),(0,h.writeOwnerOnlyFile)(this.filePath(e),t)}},(0,h.createProcessMarkers)((0,m.join)((0,m.resolve)(e),F),{operationLock:b((0,m.join)((0,m.resolve)(e),F))}),t.releaseCommand===void 0?{}:{releaseCommand:t.releaseCommand}),this.baseDir=e,this.ownedRoot=t.ownedRoot;let r=this.records.authorship;r!==void 0&&(this.authorship=r)}claim(e,t){return this.filePath(e),this.records.claim(e,t)}lend(e){return this.filePath(e),this.records.lend(e)}hasWriter(e){return this.filePath(e),this.records.hasWriter(e)}ensureDir(){(0,h.ensureOwnerOnlyDirectory)(this.baseDir,this.ownedRoot===void 0?{}:{withinRoot:this.ownedRoot})}filePath(e){c.m(e);let t=(0,m.resolve)(this.baseDir),n=(0,m.resolve)(t,`${e}.json`);if(!n.startsWith(t+m.sep))throw Error(`Invalid session id: ${JSON.stringify(e)} resolves outside the session store.`);return n}save(e,t={}){this.ensureDir(),this.filePath(e.id),this.records.save(e,t)}readExisting(e){let t;try{t=(0,p.openSync)(e,`r`)}catch(e){return P(e)===`ENOENT`?{kind:`absent`}:{kind:`unreadable`}}try{let e=Buffer.alloc(l.SEALED_ARTIFACT_MAGIC.length),n=(0,p.readSync)(t,e,0,e.length,0);return(0,l.isSealedArtifactBytes)(e.subarray(0,n))?{kind:`sealed`,bytes:Le(t,e)}:this.records.seals?{kind:`plain`,bytes:Le(t,e.subarray(0,n))}:{kind:`plain`}}catch{return{kind:`unreadable`}}finally{(0,p.closeSync)(t)}}load(e,t={}){return this.filePath(e),this.records.load(e,t)}loadFile(e){let t=this.filePath(e),n;try{n=(0,p.readFileSync)(t)}catch(e){return P(e)===`ENOENT`?{file:{kind:`absent`},unreadable:Re}:{file:{kind:`unreadable`},unreadable:{status:`corrupt`,issues:[{path:``,message:Ie(e)}]}}}try{(0,h.tightenExistingFile)(t)}catch{}return{file:ve(n),unreadable:Re}}loadHeld(e){return this.filePath(e),this.records.loadHeld(e)}exportHeld(e,t){return this.filePath(e),this.records.exportHeld(e,t)}importHeld(e,t){this.filePath(e),this.records.importHeld(e,t)}list(){return this.scan().entries}scan(){let e=this.readAll();return{entries:e.filter(e=>e.outcome.status!==`locked`).sort(Be),...ze(e)}}readAll(){return(0,p.existsSync)(this.baseDir)?(0,p.readdirSync)(this.baseDir).filter(e=>e.endsWith(`.json`)).map(e=>e.slice(0,-5)).map(e=>({id:e,outcome:this.outcomeForListedId(e)})):[]}outcomeForListedId(e){return c.g(e)?this.records.listed(e):{status:`corrupt`,issues:[{path:``,message:`the file name is not a usable session id`}]}}delete(e){let t=this.filePath(e);this.records.delete(e,()=>{(0,p.existsSync)(t)&&(0,p.unlinkSync)(t)})}};const He=Object.freeze({kind:`does-not-open`}),Ue=Object.freeze({kind:`newer-format`}),We=Object.freeze({kind:`locked`,reason:`no-keys`}),Ge=/^R(?:S(?:L[0-9]?)?)?$/;function Ke(e){return N(e),e===`plain`?void 0:e.sealer}function qe(e){return e.reason===`no-keys`?`no-keys`:`locked`}var I=class{#e;#t;constructor(e,t){this.#e=Ke(e),this.#t=t}encode(e,t){return this.#e===void 0?e:`
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./session-claims-CVHnnUhA.cjs");let t=require("@robota-sdk/agent-core"),n=require("@robota-sdk/agent-node-lock"),r=require("fs"),i=require("path"),a=require("@robota-sdk/agent-core/node"),o=require("node:buffer"),s=require("node:crypto"),c=require("node:fs"),l=require("node:path"),u=require("@robota-sdk/agent-file-authority");const d=`the sealed session file does not open for this session: it is damaged or sealed with other keys`,f=/^[0-9a-f]{64}$/;function p(e){return typeof e==`string`&&f.test(e)}function m(e){return(0,s.createHash)(`sha256`).update(e).digest(`hex`)}function h(e,t){return o.Buffer.from(e.buffer,e.byteOffset,e.byteLength).equals(t)}function g(e){return{kind:`session-record`,id:e}}function _(e){return o.Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString(`utf8`)}function v(e){return JSON.stringify({schemaVersion:2,record:e},null,2)}function ee(e,t){let n=v(e),r=o.Buffer.from(n,`utf8`);return{stored:t===void 0?r:t.sealBytes(r,g(e.id)),text:n}}function te(e,n,r){if(!(0,t.isSealedArtifactBytes)(n))return`plain`;if(!(0,t.isCurrentSealedArtifactBytes)(n))return`newer-format`;let i;try{i=r.openBytes(n,g(e))}catch(e){if((0,t.isArtifactLockedError)(e))throw e;return`does-not-open`}return i.fill(0),`sealed`}function ne(e,t,n){return n.sealBytes(t,g(e))}function re(t){let n;try{n=JSON.parse(t)}catch{return{status:`corrupt`,issues:[{path:``,message:`the session file is not JSON`}]}}let r=e.b(n);return r.status===`valid`?{status:`valid`,record:r.record}:r.status===`unsupported`?{status:`unsupported`,schemaVersion:r.schemaVersion,...r.cwd===void 0?{}:{cwd:r.cwd}}:{status:`corrupt`,issues:r.issues,...r.cwd===void 0?{}:{cwd:r.cwd}}}function y(e,t){let n=re(t);return n.status!==`valid`||n.record.id===e?n:{status:`corrupt`,issues:[{path:`id`,message:`the record belongs to another session id`}]}}function ie(e,t){return y(e,_(t)).status===`valid`}function ae(e){return e===void 0?{kind:`absent`}:(0,t.isSealedArtifactBytes)(e)?{kind:`sealed`,bytes:e}:{kind:`plain`,bytes:e}}function b(e){return e.kind===`sealed`||e.kind===`plain`?e.bytes:void 0}var oe=class{#e=new Map;#t=new Set;#n=new Set;#r;constructor(e=()=>!1){this.#r=e}get size(){return this.#t.size}state(e){return this.#e.get(e)}hold(e,t){this.#i(e).held=t,this.#t.delete(e),this.#t.add(e);for(let e of this.#t){if(this.#t.size<=32)break;this.#e.get(e)?.held?.kind===`pinned`||this.#r(e)||this.dropHeld(e)}}holdHandoff(e,t){this.#i(e).handoff=t,this.#n.delete(e),this.#n.add(e);for(let e of this.#n){if(this.#n.size<=8)break;this.dropHandoff(e)}}dropHeld(e){this.#t.delete(e),this.#a(e,e=>delete e.held)}dropHandoff(e){this.#n.delete(e),this.#a(e,e=>delete e.handoff)}taint(e){this.#i(e).tainted=!0}untaint(e){this.#a(e,e=>e.tainted=!1)}setPending(e,t){this.#i(e).pendingDigest=t}clearPending(e){this.#a(e,e=>delete e.pendingDigest)}pending(){let e=[];for(let[t,n]of this.#e)n.pendingDigest!==void 0&&e.push([t,n.pendingDigest]);return e}forget(e){this.#t.delete(e),this.#n.delete(e),this.#a(e,e=>{delete e.held,delete e.handoff,delete e.pendingDigest})}#i(e){let t=this.#e.get(e);return t===void 0&&(t={tainted:!1},this.#e.set(e,t)),t}#a(e,t){let n=this.#e.get(e);n!==void 0&&(t(n),n.held===void 0&&n.handoff===void 0&&n.pendingDigest===void 0&&!n.tainted&&this.#e.delete(e))}};const se=`rsh2.`,ce={owner:!0,unverified:!1},le=/^[A-Za-z0-9_-]+$/,ue=new TextDecoder(`utf-8`,{fatal:!0});function de(e,t,n){return`${se}${n?`owner`:`unverified`}.${e}.${o.Buffer.from(t,`utf8`).toString(`base64url`)}`}function fe(e){if(typeof e!=`string`||!e.startsWith(se))return;let[t,n,r,...i]=e.slice(5).split(`.`);if(t!==`owner`&&t!==`unverified`||i.length>0||n===void 0||r===void 0||!p(n)||!le.test(r))return;let a=o.Buffer.from(r,`base64url`);if(a.toString(`base64url`)===r)try{return{digest:n,text:ue.decode(a),owner:ce[t]}}catch{return}}const pe=`robota-authorship/v1 `,x=o.Buffer.from(pe,`ascii`),me=/^[A-Za-z0-9_-]+$/;function he(e,t){let n=o.Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString(`base64url`);return o.Buffer.concat([o.Buffer.from(`${pe}${n}\n`,`ascii`),t])}function ge(e){let t=o.Buffer.from(e.buffer,e.byteOffset,e.byteLength);if(t.length<x.length||!t.subarray(0,x.length).equals(x))return{envelope:e,tag:void 0};let n=t.indexOf(10,x.length);if(n<0)return{envelope:e,tag:`malformed`};let r=t.subarray(x.length,n).toString(`latin1`),i=e.subarray(n+1);if(!me.test(r))return{envelope:i,tag:`malformed`};let a=o.Buffer.from(r,`base64url`);return a.length!==32||a.toString(`base64url`)!==r?{envelope:i,tag:`malformed`}:{envelope:i,tag:a}}const S={probe:{writer:!1,takes:!1,holds:!1,taints:!0},hold:{writer:!0,takes:!0,holds:!0,taints:!0},list:{writer:!1,takes:!1,holds:!1,taints:!1},held:{writer:!0,takes:!0,holds:!1,taints:!0},export:{writer:!0,takes:!1,holds:!1,taints:!0},claim:{writer:!0,takes:!0,holds:!0,taints:!0},save:{writer:!0,takes:!1,holds:!1,taints:!1}},C=Object.freeze({status:`locked`,reason:`no-keys`}),w=Object.freeze({status:`locked`,reason:`changed`}),T=Object.freeze({status:`locked`}),_e=Object.freeze({status:`missing`});function E(e,t,n,r){return{status:`valid`,record:e.record,authorship:t?`verified`:`unverified`,...n===void 0?{}:{digest:n},...r?{diverged:!0}:{}}}function D(e,n,r){let i;try{i=e.openBytes(r,g(n))}catch(e){return(0,t.isArtifactLockedError)(e)?e.reason===`no-keys`?{kind:`no-keys`}:{kind:`locked`}:{kind:`does-not-open`}}try{let{envelope:t,tag:r}=ge(i),a=!1;if(r instanceof Uint8Array&&e.verifyAuthorship!==void 0)try{a=e.verifyAuthorship(t,r,g(n))===!0}catch{a=!1}return{kind:`text`,text:_(t),verified:a}}finally{i.fill(0)}}function ve(e,n,r){let i,a=!1;if(!(0,t.isSealedArtifactBytes)(n))i=_(n);else{if(!(0,t.isCurrentSealedArtifactBytes)(n))return{status:`unsupported`,schemaVersion:void 0};let o=D(r,e,n);if(o.kind===`locked`)return T;if(o.kind===`no-keys`)return C;if(o.kind===`does-not-open`)return{status:`corrupt`,issues:[{path:``,message:d}]};i=o.text,a=o.verified}let o=y(e,i);return o.status===`valid`?E(o,a,m(n),!1):o}var ye=class{#e;#t;#n;#r;#i;#a;constructor(e,t,n,r,i){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.#i=i,e.tagAuthorship!==void 0&&e.onUnlock!==void 0&&(this.#a=()=>this.#g(),e.onUnlock(this.#a))}read(e,t,n,r,i){let a=this.guarded(e,t,i);if(a!==void 0)return a;if(t.kind===`absent`){let t=r();return t.status===`valid`?this.#l(e,t,`unverified`,void 0,i,!1):t}let o=b(t);return o===void 0?n:this.decode(e,o,i)}decode(e,n,r){let i,a=!1;if(!(0,t.isSealedArtifactBytes)(n))i=_(n);else{if(!(0,t.isCurrentSealedArtifactBytes)(n))return{status:`unsupported`,schemaVersion:void 0};let r=D(this.#e,e,n);if(r.kind===`locked`)return T;if(r.kind===`no-keys`)return C;if(r.kind===`does-not-open`)return{status:`corrupt`,issues:[{path:``,message:d}]};i=r.text,a=r.verified}let o=y(e,i);if(o.status!==`valid`)return o;let s=m(n),c=this.#n.state(e),l=a||this.#s(c,c?.held,s)?`owner`:`unverified`;return S[r].holds&&this.#n.hold(e,{digest:s,text:i,kind:l}),this.#l(e,o,l,s,r,!1)}claimRead(e,t,n,r,i){let a=this.#n.state(e)?.held,o=b(n);return!t&&a!==void 0&&o!==void 0&&m(o)===a.digest?this.#c(e,a,`claim`,!1):this.read(e,n,r,i,`claim`)}beforeClaim(e,t,n){if(this.#n.state(e)?.held?.kind===`pinned`&&!n)throw this.#r.refusal(e,`has_writer`);t&&(this.#n.dropHeld(e),this.#n.dropHandoff(e))}guarded(e,n,r){let i=this.#n.state(e),a=this.#o(e,i),o=a?void 0:i?.handoff;if(!a&&o===void 0)return;let s=S[r],c=b(n),l=c===void 0?void 0:m(c);if(o!==void 0)return s.takes&&this.#n.dropHandoff(e),c===void 0||l!==o.digest?w:(s.takes&&this.#n.hold(e,o),this.#c(e,o,r,!1));let u=i?.held;if(u!==void 0&&l===u.digest)return this.#c(e,u,r,!1);let d=!1;if(u?.kind!==`pinned`&&n.kind===`sealed`&&(0,t.isCurrentSealedArtifactBytes)(n.bytes)){let t=D(this.#e,e,n.bytes);if(t.kind===`text`&&t.verified&&l!==void 0){let n=y(e,t.text);if(n.status===`valid`)return r!==`save`&&this.#n.hold(e,{digest:l,text:t.text,kind:`owner`}),E(n,!0,l,!1)}d=t.kind===`locked`}return n.kind===`absent`?u===void 0?_e:this.#c(e,u,r,!0):s.writer||u===void 0?d?T:w:this.#c(e,u,r,!0)}assertReplaceable(n,r){let i=this.guarded(n,r,`save`);if(i!==void 0){if(i.status!==`locked`)return;throw new e.a(n,i.reason===`changed`?`changed`:`locked`)}switch(r.kind){case`absent`:case`plain`:return;case`unreadable`:case`oversized`:throw new e.a(n,`unreadable`);case`sealed`:break}let a=r.bytes;if(!(0,t.isCurrentSealedArtifactBytes)(a))throw new e.a(n,`newer-format`);let o=this.#n.state(n)?.held;if(o!==void 0&&o.digest===m(a))return;let s=D(this.#e,n,a);if(s.kind!==`text`)throw new e.a(n,o===void 0?s.kind===`locked`||s.kind===`no-keys`?s.kind:`does-not-open`:`changed`)}prepare(e,t,n){let r=o.Buffer.from(t,`utf8`),i=this.#d(e,n),a=r,s=!1;if(i===`owner`){let t=this.#f(e,r);t===`locked`?s=n.handoff!==!0:t!==void 0&&(a=he(t,r))}try{return{stored:this.#e.sealBytes(a,g(e)),text:t,heldAs:i,tagPending:s}}finally{a!==r&&a.fill(0)}}wrote(e,t,n){let r=this.#n.state(e)?.held,i=t.heldAs===`pinned`&&r?.kind===`pinned`&&r.vouched,a={digest:m(t.stored),text:t.text,kind:t.heldAs,...i===!0?{vouched:i}:{}};n&&!this.#r.has(e)&&t.heldAs!==`pinned`?(this.#n.dropHeld(e),this.#n.holdHandoff(e,a)):(this.#n.dropHandoff(e),this.#n.hold(e,a)),t.tagPending?this.#n.setPending(e,a.digest):this.#n.clearPending(e)}wroteIfPresent(e,t,n,r){n.kind===`sealed`&&h(n.bytes,t.stored)&&this.wrote(e,t,r)}held(e,t){let n=this.guarded(e,t,`held`);if(n!==void 0)return n;let r=this.#n.state(e)?.held;if(r===void 0)return;let i=b(t);return i===void 0||m(i)!==r.digest?w:this.#c(e,r,`held`,!1)}exportHeld(e,n,r){if(n.kind!==`sealed`||!(0,t.isCurrentSealedArtifactBytes)(n.bytes))return;let i=m(n.bytes),a=(e,t)=>de(i,e,t===`owner`),o=this.#n.state(e);if(this.#o(e,o)){if(r.handoffOnly===!0)return;let t=this.guarded(e,n,`export`),o=this.#n.state(e)?.held;return t?.status!==`valid`||t.diverged===!0||o?.digest!==i?void 0:a(o.text,t.authorship===`verified`?`owner`:`unverified`)}let s=o?.handoff;if(s!==void 0)return r.keep!==!0&&this.#n.dropHandoff(e),s.digest===i?(this.#u(e,s.kind,`export`),a(s.text,s.kind)):void 0;if(r.handoffOnly===!0)return;let c=D(this.#e,e,n.bytes);if(c.kind!==`text`||y(e,c.text).status!==`valid`)return;let l=c.verified||this.#s(o,o?.held,i)?`owner`:`unverified`;return this.#u(e,l,`export`),a(c.text,l)}importHeld(e,t){let n=fe(t);if(n===void 0)throw TypeError(`The held record is not a token this build issues.`);if(y(e,n.text).status!==`valid`)throw TypeError(`The held record is not a valid record of this session.`);this.#r.assertUnclaimed(e),this.#n.dropHandoff(e),this.#n.hold(e,{digest:n.digest,text:n.text,kind:`pinned`,...n.owner?{vouched:!0}:{}})}adopt(e,t){if(!p(t))return`changed`;let n=this.#n.state(e),r=this.#t.current(e),i=b(r),a=i===void 0?void 0:m(i),o=n?.held;if(o!==void 0&&o.digest===t&&o.kind!==`pinned`)return this.#n.hold(e,{...o,kind:`owner`}),this.#n.untaint(e),a===t&&this.#m(e,t,o.text,!0)===`pending`?`pending`:`adopted`;if(i===void 0||a!==t||this.#e.tagAuthorship===void 0)return`changed`;let s=this.#p(e,r,i);if(s===`locked`)return this.#n.untaint(e),this.#n.setPending(e,t),`pending`;if(s===void 0||y(e,s).status!==`valid`)return`changed`;let c=this.#m(e,t,s,!1);return c!==`changed`&&this.#n.untaint(e),c}heldDigest(e){return this.#n.state(e)?.held?.digest}forget(e){this.#n.forget(e)}discardHeld(e){this.#n.dropHeld(e)}onUnlock(e){return this.#e.onUnlock?.(e)??(()=>void 0)}#o(e,t){return this.#r.has(e)||t?.held?.kind===`pinned`}#s(e,t,n){return e?.pendingDigest===n||t?.kind===`owner`&&t.digest===n}#c(e,t,n,r){let i=y(e,t.text);if(i.status!==`valid`)return i;if(t.kind===`pinned`)return E(i,t.vouched===!0,t.digest,r);let a=this.#s(this.#n.state(e),t,t.digest)?`owner`:`unverified`;return this.#l(e,i,a,t.digest,n,r)}#l(e,t,n,r,i,a){return this.#u(e,n,i),E(t,n===`owner`,r,a)}#u(e,t,n){t!==`owner`&&S[n].taints&&!this.#o(e,this.#n.state(e))&&this.#n.taint(e)}#d(e,t){let n=this.#n.state(e),r=n?.held??n?.handoff;return r?.kind===`pinned`?`pinned`:t.provenance===`unverified`||!this.#r.has(e)&&n?.tainted===!0?`unverified`:r===void 0?t.provenance===`owner`?`owner`:`unverified`:r.kind}#f(e,n){if(this.#e.tagAuthorship!==void 0)try{return this.#e.tagAuthorship(n,g(e))}catch(e){if((0,t.isArtifactLockedError)(e))return`locked`;throw e}}#p(e,n,r){if(n.kind!==`sealed`)return _(r);if(!(0,t.isCurrentSealedArtifactBytes)(r))return;let i=D(this.#e,e,r);return i.kind===`locked`?`locked`:i.kind===`text`?i.text:void 0}#m(e,t,n,r){let i=o.Buffer.from(n,`utf8`),a=this.#f(e,i);return a===`locked`?(this.#n.setPending(e,t),`pending`):a===void 0||this.#h(e,i,n,a,t,r)?`adopted`:`changed`}#h(e,t,n,r,i,a){let o=he(r,t),s;try{s=this.#e.sealBytes(o,g(e))}finally{o.fill(0)}let c=b(this.#t.current(e));if(c===void 0||m(c)!==i)return!1;let l={stored:s,text:n,heldAs:`owner`,tagPending:!1};try{this.#t.replace(e,s)}catch(t){throw a&&this.wroteIfPresent(e,l,this.#t.current(e),!1),t}return this.#n.clearPending(e),a&&this.wrote(e,l,!1),!0}#g(){for(let[e,t]of this.#n.pending()){this.#n.clearPending(e);try{this.#i(e,()=>this.#_(e,t))}catch{}}}#_(e,t){let n=this.#t.current(e),r=b(n);if(r===void 0||m(r)!==t)return;let i=this.#n.state(e)?.held,a=i?.digest===t,s=a?i.text:this.#p(e,n,r);if(s===void 0||s===`locked`||y(e,s).status!==`valid`)return;let c=o.Buffer.from(s,`utf8`),l=this.#f(e,c);l instanceof Uint8Array&&this.#h(e,c,s,l,t,a)}};function be(e){let t=e;if(typeof t?.acquire!=`function`||typeof t.takeOver!=`function`||typeof t.endLease!=`function`||typeof t.inspect!=`function`)throw TypeError(`A session store holds a writer marker for every id it writes: build it with the markers of its claims directory.`)}function O(e){if(typeof e!=`object`||!e)throw TypeError(`Session store options must be an object, such as { sealing }.`);return k(e.sealing),e.sealing}function k(e){if(e===`plain`)return;let t=typeof e==`object`&&e?e.sealer:void 0;if(!(typeof t==`object`&&t&&typeof t.sealBytes==`function`&&typeof t.openBytes==`function`))throw TypeError(`A session store states how it seals: { sealer }, or 'plain'.`)}var xe=class{#e;#t;#n;#r;#i;authorship;constructor(t,n,r,i={}){if(k(t),be(r),this.#e=t===`plain`?void 0:t.sealer,this.#t=n,this.#n=r,this.#r=new e.n(i.releaseCommand===void 0?{}:{releaseCommand:i.releaseCommand},{pid:process.pid,windows:process.platform===`win32`}),this.#e===void 0){this.#i=void 0,this.authorship=void 0;return}let a=new ye(this.#e,n,new oe(e=>this.#r.has(e)),this.#r,(e,t)=>this.#l(e,t));this.#i=a,this.authorship=Object.freeze({adopt:(t,n)=>{e.m(t);let r=this.#l(t,()=>a.adopt(t,n));return r===`has_writer`?`has_writer`:r},heldDigest:t=>(e.m(t),a.heldDigest(t)),onUnlock:e=>a.onUnlock(e)})}get seals(){return this.#e!==void 0}load(e,t={}){return this.#u(e,t.hold===!0?`hold`:`probe`)}listed(e){return this.#u(e,`list`)}claim(e,t={}){this.#r.assertUnclaimed(e);let n=t.fresh===!0;this.#i?.beforeClaim(e,n,t.lease!==void 0);let r=t.copy===!0?void 0:this.#o(e,t.lease),i=()=>this.#r.open(e,n,r,()=>{let{file:t,unreadable:r}=this.#t.load(e);return this.#i===void 0?this.#d(e,t,r):this.#i.claimRead(e,n,t,r,()=>this.#p(e))},()=>this.#i?.discardHeld(e));if(r===void 0)return i();try{return this.#c(e,r,i)}catch(e){throw r.release(),e}}lend(t){this.#r.assertUnclaimed(t);let n=(0,s.randomBytes)(32).toString(`hex`),r=(0,s.createHash)(`sha256`).update(n,`utf8`).digest(`hex`),i=this.#n.acquire(t,{leaseDigest:r});if(i.status!==`acquired`)throw this.#r.refusal(t,`has_writer`,{holder:e.i(i.holder)});let a=this.#r.lend(t,()=>{let e=this.#n.inspect(t);return e.status===`held`?e.holder:void 0}),o=!1;return Object.freeze({nonce:n,end:()=>{if(!o){o=!0;try{this.#n.endLease(t,r)}finally{a()}}}})}hasWriter(e){if(this.#r.has(e)||this.#r.isLent(e))return!0;let t=this.#n.inspect(e);return t.status===`held`&&t.holder.liveness!==`gone`}save(e,t={}){let n=e.id,r=this.#r.markerForSave(n,t.claim);if(r!==void 0){this.#c(n,r,()=>this.#a(e,t));return}this.#s(n,()=>this.#a(e,t))}delete(e,t){this.#r.markerForSave(e,void 0),this.#s(e,()=>{this.forget(e),t()})}#a(e,t){let n=e.id,r=this.#t.current(n),i=this.#i;if(i===void 0){this.#f(n,r),this.#t.replace(n,ee(e,void 0).stored);return}i.assertReplaceable(n,r);let a=i.prepare(n,v(e),t),o=t.handoff===!0;try{this.#t.replace(n,a.stored)}catch(e){throw i.wroteIfPresent(n,a,this.#m(n),o),e}i.wrote(n,a,o)}loadHeld(e){return this.#i?.held(e,this.#t.current(e))}exportHeld(e,t={}){return this.#i?.exportHeld(e,this.#t.current(e),t)}importHeld(e,t){if(this.#i===void 0)throw TypeError(`A store that seals nothing does not take a held record: it would write it in plaintext.`);this.#i.importHeld(e,t)}forget(e){this.#i?.forget(e)}#o(t,n){if(n===void 0){let n=this.#n.acquire(t);if(n.status===`acquired`)return n.handle;throw this.#r.refusal(t,`has_writer`,{holder:e.i(n.holder)})}let r=this.#n.takeOver(t,n);if(r.status===`acquired`)return r.handle;throw r.status===`absent`?this.#r.refusal(t,`released`,{lease:!0}):this.#r.refusal(t,`has_writer`,{holder:e.i(r.holder)})}#s(t,n){let r=this.#n.acquire(t);if(r.status!==`acquired`)throw this.#r.refusal(t,`has_writer`,{holder:e.i(r.holder)});try{return this.#c(t,r.handle,n)}finally{r.handle.release()}}#c(e,t,n){let r=t.withGuard(n);if(r.status===`ran`)return r.value;throw this.#r.refusal(e,r.status===`lost`?`released`:`has_writer`)}#l(t,n){try{let e=this.#r.markerForWrite(t);if(e!==void 0)return this.#c(t,e,n)}catch(t){if(e.r(t))return`has_writer`;throw t}let r=this.#n.acquire(t);if(r.status!==`acquired`)return`has_writer`;try{return this.#c(t,r.handle,n)}catch(t){if(e.r(t))return`has_writer`;throw t}finally{r.handle.release()}}#u(e,t){let{file:n,unreadable:r}=this.#t.load(e);return this.#i===void 0?this.#d(e,n,r):this.#i.read(e,n,r,()=>this.#p(e),t)}#d(e,n,r){if(n.kind===`absent`)return this.#p(e);let i=b(n);return i===void 0?r:(0,t.isSealedArtifactBytes)(i)?(0,t.isCurrentSealedArtifactBytes)(i)?C:{status:`unsupported`,schemaVersion:void 0}:y(e,_(i))}#f(n,r){switch(r.kind){case`absent`:case`plain`:case`oversized`:return;case`unreadable`:throw new e.a(n,`unreadable`);case`sealed`:throw new e.a(n,(0,t.isCurrentSealedArtifactBytes)(r.bytes)?`no-keys`:`newer-format`)}}#p(e){return this.#t.rebuild?.(e)??_e}#m(e){try{return this.#t.current(e)}catch{return{kind:`unreadable`}}}};function A(e){return typeof e==`object`&&e?e.code:void 0}function Se(e){let t=A(e);return typeof t==`string`&&/^E[A-Z0-9]+$/.test(t)?`could not read the session file (${t})`:`could not read the session file`}function Ce(e,t){let n=Buffer.alloc(Math.max((0,r.fstatSync)(e).size,t.length));t.copy(n,0);let i=t.length;for(;i<n.length;){let t=(0,r.readSync)(e,n,i,n.length-i,i);if(t===0)break;i+=t}return n.subarray(0,i)}const we=Object.freeze({status:`missing`}),j=`claims`;function Te(e){let t=0,n=0;for(let{outcome:r}of e)r.status===`locked`&&(r.reason===`no-keys`?n+=1:t+=1);return n===0?{locked:t}:{locked:t,noKeys:n}}function Ee(e,t){let n=e=>e.outcome.status===`valid`?new Date(e.outcome.record.updatedAt).getTime():0;return n(t)-n(e)}var De=class{supportsClaimDiscard=!0;baseDir;ownedRoot;records;constructor(e,t){let r=O(t);this.records=new xe(r,{load:e=>this.loadFile(e),current:e=>this.readExisting(this.filePath(e)),replace:(e,t)=>{this.ensureDir(),(0,a.writeOwnerOnlyFile)(this.filePath(e),t)}},(0,a.createProcessMarkers)((0,i.join)((0,i.resolve)(e),j),{operationLock:(0,n.createProcessOperationLock)((0,i.join)((0,i.resolve)(e),j))}),t.releaseCommand===void 0?{}:{releaseCommand:t.releaseCommand}),this.baseDir=e,this.ownedRoot=t.ownedRoot;let o=this.records.authorship;o!==void 0&&(this.authorship=o)}claim(e,t){return this.filePath(e),this.records.claim(e,t)}lend(e){return this.filePath(e),this.records.lend(e)}hasWriter(e){return this.filePath(e),this.records.hasWriter(e)}ensureDir(){(0,a.ensureOwnerOnlyDirectory)(this.baseDir,this.ownedRoot===void 0?{}:{withinRoot:this.ownedRoot})}filePath(t){e.m(t);let n=(0,i.resolve)(this.baseDir),r=(0,i.resolve)(n,`${t}.json`);if(!r.startsWith(n+i.sep))throw Error(`Invalid session id: ${JSON.stringify(t)} resolves outside the session store.`);return r}save(e,t={}){this.ensureDir(),this.filePath(e.id),this.records.save(e,t)}saveRestoreTransaction(e,t){if(!t?.claim)throw TypeError(`A live session claim is required for restore commit.`);try{return this.save(e,t),{status:`committed`}}catch(e){return{status:`unknown`,error:e}}}readExisting(e){let n;try{n=(0,r.openSync)(e,`r`)}catch(e){return A(e)===`ENOENT`?{kind:`absent`}:{kind:`unreadable`}}try{let e=Buffer.alloc(t.SEALED_ARTIFACT_MAGIC.length),i=(0,r.readSync)(n,e,0,e.length,0);return(0,t.isSealedArtifactBytes)(e.subarray(0,i))?{kind:`sealed`,bytes:Ce(n,e)}:this.records.seals?{kind:`plain`,bytes:Ce(n,e.subarray(0,i))}:{kind:`plain`}}catch{return{kind:`unreadable`}}finally{(0,r.closeSync)(n)}}load(e,t={}){return this.filePath(e),this.records.load(e,t)}loadFile(e){let t=this.filePath(e),n;try{n=(0,r.readFileSync)(t)}catch(e){return A(e)===`ENOENT`?{file:{kind:`absent`},unreadable:we}:{file:{kind:`unreadable`},unreadable:{status:`corrupt`,issues:[{path:``,message:Se(e)}]}}}try{(0,a.tightenExistingFile)(t)}catch{}return{file:ae(n),unreadable:we}}loadHeld(e){return this.filePath(e),this.records.loadHeld(e)}exportHeld(e,t){return this.filePath(e),this.records.exportHeld(e,t)}importHeld(e,t){this.filePath(e),this.records.importHeld(e,t)}list(){return this.scan().entries}scan(){let e=this.readAll();return{entries:e.filter(e=>e.outcome.status!==`locked`).sort(Ee),...Te(e)}}readAll(){return(0,r.existsSync)(this.baseDir)?(0,r.readdirSync)(this.baseDir).filter(e=>e.endsWith(`.json`)).map(e=>e.slice(0,-5)).map(e=>({id:e,outcome:this.outcomeForListedId(e)})):[]}outcomeForListedId(t){return e.g(t)?this.records.listed(t):{status:`corrupt`,issues:[{path:``,message:`the file name is not a usable session id`}]}}delete(e){let t=this.filePath(e);this.records.delete(e,()=>{(0,r.existsSync)(t)&&(0,r.unlinkSync)(t)})}};const Oe=Object.freeze({kind:`does-not-open`}),ke=Object.freeze({kind:`newer-format`}),Ae=Object.freeze({kind:`locked`,reason:`no-keys`}),je=/^R(?:S(?:L[0-9]?)?)?$/;function Me(e){return k(e),e===`plain`?void 0:e.sealer}function Ne(e){return e.reason===`no-keys`?`no-keys`:`locked`}var M=class{#e;#t;constructor(e,t){this.#e=Me(e),this.#t=t}encode(e,t){return this.#e===void 0?e:`
|
|
2
2
|
${this.#e.sealLine(e,{kind:this.#t,id:t})}
|
|
3
|
-
`}decode(e,t){try{return this.#n(e,t)}catch{return
|
|
4
|
-
`).filter(e=>e.length>0)}}};function
|
|
5
|
-
`),n
|
|
6
|
-
`));break;case`locked`:throw new
|
|
7
|
-
`)}function
|
|
3
|
+
`}decode(e,t){try{return this.#n(e,t)}catch{return Oe}}openText(e,t){let n=N(e),r=e=>this.#n(e,t);return Pe((function*(){for(let e of n)yield r(e)})())}#n(e,n){if(!(0,t.isSealedArtifactLine)(e))return{kind:`lines`,lines:[e]};if(!(0,t.isCurrentSealedArtifactLine)(e))return ke;if(this.#e===void 0)return Ae;let r;try{r=this.#e.openLine(e,{kind:this.#t,id:n})}catch(e){if((0,t.isArtifactLockedError)(e))return{kind:`locked`,reason:Ne(e)};if((0,t.isArtifactCorruptError)(e))return Oe;throw e}return{kind:`lines`,lines:r.split(`
|
|
4
|
+
`).filter(e=>e.length>0)}}};function N(e){let n=e.split(`
|
|
5
|
+
`),r=n[n.length-1];return r.length>0&&((0,t.isSealedArtifactLine)(r)||je.test(r))&&n.pop(),n}function Pe(n){let r=[],i=0;for(let a of n)switch(i+=1,a.kind){case`lines`:r.push(a.lines.join(`
|
|
6
|
+
`));break;case`locked`:throw new t.ArtifactLockedError(a.reason);case`does-not-open`:throw new t.ArtifactCorruptError;case`newer-format`:throw new e.c(`UNSUPPORTED_VERSION`,[{path:`line ${i}`,message:`the line is sealed in a framing version this build does not open`}])}return r.join(`
|
|
7
|
+
`)}function P(t,n,r){return t===`PAYLOAD_UNREADABLE`?new e.s(t,`External payload is sealed and does not open here: ${n}.`,{relativePath:n}):new e.s(t,`External payload exceeds the remaining byte budget of ${r}.`,{relativePath:n,expected:r})}var F=class{#e;#t=new Map;constructor(e){this.#e=Me(e)}place(t,n,r,i){let a=e.u(t,n,r);if(this.#e===void 0)return i({relativePath:a.relativePath,data:r,contentAddressed:!0}),a;let o=this.#t.get(t)??new Map,c=o.get(n);if(c!==void 0)return{...a,relativePath:c};let l=`${t}.payloads/${(0,s.randomBytes)(16).toString(`base64url`)}.sealed`,u=Buffer.from(r,`utf8`),d;try{d=this.#e.sealBytes(u,{kind:`session-log-payload`,id:t})}finally{u.fill(0)}return i({relativePath:l,data:d,contentAddressed:!1}),o.set(n,l),this.#t.set(t,o),{...a,relativePath:l}}rawBudget(e){return this.#e===void 0?e:Math.min(e+t.SEALED_ARTIFACT_MAX_OVERHEAD_BYTES,2**53-1)}open(e,n,r,i){if(this.#e===void 0)return e;if(!(0,t.isSealedArtifactBytes)(e)){if(e.byteLength>n)throw P(`MAX_TOTAL_BYTES_EXCEEDED`,i,n);return e}if(!(0,t.isCurrentSealedArtifactBytes)(e)||r===void 0)throw P(`PAYLOAD_UNREADABLE`,i,n);let a;try{a=this.#e.openBytes(e,{kind:`session-log-payload`,id:r})}catch(e){throw(0,t.isArtifactLockedError)(e)?new t.ArtifactLockedError(Ne(e)):(0,t.isArtifactCorruptError)(e)?P(`PAYLOAD_UNREADABLE`,i,n):e}if(a.byteLength>n)throw a.fill(0),P(`MAX_TOTAL_BYTES_EXCEEDED`,i,n);return a}};function Fe(e){return{kind:`session-log-payload`,id:e}}function I(e,n,r){if(!(0,t.isSealedArtifactBytes)(e))return`plain`;if(!(0,t.isCurrentSealedArtifactBytes)(e))return`newer-format`;let i;try{i=r.openBytes(e,Fe(n))}catch(e){if((0,t.isArtifactLockedError)(e))throw e;return`does-not-open`}return i.fill(0),`sealed`}function Ie(e,t,n){return n.sealBytes(e,Fe(t))}function L(e){return e.endsWith(`\r`)?e.slice(0,-1):e}var R=class{ownerId;sealedLines=0;carriedLines=0;#e;constructor(e,t){this.ownerId=t,this.#e=new M({sealer:e},`session-log-line`)}rewrite(e,n,r){for(let i of e){let e=L(i);if(e.length===0)continue;if((0,t.isSealedArtifactLine)(e)){n.write(`${r?`
|
|
8
8
|
`:``}${e}
|
|
9
|
-
`),this.carriedLines+=1;continue}let
|
|
10
|
-
`,this.ownerId);t.write(n?i:i.slice(1)),this.sealedLines+=1}}};function $e(e){return L(e).filter(e=>{let t=Ze(e);return t.length>0&&!(0,l.isSealedArtifactLine)(t)}).length}function et(e,t,n){let r=new Qe(n,t),i=[];return r.rewrite(L(e),{write:e=>i.push(e)},!1),{text:i.join(``),sealedLines:r.sealedLines,carriedLines:r.carriedLines}}const tt=(0,l.createLogger)(`NodeSessionLogSink`);var nt=class{logDirectory;externalPayloadSink=this;enabled;lines;payloads;constructor(e,t){this.logDirectory=e;let n=M(t);this.lines=new I(n,`session-log-line`),this.payloads=new z(n);try{(0,h.ensureOwnerOnlyDirectory)(e),this.enabled=!0}catch(t){this.enabled=!1,tt.warn(`session log directory could not be created — session logging is disabled`,{logDirectory:e,error:t instanceof Error?t.message:String(t)})}}append(e,t){if(c.m(e),!this.enabled)return;let n=(0,d.join)(this.logDirectory,`${e}.jsonl`),r=this.lines.encode(t,e);(0,h.tightenExistingFile)(n),(0,u.appendFileSync)(n,r,{mode:h.OWNER_ONLY_FILE_MODE})}writeJson(e,t,n){return this.payloads.place(e,t,n,t=>this.writePayload(e,t))}writePayload(e,t){if(!this.enabled)return;(0,h.ensureOwnerOnlyDirectory)((0,d.join)(this.logDirectory,`${e}.payloads`));let n=(0,d.join)(this.logDirectory,t.relativePath);try{(0,u.writeFileSync)(n,t.data,{...typeof t.data==`string`?{encoding:`utf8`}:{},mode:h.OWNER_ONLY_FILE_MODE,flag:`wx`})}catch(e){if(!t.contentAddressed||e.code!==`EEXIST`)throw e;(0,h.tightenExistingFile)(n)}}};function rt(e){if(e.trim().length===0||e.includes(`\0`)||(0,d.isAbsolute)(e)||d.win32.isAbsolute(e))throw V(e);let t=e.split(/[\\/]+/u);if(t.some(e=>e===`.`||e===`..`))throw V(e);return t}function it(e){if(!Number.isFinite(e)||!Number.isSafeInteger(e)||e<0)throw new c.s(`INVALID_LIMIT`,`External-payload maxBytes must be a finite, non-negative safe integer.`,{actual:String(e)})}function V(e,t){return new c.s(`OUTSIDE_ROOT`,`External payload path escapes its base directory or contains a link: ${e}.`,{relativePath:e},t)}function at(e,t,n){return e.code===`INVALID_PATH`||e.code===`UNSAFE_ENTRY`?V(t,e):e.code===`UNSUPPORTED_BACKEND`?new c.s(`STABLE_PAYLOAD_READ_UNAVAILABLE`,`Stable root-relative external-payload reads are unavailable on this host.`,{relativePath:t},e):e.code===`OVER_BUDGET`?new c.s(`MAX_TOTAL_BYTES_EXCEEDED`,`External payload exceeds the remaining byte budget of ${n}.`,{relativePath:t,expected:n},e):new c.s(`PAYLOAD_UNREADABLE`,`External payload could not be read: ${t}.`,{relativePath:t},e)}function ot(e){let t=e.length===2?e[0]:void 0;if(!(t===void 0||!t.endsWith(`.payloads`)))return t.slice(0,-9)||void 0}var H=class{baseDirectory;payloads;ownerId;constructor(e,t){if(e.trim().length===0)throw Error(`External-payload base directory must not be empty.`);this.baseDirectory=(0,d.resolve)(e),this.payloads=new z(M(t)),this.ownerId=t.ownerId}readBytes(e,t){it(t);let n=rt(e),r=this.readStored(e,n,t);if(r!==void 0)return this.payloads.open(r,t,this.ownerId??ot(n),e)}readStored(e,t,n){try{let e=(0,ee.createStableRootedFileReader)(this.baseDirectory);try{return e.readBytes(t,this.payloads.rawBudget(n))}finally{e.close()}}catch(t){throw t instanceof c.s?t:t instanceof ee.StableFileAuthorityError?at(t,e,n):new c.s(`PAYLOAD_UNREADABLE`,`External payload could not be read: ${e}.`,{relativePath:e},t)}}},st=class{logFile;externalPayloadSource;lines;ownerId;constructor(e,t){if(this.logFile=e,e.trim().length===0)throw Error(`Session log-file path must not be empty.`);let n=M(t);this.lines=new I(n,`session-log-line`),this.ownerId=(0,d.basename)(e,(0,d.extname)(e)),this.externalPayloadSource=new H((0,d.dirname)(e),{sealing:n,ownerId:this.ownerId})}readText(){if((0,u.existsSync)(this.logFile))return this.lines.openText((0,u.readFileSync)(this.logFile,`utf8`),this.ownerId)}readStoredLines(){if((0,u.existsSync)(this.logFile))return L((0,u.readFileSync)(this.logFile,`utf8`)).map(e=>this.lines.decode(e,this.ownerId))}};function U(e){return e?.code}function W(e){let t;try{t=(0,u.lstatSync)(e)}catch(e){if(U(e)===`ENOENT`)return{status:`missing`};throw e}if(!t.isFile())return{status:`refused`,reason:`not-a-regular-file`};let n;try{n=(0,u.openSync)(e,u.constants.O_RDONLY|(u.constants.O_NOFOLLOW??0))}catch(e){if(U(e)===`ENOENT`)return{status:`missing`};if(U(e)===`ELOOP`)return{status:`refused`,reason:`not-a-regular-file`};throw e}let r=(0,u.fstatSync)(n),i=r.isFile()&&r.ino===t.ino&&r.dev===t.dev;return!i||r.nlink>1?((0,u.closeSync)(n),{status:`refused`,reason:i?`hard-linked`:`not-a-regular-file`}):{status:`open`,descriptor:n}}function G(e,t,n){let r=Buffer.alloc(Math.max(0,n-t)),i=0;for(;i<r.length;){let n=(0,u.readSync)(e,r,i,r.length-i,t+i);if(n===0)break;i+=n}return r.subarray(0,i)}function K(e){return G(e,0,(0,u.fstatSync)(e).size)}function*ct(e){let t=0;for(;t<e.length;){let n=e.indexOf(10,t),r=n===-1?e.length:n;yield e.toString(`utf8`,t,r),t=r+1}}function lt(e,t){let n=Buffer.from(t,`utf8`),r=0;for(;r<n.length;)r+=(0,u.writeSync)(e,n,r,n.length-r)}var ut=class{descriptor;#e=[];#t=0;constructor(e){this.descriptor=e}write(e){this.#e.push(e),this.#t+=e.length,this.#t>=1048576&&this.flush()}flush(){this.#e.length!==0&&(lt(this.descriptor,this.#e.join(``)),this.#e=[],this.#t=0)}};function dt(e){let t;try{t=(0,u.openSync)(e,u.constants.O_RDONLY),(0,u.fsyncSync)(t)}catch{}finally{t!==void 0&&(0,u.closeSync)(t)}}function ft(e){try{(0,u.unlinkSync)(e)}catch{}}function pt(e){let t=W(e);if(t.status!==`open`)return 0;try{return L(K(t.descriptor).toString(`utf8`)).filter(e=>e.length>0&&!(0,l.isSealedArtifactLine)(e)).length}finally{(0,u.closeSync)(t.descriptor)}}async function mt(e,t,n,r,i){let a=0;for(;;){let o=(0,u.fstatSync)(e).size;if(o>t.read){let i=G(e,t.read,o),s=i.lastIndexOf(10);if(s!==-1){n.rewrite(ct(i.subarray(0,s+1)),r,!0),r.flush(),t.read+=s+1,a=0;continue}}if(a>=2)break;a+=1,await i()}let o=(0,u.fstatSync)(e).size,s=G(e,t.read,o).toString(`utf8`);if(s.length===0)return!1;let c=L(s);return n.rewrite(c,r,!0),r.flush(),t.read=o,c.length===0}function ht(e,t){let n;try{n=(0,u.lstatSync)(e)}catch(e){if(U(e)===`ENOENT`)return`removed`;throw e}let r=(0,u.fstatSync)(t);return n.isFile()&&n.ino===r.ino&&n.dev===r.dev?`same`:`replaced`}function gt(){return new Promise(e=>setTimeout(e,20))}async function _t(e,t,n={}){let r=W(e);if(r.status!==`open`)return r;let i=r.descriptor,a=(0,d.dirname)(e),o=(0,d.join)(a,`.${(0,d.basename)(e)}.${process.pid}.${(0,_.randomBytes)(6).toString(`hex`)}.tmp`),s,c=!1;try{let r=K(i),l=r.lastIndexOf(10)+1;(0,h.ensureOwnerOnlyDirectory)(a,n.ownedRoot===void 0?{}:{withinRoot:n.ownedRoot}),s=(0,u.openSync)(o,u.constants.O_WRONLY|u.constants.O_CREAT|u.constants.O_EXCL|u.constants.O_APPEND|(u.constants.O_NOFOLLOW??0),h.OWNER_ONLY_FILE_MODE);let d=new ut(s);t.rewrite(ct(r.subarray(0,l)),d,!1),d.flush(),(0,u.fsyncSync)(s),n.beforeCommit?.();let f=ht(e,i);if(f!==`same`)return{status:f};(0,u.renameSync)(o,e),c=!0,dt(a);let p={read:l},m=!1,g;try{m=await mt(i,p,t,d,n.pause??gt)}catch(e){g={unreadBytes:Math.max(0,(0,u.fstatSync)(i).size-p.read),reason:e instanceof Error?e.name:`unknown`}}return(0,u.fsyncSync)(s),{status:`rewritten`,droppedTail:m,plainLinesAfter:pt(e),...g===void 0?{}:{catchUpFailed:g}}}finally{s!==void 0&&(0,u.closeSync)(s),(0,u.closeSync)(i),c||ft(o)}}const vt=/^.+\.(\d{1,10})\.tmp$/u,yt=/^\..+\.(\d{1,10})\.[0-9a-f]{12}\.tmp$/u;function bt(e){let t=(yt.exec(e)??vt.exec(e))?.[1];return t===void 0?void 0:Number(t)}function q(e,t,n){let r,i;try{let t=(0,u.lstatSync)(e);if(!t.isDirectory())return 0;r=Math.max(t.mtimeMs,n??-1/0),i=(0,u.readdirSync)(e)}catch{return 0}let a=0;for(let n of i){let i=bt(n);if(i===void 0||i===process.pid)continue;let o=(0,d.join)(e,n);try{let e=(0,u.lstatSync)(o);if(!e.isFile()||r-e.mtimeMs<=3e5)continue;t&&(0,u.unlinkSync)(o),a+=1}catch{}}return a}function J(e){let t;try{t=(0,u.openSync)(e,u.constants.O_RDONLY|(u.constants.O_NOFOLLOW??0))}catch(e){if(e.code===`ENOENT`)return;throw e}try{let e=(0,u.fstatSync)(t);return e.isFile()?{bytes:K(t),links:e.nlink}:void 0}finally{(0,u.closeSync)(t)}}const xt=e=>(0,_.createHash)(`sha256`).update(e).digest(`hex`);var St=class extends Error{constructor(){super(`The file changed while its replacement was staged.`),this.name=`FileChangedError`}};function Ct(e,t,n=(e,t)=>(t(),!0)){let r=[],i=[],a=0;try{e((e,t,n)=>{r.push({path:e,file:(0,h.stageOwnerOnlyFile)(e,n),digest:xt(t)})});for(let{path:e,file:o,digest:s}of r)try{n(e,()=>o.commit(()=>{t?.();let n=J(e);if(n===void 0||n.links>1||xt(n.bytes)!==s)throw new St}))?a+=1:i.push(e)}catch(t){if(!(t instanceof St))throw t;i.push(e)}}finally{for(let{file:e}of r)e.discard()}return{replaced:a,changed:i}}const Y=`.jsonl`,X=`.payloads`,wt=`.tmp`;function Tt(e){let t=new Map,n;try{n=(0,u.readdirSync)(e)}catch(e){if(e.code===`ENOENT`)return t;throw e}for(let r of n.sort())try{let n=(0,u.lstatSync)((0,d.join)(e,r));t.set(r,n.isFile()?`file`:n.isDirectory()?`directory`:`other`)}catch(e){if(e.code!==`ENOENT`)throw e}return t}function Et(e,t){let n=new Map;for(let[r,i]of Tt(e)){let a=r.endsWith(Y),o=r.endsWith(X);if(!a&&!o)continue;let s=r.slice(0,-(a?Y:X).length);if((a?i!==`file`:i!==`directory`)||!c.g(s)){t.refused.push((0,d.join)(e,r));continue}let l=n.get(s)??{log:!1,payloads:!1};a?l.log=!0:l.payloads=!0,n.set(s,l)}return n}function Dt(e,t,n,r){let i=new Set,a=Ct(a=>{for(let[o,s]of Tt(e)){if(o.endsWith(wt))continue;i.add(o);let c=(0,d.join)(e,o);if(s!==`file`){r.refused.push(c);continue}let l=J(c);if(l===void 0)continue;let u=B(l.bytes,t,n.sealer);if(u===`sealed`?r.alreadySealed+=1:u!==`plain`&&r.unopenable.push(c),u===`plain`){if(l.links>1){r.refused.push(c);continue}if(!n.apply){r.payloads+=1;continue}a(c,l.bytes,Xe(l.bytes,t,n.sealer))}}},n.beforeCommit);return r.payloads+=a.replaced,r.changed.push(...a.changed),r.staleTemporaries+=q(e,n.apply&&n.sweepTemporaries===!0,n.migrationStartedAt),i}function Ot(e,t,n,r){let i=[];for(let[a,o]of Tt(e)){if(n.has(a)||a.endsWith(wt)||o!==`file`)continue;let s=J((0,d.join)(e,a));s!==void 0&&B(s.bytes,t,r)===`plain`&&i.push((0,d.join)(e,a))}return i}function kt(e){let t=W(e);if(t.status===`missing`)return`missing`;if(t.status===`refused`)return`refused`;try{return $e(K(t.descriptor).toString(`utf8`))}finally{(0,u.closeSync)(t.descriptor)}}async function At(e,t,n,r){let i=kt(e);if(i===`missing`)return;if(i===`refused`){r.refused.push(e);return}if(i===0){r.alreadySealed+=1;return}let a=n.apply?await _t(e,new Qe(n.sealer,t),{...n.ownedRoot===void 0?{}:{ownedRoot:n.ownedRoot},...n.beforeCommit===void 0?{}:{beforeCommit:n.beforeCommit},...n.pause===void 0?{}:{pause:n.pause}}):void 0;a?.status!==`missing`&&a?.status!==`removed`&&(r.logs+=1,r.lines+=i,a!==void 0&&(a.status===`refused`?r.refused.push(e):a.status===`replaced`?r.changed.push(e):a.status===`rewritten`&&(a.plainLinesAfter>0&&r.changed.push(e),a.catchUpFailed!==void 0&&r.catchUpFailed.push({path:e,...a.catchUpFailed}))))}async function jt(e,t){let n={logs:0,lines:0,payloads:0,alreadySealed:0,unopenable:[],refused:[],changed:[],catchUpFailed:[],staleTemporaries:0};try{if(!(0,u.lstatSync)(e).isDirectory())return n.refused.push(e),n}catch(e){if(e.code===`ENOENT`)return n;throw e}for(let[r,i]of Et(e,n)){let a=(0,d.join)(e,`${r}${X}`),o=i.payloads?Dt(a,r,t,n):new Set;i.log&&await At((0,d.join)(e,`${r}${Y}`),r,t,n),t.apply&&i.payloads&&n.changed.push(...Ot(a,r,o,t.sealer))}return n.staleTemporaries+=q(e,t.apply&&t.sweepTemporaries===!0,t.migrationStartedAt),n}function Mt(e){let t=[],n=[],r;try{if(!(0,u.lstatSync)(e).isDirectory())return{files:t,refused:[e]};r=(0,u.readdirSync)(e)}catch(e){if(e.code===`ENOENT`)return{files:t,refused:n};throw e}for(let i of r.sort())if(i.endsWith(`.json`))try{((0,u.lstatSync)((0,d.join)(e,i)).isFile()?t:n).push(i)}catch(e){if(e.code!==`ENOENT`)throw e}return{files:t,refused:n.map(t=>(0,d.join)(e,t))}}function Nt(e,t){let{files:n,refused:r}=Mt(e),i={sealed:0,alreadySealed:0,unopenable:[],unsafeNames:[],refused:r,changed:[],held:[],staleTemporaries:0,sealedRecords:[]},a=(0,h.createProcessMarkers)((0,d.join)(e,F),{operationLock:b((0,d.join)(e,F))}),o=[],s=Ct(r=>{for(let s of n){let n=(0,d.join)(e,s),l=s.slice(0,-5);if(!c.g(l)){i.unsafeNames.push(n);continue}let u=a.inspect(l);if(u.status===`held`&&u.holder.liveness!==`gone`){i.held.push(l);continue}let f=J(n);if(f===void 0)continue;let p=me(l,f.bytes,t.sealer);if(p===`sealed`?i.alreadySealed+=1:p!==`plain`&&i.unopenable.push(n),p!==`plain`)continue;if(f.links>1){i.refused.push(n);continue}if(!t.apply){i.sealed+=1;continue}let m=he(l,f.bytes,t.sealer);_e(l,f.bytes)&&o.push({path:n,id:l,digest:x(m)}),r(n,f.bytes,m)}},t.beforeCommit,(e,t)=>{let n=(0,d.basename)(e).slice(0,-5),r=a.acquire(n);if(r.status!==`acquired`)return i.held.push(n),!1;try{return r.handle.withGuard(t).status===`ran`?!0:(i.held.push(n),!1)}finally{r.handle.release()}});i.sealed+=s.replaced,i.changed.push(...s.changed);for(let{path:e,id:t,digest:n}of o)s.changed.includes(e)||i.sealedRecords.push({id:t,digest:n});return i.staleTemporaries=q(e,t.apply&&t.sweepTemporaries===!0,t.migrationStartedAt),i}function Pt(e,t){let n=new Set;for(let r of Mt(e).files){let i=r.slice(0,-5);if(!c.g(i))continue;let a=J((0,d.join)(e,r));if(a===void 0)continue;let o=Me(i,a.bytes,t.sealer),s=o.status===`valid`?o.record.cwd:o.status===`corrupt`||o.status===`unsupported`?o.cwd:void 0;typeof s==`string`&&s.length>0&&n.add(s)}return[...n]}const Ft=/^tool-result:([A-Za-z0-9_-]{22,64})$/u,It=`agent-tool-results-`,Z=8*1024*1024,Lt=u.constants.O_WRONLY|u.constants.O_CREAT|u.constants.O_EXCL|(u.constants.O_NOFOLLOW??0);var Q=class extends Error{code;constructor(e){super(`Tool result spill failed (${e})`),this.code=e,this.name=`ToolResultSpillError`}};function Rt(e){return(0,h.sweepStaleProcessScopedDirectories)(e,It)}const zt=Z+l.SEALED_ARTIFACT_MAX_OVERHEAD_BYTES;function Bt(e){return{kind:`tool-result-spill`,id:e}}var Vt=class{directory;retentionMs;now;onCleanupFailure;sealer;entries=new Map;opened;expiryTimer;cancelExitRemoval;closed=!1;constructor(e){let t=e?.parentDirectory;if(typeof t!=`string`||t.length===0||(this.retentionMs=e.retentionMs??36e5,this.now=e.now??Date.now,this.onCleanupFailure=e.onCleanupFailure,!Number.isSafeInteger(this.retentionMs)||this.retentionMs<=0))throw new Q(`invalid-options`);let n;try{n=M(e)}catch{throw new Q(`invalid-options`)}this.sealer=n===`plain`?void 0:n.sealer;try{let e=(0,u.lstatSync)(t);if(!e.isDirectory()||e.isSymbolicLink())throw Error(`unsafe parent`);this.directory=(0,h.createProcessScopedDirectory)(t,It,{prepareParent:!1}),this.assertRoot()}catch{throw new Q(`unsafe-root`)}this.cancelExitRemoval=(0,h.removeDirectoryOnProcessExit)(this.directory)}assertRoot(){try{let e=(0,u.lstatSync)(this.directory);if(!e.isDirectory()||e.isSymbolicLink())throw Error(`unsafe directory`);if(process.platform!==`win32`&&e.mode&63)throw Error(`directory is not owner-only`)}catch{throw new Q(`unsafe-root`)}}scheduleExpiry(e=1){if(this.expiryTimer!==void 0&&clearTimeout(this.expiryTimer),this.expiryTimer=void 0,this.closed||this.entries.size===0)return;let t=1/0;for(let e of this.entries.values())e.expiresAt<t&&(t=e.expiresAt);let n=Math.min(2147483647,Math.max(e,t-this.now()));this.expiryTimer=setTimeout(()=>{this.expiryTimer=void 0,this.cleanupExpired().catch(()=>{try{this.onCleanupFailure?this.onCleanupFailure(`cleanup-failed`):process.emitWarning(`Tool result spill expiry cleanup failed (cleanup-failed)`)}catch{process.emitWarning(`Tool result spill expiry cleanup failed (cleanup-failed)`)}this.scheduleExpiry(6e4)})},n),this.expiryTimer.unref?.()}async write(e){if(this.closed)throw new Q(`closed`);if(await this.cleanupExpired(),this.assertRoot(),Buffer.byteLength(e,`utf8`)>Z)throw new Q(`write-failed`);let t=(0,_.randomBytes)(18).toString(`base64url`),n=`${(0,_.randomBytes)(18).toString(`base64url`)}.partial`,r=`${t}${this.sealer===void 0?`.txt`:`.sealed`}`,i=(0,d.join)(this.directory,n),a=(0,d.join)(this.directory,r),o;try{o=this.storedForm(e,t)}catch{throw new Q(`write-failed`)}let s,c=!1;try{s=(0,u.openSync)(i,Lt,384),(0,u.writeFileSync)(s,o,`utf8`),(0,u.fsyncSync)(s),(0,u.closeSync)(s),s=void 0,(0,u.linkSync)(i,a),c=!0,(0,u.unlinkSync)(i);let e=`tool-result:${t}`;return this.entries.set(e,{fileName:r,token:t,expiresAt:this.now()+this.retentionMs}),this.scheduleExpiry(),{reference:e}}catch{let e=!1;if(s!==void 0)try{(0,u.closeSync)(s)}catch{e=!0}try{(0,u.unlinkSync)(i)}catch(t){t.code!==`ENOENT`&&(e=!0)}if(c)try{(0,u.unlinkSync)(a)}catch{e=!0}throw new Q(e?`cleanup-failed`:`write-failed`)}}async read(e){if(this.closed)throw new Q(`closed`);if(!Ft.test(e))throw new Q(`invalid-reference`);let t=this.entries.get(e);if(!t)throw new Q(`missing`);if(this.now()>=t.expiresAt)throw this.removeEntry(e,t),this.scheduleExpiry(),new Q(`expired`);if(this.opened?.reference===e)return this.opened.content;this.assertRoot();try{let n=new H(this.directory,{sealing:`plain`}).readBytes(t.fileName,this.sealer===void 0?Z:zt);if(n===void 0)throw new Q(`missing`);if(this.sealer===void 0)return Buffer.from(n).toString(`utf8`);let r=this.openStored(this.sealer,n,t.token);return this.opened={reference:e,content:r},r}catch(e){throw e instanceof Q?e:new Q(`read-failed`)}}storedForm(e,t){if(this.sealer===void 0)return e;let n=Buffer.from(e,`utf8`);try{return this.sealer.sealBytes(n,Bt(t))}finally{n.fill(0)}}openStored(e,t,n){let r=e.openBytes(t,Bt(n));try{if(r.byteLength>Z)throw new Q(`read-failed`);return Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString(`utf8`)}finally{r.fill(0)}}removeEntry(e,t){this.assertRoot(),this.opened?.reference===e&&(this.opened=void 0);try{(0,u.unlinkSync)((0,d.join)(this.directory,t.fileName))}catch(e){if(e.code!==`ENOENT`)throw new Q(`cleanup-failed`)}this.entries.delete(e)}async cleanupExpired(){if(this.closed)throw new Q(`closed`);for(let[e,t]of this.entries)this.now()>=t.expiresAt&&this.removeEntry(e,t);this.scheduleExpiry()}async shutdown(){if(!this.closed){this.expiryTimer!==void 0&&clearTimeout(this.expiryTimer),this.expiryTimer=void 0,this.opened=void 0;for(let[e,t]of this.entries)this.removeEntry(e,t);this.assertRoot();try{if((0,u.readdirSync)(this.directory).filter(e=>e!==h.PROCESS_OWNER_RECORD_NAME).length!==0)throw Error(`unexpected files`);(0,u.rmSync)((0,d.join)(this.directory,h.PROCESS_OWNER_RECORD_NAME),{force:!0}),(0,u.rmdirSync)(this.directory),this.closed=!0,this.cancelExitRemoval?.()}catch{throw new Q(`cleanup-failed`)}}}};const $=`user`;function Ht(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.at==`string`&&typeof t.sessionId==`string`&&typeof t.project==`string`&&typeof t.text==`string`}function Ut(e){if(e.trim().length===0)return;let t;try{t=JSON.parse(e)}catch{return}if(Ht(t))return{at:t.at,sessionId:t.sessionId,project:t.project,text:t.text}}function Wt(e,t){let n=[],r=0,i=0,a=0;for(let o of e){if(o.length===0)continue;let e=t.decode(o,$);if(e.kind===`locked`){e.reason===`no-keys`?a+=1:i+=1;continue}if(e.kind!==`lines`){r+=1;continue}for(let t=e.lines.length-1;t>=0;--t){let i=Ut(e.lines[t]);i===void 0?r+=1:n.push(i)}}return i+a===0?{entries:n,skippedLines:r}:{entries:n,skippedLines:r,unreadable:{locked:i,noKeys:a}}}function Gt(e){return e.code===`ENOENT`}var Kt=class{path;blockBytes;ownedRoot;lines;constructor(e,t){this.path=e,this.lines=new I(M(t),`prompt-history-line`),this.blockBytes=t.blockBytes??65536,this.ownedRoot=t.ownedRoot}append(e){let t=this.lines.encode(`${JSON.stringify(e)}\n`,$);(0,h.ensureOwnerOnlyDirectory)((0,d.dirname)(this.path),this.ownedRoot===void 0?{}:{withinRoot:this.ownedRoot}),(0,h.tightenExistingFile)(this.path),(0,u.appendFileSync)(this.path,t,{mode:h.OWNER_ONLY_FILE_MODE})}async*read(e){let t;try{t=(0,u.openSync)(this.path,u.constants.O_RDONLY|(u.constants.O_NOFOLLOW??0))}catch(e){if(e instanceof Error&&Gt(e))return;throw e}try{let n=(0,u.fstatSync)(t).size,r=Buffer.alloc(0),i=!0;for(;n>0&&!e.signal.aborted;){let e=Math.min(this.blockBytes,n);n-=e;let a=Buffer.alloc(e),o=(0,u.readSync)(t,a,0,e,n),s=Buffer.concat([a.subarray(0,o),r]),c=n===0?-1:s.indexOf(10);r=c===-1&&n>0?s:s.subarray(0,c+1);let l=n===0?s:c===-1?Buffer.alloc(0):s.subarray(c+1);if(n>0&&c===-1)continue;let d=l.toString(`utf8`),f=(i?L(d):d.split(`
|
|
11
|
-
`)).reverse();i=!1,yield
|
|
12
|
-
`),this.counts.carriedOver+=1;continue}(0,
|
|
13
|
-
|
|
9
|
+
`),this.carriedLines+=1;continue}let a=this.#e.encode(`${e}
|
|
10
|
+
`,this.ownerId);n.write(r?a:a.slice(1)),this.sealedLines+=1}}};function Le(e){return N(e).filter(e=>{let n=L(e);return n.length>0&&!(0,t.isSealedArtifactLine)(n)}).length}function Re(e,t,n){let r=new R(n,t),i=[];return r.rewrite(N(e),{write:e=>i.push(e)},!1),{text:i.join(``),sealedLines:r.sealedLines,carriedLines:r.carriedLines}}const ze=(0,t.createLogger)(`NodeSessionLogSink`);var Be=class{logDirectory;externalPayloadSink=this;enabled;lines;payloads;constructor(e,t){this.logDirectory=e;let n=O(t);this.lines=new M(n,`session-log-line`),this.payloads=new F(n);try{(0,a.ensureOwnerOnlyDirectory)(e),this.enabled=!0}catch(t){this.enabled=!1,ze.warn(`session log directory could not be created — session logging is disabled`,{logDirectory:e,error:t instanceof Error?t.message:String(t)})}}append(t,n){if(e.m(t),!this.enabled)return;let r=(0,l.join)(this.logDirectory,`${t}.jsonl`),i=this.lines.encode(n,t);(0,a.tightenExistingFile)(r),(0,c.appendFileSync)(r,i,{mode:a.OWNER_ONLY_FILE_MODE})}writeJson(e,t,n){return this.payloads.place(e,t,n,t=>this.writePayload(e,t))}writePayload(e,t){if(!this.enabled)return;(0,a.ensureOwnerOnlyDirectory)((0,l.join)(this.logDirectory,`${e}.payloads`));let n=(0,l.join)(this.logDirectory,t.relativePath);try{(0,c.writeFileSync)(n,t.data,{...typeof t.data==`string`?{encoding:`utf8`}:{},mode:a.OWNER_ONLY_FILE_MODE,flag:`wx`})}catch(e){if(!t.contentAddressed||e.code!==`EEXIST`)throw e;(0,a.tightenExistingFile)(n)}}};function Ve(e){if(e.trim().length===0||e.includes(`\0`)||(0,l.isAbsolute)(e)||l.win32.isAbsolute(e))throw z(e);let t=e.split(/[\\/]+/u);if(t.some(e=>e===`.`||e===`..`))throw z(e);return t}function He(t){if(!Number.isFinite(t)||!Number.isSafeInteger(t)||t<0)throw new e.s(`INVALID_LIMIT`,`External-payload maxBytes must be a finite, non-negative safe integer.`,{actual:String(t)})}function z(t,n){return new e.s(`OUTSIDE_ROOT`,`External payload path escapes its base directory or contains a link: ${t}.`,{relativePath:t},n)}function Ue(t,n,r){return t.code===`INVALID_PATH`||t.code===`UNSAFE_ENTRY`?z(n,t):t.code===`UNSUPPORTED_BACKEND`?new e.s(`STABLE_PAYLOAD_READ_UNAVAILABLE`,`Stable root-relative external-payload reads are unavailable on this host.`,{relativePath:n},t):t.code===`OVER_BUDGET`?new e.s(`MAX_TOTAL_BYTES_EXCEEDED`,`External payload exceeds the remaining byte budget of ${r}.`,{relativePath:n,expected:r},t):new e.s(`PAYLOAD_UNREADABLE`,`External payload could not be read: ${n}.`,{relativePath:n},t)}function We(e){let t=e.length===2?e[0]:void 0;if(!(t===void 0||!t.endsWith(`.payloads`)))return t.slice(0,-9)||void 0}var B=class{baseDirectory;payloads;ownerId;constructor(e,t){if(e.trim().length===0)throw Error(`External-payload base directory must not be empty.`);this.baseDirectory=(0,l.resolve)(e),this.payloads=new F(O(t)),this.ownerId=t.ownerId}readBytes(e,t){He(t);let n=Ve(e),r=this.readStored(e,n,t);if(r!==void 0)return this.payloads.open(r,t,this.ownerId??We(n),e)}readStored(t,n,r){try{let e=(0,u.createStableRootedFileReader)(this.baseDirectory);try{return e.readBytes(n,this.payloads.rawBudget(r))}finally{e.close()}}catch(n){throw n instanceof e.s?n:n instanceof u.StableFileAuthorityError?Ue(n,t,r):new e.s(`PAYLOAD_UNREADABLE`,`External payload could not be read: ${t}.`,{relativePath:t},n)}}},Ge=class{logFile;externalPayloadSource;lines;ownerId;constructor(e,t){if(this.logFile=e,e.trim().length===0)throw Error(`Session log-file path must not be empty.`);let n=O(t);this.lines=new M(n,`session-log-line`),this.ownerId=(0,l.basename)(e,(0,l.extname)(e)),this.externalPayloadSource=new B((0,l.dirname)(e),{sealing:n,ownerId:this.ownerId})}readText(){if((0,c.existsSync)(this.logFile))return this.lines.openText((0,c.readFileSync)(this.logFile,`utf8`),this.ownerId)}readStoredLines(){if((0,c.existsSync)(this.logFile))return N((0,c.readFileSync)(this.logFile,`utf8`)).map(e=>this.lines.decode(e,this.ownerId))}};function V(e){return e?.code}function H(e){let t;try{t=(0,c.lstatSync)(e)}catch(e){if(V(e)===`ENOENT`)return{status:`missing`};throw e}if(!t.isFile())return{status:`refused`,reason:`not-a-regular-file`};let n;try{n=(0,c.openSync)(e,c.constants.O_RDONLY|(c.constants.O_NOFOLLOW??0))}catch(e){if(V(e)===`ENOENT`)return{status:`missing`};if(V(e)===`ELOOP`)return{status:`refused`,reason:`not-a-regular-file`};throw e}let r=(0,c.fstatSync)(n),i=r.isFile()&&r.ino===t.ino&&r.dev===t.dev;return!i||r.nlink>1?((0,c.closeSync)(n),{status:`refused`,reason:i?`hard-linked`:`not-a-regular-file`}):{status:`open`,descriptor:n}}function U(e,t,n){let r=Buffer.alloc(Math.max(0,n-t)),i=0;for(;i<r.length;){let n=(0,c.readSync)(e,r,i,r.length-i,t+i);if(n===0)break;i+=n}return r.subarray(0,i)}function W(e){return U(e,0,(0,c.fstatSync)(e).size)}function*Ke(e){let t=0;for(;t<e.length;){let n=e.indexOf(10,t),r=n===-1?e.length:n;yield e.toString(`utf8`,t,r),t=r+1}}function qe(e,t){let n=Buffer.from(t,`utf8`),r=0;for(;r<n.length;)r+=(0,c.writeSync)(e,n,r,n.length-r)}var Je=class{descriptor;#e=[];#t=0;constructor(e){this.descriptor=e}write(e){this.#e.push(e),this.#t+=e.length,this.#t>=1048576&&this.flush()}flush(){this.#e.length!==0&&(qe(this.descriptor,this.#e.join(``)),this.#e=[],this.#t=0)}};function Ye(e){let t;try{t=(0,c.openSync)(e,c.constants.O_RDONLY),(0,c.fsyncSync)(t)}catch{}finally{t!==void 0&&(0,c.closeSync)(t)}}function Xe(e){try{(0,c.unlinkSync)(e)}catch{}}function Ze(e){let n=H(e);if(n.status!==`open`)return 0;try{return N(W(n.descriptor).toString(`utf8`)).filter(e=>e.length>0&&!(0,t.isSealedArtifactLine)(e)).length}finally{(0,c.closeSync)(n.descriptor)}}async function Qe(e,t,n,r,i){let a=0;for(;;){let o=(0,c.fstatSync)(e).size;if(o>t.read){let i=U(e,t.read,o),s=i.lastIndexOf(10);if(s!==-1){n.rewrite(Ke(i.subarray(0,s+1)),r,!0),r.flush(),t.read+=s+1,a=0;continue}}if(a>=2)break;a+=1,await i()}let o=(0,c.fstatSync)(e).size,s=U(e,t.read,o).toString(`utf8`);if(s.length===0)return!1;let l=N(s);return n.rewrite(l,r,!0),r.flush(),t.read=o,l.length===0}function $e(e,t){let n;try{n=(0,c.lstatSync)(e)}catch(e){if(V(e)===`ENOENT`)return`removed`;throw e}let r=(0,c.fstatSync)(t);return n.isFile()&&n.ino===r.ino&&n.dev===r.dev?`same`:`replaced`}function et(){return new Promise(e=>setTimeout(e,20))}async function tt(e,t,n={}){let r=H(e);if(r.status!==`open`)return r;let i=r.descriptor,o=(0,l.dirname)(e),u=(0,l.join)(o,`.${(0,l.basename)(e)}.${process.pid}.${(0,s.randomBytes)(6).toString(`hex`)}.tmp`),d,f=!1;try{let r=W(i),s=r.lastIndexOf(10)+1;(0,a.ensureOwnerOnlyDirectory)(o,n.ownedRoot===void 0?{}:{withinRoot:n.ownedRoot}),d=(0,c.openSync)(u,c.constants.O_WRONLY|c.constants.O_CREAT|c.constants.O_EXCL|c.constants.O_APPEND|(c.constants.O_NOFOLLOW??0),a.OWNER_ONLY_FILE_MODE);let l=new Je(d);t.rewrite(Ke(r.subarray(0,s)),l,!1),l.flush(),(0,c.fsyncSync)(d),n.beforeCommit?.();let p=$e(e,i);if(p!==`same`)return{status:p};(0,c.renameSync)(u,e),f=!0,Ye(o);let m={read:s},h=!1,g;try{h=await Qe(i,m,t,l,n.pause??et)}catch(e){g={unreadBytes:Math.max(0,(0,c.fstatSync)(i).size-m.read),reason:e instanceof Error?e.name:`unknown`}}return(0,c.fsyncSync)(d),{status:`rewritten`,droppedTail:h,plainLinesAfter:Ze(e),...g===void 0?{}:{catchUpFailed:g}}}finally{d!==void 0&&(0,c.closeSync)(d),(0,c.closeSync)(i),f||Xe(u)}}const nt=/^.+\.(\d{1,10})\.tmp$/u,rt=/^\..+\.(\d{1,10})\.[0-9a-f]{12}\.tmp$/u;function it(e){let t=(rt.exec(e)??nt.exec(e))?.[1];return t===void 0?void 0:Number(t)}function G(e,t,n){let r,i;try{let t=(0,c.lstatSync)(e);if(!t.isDirectory())return 0;r=Math.max(t.mtimeMs,n??-1/0),i=(0,c.readdirSync)(e)}catch{return 0}let a=0;for(let n of i){let i=it(n);if(i===void 0||i===process.pid)continue;let o=(0,l.join)(e,n);try{let e=(0,c.lstatSync)(o);if(!e.isFile()||r-e.mtimeMs<=3e5)continue;t&&(0,c.unlinkSync)(o),a+=1}catch{}}return a}function K(e){let t;try{t=(0,c.openSync)(e,c.constants.O_RDONLY|(c.constants.O_NOFOLLOW??0))}catch(e){if(e.code===`ENOENT`)return;throw e}try{let e=(0,c.fstatSync)(t);return e.isFile()?{bytes:W(t),links:e.nlink}:void 0}finally{(0,c.closeSync)(t)}}const at=e=>(0,s.createHash)(`sha256`).update(e).digest(`hex`);var ot=class extends Error{constructor(){super(`The file changed while its replacement was staged.`),this.name=`FileChangedError`}};function st(e,t,n=(e,t)=>(t(),!0)){let r=[],i=[],o=0;try{e((e,t,n)=>{r.push({path:e,file:(0,a.stageOwnerOnlyFile)(e,n),digest:at(t)})});for(let{path:e,file:a,digest:s}of r)try{n(e,()=>a.commit(()=>{t?.();let n=K(e);if(n===void 0||n.links>1||at(n.bytes)!==s)throw new ot}))?o+=1:i.push(e)}catch(t){if(!(t instanceof ot))throw t;i.push(e)}}finally{for(let{file:e}of r)e.discard()}return{replaced:o,changed:i}}const q=`.jsonl`,J=`.payloads`,ct=`.tmp`;function Y(e){let t=new Map,n;try{n=(0,c.readdirSync)(e)}catch(e){if(e.code===`ENOENT`)return t;throw e}for(let r of n.sort())try{let n=(0,c.lstatSync)((0,l.join)(e,r));t.set(r,n.isFile()?`file`:n.isDirectory()?`directory`:`other`)}catch(e){if(e.code!==`ENOENT`)throw e}return t}function lt(t,n){let r=new Map;for(let[i,a]of Y(t)){let o=i.endsWith(q),s=i.endsWith(J);if(!o&&!s)continue;let c=i.slice(0,-(o?q:J).length);if((o?a!==`file`:a!==`directory`)||!e.g(c)){n.refused.push((0,l.join)(t,i));continue}let u=r.get(c)??{log:!1,payloads:!1};o?u.log=!0:u.payloads=!0,r.set(c,u)}return r}function ut(e,t,n,r){let i=new Set,a=st(a=>{for(let[o,s]of Y(e)){if(o.endsWith(ct))continue;i.add(o);let c=(0,l.join)(e,o);if(s!==`file`){r.refused.push(c);continue}let u=K(c);if(u===void 0)continue;let d=I(u.bytes,t,n.sealer);if(d===`sealed`?r.alreadySealed+=1:d!==`plain`&&r.unopenable.push(c),d===`plain`){if(u.links>1){r.refused.push(c);continue}if(!n.apply){r.payloads+=1;continue}a(c,u.bytes,Ie(u.bytes,t,n.sealer))}}},n.beforeCommit);return r.payloads+=a.replaced,r.changed.push(...a.changed),r.staleTemporaries+=G(e,n.apply&&n.sweepTemporaries===!0,n.migrationStartedAt),i}function dt(e,t,n,r){let i=[];for(let[a,o]of Y(e)){if(n.has(a)||a.endsWith(ct)||o!==`file`)continue;let s=K((0,l.join)(e,a));s!==void 0&&I(s.bytes,t,r)===`plain`&&i.push((0,l.join)(e,a))}return i}function ft(e){let t=H(e);if(t.status===`missing`)return`missing`;if(t.status===`refused`)return`refused`;try{return Le(W(t.descriptor).toString(`utf8`))}finally{(0,c.closeSync)(t.descriptor)}}async function pt(e,t,n,r){let i=ft(e);if(i===`missing`)return;if(i===`refused`){r.refused.push(e);return}if(i===0){r.alreadySealed+=1;return}let a=n.apply?await tt(e,new R(n.sealer,t),{...n.ownedRoot===void 0?{}:{ownedRoot:n.ownedRoot},...n.beforeCommit===void 0?{}:{beforeCommit:n.beforeCommit},...n.pause===void 0?{}:{pause:n.pause}}):void 0;a?.status!==`missing`&&a?.status!==`removed`&&(r.logs+=1,r.lines+=i,a!==void 0&&(a.status===`refused`?r.refused.push(e):a.status===`replaced`?r.changed.push(e):a.status===`rewritten`&&(a.plainLinesAfter>0&&r.changed.push(e),a.catchUpFailed!==void 0&&r.catchUpFailed.push({path:e,...a.catchUpFailed}))))}async function mt(e,t){let n={logs:0,lines:0,payloads:0,alreadySealed:0,unopenable:[],refused:[],changed:[],catchUpFailed:[],staleTemporaries:0};try{if(!(0,c.lstatSync)(e).isDirectory())return n.refused.push(e),n}catch(e){if(e.code===`ENOENT`)return n;throw e}for(let[r,i]of lt(e,n)){let a=(0,l.join)(e,`${r}${J}`),o=i.payloads?ut(a,r,t,n):new Set;i.log&&await pt((0,l.join)(e,`${r}${q}`),r,t,n),t.apply&&i.payloads&&n.changed.push(...dt(a,r,o,t.sealer))}return n.staleTemporaries+=G(e,t.apply&&t.sweepTemporaries===!0,t.migrationStartedAt),n}function ht(e){let t=[],n=[],r;try{if(!(0,c.lstatSync)(e).isDirectory())return{files:t,refused:[e]};r=(0,c.readdirSync)(e)}catch(e){if(e.code===`ENOENT`)return{files:t,refused:n};throw e}for(let i of r.sort())if(i.endsWith(`.json`))try{((0,c.lstatSync)((0,l.join)(e,i)).isFile()?t:n).push(i)}catch(e){if(e.code!==`ENOENT`)throw e}return{files:t,refused:n.map(t=>(0,l.join)(e,t))}}function gt(t,r){let{files:i,refused:o}=ht(t),s={sealed:0,alreadySealed:0,unopenable:[],unsafeNames:[],refused:o,changed:[],held:[],staleTemporaries:0,sealedRecords:[]},c=(0,a.createProcessMarkers)((0,l.join)(t,j),{operationLock:(0,n.createProcessOperationLock)((0,l.join)(t,j))}),u=[],d=st(n=>{for(let a of i){let i=(0,l.join)(t,a),o=a.slice(0,-5);if(!e.g(o)){s.unsafeNames.push(i);continue}let d=c.inspect(o);if(d.status===`held`&&d.holder.liveness!==`gone`){s.held.push(o);continue}let f=K(i);if(f===void 0)continue;let p=te(o,f.bytes,r.sealer);if(p===`sealed`?s.alreadySealed+=1:p!==`plain`&&s.unopenable.push(i),p!==`plain`)continue;if(f.links>1){s.refused.push(i);continue}if(!r.apply){s.sealed+=1;continue}let h=ne(o,f.bytes,r.sealer);ie(o,f.bytes)&&u.push({path:i,id:o,digest:m(h)}),n(i,f.bytes,h)}},r.beforeCommit,(e,t)=>{let n=(0,l.basename)(e).slice(0,-5),r=c.acquire(n);if(r.status!==`acquired`)return s.held.push(n),!1;try{return r.handle.withGuard(t).status===`ran`?!0:(s.held.push(n),!1)}finally{r.handle.release()}});s.sealed+=d.replaced,s.changed.push(...d.changed);for(let{path:e,id:t,digest:n}of u)d.changed.includes(e)||s.sealedRecords.push({id:t,digest:n});return s.staleTemporaries=G(t,r.apply&&r.sweepTemporaries===!0,r.migrationStartedAt),s}function _t(t,n){let r=new Set;for(let i of ht(t).files){let a=i.slice(0,-5);if(!e.g(a))continue;let o=K((0,l.join)(t,i));if(o===void 0)continue;let s=ve(a,o.bytes,n.sealer),c=s.status===`valid`?s.record.cwd:s.status===`corrupt`||s.status===`unsupported`?s.cwd:void 0;typeof c==`string`&&c.length>0&&r.add(c)}return[...r]}const vt=/^tool-result:([A-Za-z0-9_-]{22,64})$/u,yt=`agent-tool-results-`,X=8*1024*1024,bt=c.constants.O_WRONLY|c.constants.O_CREAT|c.constants.O_EXCL|(c.constants.O_NOFOLLOW??0);var Z=class extends Error{code;constructor(e){super(`Tool result spill failed (${e})`),this.code=e,this.name=`ToolResultSpillError`}};function xt(e){return(0,a.sweepStaleProcessScopedDirectories)(e,yt)}const St=X+t.SEALED_ARTIFACT_MAX_OVERHEAD_BYTES;function Ct(e){return{kind:`tool-result-spill`,id:e}}var wt=class{directory;retentionMs;now;onCleanupFailure;sealer;entries=new Map;opened;expiryTimer;cancelExitRemoval;closed=!1;constructor(e){let t=e?.parentDirectory;if(typeof t!=`string`||t.length===0||(this.retentionMs=e.retentionMs??36e5,this.now=e.now??Date.now,this.onCleanupFailure=e.onCleanupFailure,!Number.isSafeInteger(this.retentionMs)||this.retentionMs<=0))throw new Z(`invalid-options`);let n;try{n=O(e)}catch{throw new Z(`invalid-options`)}this.sealer=n===`plain`?void 0:n.sealer;try{let e=(0,c.lstatSync)(t);if(!e.isDirectory()||e.isSymbolicLink())throw Error(`unsafe parent`);this.directory=(0,a.createProcessScopedDirectory)(t,yt,{prepareParent:!1}),this.assertRoot()}catch{throw new Z(`unsafe-root`)}this.cancelExitRemoval=(0,a.removeDirectoryOnProcessExit)(this.directory)}assertRoot(){try{let e=(0,c.lstatSync)(this.directory);if(!e.isDirectory()||e.isSymbolicLink())throw Error(`unsafe directory`);if(process.platform!==`win32`&&e.mode&63)throw Error(`directory is not owner-only`)}catch{throw new Z(`unsafe-root`)}}scheduleExpiry(e=1){if(this.expiryTimer!==void 0&&clearTimeout(this.expiryTimer),this.expiryTimer=void 0,this.closed||this.entries.size===0)return;let t=1/0;for(let e of this.entries.values())e.expiresAt<t&&(t=e.expiresAt);let n=Math.min(2147483647,Math.max(e,t-this.now()));this.expiryTimer=setTimeout(()=>{this.expiryTimer=void 0,this.cleanupExpired().catch(()=>{try{this.onCleanupFailure?this.onCleanupFailure(`cleanup-failed`):process.emitWarning(`Tool result spill expiry cleanup failed (cleanup-failed)`)}catch{process.emitWarning(`Tool result spill expiry cleanup failed (cleanup-failed)`)}this.scheduleExpiry(6e4)})},n),this.expiryTimer.unref?.()}async write(e){if(this.closed)throw new Z(`closed`);if(await this.cleanupExpired(),this.assertRoot(),Buffer.byteLength(e,`utf8`)>X)throw new Z(`write-failed`);let t=(0,s.randomBytes)(18).toString(`base64url`),n=`${(0,s.randomBytes)(18).toString(`base64url`)}.partial`,r=`${t}${this.sealer===void 0?`.txt`:`.sealed`}`,i=(0,l.join)(this.directory,n),a=(0,l.join)(this.directory,r),o;try{o=this.storedForm(e,t)}catch{throw new Z(`write-failed`)}let u,d=!1;try{u=(0,c.openSync)(i,bt,384),(0,c.writeFileSync)(u,o,`utf8`),(0,c.fsyncSync)(u),(0,c.closeSync)(u),u=void 0,(0,c.linkSync)(i,a),d=!0,(0,c.unlinkSync)(i);let e=`tool-result:${t}`;return this.entries.set(e,{fileName:r,token:t,expiresAt:this.now()+this.retentionMs}),this.scheduleExpiry(),{reference:e}}catch{let e=!1;if(u!==void 0)try{(0,c.closeSync)(u)}catch{e=!0}try{(0,c.unlinkSync)(i)}catch(t){t.code!==`ENOENT`&&(e=!0)}if(d)try{(0,c.unlinkSync)(a)}catch{e=!0}throw new Z(e?`cleanup-failed`:`write-failed`)}}async read(e){if(this.closed)throw new Z(`closed`);if(!vt.test(e))throw new Z(`invalid-reference`);let t=this.entries.get(e);if(!t)throw new Z(`missing`);if(this.now()>=t.expiresAt)throw this.removeEntry(e,t),this.scheduleExpiry(),new Z(`expired`);if(this.opened?.reference===e)return this.opened.content;this.assertRoot();try{let n=new B(this.directory,{sealing:`plain`}).readBytes(t.fileName,this.sealer===void 0?X:St);if(n===void 0)throw new Z(`missing`);if(this.sealer===void 0)return Buffer.from(n).toString(`utf8`);let r=this.openStored(this.sealer,n,t.token);return this.opened={reference:e,content:r},r}catch(e){throw e instanceof Z?e:new Z(`read-failed`)}}storedForm(e,t){if(this.sealer===void 0)return e;let n=Buffer.from(e,`utf8`);try{return this.sealer.sealBytes(n,Ct(t))}finally{n.fill(0)}}openStored(e,t,n){let r=e.openBytes(t,Ct(n));try{if(r.byteLength>X)throw new Z(`read-failed`);return Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString(`utf8`)}finally{r.fill(0)}}removeEntry(e,t){this.assertRoot(),this.opened?.reference===e&&(this.opened=void 0);try{(0,c.unlinkSync)((0,l.join)(this.directory,t.fileName))}catch(e){if(e.code!==`ENOENT`)throw new Z(`cleanup-failed`)}this.entries.delete(e)}async cleanupExpired(){if(this.closed)throw new Z(`closed`);for(let[e,t]of this.entries)this.now()>=t.expiresAt&&this.removeEntry(e,t);this.scheduleExpiry()}async shutdown(){if(!this.closed){this.expiryTimer!==void 0&&clearTimeout(this.expiryTimer),this.expiryTimer=void 0,this.opened=void 0;for(let[e,t]of this.entries)this.removeEntry(e,t);this.assertRoot();try{if((0,c.readdirSync)(this.directory).filter(e=>e!==a.PROCESS_OWNER_RECORD_NAME).length!==0)throw Error(`unexpected files`);(0,c.rmSync)((0,l.join)(this.directory,a.PROCESS_OWNER_RECORD_NAME),{force:!0}),(0,c.rmdirSync)(this.directory),this.closed=!0,this.cancelExitRemoval?.()}catch{throw new Z(`cleanup-failed`)}}}};const Q=`user`;function Tt(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.at==`string`&&typeof t.sessionId==`string`&&typeof t.project==`string`&&typeof t.text==`string`}function $(e){if(e.trim().length===0)return;let t;try{t=JSON.parse(e)}catch{return}if(Tt(t))return{at:t.at,sessionId:t.sessionId,project:t.project,text:t.text}}function Et(e,t){let n=[],r=0,i=0,a=0;for(let o of e){if(o.length===0)continue;let e=t.decode(o,Q);if(e.kind===`locked`){e.reason===`no-keys`?a+=1:i+=1;continue}if(e.kind!==`lines`){r+=1;continue}for(let t=e.lines.length-1;t>=0;--t){let i=$(e.lines[t]);i===void 0?r+=1:n.push(i)}}return i+a===0?{entries:n,skippedLines:r}:{entries:n,skippedLines:r,unreadable:{locked:i,noKeys:a}}}function Dt(e){return e.code===`ENOENT`}var Ot=class{path;blockBytes;ownedRoot;lines;constructor(e,t){this.path=e,this.lines=new M(O(t),`prompt-history-line`),this.blockBytes=t.blockBytes??65536,this.ownedRoot=t.ownedRoot}append(e){let t=this.lines.encode(`${JSON.stringify(e)}\n`,Q);(0,a.ensureOwnerOnlyDirectory)((0,l.dirname)(this.path),this.ownedRoot===void 0?{}:{withinRoot:this.ownedRoot}),(0,a.tightenExistingFile)(this.path),(0,c.appendFileSync)(this.path,t,{mode:a.OWNER_ONLY_FILE_MODE})}async*read(e){let t;try{t=(0,c.openSync)(this.path,c.constants.O_RDONLY|(c.constants.O_NOFOLLOW??0))}catch(e){if(e instanceof Error&&Dt(e))return;throw e}try{let n=(0,c.fstatSync)(t).size,r=Buffer.alloc(0),i=!0;for(;n>0&&!e.signal.aborted;){let e=Math.min(this.blockBytes,n);n-=e;let a=Buffer.alloc(e),o=(0,c.readSync)(t,a,0,e,n),s=Buffer.concat([a.subarray(0,o),r]),l=n===0?-1:s.indexOf(10);r=l===-1&&n>0?s:s.subarray(0,l+1);let u=n===0?s:l===-1?Buffer.alloc(0):s.subarray(l+1);if(n>0&&l===-1)continue;let d=u.toString(`utf8`),f=(i?N(d):d.split(`
|
|
11
|
+
`)).reverse();i=!1,yield Et(f,this.lines)}}finally{(0,c.closeSync)(t)}}},kt=class{counts={entries:0,fromPlain:0,carriedOver:0};#e;constructor(e){this.#e=new M({sealer:e},`prompt-history-line`)}rewrite(e,n,r){for(let i of e){if(i.length===0)continue;let e=this.#e.decode(i,Q);if(e.kind===`locked`)throw new t.ArtifactLockedError(e.reason);if(e.kind!==`lines`){n.write(`${i}
|
|
12
|
+
`),this.counts.carriedOver+=1;continue}(0,t.isSealedArtifactLine)(i)||(this.counts.fromPlain+=e.lines.length);for(let t of e.lines){let e=this.#e.encode(`${t}
|
|
13
|
+
`,Q);n.write(r?e:e.slice(1)),this.counts.entries+=1}}}};function At(e,n){let r=H(e);if(r.status!==`open`)return r;let i=new M({sealer:n.sealer},`prompt-history-line`),a=0,o=0,s=0;try{for(let e of N(W(r.descriptor).toString(`utf8`))){if(e.length===0)continue;let n=i.decode(e,Q);if(n.kind===`locked`)throw new t.ArtifactLockedError(n.reason);n.kind===`lines`?(0,t.isSealedArtifactLine)(e)?o+=1:a+=1:s+=1}}finally{(0,c.closeSync)(r.descriptor)}return{status:`present`,plainLines:a,sealedLines:o,unreadableLines:s}}function jt(e,n){let r=H(e);if(r.status!==`open`)return[];let i=new M({sealer:n.sealer},`prompt-history-line`),a=new Set;try{for(let e of N(W(r.descriptor).toString(`utf8`))){if(e.length===0)continue;let n=i.decode(e,Q);if(n.kind===`locked`)throw new t.ArtifactLockedError(n.reason);if(n.kind===`lines`)for(let e of n.lines){let t=$(e);t!==void 0&&t.project.length>0&&a.add(t.project)}}}finally{(0,c.closeSync)(r.descriptor)}return[...a]}async function Mt(e,t){let n=new kt(t.sealer),r=0,i=await tt(e,n,{...t.ownedRoot===void 0?{}:{ownedRoot:t.ownedRoot},...t.pause===void 0?{}:{pause:t.pause},beforeCommit:()=>{r=n.counts.entries,t.beforeCommit?.()}});return i.status===`rewritten`?{status:`compacted`,...n.counts,caughtUp:n.counts.entries-r,droppedTail:i.droppedTail,plainLinesAfter:i.plainLinesAfter,...i.catchUpFailed===void 0?{}:{catchUpFailed:i.catchUpFailed}}:i}function Nt(e){let t=e,n=[];for(;;)try{let e=(0,c.realpathSync)(t);return n.length===0?e:(0,l.resolve)(e,...n.reverse())}catch{let r=(0,l.dirname)(t);if(r===t)return e;n.push(t.slice(r.length).replace(/^[\\/]/,``)),t=r}}function Pt(e,t){let n=(0,l.relative)(e,t);return n===``||!n.startsWith(`..`)&&!(0,l.isAbsolute)(n)}function Ft(e){return(t,n)=>{let r=Nt(e),i=Nt((0,l.resolve)(t??r,n));return Pt(r,i)?i:void 0}}function It(e){typeof process>`u`||typeof process.on!=`function`||process.on(`exit`,e)}exports.DEFAULT_PROMPT_HISTORY_BLOCK_BYTES=65536,exports.NodeExternalPayloadSource=B,exports.NodePromptHistoryFile=Ot,exports.NodeSessionLogSink=Be,exports.NodeSessionLogSource=Ge,exports.NodeSessionStore=De,exports.NodeToolResultSpillStore=wt,exports.SESSION_CLAIMS_DIRECTORY=j,exports.StoredLines=M,exports.StoredPayloads=F,exports.StoredSessionRecords=xe,exports.ToolResultSpillError=Z,exports.assertSessionSealing=k,exports.classifyStoredSessionBytes=ae,exports.compactPromptHistoryFile=Mt,exports.countPlainSessionLogLines=Le,exports.createNodeWorkspacePathResolver=Ft,Object.defineProperty(exports,"createProcessOperationLock",{enumerable:!0,get:function(){return n.createProcessOperationLock}}),exports.inspectPromptHistoryFile=At,exports.isPlainSessionRecordOf=ie,exports.migrateNodeSessionStore=gt,exports.migrateSessionLogDirectory=mt,exports.parsePromptHistoryLine=$,exports.readPromptHistoryProjects=jt,exports.readSessionStoreWorkingDirectories=_t,exports.registerProcessExitFlush=It,exports.sealSessionLogText=Re,exports.sealStoredPayloadBytes=Ie,exports.sealStoredSessionBytes=ne,exports.sessionSealingOf=O,exports.splitStoredLines=N,exports.storedPayloadMigrationState=I,exports.storedSessionMigrationState=te,exports.sweepStaleToolResultSpillDirectories=xt;
|
package/dist/node.d.cts
CHANGED
|
@@ -1,22 +1,7 @@
|
|
|
1
1
|
import { c as IExternalPayloadSink, d as IExternalPayloadReference, l as ISessionLogSink, o as IExternalPayloadSource, s as ISessionLogSource, t as ISessionClaimRefusalWords } from "./session-claims-DELiAZkZ.cjs";
|
|
2
2
|
import { IArtifactSealer, IProcessMarkers, IToolResultSpillStore, TArtifactKind, TArtifactLockedReason, TArtifactSealing, TResolveInWorkspace } from "@robota-sdk/agent-core";
|
|
3
|
-
import { IInteractiveSessionRecord, IInteractiveSessionStore, IPromptHistoryBlock, IPromptHistoryEntry, IPromptHistoryReadOptions, IPromptHistorySource, IPromptHistoryWriter, ISessionAuthorship, ISessionClaim, ISessionClaimOptions, ISessionExportOptions, ISessionLease, ISessionListEntry, ISessionLoadOptions, ISessionSaveOptions, ISessionStoreScan, TSessionLoadOutcome } from "@robota-sdk/agent-interface-session";
|
|
4
|
-
|
|
5
|
-
/** A held OS lock; releasing it twice is harmless. */
|
|
6
|
-
interface IProcessOperationLockHandle {
|
|
7
|
-
release(): void;
|
|
8
|
-
}
|
|
9
|
-
/** Nonblocking exclusive operation locks for names in one host-owned directory. */
|
|
10
|
-
interface IProcessOperationLock {
|
|
11
|
-
tryAcquire(name: string): IProcessOperationLockHandle | undefined;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Creates a host lock whose file is never unlinked while this namespace is in use. The OS releases
|
|
15
|
-
* the lock if its owner exits, including on a crash. A separate same-user program can still replace
|
|
16
|
-
* the path on POSIX; this is cooperative coordination, not a same-user security boundary.
|
|
17
|
-
*/
|
|
18
|
-
declare function createProcessOperationLock(directory: string): IProcessOperationLock;
|
|
19
|
-
//#endregion
|
|
3
|
+
import { IInteractiveSessionRecord, IInteractiveSessionStore, IPromptHistoryBlock, IPromptHistoryEntry, IPromptHistoryReadOptions, IPromptHistorySource, IPromptHistoryWriter, ISessionAuthorship, ISessionClaim, ISessionClaimOptions, ISessionExportOptions, ISessionLease, ISessionListEntry, ISessionLoadOptions, ISessionSaveOptions, ISessionStoreScan, TSessionLoadOutcome, TSessionRestoreCommitOutcome } from "@robota-sdk/agent-interface-session";
|
|
4
|
+
import { createProcessOperationLock } from "@robota-sdk/agent-node-lock";
|
|
20
5
|
//#region src/stored-session-codec.d.ts
|
|
21
6
|
/** A stored record: the bytes that go on disk and the plaintext envelope they were made from. */
|
|
22
7
|
interface IEncodedSession {
|
|
@@ -218,6 +203,7 @@ interface INodeSessionStoreOptions extends ISessionStoreOptions {
|
|
|
218
203
|
* authority-backed adapter over the same neutral port.
|
|
219
204
|
*/
|
|
220
205
|
declare class NodeSessionStore implements IInteractiveSessionStore {
|
|
206
|
+
readonly supportsClaimDiscard: true;
|
|
221
207
|
private readonly baseDir;
|
|
222
208
|
private readonly ownedRoot;
|
|
223
209
|
/** How records are stored, and what this instance claims, wrote or holds. */
|
|
@@ -280,6 +266,7 @@ declare class NodeSessionStore implements IInteractiveSessionStore {
|
|
|
280
266
|
* on disk.
|
|
281
267
|
*/
|
|
282
268
|
save(session: IInteractiveSessionRecord, options?: ISessionSaveOptions): void;
|
|
269
|
+
saveRestoreTransaction(session: IInteractiveSessionRecord, options?: ISessionSaveOptions): TSessionRestoreCommitOutcome;
|
|
283
270
|
/**
|
|
284
271
|
* What is at `path` now, for the guard before a save. Only "no such file" means there is nothing
|
|
285
272
|
* to protect; a file that cannot be opened or read is `unreadable`. The first bytes tell plain from
|
package/dist/node.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.cts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"node.d.cts","names":[],"sources":["../src/stored-session-codec.ts","../src/stored-session-record.ts","../src/session-store.ts","../src/node-session-log-sink.ts","../src/stored-append-lines.ts","../src/session-log-sources.ts","../src/append-file-rewrite.ts","../src/session-log-migration.ts","../src/session-record-migration.ts","../src/tool-result-spill-store.ts","../src/prompt-history-file.ts","../src/prompt-history-compaction.ts","../src/workspace-path-resolver.ts","../src/process-exit-flush.ts"],"mappings":"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"}
|
package/dist/node.d.ts
CHANGED
|
@@ -1,22 +1,7 @@
|
|
|
1
1
|
import { c as IExternalPayloadSink, d as IExternalPayloadReference, l as ISessionLogSink, o as IExternalPayloadSource, s as ISessionLogSource, t as ISessionClaimRefusalWords } from "./session-claims-DELiAZkZ.js";
|
|
2
2
|
import { IArtifactSealer, IProcessMarkers, IToolResultSpillStore, TArtifactKind, TArtifactLockedReason, TArtifactSealing, TResolveInWorkspace } from "@robota-sdk/agent-core";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
/** A held OS lock; releasing it twice is harmless. */
|
|
6
|
-
interface IProcessOperationLockHandle {
|
|
7
|
-
release(): void;
|
|
8
|
-
}
|
|
9
|
-
/** Nonblocking exclusive operation locks for names in one host-owned directory. */
|
|
10
|
-
interface IProcessOperationLock {
|
|
11
|
-
tryAcquire(name: string): IProcessOperationLockHandle | undefined;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Creates a host lock whose file is never unlinked while this namespace is in use. The OS releases
|
|
15
|
-
* the lock if its owner exits, including on a crash. A separate same-user program can still replace
|
|
16
|
-
* the path on POSIX; this is cooperative coordination, not a same-user security boundary.
|
|
17
|
-
*/
|
|
18
|
-
declare function createProcessOperationLock(directory: string): IProcessOperationLock;
|
|
19
|
-
//#endregion
|
|
3
|
+
import { createProcessOperationLock } from "@robota-sdk/agent-node-lock";
|
|
4
|
+
import { IInteractiveSessionRecord, IInteractiveSessionStore, IPromptHistoryBlock, IPromptHistoryEntry, IPromptHistoryReadOptions, IPromptHistorySource, IPromptHistoryWriter, ISessionAuthorship, ISessionClaim, ISessionClaimOptions, ISessionExportOptions, ISessionLease, ISessionListEntry, ISessionLoadOptions, ISessionSaveOptions, ISessionStoreScan, TSessionLoadOutcome, TSessionRestoreCommitOutcome } from "@robota-sdk/agent-interface-session";
|
|
20
5
|
//#region src/stored-session-codec.d.ts
|
|
21
6
|
/** A stored record: the bytes that go on disk and the plaintext envelope they were made from. */
|
|
22
7
|
interface IEncodedSession {
|
|
@@ -218,6 +203,7 @@ interface INodeSessionStoreOptions extends ISessionStoreOptions {
|
|
|
218
203
|
* authority-backed adapter over the same neutral port.
|
|
219
204
|
*/
|
|
220
205
|
declare class NodeSessionStore implements IInteractiveSessionStore {
|
|
206
|
+
readonly supportsClaimDiscard: true;
|
|
221
207
|
private readonly baseDir;
|
|
222
208
|
private readonly ownedRoot;
|
|
223
209
|
/** How records are stored, and what this instance claims, wrote or holds. */
|
|
@@ -280,6 +266,7 @@ declare class NodeSessionStore implements IInteractiveSessionStore {
|
|
|
280
266
|
* on disk.
|
|
281
267
|
*/
|
|
282
268
|
save(session: IInteractiveSessionRecord, options?: ISessionSaveOptions): void;
|
|
269
|
+
saveRestoreTransaction(session: IInteractiveSessionRecord, options?: ISessionSaveOptions): TSessionRestoreCommitOutcome;
|
|
283
270
|
/**
|
|
284
271
|
* What is at `path` now, for the guard before a save. Only "no such file" means there is nothing
|
|
285
272
|
* to protect; a file that cannot be opened or read is `unreadable`. The first bytes tell plain from
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"node.d.ts","names":[],"sources":["../src/stored-session-codec.ts","../src/stored-session-record.ts","../src/session-store.ts","../src/node-session-log-sink.ts","../src/stored-append-lines.ts","../src/session-log-sources.ts","../src/append-file-rewrite.ts","../src/session-log-migration.ts","../src/session-record-migration.ts","../src/tool-result-spill-store.ts","../src/prompt-history-file.ts","../src/prompt-history-compaction.ts","../src/workspace-path-resolver.ts","../src/process-exit-flush.ts"],"mappings":"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"}
|