@gobing-ai/spur 0.3.92 → 0.3.93
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/.claude-plugin/marketplace.json +1 -1
- package/config/pipeline-budgets.json +0 -7
- package/config/plugin-scripts.json +10 -0
- package/config/templates/AGENTS.md +4 -0
- package/config/templates/docs/02_ROADMAP.md +2 -0
- package/config/templates/docs/03_ARCHITECTURE.md +3 -1
- package/config/templates/docs/04_DESIGN.md +2 -0
- package/config/templates/docs/99_PROJECT_CONSTITUTION.md +10 -2
- package/config/workflow-candidates.json +72 -1
- package/config/workflows/feature-verification.yaml +1 -0
- package/config/workflows/history-anatomy.yaml +2 -0
- package/config/workflows/idea-pipeline.yaml +67 -18
- package/config/workflows/pr-review.yaml +8 -0
- package/config/workflows/task-pipeline.yaml +180 -39
- package/config/workflows/wayfinder-resolution.yaml +5 -0
- package/config/workflows/wrapup-pipeline.yaml +55 -14
- package/package.json +9 -9
- package/plugins/sp/README.md +7 -2
- package/plugins/sp/commands/dev-run.md +2 -2
- package/plugins/sp/commands/dev-runall.md +2 -2
- package/plugins/sp/lib/idea-handoff.generated.mjs +8 -4
- package/plugins/sp/lib/inline-run.generated.d.mts +1 -0
- package/plugins/sp/lib/inline-run.generated.mjs +24 -16
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/inline-pipeline-parity-check.ts +1 -1
- package/plugins/sp/scripts/inline-run-setup.mjs +75 -3
- package/plugins/sp/scripts/inline-run-setup.ts +133 -3
- package/plugins/sp/scripts/quality-gate.mjs +248 -6
- package/plugins/sp/scripts/quality-gate.ts +410 -9
- package/plugins/sp/scripts/residual-scan.mjs +12 -4
- package/plugins/sp/scripts/residual-scan.ts +32 -6
- package/plugins/sp/scripts/task-diffstat.mjs +156 -0
- package/plugins/sp/scripts/task-diffstat.ts +229 -0
- package/plugins/sp/scripts/wrapup-drift-probe.mjs +181 -0
- package/plugins/sp/scripts/wrapup-drift-probe.ts +258 -0
- package/plugins/sp/scripts/wrapup-steps.mjs +60 -1
- package/plugins/sp/scripts/wrapup-steps.ts +89 -4
- package/plugins/sp/skills/brainstorm/SKILL.md +2 -0
- package/plugins/sp/skills/brainstorm/references/workflows.md +17 -2
- package/plugins/sp/skills/code-verification/SKILL.md +2 -2
- package/plugins/sp/skills/code-verification/references/secu-review.md +3 -2
- package/plugins/sp/skills/spur-check/SKILL.md +112 -0
- package/plugins/sp/skills/spur-dev/SKILL.md +2 -1
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +14 -2
- package/plugins/sp/skills/spur-dev/references/document-authoring.md +85 -0
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +1 -1
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +8 -0
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +3 -2
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +19 -1
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +5 -5
- package/plugins/sp/skills/spur-dev/templates/design.md +31 -0
- package/plugins/sp/skills/spur-dev/templates/plan.md +32 -0
- package/plugins/sp/skills/spur-doctor/SKILL.md +60 -14
- package/schemas/state-machine-workflow.schema.json +4 -0
- package/spur.js +1117 -472
- package/config/workflows/decision-routing-example.yaml +0 -134
|
@@ -246,7 +246,7 @@ Instead, \`yield\` should either be called with a value, or not be called at all
|
|
|
246
246
|
if (condition) { yield value; }`)};var init_validate=__esm(()=>{init_uint_array()});import{Buffer as Buffer3}from"node:buffer";import{StringDecoder as StringDecoder2}from"node:string_decoder";var getEncodingTransformGenerator=(binary,encoding,skipped)=>{if(skipped)return;if(binary)return{transform:encodingUint8ArrayGenerator.bind(void 0,new TextEncoder)};let stringDecoder=new StringDecoder2(encoding);return{transform:encodingStringGenerator.bind(void 0,stringDecoder),final:encodingStringFinal.bind(void 0,stringDecoder)}},encodingUint8ArrayGenerator=function*(textEncoder3,chunk){if(Buffer3.isBuffer(chunk))yield bufferToUint8Array(chunk);else if(typeof chunk==="string")yield textEncoder3.encode(chunk);else yield chunk},encodingStringGenerator=function*(stringDecoder,chunk){yield isUint8Array(chunk)?stringDecoder.write(chunk):chunk},encodingStringFinal=function*(stringDecoder){let lastChunk=stringDecoder.end();if(lastChunk!=="")yield lastChunk};var init_encoding_transform=__esm(()=>{init_uint_array()});import{callbackify}from"node:util";var pushChunks,transformChunk=async function*(chunk,generators,index){if(index===generators.length){yield chunk;return}let{transform:transform2=identityGenerator}=generators[index];for await(let transformedChunk of transform2(chunk))yield*transformChunk(transformedChunk,generators,index+1)},finalChunks=async function*(generators){for(let[index,{final}]of Object.entries(generators))yield*generatorFinalChunks(final,Number(index),generators)},generatorFinalChunks=async function*(final,index,generators){if(final===void 0)return;for await(let finalChunk of final())yield*transformChunk(finalChunk,generators,index+1)},destroyTransform,identityGenerator=function*(chunk){yield chunk};var init_run_async=__esm(()=>{pushChunks=callbackify(async(getChunks,state,getChunksArguments,transformStream)=>{state.currentIterable=getChunks(...getChunksArguments);try{for await(let chunk of state.currentIterable)transformStream.push(chunk)}finally{delete state.currentIterable}}),destroyTransform=callbackify(async({currentIterable},error51)=>{if(currentIterable!==void 0){await(error51?currentIterable.throw(error51):currentIterable.return());return}if(error51)throw error51})});var pushChunksSync=(getChunksSync,getChunksArguments,transformStream,done)=>{try{for(let chunk of getChunksSync(...getChunksArguments))transformStream.push(chunk);done()}catch(error51){done(error51)}},runTransformSync=(generators,chunks)=>[...chunks.flatMap((chunk)=>[...transformChunkSync(chunk,generators,0)]),...finalChunksSync(generators)],transformChunkSync=function*(chunk,generators,index){if(index===generators.length){yield chunk;return}let{transform:transform2=identityGenerator2}=generators[index];for(let transformedChunk of transform2(chunk))yield*transformChunkSync(transformedChunk,generators,index+1)},finalChunksSync=function*(generators){for(let[index,{final}]of Object.entries(generators))yield*generatorFinalChunksSync(final,Number(index),generators)},generatorFinalChunksSync=function*(final,index,generators){if(final===void 0)return;for(let finalChunk of final())yield*transformChunkSync(finalChunk,generators,index+1)},identityGenerator2=function*(chunk){yield chunk};import{Transform,getDefaultHighWaterMark}from"node:stream";var generatorToStream=({value,value:{transform:transform2,final,writableObjectMode,readableObjectMode},optionName},{encoding})=>{let state={},generators=addInternalGenerators(value,encoding,optionName),transformAsync=isAsyncGenerator(transform2),finalAsync=isAsyncGenerator(final),transformMethod=transformAsync?pushChunks.bind(void 0,transformChunk,state):pushChunksSync.bind(void 0,transformChunkSync),finalMethod=transformAsync||finalAsync?pushChunks.bind(void 0,finalChunks,state):pushChunksSync.bind(void 0,finalChunksSync),destroyMethod=transformAsync||finalAsync?destroyTransform.bind(void 0,state):void 0;return{stream:new Transform({writableObjectMode,writableHighWaterMark:getDefaultHighWaterMark(writableObjectMode),readableObjectMode,readableHighWaterMark:getDefaultHighWaterMark(readableObjectMode),transform(chunk,encoding2,done){transformMethod([chunk,generators,0],this,done)},flush(done){finalMethod([generators],this,done)},destroy:destroyMethod})}},runGeneratorsSync=(chunks,stdioItems,encoding,isInput)=>{let generators=stdioItems.filter(({type})=>type==="generator"),reversedGenerators=isInput?generators.reverse():generators;for(let{value,optionName}of reversedGenerators){let generators2=addInternalGenerators(value,encoding,optionName);chunks=runTransformSync(generators2,chunks)}return chunks},addInternalGenerators=({transform:transform2,final,binary,writableObjectMode,readableObjectMode,preserveNewlines},encoding,optionName)=>{let state={};return[{transform:getValidateTransformInput(writableObjectMode,optionName)},getEncodingTransformGenerator(binary,encoding,writableObjectMode),getSplitLinesGenerator(binary,preserveNewlines,writableObjectMode,state),{transform:transform2,final},{transform:getValidateTransformReturn(readableObjectMode,optionName)},getAppendNewlineGenerator({binary,preserveNewlines,readableObjectMode,state})].filter(Boolean)};var init_generator=__esm(()=>{init_type();init_split();init_validate();init_encoding_transform();init_run_async()});var addInputOptionsSync=(fileDescriptors,options)=>{for(let fdNumber of getInputFdNumbers(fileDescriptors))addInputOptionSync(fileDescriptors,fdNumber,options)},getInputFdNumbers=(fileDescriptors)=>new Set(Object.entries(fileDescriptors).filter(([,{direction}])=>direction==="input").map(([fdNumber])=>Number(fdNumber))),addInputOptionSync=(fileDescriptors,fdNumber,options)=>{let{stdioItems}=fileDescriptors[fdNumber],allStdioItems=stdioItems.filter(({contents})=>contents!==void 0);if(allStdioItems.length===0)return;if(fdNumber!==0){let[{type,optionName}]=allStdioItems;throw TypeError(`Only the \`stdin\` option, not \`${optionName}\`, can be ${TYPE_TO_MESSAGE[type]} with synchronous methods.`)}let transformedContents=allStdioItems.map(({contents})=>contents).map((contents)=>applySingleInputGeneratorsSync(contents,stdioItems));options.input=joinToUint8Array(transformedContents)},applySingleInputGeneratorsSync=(contents,stdioItems)=>{let newContents=runGeneratorsSync(contents,stdioItems,"utf8",!0);return validateSerializable(newContents),joinToUint8Array(newContents)},validateSerializable=(newContents)=>{let invalidItem=newContents.find((item)=>typeof item!=="string"&&!isUint8Array(item));if(invalidItem!==void 0)throw TypeError(`The \`stdin\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${invalidItem}.`)};var init_input_sync=__esm(()=>{init_generator();init_uint_array();init_type()});var shouldLogOutput=({stdioItems,encoding,verboseInfo,fdNumber})=>fdNumber!=="all"&&isFullVerbose(verboseInfo,fdNumber)&&!BINARY_ENCODINGS.has(encoding)&&fdUsesVerbose(fdNumber)&&(stdioItems.some(({type,value})=>type==="native"&&PIPED_STDIO_VALUES.has(value))||stdioItems.every(({type})=>TRANSFORM_TYPES.has(type))),fdUsesVerbose=(fdNumber)=>fdNumber===1||fdNumber===2,PIPED_STDIO_VALUES,logLines=async(linesIterable,stream,fdNumber,verboseInfo)=>{for await(let line of linesIterable)if(!isPipingStream(stream))logLine(line,fdNumber,verboseInfo)},logLinesSync=(linesArray,fdNumber,verboseInfo)=>{for(let line of linesArray)logLine(line,fdNumber,verboseInfo)},isPipingStream=(stream)=>stream._readableState.pipes.length>0,logLine=(line,fdNumber,verboseInfo)=>{let verboseMessage=serializeVerboseMessage(line);verboseLog({type:"output",verboseMessage,fdNumber,verboseInfo})};var init_output=__esm(()=>{init_encoding_option();init_type();init_log();init_values();PIPED_STDIO_VALUES=new Set(["pipe","overlapped"])});import{writeFileSync,appendFileSync}from"node:fs";var transformOutputSync=({fileDescriptors,syncResult:{output:output2},options,isMaxBuffer,verboseInfo})=>{if(output2===null)return{output:Array.from({length:3})};let state={},outputFiles=new Set([]);return{output:output2.map((result,fdNumber)=>transformOutputResultSync({result,fileDescriptors,fdNumber,state,outputFiles,isMaxBuffer,verboseInfo},options)),...state}},transformOutputResultSync=({result,fileDescriptors,fdNumber,state,outputFiles,isMaxBuffer,verboseInfo},{buffer,encoding,lines,stripFinalNewline:stripFinalNewline2,maxBuffer})=>{if(result===null)return;let truncatedResult=truncateMaxBufferSync(result,isMaxBuffer,maxBuffer),uint8ArrayResult=bufferToUint8Array(truncatedResult),{stdioItems,objectMode}=fileDescriptors[fdNumber],chunks=runOutputGeneratorsSync([uint8ArrayResult],stdioItems,encoding,state),{serializedResult,finalResult=serializedResult}=serializeChunks({chunks,objectMode,encoding,lines,stripFinalNewline:stripFinalNewline2,fdNumber});logOutputSync({serializedResult,fdNumber,state,verboseInfo,encoding,stdioItems,objectMode});let returnedResult=buffer[fdNumber]?finalResult:void 0;try{if(state.error===void 0)writeToFiles(serializedResult,stdioItems,outputFiles);return returnedResult}catch(error51){return state.error=error51,returnedResult}},runOutputGeneratorsSync=(chunks,stdioItems,encoding,state)=>{try{return runGeneratorsSync(chunks,stdioItems,encoding,!1)}catch(error51){return state.error=error51,chunks}},serializeChunks=({chunks,objectMode,encoding,lines,stripFinalNewline:stripFinalNewline2,fdNumber})=>{if(objectMode)return{serializedResult:chunks};if(encoding==="buffer")return{serializedResult:joinToUint8Array(chunks)};let serializedResult=joinToString(chunks,encoding);if(lines[fdNumber])return{serializedResult,finalResult:splitLinesSync(serializedResult,!stripFinalNewline2[fdNumber],objectMode)};return{serializedResult}},logOutputSync=({serializedResult,fdNumber,state,verboseInfo,encoding,stdioItems,objectMode})=>{if(!shouldLogOutput({stdioItems,encoding,verboseInfo,fdNumber}))return;let linesArray=splitLinesSync(serializedResult,!1,objectMode);try{logLinesSync(linesArray,fdNumber,verboseInfo)}catch(error51){state.error??=error51}},writeToFiles=(serializedResult,stdioItems,outputFiles)=>{for(let{path:path6,append}of stdioItems.filter(({type})=>FILE_TYPES.has(type))){let pathString=typeof path6==="string"?path6:path6.toString();if(append||outputFiles.has(pathString))appendFileSync(path6,serializedResult);else outputFiles.add(pathString),writeFileSync(path6,serializedResult)}};var init_output_sync=__esm(()=>{init_output();init_generator();init_split();init_uint_array();init_type();init_max_buffer()});var getAllSync=([,stdout,stderr],options)=>{if(!options.all)return;if(stdout===void 0)return stderr;if(stderr===void 0)return stdout;if(Array.isArray(stdout))return Array.isArray(stderr)?[...stdout,...stderr]:[...stdout,stripNewline(stderr,options,"all")];if(Array.isArray(stderr))return[stripNewline(stdout,options,"all"),...stderr];if(isUint8Array(stdout)&&isUint8Array(stderr))return concatUint8Arrays([stdout,stderr]);return`${stdout}${stderr}`};var init_all_sync=__esm(()=>{init_uint_array();init_strip_newline()});import{once as once4}from"node:events";var waitForExit=async(subprocess,context)=>{let[exitCode,signal]=await waitForExitOrError(subprocess);return context.isForcefullyTerminated??=!1,[exitCode,signal]},waitForExitOrError=async(subprocess)=>{let[spawnPayload,exitPayload]=await Promise.allSettled([once4(subprocess,"spawn"),once4(subprocess,"exit")]);if(spawnPayload.status==="rejected")return[];return exitPayload.status==="rejected"?waitForSubprocessExit(subprocess):exitPayload.value},waitForSubprocessExit=async(subprocess)=>{try{return await once4(subprocess,"exit")}catch{return waitForSubprocessExit(subprocess)}},waitForSuccessfulExit=async(exitPromise)=>{let[exitCode,signal]=await exitPromise;if(!isSubprocessErrorExit(exitCode,signal)&&isFailedExit(exitCode,signal))throw new DiscardedError;return[exitCode,signal]},isSubprocessErrorExit=(exitCode,signal)=>exitCode===void 0&&signal===void 0,isFailedExit=(exitCode,signal)=>exitCode!==0||signal!==null;var init_exit_async=__esm(()=>{init_final_error()});var getExitResultSync=({error:error51,status:exitCode,signal,output:output2},{maxBuffer})=>{let resultError=getResultError(error51,exitCode,signal),timedOut=resultError?.code==="ETIMEDOUT",isMaxBuffer=isMaxBufferSync(resultError,output2,maxBuffer);return{resultError,exitCode,signal,timedOut,isMaxBuffer}},getResultError=(error51,exitCode,signal)=>{if(error51!==void 0)return error51;return isFailedExit(exitCode,signal)?new DiscardedError:void 0};var init_exit_sync=__esm(()=>{init_final_error();init_max_buffer();init_exit_async()});import{spawnSync}from"node:child_process";var execaCoreSync=(rawFile,rawArguments,rawOptions)=>{let{file:file2,commandArguments,command,escapedCommand,startTime,verboseInfo,options,fileDescriptors}=handleSyncArguments(rawFile,rawArguments,rawOptions),result=spawnSubprocessSync({file:file2,commandArguments,options,command,escapedCommand,verboseInfo,fileDescriptors,startTime});return handleResult(result,verboseInfo,options)},handleSyncArguments=(rawFile,rawArguments,rawOptions)=>{let{command,escapedCommand,startTime,verboseInfo}=handleCommand(rawFile,rawArguments,rawOptions),syncOptions=normalizeSyncOptions(rawOptions),{file:file2,commandArguments,options}=normalizeOptions(rawFile,rawArguments,syncOptions);validateSyncOptions(options);let fileDescriptors=handleStdioSync(options,verboseInfo);return{file:file2,commandArguments,command,escapedCommand,startTime,verboseInfo,options,fileDescriptors}},normalizeSyncOptions=(options)=>options.node&&!options.ipc?{...options,ipc:!1}:options,validateSyncOptions=({ipc,ipcInput,detached,cancelSignal})=>{if(ipcInput)throwInvalidSyncOption("ipcInput");if(ipc)throwInvalidSyncOption("ipc: true");if(detached)throwInvalidSyncOption("detached: true");if(cancelSignal)throwInvalidSyncOption("cancelSignal")},throwInvalidSyncOption=(value)=>{throw TypeError(`The "${value}" option cannot be used with synchronous methods.`)},spawnSubprocessSync=({file:file2,commandArguments,options,command,escapedCommand,verboseInfo,fileDescriptors,startTime})=>{let syncResult=runSubprocessSync({file:file2,commandArguments,options,command,escapedCommand,fileDescriptors,startTime});if(syncResult.failed)return syncResult;let{resultError,exitCode,signal,timedOut,isMaxBuffer}=getExitResultSync(syncResult,options),{output:output2,error:error51=resultError}=transformOutputSync({fileDescriptors,syncResult,options,isMaxBuffer,verboseInfo}),stdio=output2.map((stdioOutput,fdNumber)=>stripNewline(stdioOutput,options,fdNumber)),all=stripNewline(getAllSync(output2,options),options,"all");return getSyncResult({error:error51,exitCode,signal,timedOut,isMaxBuffer,stdio,all,options,command,escapedCommand,startTime})},runSubprocessSync=({file:file2,commandArguments,options,command,escapedCommand,fileDescriptors,startTime})=>{try{addInputOptionsSync(fileDescriptors,options);let normalizedOptions=normalizeSpawnSyncOptions(options);return spawnSync(...concatenateShell(file2,commandArguments,normalizedOptions))}catch(error51){return makeEarlyError({error:error51,command,escapedCommand,fileDescriptors,options,startTime,isSync:!0})}},normalizeSpawnSyncOptions=({encoding,maxBuffer,...options})=>({...options,encoding:"buffer",maxBuffer:getMaxBufferSync(maxBuffer)}),getSyncResult=({error:error51,exitCode,signal,timedOut,isMaxBuffer,stdio,all,options,command,escapedCommand,startTime})=>error51===void 0?makeSuccessResult({command,escapedCommand,stdio,all,ipcOutput:[],options,startTime}):makeError({error:error51,command,escapedCommand,timedOut,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer,isForcefullyTerminated:!1,exitCode,signal,stdio,all,ipcOutput:[],options,startTime,isSync:!0});var init_main_sync=__esm(()=>{init_command();init_options();init_result();init_reject();init_handle_sync();init_strip_newline();init_input_sync();init_output_sync();init_max_buffer();init_all_sync();init_exit_sync()});import{once as once5,on as on2}from"node:events";var getOneMessage=({anyProcess,channel,isSubprocess,ipc},{reference=!0,filter}={})=>{return validateIpcMethod({methodName:"getOneMessage",isSubprocess,ipc,isConnected:isConnected(anyProcess)}),getOneMessageAsync({anyProcess,channel,isSubprocess,filter,reference})},getOneMessageAsync=async({anyProcess,channel,isSubprocess,filter,reference})=>{addReference(channel,reference);let ipcEmitter=getIpcEmitter(anyProcess,channel,isSubprocess),controller=new AbortController;try{return await Promise.race([getMessage(ipcEmitter,filter,controller),throwOnDisconnect2(ipcEmitter,isSubprocess,controller),throwOnStrictError(ipcEmitter,isSubprocess,controller)])}catch(error51){throw disconnect(anyProcess),error51}finally{controller.abort(),removeReference(channel,reference)}},getMessage=async(ipcEmitter,filter,{signal})=>{if(filter===void 0){let[message]=await once5(ipcEmitter,"message",{signal});return message}for await(let[message]of on2(ipcEmitter,"message",{signal}))if(filter(message))return message},throwOnDisconnect2=async(ipcEmitter,isSubprocess,{signal})=>{await once5(ipcEmitter,"disconnect",{signal}),throwOnEarlyDisconnect(isSubprocess)},throwOnStrictError=async(ipcEmitter,isSubprocess,{signal})=>{let[error51]=await once5(ipcEmitter,"strict:error",{signal});throw getStrictResponseError(error51,isSubprocess)};var init_get_one=__esm(()=>{init_validation();init_forward()});import{once as once6,on as on3}from"node:events";var getEachMessage=({anyProcess,channel,isSubprocess,ipc},{reference=!0}={})=>loopOnMessages({anyProcess,channel,isSubprocess,ipc,shouldAwait:!isSubprocess,reference}),loopOnMessages=({anyProcess,channel,isSubprocess,ipc,shouldAwait,reference})=>{validateIpcMethod({methodName:"getEachMessage",isSubprocess,ipc,isConnected:isConnected(anyProcess)}),addReference(channel,reference);let ipcEmitter=getIpcEmitter(anyProcess,channel,isSubprocess),controller=new AbortController,state={};return stopOnDisconnect(anyProcess,ipcEmitter,controller),abortOnStrictError({ipcEmitter,isSubprocess,controller,state}),iterateOnMessages({anyProcess,channel,ipcEmitter,isSubprocess,shouldAwait,controller,state,reference})},stopOnDisconnect=async(anyProcess,ipcEmitter,controller)=>{try{await once6(ipcEmitter,"disconnect",{signal:controller.signal}),controller.abort()}catch{}},abortOnStrictError=async({ipcEmitter,isSubprocess,controller,state})=>{try{let[error51]=await once6(ipcEmitter,"strict:error",{signal:controller.signal});state.error=getStrictResponseError(error51,isSubprocess),controller.abort()}catch{}},iterateOnMessages=async function*({anyProcess,channel,ipcEmitter,isSubprocess,shouldAwait,controller,state,reference}){try{for await(let[message]of on3(ipcEmitter,"message",{signal:controller.signal}))throwIfStrictError(state),yield message}catch{throwIfStrictError(state)}finally{if(controller.abort(),removeReference(channel,reference),!isSubprocess)disconnect(anyProcess);if(shouldAwait)await anyProcess}},throwIfStrictError=({error:error51})=>{if(error51)throw error51};var init_get_each=__esm(()=>{init_validation();init_forward()});import process9 from"node:process";var addIpcMethods=(subprocess,{ipc})=>{Object.assign(subprocess,getIpcMethods(subprocess,!1,ipc))},getIpcExport=()=>{let anyProcess=process9,isSubprocess=!0,ipc=process9.channel!==void 0;return{...getIpcMethods(anyProcess,!0,ipc),getCancelSignal:getCancelSignal.bind(void 0,{anyProcess,channel:anyProcess.channel,isSubprocess:!0,ipc})}},getIpcMethods=(anyProcess,isSubprocess,ipc)=>({sendMessage:sendMessage.bind(void 0,{anyProcess,channel:anyProcess.channel,isSubprocess,ipc}),getOneMessage:getOneMessage.bind(void 0,{anyProcess,channel:anyProcess.channel,isSubprocess,ipc}),getEachMessage:getEachMessage.bind(void 0,{anyProcess,channel:anyProcess.channel,isSubprocess,ipc})});var init_methods=__esm(()=>{init_send();init_get_one();init_get_each();init_graceful()});import{ChildProcess as ChildProcess2}from"node:child_process";import{PassThrough,Readable,Writable,Duplex}from"node:stream";var handleEarlyError=({error:error51,command,escapedCommand,fileDescriptors,options,startTime,verboseInfo})=>{cleanupCustomStreams(fileDescriptors);let subprocess=new ChildProcess2;createDummyStreams(subprocess,fileDescriptors),Object.assign(subprocess,{readable,writable,duplex});let earlyError=makeEarlyError({error:error51,command,escapedCommand,fileDescriptors,options,startTime,isSync:!1}),promise2=handleDummyPromise(earlyError,verboseInfo,options);return{subprocess,promise:promise2}},createDummyStreams=(subprocess,fileDescriptors)=>{let stdin=createDummyStream(),stdout=createDummyStream(),stderr=createDummyStream(),extraStdio=Array.from({length:fileDescriptors.length-3},createDummyStream),all=createDummyStream(),stdio=[stdin,stdout,stderr,...extraStdio];Object.assign(subprocess,{stdin,stdout,stderr,all,stdio})},createDummyStream=()=>{let stream=new PassThrough;return stream.end(),stream},readable=()=>new Readable({read(){}}),writable=()=>new Writable({write(){}}),duplex=()=>new Duplex({read(){},write(){}}),handleDummyPromise=async(error51,verboseInfo,options)=>handleResult(error51,verboseInfo,options);var init_early_error=__esm(()=>{init_handle();init_result();init_reject()});import{createReadStream,createWriteStream}from"node:fs";import{Buffer as Buffer4}from"node:buffer";import{Readable as Readable2,Writable as Writable2,Duplex as Duplex2}from"node:stream";var handleStdioAsync=(options,verboseInfo)=>handleStdio(addPropertiesAsync,options,verboseInfo,!1),forbiddenIfAsync=({type,optionName})=>{throw TypeError(`The \`${optionName}\` option cannot be ${TYPE_TO_MESSAGE[type]}.`)},addProperties2,addPropertiesAsync;var init_handle_async=__esm(()=>{init_generator();init_handle();init_type();addProperties2={fileNumber:forbiddenIfAsync,generator:generatorToStream,asyncGenerator:generatorToStream,nodeStream:({value})=>({stream:value}),webTransform({value:{transform:transform2,writableObjectMode,readableObjectMode}}){let objectMode=writableObjectMode||readableObjectMode;return{stream:Duplex2.fromWeb(transform2,{objectMode})}},duplex:({value:{transform:transform2}})=>({stream:transform2}),native(){}},addPropertiesAsync={input:{...addProperties2,fileUrl:({value})=>({stream:createReadStream(value)}),filePath:({value:{file:file2}})=>({stream:createReadStream(file2)}),webStream:({value})=>({stream:Readable2.fromWeb(value)}),iterable:({value})=>({stream:Readable2.from(value)}),asyncIterable:({value})=>({stream:Readable2.from(value)}),string:({value})=>({stream:Readable2.from(value)}),uint8Array:({value})=>({stream:Readable2.from(Buffer4.from(value))})},output:{...addProperties2,fileUrl:({value})=>({stream:createWriteStream(value)}),filePath:({value:{file:file2,append}})=>({stream:createWriteStream(file2,append?{flags:"a"}:{})}),webStream:({value})=>({stream:Writable2.fromWeb(value)}),iterable:forbiddenIfAsync,asyncIterable:forbiddenIfAsync,string:forbiddenIfAsync,uint8Array:forbiddenIfAsync}}});import{on as on4,once as once7}from"node:events";import{PassThrough as PassThroughStream,getDefaultHighWaterMark as getDefaultHighWaterMark2}from"node:stream";import{finished as finished2}from"node:stream/promises";function mergeStreams(streams){if(!Array.isArray(streams))throw TypeError(`Expected an array, got \`${typeof streams}\`.`);for(let stream of streams)validateStream(stream);let objectMode=streams.some(({readableObjectMode})=>readableObjectMode),highWaterMark=getHighWaterMark(streams,objectMode),passThroughStream=new MergedStream({objectMode,writableHighWaterMark:highWaterMark,readableHighWaterMark:highWaterMark});for(let stream of streams)passThroughStream.add(stream);return passThroughStream}var getHighWaterMark=(streams,objectMode)=>{if(streams.length===0)return getDefaultHighWaterMark2(objectMode);let highWaterMarks=streams.filter(({readableObjectMode})=>readableObjectMode===objectMode).map(({readableHighWaterMark})=>readableHighWaterMark);return Math.max(...highWaterMarks)},MergedStream,onMergedStreamFinished=async(passThroughStream,streams,unpipeEvent)=>{updateMaxListeners(passThroughStream,PASSTHROUGH_LISTENERS_COUNT);let controller=new AbortController;try{await Promise.race([onMergedStreamEnd(passThroughStream,controller),onInputStreamsUnpipe(passThroughStream,streams,unpipeEvent,controller)])}finally{controller.abort(),updateMaxListeners(passThroughStream,-PASSTHROUGH_LISTENERS_COUNT)}},onMergedStreamEnd=async(passThroughStream,{signal})=>{try{await finished2(passThroughStream,{signal,cleanup:!0})}catch(error51){throw errorOrAbortStream(passThroughStream,error51),error51}},onInputStreamsUnpipe=async(passThroughStream,streams,unpipeEvent,{signal})=>{for await(let[unpipedStream]of on4(passThroughStream,"unpipe",{signal}))if(streams.has(unpipedStream))unpipedStream.emit(unpipeEvent)},validateStream=(stream)=>{if(typeof stream?.pipe!=="function")throw TypeError(`Expected a readable stream, got: \`${typeof stream}\`.`)},endWhenStreamsDone=async({passThroughStream,stream,streams,ended,aborted:aborted2,onFinished,unpipeEvent})=>{updateMaxListeners(passThroughStream,PASSTHROUGH_LISTENERS_PER_STREAM);let controller=new AbortController;try{await Promise.race([afterMergedStreamFinished(onFinished,stream,controller),onInputStreamEnd({passThroughStream,stream,streams,ended,aborted:aborted2,controller}),onInputStreamUnpipe({stream,streams,ended,aborted:aborted2,unpipeEvent,controller})])}finally{controller.abort(),updateMaxListeners(passThroughStream,-PASSTHROUGH_LISTENERS_PER_STREAM)}if(streams.size>0&&streams.size===ended.size+aborted2.size)if(ended.size===0&&aborted2.size>0)abortStream(passThroughStream);else endStream(passThroughStream)},afterMergedStreamFinished=async(onFinished,stream,{signal})=>{try{if(await onFinished,!signal.aborted)abortStream(stream)}catch(error51){if(!signal.aborted)errorOrAbortStream(stream,error51)}},onInputStreamEnd=async({passThroughStream,stream,streams,ended,aborted:aborted2,controller:{signal}})=>{try{if(await finished2(stream,{signal,cleanup:!0,readable:!0,writable:!1}),streams.has(stream))ended.add(stream)}catch(error51){if(signal.aborted||!streams.has(stream))return;if(isAbortError(error51))aborted2.add(stream);else errorStream(passThroughStream,error51)}},onInputStreamUnpipe=async({stream,streams,ended,aborted:aborted2,unpipeEvent,controller:{signal}})=>{if(await once7(stream,unpipeEvent,{signal}),!stream.readable)return once7(signal,"abort",{signal});streams.delete(stream),ended.delete(stream),aborted2.delete(stream)},endStream=(stream)=>{if(stream.writable)stream.end()},errorOrAbortStream=(stream,error51)=>{if(isAbortError(error51))abortStream(stream);else errorStream(stream,error51)},isAbortError=(error51)=>error51?.code==="ERR_STREAM_PREMATURE_CLOSE",abortStream=(stream)=>{if(stream.readable||stream.writable)stream.destroy()},errorStream=(stream,error51)=>{if(!stream.destroyed)stream.once("error",noop2),stream.destroy(error51)},noop2=()=>{},updateMaxListeners=(passThroughStream,increment2)=>{let maxListeners=passThroughStream.getMaxListeners();if(maxListeners!==0&&maxListeners!==Number.POSITIVE_INFINITY)passThroughStream.setMaxListeners(maxListeners+increment2)},PASSTHROUGH_LISTENERS_COUNT=2,PASSTHROUGH_LISTENERS_PER_STREAM=1;var init_merge_streams=__esm(()=>{MergedStream=class MergedStream extends PassThroughStream{#streams=new Set([]);#ended=new Set([]);#aborted=new Set([]);#onFinished;#unpipeEvent=Symbol("unpipe");#streamPromises=new WeakMap;add(stream){if(validateStream(stream),this.#streams.has(stream))return;this.#streams.add(stream),this.#onFinished??=onMergedStreamFinished(this,this.#streams,this.#unpipeEvent);let streamPromise=endWhenStreamsDone({passThroughStream:this,stream,streams:this.#streams,ended:this.#ended,aborted:this.#aborted,onFinished:this.#onFinished,unpipeEvent:this.#unpipeEvent});this.#streamPromises.set(stream,streamPromise),stream.pipe(this,{end:!1})}async remove(stream){if(validateStream(stream),!this.#streams.has(stream))return!1;let streamPromise=this.#streamPromises.get(stream);if(streamPromise===void 0)return!1;return this.#streamPromises.delete(stream),stream.unpipe(this),await streamPromise,!0}}});import{finished as finished3}from"node:stream/promises";var pipeStreams=(source,destination)=>{source.pipe(destination),onSourceFinish(source,destination),onDestinationFinish(source,destination)},onSourceFinish=async(source,destination)=>{if(isStandardStream(source)||isStandardStream(destination))return;try{await finished3(source,{cleanup:!0,readable:!0,writable:!1})}catch{}endDestinationStream(destination)},endDestinationStream=(destination)=>{if(destination.writable)destination.end()},onDestinationFinish=async(source,destination)=>{if(isStandardStream(source)||isStandardStream(destination))return;try{await finished3(destination,{cleanup:!0,readable:!1,writable:!0})}catch{}abortSourceStream(source)},abortSourceStream=(source)=>{if(source.readable)source.destroy()};var init_pipeline=__esm(()=>{init_standard_stream()});var pipeOutputAsync=(subprocess,fileDescriptors,controller)=>{let pipeGroups=new Map;for(let[fdNumber,{stdioItems,direction}]of Object.entries(fileDescriptors)){for(let{stream}of stdioItems.filter(({type})=>TRANSFORM_TYPES.has(type)))pipeTransform(subprocess,stream,direction,fdNumber);for(let{stream}of stdioItems.filter(({type})=>!TRANSFORM_TYPES.has(type)))pipeStdioItem({subprocess,stream,direction,fdNumber,pipeGroups,controller})}for(let[outputStream,inputStreams]of pipeGroups.entries()){let inputStream=inputStreams.length===1?inputStreams[0]:mergeStreams(inputStreams);pipeStreams(inputStream,outputStream)}},pipeTransform=(subprocess,stream,direction,fdNumber)=>{if(direction==="output")pipeStreams(subprocess.stdio[fdNumber],stream);else pipeStreams(stream,subprocess.stdio[fdNumber]);let streamProperty=SUBPROCESS_STREAM_PROPERTIES[fdNumber];if(streamProperty!==void 0)subprocess[streamProperty]=stream;subprocess.stdio[fdNumber]=stream},SUBPROCESS_STREAM_PROPERTIES,pipeStdioItem=({subprocess,stream,direction,fdNumber,pipeGroups,controller})=>{if(stream===void 0)return;setStandardStreamMaxListeners(stream,controller);let[inputStream,outputStream]=direction==="output"?[stream,subprocess.stdio[fdNumber]]:[subprocess.stdio[fdNumber],stream],outputStreams=pipeGroups.get(inputStream)??[];pipeGroups.set(inputStream,[...outputStreams,outputStream])},setStandardStreamMaxListeners=(stream,{signal})=>{if(isStandardStream(stream))incrementMaxListeners(stream,MAX_LISTENERS_INCREMENT,signal)},MAX_LISTENERS_INCREMENT=2;var init_output_async=__esm(()=>{init_merge_streams();init_standard_stream();init_max_listeners();init_type();init_pipeline();SUBPROCESS_STREAM_PROPERTIES=["stdin","stdout","stderr"]});var signals;var init_signals2=__esm(()=>{signals=[];signals.push("SIGHUP","SIGINT","SIGTERM");if(process.platform!=="win32")signals.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(process.platform==="linux")signals.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT")});class Emitter{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(global2[kExitEmitter])return global2[kExitEmitter];ObjectDefineProperty(global2,kExitEmitter,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(ev,fn){this.listeners[ev].push(fn)}removeListener(ev,fn){let list=this.listeners[ev],i2=list.indexOf(fn);if(i2===-1)return;if(i2===0&&list.length===1)list.length=0;else list.splice(i2,1)}emit(ev,code,signal){if(this.emitted[ev])return!1;this.emitted[ev]=!0;let ret=!1;for(let fn of this.listeners[ev])ret=fn(code,signal)===!0||ret;if(ev==="exit")ret=this.emit("afterExit",code,signal)||ret;return ret}}class SignalExitBase{}var processOk=(process10)=>!!process10&&typeof process10==="object"&&typeof process10.removeListener==="function"&&typeof process10.emit==="function"&&typeof process10.reallyExit==="function"&&typeof process10.listeners==="function"&&typeof process10.kill==="function"&&typeof process10.pid==="number"&&typeof process10.on==="function",kExitEmitter,global2,ObjectDefineProperty,signalExitWrap=(handler)=>{return{onExit(cb,opts){return handler.onExit(cb,opts)},load(){return handler.load()},unload(){return handler.unload()}}},SignalExitFallback,SignalExit,process10,onExit,load,unload;var init_mjs=__esm(()=>{init_signals2();kExitEmitter=Symbol.for("signal-exit emitter"),global2=globalThis,ObjectDefineProperty=Object.defineProperty.bind(Object);SignalExitFallback=class SignalExitFallback extends SignalExitBase{onExit(){return()=>{}}load(){}unload(){}};SignalExit=class SignalExit extends SignalExitBase{#hupSig=process10.platform==="win32"?"SIGINT":"SIGHUP";#emitter=new Emitter;#process;#originalProcessEmit;#originalProcessReallyExit;#sigListeners={};#loaded=!1;constructor(process10){super();this.#process=process10,this.#sigListeners={};for(let sig of signals)this.#sigListeners[sig]=()=>{let listeners=this.#process.listeners(sig),{count:count2}=this.#emitter,p=process10;if(typeof p.__signal_exit_emitter__==="object"&&typeof p.__signal_exit_emitter__.count==="number")count2+=p.__signal_exit_emitter__.count;if(listeners.length===count2){this.unload();let ret=this.#emitter.emit("exit",null,sig),s2=sig==="SIGHUP"?this.#hupSig:sig;if(!ret)process10.kill(process10.pid,s2)}};this.#originalProcessReallyExit=process10.reallyExit,this.#originalProcessEmit=process10.emit}onExit(cb,opts){if(!processOk(this.#process))return()=>{};if(this.#loaded===!1)this.load();let ev=opts?.alwaysLast?"afterExit":"exit";return this.#emitter.on(ev,cb),()=>{if(this.#emitter.removeListener(ev,cb),this.#emitter.listeners.exit.length===0&&this.#emitter.listeners.afterExit.length===0)this.unload()}}load(){if(this.#loaded)return;this.#loaded=!0,this.#emitter.count+=1;for(let sig of signals)try{let fn=this.#sigListeners[sig];if(fn)this.#process.on(sig,fn)}catch(_){}this.#process.emit=(ev,...a2)=>{return this.#processEmit(ev,...a2)},this.#process.reallyExit=(code)=>{return this.#processReallyExit(code)}}unload(){if(!this.#loaded)return;this.#loaded=!1,signals.forEach((sig)=>{let listener=this.#sigListeners[sig];if(!listener)throw Error("Listener not defined for signal: "+sig);try{this.#process.removeListener(sig,listener)}catch(_){}}),this.#process.emit=this.#originalProcessEmit,this.#process.reallyExit=this.#originalProcessReallyExit,this.#emitter.count-=1}#processReallyExit(code){if(!processOk(this.#process))return 0;return this.#process.exitCode=code||0,this.#emitter.emit("exit",this.#process.exitCode,null),this.#originalProcessReallyExit.call(this.#process,this.#process.exitCode)}#processEmit(ev,...args){let og=this.#originalProcessEmit;if(ev==="exit"&&processOk(this.#process)){if(typeof args[0]==="number")this.#process.exitCode=args[0];let ret=og.call(this.#process,ev,...args);return this.#emitter.emit("exit",this.#process.exitCode,null),ret}else return og.call(this.#process,ev,...args)}};process10=globalThis.process,{onExit,load,unload}=signalExitWrap(processOk(process10)?new SignalExit(process10):new SignalExitFallback)});import{addAbortListener as addAbortListener2}from"node:events";var cleanupOnExit=(subprocess,{cleanup,detached},{signal})=>{if(!cleanup||detached)return;let removeExitHandler=onExit(()=>{subprocess.kill()});addAbortListener2(signal,()=>{removeExitHandler()})};var init_cleanup=__esm(()=>{init_mjs()});var normalizePipeArguments=({source,sourcePromise,boundOptions,createNested},...pipeArguments)=>{let startTime=getStartTime(),{destination,destinationStream,destinationError,from,unpipeSignal}=getDestinationStream(boundOptions,createNested,pipeArguments),{sourceStream,sourceError}=getSourceStream(source,from),{options:sourceOptions,fileDescriptors}=SUBPROCESS_OPTIONS.get(source);return{sourcePromise,sourceStream,sourceOptions,sourceError,destination,destinationStream,destinationError,unpipeSignal,fileDescriptors,startTime}},getDestinationStream=(boundOptions,createNested,pipeArguments)=>{try{let{destination,pipeOptions:{from,to,unpipeSignal}={}}=getDestination(boundOptions,createNested,...pipeArguments),destinationStream=getToStream(destination,to);return{destination,destinationStream,from,unpipeSignal}}catch(error51){return{destinationError:error51}}},getDestination=(boundOptions,createNested,firstArgument,...pipeArguments)=>{if(Array.isArray(firstArgument))return{destination:createNested(mapDestinationArguments,boundOptions)(firstArgument,...pipeArguments),pipeOptions:boundOptions};if(typeof firstArgument==="string"||firstArgument instanceof URL||isDenoExecPath(firstArgument)){if(Object.keys(boundOptions).length>0)throw TypeError('Please use .pipe("file", ..., options) or .pipe(execa("file", ..., options)) instead of .pipe(options)("file", ...).');let[rawFile,rawArguments,rawOptions]=normalizeParameters(firstArgument,...pipeArguments);return{destination:createNested(mapDestinationArguments)(rawFile,rawArguments,rawOptions),pipeOptions:rawOptions}}if(SUBPROCESS_OPTIONS.has(firstArgument)){if(Object.keys(boundOptions).length>0)throw TypeError("Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).");return{destination:firstArgument,pipeOptions:pipeArguments[0]}}throw TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${firstArgument}`)},mapDestinationArguments=({options})=>({options:{...options,stdin:"pipe",piped:!0}}),getSourceStream=(source,from)=>{try{return{sourceStream:getFromStream(source,from)}}catch(error51){return{sourceError:error51}}};var init_pipe_arguments=__esm(()=>{init_parameters();init_duration();init_fd_options();init_file_url()});var handlePipeArgumentsError=({sourceStream,sourceError,destinationStream,destinationError,fileDescriptors,sourceOptions,startTime})=>{let error51=getPipeArgumentsError({sourceStream,sourceError,destinationStream,destinationError});if(error51!==void 0)throw createNonCommandError({error:error51,fileDescriptors,sourceOptions,startTime})},getPipeArgumentsError=({sourceStream,sourceError,destinationStream,destinationError})=>{if(sourceError!==void 0&&destinationError!==void 0)return destinationError;if(destinationError!==void 0)return abortSourceStream(sourceStream),destinationError;if(sourceError!==void 0)return endDestinationStream(destinationStream),sourceError},createNonCommandError=({error:error51,fileDescriptors,sourceOptions,startTime})=>makeEarlyError({error:error51,command:PIPE_COMMAND_MESSAGE,escapedCommand:PIPE_COMMAND_MESSAGE,fileDescriptors,options:sourceOptions,startTime,isSync:!1}),PIPE_COMMAND_MESSAGE="source.pipe(destination)";var init_throw=__esm(()=>{init_result();init_pipeline()});var waitForBothSubprocesses=async(subprocessPromises)=>{let[{status:sourceStatus,reason:sourceReason,value:sourceResult=sourceReason},{status:destinationStatus,reason:destinationReason,value:destinationResult=destinationReason}]=await subprocessPromises;if(!destinationResult.pipedFrom.includes(sourceResult))destinationResult.pipedFrom.push(sourceResult);if(destinationStatus==="rejected")throw destinationResult;if(sourceStatus==="rejected")throw sourceResult;return destinationResult};import{finished as finished4}from"node:stream/promises";var pipeSubprocessStream=(sourceStream,destinationStream,maxListenersController)=>{let mergedStream=MERGED_STREAMS.has(destinationStream)?pipeMoreSubprocessStream(sourceStream,destinationStream):pipeFirstSubprocessStream(sourceStream,destinationStream);return incrementMaxListeners(sourceStream,SOURCE_LISTENERS_PER_PIPE,maxListenersController.signal),incrementMaxListeners(destinationStream,DESTINATION_LISTENERS_PER_PIPE,maxListenersController.signal),cleanupMergedStreamsMap(destinationStream),mergedStream},pipeFirstSubprocessStream=(sourceStream,destinationStream)=>{let mergedStream=mergeStreams([sourceStream]);return pipeStreams(mergedStream,destinationStream),MERGED_STREAMS.set(destinationStream,mergedStream),mergedStream},pipeMoreSubprocessStream=(sourceStream,destinationStream)=>{let mergedStream=MERGED_STREAMS.get(destinationStream);return mergedStream.add(sourceStream),mergedStream},cleanupMergedStreamsMap=async(destinationStream)=>{try{await finished4(destinationStream,{cleanup:!0,readable:!1,writable:!0})}catch{}MERGED_STREAMS.delete(destinationStream)},MERGED_STREAMS,SOURCE_LISTENERS_PER_PIPE=2,DESTINATION_LISTENERS_PER_PIPE=1;var init_streaming=__esm(()=>{init_merge_streams();init_max_listeners();init_pipeline();MERGED_STREAMS=new WeakMap});import{aborted as aborted2}from"node:util";var unpipeOnAbort=(unpipeSignal,unpipeContext)=>unpipeSignal===void 0?[]:[unpipeOnSignalAbort(unpipeSignal,unpipeContext)],unpipeOnSignalAbort=async(unpipeSignal,{sourceStream,mergedStream,fileDescriptors,sourceOptions,startTime})=>{await aborted2(unpipeSignal,sourceStream),await mergedStream.remove(sourceStream);let error51=Error("Pipe canceled by `unpipeSignal` option.");throw createNonCommandError({error:error51,fileDescriptors,sourceOptions,startTime})};var init_abort=__esm(()=>{init_throw()});var pipeToSubprocess=(sourceInfo,...pipeArguments)=>{if(isPlainObject2(pipeArguments[0]))return pipeToSubprocess.bind(void 0,{...sourceInfo,boundOptions:{...sourceInfo.boundOptions,...pipeArguments[0]}});let{destination,...normalizedInfo}=normalizePipeArguments(sourceInfo,...pipeArguments),promise2=handlePipePromise({...normalizedInfo,destination});return promise2.pipe=pipeToSubprocess.bind(void 0,{...sourceInfo,source:destination,sourcePromise:promise2,boundOptions:{}}),promise2},handlePipePromise=async({sourcePromise,sourceStream,sourceOptions,sourceError,destination,destinationStream,destinationError,unpipeSignal,fileDescriptors,startTime})=>{let subprocessPromises=getSubprocessPromises(sourcePromise,destination);handlePipeArgumentsError({sourceStream,sourceError,destinationStream,destinationError,fileDescriptors,sourceOptions,startTime});let maxListenersController=new AbortController;try{let mergedStream=pipeSubprocessStream(sourceStream,destinationStream,maxListenersController);return await Promise.race([waitForBothSubprocesses(subprocessPromises),...unpipeOnAbort(unpipeSignal,{sourceStream,mergedStream,sourceOptions,fileDescriptors,startTime})])}finally{maxListenersController.abort()}},getSubprocessPromises=(sourcePromise,destination)=>Promise.allSettled([sourcePromise,destination]);var init_setup=__esm(()=>{init_pipe_arguments();init_throw();init_streaming();init_abort()});import{on as on5}from"node:events";import{getDefaultHighWaterMark as getDefaultHighWaterMark3}from"node:stream";var iterateOnSubprocessStream=({subprocessStdout,subprocess,binary,shouldEncode,encoding,preserveNewlines})=>{let controller=new AbortController;return stopReadingOnExit(subprocess,controller),iterateOnStream({stream:subprocessStdout,controller,binary,shouldEncode:!subprocessStdout.readableObjectMode&&shouldEncode,encoding,shouldSplit:!subprocessStdout.readableObjectMode,preserveNewlines})},stopReadingOnExit=async(subprocess,controller)=>{try{await subprocess}catch{}finally{controller.abort()}},iterateForResult=({stream,onStreamEnd,lines,encoding,stripFinalNewline:stripFinalNewline2,allMixed})=>{let controller=new AbortController;stopReadingOnStreamEnd(onStreamEnd,controller,stream);let objectMode=stream.readableObjectMode&&!allMixed;return iterateOnStream({stream,controller,binary:encoding==="buffer",shouldEncode:!objectMode,encoding,shouldSplit:!objectMode&&lines,preserveNewlines:!stripFinalNewline2})},stopReadingOnStreamEnd=async(onStreamEnd,controller,stream)=>{try{await onStreamEnd}catch{stream.destroy()}finally{controller.abort()}},iterateOnStream=({stream,controller,binary,shouldEncode,encoding,shouldSplit,preserveNewlines})=>{let onStdoutChunk=on5(stream,"data",{signal:controller.signal,highWaterMark:HIGH_WATER_MARK,highWatermark:HIGH_WATER_MARK});return iterateOnData({onStdoutChunk,controller,binary,shouldEncode,encoding,shouldSplit,preserveNewlines})},DEFAULT_OBJECT_HIGH_WATER_MARK,HIGH_WATER_MARK,iterateOnData=async function*({onStdoutChunk,controller,binary,shouldEncode,encoding,shouldSplit,preserveNewlines}){let generators=getGenerators({binary,shouldEncode,encoding,shouldSplit,preserveNewlines});try{for await(let[chunk]of onStdoutChunk)yield*transformChunkSync(chunk,generators,0)}catch(error51){if(!controller.signal.aborted)throw error51}finally{yield*finalChunksSync(generators)}},getGenerators=({binary,shouldEncode,encoding,shouldSplit,preserveNewlines})=>[getEncodingTransformGenerator(binary,encoding,!shouldEncode),getSplitLinesGenerator(binary,preserveNewlines,!shouldSplit,{})].filter(Boolean);var init_iterate=__esm(()=>{init_encoding_transform();init_split();DEFAULT_OBJECT_HIGH_WATER_MARK=getDefaultHighWaterMark3(!0),HIGH_WATER_MARK=DEFAULT_OBJECT_HIGH_WATER_MARK});import{setImmediate}from"node:timers/promises";var getStreamOutput=async({stream,onStreamEnd,fdNumber,encoding,buffer,maxBuffer,lines,allMixed,stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo})=>{let logPromise=logOutputAsync({stream,onStreamEnd,fdNumber,encoding,allMixed,verboseInfo,streamInfo});if(!buffer){await Promise.all([resumeStream(stream),logPromise]);return}let stripFinalNewlineValue=getStripFinalNewline(stripFinalNewline2,fdNumber),iterable=iterateForResult({stream,onStreamEnd,lines,encoding,stripFinalNewline:stripFinalNewlineValue,allMixed}),[output2]=await Promise.all([getStreamContents2({stream,iterable,fdNumber,encoding,maxBuffer,lines}),logPromise]);return output2},logOutputAsync=async({stream,onStreamEnd,fdNumber,encoding,allMixed,verboseInfo,streamInfo:{fileDescriptors}})=>{if(!shouldLogOutput({stdioItems:fileDescriptors[fdNumber]?.stdioItems,encoding,verboseInfo,fdNumber}))return;let linesIterable=iterateForResult({stream,onStreamEnd,lines:!0,encoding,stripFinalNewline:!0,allMixed});await logLines(linesIterable,stream,fdNumber,verboseInfo)},resumeStream=async(stream)=>{if(await setImmediate(),stream.readableFlowing===null)stream.resume()},getStreamContents2=async({stream,stream:{readableObjectMode},iterable,fdNumber,encoding,maxBuffer,lines})=>{try{if(readableObjectMode||lines)return await getStreamAsArray(iterable,{maxBuffer});if(encoding==="buffer")return new Uint8Array(await getStreamAsArrayBuffer(iterable,{maxBuffer}));return await getStreamAsString(iterable,{maxBuffer})}catch(error51){return handleBufferedData(handleMaxBuffer({error:error51,stream,readableObjectMode,lines,encoding,fdNumber}))}},getBufferedData=async(streamPromise)=>{try{return await streamPromise}catch(error51){return handleBufferedData(error51)}},handleBufferedData=({bufferedData})=>isArrayBuffer(bufferedData)?new Uint8Array(bufferedData):bufferedData;var init_contents2=__esm(()=>{init_source();init_uint_array();init_output();init_iterate();init_max_buffer();init_strip_newline()});import{finished as finished5}from"node:stream/promises";var waitForStream=async(stream,fdNumber,streamInfo,{isSameDirection,stopOnExit=!1}={})=>{let state=handleStdinDestroy(stream,streamInfo),abortController=new AbortController;try{await Promise.race([...stopOnExit?[streamInfo.exitPromise]:[],finished5(stream,{cleanup:!0,signal:abortController.signal})])}catch(error51){if(!state.stdinCleanedUp)handleStreamError(error51,fdNumber,streamInfo,isSameDirection)}finally{abortController.abort()}},handleStdinDestroy=(stream,{originalStreams:[originalStdin],subprocess})=>{let state={stdinCleanedUp:!1};if(stream===originalStdin)spyOnStdinDestroy(stream,subprocess,state);return state},spyOnStdinDestroy=(subprocessStdin,subprocess,state)=>{let{_destroy}=subprocessStdin;subprocessStdin._destroy=(...destroyArguments)=>{setStdinCleanedUp(subprocess,state),_destroy.call(subprocessStdin,...destroyArguments)}},setStdinCleanedUp=({exitCode,signalCode},state)=>{if(exitCode!==null||signalCode!==null)state.stdinCleanedUp=!0},handleStreamError=(error51,fdNumber,streamInfo,isSameDirection)=>{if(!shouldIgnoreStreamError(error51,fdNumber,streamInfo,isSameDirection))throw error51},shouldIgnoreStreamError=(error51,fdNumber,streamInfo,isSameDirection=!0)=>{if(streamInfo.propagating)return isStreamEpipe(error51)||isStreamAbort(error51);return streamInfo.propagating=!0,isInputFileDescriptor(streamInfo,fdNumber)===isSameDirection?isStreamEpipe(error51):isStreamAbort(error51)},isInputFileDescriptor=({fileDescriptors},fdNumber)=>fdNumber!=="all"&&fileDescriptors[fdNumber].direction==="input",isStreamAbort=(error51)=>error51?.code==="ERR_STREAM_PREMATURE_CLOSE",isStreamEpipe=(error51)=>error51?.code==="EPIPE";var init_wait_stream=()=>{};var waitForStdioStreams=({subprocess,encoding,buffer,maxBuffer,lines,stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo})=>subprocess.stdio.map((stream,fdNumber)=>waitForSubprocessStream({stream,fdNumber,encoding,buffer:buffer[fdNumber],maxBuffer:maxBuffer[fdNumber],lines:lines[fdNumber],allMixed:!1,stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo})),waitForSubprocessStream=async({stream,fdNumber,encoding,buffer,maxBuffer,lines,allMixed,stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo})=>{if(!stream)return;let onStreamEnd=waitForStream(stream,fdNumber,streamInfo);if(isInputFileDescriptor(streamInfo,fdNumber)){await onStreamEnd;return}let[output2]=await Promise.all([getStreamOutput({stream,onStreamEnd,fdNumber,encoding,buffer,maxBuffer,lines,allMixed,stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo}),onStreamEnd]);return output2};var init_stdio=__esm(()=>{init_contents2();init_wait_stream()});var makeAllStream=({stdout,stderr},{all})=>all&&(stdout||stderr)?mergeStreams([stdout,stderr].filter(Boolean)):void 0,waitForAllStream=({subprocess,encoding,buffer,maxBuffer,lines,stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo})=>waitForSubprocessStream({...getAllStream(subprocess,buffer),fdNumber:"all",encoding,maxBuffer:maxBuffer[1]+maxBuffer[2],lines:lines[1]||lines[2],allMixed:getAllMixed(subprocess),stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo}),getAllStream=({stdout,stderr,all},[,bufferStdout,bufferStderr])=>{let buffer=bufferStdout||bufferStderr;if(!buffer)return{stream:all,buffer};if(!bufferStdout)return{stream:stderr,buffer};if(!bufferStderr)return{stream:stdout,buffer};return{stream:all,buffer}},getAllMixed=({all,stdout,stderr})=>all&&stdout&&stderr&&stdout.readableObjectMode!==stderr.readableObjectMode;var init_all_async=__esm(()=>{init_merge_streams();init_stdio()});var shouldLogIpc=(verboseInfo)=>isFullVerbose(verboseInfo,"ipc"),logIpcOutput=(message,verboseInfo)=>{let verboseMessage=serializeVerboseMessage(message);verboseLog({type:"ipc",verboseMessage,fdNumber:"ipc",verboseInfo})};var init_ipc=__esm(()=>{init_log();init_values()});var waitForIpcOutput=async({subprocess,buffer:bufferArray,maxBuffer:maxBufferArray,ipc,ipcOutput,verboseInfo})=>{if(!ipc)return ipcOutput;let isVerbose2=shouldLogIpc(verboseInfo),buffer=getFdSpecificValue(bufferArray,"ipc"),maxBuffer=getFdSpecificValue(maxBufferArray,"ipc");for await(let message of loopOnMessages({anyProcess:subprocess,channel:subprocess.channel,isSubprocess:!1,ipc,shouldAwait:!1,reference:!0})){if(buffer)checkIpcMaxBuffer(subprocess,ipcOutput,maxBuffer),ipcOutput.push(message);if(isVerbose2)logIpcOutput(message,verboseInfo)}return ipcOutput},getBufferedIpcOutput=async(ipcOutputPromise,ipcOutput)=>{return await Promise.allSettled([ipcOutputPromise]),ipcOutput};var init_buffer_messages=__esm(()=>{init_max_buffer();init_ipc();init_specific();init_get_each()});import{once as once8}from"node:events";var waitForSubprocessResult=async({subprocess,options:{encoding,buffer,maxBuffer,lines,timeoutDuration:timeout,cancelSignal,gracefulCancel,forceKillAfterDelay,stripFinalNewline:stripFinalNewline2,ipc,ipcInput},context,verboseInfo,fileDescriptors,originalStreams,onInternalError,controller})=>{let exitPromise=waitForExit(subprocess,context),streamInfo={originalStreams,fileDescriptors,subprocess,exitPromise,propagating:!1},stdioPromises=waitForStdioStreams({subprocess,encoding,buffer,maxBuffer,lines,stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo}),allPromise=waitForAllStream({subprocess,encoding,buffer,maxBuffer,lines,stripFinalNewline:stripFinalNewline2,verboseInfo,streamInfo}),ipcOutput=[],ipcOutputPromise=waitForIpcOutput({subprocess,buffer,maxBuffer,ipc,ipcOutput,verboseInfo}),originalPromises=waitForOriginalStreams(originalStreams,subprocess,streamInfo),customStreamsEndPromises=waitForCustomStreamsEnd(fileDescriptors,streamInfo);try{return await Promise.race([Promise.all([{},waitForSuccessfulExit(exitPromise),Promise.all(stdioPromises),allPromise,ipcOutputPromise,sendIpcInput(subprocess,ipcInput),...originalPromises,...customStreamsEndPromises]),onInternalError,throwOnSubprocessError(subprocess,controller),...throwOnTimeout(subprocess,timeout,context,controller),...throwOnCancel({subprocess,cancelSignal,gracefulCancel,context,controller}),...throwOnGracefulCancel({subprocess,cancelSignal,gracefulCancel,forceKillAfterDelay,context,controller})])}catch(error51){return context.terminationReason??="other",Promise.all([{error:error51},exitPromise,Promise.all(stdioPromises.map((stdioPromise)=>getBufferedData(stdioPromise))),getBufferedData(allPromise),getBufferedIpcOutput(ipcOutputPromise,ipcOutput),Promise.allSettled(originalPromises),Promise.allSettled(customStreamsEndPromises)])}},waitForOriginalStreams=(originalStreams,subprocess,streamInfo)=>originalStreams.map((stream,fdNumber)=>stream===subprocess.stdio[fdNumber]?void 0:waitForStream(stream,fdNumber,streamInfo)),waitForCustomStreamsEnd=(fileDescriptors,streamInfo)=>fileDescriptors.flatMap(({stdioItems},fdNumber)=>stdioItems.filter(({value,stream=value})=>isStream(stream,{checkOpen:!1})&&!isStandardStream(stream)).map(({type,value,stream=value})=>waitForStream(stream,fdNumber,streamInfo,{isSameDirection:TRANSFORM_TYPES.has(type),stopOnExit:type==="native"}))),throwOnSubprocessError=async(subprocess,{signal})=>{let[error51]=await once8(subprocess,"error",{signal});throw error51};var init_wait_subprocess=__esm(()=>{init_timeout();init_cancel();init_graceful2();init_standard_stream();init_type();init_contents2();init_buffer_messages();init_ipc_input();init_all_async();init_stdio();init_exit_async();init_wait_stream()});var initializeConcurrentStreams=()=>({readableDestroy:new WeakMap,writableFinal:new WeakMap,writableDestroy:new WeakMap}),addConcurrentStream=(concurrentStreams,stream,waitName)=>{let weakMap=concurrentStreams[waitName];if(!weakMap.has(stream))weakMap.set(stream,[]);let promises=weakMap.get(stream),promise2=createDeferred();return promises.push(promise2),{resolve:promise2.resolve.bind(promise2),promises}},waitForConcurrentStreams=async({resolve,promises},subprocess)=>{resolve();let[isSubprocessExit]=await Promise.race([Promise.allSettled([!0,subprocess]),Promise.all([!1,...promises])]);return!isSubprocessExit};var init_concurrent=()=>{};import{finished as finished6}from"node:stream/promises";var safeWaitForSubprocessStdin=async(subprocessStdin)=>{if(subprocessStdin===void 0)return;try{await waitForSubprocessStdin(subprocessStdin)}catch{}},safeWaitForSubprocessStdout=async(subprocessStdout)=>{if(subprocessStdout===void 0)return;try{await waitForSubprocessStdout(subprocessStdout)}catch{}},waitForSubprocessStdin=async(subprocessStdin)=>{await finished6(subprocessStdin,{cleanup:!0,readable:!1,writable:!0})},waitForSubprocessStdout=async(subprocessStdout)=>{await finished6(subprocessStdout,{cleanup:!0,readable:!0,writable:!1})},waitForSubprocess=async(subprocess,error51)=>{if(await subprocess,error51)throw error51},destroyOtherStream=(stream,isOpen,error51)=>{if(error51&&!isStreamAbort(error51))stream.destroy(error51);else if(isOpen)stream.destroy()};var init_shared=__esm(()=>{init_wait_stream()});import{Readable as Readable3}from"node:stream";import{callbackify as callbackify2}from"node:util";var createReadable=({subprocess,concurrentStreams,encoding},{from,binary:binaryOption=!0,preserveNewlines=!0}={})=>{let binary=binaryOption||BINARY_ENCODINGS.has(encoding),{subprocessStdout,waitReadableDestroy}=getSubprocessStdout(subprocess,from,concurrentStreams),{readableEncoding,readableObjectMode,readableHighWaterMark}=getReadableOptions(subprocessStdout,binary),{read,onStdoutDataDone}=getReadableMethods({subprocessStdout,subprocess,binary,encoding,preserveNewlines}),readable2=new Readable3({read,destroy:callbackify2(onReadableDestroy.bind(void 0,{subprocessStdout,subprocess,waitReadableDestroy})),highWaterMark:readableHighWaterMark,objectMode:readableObjectMode,encoding:readableEncoding});return onStdoutFinished({subprocessStdout,onStdoutDataDone,readable:readable2,subprocess}),readable2},getSubprocessStdout=(subprocess,from,concurrentStreams)=>{let subprocessStdout=getFromStream(subprocess,from),waitReadableDestroy=addConcurrentStream(concurrentStreams,subprocessStdout,"readableDestroy");return{subprocessStdout,waitReadableDestroy}},getReadableOptions=({readableEncoding,readableObjectMode,readableHighWaterMark},binary)=>binary?{readableEncoding,readableObjectMode,readableHighWaterMark}:{readableEncoding,readableObjectMode:!0,readableHighWaterMark:DEFAULT_OBJECT_HIGH_WATER_MARK},getReadableMethods=({subprocessStdout,subprocess,binary,encoding,preserveNewlines})=>{let onStdoutDataDone=createDeferred(),onStdoutData=iterateOnSubprocessStream({subprocessStdout,subprocess,binary,shouldEncode:!binary,encoding,preserveNewlines});return{read(){onRead(this,onStdoutData,onStdoutDataDone)},onStdoutDataDone}},onRead=async(readable2,onStdoutData,onStdoutDataDone)=>{try{let{value,done}=await onStdoutData.next();if(done)onStdoutDataDone.resolve();else readable2.push(value)}catch{}},onStdoutFinished=async({subprocessStdout,onStdoutDataDone,readable:readable2,subprocess,subprocessStdin})=>{try{if(await waitForSubprocessStdout(subprocessStdout),await subprocess,await safeWaitForSubprocessStdin(subprocessStdin),await onStdoutDataDone,readable2.readable)readable2.push(null)}catch(error51){await safeWaitForSubprocessStdin(subprocessStdin),destroyOtherReadable(readable2,error51)}},onReadableDestroy=async({subprocessStdout,subprocess,waitReadableDestroy},error51)=>{if(await waitForConcurrentStreams(waitReadableDestroy,subprocess))destroyOtherReadable(subprocessStdout,error51),await waitForSubprocess(subprocess,error51)},destroyOtherReadable=(stream,error51)=>{destroyOtherStream(stream,stream.readable,error51)};var init_readable=__esm(()=>{init_encoding_option();init_fd_options();init_iterate();init_concurrent();init_shared()});import{Writable as Writable3}from"node:stream";import{callbackify as callbackify3}from"node:util";var createWritable=({subprocess,concurrentStreams},{to}={})=>{let{subprocessStdin,waitWritableFinal,waitWritableDestroy}=getSubprocessStdin(subprocess,to,concurrentStreams),writable2=new Writable3({...getWritableMethods(subprocessStdin,subprocess,waitWritableFinal),destroy:callbackify3(onWritableDestroy.bind(void 0,{subprocessStdin,subprocess,waitWritableFinal,waitWritableDestroy})),highWaterMark:subprocessStdin.writableHighWaterMark,objectMode:subprocessStdin.writableObjectMode});return onStdinFinished(subprocessStdin,writable2),writable2},getSubprocessStdin=(subprocess,to,concurrentStreams)=>{let subprocessStdin=getToStream(subprocess,to),waitWritableFinal=addConcurrentStream(concurrentStreams,subprocessStdin,"writableFinal"),waitWritableDestroy=addConcurrentStream(concurrentStreams,subprocessStdin,"writableDestroy");return{subprocessStdin,waitWritableFinal,waitWritableDestroy}},getWritableMethods=(subprocessStdin,subprocess,waitWritableFinal)=>({write:onWrite.bind(void 0,subprocessStdin),final:callbackify3(onWritableFinal.bind(void 0,subprocessStdin,subprocess,waitWritableFinal))}),onWrite=(subprocessStdin,chunk,encoding,done)=>{if(subprocessStdin.write(chunk,encoding))done();else subprocessStdin.once("drain",done)},onWritableFinal=async(subprocessStdin,subprocess,waitWritableFinal)=>{if(await waitForConcurrentStreams(waitWritableFinal,subprocess)){if(subprocessStdin.writable)subprocessStdin.end();await subprocess}},onStdinFinished=async(subprocessStdin,writable2,subprocessStdout)=>{try{if(await waitForSubprocessStdin(subprocessStdin),writable2.writable)writable2.end()}catch(error51){await safeWaitForSubprocessStdout(subprocessStdout),destroyOtherWritable(writable2,error51)}},onWritableDestroy=async({subprocessStdin,subprocess,waitWritableFinal,waitWritableDestroy},error51)=>{if(await waitForConcurrentStreams(waitWritableFinal,subprocess),await waitForConcurrentStreams(waitWritableDestroy,subprocess))destroyOtherWritable(subprocessStdin,error51),await waitForSubprocess(subprocess,error51)},destroyOtherWritable=(stream,error51)=>{destroyOtherStream(stream,stream.writable,error51)};var init_writable=__esm(()=>{init_fd_options();init_concurrent();init_shared()});import{Duplex as Duplex3}from"node:stream";import{callbackify as callbackify4}from"node:util";var createDuplex=({subprocess,concurrentStreams,encoding},{from,to,binary:binaryOption=!0,preserveNewlines=!0}={})=>{let binary=binaryOption||BINARY_ENCODINGS.has(encoding),{subprocessStdout,waitReadableDestroy}=getSubprocessStdout(subprocess,from,concurrentStreams),{subprocessStdin,waitWritableFinal,waitWritableDestroy}=getSubprocessStdin(subprocess,to,concurrentStreams),{readableEncoding,readableObjectMode,readableHighWaterMark}=getReadableOptions(subprocessStdout,binary),{read,onStdoutDataDone}=getReadableMethods({subprocessStdout,subprocess,binary,encoding,preserveNewlines}),duplex2=new Duplex3({read,...getWritableMethods(subprocessStdin,subprocess,waitWritableFinal),destroy:callbackify4(onDuplexDestroy.bind(void 0,{subprocessStdout,subprocessStdin,subprocess,waitReadableDestroy,waitWritableFinal,waitWritableDestroy})),readableHighWaterMark,writableHighWaterMark:subprocessStdin.writableHighWaterMark,readableObjectMode,writableObjectMode:subprocessStdin.writableObjectMode,encoding:readableEncoding});return onStdoutFinished({subprocessStdout,onStdoutDataDone,readable:duplex2,subprocess,subprocessStdin}),onStdinFinished(subprocessStdin,duplex2,subprocessStdout),duplex2},onDuplexDestroy=async({subprocessStdout,subprocessStdin,subprocess,waitReadableDestroy,waitWritableFinal,waitWritableDestroy},error51)=>{await Promise.all([onReadableDestroy({subprocessStdout,subprocess,waitReadableDestroy},error51),onWritableDestroy({subprocessStdin,subprocess,waitWritableFinal,waitWritableDestroy},error51)])};var init_duplex=__esm(()=>{init_encoding_option();init_readable();init_writable()});var createIterable=(subprocess,encoding,{from,binary:binaryOption=!1,preserveNewlines=!1}={})=>{let binary=binaryOption||BINARY_ENCODINGS.has(encoding),subprocessStdout=getFromStream(subprocess,from),onStdoutData=iterateOnSubprocessStream({subprocessStdout,subprocess,binary,shouldEncode:!0,encoding,preserveNewlines});return iterateOnStdoutData(onStdoutData,subprocessStdout,subprocess)},iterateOnStdoutData=async function*(onStdoutData,subprocessStdout,subprocess){try{yield*onStdoutData}finally{if(subprocessStdout.readable)subprocessStdout.destroy();await subprocess}};var init_iterable=__esm(()=>{init_encoding_option();init_fd_options();init_iterate()});var addConvertedStreams=(subprocess,{encoding})=>{let concurrentStreams=initializeConcurrentStreams();subprocess.readable=createReadable.bind(void 0,{subprocess,concurrentStreams,encoding}),subprocess.writable=createWritable.bind(void 0,{subprocess,concurrentStreams}),subprocess.duplex=createDuplex.bind(void 0,{subprocess,concurrentStreams,encoding}),subprocess.iterable=createIterable.bind(void 0,subprocess,encoding),subprocess[Symbol.asyncIterator]=createIterable.bind(void 0,subprocess,encoding,{})};var init_add=__esm(()=>{init_concurrent();init_readable();init_writable();init_duplex();init_iterable()});var mergePromise=(subprocess,promise2)=>{for(let[property,descriptor]of descriptors){let value=descriptor.value.bind(promise2);Reflect.defineProperty(subprocess,property,{...descriptor,value})}},nativePromisePrototype,descriptors;var init_promise=__esm(()=>{nativePromisePrototype=(async()=>{})().constructor.prototype,descriptors=["then","catch","finally"].map((property)=>[property,Reflect.getOwnPropertyDescriptor(nativePromisePrototype,property)])});import{setMaxListeners}from"node:events";import{spawn}from"node:child_process";var execaCoreAsync=(rawFile,rawArguments,rawOptions,createNested)=>{let{file:file2,commandArguments,command,escapedCommand,startTime,verboseInfo,options,fileDescriptors}=handleAsyncArguments(rawFile,rawArguments,rawOptions),{subprocess,promise:promise2}=spawnSubprocessAsync({file:file2,commandArguments,options,startTime,verboseInfo,command,escapedCommand,fileDescriptors});return subprocess.pipe=pipeToSubprocess.bind(void 0,{source:subprocess,sourcePromise:promise2,boundOptions:{},createNested}),mergePromise(subprocess,promise2),SUBPROCESS_OPTIONS.set(subprocess,{options,fileDescriptors}),subprocess},handleAsyncArguments=(rawFile,rawArguments,rawOptions)=>{let{command,escapedCommand,startTime,verboseInfo}=handleCommand(rawFile,rawArguments,rawOptions),{file:file2,commandArguments,options:normalizedOptions}=normalizeOptions(rawFile,rawArguments,rawOptions),options=handleAsyncOptions(normalizedOptions),fileDescriptors=handleStdioAsync(options,verboseInfo);return{file:file2,commandArguments,command,escapedCommand,startTime,verboseInfo,options,fileDescriptors}},handleAsyncOptions=({timeout,signal,...options})=>{if(signal!==void 0)throw TypeError('The "signal" option has been renamed to "cancelSignal" instead.');return{...options,timeoutDuration:timeout}},spawnSubprocessAsync=({file:file2,commandArguments,options,startTime,verboseInfo,command,escapedCommand,fileDescriptors})=>{let subprocess;try{subprocess=spawn(...concatenateShell(file2,commandArguments,options))}catch(error51){return handleEarlyError({error:error51,command,escapedCommand,fileDescriptors,options,startTime,verboseInfo})}let controller=new AbortController;setMaxListeners(Number.POSITIVE_INFINITY,controller.signal);let originalStreams=[...subprocess.stdio];pipeOutputAsync(subprocess,fileDescriptors,controller),cleanupOnExit(subprocess,options,controller);let context={},onInternalError=createDeferred();subprocess.kill=subprocessKill.bind(void 0,{kill:subprocess.kill.bind(subprocess),options,onInternalError,context,controller}),subprocess.all=makeAllStream(subprocess,options),addConvertedStreams(subprocess,options),addIpcMethods(subprocess,options);let promise2=handlePromise({subprocess,options,startTime,verboseInfo,fileDescriptors,originalStreams,command,escapedCommand,context,onInternalError,controller});return{subprocess,promise:promise2}},handlePromise=async({subprocess,options,startTime,verboseInfo,fileDescriptors,originalStreams,command,escapedCommand,context,onInternalError,controller})=>{let[errorInfo,[exitCode,signal],stdioResults,allResult,ipcOutput]=await waitForSubprocessResult({subprocess,options,context,verboseInfo,fileDescriptors,originalStreams,onInternalError,controller});controller.abort(),onInternalError.resolve();let stdio=stdioResults.map((stdioResult,fdNumber)=>stripNewline(stdioResult,options,fdNumber)),all=stripNewline(allResult,options,"all"),result=getAsyncResult({errorInfo,exitCode,signal,stdio,all,ipcOutput,context,options,command,escapedCommand,startTime});return handleResult(result,verboseInfo,options)},getAsyncResult=({errorInfo,exitCode,signal,stdio,all,ipcOutput,context,options,command,escapedCommand,startTime})=>("error"in errorInfo)?makeError({error:errorInfo.error,command,escapedCommand,timedOut:context.terminationReason==="timeout",isCanceled:context.terminationReason==="cancel"||context.terminationReason==="gracefulCancel",isGracefullyCanceled:context.terminationReason==="gracefulCancel",isMaxBuffer:errorInfo.error instanceof MaxBufferError,isForcefullyTerminated:context.isForcefullyTerminated,exitCode,signal,stdio,all,ipcOutput,options,startTime,isSync:!1}):makeSuccessResult({command,escapedCommand,stdio,all,ipcOutput,options,startTime});var init_main_async=__esm(()=>{init_source();init_command();init_options();init_fd_options();init_methods();init_result();init_reject();init_early_error();init_handle_async();init_strip_newline();init_output_async();init_kill();init_cleanup();init_setup();init_all_async();init_wait_subprocess();init_add();init_promise()});var mergeOptions=(boundOptions,options)=>{let newOptions=Object.fromEntries(Object.entries(options).map(([optionName,optionValue])=>[optionName,mergeOption(optionName,boundOptions[optionName],optionValue)]));return{...boundOptions,...newOptions}},mergeOption=(optionName,boundOptionValue,optionValue)=>{if(DEEP_OPTIONS.has(optionName)&&isPlainObject2(boundOptionValue)&&isPlainObject2(optionValue))return{...boundOptionValue,...optionValue};return optionValue},DEEP_OPTIONS;var init_bind=__esm(()=>{init_specific();DEEP_OPTIONS=new Set(["env",...FD_SPECIFIC_OPTIONS])});var createExeca=(mapArguments,boundOptions,deepOptions,setBoundExeca)=>{let createNested=(mapArguments2,boundOptions2,setBoundExeca2)=>createExeca(mapArguments2,boundOptions2,deepOptions,setBoundExeca2),boundExeca=(...execaArguments)=>callBoundExeca({mapArguments,deepOptions,boundOptions,setBoundExeca,createNested},...execaArguments);if(setBoundExeca!==void 0)setBoundExeca(boundExeca,createNested,boundOptions);return boundExeca},callBoundExeca=({mapArguments,deepOptions={},boundOptions={},setBoundExeca,createNested},firstArgument,...nextArguments)=>{if(isPlainObject2(firstArgument))return createNested(mapArguments,mergeOptions(boundOptions,firstArgument),setBoundExeca);let{file:file2,commandArguments,options,isSync}=parseArguments({mapArguments,firstArgument,nextArguments,deepOptions,boundOptions});return isSync?execaCoreSync(file2,commandArguments,options):execaCoreAsync(file2,commandArguments,options,createNested)},parseArguments=({mapArguments,firstArgument,nextArguments,deepOptions,boundOptions})=>{let callArguments=isTemplateString(firstArgument)?parseTemplates(firstArgument,nextArguments):[firstArgument,...nextArguments],[initialFile,initialArguments,initialOptions]=normalizeParameters(...callArguments),mergedOptions=mergeOptions(mergeOptions(deepOptions,boundOptions),initialOptions),{file:file2=initialFile,commandArguments=initialArguments,options=mergedOptions,isSync=!1}=mapArguments({file:initialFile,commandArguments:initialArguments,options:mergedOptions});return{file:file2,commandArguments,options,isSync}};var init_create=__esm(()=>{init_parameters();init_template();init_main_sync();init_main_async();init_bind()});var mapCommandAsync=({file:file2,commandArguments})=>parseCommand(file2,commandArguments),mapCommandSync=({file:file2,commandArguments})=>({...parseCommand(file2,commandArguments),isSync:!0}),parseCommand=(command,unusedArguments)=>{if(unusedArguments.length>0)throw TypeError(`The command and its arguments must be passed as a single string: ${command} ${unusedArguments}.`);let[file2,...commandArguments]=parseCommandString(command);return{file:file2,commandArguments}},parseCommandString=(command)=>{if(typeof command!=="string")throw TypeError(`The command must be a string: ${String(command)}.`);let trimmedCommand=command.trim();if(trimmedCommand==="")return[];let tokens=[];for(let token of trimmedCommand.split(SPACES_REGEXP)){let previousToken=tokens.at(-1);if(previousToken&&previousToken.endsWith("\\"))tokens[tokens.length-1]=`${previousToken.slice(0,-1)} ${token}`;else tokens.push(token)}return tokens},SPACES_REGEXP;var init_command2=__esm(()=>{SPACES_REGEXP=/ +/g});var setScriptSync=(boundExeca,createNested,boundOptions)=>{boundExeca.sync=createNested(mapScriptSync,boundOptions),boundExeca.s=boundExeca.sync},mapScriptAsync=({options})=>getScriptOptions(options),mapScriptSync=({options})=>({...getScriptOptions(options),isSync:!0}),getScriptOptions=(options)=>({options:{...getScriptStdinOption(options),...options}}),getScriptStdinOption=({input,inputFile,stdio})=>input===void 0&&inputFile===void 0&&stdio===void 0?{stdin:"inherit"}:{},deepScriptOptions;var init_script=__esm(()=>{deepScriptOptions={preferLocal:!0}});var execa,execaSync,execaCommand,execaCommandSync,execaNode,$,sendMessage2,getOneMessage2,getEachMessage2,getCancelSignal2;var init_execa=__esm(()=>{init_create();init_command2();init_node2();init_script();init_methods();execa=createExeca(()=>({})),execaSync=createExeca(()=>({isSync:!0})),execaCommand=createExeca(mapCommandAsync),execaCommandSync=createExeca(mapCommandSync),execaNode=createExeca(mapNode),$=createExeca(mapScriptAsync,{},deepScriptOptions,setScriptSync),{sendMessage:sendMessage2,getOneMessage:getOneMessage2,getEachMessage:getEachMessage2,getCancelSignal:getCancelSignal2}=getIpcExport()});function nowTimestamp(){return Date.now()}function buildStandardColumns(){return{createdAt:integer2("created_at").notNull().$defaultFn(nowTimestamp).default(0),updatedAt:integer2("updated_at").notNull().$defaultFn(nowTimestamp).default(0)}}function buildStandardColumnsWithSoftDelete(){return{...buildStandardColumns(),inUsed:integer2("in_used").notNull().default(1)}}function buildAppendOnlyColumns(){return{createdAt:integer2("created_at").notNull().$defaultFn(nowTimestamp).default(0)}}var standardColumns,standardColumnsWithSoftDelete,appendOnlyColumns;var init_common3=__esm(()=>{init_sqlite_core();standardColumns=buildStandardColumns();standardColumnsWithSoftDelete=buildStandardColumnsWithSoftDelete();appendOnlyColumns=buildAppendOnlyColumns()});function sqlExpressionToText(value){if(typeof value!=="object"||value===null||!("queryChunks"in value))return;let chunks=value.queryChunks;if(!chunks)return;return chunks.map((chunk)=>{if("value"in chunk&&typeof chunk.value==="string")return chunk.value;if("input"in chunk&&chunk.input!==void 0)return String(chunk.input);return String(chunk.value??"?")}).join("")}function getDrizzleTableName(table3){return String(table3[Symbol.for("drizzle:Name")])}function quoteIdent(name){return`"${name.replace(/"/g,'""')}"`}function defaultToSql(value){if(value==null)return value===null?"NULL":void 0;if(typeof value==="number")return String(value);if(typeof value==="string")return`'${value.replace(/'/g,"''")}'`;if(typeof value==="boolean")return value?"1":"0";return sqlExpressionToText(value)??String(value)}function generateCreateTableSql(table3){let config2=getTableConfig(table3),columnDefs=[],tableConstraints=[],compositeUniqueCols=new Set;for(let uc of config2.uniqueConstraints)if(uc.columns.length>1)for(let col of uc.columns)compositeUniqueCols.add(col.name);let compositePkCols=new Set;for(let pk of config2.primaryKeys)if(pk.columns.length>1)for(let col of pk.columns)compositePkCols.add(col.name);for(let col of config2.columns){let parts=[quoteIdent(col.name),col.getSQLType()];if(col.primary&&!compositePkCols.has(col.name))parts.push("PRIMARY KEY");if(col.notNull)parts.push("NOT NULL");if(col.hasDefault&&col.default!==void 0){let sqlDefault=defaultToSql(col.default);if(sqlDefault!==void 0)parts.push(`DEFAULT ${sqlDefault}`)}if(col.isUnique&&!compositeUniqueCols.has(col.name))parts.push("UNIQUE");columnDefs.push(parts.join(" "))}for(let pk of config2.primaryKeys)if(pk.columns.length>1){let pkCols=pk.columns.map((c3)=>quoteIdent(c3.name)).join(", ");tableConstraints.push(`PRIMARY KEY (${pkCols})`)}for(let uc of config2.uniqueConstraints)if(uc.columns.length>1){let cols=uc.columns.map((c3)=>quoteIdent(c3.name)).join(", ");tableConstraints.push(`UNIQUE (${cols})`)}for(let fk of config2.foreignKeys){let ref=fk.reference(),localCols=ref.columns.map((c3)=>quoteIdent(c3.name)).join(", "),foreignCols=ref.foreignColumns.map((c3)=>quoteIdent(c3.name)).join(", "),foreignTableName=getDrizzleTableName(ref.foreignTable),constraint=`FOREIGN KEY (${localCols}) REFERENCES ${quoteIdent(foreignTableName)} (${foreignCols})`;if(fk.onDelete)constraint+=` ON DELETE ${fk.onDelete}`;if(fk.onUpdate)constraint+=` ON UPDATE ${fk.onUpdate}`;tableConstraints.push(constraint)}let allDefs=[...columnDefs,...tableConstraints];return`CREATE TABLE IF NOT EXISTS ${quoteIdent(config2.name)} (
|
|
247
247
|
${allDefs.join(`,
|
|
248
248
|
`)}
|
|
249
|
-
)`}var init_ddl=__esm(()=>{init_sqlite_core()});var init_classic=__esm(()=>{init_external();init_external()});var init_v4=__esm(()=>{init_classic()});function isColumnType(column2,columnTypes){return columnTypes.includes(column2.columnType)}function isWithEnum(column2){return"enumValues"in column2&&Array.isArray(column2.enumValues)&&column2.enumValues.length>0}function columnToSchema(column2,factory){let z$1=factory?.zodInstance??exports_external,coerce=factory?.coerce??{},schema;if(isWithEnum(column2))schema=column2.enumValues.length?z$1.enum(column2.enumValues):z$1.string();if(!schema){if(isColumnType(column2,["PgGeometry","PgPointTuple"]))schema=z$1.tuple([z$1.number(),z$1.number()]);else if(isColumnType(column2,["PgGeometryObject","PgPointObject"]))schema=z$1.object({x:z$1.number(),y:z$1.number()});else if(isColumnType(column2,["PgHalfVector","PgVector"]))schema=z$1.array(z$1.number()),schema=column2.dimensions?schema.length(column2.dimensions):schema;else if(isColumnType(column2,["PgLine"]))schema=z$1.tuple([z$1.number(),z$1.number(),z$1.number()]);else if(isColumnType(column2,["PgLineABC"]))schema=z$1.object({a:z$1.number(),b:z$1.number(),c:z$1.number()});else if(isColumnType(column2,["PgArray"]))schema=z$1.array(columnToSchema(column2.baseColumn,factory)),schema=column2.size?schema.length(column2.size):schema;else if(column2.dataType==="array")schema=z$1.array(z$1.any());else if(column2.dataType==="number")schema=numberColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="bigint")schema=bigintColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="boolean")schema=coerce===!0||coerce.boolean?z$1.coerce.boolean():z$1.boolean();else if(column2.dataType==="date")schema=coerce===!0||coerce.date?z$1.coerce.date():z$1.date();else if(column2.dataType==="string")schema=stringColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="json")schema=jsonSchema;else if(column2.dataType==="custom")schema=z$1.any();else if(column2.dataType==="buffer")schema=bufferSchema}if(!schema)schema=z$1.any();return schema}function numberColumnToSchema(column2,z2,coerce){let unsigned=column2.getSQLType().includes("unsigned"),min,max,integer4=!1;if(isColumnType(column2,["MySqlTinyInt","SingleStoreTinyInt"]))min=unsigned?0:CONSTANTS.INT8_MIN,max=unsigned?CONSTANTS.INT8_UNSIGNED_MAX:CONSTANTS.INT8_MAX,integer4=!0;else if(isColumnType(column2,["PgSmallInt","PgSmallSerial","MySqlSmallInt","SingleStoreSmallInt"]))min=unsigned?0:CONSTANTS.INT16_MIN,max=unsigned?CONSTANTS.INT16_UNSIGNED_MAX:CONSTANTS.INT16_MAX,integer4=!0;else if(isColumnType(column2,["PgReal","MySqlFloat","MySqlMediumInt","SingleStoreMediumInt","SingleStoreFloat"]))min=unsigned?0:CONSTANTS.INT24_MIN,max=unsigned?CONSTANTS.INT24_UNSIGNED_MAX:CONSTANTS.INT24_MAX,integer4=isColumnType(column2,["MySqlMediumInt","SingleStoreMediumInt"]);else if(isColumnType(column2,["PgInteger","PgSerial","MySqlInt","SingleStoreInt"]))min=unsigned?0:CONSTANTS.INT32_MIN,max=unsigned?CONSTANTS.INT32_UNSIGNED_MAX:CONSTANTS.INT32_MAX,integer4=!0;else if(isColumnType(column2,["PgDoublePrecision","MySqlReal","MySqlDouble","SingleStoreReal","SingleStoreDouble","SQLiteReal"]))min=unsigned?0:CONSTANTS.INT48_MIN,max=unsigned?CONSTANTS.INT48_UNSIGNED_MAX:CONSTANTS.INT48_MAX;else if(isColumnType(column2,["PgBigInt53","PgBigSerial53","MySqlBigInt53","MySqlSerial","SingleStoreBigInt53","SingleStoreSerial","SQLiteInteger"]))unsigned=unsigned||isColumnType(column2,["MySqlSerial","SingleStoreSerial"]),min=unsigned?0:Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER,integer4=!0;else if(isColumnType(column2,["MySqlYear","SingleStoreYear"]))min=1901,max=2155,integer4=!0;else min=Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER;let schema=coerce===!0||coerce?.number?integer4?z2.coerce.number():z2.coerce.number().int():integer4?z2.int():z2.number();return schema=schema.gte(min).lte(max),schema}function bigintColumnToSchema(column2,z2,coerce){let unsigned=column2.getSQLType().includes("unsigned"),min=unsigned?0n:CONSTANTS.INT64_MIN,max=unsigned?CONSTANTS.INT64_UNSIGNED_MAX:CONSTANTS.INT64_MAX;return(coerce===!0||coerce?.bigint?z2.coerce.bigint():z2.bigint()).gte(min).lte(max)}function stringColumnToSchema(column2,z2,coerce){if(isColumnType(column2,["PgUUID"]))return z2.uuid();let max,regex,fixed=!1;if(isColumnType(column2,["PgVarchar","SQLiteText"]))max=column2.length;else if(isColumnType(column2,["MySqlVarChar","SingleStoreVarChar"]))max=column2.length??CONSTANTS.INT16_UNSIGNED_MAX;else if(isColumnType(column2,["MySqlText","SingleStoreText"]))if(column2.textType==="longtext")max=CONSTANTS.INT32_UNSIGNED_MAX;else if(column2.textType==="mediumtext")max=CONSTANTS.INT24_UNSIGNED_MAX;else if(column2.textType==="text")max=CONSTANTS.INT16_UNSIGNED_MAX;else max=CONSTANTS.INT8_UNSIGNED_MAX;if(isColumnType(column2,["PgChar","MySqlChar","SingleStoreChar"]))max=column2.length,fixed=!0;if(isColumnType(column2,["PgBinaryVector"]))regex=/^[01]+$/,max=column2.dimensions;let schema=coerce===!0||coerce?.string?z2.coerce.string():z2.string();return schema=regex?schema.regex(regex):schema,max&&fixed?schema.length(max):max?schema.max(max):schema}function getColumns(tableLike){return isTable(tableLike)?getTableColumns(tableLike):getViewSelectedFields(tableLike)}function handleColumns(columns2,refinements,conditions2,factory){let columnSchemas={};for(let[key,selected]of Object.entries(columns2)){if(!is(selected,Column)&&!is(selected,SQL)&&!is(selected,SQL.Aliased)&&typeof selected==="object"){let columns3=isTable(selected)||isView(selected)?getColumns(selected):selected;columnSchemas[key]=handleColumns(columns3,refinements[key]??{},conditions2,factory);continue}let refinement=refinements[key];if(refinement!==void 0&&typeof refinement!=="function"){columnSchemas[key]=refinement;continue}let column2=is(selected,Column)?selected:void 0,schema=column2?columnToSchema(column2,factory):exports_external.any(),refined=typeof refinement==="function"?refinement(schema):schema;if(conditions2.never(column2))continue;else columnSchemas[key]=refined;if(column2){if(conditions2.nullable(column2))columnSchemas[key]=columnSchemas[key].nullable();if(conditions2.optional(column2))columnSchemas[key]=columnSchemas[key].optional()}}return exports_external.object(columnSchemas)}function handleEnum(enum_,factory){return(factory?.zodInstance??exports_external).enum(enum_.enumValues)}var CONSTANTS,isPgEnum2,literalSchema,jsonSchema,bufferSchema,selectConditions,insertConditions,createSelectSchema=(entity2,refine2)=>{if(isPgEnum2(entity2))return handleEnum(entity2);let columns2=getColumns(entity2);return handleColumns(columns2,refine2??{},selectConditions)},createInsertSchema=(entity2,refine2)=>{let columns2=getColumns(entity2);return handleColumns(columns2,refine2??{},insertConditions)};var init_drizzle_zod=__esm(()=>{init_v4();init_drizzle_orm();CONSTANTS={INT8_MIN:-128,INT8_MAX:127,INT8_UNSIGNED_MAX:255,INT16_MIN:-32768,INT16_MAX:32767,INT16_UNSIGNED_MAX:65535,INT24_MIN:-8388608,INT24_MAX:8388607,INT24_UNSIGNED_MAX:16777215,INT32_MIN:-2147483648,INT32_MAX:2147483647,INT32_UNSIGNED_MAX:4294967295,INT48_MIN:-140737488355328,INT48_MAX:140737488355327,INT48_UNSIGNED_MAX:281474976710655,INT64_MIN:-9223372036854775808n,INT64_MAX:9223372036854775807n,INT64_UNSIGNED_MAX:18446744073709551615n};isPgEnum2=isWithEnum,literalSchema=exports_external.union([exports_external.string(),exports_external.number(),exports_external.boolean(),exports_external.null()]),jsonSchema=exports_external.union([literalSchema,exports_external.record(exports_external.string(),exports_external.any()),exports_external.array(exports_external.any())]),bufferSchema=exports_external.custom((v)=>v instanceof Buffer);selectConditions={never:()=>!1,optional:()=>!1,nullable:(column2)=>!column2.notNull},insertConditions={never:(column2)=>column2?.generated?.type==="always"||column2?.generatedIdentity?.type==="always",optional:(column2)=>!column2.notNull||column2.notNull&&column2.hasDefault,nullable:(column2)=>!column2.notNull}});function defineTable(name,columns2){let table3=sqliteTable(name,columns2),insert2,select3,ddl;return{table:table3,get insertSchema(){if(insert2===void 0)insert2=createInsertSchema(table3);return insert2},get selectSchema(){if(select3===void 0)select3=createSelectSchema(table3);return select3},get createTableSql(){if(ddl===void 0)ddl=generateCreateTableSql(table3);return ddl}}}var init_define_table=__esm(()=>{init_sqlite_core();init_drizzle_zod();init_ddl()});var init_schema=__esm(()=>{init_sqlite_core();init_define_table();init_common3()});function getProcessEnv(){return getEnvVars()}var configSchema2;var init_config=__esm(()=>{init_dist();init_dist2();init_zod();configSchema2=exports_external.object({app:exports_external.object({name:exports_external.string().default("app"),env:exports_external.enum(["development","staging","production","test"]).default("development"),port:exports_external.number().int().positive().default(3000)}).default({name:"app",env:"development",port:3000}),database:exports_external.object({url:exports_external.string().default(":memory:")}).default({url:":memory:"}),logging:exports_external.object({level:exports_external.enum(["trace","debug","info","warn","error","fatal"]).default("info"),console:exports_external.boolean().default(!0),file:exports_external.boolean().default(!1),filePath:exports_external.string().optional(),json:exports_external.boolean().default(!1)}).default({level:"info",console:!0,file:!1,json:!1})})});import{appendFileSync as appendFileSync2,cpSync,createReadStream as createReadStream2,createWriteStream as createWriteStream2,existsSync,mkdirSync,readdirSync,readFileSync as readFileSync3,realpathSync,renameSync,rmSync,statSync as statSync2,writeFileSync as writeFileSync2}from"node:fs";import{dirname,resolve as resolvePath}from"node:path";function createNodeFileSystem(root,paths){let projectRoot=root??findProjectRoot(paths?.cwd??process.cwd());return{getProjectRoot:()=>projectRoot,resolve:(...segments)=>resolvePath(projectRoot,...segments),exists:(path6)=>existsSync(path6),readFile:(path6)=>readFileSync3(path6,"utf-8"),readFileStream:async function*(path6){let stream=createReadStream2(path6,{encoding:"utf-8"}),buffer="";for await(let chunk of stream){buffer+=chunk;let lines=buffer.split(/\r?\n/);buffer=lines.pop()??"";for(let line of lines)yield line}if(buffer.length>0)yield buffer},writeFile:(path6,content)=>{ensureParentDir(path6),writeFileSync2(path6,content,"utf-8")},appendFile:(path6,content)=>{ensureParentDir(path6),appendFileSync2(path6,content,"utf-8")},ensureDir:(path6)=>{mkdirSync(path6,{recursive:!0})},readDir:(path6)=>readdirSync(path6),deleteFile:(path6)=>{rmSync(path6,{recursive:!0,force:!0})},rename:(src,dest)=>{renameSync(src,dest)},copy:(src,dest)=>{cpSync(src,dest,{recursive:!0})},createWriteStream:(path6)=>{return ensureParentDir(path6),createWriteStream2(path6,{flags:"a"})},stat:(path6)=>{try{let s2=statSync2(path6);return{isFile:()=>s2.isFile(),isDirectory:()=>s2.isDirectory(),size:s2.size,mtimeMs:s2.mtimeMs}}catch{return null}},realPath:(path6)=>realpathSync(path6)}}function ensureParentDir(filePath){let dir=dirname(filePath);if(!existsSync(dir))mkdirSync(dir,{recursive:!0})}function findProjectRoot(startDir){let dir=resolvePath(startDir),root=resolvePath("/");while(dir!==root){if(existsSync(resolvePath(dir,"bun.lock"))||existsSync(resolvePath(dir,"package.json")))return dir;let parent=resolvePath(dir,"..");if(parent===dir)break;dir=parent}return startDir}var init_file_system_node=()=>{};function resolveDeadline(optionTimeout,defaultTimeout){if(optionTimeout===null)return null;let candidate=optionTimeout===void 0?defaultTimeout:optionTimeout;if(candidate===void 0||candidate===null)return candidate;if(!Number.isInteger(candidate)||candidate<=0||candidate>2147483647)throw TypeError(`Process timeout must be a positive integer within the native timer range (1-2147483647 ms), got ${String(candidate)}`);return candidate}function resolveKillGraceMs(optionGraceMs){if(optionGraceMs===void 0)return 5000;if(!Number.isInteger(optionGraceMs)||optionGraceMs<0||optionGraceMs>2147483647)throw TypeError(`Process killGraceMs must be a non-negative integer within the native timer range (0-2147483647 ms), got ${String(optionGraceMs)}`);return optionGraceMs}function groupExists(pid){try{return process.kill(-pid,0),!0}catch(error51){return error51.code==="EPERM"}}function signalGroup(pid,signal){try{return process.kill(-pid,signal),!0}catch{return!1}}async function waitForGroupExit(pid,budgetMs){let giveUpAt=Date.now()+budgetMs;while(groupExists(pid)){if(Date.now()>=giveUpAt)return!1;await new Promise((resolve)=>setTimeout(resolve,25))}return!0}async function reapProcessGroup(pid,graceMs){if(!signalGroup(pid,"SIGTERM"))return!1;if(await waitForGroupExit(pid,graceMs))return!0;return signalGroup(pid,"SIGKILL"),await waitForGroupExit(pid,2000),!0}function ownProcessGroupLifecycle(ownership){let{pid,graceMs}=ownership,trigger,termination,timer,initiate=(reason)=>{if(trigger!==void 0)return;trigger=reason,termination=reapProcessGroup(pid,graceMs)};if(ownership.deadlineMs!==void 0)timer=setTimeout(()=>initiate("timeout"),ownership.deadlineMs);let onAbort=()=>initiate("cancelled");if(ownership.signal!==void 0)if(ownership.signal.aborted)onAbort();else ownership.signal.addEventListener("abort",onAbort,{once:!0});return{finish:async()=>{if(trigger===void 0){await reapProcessGroup(pid,graceMs);return}return await termination?trigger:void 0},stop:()=>{if(timer!==void 0)clearTimeout(timer);ownership.signal?.removeEventListener("abort",onAbort)}}}import{isatty}from"node:tty";function processEventSeverity(reason,exitCode){if(reason==="error")return"error";if(reason==="timeout"||reason==="cancelled")return"warning";if(exitCode!==null&&exitCode!==0)return"warning";return"info"}function resolveChildEnv(env2,envMode){if(envMode==="replace")return env2;let merged={};for(let[key,value]of Object.entries(getProcessEnv()))if(value!==void 0)merged[key]=value;return{...merged,...env2}}class NodeProcessExecutor{config;constructor(config2={}){this.config=config2}async run(options){return this.trace("process.run",()=>this.runUntraced(options))}async runUntraced(options){let args=options.args??[],deadline=resolveDeadline(options.timeout,this.config.defaultTimeout),killGraceMs=resolveKillGraceMs(options.killGraceMs),groupOwned=process.platform!=="win32"&&(typeof deadline==="number"||options.signal!==void 0),execaOptions=buildExecaOptions({cwd:options.cwd??this.config.paths?.cwd,env:options.env,timeout:typeof deadline==="number"?deadline:void 0,maxOutput:options.maxOutput??this.config.defaultMaxOutput,rejectOnError:options.rejectOnError??!1,outputPolicy:this.config.output,forceBuffered:options.forceBuffered??!1,signal:options.signal,groupOwned}),startedAt=Date.now(),startedIso=new Date(startedAt).toISOString(),registryId=this.beginRegistry(options.command,args,{label:options.label,source:options.source??"one-shot",teamId:options.teamId,agentId:options.agentId,startedAt:startedIso});this.emitProcessEvent("process.started",{command:options.command,args,exitCode:null,durationMs:0,reason:"exit",timestamp:startedIso,severity:"info",...options.label!==void 0?{label:options.label}:{}});let ownership;try{let subprocess=execa(options.command,args,execaOptions);if(groupOwned&&subprocess.pid!==void 0)ownership=ownProcessGroupLifecycle({pid:subprocess.pid,deadlineMs:typeof deadline==="number"?deadline:void 0,signal:options.signal,graceMs:killGraceMs});if(subprocess.pid!==void 0){if(this.config.registry?.update(registryId,{pid:subprocess.pid}),options.onSpawn!==void 0)try{options.onSpawn(subprocess.pid)}catch{}}let stopOwnedTermination=()=>ownership?.stop();observeOutput(subprocess.stdout,"stdout",options.onOutput),observeOutput(subprocess.stderr,"stderr",options.onOutput);let result=await subprocess.finally(stopOwnedTermination),ownedOutcome=ownership!==void 0?await ownership.finish():void 0,processResult={command:options.command,args,exitCode:result.exitCode??null,stdout:asString(result.stdout),stderr:asString(result.stderr),...result.signalDescription!==void 0?{signal:result.signalDescription}:{},durationMs:result.durationMs,outcome:ownedOutcome??(result.signalDescription!==void 0?"signal":"exit")};return this.completeRegistry(registryId,processResult.exitCode),this.emitExitedFromResult(options,processResult,result),processResult}catch(error51){let failed=error51,ownedOutcome=ownership!==void 0?await ownership.finish():void 0,processResult={command:options.command,args,exitCode:failed.exitCode??null,stdout:asString(failed.stdout),stderr:asString(failed.stderr),...failed.signalDescription!==void 0?{signal:failed.signalDescription}:failed.signal!==void 0?{signal:failed.signal}:{},durationMs:failed.durationMs??Date.now()-startedAt,outcome:ownedOutcome??classifyFailedCompletion(failed)};if(this.completeRegistry(registryId,processResult.exitCode),this.emitExitedFromResult(options,processResult,error51,error51),options.rejectOnError)throw error51;return processResult}}runStreaming(options){let args=options.args??[],startedAt=Date.now(),startedIso=new Date(startedAt).toISOString(),registryId=this.beginRegistry(options.command,args,{label:options.label,source:options.source??"other",teamId:options.teamId,agentId:options.agentId,startedAt:startedIso});try{this.emitProcessEvent("process.started",{command:options.command,args,exitCode:null,durationMs:0,reason:"exit",timestamp:startedIso,severity:"info",...options.label!==void 0?{label:options.label}:{}});let subprocess=Bun.spawn({cmd:[options.command,...args],stdin:"pipe",stdout:"pipe",stderr:"pipe",...options.cwd!==void 0?{cwd:options.cwd}:{},...options.env!==void 0?{env:resolveChildEnv(options.env,options.envMode)}:{}}),pipe2=new BunPipeProcess(subprocess);if(pipe2.pid!==null)this.config.registry?.update(registryId,{pid:pipe2.pid});return new ObservedPipeProcess(pipe2,this.config.events,{command:options.command,args,startedAt,registry:this.config.registry,registryId,...options.label!==void 0?{label:options.label}:{}})}catch(error51){throw this.completeRegistry(registryId,null),this.emitProcessEvent("process.exited",{command:options.command,args,exitCode:null,durationMs:0,reason:"error",timestamp:new Date().toISOString(),severity:processEventSeverity("error",null),...options.label!==void 0?{label:options.label}:{},error:errorMessage(error51)}),error51}}async trace(name,fn){if(this.config.tracer===void 0)return await fn();return await this.config.tracer.traceAsync(name,async()=>await fn())}beginRegistry(command,args,meta3){let registry2=this.config.registry;if(!registry2)return"";return registry2.begin({command,args,source:meta3.source,startedAt:meta3.startedAt,...meta3.label!==void 0?{label:meta3.label}:{},...meta3.teamId!==void 0?{teamId:meta3.teamId}:{},...meta3.agentId!==void 0?{agentId:meta3.agentId}:{}})}completeRegistry(id,exitCode,pid){if(!id||!this.config.registry)return;this.config.registry.complete(id,{exitCode,...pid!==void 0?{pid}:{}})}emitExitedFromResult(options,result,completion,error51){let reason=result.outcome??(isTimedOut(completion)?"timeout":result.signal!==void 0?"signal":error51?"error":"exit");this.emitProcessEvent("process.exited",{command:result.command,args:result.args,exitCode:result.exitCode,...result.signal!==void 0?{signal:result.signal}:{},durationMs:result.durationMs,reason,timestamp:new Date().toISOString(),severity:processEventSeverity(reason,result.exitCode),...options.label!==void 0?{label:options.label}:{},...error51!==void 0?{error:errorMessage(error51)}:{}})}emitProcessEvent(event,detail){this.config.events?.emit(event,detail)}}class ObservedPipeProcess{inner;killedWith;exited;constructor(inner,events,context){this.inner=inner,this.exited=inner.exited.then((exitCode)=>{if(context.registry&&context.registryId)context.registry.complete(context.registryId,{exitCode,...inner.pid!==null?{pid:inner.pid}:{}});return events?.emit("process.exited",{command:context.command,args:context.args,exitCode,...this.killedWith!==void 0?{signal:String(this.killedWith)}:{},durationMs:Date.now()-context.startedAt,reason:this.killedWith!==void 0?"signal":"exit",timestamp:new Date().toISOString(),severity:processEventSeverity(this.killedWith!==void 0?"signal":"exit",exitCode),...context.label!==void 0?{label:context.label}:{}}),exitCode})}get pid(){return this.inner.pid}get stdout(){return this.inner.stdout}get stderr(){return this.inner.stderr}writeStdin(input){this.inner.writeStdin(input)}endStdin(){this.inner.endStdin()}kill(signal){this.killedWith=signal,this.inner.kill(signal)}}class BunPipeProcess{subprocess;writer;constructor(subprocess){this.subprocess=subprocess,this.writer=subprocess.stdin}get pid(){return this.subprocess.pid??null}get stdout(){return isReadableStream3(this.subprocess.stdout)?this.subprocess.stdout:null}get stderr(){return isReadableStream3(this.subprocess.stderr)?this.subprocess.stderr:null}get exited(){return this.subprocess.exited}writeStdin(input){this.writer.write(input),this.writer.flush?.()}endStdin(){this.writer.end?.()}kill(signal){this.subprocess.kill(signal)}}function buildExecaOptions(opts){let mode=opts.forceBuffered?"buffered":opts.outputPolicy?.mode??"buffered",streamToTerminal=mode==="stream"&&(opts.outputPolicy?.mode==="stream"?opts.outputPolicy.isTTY??process.stdout.isTTY??isatty(1):!1);return{reject:opts.rejectOnError,stdin:"ignore",stripFinalNewline:!0,...mode==="pipe"?{stdout:"pipe",stderr:"pipe"}:streamToTerminal?{stdout:["inherit","pipe"],stderr:["inherit","pipe"]}:{all:!0},...opts.cwd!==void 0?{cwd:opts.cwd}:{},...opts.env!==void 0?{env:opts.env}:{},...opts.timeout!==void 0&&!opts.groupOwned?{timeout:opts.timeout}:{},...opts.maxOutput!==void 0?{maxBuffer:opts.maxOutput}:{},...opts.groupOwned?{detached:!0}:{},...opts.signal!==void 0&&!opts.groupOwned?{cancelSignal:opts.signal}:{}}}function classifyFailedCompletion(error51){if(error51.timedOut===!0)return"timeout";if(error51.isCanceled===!0)return"cancelled";if(error51.isTerminated===!0||error51.signalDescription!==void 0||error51.signal!==void 0)return"signal";return"error"}function observeOutput(stream,name,observer){if(!stream||!observer)return;let decoder=new TextDecoder,emit=(chunk)=>{try{observer({stream:name,chunk,timestamp:new Date().toISOString()})}catch{}};stream.on("data",(chunk)=>{emit(typeof chunk==="string"?chunk:decoder.decode(chunk,{stream:!0}))}),stream.on("end",()=>{let tail=decoder.decode();if(tail.length>0)emit(tail)})}function asString(value){if(typeof value==="string")return value;if(value instanceof Uint8Array)return new TextDecoder().decode(value);if(Array.isArray(value))return value.map(String).join("");return""}function isReadableStream3(value){return value instanceof ReadableStream}function isTimedOut(error51){return typeof error51==="object"&&error51!==null&&"timedOut"in error51&&error51.timedOut===!0}function errorMessage(error51){return error51 instanceof Error?error51.message:String(error51)}var init_process_executor=__esm(()=>{init_execa();init_config()});var init_context=()=>{};var SEP;var init_path=__esm(()=>{SEP=globalThis.process?.platform==="win32"?"\\":"/"});var init_schema_validation=__esm(()=>{init_dist2()});var init_types=()=>{};var init_dist3=__esm(()=>{init_file_system_node();init_process_executor();init_config();init_context();init_path();init_schema_validation();init_types()});init_zod();var RFC3339_PATTERN=/^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(\.\d+)?([Zz]|[+-]\d{2}:\d{2})$/;function isRfc3339Timestamp(value){return RFC3339_PATTERN.test(value)&&Number.isFinite(Date.parse(value))}var ALL_FINDING_CODES=["L1.markdown-parse","L1.schema-validation","L2.missing-required-section","L2.forbidden-section","L2.disallowed-section","L2.heading-level","L2.section-order","L3.requirements-format","L3.requirements-checkbox","L3.requirements-empty","L3.ac-empty","L3.ac-requirement-coverage","L3.solution-file-line","L3.review-priority-table","L3.required-section-placeholder","L3.plan-format","L3.unchecked-checklist","L3.ac-checklist-text","L3.ac-bdd-error","L3.ac-bdd-warning","L3.ac-bdd-invalid","L3.scope-delineation","L3.one-active-goal","L3.children-limit","L3.review-testing-contradiction","L4.design-placeholder","L4.feature-not-found","L4.feature-terminal","L4.missing-feature-id","L4.parent-not-found","L4.dependency-not-found","L4.rollup-subtasks-open","L4.rollup-parent-open","L4.rollup-missing-roster","L4.rollup-roster-not-declared-dependency","L4.readiness-blocked","L4.prose-prerequisite-unlisted","L4.prerequisite-cycle","L4.prerequisite-not-done","L4.gate-language","L4.linked-task-parse-failed","L4.orphan-scenarios","L4.uncovered-task-scenario","L4.uncovered-feature-scenario","L4.verdict-rows-match-no-scenario","L4.verifying-incomplete-tasks","L4.dogfood-missing","L4.stale-line-anchor","L4.anchor-subject-mismatch","L4.malformed-verdict-artifact","L4.scenario-unverified","L4.testing-verdict-stub","L4.evidence-not-recoverable","L4.feature-receipt-missing","L4.feature-receipt-malformed","L4.feature-receipt-cross-feature","L4.feature-receipt-divergent","L4.feature-receipt-failed","L4.feature-receipt-run","L4.feature-receipt-stale","L4.feature-receipt-contract"];function isFindingCode(code){return ALL_FINDING_CODES.includes(code)}init_zod();var projectEntrySchema=exports_external.object({name:exports_external.string().min(1),path:exports_external.string().min(1),port:exports_external.number().int().nonnegative().default(0)}),projectsFileSchema=exports_external.object({schema_version:exports_external.literal(1).default(1),projects:exports_external.array(projectEntrySchema).default([])});init_zod();var slashCommandCategorySchema=exports_external.enum(["git","dev","sys","harness"]),slashCommandItemSchema=exports_external.object({name:exports_external.string().min(1),description:exports_external.string().min(1),category:slashCommandCategorySchema.default("dev"),argumentHint:exports_external.string().optional(),tags:exports_external.array(exports_external.string()).default([]),role:exports_external.string().optional(),source:exports_external.string().optional()}),slashCommandsFileSchema=exports_external.object({version:exports_external.number().int().default(1),updatedAt:exports_external.string().optional(),commands:exports_external.array(slashCommandItemSchema).default([])});var SPUR_LOG_LEVELS=["debug","info","warn","error"],DEFAULT_TASKS_DIR="docs/tasks",DEFAULT_FEATURES_DIR="docs/features",DEFAULT_DATABASE_URL=".spur/spur.db";var folderConfigSchema=exports_external.object({baseCounter:exports_external.number().int().nonnegative().default(0),label:exports_external.string().optional()});function folderPathWithDefault(defaultPath){return exports_external.preprocess((v)=>v==null?void 0:v,exports_external.string().default(defaultPath))}var tasksConfigSchema=exports_external.object({folders:exports_external.record(exports_external.string(),folderConfigSchema).default({}),active:folderPathWithDefault(DEFAULT_TASKS_DIR),severity:exports_external.record(exports_external.string(),exports_external.enum(["error","warning","off"])).optional()}).superRefine((data,ctx)=>{if(data.severity){for(let code of Object.keys(data.severity))if(!isFindingCode(code))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["severity",code],message:`Unknown finding code "${code}" in severity overrides map`})}}),featuresConfigSchema=exports_external.object({dir:folderPathWithDefault(DEFAULT_FEATURES_DIR)}),EXECUTOR_CAPABILITY_TIERS=["cheap","standard","capable-1","capable-2","capable-3"];function normalizeExecutorTier(value){return value==="capable"?"capable-1":value}var executorCapabilityTierSchema=exports_external.preprocess((value)=>{if(value===void 0||value===null)return;return typeof value==="string"?normalizeExecutorTier(value):value},exports_external.enum(EXECUTOR_CAPABILITY_TIERS).optional()),AGENT_ROLE_NAMES=["scribe","coder","reviewer","planner"];var EXECUTION_CAPABILITY_AXES=["fsRead","fsWrite","networkEgress","processSpawn","externalMutationApproval"],SESSION_CAPABILITY_AXES=["resumeById","sessionDir","persistentStdin","structuredOutput"],AGENT_RUN_CAPABILITY_AXES=[...EXECUTION_CAPABILITY_AXES,...SESSION_CAPABILITY_AXES],EXECUTION_CAPABILITY_STATES=["enforced","available","unavailable","unknown"],EXECUTION_CAPABILITY_PROVENANCES=["native-known","operator-configured","unattested"],ExecutionCapabilityAttestationSchema=exports_external.object({state:exports_external.enum(EXECUTION_CAPABILITY_STATES),provenance:exports_external.enum(EXECUTION_CAPABILITY_PROVENANCES)}),ExecutionCapabilitiesSchema=exports_external.object({version:exports_external.literal(1),axes:exports_external.partialRecord(exports_external.enum(EXECUTION_CAPABILITY_AXES),ExecutionCapabilityAttestationSchema)}),EXECUTION_CAPABILITY_REQUIREMENTS=["available","enforced"],RequiresCapabilitiesSchema=exports_external.partialRecord(exports_external.enum(AGENT_RUN_CAPABILITY_AXES),exports_external.enum(EXECUTION_CAPABILITY_REQUIREMENTS)),executorAvailabilityOwnerSchema=exports_external.enum(["operator","quota","probe"]),executorDisabledObjectSchema=exports_external.object({owner:executorAvailabilityOwnerSchema,since:exports_external.string().refine(isRfc3339Timestamp,{message:"since must be an RFC 3339 timestamp"}),reason:exports_external.string().min(1)}),AgentExecutorConfigSchema=exports_external.object({name:exports_external.string().min(1),agent:exports_external.string().min(1),model:exports_external.string().min(1).optional(),tier:executorCapabilityTierSchema.optional(),executionCapabilities:ExecutionCapabilitiesSchema.optional(),disabled:exports_external.union([exports_external.boolean(),executorDisabledObjectSchema]).default(!1)});var AgentRoleConfigSchema=exports_external.object({tier:exports_external.enum(EXECUTOR_CAPABILITY_TIERS).optional(),stages:exports_external.array(exports_external.string().min(1)).min(1).optional()});var FleetMemberSchema=exports_external.object({id:exports_external.string().min(1).optional(),role:exports_external.enum(AGENT_ROLE_NAMES,{error:(issue2)=>Error(`Unknown role "${issue2.input}" — expected one of: ${AGENT_ROLE_NAMES.join(", ")}`)}).optional(),executor:exports_external.string().min(1).optional(),purpose:exports_external.string().optional(),enabled:exports_external.boolean().optional()}),FLEET_STRATEGIES=["rest","gtd"],FleetMemberEntrySchema=FleetMemberSchema.superRefine((member,ctx)=>{if(member.role===void 0&&member.executor===void 0)ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:"must declare a role or an executor — at least one is required"})}),AgentFleetSchema=exports_external.object({enabled:exports_external.boolean().default(!1),strategy:exports_external.enum(FLEET_STRATEGIES).default("rest"),orchestrator:exports_external.string().min(1).optional(),members:exports_external.array(FleetMemberEntrySchema).default([])});var AgentOutputConfigSchema=exports_external.object({"max-bytes":exports_external.number().int().positive().optional(),"max-lines":exports_external.number().int().positive().optional()}),AgentConfigSchema=exports_external.object({default:exports_external.string().optional(),executors:exports_external.array(AgentExecutorConfigSchema).optional(),roles:exports_external.record(exports_external.string(),AgentRoleConfigSchema).optional(),output:AgentOutputConfigSchema.optional(),sessionAffinity:exports_external.boolean().optional(),fleet:AgentFleetSchema.optional()}).superRefine((value,ctx)=>{for(let key of Object.keys(value.roles??{}))if(!AGENT_ROLE_NAMES.includes(key))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["roles",key],message:`Unknown role "${key}" — expected one of: ${AGENT_ROLE_NAMES.join(", ")}`});let executors=value.executors,executorNames=new Set;if(executors!==void 0){let seen=new Set;for(let[index,executor]of executors.entries()){if(seen.has(executor.name))ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Duplicate executor name: ${executor.name}`,path:["executors",index,"name"]});if(executor.name==="inline"||executor.name==="auto")ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Executor name "${executor.name}" is reserved (the --agent selector value '${executor.name}' has fixed semantics); rename executor at index ${index}.`,path:["executors",index,"name"]});if(AGENT_ROLE_NAMES.includes(executor.name))ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Executor name "${executor.name}" collides with the role selector namespace ("${executor.name}"); rename executor at index ${index}.`,path:["executors",index,"name"]});seen.add(executor.name),executorNames.add(executor.name)}}}),RulesConfigSchema=exports_external.object({paths:exports_external.array(exports_external.string()).optional()}),WorkflowsConfigSchema=exports_external.object({paths:exports_external.array(exports_external.string()).optional()}),WorkflowConfigSchema=exports_external.object({hitlDecisionMaker:exports_external.boolean().optional(),logRetentionDays:exports_external.number().int().positive().default(30)}),RedactionConfigSchema=exports_external.object({enabled:exports_external.boolean().optional()}),HistoryRefreshConfigSchema=exports_external.object({on_completion:exports_external.boolean().default(!1),debounce_ms:exports_external.number().int().min(1000).default(600000)}),HistoryConfigSchema=exports_external.object({refresh:HistoryRefreshConfigSchema.optional()}),VersionCarrierEntrySchema=exports_external.looseObject({type:exports_external.string().min(1)}),BuilderBumpVerConfigSchema=exports_external.object({tagVersionSeparator:exports_external.string().min(1).default("-v"),aggregatePackage:exports_external.string().min(1).optional(),publishWorkflow:exports_external.string().min(1).default("publish.yml"),releaseCommitType:exports_external.string().min(1).default("chore"),releaseCommitScope:exports_external.string().min(1).default("release"),ghRunListLimit:exports_external.number().int().positive().default(5),versionCarriers:exports_external.array(VersionCarrierEntrySchema).default([])}),BuilderConfigSchema=exports_external.object({"bump-ver":BuilderBumpVerConfigSchema.optional()});var bootstrapOptionsSchema=exports_external.object({options:exports_external.record(exports_external.string(),exports_external.unknown()).optional()}),spurConfigSchema=exports_external.object({version:exports_external.string().optional(),name:exports_external.string().optional(),bootstrap:bootstrapOptionsSchema.optional(),agent:AgentConfigSchema.optional(),rules:RulesConfigSchema.optional(),workflows:WorkflowsConfigSchema.optional(),workflow:WorkflowConfigSchema.optional(),redaction:RedactionConfigSchema.optional(),history:HistoryConfigSchema.optional(),builder:BuilderConfigSchema.optional(),tasks:tasksConfigSchema.optional(),features:featuresConfigSchema.optional()});var configSchema=exports_external.object({database:exports_external.object({url:exports_external.string().default(DEFAULT_DATABASE_URL)}).default({url:DEFAULT_DATABASE_URL}),server:exports_external.object({port:exports_external.coerce.number().int().positive().default(3000),host:exports_external.string().default("localhost"),openBrowser:exports_external.boolean().default(!0),webDistPath:exports_external.string().nullable().default(null)}).default({port:3000,host:"localhost",openBrowser:!0,webDistPath:null}),telemetry:exports_external.object({enabled:exports_external.boolean().default(!1),endpoint:exports_external.string().optional()}).default({enabled:!1}),logging:exports_external.object({level:exports_external.enum(SPUR_LOG_LEVELS).default("info")}).default({level:"info"})});init_dist();import{resolve}from"node:path";var ARTIFACT_ARRAY_CLASSIFICATION={byTool:"ranked",bySession:"ranked",topStepsByTokens:"ranked",topStepsByDuration:"ranked",topSteps:"ranked",bottlenecks:"ranked",coverage:"set",daily:"set",loops:"set",warnings:"set",pairings:"set",ladderSnapshot:"set",stepSupport:"set",phases:"set",tools:"set",skills:"set",sources:"set",models:"set"},RANKED_ARTIFACT_KEYS=new Set(Object.entries(ARTIFACT_ARRAY_CLASSIFICATION).filter(([,kind])=>kind==="ranked").map(([key])=>key));var RESOLVED_TOOL_NAME_SQL=`CASE
|
|
249
|
+
)`}var init_ddl=__esm(()=>{init_sqlite_core()});var init_classic=__esm(()=>{init_external();init_external()});var init_v4=__esm(()=>{init_classic()});function isColumnType(column2,columnTypes){return columnTypes.includes(column2.columnType)}function isWithEnum(column2){return"enumValues"in column2&&Array.isArray(column2.enumValues)&&column2.enumValues.length>0}function columnToSchema(column2,factory){let z$1=factory?.zodInstance??exports_external,coerce=factory?.coerce??{},schema;if(isWithEnum(column2))schema=column2.enumValues.length?z$1.enum(column2.enumValues):z$1.string();if(!schema){if(isColumnType(column2,["PgGeometry","PgPointTuple"]))schema=z$1.tuple([z$1.number(),z$1.number()]);else if(isColumnType(column2,["PgGeometryObject","PgPointObject"]))schema=z$1.object({x:z$1.number(),y:z$1.number()});else if(isColumnType(column2,["PgHalfVector","PgVector"]))schema=z$1.array(z$1.number()),schema=column2.dimensions?schema.length(column2.dimensions):schema;else if(isColumnType(column2,["PgLine"]))schema=z$1.tuple([z$1.number(),z$1.number(),z$1.number()]);else if(isColumnType(column2,["PgLineABC"]))schema=z$1.object({a:z$1.number(),b:z$1.number(),c:z$1.number()});else if(isColumnType(column2,["PgArray"]))schema=z$1.array(columnToSchema(column2.baseColumn,factory)),schema=column2.size?schema.length(column2.size):schema;else if(column2.dataType==="array")schema=z$1.array(z$1.any());else if(column2.dataType==="number")schema=numberColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="bigint")schema=bigintColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="boolean")schema=coerce===!0||coerce.boolean?z$1.coerce.boolean():z$1.boolean();else if(column2.dataType==="date")schema=coerce===!0||coerce.date?z$1.coerce.date():z$1.date();else if(column2.dataType==="string")schema=stringColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="json")schema=jsonSchema;else if(column2.dataType==="custom")schema=z$1.any();else if(column2.dataType==="buffer")schema=bufferSchema}if(!schema)schema=z$1.any();return schema}function numberColumnToSchema(column2,z2,coerce){let unsigned=column2.getSQLType().includes("unsigned"),min,max,integer4=!1;if(isColumnType(column2,["MySqlTinyInt","SingleStoreTinyInt"]))min=unsigned?0:CONSTANTS.INT8_MIN,max=unsigned?CONSTANTS.INT8_UNSIGNED_MAX:CONSTANTS.INT8_MAX,integer4=!0;else if(isColumnType(column2,["PgSmallInt","PgSmallSerial","MySqlSmallInt","SingleStoreSmallInt"]))min=unsigned?0:CONSTANTS.INT16_MIN,max=unsigned?CONSTANTS.INT16_UNSIGNED_MAX:CONSTANTS.INT16_MAX,integer4=!0;else if(isColumnType(column2,["PgReal","MySqlFloat","MySqlMediumInt","SingleStoreMediumInt","SingleStoreFloat"]))min=unsigned?0:CONSTANTS.INT24_MIN,max=unsigned?CONSTANTS.INT24_UNSIGNED_MAX:CONSTANTS.INT24_MAX,integer4=isColumnType(column2,["MySqlMediumInt","SingleStoreMediumInt"]);else if(isColumnType(column2,["PgInteger","PgSerial","MySqlInt","SingleStoreInt"]))min=unsigned?0:CONSTANTS.INT32_MIN,max=unsigned?CONSTANTS.INT32_UNSIGNED_MAX:CONSTANTS.INT32_MAX,integer4=!0;else if(isColumnType(column2,["PgDoublePrecision","MySqlReal","MySqlDouble","SingleStoreReal","SingleStoreDouble","SQLiteReal"]))min=unsigned?0:CONSTANTS.INT48_MIN,max=unsigned?CONSTANTS.INT48_UNSIGNED_MAX:CONSTANTS.INT48_MAX;else if(isColumnType(column2,["PgBigInt53","PgBigSerial53","MySqlBigInt53","MySqlSerial","SingleStoreBigInt53","SingleStoreSerial","SQLiteInteger"]))unsigned=unsigned||isColumnType(column2,["MySqlSerial","SingleStoreSerial"]),min=unsigned?0:Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER,integer4=!0;else if(isColumnType(column2,["MySqlYear","SingleStoreYear"]))min=1901,max=2155,integer4=!0;else min=Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER;let schema=coerce===!0||coerce?.number?integer4?z2.coerce.number():z2.coerce.number().int():integer4?z2.int():z2.number();return schema=schema.gte(min).lte(max),schema}function bigintColumnToSchema(column2,z2,coerce){let unsigned=column2.getSQLType().includes("unsigned"),min=unsigned?0n:CONSTANTS.INT64_MIN,max=unsigned?CONSTANTS.INT64_UNSIGNED_MAX:CONSTANTS.INT64_MAX;return(coerce===!0||coerce?.bigint?z2.coerce.bigint():z2.bigint()).gte(min).lte(max)}function stringColumnToSchema(column2,z2,coerce){if(isColumnType(column2,["PgUUID"]))return z2.uuid();let max,regex,fixed=!1;if(isColumnType(column2,["PgVarchar","SQLiteText"]))max=column2.length;else if(isColumnType(column2,["MySqlVarChar","SingleStoreVarChar"]))max=column2.length??CONSTANTS.INT16_UNSIGNED_MAX;else if(isColumnType(column2,["MySqlText","SingleStoreText"]))if(column2.textType==="longtext")max=CONSTANTS.INT32_UNSIGNED_MAX;else if(column2.textType==="mediumtext")max=CONSTANTS.INT24_UNSIGNED_MAX;else if(column2.textType==="text")max=CONSTANTS.INT16_UNSIGNED_MAX;else max=CONSTANTS.INT8_UNSIGNED_MAX;if(isColumnType(column2,["PgChar","MySqlChar","SingleStoreChar"]))max=column2.length,fixed=!0;if(isColumnType(column2,["PgBinaryVector"]))regex=/^[01]+$/,max=column2.dimensions;let schema=coerce===!0||coerce?.string?z2.coerce.string():z2.string();return schema=regex?schema.regex(regex):schema,max&&fixed?schema.length(max):max?schema.max(max):schema}function getColumns(tableLike){return isTable(tableLike)?getTableColumns(tableLike):getViewSelectedFields(tableLike)}function handleColumns(columns2,refinements,conditions2,factory){let columnSchemas={};for(let[key,selected]of Object.entries(columns2)){if(!is(selected,Column)&&!is(selected,SQL)&&!is(selected,SQL.Aliased)&&typeof selected==="object"){let columns3=isTable(selected)||isView(selected)?getColumns(selected):selected;columnSchemas[key]=handleColumns(columns3,refinements[key]??{},conditions2,factory);continue}let refinement=refinements[key];if(refinement!==void 0&&typeof refinement!=="function"){columnSchemas[key]=refinement;continue}let column2=is(selected,Column)?selected:void 0,schema=column2?columnToSchema(column2,factory):exports_external.any(),refined=typeof refinement==="function"?refinement(schema):schema;if(conditions2.never(column2))continue;else columnSchemas[key]=refined;if(column2){if(conditions2.nullable(column2))columnSchemas[key]=columnSchemas[key].nullable();if(conditions2.optional(column2))columnSchemas[key]=columnSchemas[key].optional()}}return exports_external.object(columnSchemas)}function handleEnum(enum_,factory){return(factory?.zodInstance??exports_external).enum(enum_.enumValues)}var CONSTANTS,isPgEnum2,literalSchema,jsonSchema,bufferSchema,selectConditions,insertConditions,createSelectSchema=(entity2,refine2)=>{if(isPgEnum2(entity2))return handleEnum(entity2);let columns2=getColumns(entity2);return handleColumns(columns2,refine2??{},selectConditions)},createInsertSchema=(entity2,refine2)=>{let columns2=getColumns(entity2);return handleColumns(columns2,refine2??{},insertConditions)};var init_drizzle_zod=__esm(()=>{init_v4();init_drizzle_orm();CONSTANTS={INT8_MIN:-128,INT8_MAX:127,INT8_UNSIGNED_MAX:255,INT16_MIN:-32768,INT16_MAX:32767,INT16_UNSIGNED_MAX:65535,INT24_MIN:-8388608,INT24_MAX:8388607,INT24_UNSIGNED_MAX:16777215,INT32_MIN:-2147483648,INT32_MAX:2147483647,INT32_UNSIGNED_MAX:4294967295,INT48_MIN:-140737488355328,INT48_MAX:140737488355327,INT48_UNSIGNED_MAX:281474976710655,INT64_MIN:-9223372036854775808n,INT64_MAX:9223372036854775807n,INT64_UNSIGNED_MAX:18446744073709551615n};isPgEnum2=isWithEnum,literalSchema=exports_external.union([exports_external.string(),exports_external.number(),exports_external.boolean(),exports_external.null()]),jsonSchema=exports_external.union([literalSchema,exports_external.record(exports_external.string(),exports_external.any()),exports_external.array(exports_external.any())]),bufferSchema=exports_external.custom((v)=>v instanceof Buffer);selectConditions={never:()=>!1,optional:()=>!1,nullable:(column2)=>!column2.notNull},insertConditions={never:(column2)=>column2?.generated?.type==="always"||column2?.generatedIdentity?.type==="always",optional:(column2)=>!column2.notNull||column2.notNull&&column2.hasDefault,nullable:(column2)=>!column2.notNull}});function defineTable(name,columns2){let table3=sqliteTable(name,columns2),insert2,select3,ddl;return{table:table3,get insertSchema(){if(insert2===void 0)insert2=createInsertSchema(table3);return insert2},get selectSchema(){if(select3===void 0)select3=createSelectSchema(table3);return select3},get createTableSql(){if(ddl===void 0)ddl=generateCreateTableSql(table3);return ddl}}}var init_define_table=__esm(()=>{init_sqlite_core();init_drizzle_zod();init_ddl()});var init_schema=__esm(()=>{init_sqlite_core();init_define_table();init_common3()});function getProcessEnv(){return getEnvVars()}var configSchema2;var init_config=__esm(()=>{init_dist();init_dist2();init_zod();configSchema2=exports_external.object({app:exports_external.object({name:exports_external.string().default("app"),env:exports_external.enum(["development","staging","production","test"]).default("development"),port:exports_external.number().int().positive().default(3000)}).default({name:"app",env:"development",port:3000}),database:exports_external.object({url:exports_external.string().default(":memory:")}).default({url:":memory:"}),logging:exports_external.object({level:exports_external.enum(["trace","debug","info","warn","error","fatal"]).default("info"),console:exports_external.boolean().default(!0),file:exports_external.boolean().default(!1),filePath:exports_external.string().optional(),json:exports_external.boolean().default(!1)}).default({level:"info",console:!0,file:!1,json:!1})})});import{appendFileSync as appendFileSync2,cpSync,createReadStream as createReadStream2,createWriteStream as createWriteStream2,existsSync,mkdirSync,readdirSync,readFileSync as readFileSync3,realpathSync,renameSync,rmSync,statSync as statSync2,writeFileSync as writeFileSync2}from"node:fs";import{dirname,resolve as resolvePath}from"node:path";function createNodeFileSystem(root,paths){let projectRoot=root??findProjectRoot(paths?.cwd??process.cwd());return{getProjectRoot:()=>projectRoot,resolve:(...segments)=>resolvePath(projectRoot,...segments),exists:(path6)=>existsSync(path6),readFile:(path6)=>readFileSync3(path6,"utf-8"),readFileStream:async function*(path6){let stream=createReadStream2(path6,{encoding:"utf-8"}),buffer="";for await(let chunk of stream){buffer+=chunk;let lines=buffer.split(/\r?\n/);buffer=lines.pop()??"";for(let line of lines)yield line}if(buffer.length>0)yield buffer},writeFile:(path6,content)=>{ensureParentDir(path6),writeFileSync2(path6,content,"utf-8")},appendFile:(path6,content)=>{ensureParentDir(path6),appendFileSync2(path6,content,"utf-8")},ensureDir:(path6)=>{mkdirSync(path6,{recursive:!0})},readDir:(path6)=>readdirSync(path6),deleteFile:(path6)=>{rmSync(path6,{recursive:!0,force:!0})},rename:(src,dest)=>{renameSync(src,dest)},copy:(src,dest)=>{cpSync(src,dest,{recursive:!0})},createWriteStream:(path6)=>{return ensureParentDir(path6),createWriteStream2(path6,{flags:"a"})},stat:(path6)=>{try{let s2=statSync2(path6);return{isFile:()=>s2.isFile(),isDirectory:()=>s2.isDirectory(),size:s2.size,mtimeMs:s2.mtimeMs}}catch{return null}},realPath:(path6)=>realpathSync(path6)}}function ensureParentDir(filePath){let dir=dirname(filePath);if(!existsSync(dir))mkdirSync(dir,{recursive:!0})}function findProjectRoot(startDir){let dir=resolvePath(startDir),root=resolvePath("/");while(dir!==root){if(existsSync(resolvePath(dir,"bun.lock"))||existsSync(resolvePath(dir,"package.json")))return dir;let parent=resolvePath(dir,"..");if(parent===dir)break;dir=parent}return startDir}var init_file_system_node=()=>{};function resolveDeadline(optionTimeout,defaultTimeout){if(optionTimeout===null)return null;let candidate=optionTimeout===void 0?defaultTimeout:optionTimeout;if(candidate===void 0||candidate===null)return candidate;if(!Number.isInteger(candidate)||candidate<=0||candidate>2147483647)throw TypeError(`Process timeout must be a positive integer within the native timer range (1-2147483647 ms), got ${String(candidate)}`);return candidate}function resolveKillGraceMs(optionGraceMs){if(optionGraceMs===void 0)return 5000;if(!Number.isInteger(optionGraceMs)||optionGraceMs<0||optionGraceMs>2147483647)throw TypeError(`Process killGraceMs must be a non-negative integer within the native timer range (0-2147483647 ms), got ${String(optionGraceMs)}`);return optionGraceMs}function groupExists(pid){try{return process.kill(-pid,0),!0}catch(error51){return error51.code==="EPERM"}}function signalGroup(pid,signal){try{return process.kill(-pid,signal),!0}catch{return!1}}async function waitForGroupExit(pid,budgetMs){let giveUpAt=Date.now()+budgetMs;while(groupExists(pid)){if(Date.now()>=giveUpAt)return!1;await new Promise((resolve)=>setTimeout(resolve,25))}return!0}async function reapProcessGroup(pid,graceMs){if(!signalGroup(pid,"SIGTERM"))return!1;if(await waitForGroupExit(pid,graceMs))return!0;return signalGroup(pid,"SIGKILL"),await waitForGroupExit(pid,2000),!0}function ownProcessGroupLifecycle(ownership){let{pid,graceMs}=ownership,trigger,termination,timer,initiate=(reason)=>{if(trigger!==void 0)return;trigger=reason,termination=reapProcessGroup(pid,graceMs)};if(ownership.deadlineMs!==void 0)timer=setTimeout(()=>initiate("timeout"),ownership.deadlineMs);let onAbort=()=>initiate("cancelled");if(ownership.signal!==void 0)if(ownership.signal.aborted)onAbort();else ownership.signal.addEventListener("abort",onAbort,{once:!0});return{finish:async()=>{if(trigger===void 0){await reapProcessGroup(pid,graceMs);return}return await termination?trigger:void 0},stop:()=>{if(timer!==void 0)clearTimeout(timer);ownership.signal?.removeEventListener("abort",onAbort)}}}import{isatty}from"node:tty";function processEventSeverity(reason,exitCode){if(reason==="error")return"error";if(reason==="timeout"||reason==="cancelled")return"warning";if(exitCode!==null&&exitCode!==0)return"warning";return"info"}function resolveChildEnv(env2,envMode){if(envMode==="replace")return env2;let merged={};for(let[key,value]of Object.entries(getProcessEnv()))if(value!==void 0)merged[key]=value;return{...merged,...env2}}class NodeProcessExecutor{config;constructor(config2={}){this.config=config2}async run(options){return this.trace("process.run",()=>this.runUntraced(options))}async runUntraced(options){let args=options.args??[],deadline=resolveDeadline(options.timeout,this.config.defaultTimeout),killGraceMs=resolveKillGraceMs(options.killGraceMs),groupOwned=process.platform!=="win32"&&(typeof deadline==="number"||options.signal!==void 0),execaOptions=buildExecaOptions({cwd:options.cwd??this.config.paths?.cwd,env:options.env,timeout:typeof deadline==="number"?deadline:void 0,maxOutput:options.maxOutput??this.config.defaultMaxOutput,rejectOnError:options.rejectOnError??!1,outputPolicy:this.config.output,forceBuffered:options.forceBuffered??!1,signal:options.signal,groupOwned}),startedAt=Date.now(),startedIso=new Date(startedAt).toISOString(),registryId=this.beginRegistry(options.command,args,{label:options.label,source:options.source??"one-shot",teamId:options.teamId,agentId:options.agentId,startedAt:startedIso});this.emitProcessEvent("process.started",{command:options.command,args,exitCode:null,durationMs:0,reason:"exit",timestamp:startedIso,severity:"info",...options.label!==void 0?{label:options.label}:{}});let ownership;try{let subprocess=execa(options.command,args,execaOptions);if(groupOwned&&subprocess.pid!==void 0)ownership=ownProcessGroupLifecycle({pid:subprocess.pid,deadlineMs:typeof deadline==="number"?deadline:void 0,signal:options.signal,graceMs:killGraceMs});if(subprocess.pid!==void 0){if(this.config.registry?.update(registryId,{pid:subprocess.pid}),options.onSpawn!==void 0)try{options.onSpawn(subprocess.pid)}catch{}}let stopOwnedTermination=()=>ownership?.stop();observeOutput(subprocess.stdout,"stdout",options.onOutput),observeOutput(subprocess.stderr,"stderr",options.onOutput);let result=await subprocess.finally(stopOwnedTermination),ownedOutcome=ownership!==void 0?await ownership.finish():void 0,processResult={command:options.command,args,exitCode:result.exitCode??null,stdout:asString(result.stdout),stderr:asString(result.stderr),...result.signalDescription!==void 0?{signal:result.signalDescription}:{},durationMs:result.durationMs,outcome:ownedOutcome??(result.signalDescription!==void 0?"signal":"exit")};return this.completeRegistry(registryId,processResult.exitCode),this.emitExitedFromResult(options,processResult,result),processResult}catch(error51){let failed=error51,ownedOutcome=ownership!==void 0?await ownership.finish():void 0,processResult={command:options.command,args,exitCode:failed.exitCode??null,stdout:asString(failed.stdout),stderr:asString(failed.stderr),...failed.signalDescription!==void 0?{signal:failed.signalDescription}:failed.signal!==void 0?{signal:failed.signal}:{},durationMs:failed.durationMs??Date.now()-startedAt,outcome:ownedOutcome??classifyFailedCompletion(failed)};if(this.completeRegistry(registryId,processResult.exitCode),this.emitExitedFromResult(options,processResult,error51,error51),options.rejectOnError)throw error51;return processResult}}runStreaming(options){let args=options.args??[],startedAt=Date.now(),startedIso=new Date(startedAt).toISOString(),registryId=this.beginRegistry(options.command,args,{label:options.label,source:options.source??"other",teamId:options.teamId,agentId:options.agentId,startedAt:startedIso});try{this.emitProcessEvent("process.started",{command:options.command,args,exitCode:null,durationMs:0,reason:"exit",timestamp:startedIso,severity:"info",...options.label!==void 0?{label:options.label}:{}});let subprocess=Bun.spawn({cmd:[options.command,...args],stdin:"pipe",stdout:"pipe",stderr:"pipe",...options.cwd!==void 0?{cwd:options.cwd}:{},...options.env!==void 0?{env:resolveChildEnv(options.env,options.envMode)}:{}}),pipe2=new BunPipeProcess(subprocess);if(pipe2.pid!==null)this.config.registry?.update(registryId,{pid:pipe2.pid});return new ObservedPipeProcess(pipe2,this.config.events,{command:options.command,args,startedAt,registry:this.config.registry,registryId,...options.label!==void 0?{label:options.label}:{}})}catch(error51){throw this.completeRegistry(registryId,null),this.emitProcessEvent("process.exited",{command:options.command,args,exitCode:null,durationMs:0,reason:"error",timestamp:new Date().toISOString(),severity:processEventSeverity("error",null),...options.label!==void 0?{label:options.label}:{},error:errorMessage(error51)}),error51}}async trace(name,fn){if(this.config.tracer===void 0)return await fn();return await this.config.tracer.traceAsync(name,async()=>await fn())}beginRegistry(command,args,meta3){let registry2=this.config.registry;if(!registry2)return"";return registry2.begin({command,args,source:meta3.source,startedAt:meta3.startedAt,...meta3.label!==void 0?{label:meta3.label}:{},...meta3.teamId!==void 0?{teamId:meta3.teamId}:{},...meta3.agentId!==void 0?{agentId:meta3.agentId}:{}})}completeRegistry(id,exitCode,pid){if(!id||!this.config.registry)return;this.config.registry.complete(id,{exitCode,...pid!==void 0?{pid}:{}})}emitExitedFromResult(options,result,completion,error51){let reason=result.outcome??(isTimedOut(completion)?"timeout":result.signal!==void 0?"signal":error51?"error":"exit");this.emitProcessEvent("process.exited",{command:result.command,args:result.args,exitCode:result.exitCode,...result.signal!==void 0?{signal:result.signal}:{},durationMs:result.durationMs,reason,timestamp:new Date().toISOString(),severity:processEventSeverity(reason,result.exitCode),...options.label!==void 0?{label:options.label}:{},...error51!==void 0?{error:errorMessage(error51)}:{}})}emitProcessEvent(event,detail){this.config.events?.emit(event,detail)}}class ObservedPipeProcess{inner;killedWith;exited;constructor(inner,events,context){this.inner=inner,this.exited=inner.exited.then((exitCode)=>{if(context.registry&&context.registryId)context.registry.complete(context.registryId,{exitCode,...inner.pid!==null?{pid:inner.pid}:{}});return events?.emit("process.exited",{command:context.command,args:context.args,exitCode,...this.killedWith!==void 0?{signal:String(this.killedWith)}:{},durationMs:Date.now()-context.startedAt,reason:this.killedWith!==void 0?"signal":"exit",timestamp:new Date().toISOString(),severity:processEventSeverity(this.killedWith!==void 0?"signal":"exit",exitCode),...context.label!==void 0?{label:context.label}:{}}),exitCode})}get pid(){return this.inner.pid}get stdout(){return this.inner.stdout}get stderr(){return this.inner.stderr}writeStdin(input){this.inner.writeStdin(input)}endStdin(){this.inner.endStdin()}kill(signal){this.killedWith=signal,this.inner.kill(signal)}}class BunPipeProcess{subprocess;writer;constructor(subprocess){this.subprocess=subprocess,this.writer=subprocess.stdin}get pid(){return this.subprocess.pid??null}get stdout(){return isReadableStream3(this.subprocess.stdout)?this.subprocess.stdout:null}get stderr(){return isReadableStream3(this.subprocess.stderr)?this.subprocess.stderr:null}get exited(){return this.subprocess.exited}writeStdin(input){this.writer.write(input),this.writer.flush?.()}endStdin(){this.writer.end?.()}kill(signal){this.subprocess.kill(signal)}}function buildExecaOptions(opts){let mode=opts.forceBuffered?"buffered":opts.outputPolicy?.mode??"buffered",streamToTerminal=mode==="stream"&&(opts.outputPolicy?.mode==="stream"?opts.outputPolicy.isTTY??process.stdout.isTTY??isatty(1):!1);return{reject:opts.rejectOnError,stdin:"ignore",stripFinalNewline:!0,...mode==="pipe"?{stdout:"pipe",stderr:"pipe"}:streamToTerminal?{stdout:["inherit","pipe"],stderr:["inherit","pipe"]}:{all:!0},...opts.cwd!==void 0?{cwd:opts.cwd}:{},...opts.env!==void 0?{env:opts.env}:{},...opts.timeout!==void 0&&!opts.groupOwned?{timeout:opts.timeout}:{},...opts.maxOutput!==void 0?{maxBuffer:opts.maxOutput}:{},...opts.groupOwned?{detached:!0}:{},...opts.signal!==void 0&&!opts.groupOwned?{cancelSignal:opts.signal}:{}}}function classifyFailedCompletion(error51){if(error51.timedOut===!0)return"timeout";if(error51.isCanceled===!0)return"cancelled";if(error51.isTerminated===!0||error51.signalDescription!==void 0||error51.signal!==void 0)return"signal";return"error"}function observeOutput(stream,name,observer){if(!stream||!observer)return;let decoder=new TextDecoder,emit=(chunk)=>{try{observer({stream:name,chunk,timestamp:new Date().toISOString()})}catch{}};stream.on("data",(chunk)=>{emit(typeof chunk==="string"?chunk:decoder.decode(chunk,{stream:!0}))}),stream.on("end",()=>{let tail=decoder.decode();if(tail.length>0)emit(tail)})}function asString(value){if(typeof value==="string")return value;if(value instanceof Uint8Array)return new TextDecoder().decode(value);if(Array.isArray(value))return value.map(String).join("");return""}function isReadableStream3(value){return value instanceof ReadableStream}function isTimedOut(error51){return typeof error51==="object"&&error51!==null&&"timedOut"in error51&&error51.timedOut===!0}function errorMessage(error51){return error51 instanceof Error?error51.message:String(error51)}var init_process_executor=__esm(()=>{init_execa();init_config()});var init_context=()=>{};var SEP;var init_path=__esm(()=>{SEP=globalThis.process?.platform==="win32"?"\\":"/"});var init_schema_validation=__esm(()=>{init_dist2()});var init_types=()=>{};var init_dist3=__esm(()=>{init_file_system_node();init_process_executor();init_config();init_context();init_path();init_schema_validation();init_types()});init_zod();var RFC3339_PATTERN=/^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(\.\d+)?([Zz]|[+-]\d{2}:\d{2})$/;function isRfc3339Timestamp(value){return RFC3339_PATTERN.test(value)&&Number.isFinite(Date.parse(value))}var ALL_FINDING_CODES=["L1.markdown-parse","L1.schema-validation","L2.missing-required-section","L2.forbidden-section","L2.disallowed-section","L2.heading-level","L2.section-order","L3.requirements-format","L3.requirements-checkbox","L3.requirements-empty","L3.ac-empty","L3.ac-requirement-coverage","L3.solution-file-line","L3.review-priority-table","L3.required-section-placeholder","L3.plan-format","L3.unchecked-checklist","L3.ac-checklist-text","L3.ac-bdd-error","L3.ac-bdd-warning","L3.ac-bdd-invalid","L3.scope-delineation","L3.one-active-goal","L3.children-limit","L3.review-testing-contradiction","L4.design-placeholder","L4.feature-not-found","L4.feature-terminal","L4.missing-feature-id","L4.parent-not-found","L4.dependency-not-found","L4.rollup-subtasks-open","L4.rollup-parent-open","L4.rollup-missing-roster","L4.rollup-roster-not-declared-dependency","L4.readiness-blocked","L4.prose-prerequisite-unlisted","L4.prerequisite-cycle","L4.prerequisite-not-done","L4.gate-language","L4.linked-task-parse-failed","L4.orphan-scenarios","L4.uncovered-task-scenario","L4.uncovered-feature-scenario","L4.verdict-rows-match-no-scenario","L4.verifying-incomplete-tasks","L4.dogfood-missing","L4.stale-line-anchor","L4.anchor-subject-mismatch","L4.malformed-verdict-artifact","L4.scenario-unverified","L4.testing-verdict-stub","L4.evidence-not-recoverable","L4.feature-receipt-missing","L4.feature-receipt-malformed","L4.feature-receipt-cross-feature","L4.feature-receipt-divergent","L4.feature-receipt-failed","L4.feature-receipt-run","L4.feature-receipt-stale","L4.feature-receipt-contract"];function isFindingCode(code){return ALL_FINDING_CODES.includes(code)}init_zod();var projectEntrySchema=exports_external.object({name:exports_external.string().min(1),path:exports_external.string().min(1),port:exports_external.number().int().nonnegative().default(0)}),projectsFileSchema=exports_external.object({schema_version:exports_external.literal(1).default(1),projects:exports_external.array(projectEntrySchema).default([])});init_zod();var slashCommandCategorySchema=exports_external.enum(["git","dev","sys","harness"]),slashCommandItemSchema=exports_external.object({name:exports_external.string().min(1),description:exports_external.string().min(1),category:slashCommandCategorySchema.default("dev"),argumentHint:exports_external.string().optional(),tags:exports_external.array(exports_external.string()).default([]),role:exports_external.string().optional(),source:exports_external.string().optional()}),slashCommandsFileSchema=exports_external.object({version:exports_external.number().int().default(1),updatedAt:exports_external.string().optional(),commands:exports_external.array(slashCommandItemSchema).default([])});var SPUR_LOG_LEVELS=["debug","info","warn","error"],DEFAULT_TASKS_DIR="docs/tasks",DEFAULT_FEATURES_DIR="docs/features",DEFAULT_DATABASE_URL=".spur/spur.db";var folderConfigSchema=exports_external.object({baseCounter:exports_external.number().int().nonnegative().default(0),label:exports_external.string().optional()});function folderPathWithDefault(defaultPath){return exports_external.preprocess((v)=>v==null?void 0:v,exports_external.string().default(defaultPath))}var tasksConfigSchema=exports_external.object({folders:exports_external.record(exports_external.string(),folderConfigSchema).default({}),active:folderPathWithDefault(DEFAULT_TASKS_DIR),severity:exports_external.record(exports_external.string(),exports_external.enum(["error","warning","off"])).optional()}).superRefine((data,ctx)=>{if(data.severity){for(let code of Object.keys(data.severity))if(!isFindingCode(code))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["severity",code],message:`Unknown finding code "${code}" in severity overrides map`})}}),featuresConfigSchema=exports_external.object({dir:folderPathWithDefault(DEFAULT_FEATURES_DIR)}),EXECUTOR_CAPABILITY_TIERS=["cheap","standard","capable-1","capable-2","capable-3"];function normalizeExecutorTier(value){return value==="capable"?"capable-1":value}var executorCapabilityTierSchema=exports_external.preprocess((value)=>{if(value===void 0||value===null)return;return typeof value==="string"?normalizeExecutorTier(value):value},exports_external.enum(EXECUTOR_CAPABILITY_TIERS).optional()),AGENT_ROLE_NAMES=["scribe","coder","reviewer","planner"];var EXECUTION_CAPABILITY_AXES=["fsRead","fsWrite","networkEgress","processSpawn","externalMutationApproval"],SESSION_CAPABILITY_AXES=["resumeById","sessionDir","persistentStdin","structuredOutput"],AGENT_RUN_CAPABILITY_AXES=[...EXECUTION_CAPABILITY_AXES,...SESSION_CAPABILITY_AXES],EXECUTION_CAPABILITY_STATES=["enforced","available","unavailable","unknown"],EXECUTION_CAPABILITY_PROVENANCES=["native-known","operator-configured","unattested"],ExecutionCapabilityAttestationSchema=exports_external.object({state:exports_external.enum(EXECUTION_CAPABILITY_STATES),provenance:exports_external.enum(EXECUTION_CAPABILITY_PROVENANCES)}),ExecutionCapabilitiesSchema=exports_external.object({version:exports_external.literal(1),axes:exports_external.partialRecord(exports_external.enum(EXECUTION_CAPABILITY_AXES),ExecutionCapabilityAttestationSchema)}),EXECUTION_CAPABILITY_REQUIREMENTS=["available","enforced"],RequiresCapabilitiesSchema=exports_external.partialRecord(exports_external.enum(AGENT_RUN_CAPABILITY_AXES),exports_external.enum(EXECUTION_CAPABILITY_REQUIREMENTS)),executorAvailabilityOwnerSchema=exports_external.enum(["operator","quota","probe"]),executorDisabledObjectSchema=exports_external.object({owner:executorAvailabilityOwnerSchema,since:exports_external.string().refine(isRfc3339Timestamp,{message:"since must be an RFC 3339 timestamp"}),reason:exports_external.string().min(1)}),AgentExecutorConfigSchema=exports_external.object({name:exports_external.string().min(1),agent:exports_external.string().min(1),model:exports_external.string().min(1).optional(),tier:executorCapabilityTierSchema.optional(),executionCapabilities:ExecutionCapabilitiesSchema.optional(),disabled:exports_external.union([exports_external.boolean(),executorDisabledObjectSchema]).default(!1)});var AgentRoleConfigSchema=exports_external.object({tier:exports_external.enum(EXECUTOR_CAPABILITY_TIERS).optional(),stages:exports_external.array(exports_external.string().min(1)).min(1).optional()});var FleetMemberSchema=exports_external.object({id:exports_external.string().min(1).optional(),role:exports_external.enum(AGENT_ROLE_NAMES,{error:(issue2)=>Error(`Unknown role "${issue2.input}" — expected one of: ${AGENT_ROLE_NAMES.join(", ")}`)}).optional(),executor:exports_external.string().min(1).optional(),purpose:exports_external.string().optional(),enabled:exports_external.boolean().optional()}),FLEET_STRATEGIES=["rest","gtd"],FleetMemberEntrySchema=FleetMemberSchema.superRefine((member,ctx)=>{if(member.role===void 0&&member.executor===void 0)ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:"must declare a role or an executor — at least one is required"})}),AgentFleetSchema=exports_external.object({enabled:exports_external.boolean().default(!1),strategy:exports_external.enum(FLEET_STRATEGIES).default("rest"),orchestrator:exports_external.string().min(1).optional(),members:exports_external.array(FleetMemberEntrySchema).default([])});var AgentOutputConfigSchema=exports_external.object({"max-bytes":exports_external.number().int().positive().optional(),"max-lines":exports_external.number().int().positive().optional()}),AgentConfigSchema=exports_external.object({default:exports_external.string().optional(),executors:exports_external.array(AgentExecutorConfigSchema).optional(),roles:exports_external.record(exports_external.string(),AgentRoleConfigSchema).optional(),output:AgentOutputConfigSchema.optional(),sessionAffinity:exports_external.boolean().optional(),fleet:AgentFleetSchema.optional()}).superRefine((value,ctx)=>{for(let key of Object.keys(value.roles??{}))if(!AGENT_ROLE_NAMES.includes(key))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["roles",key],message:`Unknown role "${key}" — expected one of: ${AGENT_ROLE_NAMES.join(", ")}`});let executors=value.executors,executorNames=new Set;if(executors!==void 0){let seen=new Set;for(let[index,executor]of executors.entries()){if(seen.has(executor.name))ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Duplicate executor name: ${executor.name}`,path:["executors",index,"name"]});if(executor.name==="inline"||executor.name==="auto")ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Executor name "${executor.name}" is reserved (the --agent selector value '${executor.name}' has fixed semantics); rename executor at index ${index}.`,path:["executors",index,"name"]});if(AGENT_ROLE_NAMES.includes(executor.name))ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Executor name "${executor.name}" collides with the role selector namespace ("${executor.name}"); rename executor at index ${index}.`,path:["executors",index,"name"]});seen.add(executor.name),executorNames.add(executor.name)}}}),RulesConfigSchema=exports_external.object({paths:exports_external.array(exports_external.string()).optional()}),WorkflowsConfigSchema=exports_external.object({paths:exports_external.array(exports_external.string()).optional()}),WorkflowConfigSchema=exports_external.object({hitlDecisionMaker:exports_external.boolean().optional(),decideDecisionMaker:exports_external.boolean().optional(),logRetentionDays:exports_external.number().int().positive().default(30)}),RedactionConfigSchema=exports_external.object({enabled:exports_external.boolean().optional()}),HistoryRefreshConfigSchema=exports_external.object({on_completion:exports_external.boolean().default(!1),debounce_ms:exports_external.number().int().min(1000).default(600000)}),HistoryConfigSchema=exports_external.object({refresh:HistoryRefreshConfigSchema.optional()}),VersionCarrierEntrySchema=exports_external.looseObject({type:exports_external.string().min(1)}),BuilderBumpVerConfigSchema=exports_external.object({tagVersionSeparator:exports_external.string().min(1).default("-v"),aggregatePackage:exports_external.string().min(1).optional(),publishWorkflow:exports_external.string().min(1).default("publish.yml"),releaseCommitType:exports_external.string().min(1).default("chore"),releaseCommitScope:exports_external.string().min(1).default("release"),ghRunListLimit:exports_external.number().int().positive().default(5),versionCarriers:exports_external.array(VersionCarrierEntrySchema).default([])}),BuilderConfigSchema=exports_external.object({"bump-ver":BuilderBumpVerConfigSchema.optional()});var bootstrapOptionsSchema=exports_external.object({options:exports_external.record(exports_external.string(),exports_external.unknown()).optional()}),spurConfigSchema=exports_external.object({version:exports_external.string().optional(),name:exports_external.string().optional(),bootstrap:bootstrapOptionsSchema.optional(),agent:AgentConfigSchema.optional(),rules:RulesConfigSchema.optional(),workflows:WorkflowsConfigSchema.optional(),workflow:WorkflowConfigSchema.optional(),redaction:RedactionConfigSchema.optional(),history:HistoryConfigSchema.optional(),builder:BuilderConfigSchema.optional(),tasks:tasksConfigSchema.optional(),features:featuresConfigSchema.optional()});var configSchema=exports_external.object({database:exports_external.object({url:exports_external.string().default(DEFAULT_DATABASE_URL)}).default({url:DEFAULT_DATABASE_URL}),server:exports_external.object({port:exports_external.coerce.number().int().positive().default(3000),host:exports_external.string().default("localhost"),openBrowser:exports_external.boolean().default(!0),webDistPath:exports_external.string().nullable().default(null)}).default({port:3000,host:"localhost",openBrowser:!0,webDistPath:null}),telemetry:exports_external.object({enabled:exports_external.boolean().default(!1),endpoint:exports_external.string().optional()}).default({enabled:!1}),logging:exports_external.object({level:exports_external.enum(SPUR_LOG_LEVELS).default("info")}).default({level:"info"})});init_dist();import{resolve}from"node:path";var ARTIFACT_ARRAY_CLASSIFICATION={byTool:"ranked",bySession:"ranked",topStepsByTokens:"ranked",topStepsByDuration:"ranked",topSteps:"ranked",bottlenecks:"ranked",coverage:"set",daily:"set",loops:"set",warnings:"set",pairings:"set",ladderSnapshot:"set",stepSupport:"set",phases:"set",tools:"set",skills:"set",sources:"set",models:"set"},RANKED_ARTIFACT_KEYS=new Set(Object.entries(ARTIFACT_ARRAY_CLASSIFICATION).filter(([,kind])=>kind==="ranked").map(([key])=>key));var RESOLVED_TOOL_NAME_SQL=`CASE
|
|
250
250
|
WHEN tc.effective_tool_name IS NOT NULL AND tc.effective_tool_name != '' AND tc.effective_tool_name != 'unknown'
|
|
251
251
|
THEN tc.effective_tool_name
|
|
252
252
|
ELSE CASE
|
|
@@ -322,7 +322,7 @@ END`;var MEASURE_COLS="messages, tool_calls, skill_calls, fresh_input_tokens, ca
|
|
|
322
322
|
''
|
|
323
323
|
)
|
|
324
324
|
ELSE ''
|
|
325
|
-
END`;var POST_WATERMARK_TABLES=[...KEYED_ROLLUP_TABLES,...GLOBAL_RANKED_ROLLUP_TABLES,"history_daily_stats","history_board_source_daily"];var HISTORY_IMPORT_SCHEMA_VERSION="0.5.
|
|
325
|
+
END`;var POST_WATERMARK_TABLES=[...KEYED_ROLLUP_TABLES,...GLOBAL_RANKED_ROLLUP_TABLES,"history_daily_stats","history_board_source_daily"];var HISTORY_IMPORT_SCHEMA_VERSION="0.5.7",HISTORY_IMPORT_SCHEMA_SQL=`
|
|
326
326
|
CREATE TABLE IF NOT EXISTS history_import_checkpoint (
|
|
327
327
|
source TEXT NOT NULL,
|
|
328
328
|
source_file TEXT NOT NULL,
|
|
@@ -459,7 +459,8 @@ CREATE TABLE IF NOT EXISTS runs (
|
|
|
459
459
|
updated_at INTEGER NOT NULL DEFAULT 0,
|
|
460
460
|
owner_attempt TEXT,
|
|
461
461
|
owner_pid INTEGER,
|
|
462
|
-
interrupt_reason TEXT
|
|
462
|
+
interrupt_reason TEXT,
|
|
463
|
+
terminal_reason TEXT
|
|
463
464
|
);
|
|
464
465
|
|
|
465
466
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_runs_external_key
|
|
@@ -518,6 +519,7 @@ CREATE TABLE IF NOT EXISTS action_runs (
|
|
|
518
519
|
ALTER TABLE runs ADD COLUMN owner_attempt TEXT;
|
|
519
520
|
ALTER TABLE runs ADD COLUMN owner_pid INTEGER;
|
|
520
521
|
ALTER TABLE runs ADD COLUMN interrupt_reason TEXT;
|
|
522
|
+
ALTER TABLE runs ADD COLUMN terminal_reason TEXT;
|
|
521
523
|
`.trim();var RULE_ENGINE_SCHEMA_SQL=`
|
|
522
524
|
CREATE TABLE IF NOT EXISTS rule_runs (
|
|
523
525
|
id TEXT PRIMARY KEY,
|
|
@@ -722,6 +724,8 @@ ALTER TABLE agent_executor_updates ADD COLUMN owner TEXT;
|
|
|
722
724
|
ALTER TABLE agent_executor_updates ADD COLUMN layer TEXT;
|
|
723
725
|
ALTER TABLE agent_executor_updates ADD COLUMN skipped_reason TEXT;
|
|
724
726
|
UPDATE agent_executor_updates SET owner = 'quota', layer = 'project' WHERE owner IS NULL;
|
|
727
|
+
`,CLI_RUNS_TERMINAL_REASON_SCHEMA_SQL=`
|
|
728
|
+
ALTER TABLE runs ADD COLUMN terminal_reason TEXT;
|
|
725
729
|
`,PROJECT_CLAIMS_SCHEMA_SQL=`
|
|
726
730
|
CREATE TABLE IF NOT EXISTS project_claims (
|
|
727
731
|
project_path TEXT NOT NULL,
|
|
@@ -1306,7 +1310,7 @@ ALTER TABLE queue_jobs ADD COLUMN timeout_ms INTEGER;
|
|
|
1306
1310
|
ALTER TABLE queue_jobs ADD COLUMN timeout_unlimited INTEGER NOT NULL DEFAULT 0;
|
|
1307
1311
|
ALTER TABLE queue_jobs ADD COLUMN attempt_token TEXT;
|
|
1308
1312
|
ALTER TABLE queue_jobs ADD COLUMN lease_expires_at INTEGER;
|
|
1309
|
-
`,CLI_MIGRATIONS=[{id:"0000_spur_cli_foundation",sql:CLI_SCHEMA_SQL},{id:"0001_spur_cli_team_inbox",sql:INBOX_MESSAGES_SCHEMA_SQL},{id:"0002_spur_cli_rule_history",sql:RULE_ENGINE_SCHEMA_SQL},{id:"0003_spur_cli_planning",sql:PLANNING_SCHEMA_SQL},{id:"0004_spur_cli_queue_jobs",sql:QUEUE_JOBS_SCHEMA_SQL},{id:"0005_spur_cli_run_pid",sql:RUN_PID_COLUMN_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"pid"}},{id:"0006_spur_cli_system_events",sql:SYSTEM_EVENTS_SCHEMA_SQL},{id:"0007_spur_cli_runs_external_key",sql:RUNS_EXTERNAL_KEY_COLUMN_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"external_key"}},{id:"0008_spur_cli_system_events_correlation",sql:SYSTEM_EVENTS_CORRELATION_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"system_events",column:"sequence"}},{id:"0009_spur_cli_history_message_run_idx",sql:HISTORY_MESSAGE_RUN_INDEX_SCHEMA_SQL},{id:"0010_spur_cli_coordination_runs",sql:COORDINATION_RUNS_SCHEMA_SQL},{id:"0011_spur_cli_system_events_sequence_idx",sql:SYSTEM_EVENTS_SEQUENCE_INDEX_SCHEMA_SQL},{id:"0012_spur_cli_history_tool_call_args_raw",sql:HISTORY_TOOL_CALL_ARGS_RAW_SCHEMA_SQL,addColumnIfMissing:{table:"history_tool_call",column:"args_raw"}},{id:"0013_spur_cli_history_run_session",sql:HISTORY_RUN_SESSION_SCHEMA_SQL},{id:"0014_spur_cli_system_events_name_occurred_idx",sql:SYSTEM_EVENTS_NAME_OCCURRED_INDEX_SCHEMA_SQL},{id:"0015_spur_cli_history_tool_call_call_id",sql:HISTORY_TOOL_CALL_CALL_ID_SCHEMA_SQL,addColumnIfMissing:{table:"history_tool_call",column:"call_id"}},{id:"0016_spur_cli_history_message_ts_nullable",sql:HISTORY_MESSAGE_TS_NULLABLE_SCHEMA_SQL},{id:"0017_spur_cli_runs_status_completed_to_done",sql:"UPDATE runs SET status = 'done' WHERE status = 'completed'"},{id:"0018_spur_cli_history_message_request_id",sql:HISTORY_MESSAGE_REQUEST_ID_SCHEMA_SQL,addColumnIfMissing:{table:"history_message",column:"request_id"}},{id:"0019_spur_cli_history_etl_tables_drop",sql:HISTORY_ETL_TABLES_DROP_SCHEMA_SQL},{id:"0020_spur_cli_history_board_query_indexes",sql:HISTORY_BOARD_QUERY_INDEXES_SCHEMA_SQL},{id:"0021_spur_cli_history_board_rollups",sql:HISTORY_BOARD_ROLLUPS_SCHEMA_SQL},{id:"0022_spur_cli_history_performance_indexes",sql:HISTORY_PERFORMANCE_INDEXES_SCHEMA_SQL},{id:"0023_spur_cli_history_message_request_id_idx",sql:HISTORY_MESSAGE_REQUEST_ID_INDEX_SCHEMA_SQL},{id:"0024_spur_cli_history_checkpoint_identity",sql:"ALTER TABLE history_import_checkpoint ADD COLUMN source_size INTEGER",addColumnIfMissing:{table:"history_import_checkpoint",column:"source_size"}},{id:"0025_spur_cli_history_checkpoint_identity_mtime",sql:"ALTER TABLE history_import_checkpoint ADD COLUMN source_mtime_ms REAL",addColumnIfMissing:{table:"history_import_checkpoint",column:"source_mtime_ms"}},{id:"0026_spur_cli_history_message_duration_source",sql:"ALTER TABLE history_message ADD COLUMN duration_source TEXT",addColumnIfMissing:{table:"history_message",column:"duration_source"}},{id:"0027_spur_cli_history_refresh_active_unique",sql:HISTORY_REFRESH_ACTIVE_UNIQUE_SCHEMA_SQL},{id:"0028_spur_cli_history_task_session",sql:HISTORY_TASK_SESSION_SCHEMA_SQL},{id:"0029_spur_cli_history_tool_call_indexes",sql:HISTORY_TOOL_CALL_INDEXES_SCHEMA_SQL},{id:"0030_spur_cli_history_board_covering_indexes",sql:HISTORY_BOARD_COVERING_INDEXES_SCHEMA_SQL},{id:"0031_spur_cli_history_board_tool_stats_columns",sql:HISTORY_BOARD_TOOL_STATS_COLUMNS_SCHEMA_SQL},{id:"0032_spur_cli_history_board_skill_5m",sql:HISTORY_BOARD_SKILL_5M_SCHEMA_SQL},{id:"0033_spur_cli_importer_schema_version",sql:`INSERT OR REPLACE INTO "__spur_cli_migrations" (id, applied_at) VALUES ('${IMPORTER_SCHEMA_LEDGER_PREFIX}${HISTORY_IMPORT_SCHEMA_VERSION}', strftime('%s', 'now') * 1000);`},{id:"0034_spur_cli_history_tool_identity",sql:HISTORY_TOOL_IDENTITY_SCHEMA_SQL},{id:"0035_spur_cli_history_measure_vector",sql:HISTORY_MEASURE_VECTOR_SCHEMA_SQL},{id:"0036_spur_cli_history_rollup_watermark",sql:HISTORY_ROLLUP_WATERMARK_SCHEMA_SQL},{id:"0037_spur_cli_history_dimension_marts",sql:HISTORY_DIMENSION_MARTS_SCHEMA_SQL},{id:"0038_spur_cli_retention_compaction_meta",sql:RETENTION_COMPACTION_META_SCHEMA_SQL},{id:"0039_spur_cli_bounded_rollup_derivations",sql:BOUNDED_ROLLUP_DERIVATIONS_SCHEMA_SQL,addColumnIfMissing:{table:"history_board_source_daily",column:"raw_messages"}},{id:"0040_spur_cli_agent_executor_updates",sql:AGENT_EXECUTOR_UPDATES_SCHEMA_SQL},{id:"0041_spur_cli_queue_jobs_deadline_lease_columns",sql:QUEUE_JOBS_DEADLINE_LEASE_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"queue_jobs",column:"timeout_ms"}},{id:"0042_spur_cli_history_model_fallback_index",sql:HISTORY_MESSAGE_MODEL_FALLBACK_INDEX_SCHEMA_SQL},{id:"0043_spur_cli_inbox_messages_request_key",sql:INBOX_MESSAGES_REQUEST_KEY_SCHEMA_SQL,addColumnIfMissing:{table:"inbox_messages",column:"request_key"}},{id:"0044_spur_cli_coordination_runs_receipt_columns",sql:COORDINATION_RUNS_RECEIPT_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"coordination_runs",column:"message_ids_json"}},{id:"0045_spur_cli_project_claims",sql:PROJECT_CLAIMS_SCHEMA_SQL},{id:"0046_spur_cli_project_strategy",sql:PROJECT_STRATEGY_SCHEMA_SQL},{id:"0047_spur_cli_scheduler_custom_active_unique",sql:SCHEDULER_CUSTOM_ACTIVE_UNIQUE_SCHEMA_SQL},{id:"0048_spur_cli_agent_executor_updates_owner_columns",sql:AGENT_EXECUTOR_UPDATES_OWNER_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"agent_executor_updates",column:"owner"}}];init_zod();init_zod();var STAGE_REGISTRY_SCHEMA_VERSION={major:1,minor:3},stageSchemaVersionSchema=exports_external.object({major:exports_external.number().int().nonnegative(),minor:exports_external.number().int().nonnegative()}).strict();var MUTATION_CLASSES=["none","corpus","code","tests","verdict","learnings","driver","irreversible"];var inlineExecutionSchema=exports_external.object({kind:exports_external.literal("inline"),current_agent_allowed:exports_external.literal(!0),may_reuse_captured_layers:exports_external.boolean().optional()}).strict(),subprocessExecutionSchema=exports_external.object({kind:exports_external.literal("subprocess"),current_agent_allowed:exports_external.literal(!1),via:exports_external.literal("spur-agent-run")}).strict(),deterministicExecutionSchema=exports_external.object({kind:exports_external.literal("deterministic"),current_agent_allowed:exports_external.literal(!1),executor:exports_external.enum(["cli","script"])}).strict(),hitlExecutionSchema=exports_external.object({kind:exports_external.literal("hitl"),current_agent_allowed:exports_external.literal(!0),gate_timing:exports_external.enum(["pre","post","both"])}).strict(),irreversibleExecutionSchema=exports_external.object({kind:exports_external.literal("irreversible"),requires_operator_intent:exports_external.literal(!0),current_agent_allowed:exports_external.boolean(),rollback_disclaimer:exports_external.string().min(1)}).strict(),executionKindSchema=exports_external.discriminatedUnion("kind",[inlineExecutionSchema,subprocessExecutionSchema,deterministicExecutionSchema,hitlExecutionSchema,irreversibleExecutionSchema]),ARTIFACT_DIRECTIONS=["input","output"],stageArtifactSchema=exports_external.object({kind:exports_external.string().min(1),direction:exports_external.enum(ARTIFACT_DIRECTIONS),identity:exports_external.string().optional(),description:exports_external.string().optional(),required:exports_external.boolean().optional().default(!0)}).strict(),stageGateSchema=exports_external.object({name:exports_external.string().min(1),timing:exports_external.enum(["pre","post","transition"]),min_verdict:exports_external.enum(["pass","partial","fail"]).optional(),description:exports_external.string().optional()}).strict(),stageRetryPolicySchema=exports_external.object({max_attempts:exports_external.number().int().min(1),terminal_stop:exports_external.enum(["block","escalate","fail"]),timeout_seconds:exports_external.number().int().positive().optional()}).strict(),CAPABILITY_TIERS=["cheap","standard","capable-1","capable-2","capable-3"],LEGACY_CAPABLE_ALIAS="capable";function normalizeCapabilityTier(value){return value===LEGACY_CAPABLE_ALIAS?"capable-1":value}var capabilityTierSchema=exports_external.preprocess(normalizeCapabilityTier,exports_external.enum(CAPABILITY_TIERS)),objectiveEscalationTriggerSchema=exports_external.enum(["gate-fail","timeout","insufficient-evidence","retry-exhausted","resource-exhaustion","auth"]),stageModelPolicySchema=exports_external.object({min_tier:capabilityTierSchema,fallback:exports_external.array(exports_external.object({tier:capabilityTierSchema,trigger:objectiveEscalationTriggerSchema}).strict()),override_key:exports_external.string().optional()}).strict();var CONTEXT_LAYER_NAMES=["harness-policy","project-authority","stage-contract","task-state","indexed-evidence","run-state","tool-observations"],stageContextLayerSchema=exports_external.object({layer:exports_external.enum(CONTEXT_LAYER_NAMES),required:exports_external.literal(!0)}).strict(),stageEventSchema=exports_external.object({name:exports_external.string().min(1),description:exports_external.string().optional()}).strict(),STAGE_ID_PATTERN=/^[a-z][a-z0-9-]*$/,stageRecordSchema=exports_external.object({schema_version:stageSchemaVersionSchema,id:exports_external.string().regex(STAGE_ID_PATTERN,{message:"stage id must be lowercase kebab-case"}),aliases:exports_external.array(exports_external.string().min(1)).optional().default([]),description:exports_external.string().min(1),artifacts:exports_external.array(stageArtifactSchema).min(1),reasoning_skill:exports_external.string().min(1),required_references:exports_external.array(exports_external.string().min(1)).optional().default([]),gates:exports_external.array(stageGateSchema).optional().default([]),mutation_class:exports_external.enum(MUTATION_CLASSES),retry:stageRetryPolicySchema,model_policy:stageModelPolicySchema,context_layers:exports_external.array(stageContextLayerSchema).optional().default([]),observability:exports_external.array(stageEventSchema).optional().default([]),execution:executionKindSchema}).strict();var REGISTERED_CANONICAL_STAGES=[{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"refine",aliases:["dev-refine"],description:"dev-refine: Q&A refinement, section filling, AC tightening",artifacts:[{kind:"task-section",direction:"input",required:!0,description:"Background/Requirements sections"},{kind:"task-section",direction:"output",required:!0,description:"Q&A/Design/Plan/AC sections"}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-2",trigger:"gate-fail"},{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"plan",aliases:["dev-plan"],description:"dev-plan: feature intake -> AC generation -> decomposition",artifacts:[{kind:"feature-frontmatter",direction:"input",required:!0},{kind:"task-batch",direction:"output",required:!0}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[{name:"feature-check",timing:"post",min_verdict:"pass"},{name:"batch-create",timing:"post",min_verdict:"pass"}],mutation_class:"corpus",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"capable-2",fallback:[{tier:"capable-3",trigger:"gate-fail"},{tier:"capable-3",trigger:"auth"},{tier:"capable-3",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"implement",aliases:["dev-run"],description:"dev-run --mode implement: code edits in worktree",artifacts:[{kind:"worktree-diff",direction:"output",required:!0},{kind:"task-section",direction:"output",required:!0,identity:"Solution"}],reasoning_skill:"sp:code-implementation",required_references:[],gates:[],mutation_class:"code",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"timeout"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"test",aliases:["dev-unit","dev-fixall"],description:"dev-unit: generate/extend tests to coverage target",artifacts:[{kind:"test-file",direction:"output",required:!0},{kind:"coverage-report",direction:"output",required:!1}],reasoning_skill:"sp:code-testing",required_references:[],gates:[],mutation_class:"tests",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}],min_tier:"standard"},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"verify",aliases:["dev-verify"],description:"dev-verify: SECUA review + requirements traceability",artifacts:[{kind:"worktree-diff",direction:"input",required:!0},{kind:"verdict-artifact",direction:"output",required:!0,identity:"<wbs>-verdict.json"}],reasoning_skill:"sp:code-verification",required_references:[],gates:[{name:"verdict-artifact",timing:"post",min_verdict:"pass"},{name:"strict-core",timing:"post",min_verdict:"pass"}],mutation_class:"verdict",retry:{max_attempts:2,terminal_stop:"escalate"},model_policy:{min_tier:"capable-1",fallback:[{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"},{tier:"capable-2",trigger:"gate-fail"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"wrap",aliases:["dev-wrap"],description:"dev-wrap: learnings/doc-sync/feature transition",artifacts:[{kind:"learning-entry",direction:"output",required:!0}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[{name:"task-check",timing:"pre",min_verdict:"pass"}],mutation_class:"learnings",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"hitl",current_agent_allowed:!0,gate_timing:"both"}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"review",aliases:["dev-review"],description:"dev-review: multi-dimensional code review (coordinator writes the combined Review)",artifacts:[{kind:"review-findings",direction:"output",required:!0,identity:"Review"}],reasoning_skill:"sp:code-verification",required_references:[],gates:[],mutation_class:"verdict",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"record",aliases:["dev-record"],description:"record: deterministic Testing write-back from the verdict artifact; bare-Review fallback only",artifacts:[{kind:"verdict-artifact",direction:"input",required:!0,identity:"<wbs>-verdict.json"},{kind:"task-section",direction:"output",required:!0,identity:"Testing"},{kind:"task-section",direction:"output",required:!1,identity:"Review",description:"fallback-only: backfills Review only when the section is bare; never overwrites authored Review"}],reasoning_skill:"inline",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:1,terminal_stop:"block"},model_policy:{min_tier:"cheap",fallback:[]},context_layers:[],observability:[],execution:{kind:"deterministic",current_agent_allowed:!1,executor:"cli"}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"dogfood",aliases:["dev-dogfood"],description:"dev-dogfood: end-to-end driver test",artifacts:[{kind:"dogfood-report",direction:"output",required:!0},{kind:"monitor-ledger",direction:"output",required:!1}],reasoning_skill:"sp:dogfood-testing",required_references:[],gates:[],mutation_class:"driver",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"capable-1",fallback:[{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"},{tier:"capable-2",trigger:"gate-fail"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"brainstorm",aliases:["dev-brainstorm"],description:"dev-brainstorm: structured ideation",artifacts:[{kind:"brainstorm-outline",direction:"output",required:!0}],reasoning_skill:"sp:brainstorm",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"changelog",aliases:["dev-changelog"],description:"dev-changelog: generate changelog from git commits",artifacts:[{kind:"changelog-entry",direction:"output",required:!0}],reasoning_skill:"inline",required_references:[],gates:[],mutation_class:"none",retry:{max_attempts:1,terminal_stop:"block"},model_policy:{min_tier:"cheap",fallback:[]},context_layers:[],observability:[],execution:{kind:"deterministic",current_agent_allowed:!1,executor:"cli"}}],CANONICAL_STAGE_BY_KEY=new Map;for(let s2 of REGISTERED_CANONICAL_STAGES){CANONICAL_STAGE_BY_KEY.set(s2.id,s2);for(let a2 of s2.aliases??[])CANONICAL_STAGE_BY_KEY.set(a2,s2)}var CACHEABILITY_CLASSES=["stable-prefix-eligible","volatile"],SENSITIVITY_CLASSES=["public","internal","confidential"],envelopeProvenanceSchema=exports_external.object({owner:exports_external.string().min(1),schema_version:exports_external.string().min(1),source_revision:exports_external.string().nullable().optional(),generated_at:exports_external.string().datetime()}).strict(),envelopeSizeBudgetSchema=exports_external.object({max_bytes:exports_external.number().int().positive()}).strict(),envelopeLayerSchema=exports_external.object({layer:exports_external.enum(CONTEXT_LAYER_NAMES),content:exports_external.string(),size_bytes:exports_external.number().int().nonnegative(),content_hash:exports_external.string().length(64),provenance:envelopeProvenanceSchema,cacheability:exports_external.enum(CACHEABILITY_CLASSES),sensitivity:exports_external.enum(SENSITIVITY_CLASSES).default("internal"),size_budget:envelopeSizeBudgetSchema.optional(),disclosure_handle:exports_external.string().optional()}).strict(),STABLE_LAYER_NAMES=["harness-policy","project-authority","stage-contract","task-state","indexed-evidence"],VOLATILE_LAYER_NAMES=["run-state","tool-observations"];var envelopeSchema=exports_external.object({schema_version:exports_external.string().default("1.0"),layers:exports_external.array(envelopeLayerSchema).min(1),stage_id:exports_external.string().optional(),run_id:exports_external.string().optional(),assembled_at:exports_external.string().datetime(),total_size_bytes:exports_external.number().int().nonnegative()}).strict(),projectSnapshotSchema=exports_external.object({name:exports_external.string(),version:exports_external.string(),task_counts:exports_external.object({backlog:exports_external.number().int().nonnegative(),todo:exports_external.number().int().nonnegative(),wip:exports_external.number().int().nonnegative(),testing:exports_external.number().int().nonnegative(),done:exports_external.number().int().nonnegative(),blocked:exports_external.number().int().nonnegative(),cancelled:exports_external.number().int().nonnegative()}).strict(),feature_counts:exports_external.object({backlog:exports_external.number().int().nonnegative(),active:exports_external.number().int().nonnegative(),verifying:exports_external.number().int().nonnegative(),done:exports_external.number().int().nonnegative(),blocked:exports_external.number().int().nonnegative(),cancelled:exports_external.number().int().nonnegative()}).strict(),active_features:exports_external.array(exports_external.string()),content_hash:exports_external.string().length(64).optional()}).strict(),taskSnapshotSchema=exports_external.object({wbs:exports_external.string().regex(/^\d{4}$/),name:exports_external.string(),status:exports_external.string(),priority:exports_external.string().optional(),feature_id:exports_external.string().optional(),acceptance_criteria:exports_external.string().optional(),locked_qa:exports_external.array(exports_external.string()).optional(),solution:exports_external.string().optional(),content_hash:exports_external.string().length(64).optional()}).strict(),featureSnapshotSchema=exports_external.object({id:exports_external.string(),name:exports_external.string(),status:exports_external.string(),priority:exports_external.string().optional(),scenarios:exports_external.array(exports_external.string()).optional(),content_hash:exports_external.string().length(64).optional()}).strict();var ALL_LAYER_NAMES=[...STABLE_LAYER_NAMES,...VOLATILE_LAYER_NAMES],LAYER_ORDER={};ALL_LAYER_NAMES.forEach((name,idx)=>{LAYER_ORDER[name]=idx});init_dist2();var TASK_CANONICAL_SECTIONS=["Background","Requirements","Acceptance Criteria","Q&A","Design","Plan","Root Cause","Solution","Testing","Review","References","History"],FEATURE_CANONICAL_SECTIONS=["Goal","Scope","Acceptance Criteria","Tasks","Notes","History"],UNIVERSAL_SECTIONS=["History","References","Notes"],HEADING_LEVELS={task:3,feature:2},START_MARKER="<!-- AUTO-GENERATED by spur feature refresh -->",END_MARKER="<!-- END AUTO-GENERATED -->",MARKER_START_RE=/<!--[ \t]*AUTO-GENERATED.*?-->/,MARKER_END_RE=/<!--[ \t]*END[ \t]*AUTO-GENERATED.*?-->/;function findHeadings(body,hashes){let hits=[],prefix=`${hashes} `,inCodeBlock=!1,lineStart=0;for(let i2=0;i2<=body.length;i2++){if(i2!==body.length&&body[i2]!==`
|
|
1313
|
+
`,CLI_MIGRATIONS=[{id:"0000_spur_cli_foundation",sql:CLI_SCHEMA_SQL},{id:"0001_spur_cli_team_inbox",sql:INBOX_MESSAGES_SCHEMA_SQL},{id:"0002_spur_cli_rule_history",sql:RULE_ENGINE_SCHEMA_SQL},{id:"0003_spur_cli_planning",sql:PLANNING_SCHEMA_SQL},{id:"0004_spur_cli_queue_jobs",sql:QUEUE_JOBS_SCHEMA_SQL},{id:"0005_spur_cli_run_pid",sql:RUN_PID_COLUMN_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"pid"}},{id:"0006_spur_cli_system_events",sql:SYSTEM_EVENTS_SCHEMA_SQL},{id:"0007_spur_cli_runs_external_key",sql:RUNS_EXTERNAL_KEY_COLUMN_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"external_key"}},{id:"0008_spur_cli_system_events_correlation",sql:SYSTEM_EVENTS_CORRELATION_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"system_events",column:"sequence"}},{id:"0009_spur_cli_history_message_run_idx",sql:HISTORY_MESSAGE_RUN_INDEX_SCHEMA_SQL},{id:"0010_spur_cli_coordination_runs",sql:COORDINATION_RUNS_SCHEMA_SQL},{id:"0011_spur_cli_system_events_sequence_idx",sql:SYSTEM_EVENTS_SEQUENCE_INDEX_SCHEMA_SQL},{id:"0012_spur_cli_history_tool_call_args_raw",sql:HISTORY_TOOL_CALL_ARGS_RAW_SCHEMA_SQL,addColumnIfMissing:{table:"history_tool_call",column:"args_raw"}},{id:"0013_spur_cli_history_run_session",sql:HISTORY_RUN_SESSION_SCHEMA_SQL},{id:"0014_spur_cli_system_events_name_occurred_idx",sql:SYSTEM_EVENTS_NAME_OCCURRED_INDEX_SCHEMA_SQL},{id:"0015_spur_cli_history_tool_call_call_id",sql:HISTORY_TOOL_CALL_CALL_ID_SCHEMA_SQL,addColumnIfMissing:{table:"history_tool_call",column:"call_id"}},{id:"0016_spur_cli_history_message_ts_nullable",sql:HISTORY_MESSAGE_TS_NULLABLE_SCHEMA_SQL},{id:"0017_spur_cli_runs_status_completed_to_done",sql:"UPDATE runs SET status = 'done' WHERE status = 'completed'"},{id:"0018_spur_cli_history_message_request_id",sql:HISTORY_MESSAGE_REQUEST_ID_SCHEMA_SQL,addColumnIfMissing:{table:"history_message",column:"request_id"}},{id:"0019_spur_cli_history_etl_tables_drop",sql:HISTORY_ETL_TABLES_DROP_SCHEMA_SQL},{id:"0020_spur_cli_history_board_query_indexes",sql:HISTORY_BOARD_QUERY_INDEXES_SCHEMA_SQL},{id:"0021_spur_cli_history_board_rollups",sql:HISTORY_BOARD_ROLLUPS_SCHEMA_SQL},{id:"0022_spur_cli_history_performance_indexes",sql:HISTORY_PERFORMANCE_INDEXES_SCHEMA_SQL},{id:"0023_spur_cli_history_message_request_id_idx",sql:HISTORY_MESSAGE_REQUEST_ID_INDEX_SCHEMA_SQL},{id:"0024_spur_cli_history_checkpoint_identity",sql:"ALTER TABLE history_import_checkpoint ADD COLUMN source_size INTEGER",addColumnIfMissing:{table:"history_import_checkpoint",column:"source_size"}},{id:"0025_spur_cli_history_checkpoint_identity_mtime",sql:"ALTER TABLE history_import_checkpoint ADD COLUMN source_mtime_ms REAL",addColumnIfMissing:{table:"history_import_checkpoint",column:"source_mtime_ms"}},{id:"0026_spur_cli_history_message_duration_source",sql:"ALTER TABLE history_message ADD COLUMN duration_source TEXT",addColumnIfMissing:{table:"history_message",column:"duration_source"}},{id:"0027_spur_cli_history_refresh_active_unique",sql:HISTORY_REFRESH_ACTIVE_UNIQUE_SCHEMA_SQL},{id:"0028_spur_cli_history_task_session",sql:HISTORY_TASK_SESSION_SCHEMA_SQL},{id:"0029_spur_cli_history_tool_call_indexes",sql:HISTORY_TOOL_CALL_INDEXES_SCHEMA_SQL},{id:"0030_spur_cli_history_board_covering_indexes",sql:HISTORY_BOARD_COVERING_INDEXES_SCHEMA_SQL},{id:"0031_spur_cli_history_board_tool_stats_columns",sql:HISTORY_BOARD_TOOL_STATS_COLUMNS_SCHEMA_SQL},{id:"0032_spur_cli_history_board_skill_5m",sql:HISTORY_BOARD_SKILL_5M_SCHEMA_SQL},{id:"0033_spur_cli_importer_schema_version",sql:`INSERT OR REPLACE INTO "__spur_cli_migrations" (id, applied_at) VALUES ('${IMPORTER_SCHEMA_LEDGER_PREFIX}${HISTORY_IMPORT_SCHEMA_VERSION}', strftime('%s', 'now') * 1000);`},{id:"0034_spur_cli_history_tool_identity",sql:HISTORY_TOOL_IDENTITY_SCHEMA_SQL},{id:"0035_spur_cli_history_measure_vector",sql:HISTORY_MEASURE_VECTOR_SCHEMA_SQL},{id:"0036_spur_cli_history_rollup_watermark",sql:HISTORY_ROLLUP_WATERMARK_SCHEMA_SQL},{id:"0037_spur_cli_history_dimension_marts",sql:HISTORY_DIMENSION_MARTS_SCHEMA_SQL},{id:"0038_spur_cli_retention_compaction_meta",sql:RETENTION_COMPACTION_META_SCHEMA_SQL},{id:"0039_spur_cli_bounded_rollup_derivations",sql:BOUNDED_ROLLUP_DERIVATIONS_SCHEMA_SQL,addColumnIfMissing:{table:"history_board_source_daily",column:"raw_messages"}},{id:"0040_spur_cli_agent_executor_updates",sql:AGENT_EXECUTOR_UPDATES_SCHEMA_SQL},{id:"0041_spur_cli_queue_jobs_deadline_lease_columns",sql:QUEUE_JOBS_DEADLINE_LEASE_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"queue_jobs",column:"timeout_ms"}},{id:"0042_spur_cli_history_model_fallback_index",sql:HISTORY_MESSAGE_MODEL_FALLBACK_INDEX_SCHEMA_SQL},{id:"0043_spur_cli_inbox_messages_request_key",sql:INBOX_MESSAGES_REQUEST_KEY_SCHEMA_SQL,addColumnIfMissing:{table:"inbox_messages",column:"request_key"}},{id:"0044_spur_cli_coordination_runs_receipt_columns",sql:COORDINATION_RUNS_RECEIPT_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"coordination_runs",column:"message_ids_json"}},{id:"0045_spur_cli_project_claims",sql:PROJECT_CLAIMS_SCHEMA_SQL},{id:"0046_spur_cli_project_strategy",sql:PROJECT_STRATEGY_SCHEMA_SQL},{id:"0047_spur_cli_scheduler_custom_active_unique",sql:SCHEDULER_CUSTOM_ACTIVE_UNIQUE_SCHEMA_SQL},{id:"0048_spur_cli_agent_executor_updates_owner_columns",sql:AGENT_EXECUTOR_UPDATES_OWNER_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"agent_executor_updates",column:"owner"}},{id:"0049_spur_cli_runs_terminal_reason",sql:CLI_RUNS_TERMINAL_REASON_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"terminal_reason"}}];init_zod();init_zod();var STAGE_REGISTRY_SCHEMA_VERSION={major:1,minor:3},stageSchemaVersionSchema=exports_external.object({major:exports_external.number().int().nonnegative(),minor:exports_external.number().int().nonnegative()}).strict();var MUTATION_CLASSES=["none","corpus","code","tests","verdict","learnings","driver","irreversible"];var inlineExecutionSchema=exports_external.object({kind:exports_external.literal("inline"),current_agent_allowed:exports_external.literal(!0),may_reuse_captured_layers:exports_external.boolean().optional()}).strict(),subprocessExecutionSchema=exports_external.object({kind:exports_external.literal("subprocess"),current_agent_allowed:exports_external.literal(!1),via:exports_external.literal("spur-agent-run")}).strict(),deterministicExecutionSchema=exports_external.object({kind:exports_external.literal("deterministic"),current_agent_allowed:exports_external.literal(!1),executor:exports_external.enum(["cli","script"])}).strict(),hitlExecutionSchema=exports_external.object({kind:exports_external.literal("hitl"),current_agent_allowed:exports_external.literal(!0),gate_timing:exports_external.enum(["pre","post","both"])}).strict(),irreversibleExecutionSchema=exports_external.object({kind:exports_external.literal("irreversible"),requires_operator_intent:exports_external.literal(!0),current_agent_allowed:exports_external.boolean(),rollback_disclaimer:exports_external.string().min(1)}).strict(),executionKindSchema=exports_external.discriminatedUnion("kind",[inlineExecutionSchema,subprocessExecutionSchema,deterministicExecutionSchema,hitlExecutionSchema,irreversibleExecutionSchema]),ARTIFACT_DIRECTIONS=["input","output"],stageArtifactSchema=exports_external.object({kind:exports_external.string().min(1),direction:exports_external.enum(ARTIFACT_DIRECTIONS),identity:exports_external.string().optional(),description:exports_external.string().optional(),required:exports_external.boolean().optional().default(!0)}).strict(),stageGateSchema=exports_external.object({name:exports_external.string().min(1),timing:exports_external.enum(["pre","post","transition"]),min_verdict:exports_external.enum(["pass","partial","fail"]).optional(),description:exports_external.string().optional()}).strict(),stageRetryPolicySchema=exports_external.object({max_attempts:exports_external.number().int().min(1),terminal_stop:exports_external.enum(["block","escalate","fail"]),timeout_seconds:exports_external.number().int().positive().optional()}).strict(),CAPABILITY_TIERS=["cheap","standard","capable-1","capable-2","capable-3"],LEGACY_CAPABLE_ALIAS="capable";function normalizeCapabilityTier(value){return value===LEGACY_CAPABLE_ALIAS?"capable-1":value}var capabilityTierSchema=exports_external.preprocess(normalizeCapabilityTier,exports_external.enum(CAPABILITY_TIERS)),objectiveEscalationTriggerSchema=exports_external.enum(["gate-fail","timeout","insufficient-evidence","retry-exhausted","resource-exhaustion","auth"]),stageModelPolicySchema=exports_external.object({min_tier:capabilityTierSchema,fallback:exports_external.array(exports_external.object({tier:capabilityTierSchema,trigger:objectiveEscalationTriggerSchema}).strict()),override_key:exports_external.string().optional()}).strict();var CONTEXT_LAYER_NAMES=["harness-policy","project-authority","stage-contract","task-state","indexed-evidence","run-state","tool-observations"],stageContextLayerSchema=exports_external.object({layer:exports_external.enum(CONTEXT_LAYER_NAMES),required:exports_external.literal(!0)}).strict(),stageEventSchema=exports_external.object({name:exports_external.string().min(1),description:exports_external.string().optional()}).strict(),STAGE_ID_PATTERN=/^[a-z][a-z0-9-]*$/,stageRecordSchema=exports_external.object({schema_version:stageSchemaVersionSchema,id:exports_external.string().regex(STAGE_ID_PATTERN,{message:"stage id must be lowercase kebab-case"}),aliases:exports_external.array(exports_external.string().min(1)).optional().default([]),description:exports_external.string().min(1),artifacts:exports_external.array(stageArtifactSchema).min(1),reasoning_skill:exports_external.string().min(1),required_references:exports_external.array(exports_external.string().min(1)).optional().default([]),gates:exports_external.array(stageGateSchema).optional().default([]),mutation_class:exports_external.enum(MUTATION_CLASSES),retry:stageRetryPolicySchema,model_policy:stageModelPolicySchema,context_layers:exports_external.array(stageContextLayerSchema).optional().default([]),observability:exports_external.array(stageEventSchema).optional().default([]),execution:executionKindSchema}).strict();var REGISTERED_CANONICAL_STAGES=[{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"refine",aliases:["dev-refine"],description:"dev-refine: Q&A refinement, section filling, AC tightening",artifacts:[{kind:"task-section",direction:"input",required:!0,description:"Background/Requirements sections"},{kind:"task-section",direction:"output",required:!0,description:"Q&A/Design/Plan/AC sections"}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-2",trigger:"gate-fail"},{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"plan",aliases:["dev-plan"],description:"dev-plan: feature intake -> AC generation -> decomposition",artifacts:[{kind:"feature-frontmatter",direction:"input",required:!0},{kind:"task-batch",direction:"output",required:!0}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[{name:"feature-check",timing:"post",min_verdict:"pass"},{name:"batch-create",timing:"post",min_verdict:"pass"}],mutation_class:"corpus",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"capable-2",fallback:[{tier:"capable-3",trigger:"gate-fail"},{tier:"capable-3",trigger:"auth"},{tier:"capable-3",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"implement",aliases:["dev-run"],description:"dev-run --mode implement: code edits in worktree",artifacts:[{kind:"worktree-diff",direction:"output",required:!0},{kind:"task-section",direction:"output",required:!0,identity:"Solution"}],reasoning_skill:"sp:code-implementation",required_references:[],gates:[],mutation_class:"code",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"timeout"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"test",aliases:["dev-unit","dev-fixall"],description:"dev-unit: generate/extend tests to coverage target",artifacts:[{kind:"test-file",direction:"output",required:!0},{kind:"coverage-report",direction:"output",required:!1}],reasoning_skill:"sp:code-testing",required_references:[],gates:[],mutation_class:"tests",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}],min_tier:"standard"},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"verify",aliases:["dev-verify"],description:"dev-verify: SECUA review + requirements traceability",artifacts:[{kind:"worktree-diff",direction:"input",required:!0},{kind:"verdict-artifact",direction:"output",required:!0,identity:"<wbs>-verdict.json"}],reasoning_skill:"sp:code-verification",required_references:[],gates:[{name:"verdict-artifact",timing:"post",min_verdict:"pass"},{name:"strict-core",timing:"post",min_verdict:"pass"}],mutation_class:"verdict",retry:{max_attempts:2,terminal_stop:"escalate"},model_policy:{min_tier:"capable-1",fallback:[{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"},{tier:"capable-2",trigger:"gate-fail"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"wrap",aliases:["dev-wrap"],description:"dev-wrap: learnings/doc-sync/feature transition",artifacts:[{kind:"learning-entry",direction:"output",required:!0}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[{name:"task-check",timing:"pre",min_verdict:"pass"}],mutation_class:"learnings",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"hitl",current_agent_allowed:!0,gate_timing:"both"}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"review",aliases:["dev-review"],description:"dev-review: multi-dimensional code review (coordinator writes the combined Review)",artifacts:[{kind:"review-findings",direction:"output",required:!0,identity:"Review"}],reasoning_skill:"sp:code-verification",required_references:[],gates:[],mutation_class:"verdict",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"record",aliases:["dev-record"],description:"record: deterministic Testing write-back from the verdict artifact; bare-Review fallback only",artifacts:[{kind:"verdict-artifact",direction:"input",required:!0,identity:"<wbs>-verdict.json"},{kind:"task-section",direction:"output",required:!0,identity:"Testing"},{kind:"task-section",direction:"output",required:!1,identity:"Review",description:"fallback-only: backfills Review only when the section is bare; never overwrites authored Review"}],reasoning_skill:"inline",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:1,terminal_stop:"block"},model_policy:{min_tier:"cheap",fallback:[]},context_layers:[],observability:[],execution:{kind:"deterministic",current_agent_allowed:!1,executor:"cli"}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"dogfood",aliases:["dev-dogfood"],description:"dev-dogfood: end-to-end driver test",artifacts:[{kind:"dogfood-report",direction:"output",required:!0},{kind:"monitor-ledger",direction:"output",required:!1}],reasoning_skill:"sp:dogfood-testing",required_references:[],gates:[],mutation_class:"driver",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"capable-1",fallback:[{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"},{tier:"capable-2",trigger:"gate-fail"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"brainstorm",aliases:["dev-brainstorm"],description:"dev-brainstorm: structured ideation",artifacts:[{kind:"brainstorm-outline",direction:"output",required:!0}],reasoning_skill:"sp:brainstorm",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"changelog",aliases:["dev-changelog"],description:"dev-changelog: generate changelog from git commits",artifacts:[{kind:"changelog-entry",direction:"output",required:!0}],reasoning_skill:"inline",required_references:[],gates:[],mutation_class:"none",retry:{max_attempts:1,terminal_stop:"block"},model_policy:{min_tier:"cheap",fallback:[]},context_layers:[],observability:[],execution:{kind:"deterministic",current_agent_allowed:!1,executor:"cli"}}],CANONICAL_STAGE_BY_KEY=new Map;for(let s2 of REGISTERED_CANONICAL_STAGES){CANONICAL_STAGE_BY_KEY.set(s2.id,s2);for(let a2 of s2.aliases??[])CANONICAL_STAGE_BY_KEY.set(a2,s2)}var CACHEABILITY_CLASSES=["stable-prefix-eligible","volatile"],SENSITIVITY_CLASSES=["public","internal","confidential"],envelopeProvenanceSchema=exports_external.object({owner:exports_external.string().min(1),schema_version:exports_external.string().min(1),source_revision:exports_external.string().nullable().optional(),generated_at:exports_external.string().datetime()}).strict(),envelopeSizeBudgetSchema=exports_external.object({max_bytes:exports_external.number().int().positive()}).strict(),envelopeLayerSchema=exports_external.object({layer:exports_external.enum(CONTEXT_LAYER_NAMES),content:exports_external.string(),size_bytes:exports_external.number().int().nonnegative(),content_hash:exports_external.string().length(64),provenance:envelopeProvenanceSchema,cacheability:exports_external.enum(CACHEABILITY_CLASSES),sensitivity:exports_external.enum(SENSITIVITY_CLASSES).default("internal"),size_budget:envelopeSizeBudgetSchema.optional(),disclosure_handle:exports_external.string().optional()}).strict(),STABLE_LAYER_NAMES=["harness-policy","project-authority","stage-contract","task-state","indexed-evidence"],VOLATILE_LAYER_NAMES=["run-state","tool-observations"];var envelopeSchema=exports_external.object({schema_version:exports_external.string().default("1.0"),layers:exports_external.array(envelopeLayerSchema).min(1),stage_id:exports_external.string().optional(),run_id:exports_external.string().optional(),assembled_at:exports_external.string().datetime(),total_size_bytes:exports_external.number().int().nonnegative()}).strict(),projectSnapshotSchema=exports_external.object({name:exports_external.string(),version:exports_external.string(),task_counts:exports_external.object({backlog:exports_external.number().int().nonnegative(),todo:exports_external.number().int().nonnegative(),wip:exports_external.number().int().nonnegative(),testing:exports_external.number().int().nonnegative(),done:exports_external.number().int().nonnegative(),blocked:exports_external.number().int().nonnegative(),cancelled:exports_external.number().int().nonnegative()}).strict(),feature_counts:exports_external.object({backlog:exports_external.number().int().nonnegative(),active:exports_external.number().int().nonnegative(),verifying:exports_external.number().int().nonnegative(),done:exports_external.number().int().nonnegative(),blocked:exports_external.number().int().nonnegative(),cancelled:exports_external.number().int().nonnegative()}).strict(),active_features:exports_external.array(exports_external.string()),content_hash:exports_external.string().length(64).optional()}).strict(),taskSnapshotSchema=exports_external.object({wbs:exports_external.string().regex(/^\d{4}$/),name:exports_external.string(),status:exports_external.string(),priority:exports_external.string().optional(),feature_id:exports_external.string().optional(),acceptance_criteria:exports_external.string().optional(),locked_qa:exports_external.array(exports_external.string()).optional(),solution:exports_external.string().optional(),content_hash:exports_external.string().length(64).optional()}).strict(),featureSnapshotSchema=exports_external.object({id:exports_external.string(),name:exports_external.string(),status:exports_external.string(),priority:exports_external.string().optional(),scenarios:exports_external.array(exports_external.string()).optional(),content_hash:exports_external.string().length(64).optional()}).strict();var ALL_LAYER_NAMES=[...STABLE_LAYER_NAMES,...VOLATILE_LAYER_NAMES],LAYER_ORDER={};ALL_LAYER_NAMES.forEach((name,idx)=>{LAYER_ORDER[name]=idx});init_dist2();var TASK_CANONICAL_SECTIONS=["Background","Requirements","Acceptance Criteria","Q&A","Design","Plan","Root Cause","Solution","Testing","Review","References","History"],FEATURE_CANONICAL_SECTIONS=["Goal","Scope","Acceptance Criteria","Tasks","Notes","History"],UNIVERSAL_SECTIONS=["History","References","Notes"],HEADING_LEVELS={task:3,feature:2},START_MARKER="<!-- AUTO-GENERATED by spur feature refresh -->",END_MARKER="<!-- END AUTO-GENERATED -->",MARKER_START_RE=/<!--[ \t]*AUTO-GENERATED.*?-->/,MARKER_END_RE=/<!--[ \t]*END[ \t]*AUTO-GENERATED.*?-->/;function findHeadings(body,hashes){let hits=[],prefix=`${hashes} `,inCodeBlock=!1,lineStart=0;for(let i2=0;i2<=body.length;i2++){if(i2!==body.length&&body[i2]!==`
|
|
1310
1314
|
`)continue;let line=body.slice(lineStart,i2);if(line.startsWith("```"))inCodeBlock=!inCodeBlock;else if(!inCodeBlock&&line.startsWith(prefix)){let name=line.slice(prefix.length).trim();hits.push({index:lineStart,headingLine:line,name})}lineStart=i2+1}return hits}function normalizeYamlScalars(data){let out={};for(let[key,value]of Object.entries(data))if(value instanceof Date)out[key]=value.toISOString();else if(value!==null&&typeof value==="object"&&!Array.isArray(value))out[key]=normalizeYamlScalars(value);else out[key]=value;return out}class MarkdownDocument{_domain;_frontmatterBlock;_frontmatter;_preamble;_sections;_demotedHeadings=[];_duplicateSectionNames=[];constructor(domain2,frontmatterBlock,frontmatter,preamble,sections){this._domain=domain2,this._frontmatterBlock=frontmatterBlock,this._frontmatter=frontmatter,this._preamble=preamble,this._sections=sections}static parse(content,domain2){let level=HEADING_LEVELS[domain2],hashes="#".repeat(level),frontmatterBlock="",frontmatter=null,body=content,fmMatch=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(content);if(fmMatch&&fmMatch.index===0){let raw=fmMatch[1]??"",data={};try{let parsed=$parse(raw);if(parsed!==null&&typeof parsed==="object"&&!Array.isArray(parsed))data=normalizeYamlScalars(parsed)}catch{}frontmatter={raw,data},frontmatterBlock=fmMatch[0],body=content.slice(fmMatch[0].length)}let hits=findHeadings(body,hashes),first=hits[0],preamble=first!==void 0?body.slice(0,first.index):body,allSections=hits.map((hit,idx)=>{let next=hits[idx+1],end=next!==void 0?next.index:body.length;return{name:hit.name,headingLine:hit.headingLine,originalText:body.slice(hit.index,end),modifiedText:null}}),seen=new Set,sections=[],duplicateNames=[];for(let s2 of allSections)if(seen.has(s2.name))duplicateNames.push(s2.name);else seen.add(s2.name),sections.push(s2);let doc2=new MarkdownDocument(domain2,frontmatterBlock,frontmatter,preamble,sections);return doc2._duplicateSectionNames.push(...duplicateNames),doc2}get domain(){return this._domain}replacePreamble(newBody){this._preamble=newBody}get frontmatter(){return this._frontmatter}get frontmatterRaw(){return this._frontmatter?.raw??null}get frontmatterData(){return this._frontmatter?.data??null}get bodyWithoutFrontmatter(){let result=this._preamble;for(let section of this._sections)result+=section.modifiedText??section.originalText;return result}get sectionNames(){return this._sections.map((s2)=>s2.name)}get demotedHeadings(){return this._demotedHeadings}get duplicateSectionNames(){return this._duplicateSectionNames}get canonicalSections(){let base2=this._domain==="task"?TASK_CANONICAL_SECTIONS:FEATURE_CANONICAL_SECTIONS,extra=UNIVERSAL_SECTIONS.filter((s2)=>!base2.includes(s2));return[...base2,...extra]}validateSectionName(name){if(!this.canonicalSections.includes(name))throw Error(`Unknown section "${name}" for domain "${this._domain}". Canonical sections: ${this.canonicalSections.join(", ")}.`)}findSection(name){return this._sections.find((s2)=>s2.name===name)}hasSection(name){return this.findSection(name)!==void 0}getSection(name){this.validateSectionName(name);let section=this.findSection(name);if(section===void 0)return null;let text3=section.modifiedText??section.originalText,newlineIdx=text3.indexOf(`
|
|
1311
1315
|
`);return newlineIdx===-1?"":text3.slice(newlineIdx+1)}replaceSection(name,body){this.validateSectionName(name);let cleaned=this.stripSameLevelHeadings(body),section=this.findSection(name);if(section!==void 0){let trimmed=cleaned.trim();section.modifiedText=trimmed.length>0?`${section.headingLine}
|
|
1312
1316
|
|
|
@@ -14,4 +14,5 @@ export declare const resolveWorkflowDefinition: typeof import('@gobing-ai/spur-a
|
|
|
14
14
|
export declare const ArtifactDao: typeof import('@gobing-ai/spur-domain').ArtifactDao;
|
|
15
15
|
export declare const RunDao: typeof import('@gobing-ai/spur-domain').RunDao;
|
|
16
16
|
export declare const EMBEDDED_SPUR_SCHEMAS: ReadonlyMap<string, string>;
|
|
17
|
+
export declare const resolveDecideDecisionMakerEnabled: typeof import('@gobing-ai/spur-config/loader').resolveDecideDecisionMakerEnabled;
|
|
17
18
|
export declare function splitLaunchCommand(value: string, label: string): { command: string; leadingArgs: string[] } | { error: string };
|