@code-yeongyu/senpi 2026.10.16-2 → 2026.10.16-3
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 +20 -0
- package/dist/bundle/chunks/chunk-74YFRVGQ.js +2 -0
- package/dist/bundle/chunks/{chunk-KRAABTZY.js → chunk-AVALXFDW.js} +2 -2
- package/dist/bundle/chunks/{chunk-V5JFWWGJ.js → chunk-FMYLLJBQ.js} +1 -1
- package/dist/bundle/chunks/{chunk-VY43SSYL.js → chunk-HJPX7PBL.js} +30 -27
- package/dist/bundle/chunks/{chunk-QQUHMCOM.js → chunk-I5ZJEXTM.js} +1 -1
- package/dist/bundle/chunks/chunk-K2EVQGGT.js +31 -0
- package/dist/bundle/chunks/chunk-WL4Y6XN6.js +18 -0
- package/dist/bundle/chunks/{chunk-Q7RD3NOC.js → chunk-X5VCHHXR.js} +1 -1
- package/dist/bundle/chunks/{cli-main-JDL52ADK.js → cli-main-JVPFJGP5.js} +1 -1
- package/dist/bundle/chunks/google-generative-ai-AI6PAUPA.js +2 -0
- package/dist/bundle/chunks/google-vertex-USNRIFF7.js +2 -0
- package/dist/bundle/chunks/google-vertex-adc-JZURL4XM.js +2 -0
- package/dist/bundle/chunks/{interactive-mode-7IM7YJYH.js → interactive-mode-BROZRY34.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-3MEEUMYU.js → multi-session-host-SMQR5SCJ.js} +2 -2
- package/dist/bundle/chunks/{openai-codex-responses-T26WW2RE.js → openai-codex-responses-NV27Q6VV.js} +1 -1
- package/dist/bundle/chunks/{package-manager-cli-UCHXVBQ2.js → package-manager-cli-2QFJY2AS.js} +1 -1
- package/dist/bundle/chunks/{rpc-mode-D4BJKWFL.js → rpc-mode-Z45T3NZO.js} +1 -1
- package/dist/bundle/chunks/{session-control-endpoint-NBSRSAJS.js → session-control-endpoint-H7FFWF2A.js} +1 -1
- package/dist/bundle/chunks/{session-picker-6TSBGWOA.js → session-picker-2O2BNBVE.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +36 -33
- package/dist/bundle/cli.js +2 -2
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/bundle/runtime-manifest.json +1 -1
- package/dist/core/agent-session.d.ts +16 -0
- package/dist/core/agent-session.js +46 -2
- package/dist/core/dynamic-prompt/intent-gate.d.ts +3 -0
- package/dist/core/dynamic-prompt/intent-gate.js +4 -3
- package/dist/core/dynamic-prompt/policies.d.ts +4 -1
- package/dist/core/dynamic-prompt/policies.js +3 -2
- package/dist/core/dynamic-prompt/working-task.d.ts +4 -1
- package/dist/core/dynamic-prompt/working-task.js +3 -2
- package/dist/core/dynamic-prompt/workstation.d.ts +4 -3
- package/dist/core/dynamic-prompt/workstation.js +1 -0
- package/dist/core/extensions/builtin/goal/index.js +18 -8
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +7 -0
- package/dist/core/extensions/builtin/goal/reload-reengagement.js +5 -0
- package/dist/core/extensions/builtin/index.js +3 -0
- package/dist/core/extensions/builtin/prompt-preset/contract.js +6 -1
- package/dist/core/extensions/builtin/prompt-preset/gemini-4-argon.d.ts +7 -0
- package/dist/core/extensions/builtin/prompt-preset/gemini-4-argon.js +83 -0
- package/dist/core/extensions/builtin/prompt-preset/matchers.d.ts +2 -0
- package/dist/core/extensions/builtin/prompt-preset/matchers.js +12 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js +3 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
- package/dist/core/extensions/builtin/vertex-model-garden/auth.d.ts +16 -0
- package/dist/core/extensions/builtin/vertex-model-garden/auth.js +19 -0
- package/dist/core/extensions/builtin/vertex-model-garden/index.d.ts +6 -0
- package/dist/core/extensions/builtin/vertex-model-garden/index.js +27 -0
- package/dist/core/extensions/builtin/vertex-model-garden/models.d.ts +3 -0
- package/dist/core/extensions/builtin/vertex-model-garden/models.js +34 -0
- package/dist/core/extensions/builtin/vertex-model-garden/transport.d.ts +14 -0
- package/dist/core/extensions/builtin/vertex-model-garden/transport.js +35 -0
- package/dist/core/extensions/types.d.ts +32 -1
- package/dist/core/provider-api-key-auth.d.ts +9 -1
- package/dist/core/provider-api-key-auth.js +34 -0
- package/dist/core/provider-composer.d.ts +23 -0
- package/dist/core/settings-manager.d.ts +4 -0
- package/dist/core/settings-manager.js +6 -0
- package/dist/core/settings-shapes.d.ts +4 -0
- package/dist/core/turn-deadline.d.ts +92 -0
- package/dist/core/turn-deadline.js +179 -0
- package/dist/modes/rpc/client-admission-record.d.ts +1 -0
- package/dist/modes/rpc/client-admissions.d.ts +6 -3
- package/dist/modes/rpc/client-admissions.js +9 -4
- package/dist/modes/rpc/connection-handler.js +8 -3
- package/dist/modes/rpc/effect-commands.d.ts +1 -1
- package/dist/modes/rpc/effect-commands.js +2 -2
- package/dist/modes/rpc/effect-outcome-copy.d.ts +4 -4
- package/dist/modes/rpc/effect-outcome-copy.js +4 -4
- package/dist/modes/rpc/effect-record.d.ts +2 -0
- package/dist/modes/rpc/effect-record.js +2 -0
- package/dist/modes/rpc/effect-status.js +1 -1
- package/dist/modes/rpc/session-unload.js +4 -1
- package/docs/rpc.md +4 -1
- package/docs/settings.md +3 -1
- package/package.json +6 -6
- package/dist/bundle/chunks/chunk-7ASXJ4AD.js +0 -47
- package/dist/bundle/chunks/google-generative-ai-YNIOL5FT.js +0 -2
- package/dist/bundle/chunks/google-vertex-CF6AYVXL.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,26 @@
|
|
|
12
12
|
|
|
13
13
|
### Removed
|
|
14
14
|
|
|
15
|
+
## [2026.10.16-3] - 2026-10-16
|
|
16
|
+
|
|
17
|
+
### Breaking Changes
|
|
18
|
+
|
|
19
|
+
- RPC: the outcome for input dropped from the queue is now `cleared`, written by `clear_queue`, `unload_session { clearQueue: true }` and `abort { clearQueue: true }` alike; 2026.10.16-2 wrote it as `cleared_by_abort`, and only for `abort`. Receipts written under the old name are still read and reported as they were stored, so an input cleared on 2026.10.16-2 is never restored on reopen. Clients matching `outcome.kind` should accept both values ([#3412](https://github.com/code-yeongyu/senpi/issues/3412)).
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- Added the `vertex-garden` provider for DeepSeek V4.1 Flash and GLM 5.2 through Vertex Model Garden's global OpenAI-compatible endpoint, using shared Google Application Default Credentials token resolution without a token script or proxy. Availability follows the ADC chain: the lane is selectable while ADC is present but never counts as configured, so it cannot take the automatic default over a provider you configured. The request project comes from `GOOGLE_CLOUD_PROJECT`/`GCLOUD_PROJECT`, the ADC quota project, or `gcloud`'s configured project, and both models carry their published MaaS list prices. Marketplace partner models such as Claude and Grok are excluded because promotional credits do not apply ([#3296](https://github.com/code-yeongyu/senpi/pull/3296) by [@sleegme](https://github.com/sleegme)).
|
|
24
|
+
|
|
25
|
+
- A turn that stopped making progress no longer runs forever: a session-level inactivity lease (`turn_inactivity_ms`, default 60 min, renewed only by tool execution events and admitted user input) and a hard maximum runtime (`turn_max_runtime_ms`, default 6 h) end a stuck turn as a system abort that carries a `deadline` detail on `agent_end`. Partial text is kept, the reason names the setting and the action to resume, and a goal is never auto-continued past the stop until the user sends a message ([#3227](https://github.com/code-yeongyu/senpi/issues/3227)).
|
|
26
|
+
|
|
27
|
+
- Argon sessions get their own system prompt preset (`gemini-4-argon`, auto-resolved for every catalog id shape and forceable from settings). It is the default prompt with four spots tuned to the provider's published prompting guidance: the identity names the model, the terminal routing line is declared plain prose with the tool calls following in the same response, the Working the Task opening makes one `eval` cell with real control flow and `parallel(thunks)` the way a step is done when `eval` is available, the error rule retries transient failures and changes strategy on others, plus a plain workstation wording and a search-grounding paragraph when `web_search` is active. Every other model's prompt is byte-identical to before ([#3385](https://github.com/code-yeongyu/senpi/issues/3385)).
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
### Removed
|
|
34
|
+
|
|
15
35
|
## [2026.10.16-2] - 2026-10-16
|
|
16
36
|
|
|
17
37
|
### Breaking Changes
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
+
import{getProviderEnvValue}from"./chunk-5ROMKDLK.js";function resolveVertexProjectFromEnv(options){return options?.project||getProviderEnvValue("GOOGLE_CLOUD_PROJECT",options?.env)||getProviderEnvValue("GCLOUD_PROJECT",options?.env)}function buildGoogleAuthOptions(env){let keyFilename=getProviderEnvValue("GOOGLE_APPLICATION_CREDENTIALS",env);return keyFilename?{keyFilename}:void 0}export{resolveVertexProjectFromEnv,buildGoogleAuthOptions};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{clientMessageIdentitySchema}from"./chunk-IRKWZZKD.js";import{watchWithErrorHandler}from"./chunk-JABBHOD5.js";import{ProjectTrustStore}from"./chunk-TEGEPQIA.js";import{external_exports}from"./chunk-KUPQO7MC.js";import{modelSupportsAssistantPrefill}from"./chunk-ZDTNH3XU.js";import{sanitizeProviderDiagnostic}from"./chunk-UAQW2T7G.js";import{getSupportedThinkingLevels,supportsMax,supportsXhigh}from"./chunk-2ON6BFHO.js";function supportsXhigh2(model){return supportsXhigh(model)}function supportsMax2(model){return supportsMax(model)}function getSupportedThinkingLevels2(model){let supportedLevels=getSupportedThinkingLevels(model);return supportedLevels.length>0?supportedLevels:["off"]}function clampThinkingSelection(selection,requested,level,model){if(selection===void 0)return;let{requested:_staleRequested,clampReason:_staleReason,...base}=selection;return requested===level||model===void 0?{...base,level}:{...base,level,requested,clampReason:model.reasoning?"level-unsupported":"model-not-reasoning"}}function getThinkingClampNotice(selection,model){let clamped=selection;if(!(model===void 0||clamped?.requested===void 0||clamped.clampReason===void 0))return{provider:model.provider,modelId:model.id,requestedLevel:clamped.requested,appliedLevel:clamped.level,reason:clamped.clampReason}}function formatThinkingClampWarning(notice){let model=`${notice.provider}/${notice.modelId}`;return notice.reason==="model-not-reasoning"?`Thinking level "${notice.requestedLevel}" was requested, but ${model} is not marked as a reasoning model, so thinking is "${notice.appliedLevel}". If the model supports reasoning, set "reasoning": true for it in models.json.`:`Thinking level "${notice.requestedLevel}" is not available on ${model}; using "${notice.appliedLevel}".`}function classifyReasoningCapability(model){if(!model.reasoning)return{kind:"none",levels:["off"],nonOffLevels:[]};let levels=getSupportedThinkingLevels2(model),nonOffLevels=levels.filter(level=>level!=="off");return levels.includes("off")?nonOffLevels.length===1?{kind:"on-off",levels,nonOffLevels}:nonOffLevels.length===0?{kind:"none",levels,nonOffLevels}:{kind:"graded",levels,nonOffLevels}:{kind:"always-on",levels,nonOffLevels}}var BROWSER_ENGINES=["connected","builtin","none"];function isBrowserEngine(value){return BROWSER_ENGINES.some(engine=>engine===value)}var MAX_RPC_MESSAGE_CHARACTERS=1e6,SESSION_CONTEXT_LIMITS={keys:32,valueBytes:16*1024,totalBytes:32*1024},SESSION_CONTEXT_KEY_PATTERN=/^[a-z][a-z0-9_]*$/;function validContent(content){return typeof content=="string"?!0:Array.isArray(content)&&content.every(item=>{if(typeof item!="object"||item===null)return!1;let value=item;return value.type==="text"?typeof value.text=="string":value.type==="image"&&typeof value.data=="string"&&typeof value.mimeType=="string"})}function validBaseEntry(entry){return typeof entry.id=="string"&&(entry.parentId===null||typeof entry.parentId=="string")&&typeof entry.timestamp=="string"}function validSessionEntry(entry){if(typeof entry!="object"||entry===null||Array.isArray(entry))return!1;let value=entry;if(!validBaseEntry(value))return!1;switch(value.type){case"message":{let message=value.message;if(typeof message!="object"||message===null)return!1;let item=message;return["user","assistant","tool"].includes(item.role)&&validContent(item.content)}case"thinking_level_change":return typeof value.thinkingLevel=="string";case"model_change":return typeof value.provider=="string"&&typeof value.modelId=="string";case"model_change_rejected":return typeof value.provider=="string"&&typeof value.modelId=="string"&&typeof value.detail=="string";case"compaction":return typeof value.summary=="string"&&typeof value.firstKeptEntryId=="string"&&typeof value.tokensBefore=="number";case"branch_summary":return typeof value.fromId=="string"&&typeof value.summary=="string";case"custom":return typeof value.customType=="string";case"custom_message":return typeof value.customType=="string"&&validContent(value.content)&&typeof value.display=="boolean";case"label":return typeof value.targetId=="string"&&(value.label===void 0||typeof value.label=="string");case"session_info":return value.name===void 0||typeof value.name=="string";default:return!1}}function rpcCommandPayloadError(command){if(rpcCommandShapeError(command))return;let value=command;if((value.type==="prompt"||value.type==="steer"||value.type==="follow_up")&&!clientMessageIdentitySchema.safeParse(value).success)return"clientMessageId and clientTurnId must be non-empty strings of at most 256 characters.";if((value.type==="dequeue_message"||value.type==="edit_queued_message")&&!(typeof value.queuedId=="string"&&value.queuedId.length>0&&value.queuedId.length<=256))return"queuedId must be a non-empty string of at most 256 characters; read it from get_state or queue_update.";if(value.type==="edit_queued_message"&&!(typeof value.text=="string"&&value.text.length>0&&value.text.length<=MAX_RPC_MESSAGE_CHARACTERS))return`text must be a non-empty string of at most ${MAX_RPC_MESSAGE_CHARACTERS} characters; dequeue_message removes an input.`;if(value.type==="resolve_path"&&!(typeof value.path=="string"&&value.path.trim().length>0&&value.path.length<=4096))return"path must be a non-empty string of at most 4096 characters.";if(value.type==="unload_session"){if(value.children!==void 0&&value.children!=="refuse"&&value.children!=="detach")return'children must be "refuse" or "detach".';for(let flag of["interrupt","clearQueue","force"])if(value[flag]!==void 0&&typeof value[flag]!="boolean")return`${flag} must be a boolean.`}if((value.type==="steer"||value.type==="follow_up")&&value.enqueueOrder!==void 0&&!(typeof value.enqueueOrder=="number"&&Number.isFinite(value.enqueueOrder)))return"enqueueOrder must be a finite number.";if((value.type==="steer"||value.type==="follow_up")&&value.whenIdle!==void 0&&value.whenIdle!=="queue"&&value.whenIdle!=="start")return'whenIdle must be "queue" or "start"; omit it to queue on an idle session.';if((value.type==="abort"||value.type==="set_model"||value.type==="set_thinking_level"||value.type==="get_effect_status")&&(value.effectId!==void 0||value.type==="get_effect_status")&&!(typeof value.effectId=="string"&&value.effectId.length>0&&value.effectId.length<=256))return"effectId must be a non-empty string of at most 256 characters.";if(value.type==="get_effect_status"&&value.sessionPath!==void 0&&typeof value.sessionPath!="string")return"sessionPath must be a string.";if(value.type==="append_user_message"&&!validContent(value.content))return"append_user_message content must be a string or text/image content array.";if(value.type==="append_session_entry"&&!validSessionEntry(value.entry))return"append_session_entry entry is malformed."}function sessionContextError(context){if(context===void 0)return;if(typeof context!="object"||context===null||Array.isArray(context))return"context must be an object of string values.";let entries=Object.entries(context);if(entries.length>SESSION_CONTEXT_LIMITS.keys)return`context has ${entries.length} keys, at most ${SESSION_CONTEXT_LIMITS.keys} are accepted.`;for(let[key,value]of entries){if(!SESSION_CONTEXT_KEY_PATTERN.test(key))return`context key "${key}" must match ${SESSION_CONTEXT_KEY_PATTERN.source}.`;if(typeof value!="string")return`context value for key "${key}" must be a string.`;let valueBytes=Buffer.byteLength(value);if(valueBytes>SESSION_CONTEXT_LIMITS.valueBytes)return`context value for key "${key}" is ${valueBytes} bytes, at most ${SESSION_CONTEXT_LIMITS.valueBytes} bytes are accepted.`}let totalBytes=Buffer.byteLength(JSON.stringify(context));if(totalBytes>SESSION_CONTEXT_LIMITS.totalBytes)return`context is ${totalBytes} bytes of JSON, at most ${SESSION_CONTEXT_LIMITS.totalBytes} bytes are accepted.`}function sessionKindError(kind){if(!(kind===void 0||kind==="interactive"||kind==="worker"))return'kind must be "interactive" or "worker".'}function sessionAutoTitleError(value){if(!(value===void 0||typeof value=="boolean"))return"auto_title must be a boolean."}function sessionPromptSurfaceError(value){if(!(value===void 0||value==="terminal"||value==="app"||value==="chat"))return'promptSurface must be "terminal", "app" or "chat".'}function sessionBrowserEngineError(value){if(!(value===void 0||isBrowserEngine(value)))return'browserEngine must be "connected", "builtin" or "none".'}var MAX_RETRY_FALLBACK_CHAINS=32,MAX_RETRY_FALLBACK_ENTRIES=32,MAX_RETRY_FALLBACK_SELECTOR_LENGTH=512;function sessionRetryFallbackError(value){if(value===void 0)return;let shape="retryFallback must be { modelFallback: boolean, fallbackChains: Record<string, string[]> }.";if(typeof value!="object"||value===null||Array.isArray(value))return shape;let record=value;if(typeof record.modelFallback!="boolean")return shape;let chains=record.fallbackChains;if(typeof chains!="object"||chains===null||Array.isArray(chains))return shape;let entries=Object.entries(chains);if(entries.length>MAX_RETRY_FALLBACK_CHAINS)return`retryFallback allows at most ${MAX_RETRY_FALLBACK_CHAINS} chains.`;for(let[key,selectors]of entries){if(!isSelector(key)||!Array.isArray(selectors)||!selectors.every(isSelector))return shape;if(selectors.length>MAX_RETRY_FALLBACK_ENTRIES)return`retryFallback allows at most ${MAX_RETRY_FALLBACK_ENTRIES} entries per chain.`}}function isSelector(value){return typeof value=="string"&&value.trim().length>0&&value.length<=MAX_RETRY_FALLBACK_SELECTOR_LENGTH}function rpcCommandShapeError(command){if(typeof command!="object"||command===null||Array.isArray(command))return"RPC command must be a JSON object."}function rpcMessageLengthError(command){if(rpcCommandShapeError(command))return;let input=command;if(!(input.type!=="prompt"&&input.type!=="steer"&&input.type!=="follow_up")&&!(typeof input.message!="string"||input.message.length<=MAX_RPC_MESSAGE_CHARACTERS))return`RPC ${input.type} message exceeds ${MAX_RPC_MESSAGE_CHARACTERS} characters.`}import{randomUUID}from"node:crypto";import{mkdir,rm,writeFile}from"node:fs/promises";import{join}from"node:path";import{setTimeout as delay}from"node:timers/promises";import{Worker}from"node:worker_threads";var RECURSIVE_WATCH_WORKER_SOURCE=`
|
|
2
|
+
import{clientMessageIdentitySchema}from"./chunk-IRKWZZKD.js";import{ProjectTrustStore}from"./chunk-TEGEPQIA.js";import{watchWithErrorHandler}from"./chunk-JABBHOD5.js";import{external_exports}from"./chunk-KUPQO7MC.js";import{modelSupportsAssistantPrefill}from"./chunk-ZDTNH3XU.js";import{sanitizeProviderDiagnostic}from"./chunk-UAQW2T7G.js";import{getSupportedThinkingLevels,supportsMax,supportsXhigh}from"./chunk-2ON6BFHO.js";function supportsXhigh2(model){return supportsXhigh(model)}function supportsMax2(model){return supportsMax(model)}function getSupportedThinkingLevels2(model){let supportedLevels=getSupportedThinkingLevels(model);return supportedLevels.length>0?supportedLevels:["off"]}function clampThinkingSelection(selection,requested,level,model){if(selection===void 0)return;let{requested:_staleRequested,clampReason:_staleReason,...base}=selection;return requested===level||model===void 0?{...base,level}:{...base,level,requested,clampReason:model.reasoning?"level-unsupported":"model-not-reasoning"}}function getThinkingClampNotice(selection,model){let clamped=selection;if(!(model===void 0||clamped?.requested===void 0||clamped.clampReason===void 0))return{provider:model.provider,modelId:model.id,requestedLevel:clamped.requested,appliedLevel:clamped.level,reason:clamped.clampReason}}function formatThinkingClampWarning(notice){let model=`${notice.provider}/${notice.modelId}`;return notice.reason==="model-not-reasoning"?`Thinking level "${notice.requestedLevel}" was requested, but ${model} is not marked as a reasoning model, so thinking is "${notice.appliedLevel}". If the model supports reasoning, set "reasoning": true for it in models.json.`:`Thinking level "${notice.requestedLevel}" is not available on ${model}; using "${notice.appliedLevel}".`}function classifyReasoningCapability(model){if(!model.reasoning)return{kind:"none",levels:["off"],nonOffLevels:[]};let levels=getSupportedThinkingLevels2(model),nonOffLevels=levels.filter(level=>level!=="off");return levels.includes("off")?nonOffLevels.length===1?{kind:"on-off",levels,nonOffLevels}:nonOffLevels.length===0?{kind:"none",levels,nonOffLevels}:{kind:"graded",levels,nonOffLevels}:{kind:"always-on",levels,nonOffLevels}}var BROWSER_ENGINES=["connected","builtin","none"];function isBrowserEngine(value){return BROWSER_ENGINES.some(engine=>engine===value)}var MAX_RPC_MESSAGE_CHARACTERS=1e6,SESSION_CONTEXT_LIMITS={keys:32,valueBytes:16*1024,totalBytes:32*1024},SESSION_CONTEXT_KEY_PATTERN=/^[a-z][a-z0-9_]*$/;function validContent(content){return typeof content=="string"?!0:Array.isArray(content)&&content.every(item=>{if(typeof item!="object"||item===null)return!1;let value=item;return value.type==="text"?typeof value.text=="string":value.type==="image"&&typeof value.data=="string"&&typeof value.mimeType=="string"})}function validBaseEntry(entry){return typeof entry.id=="string"&&(entry.parentId===null||typeof entry.parentId=="string")&&typeof entry.timestamp=="string"}function validSessionEntry(entry){if(typeof entry!="object"||entry===null||Array.isArray(entry))return!1;let value=entry;if(!validBaseEntry(value))return!1;switch(value.type){case"message":{let message=value.message;if(typeof message!="object"||message===null)return!1;let item=message;return["user","assistant","tool"].includes(item.role)&&validContent(item.content)}case"thinking_level_change":return typeof value.thinkingLevel=="string";case"model_change":return typeof value.provider=="string"&&typeof value.modelId=="string";case"model_change_rejected":return typeof value.provider=="string"&&typeof value.modelId=="string"&&typeof value.detail=="string";case"compaction":return typeof value.summary=="string"&&typeof value.firstKeptEntryId=="string"&&typeof value.tokensBefore=="number";case"branch_summary":return typeof value.fromId=="string"&&typeof value.summary=="string";case"custom":return typeof value.customType=="string";case"custom_message":return typeof value.customType=="string"&&validContent(value.content)&&typeof value.display=="boolean";case"label":return typeof value.targetId=="string"&&(value.label===void 0||typeof value.label=="string");case"session_info":return value.name===void 0||typeof value.name=="string";default:return!1}}function rpcCommandPayloadError(command){if(rpcCommandShapeError(command))return;let value=command;if((value.type==="prompt"||value.type==="steer"||value.type==="follow_up")&&!clientMessageIdentitySchema.safeParse(value).success)return"clientMessageId and clientTurnId must be non-empty strings of at most 256 characters.";if((value.type==="dequeue_message"||value.type==="edit_queued_message")&&!(typeof value.queuedId=="string"&&value.queuedId.length>0&&value.queuedId.length<=256))return"queuedId must be a non-empty string of at most 256 characters; read it from get_state or queue_update.";if(value.type==="edit_queued_message"&&!(typeof value.text=="string"&&value.text.length>0&&value.text.length<=MAX_RPC_MESSAGE_CHARACTERS))return`text must be a non-empty string of at most ${MAX_RPC_MESSAGE_CHARACTERS} characters; dequeue_message removes an input.`;if(value.type==="resolve_path"&&!(typeof value.path=="string"&&value.path.trim().length>0&&value.path.length<=4096))return"path must be a non-empty string of at most 4096 characters.";if(value.type==="unload_session"){if(value.children!==void 0&&value.children!=="refuse"&&value.children!=="detach")return'children must be "refuse" or "detach".';for(let flag of["interrupt","clearQueue","force"])if(value[flag]!==void 0&&typeof value[flag]!="boolean")return`${flag} must be a boolean.`}if((value.type==="steer"||value.type==="follow_up")&&value.enqueueOrder!==void 0&&!(typeof value.enqueueOrder=="number"&&Number.isFinite(value.enqueueOrder)))return"enqueueOrder must be a finite number.";if((value.type==="steer"||value.type==="follow_up")&&value.whenIdle!==void 0&&value.whenIdle!=="queue"&&value.whenIdle!=="start")return'whenIdle must be "queue" or "start"; omit it to queue on an idle session.';if((value.type==="abort"||value.type==="set_model"||value.type==="set_thinking_level"||value.type==="get_effect_status")&&(value.effectId!==void 0||value.type==="get_effect_status")&&!(typeof value.effectId=="string"&&value.effectId.length>0&&value.effectId.length<=256))return"effectId must be a non-empty string of at most 256 characters.";if(value.type==="get_effect_status"&&value.sessionPath!==void 0&&typeof value.sessionPath!="string")return"sessionPath must be a string.";if(value.type==="append_user_message"&&!validContent(value.content))return"append_user_message content must be a string or text/image content array.";if(value.type==="append_session_entry"&&!validSessionEntry(value.entry))return"append_session_entry entry is malformed."}function sessionContextError(context){if(context===void 0)return;if(typeof context!="object"||context===null||Array.isArray(context))return"context must be an object of string values.";let entries=Object.entries(context);if(entries.length>SESSION_CONTEXT_LIMITS.keys)return`context has ${entries.length} keys, at most ${SESSION_CONTEXT_LIMITS.keys} are accepted.`;for(let[key,value]of entries){if(!SESSION_CONTEXT_KEY_PATTERN.test(key))return`context key "${key}" must match ${SESSION_CONTEXT_KEY_PATTERN.source}.`;if(typeof value!="string")return`context value for key "${key}" must be a string.`;let valueBytes=Buffer.byteLength(value);if(valueBytes>SESSION_CONTEXT_LIMITS.valueBytes)return`context value for key "${key}" is ${valueBytes} bytes, at most ${SESSION_CONTEXT_LIMITS.valueBytes} bytes are accepted.`}let totalBytes=Buffer.byteLength(JSON.stringify(context));if(totalBytes>SESSION_CONTEXT_LIMITS.totalBytes)return`context is ${totalBytes} bytes of JSON, at most ${SESSION_CONTEXT_LIMITS.totalBytes} bytes are accepted.`}function sessionKindError(kind){if(!(kind===void 0||kind==="interactive"||kind==="worker"))return'kind must be "interactive" or "worker".'}function sessionAutoTitleError(value){if(!(value===void 0||typeof value=="boolean"))return"auto_title must be a boolean."}function sessionPromptSurfaceError(value){if(!(value===void 0||value==="terminal"||value==="app"||value==="chat"))return'promptSurface must be "terminal", "app" or "chat".'}function sessionBrowserEngineError(value){if(!(value===void 0||isBrowserEngine(value)))return'browserEngine must be "connected", "builtin" or "none".'}var MAX_RETRY_FALLBACK_CHAINS=32,MAX_RETRY_FALLBACK_ENTRIES=32,MAX_RETRY_FALLBACK_SELECTOR_LENGTH=512;function sessionRetryFallbackError(value){if(value===void 0)return;let shape="retryFallback must be { modelFallback: boolean, fallbackChains: Record<string, string[]> }.";if(typeof value!="object"||value===null||Array.isArray(value))return shape;let record=value;if(typeof record.modelFallback!="boolean")return shape;let chains=record.fallbackChains;if(typeof chains!="object"||chains===null||Array.isArray(chains))return shape;let entries=Object.entries(chains);if(entries.length>MAX_RETRY_FALLBACK_CHAINS)return`retryFallback allows at most ${MAX_RETRY_FALLBACK_CHAINS} chains.`;for(let[key,selectors]of entries){if(!isSelector(key)||!Array.isArray(selectors)||!selectors.every(isSelector))return shape;if(selectors.length>MAX_RETRY_FALLBACK_ENTRIES)return`retryFallback allows at most ${MAX_RETRY_FALLBACK_ENTRIES} entries per chain.`}}function isSelector(value){return typeof value=="string"&&value.trim().length>0&&value.length<=MAX_RETRY_FALLBACK_SELECTOR_LENGTH}function rpcCommandShapeError(command){if(typeof command!="object"||command===null||Array.isArray(command))return"RPC command must be a JSON object."}function rpcMessageLengthError(command){if(rpcCommandShapeError(command))return;let input=command;if(!(input.type!=="prompt"&&input.type!=="steer"&&input.type!=="follow_up")&&!(typeof input.message!="string"||input.message.length<=MAX_RPC_MESSAGE_CHARACTERS))return`RPC ${input.type} message exceeds ${MAX_RPC_MESSAGE_CHARACTERS} characters.`}import{randomUUID}from"node:crypto";import{mkdir,rm,writeFile}from"node:fs/promises";import{join}from"node:path";import{setTimeout as delay}from"node:timers/promises";import{Worker}from"node:worker_threads";var RECURSIVE_WATCH_WORKER_SOURCE=`
|
|
3
3
|
const { watch } = require("node:fs");
|
|
4
4
|
const { parentPort } = require("node:worker_threads");
|
|
5
5
|
|
|
@@ -52,4 +52,4 @@ parentPort.on("message", (message) => {
|
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
|
-
`;function createRecursiveWatchWorker(){return new Worker(RECURSIVE_WATCH_WORKER_SOURCE,{eval:!0})}var recursiveWorkerStates=new Map;function isRecursiveWatchMessage(message){return typeof message!="object"||message===null||!("kind"in message)||!("id"in message)||typeof message.id!="number"?!1:message.kind==="error"?"message"in message&&typeof message.message=="string":message.kind==="event"&&"eventType"in message&&typeof message.eventType=="string"&&"filename"in message&&(message.filename===null||typeof message.filename=="string")}var WORKER_OFFLOADED_WATCH_PLATFORMS=new Set(["linux","darwin"]);function createFsWatchEventSource(onError=()=>{},options={}){let createWorker=options.createRecursiveWorker??createRecursiveWatchWorker,state=recursiveWorkerStates.get(createWorker);state||(state={subscriptions:new Map,nextSubscriptionId:1},recursiveWorkerStates.set(createWorker,state));let recursiveSubscriptions=state.subscriptions,ensureRecursiveWorker=()=>{if(state.worker)return state.worker;let worker=createWorker();return worker.on("message",message=>{if(!isRecursiveWatchMessage(message))return;let subscription=recursiveSubscriptions.get(message.id);if(subscription){if(message.kind==="event"){subscription.listener(message.eventType,message.filename);return}subscription.onError(new Error(message.message),subscription.path)}}),worker.on("error",error=>{for(let subscription of recursiveSubscriptions.values())subscription.onError(error,subscription.path);if(state.worker!==worker||(state.worker=void 0,recursiveSubscriptions.size===0))return;let replacement=ensureRecursiveWorker();for(let[id,subscription]of recursiveSubscriptions)replacement.postMessage({kind:"watch",id,path:subscription.path,recursive:subscription.recursive,active:subscription.active})}),state.worker=worker,worker};return(path,listener,watchOptions)=>{if(WORKER_OFFLOADED_WATCH_PLATFORMS.has(options.platform??process.platform)){let id=state.nextSubscriptionId++,recursive=watchOptions?.recursive??!1,active=new Int32Array(new SharedArrayBuffer(4));Atomics.store(active,0,1),ensureRecursiveWorker().postMessage({kind:"watch",id,path,recursive,active}),recursiveSubscriptions.set(id,{path,listener,recursive,active,onError});let closing;return()=>{if(!recursiveSubscriptions.delete(id))return closing;Atomics.store(active,0,0);let worker=state.worker;if(!worker)return closing;if(worker.postMessage({kind:"unwatch",id}),!(recursiveSubscriptions.size>0))return state.worker=void 0,closing=worker.terminate().then(()=>{},error=>{throw onError(error,path),error}),closing}}let watcher=watchWithErrorHandler(path,listener,()=>onError(new Error(`fs.watch failed for ${path}`),path),{recursive:watchOptions?.recursive??!1});return()=>watcher?.close()}}var REASON_PRIORITY=["submission","draft_cleared","idle","continue","command","emitted","inbox"],EMPTY_RESULT={admitted:[]},WakeScheduler=class{constructor(pass,onError){this.running=!1,this.disposed=!1,this.pass=pass,this.onError=onError}request(reason,deliveryIds){if(this.disposed)return Promise.resolve(EMPTY_RESULT);this.next??={reasons:new Set,deliveryIds:new Set,waiters:[]};let batch=this.next;batch.reasons.add(reason);for(let id of deliveryIds??[])batch.deliveryIds.add(id);let settled=new Promise(resolve=>batch.waiters.push(resolve));return this.running||this.run(),settled}dispose(){this.disposed=!0;let batch=this.next;this.next=void 0;for(let waiter of batch?.waiters??[])waiter(EMPTY_RESULT)}async run(){this.running=!0;try{for(let batch=this.next;batch!==void 0&&!this.disposed;batch=this.next){this.next=void 0;let result=EMPTY_RESULT;try{result=await this.pass(wakeEvent(batch))}catch(error){this.onError(error)}for(let waiter of batch.waiters)waiter(result)}}finally{this.running=!1}}};function wakeEvent(batch){let reasons=REASON_PRIORITY.filter(reason2=>batch.reasons.has(reason2)),reason=reasons[0]??"inbox",ids=[...batch.deliveryIds];return{type:"session_control_wake",reason,reasons,...ids.length>0?{delivery_ids:ids}:{}}}var INBOX_ENGINE_ENTRY_PREFIX=".senpi-",INBOX_ARM_ATTEMPTS=25,INBOX_ARM_ATTEMPT_MS=200;async function watchInbox(inboxDir,onChange,onError){await mkdir(inboxDir,{recursive:!0,mode:448});let sentinel=`${INBOX_ENGINE_ENTRY_PREFIX}armed-${randomUUID()}`,confirmation=Promise.withResolvers(),stopped=!1,unsubscribe=createFsWatchEventSource(error=>onError(error))(inboxDir,(_eventType,filename)=>{filename===sentinel?confirmation.resolve(!0):filename?.startsWith(INBOX_ENGINE_ENTRY_PREFIX)||onChange()},{recursive:!1}),arming=confirmArm(join(inboxDir,sentinel),confirmation.promise,()=>stopped).then(confirmed=>{!confirmed&&!stopped&&onError(new Error(`inbox watch on ${inboxDir} was not confirmed`))},error=>{stopped||onError(error)});return{armed:Promise.race([confirmation.promise.then(confirmed=>confirmed?void 0:arming),arming]),stop:()=>{stopped=!0,confirmation.resolve(!1),Promise.resolve(unsubscribe()).catch(onError)}}}async function confirmArm(sentinelPath,confirmed,stopped){let seen=!1;try{for(let attempt=0;attempt<INBOX_ARM_ATTEMPTS&&!seen&&!stopped();attempt++)await writeFile(sentinelPath,String(attempt),{mode:384}),seen=await Promise.race([confirmed,delay(INBOX_ARM_ATTEMPT_MS,!1)])}finally{await rm(sentinelPath,{force:!0})}return seen}function onProcessContinue(listener){let handler=()=>{setImmediate(listener)};return process.on("SIGCONT",handler),()=>{process.removeListener("SIGCONT",handler)}}import{createHash}from"node:crypto";var RPC_EFFECT_ENTRY="rpc_effect",EFFECT_LEDGER_CAPABILITY="effect_ledger",actorSchema=external_exports.object({connectionId:external_exports.string()}),effectOutcomeSchema=external_exports.object({kind:external_exports.enum(["completed","aborted","error","deadline","interrupted_by_reopen","dropped_by_replace","unknown_model","provider_unavailable","unsupported_thinking_level","superseded","context_budget","cleared_by_abort","already_delivered","not_found","refused"]),reason:external_exports.string().optional(),detail:external_exports.string().optional(),action:external_exports.string().optional(),abortSource:external_exports.string().optional(),abortedBy:actorSchema.optional()}),rpcEffectRecordSchema=external_exports.object({effectId:external_exports.string().min(1).max(256),kind:external_exports.enum(["abort","unload","set_model","set_thinking_level","dequeue","edit_queued"]),state:external_exports.enum(["accepted","applied","done","failed"]),disposition:external_exports.string().optional(),outcome:effectOutcomeSchema.optional(),by:actorSchema,acceptedAt:external_exports.string(),updatedAt:external_exports.string(),durableSessionId:external_exports.string(),fingerprint:external_exports.string()});function isTerminalEffectState(state){return state==="done"||state==="failed"}var EffectIdConflict=class extends Error{constructor(effectId){super(`effect_id_conflict: effectId ${effectId} was already used for a different request`),this.code="effect_id_conflict",this.reason="effect_id_conflict: this effectId was already used for a different request",this.action="send the request again with a new effectId",this.name="EffectIdConflict",this.effectId=effectId}},SEMANTIC_FIELDS={abort:["awaitIdle","clearQueue","graceMs"],set_model:["provider","modelId","thinkingLevel"],set_thinking_level:["level","scope"],unload:["interrupt","clearQueue","children","force"],dequeue:["queuedId"],edit_queued:["queuedId","text"]};function effectFingerprint(command,payload){let semantic={kind:command};for(let field of SEMANTIC_FIELDS[command]){let value=Reflect.get(payload,field);value!==void 0&&(semantic[field]=value)}return createHash("sha256").update(JSON.stringify(semantic)).digest("hex")}import{createHash as createHash2}from"node:crypto";var CLIENT_ADMISSION_ENTRY="rpc_client_message_admission",HOST_MINTED_ID_PREFIX="host:";function isHostMintedId(id){return id?.startsWith(HOST_MINTED_ID_PREFIX)===!0}function clientFacingIdentity(value){if(!isHostMintedId(value.clientMessageId))return value;let{clientMessageId:_minted,...rest}=value;return rest}var DURABLE_CLIENT_MESSAGE_ID_CAPABILITY="durable_client_message_id",admissionIdentitySchema=clientMessageIdentitySchema.extend({clientMessageId:external_exports.string().min(1).max(256),durableSessionId:external_exports.string(),fingerprint:external_exports.string(),disposition:external_exports.enum(["queued","started","handled"]),hostMinted:external_exports.literal(!0).optional()}),preparedInputSchema=clientMessageIdentitySchema.extend({text:external_exports.string(),images:external_exports.array(external_exports.object({type:external_exports.literal("image"),data:external_exports.string(),mimeType:external_exports.string()})).optional(),mode:external_exports.enum(["steer","followUp"]),enqueueOrder:external_exports.number()}),clientAdmissionRecordSchema=external_exports.discriminatedUnion("state",[admissionIdentitySchema.extend({state:external_exports.literal("queued"),prepared:preparedInputSchema}),admissionIdentitySchema.extend({state:external_exports.literal("running"),prepared:external_exports.undefined().optional()}),admissionIdentitySchema.extend({state:external_exports.literal("completed"),prepared:external_exports.undefined().optional(),outcome:effectOutcomeSchema.optional()})]);function admissionSnapshot(record){let{fingerprint:_fingerprint,prepared:_prepared,...snapshot}=record;return snapshot}var ClientMessageIdConflict=class extends Error{constructor(clientMessageId){super(`client_message_id_conflict: ${clientMessageId}`),this.code="client_message_id_conflict",this.name="ClientMessageIdConflict",this.clientMessageId=clientMessageId}};function clientInputFingerprint(command){let payload={type:command.type,message:command.message,images:command.images?.map(({type,data,mimeType})=>({type,data,mimeType}))??[],clientTurnId:command.clientTurnId,...command.type==="prompt"?{streamingBehavior:command.streamingBehavior,thinkingLevel:command.thinkingLevel,sessionTitlePrompt:command.sessionTitlePrompt,expandPromptTemplates:command.expandPromptTemplates??!0,unknownCommandAsText:command.unknownCommandAsText??!1}:{}};return createHash2("sha256").update(JSON.stringify(payload)).digest("hex")}function answeredUiRequestId(frame){return typeof frame.uiRequestId=="string"?frame.uiRequestId:typeof frame.id=="string"?frame.id:void 0}function settledQuestionStatus(answers,comment){return comment?.trim()?"comment-submitted":Object.keys(answers).length>0?"answered":void 0}function unansweredQuestionIds(questions,answers){return questions.filter(question=>!answers[question.id]?.selected.length&&!answers[question.id]?.text?.trim()).map(question=>question.id)}function settleExtensionUiResponse(response,targets){let requestId=answeredUiRequestId(response)??response.id,answer=requestId===response.id?response:{...response,id:requestId},question=targets.questions.respond(answer);return typeof question=="string"?refused(response.id,question):question||targets.dialogs.resolve(answer)?{...reply(response.id),success:!0}:targets.routed?refused(response.id,"unknown_extension_ui_request"):void 0}function reply(id){return{id,type:"response",command:"extension_ui_response"}}function refused(id,error){return{...reply(id),success:!1,error}}var sessionQuestionBridges=new WeakMap,ConnectionQuestionBridge=class{constructor(output){this.pending=new Map,this.resolved=new Set,this.output=output}pendingQuestions(){return[...this.pending.values()].map(({frame})=>({...frame,remainingMs:Math.max(0,frame.deadlineAtMs-Date.now())}))}ask(request,opts){let id=crypto.randomUUID(),askedAtMs=Date.now(),timeout=opts?.timeout??request.timeoutMs,frame={type:"extension_ui_request",method:"question",id,requestId:request.requestId,toolCallId:request.requestId,waitForAnswer:request.waitForAnswer,questions:request.questions,timeout,askedAtMs,deadlineAtMs:askedAtMs+timeout,remainingMs:timeout};return new Promise(resolve=>{let answers={},comment,timer,finished=!1,unanswered=()=>unansweredQuestionIds(request.questions,answers),finish=(status,resolvedBy)=>{if(finished)return;finished=!0,clearTimeout(timer),opts?.signal?.removeEventListener("abort",cancel),this.pending.delete(id),this.resolved.add(id);let result={status,...resolvedBy!==void 0?{resolvedBy}:{},answers,comment,unanswered:unanswered(),...status==="timed_out"?{autoResolvedAfterMs:Date.now()-askedAtMs}:{}};this.output({type:"question_resolved",id,requestId:frame.requestId,toolCallId:frame.toolCallId,outcome:status,...result.resolvedBy!==void 0?{resolvedBy:result.resolvedBy}:{},answers,comment,unanswered:result.unanswered,deadlineAtMs:frame.deadlineAtMs}),resolve(result)},cancel=()=>{let reason=opts?.signal?.reason;finish(reason==="timed_out"?"timed_out":"cancelled")},arm=()=>{clearTimeout(timer),frame.deadlineAtMs=Date.now()+timeout,timer=setTimeout(()=>finish("timed_out"),timeout)};this.pending.set(id,{frame,cancel,progress:draft=>{draft.answers!==void 0&&(answers=draft.answers),draft.comment!==void 0&&(comment=draft.comment),arm(),opts?.onProgress?.({answers,comment}),finished||this.output({type:"question_updated",id,deadlineAtMs:frame.deadlineAtMs,remainingMs:Math.max(0,frame.deadlineAtMs-Date.now())})},respond:response=>{if("cancelled"in response)return cancel(),!0;if(!("answers"in response))return!1;answers=response.answers,comment=response.comment;let status=settledQuestionStatus(answers,comment);return status===void 0?!1:(finish(status,"rpc_connection"),!0)}}),arm(),this.output(frame),opts?.signal?.addEventListener("abort",cancel,{once:!0}),opts?.signal?.aborted&&cancel()})}respond(response){let pending=this.pending.get(response.id);return pending?pending.respond(response)||"question_incomplete":this.resolved.has(response.id)?"question_already_resolved":!1}progress(draft){this.pending.get(draft.id)?.progress(draft)}cancelAll(){for(let pending of this.pending.values())pending.cancel()}};async function degradeQuestion(ui,request,opts){let answers={},other="Other (type an answer)";for(let question of request.questions){let selected=await ui.select(question.question,[...question.options.map(option=>option.label),other],opts);if(selected===other){let text=await ui.input(question.question,void 0,opts);text?.trim()&&(answers[question.id]={selected:[],text})}else selected!==void 0&&(answers[question.id]={selected:[selected]})}let comment=await ui.input("Anything else? (optional)",void 0,opts),unanswered=request.questions.filter(q=>!answers[q.id]).map(q=>q.id);return{status:comment?.trim()?"comment-submitted":unanswered.length?"cancelled":"answered",...comment?.trim()||unanswered.length===0?{resolvedBy:"rpc_connection"}:{},answers,comment,unanswered}}async function availableModelsData(session){return{models:(await session.modelRegistry.modelRuntime.getAvailable()).map(model=>({...model,supportedThinkingLevels:getSupportedThinkingLevels2(model),supportsAssistantPrefill:modelSupportsAssistantPrefill(model,{thinkingEnabled:session.thinkingLevel!=="off"})}))}}function unsupportedThinkingLevel(level){return`Thinking level ${String(level)} is not supported by the active model.`}async function interruptRunningTurn(session,requestedTurnId,stop){if(!session.isStreaming&&session.retryAttempt===0)return{interrupted:!1};let turnId=String(session.externalAdmission.turnEpoch);return typeof requestedTurnId=="string"&&requestedTurnId!==turnId?{interrupted:!1,turnId}:(await stop(),{interrupted:!0,turnId})}import{existsSync}from"node:fs";function buildRpcSessionState(session,lastAbortSource){let cwd=session.sessionManager.getCwd();if(!session.agentDir)throw new Error("RPC session invariant violated: agentDir is required");let projectTrusted=new ProjectTrustStore(session.agentDir).get(cwd)===!0,lastProviderDiagnostic=sanitizeProviderDiagnostic(session.agent.state.providerDiagnostic);return{pendingQuestions:sessionQuestionBridges.get(session)?.pendingQuestions(),model:session.model,pendingModelSwitch:session.pendingModelSwitch?{provider:session.pendingModelSwitch.model.provider,id:session.pendingModelSwitch.model.id}:null,thinkingLevel:session.thinkingLevel,...session.thinkingSelection?{thinkingSelection:session.thinkingSelection}:{},...lastAbortSource?{lastAbortSource}:{},...lastProviderDiagnostic?{lastProviderDiagnostic}:{},serviceTier:session.effectiveServiceTier,fastMode:session.isFastModeActive(),isStreaming:session.isStreaming,isCompacting:session.isCompacting,retryAttempt:session.retryAttempt,isBashRunning:session.isBashRunning,steeringMode:session.steeringMode,followUpMode:session.followUpMode,sessionFile:session.sessionFile,sessionId:session.sessionId,sessionName:session.sessionName,cwd,projectTrusted,...session.sessionFile&&!existsSync(session.sessionFile)&&session.sessionManager.getEntries().some(entry=>entry.type!=="model_change"&&entry.type!=="model_change_rejected"&&entry.type!=="thinking_level_change")?{entries:session.sessionManager.getEntries()}:{},steering:typeof session.getSteeringMessages=="function"?[...session.getSteeringMessages()]:[],followUp:typeof session.getFollowUpMessages=="function"?[...session.getFollowUpMessages()]:[],ordered:typeof session.getQueuedInputs=="function"?session.getQueuedInputs().map(clientFacingIdentity):[],autoCompactionEnabled:session.autoCompactionEnabled,messageCount:session.messages.length,pendingMessageCount:session.pendingMessageCount,usageTotals:session.sessionManager.getUsageTotals(),contextUsage:typeof session.getContextUsage=="function"?session.getContextUsage():void 0,favoriteModels:session.favoriteModels?.map(entry=>({...entry}))??[],scopedModels:session.scopedModels?.map(entry=>({...entry}))??[]}}export{supportsXhigh2 as supportsXhigh,supportsMax2 as supportsMax,getSupportedThinkingLevels2 as getSupportedThinkingLevels,clampThinkingSelection,getThinkingClampNotice,formatThinkingClampWarning,classifyReasoningCapability,createFsWatchEventSource,rpcCommandPayloadError,sessionContextError,sessionKindError,sessionAutoTitleError,sessionPromptSurfaceError,sessionBrowserEngineError,sessionRetryFallbackError,rpcCommandShapeError,rpcMessageLengthError,RPC_EFFECT_ENTRY,EFFECT_LEDGER_CAPABILITY,rpcEffectRecordSchema,isTerminalEffectState,EffectIdConflict,effectFingerprint,CLIENT_ADMISSION_ENTRY,HOST_MINTED_ID_PREFIX,clientFacingIdentity,DURABLE_CLIENT_MESSAGE_ID_CAPABILITY,clientAdmissionRecordSchema,admissionSnapshot,ClientMessageIdConflict,clientInputFingerprint,answeredUiRequestId,settledQuestionStatus,unansweredQuestionIds,settleExtensionUiResponse,sessionQuestionBridges,ConnectionQuestionBridge,degradeQuestion,availableModelsData,unsupportedThinkingLevel,interruptRunningTurn,WakeScheduler,watchInbox,onProcessContinue,buildRpcSessionState};
|
|
55
|
+
`;function createRecursiveWatchWorker(){return new Worker(RECURSIVE_WATCH_WORKER_SOURCE,{eval:!0})}var recursiveWorkerStates=new Map;function isRecursiveWatchMessage(message){return typeof message!="object"||message===null||!("kind"in message)||!("id"in message)||typeof message.id!="number"?!1:message.kind==="error"?"message"in message&&typeof message.message=="string":message.kind==="event"&&"eventType"in message&&typeof message.eventType=="string"&&"filename"in message&&(message.filename===null||typeof message.filename=="string")}var WORKER_OFFLOADED_WATCH_PLATFORMS=new Set(["linux","darwin"]);function createFsWatchEventSource(onError=()=>{},options={}){let createWorker=options.createRecursiveWorker??createRecursiveWatchWorker,state=recursiveWorkerStates.get(createWorker);state||(state={subscriptions:new Map,nextSubscriptionId:1},recursiveWorkerStates.set(createWorker,state));let recursiveSubscriptions=state.subscriptions,ensureRecursiveWorker=()=>{if(state.worker)return state.worker;let worker=createWorker();return worker.on("message",message=>{if(!isRecursiveWatchMessage(message))return;let subscription=recursiveSubscriptions.get(message.id);if(subscription){if(message.kind==="event"){subscription.listener(message.eventType,message.filename);return}subscription.onError(new Error(message.message),subscription.path)}}),worker.on("error",error=>{for(let subscription of recursiveSubscriptions.values())subscription.onError(error,subscription.path);if(state.worker!==worker||(state.worker=void 0,recursiveSubscriptions.size===0))return;let replacement=ensureRecursiveWorker();for(let[id,subscription]of recursiveSubscriptions)replacement.postMessage({kind:"watch",id,path:subscription.path,recursive:subscription.recursive,active:subscription.active})}),state.worker=worker,worker};return(path,listener,watchOptions)=>{if(WORKER_OFFLOADED_WATCH_PLATFORMS.has(options.platform??process.platform)){let id=state.nextSubscriptionId++,recursive=watchOptions?.recursive??!1,active=new Int32Array(new SharedArrayBuffer(4));Atomics.store(active,0,1),ensureRecursiveWorker().postMessage({kind:"watch",id,path,recursive,active}),recursiveSubscriptions.set(id,{path,listener,recursive,active,onError});let closing;return()=>{if(!recursiveSubscriptions.delete(id))return closing;Atomics.store(active,0,0);let worker=state.worker;if(!worker)return closing;if(worker.postMessage({kind:"unwatch",id}),!(recursiveSubscriptions.size>0))return state.worker=void 0,closing=worker.terminate().then(()=>{},error=>{throw onError(error,path),error}),closing}}let watcher=watchWithErrorHandler(path,listener,()=>onError(new Error(`fs.watch failed for ${path}`),path),{recursive:watchOptions?.recursive??!1});return()=>watcher?.close()}}var REASON_PRIORITY=["submission","draft_cleared","idle","continue","command","emitted","inbox"],EMPTY_RESULT={admitted:[]},WakeScheduler=class{constructor(pass,onError){this.running=!1,this.disposed=!1,this.pass=pass,this.onError=onError}request(reason,deliveryIds){if(this.disposed)return Promise.resolve(EMPTY_RESULT);this.next??={reasons:new Set,deliveryIds:new Set,waiters:[]};let batch=this.next;batch.reasons.add(reason);for(let id of deliveryIds??[])batch.deliveryIds.add(id);let settled=new Promise(resolve=>batch.waiters.push(resolve));return this.running||this.run(),settled}dispose(){this.disposed=!0;let batch=this.next;this.next=void 0;for(let waiter of batch?.waiters??[])waiter(EMPTY_RESULT)}async run(){this.running=!0;try{for(let batch=this.next;batch!==void 0&&!this.disposed;batch=this.next){this.next=void 0;let result=EMPTY_RESULT;try{result=await this.pass(wakeEvent(batch))}catch(error){this.onError(error)}for(let waiter of batch.waiters)waiter(result)}}finally{this.running=!1}}};function wakeEvent(batch){let reasons=REASON_PRIORITY.filter(reason2=>batch.reasons.has(reason2)),reason=reasons[0]??"inbox",ids=[...batch.deliveryIds];return{type:"session_control_wake",reason,reasons,...ids.length>0?{delivery_ids:ids}:{}}}var INBOX_ENGINE_ENTRY_PREFIX=".senpi-",INBOX_ARM_ATTEMPTS=25,INBOX_ARM_ATTEMPT_MS=200;async function watchInbox(inboxDir,onChange,onError){await mkdir(inboxDir,{recursive:!0,mode:448});let sentinel=`${INBOX_ENGINE_ENTRY_PREFIX}armed-${randomUUID()}`,confirmation=Promise.withResolvers(),stopped=!1,unsubscribe=createFsWatchEventSource(error=>onError(error))(inboxDir,(_eventType,filename)=>{filename===sentinel?confirmation.resolve(!0):filename?.startsWith(INBOX_ENGINE_ENTRY_PREFIX)||onChange()},{recursive:!1}),arming=confirmArm(join(inboxDir,sentinel),confirmation.promise,()=>stopped).then(confirmed=>{!confirmed&&!stopped&&onError(new Error(`inbox watch on ${inboxDir} was not confirmed`))},error=>{stopped||onError(error)});return{armed:Promise.race([confirmation.promise.then(confirmed=>confirmed?void 0:arming),arming]),stop:()=>{stopped=!0,confirmation.resolve(!1),Promise.resolve(unsubscribe()).catch(onError)}}}async function confirmArm(sentinelPath,confirmed,stopped){let seen=!1;try{for(let attempt=0;attempt<INBOX_ARM_ATTEMPTS&&!seen&&!stopped();attempt++)await writeFile(sentinelPath,String(attempt),{mode:384}),seen=await Promise.race([confirmed,delay(INBOX_ARM_ATTEMPT_MS,!1)])}finally{await rm(sentinelPath,{force:!0})}return seen}function onProcessContinue(listener){let handler=()=>{setImmediate(listener)};return process.on("SIGCONT",handler),()=>{process.removeListener("SIGCONT",handler)}}import{createHash}from"node:crypto";var RPC_EFFECT_ENTRY="rpc_effect",EFFECT_LEDGER_CAPABILITY="effect_ledger",actorSchema=external_exports.object({connectionId:external_exports.string()}),effectOutcomeSchema=external_exports.object({kind:external_exports.enum(["completed","aborted","error","deadline","interrupted_by_reopen","dropped_by_replace","unknown_model","provider_unavailable","unsupported_thinking_level","superseded","context_budget","cleared","cleared_by_abort","already_delivered","not_found","refused"]),reason:external_exports.string().optional(),detail:external_exports.string().optional(),action:external_exports.string().optional(),abortSource:external_exports.string().optional(),abortedBy:actorSchema.optional()}),rpcEffectRecordSchema=external_exports.object({effectId:external_exports.string().min(1).max(256),kind:external_exports.enum(["abort","unload","set_model","set_thinking_level","dequeue","edit_queued"]),state:external_exports.enum(["accepted","applied","done","failed"]),disposition:external_exports.string().optional(),outcome:effectOutcomeSchema.optional(),by:actorSchema,acceptedAt:external_exports.string(),updatedAt:external_exports.string(),durableSessionId:external_exports.string(),fingerprint:external_exports.string()});function isTerminalEffectState(state){return state==="done"||state==="failed"}var EffectIdConflict=class extends Error{constructor(effectId){super(`effect_id_conflict: effectId ${effectId} was already used for a different request`),this.code="effect_id_conflict",this.reason="effect_id_conflict: this effectId was already used for a different request",this.action="send the request again with a new effectId",this.name="EffectIdConflict",this.effectId=effectId}},SEMANTIC_FIELDS={abort:["awaitIdle","clearQueue","graceMs"],set_model:["provider","modelId","thinkingLevel"],set_thinking_level:["level","scope"],unload:["interrupt","clearQueue","children","force"],dequeue:["queuedId"],edit_queued:["queuedId","text"]};function effectFingerprint(command,payload){let semantic={kind:command};for(let field of SEMANTIC_FIELDS[command]){let value=Reflect.get(payload,field);value!==void 0&&(semantic[field]=value)}return createHash("sha256").update(JSON.stringify(semantic)).digest("hex")}import{createHash as createHash2}from"node:crypto";var CLIENT_ADMISSION_ENTRY="rpc_client_message_admission",HOST_MINTED_ID_PREFIX="host:";function isHostMintedId(id){return id?.startsWith(HOST_MINTED_ID_PREFIX)===!0}function clientFacingIdentity(value){if(!isHostMintedId(value.clientMessageId))return value;let{clientMessageId:_minted,...rest}=value;return rest}var DURABLE_CLIENT_MESSAGE_ID_CAPABILITY="durable_client_message_id",admissionIdentitySchema=clientMessageIdentitySchema.extend({clientMessageId:external_exports.string().min(1).max(256),durableSessionId:external_exports.string(),fingerprint:external_exports.string(),disposition:external_exports.enum(["queued","started","handled"]),hostMinted:external_exports.literal(!0).optional()}),preparedInputSchema=clientMessageIdentitySchema.extend({text:external_exports.string(),images:external_exports.array(external_exports.object({type:external_exports.literal("image"),data:external_exports.string(),mimeType:external_exports.string()})).optional(),mode:external_exports.enum(["steer","followUp"]),enqueueOrder:external_exports.number()}),clientAdmissionRecordSchema=external_exports.discriminatedUnion("state",[admissionIdentitySchema.extend({state:external_exports.literal("queued"),prepared:preparedInputSchema}),admissionIdentitySchema.extend({state:external_exports.literal("running"),prepared:external_exports.undefined().optional()}),admissionIdentitySchema.extend({state:external_exports.literal("completed"),prepared:external_exports.undefined().optional(),outcome:effectOutcomeSchema.optional()})]);function admissionSnapshot(record){let{fingerprint:_fingerprint,prepared:_prepared,...snapshot}=record;return snapshot}var ClientMessageIdConflict=class extends Error{constructor(clientMessageId){super(`client_message_id_conflict: ${clientMessageId}`),this.code="client_message_id_conflict",this.name="ClientMessageIdConflict",this.clientMessageId=clientMessageId}};function clientInputFingerprint(command){let payload={type:command.type,message:command.message,images:command.images?.map(({type,data,mimeType})=>({type,data,mimeType}))??[],clientTurnId:command.clientTurnId,...command.type==="prompt"?{streamingBehavior:command.streamingBehavior,thinkingLevel:command.thinkingLevel,sessionTitlePrompt:command.sessionTitlePrompt,expandPromptTemplates:command.expandPromptTemplates??!0,unknownCommandAsText:command.unknownCommandAsText??!1}:{}};return createHash2("sha256").update(JSON.stringify(payload)).digest("hex")}function answeredUiRequestId(frame){return typeof frame.uiRequestId=="string"?frame.uiRequestId:typeof frame.id=="string"?frame.id:void 0}function settledQuestionStatus(answers,comment){return comment?.trim()?"comment-submitted":Object.keys(answers).length>0?"answered":void 0}function unansweredQuestionIds(questions,answers){return questions.filter(question=>!answers[question.id]?.selected.length&&!answers[question.id]?.text?.trim()).map(question=>question.id)}function settleExtensionUiResponse(response,targets){let requestId=answeredUiRequestId(response)??response.id,answer=requestId===response.id?response:{...response,id:requestId},question=targets.questions.respond(answer);return typeof question=="string"?refused(response.id,question):question||targets.dialogs.resolve(answer)?{...reply(response.id),success:!0}:targets.routed?refused(response.id,"unknown_extension_ui_request"):void 0}function reply(id){return{id,type:"response",command:"extension_ui_response"}}function refused(id,error){return{...reply(id),success:!1,error}}var sessionQuestionBridges=new WeakMap,ConnectionQuestionBridge=class{constructor(output){this.pending=new Map,this.resolved=new Set,this.output=output}pendingQuestions(){return[...this.pending.values()].map(({frame})=>({...frame,remainingMs:Math.max(0,frame.deadlineAtMs-Date.now())}))}ask(request,opts){let id=crypto.randomUUID(),askedAtMs=Date.now(),timeout=opts?.timeout??request.timeoutMs,frame={type:"extension_ui_request",method:"question",id,requestId:request.requestId,toolCallId:request.requestId,waitForAnswer:request.waitForAnswer,questions:request.questions,timeout,askedAtMs,deadlineAtMs:askedAtMs+timeout,remainingMs:timeout};return new Promise(resolve=>{let answers={},comment,timer,finished=!1,unanswered=()=>unansweredQuestionIds(request.questions,answers),finish=(status,resolvedBy)=>{if(finished)return;finished=!0,clearTimeout(timer),opts?.signal?.removeEventListener("abort",cancel),this.pending.delete(id),this.resolved.add(id);let result={status,...resolvedBy!==void 0?{resolvedBy}:{},answers,comment,unanswered:unanswered(),...status==="timed_out"?{autoResolvedAfterMs:Date.now()-askedAtMs}:{}};this.output({type:"question_resolved",id,requestId:frame.requestId,toolCallId:frame.toolCallId,outcome:status,...result.resolvedBy!==void 0?{resolvedBy:result.resolvedBy}:{},answers,comment,unanswered:result.unanswered,deadlineAtMs:frame.deadlineAtMs}),resolve(result)},cancel=()=>{let reason=opts?.signal?.reason;finish(reason==="timed_out"?"timed_out":"cancelled")},arm=()=>{clearTimeout(timer),frame.deadlineAtMs=Date.now()+timeout,timer=setTimeout(()=>finish("timed_out"),timeout)};this.pending.set(id,{frame,cancel,progress:draft=>{draft.answers!==void 0&&(answers=draft.answers),draft.comment!==void 0&&(comment=draft.comment),arm(),opts?.onProgress?.({answers,comment}),finished||this.output({type:"question_updated",id,deadlineAtMs:frame.deadlineAtMs,remainingMs:Math.max(0,frame.deadlineAtMs-Date.now())})},respond:response=>{if("cancelled"in response)return cancel(),!0;if(!("answers"in response))return!1;answers=response.answers,comment=response.comment;let status=settledQuestionStatus(answers,comment);return status===void 0?!1:(finish(status,"rpc_connection"),!0)}}),arm(),this.output(frame),opts?.signal?.addEventListener("abort",cancel,{once:!0}),opts?.signal?.aborted&&cancel()})}respond(response){let pending=this.pending.get(response.id);return pending?pending.respond(response)||"question_incomplete":this.resolved.has(response.id)?"question_already_resolved":!1}progress(draft){this.pending.get(draft.id)?.progress(draft)}cancelAll(){for(let pending of this.pending.values())pending.cancel()}};async function degradeQuestion(ui,request,opts){let answers={},other="Other (type an answer)";for(let question of request.questions){let selected=await ui.select(question.question,[...question.options.map(option=>option.label),other],opts);if(selected===other){let text=await ui.input(question.question,void 0,opts);text?.trim()&&(answers[question.id]={selected:[],text})}else selected!==void 0&&(answers[question.id]={selected:[selected]})}let comment=await ui.input("Anything else? (optional)",void 0,opts),unanswered=request.questions.filter(q=>!answers[q.id]).map(q=>q.id);return{status:comment?.trim()?"comment-submitted":unanswered.length?"cancelled":"answered",...comment?.trim()||unanswered.length===0?{resolvedBy:"rpc_connection"}:{},answers,comment,unanswered}}async function availableModelsData(session){return{models:(await session.modelRegistry.modelRuntime.getAvailable()).map(model=>({...model,supportedThinkingLevels:getSupportedThinkingLevels2(model),supportsAssistantPrefill:modelSupportsAssistantPrefill(model,{thinkingEnabled:session.thinkingLevel!=="off"})}))}}function unsupportedThinkingLevel(level){return`Thinking level ${String(level)} is not supported by the active model.`}async function interruptRunningTurn(session,requestedTurnId,stop){if(!session.isStreaming&&session.retryAttempt===0)return{interrupted:!1};let turnId=String(session.externalAdmission.turnEpoch);return typeof requestedTurnId=="string"&&requestedTurnId!==turnId?{interrupted:!1,turnId}:(await stop(),{interrupted:!0,turnId})}import{existsSync}from"node:fs";function buildRpcSessionState(session,lastAbortSource){let cwd=session.sessionManager.getCwd();if(!session.agentDir)throw new Error("RPC session invariant violated: agentDir is required");let projectTrusted=new ProjectTrustStore(session.agentDir).get(cwd)===!0,lastProviderDiagnostic=sanitizeProviderDiagnostic(session.agent.state.providerDiagnostic);return{pendingQuestions:sessionQuestionBridges.get(session)?.pendingQuestions(),model:session.model,pendingModelSwitch:session.pendingModelSwitch?{provider:session.pendingModelSwitch.model.provider,id:session.pendingModelSwitch.model.id}:null,thinkingLevel:session.thinkingLevel,...session.thinkingSelection?{thinkingSelection:session.thinkingSelection}:{},...lastAbortSource?{lastAbortSource}:{},...lastProviderDiagnostic?{lastProviderDiagnostic}:{},serviceTier:session.effectiveServiceTier,fastMode:session.isFastModeActive(),isStreaming:session.isStreaming,isCompacting:session.isCompacting,retryAttempt:session.retryAttempt,isBashRunning:session.isBashRunning,steeringMode:session.steeringMode,followUpMode:session.followUpMode,sessionFile:session.sessionFile,sessionId:session.sessionId,sessionName:session.sessionName,cwd,projectTrusted,...session.sessionFile&&!existsSync(session.sessionFile)&&session.sessionManager.getEntries().some(entry=>entry.type!=="model_change"&&entry.type!=="model_change_rejected"&&entry.type!=="thinking_level_change")?{entries:session.sessionManager.getEntries()}:{},steering:typeof session.getSteeringMessages=="function"?[...session.getSteeringMessages()]:[],followUp:typeof session.getFollowUpMessages=="function"?[...session.getFollowUpMessages()]:[],ordered:typeof session.getQueuedInputs=="function"?session.getQueuedInputs().map(clientFacingIdentity):[],autoCompactionEnabled:session.autoCompactionEnabled,messageCount:session.messages.length,pendingMessageCount:session.pendingMessageCount,usageTotals:session.sessionManager.getUsageTotals(),contextUsage:typeof session.getContextUsage=="function"?session.getContextUsage():void 0,favoriteModels:session.favoriteModels?.map(entry=>({...entry}))??[],scopedModels:session.scopedModels?.map(entry=>({...entry}))??[]}}export{supportsXhigh2 as supportsXhigh,supportsMax2 as supportsMax,getSupportedThinkingLevels2 as getSupportedThinkingLevels,clampThinkingSelection,getThinkingClampNotice,formatThinkingClampWarning,classifyReasoningCapability,createFsWatchEventSource,rpcCommandPayloadError,sessionContextError,sessionKindError,sessionAutoTitleError,sessionPromptSurfaceError,sessionBrowserEngineError,sessionRetryFallbackError,rpcCommandShapeError,rpcMessageLengthError,RPC_EFFECT_ENTRY,EFFECT_LEDGER_CAPABILITY,rpcEffectRecordSchema,isTerminalEffectState,EffectIdConflict,effectFingerprint,CLIENT_ADMISSION_ENTRY,HOST_MINTED_ID_PREFIX,clientFacingIdentity,DURABLE_CLIENT_MESSAGE_ID_CAPABILITY,clientAdmissionRecordSchema,admissionSnapshot,ClientMessageIdConflict,clientInputFingerprint,answeredUiRequestId,settledQuestionStatus,unansweredQuestionIds,settleExtensionUiResponse,sessionQuestionBridges,ConnectionQuestionBridge,degradeQuestion,availableModelsData,unsupportedThinkingLevel,interruptRunningTurn,WakeScheduler,watchInbox,onProcessContinue,buildRpcSessionState};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{CONFIG_COMMAND_ARGV,HOST_COMMAND_ARGV,SCHEDULE_COMMAND_ARGV,isPackageCommandArgv}from"./chunk-
|
|
2
|
+
import{CONFIG_COMMAND_ARGV,HOST_COMMAND_ARGV,SCHEDULE_COMMAND_ARGV,isPackageCommandArgv}from"./chunk-X5VCHHXR.js";import{homedir}from"node:os";try{process.cwd()}catch{let fallback=homedir();process.chdir(fallback),console.error(`the current working directory no longer exists; continuing from ${fallback}`)}import*as nodeModule from"node:module";async function enableStartupCompileCache(){let enable=nodeModule.enableCompileCache;if(typeof enable!="function")return;let args=process.argv.slice(2);if(!isPackageCommandArgv(args)&&args[0]!==CONFIG_COMMAND_ARGV&&(args.includes("--version")||args.includes("-v")))return;let scheduleWatch=!1;if(args[0]===SCHEDULE_COMMAND_ARGV&&args[1]==="run")for(let index=2;index<args.length;index++){let arg=args[index];arg==="--watch"?scheduleWatch=!0:["--exec","--poll-seconds","--timeout-seconds","--concurrency"].includes(arg??"")&&index++}if(!(isPackageCommandArgv(args)||args[0]===HOST_COMMAND_ARGV||args[0]===SCHEDULE_COMMAND_ARGV&&!scheduleWatch)){if(!scheduleWatch&&args.some(arg=>["--help","-h","--export","--list-models","--list-tips"].includes(arg)))try{let{parseArgs}=await import("./args-DSBWXO5Z.js"),parsed=parseArgs(args);if(parsed.version||parsed.export||parsed.listModels!==void 0||parsed.listTips||parsed.help&&!(parsed.mode==="rpc"&&parsed.multiSession))return}catch{}try{let result=enable();result.directory!==void 0&&process.env.NODE_COMPILE_CACHE===void 0&&(process.env.NODE_COMPILE_CACHE=result.directory)}catch{}}}export{enableStartupCompileCache};
|