@automagik/genie 4.260503.6 → 4.260503.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/genie.js
CHANGED
|
@@ -180,7 +180,7 @@ ${content}`;if(params.extraArgs){let fileIdx=params.extraArgs.indexOf("--append-
|
|
|
180
180
|
${readFileSync6(params.extraArgs[fileIdx+1],"utf-8")}`,params.extraArgs.splice(fileIdx,2)}writeFileSync6(promptFile,content);let flag=params.promptMode==="system"?"--system-prompt-file":"--append-system-prompt-file";parts.push(flag,escapeShellArg2(promptFile))}else if(params.systemPromptFile){let flag=params.promptMode==="system"?"--system-prompt-file":"--append-system-prompt-file";parts.push(flag,escapeShellArg2(params.systemPromptFile))}}function appendOtelEnv(env,params){if(!params.otelPort||process.env.OTEL_EXPORTER_OTLP_ENDPOINT)return;if(env.CLAUDE_CODE_ENABLE_TELEMETRY="1",env.OTEL_LOGS_EXPORTER="otlp",env.OTEL_METRICS_EXPORTER="otlp",env.OTEL_EXPORTER_OTLP_PROTOCOL="http/json",env.OTEL_EXPORTER_OTLP_ENDPOINT=`http://127.0.0.1:${params.otelPort}`,env.OTEL_LOG_TOOL_DETAILS="1",params.otelLogPrompts!==!1)env.OTEL_LOG_USER_PROMPTS="1";let resourceParts=[];if(params.role)resourceParts.push(`agent.name=${params.role}`);if(params.team)resourceParts.push(`team.name=${params.team}`);if(params.otelWishSlug)resourceParts.push(`wish.slug=${params.otelWishSlug}`);if(params.role)resourceParts.push(`agent.role=${params.role}`);if(resourceParts.length>0)env.OTEL_RESOURCE_ATTRIBUTES=resourceParts.join(",")}function appendTraceContext(parts,env,params){let ctx=getAmbient();if(params.initialPrompt){let prompt=ctx?injectPromptPreamble(params.initialPrompt,ctx):params.initialPrompt;parts.push(escapeShellArg2(prompt))}if(ctx)env[TRACE_ENV_VAR]=mintToken(ctx),env[TRACE_ID_ENV_VAR]=ctx.trace_id}function buildClaudeGenieEnv(params){let env={};if(env.GENIE_WORKER="1",params.role)env.GENIE_AGENT_NAME=params.role;if(params.team)env.GENIE_TEAM=params.team;if(params.executorId)env.GENIE_EXECUTOR_ID=params.executorId;if(params.agentId)env.GENIE_AGENT_ID=params.agentId;return env}function appendSessionFlags(parts,params){if(params.resume)parts.push("--resume",escapeShellArg2(params.resume));else if(params.sessionId)parts.push("--session-id",escapeShellArg2(params.sessionId));let claudeAgentFlag=params.agentTemplate??params.role;if(claudeAgentFlag)parts.push("--agent",escapeShellArg2(claudeAgentFlag));if(params.model)parts.push("--model",escapeShellArg2(params.model));if(params.name)parts.push("--name",escapeShellArg2(params.name))}function buildSettingsObject(params){let settingsObj={};if(!params.skipHooks){let hookEntry={type:"command",command:buildDispatchCommand(),timeout:15},{DISPATCHED_EVENT_MATCHERS:DISPATCHED_EVENT_MATCHERS2}=(init_types2(),__toCommonJS(exports_types)),hooks={};for(let[event,matcher]of Object.entries(DISPATCHED_EVENT_MATCHERS2))hooks[event]=[{matcher,hooks:[hookEntry]}];settingsObj.hooks=hooks}if(params.permissions){let perms={};if(params.permissions.allow?.length)perms.allow=params.permissions.allow;if(params.permissions.deny?.length)perms.deny=params.permissions.deny;if(Object.keys(perms).length>0)settingsObj.permissions=perms}return settingsObj}function warnIfAllowRulesAreBypassed(params){if(!params.permissions?.allow?.length)return;if(params.nativeTeam?.permissionMode!=="bypassPermissions")return;let agentName=params.nativeTeam.agentName??params.role??params.name??"unknown";process.stderr.write(`Warning: agent ${agentName} declares permissions.allow but permissionMode is bypassPermissions \u2014 allow rules are advisory under bypass (deny still enforced).
|
|
181
181
|
`)}function appendDisallowedAndExtraArgs(parts,params){if(params.disallowedTools?.length)for(let tool of params.disallowedTools)parts.push("--disallowedTools",escapeShellArg2(tool));if(params.extraArgs)for(let arg of params.extraArgs)parts.push(escapeShellArg2(arg))}function assertClaudeBuiltinHasIdentity(params){let templateName=params.agentTemplate??params.role;if(!templateName)return;if(params.resume)return;if(!resolveBuiltinAgentPath(templateName))return;if(params.systemPromptFile||params.systemPrompt)return;throw Error(`Refusing to launch built-in agent "${templateName}" without AGENTS.md identity. Resolve systemPromptFile or systemPrompt before building the Claude command.`)}function buildClaudeCommand(params){assertClaudeBuiltinHasIdentity(params),preflightCheck("claude");let parts=[resolveShellBinary("claude")??"claude","--permission-mode",escapeShellArg2("auto")],env=buildClaudeGenieEnv(params);if(appendOtelEnv(env,params),params.nativeTeam?.enabled)appendNativeTeamFlags(parts,env,params.nativeTeam,params);appendSessionFlags(parts,params),appendSystemPromptFlags(parts,params),warnIfAllowRulesAreBypassed(params);let settingsObj=buildSettingsObject(params);if(Object.keys(settingsObj).length>0)parts.push("--settings",escapeShellArg2(JSON.stringify(settingsObj)));return appendDisallowedAndExtraArgs(parts,params),appendTraceContext(parts,env,params),{command:parts.join(" "),provider:"claude",env:Object.keys(env).length>0?env:void 0,meta:{role:params.role,skill:params.skill}}}function buildCodexAutoPrompt(params){let promptParts=[`Genie worker. Team: ${params.team}.`];if(params.role)promptParts.push(`Role: ${params.role}.`);if(params.skill)promptParts.push(`Execute the ${params.skill} skill instructions.`);return promptParts.join(" ")}function sanitizeCodexPromptFileStem(stem){return stem.replace(/[^a-zA-Z0-9._-]/g,"-")||Date.now().toString(36)}function splitCodexExtraArgs(extraArgs){let forwarded=[],promptFiles=[],args=extraArgs??[];for(let i2=0;i2<args.length;i2++){let arg=args[i2],equalsFlag=[...CODEX_PROMPT_FILE_FLAGS].find((flag)=>arg.startsWith(`${flag}=`));if(equalsFlag){let path=arg.slice(equalsFlag.length+1);if(!path)throw Error(`Missing path for ${equalsFlag}`);promptFiles.push(path);continue}if(CODEX_PROMPT_FILE_FLAGS.has(arg)){let path=args[i2+1];if(!path)throw Error(`Missing path after ${arg}`);promptFiles.push(path),i2++;continue}forwarded.push(arg)}return{forwarded,promptFiles}}function buildCodexMergedPrompt(params,extraPromptFiles){let{readFileSync:readFileSync6}=__require("fs"),sections=[];if(params.systemPromptFile!==void 0)sections.push(readFileSync6(params.systemPromptFile,"utf-8"));if(params.systemPrompt!==void 0)sections.push(params.systemPrompt);for(let promptFile of extraPromptFiles)sections.push(readFileSync6(promptFile,"utf-8"));if(params.initialPrompt!==void 0)sections.push(params.initialPrompt);return sections.length>0?sections.join(`
|
|
182
182
|
|
|
183
|
-
`):null}function writeCodexPromptFile(params,content){let{mkdirSync:mkdirSync5,writeFileSync:writeFileSync6}=__require("fs"),{join:join10}=__require("path");mkdirSync5(CODEX_PROMPT_DIR,{recursive:!0});let stem=sanitizeCodexPromptFileStem(params.executorId??Date.now().toString(36)),promptFile=join10(CODEX_PROMPT_DIR,`${stem}.txt`);return writeFileSync6(promptFile,content,"utf-8"),promptFile}function buildCodexCommand(params){preflightCheck("codex");let parts=["codex"],env={};if(params.executorId)env.GENIE_EXECUTOR_ID=params.executorId;if(params.agentId)env.GENIE_AGENT_ID=params.agentId;if(params.role)env.GENIE_AGENT_NAME=params.role;else if(params.name)env.GENIE_AGENT_NAME=params.name;if(params.team)env.GENIE_TEAM=params.team;let{forwarded:extraArgs,promptFiles:extraPromptFiles}=splitCodexExtraArgs(params.extraArgs);parts.push("--yolo"),parts.push("--no-alt-screen");let codexModel=sanitizeModelForProvider("codex",params.model);if(codexModel)parts.push("--model",escapeShellArg2(codexModel));for(let arg of extraArgs)parts.push(escapeShellArg2(arg));let mergedPrompt=buildCodexMergedPrompt(params,extraPromptFiles);if(mergedPrompt!==null){let promptFile=writeCodexPromptFile(params,mergedPrompt);parts.push(`"$(cat ${escapeShellArg2(promptFile)})"`)}else parts.push(escapeShellArg2(buildCodexAutoPrompt(params)));return{command:parts.join(" "),provider:"codex",env:Object.keys(env).length>0?env:void 0,meta:{role:params.role,skill:params.skill}}}function buildLaunchCommand(params){let validated=validateSpawnParams(params);switch(validated.provider){case"claude":return buildClaudeCommand(validated);case"codex":return buildCodexCommand(validated);case"claude-sdk":return{command:"claude-sdk-in-process",provider:"claude-sdk",meta:{role:validated.role,skill:validated.skill}};default:throw Error(`Unknown provider "${validated.provider}". Valid providers: claude, codex, claude-sdk`)}}var CLAUDE_TEAM_COLORS,spawnParamsSchema,CODEX_PROMPT_DIR="/tmp/genie-codex-prompts",CODEX_PROMPT_FILE_FLAGS;var init_provider_adapters=__esm(()=>{init_zod();init_inject();init_builtin_agents();init_provider_models();init_trace_context();CLAUDE_TEAM_COLORS=["red","blue","green","yellow","purple","orange","pink","cyan"],spawnParamsSchema=exports_external.object({provider:exports_external.enum(["claude","codex","claude-sdk","app-pty"]),team:exports_external.string().min(1,"Team name is required"),role:exports_external.string().optional(),agentTemplate:exports_external.string().optional(),skill:exports_external.string().optional(),agentId:exports_external.string().optional(),executorId:exports_external.string().uuid().optional(),extraArgs:exports_external.array(exports_external.string()).optional(),nativeTeam:exports_external.object({enabled:exports_external.boolean(),parentSessionId:exports_external.string().optional(),color:exports_external.string().optional(),agentType:exports_external.string().optional(),planModeRequired:exports_external.boolean().optional(),permissionMode:exports_external.string().optional(),agentName:exports_external.string().optional()}).optional(),sessionId:exports_external.string().uuid().optional(),resume:exports_external.string().optional(),systemPromptFile:exports_external.string().optional(),systemPrompt:exports_external.string().optional(),promptMode:exports_external.enum(["system","append"]).optional(),model:exports_external.string().optional(),initialPrompt:exports_external.string().optional(),name:exports_external.string().optional(),permissions:exports_external.object({allow:exports_external.array(exports_external.string()).optional(),deny:exports_external.array(exports_external.string()).optional()}).optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),otelPort:exports_external.number().optional(),otelLogPrompts:exports_external.boolean().optional(),otelWishSlug:exports_external.string().optional(),newWindow:exports_external.boolean().optional(),windowTarget:exports_external.string().optional()});CODEX_PROMPT_FILE_FLAGS=new Set(["--append-system-prompt-file","--system-prompt-file"])});var exports_audit={};__export(exports_audit,{recordAuditEvent:()=>recordAuditEvent,queryToolUsageDetail:()=>queryToolUsageDetail,queryToolUsage:()=>queryToolUsage,queryTimeline:()=>queryTimeline,querySummary:()=>querySummary,queryErrorPatterns:()=>queryErrorPatterns,queryCostBreakdown:()=>queryCostBreakdown,queryAuditEvents:()=>queryAuditEvents,getActor:()=>getActor,generateTraceId:()=>generateTraceId,followAuditEvents:()=>followAuditEvents});async function recordAuditEvent(entityType,entityId,eventType,actor,details){try{if(!await isAvailable())return;let sql=await getConnection();await sql`
|
|
183
|
+
`):null}function writeCodexPromptFile(params,content){let{mkdirSync:mkdirSync5,writeFileSync:writeFileSync6}=__require("fs"),{join:join10}=__require("path");mkdirSync5(CODEX_PROMPT_DIR,{recursive:!0});let stem=sanitizeCodexPromptFileStem(params.executorId??Date.now().toString(36)),promptFile=join10(CODEX_PROMPT_DIR,`${stem}.txt`);return writeFileSync6(promptFile,content,"utf-8"),promptFile}function buildCodexCommand(params){preflightCheck("codex");let parts=["codex"],env={};if(params.executorId)env.GENIE_EXECUTOR_ID=params.executorId;if(params.agentId)env.GENIE_AGENT_ID=params.agentId;if(params.role)env.GENIE_AGENT_NAME=params.role;else if(params.name)env.GENIE_AGENT_NAME=params.name;if(params.team)env.GENIE_TEAM=params.team;let{forwarded:extraArgs,promptFiles:extraPromptFiles}=splitCodexExtraArgs(params.extraArgs);parts.push("--yolo"),parts.push("--no-alt-screen");let codexModel=sanitizeModelForProvider("codex",params.model);if(codexModel)parts.push("--model",escapeShellArg2(codexModel));for(let arg of extraArgs)parts.push(escapeShellArg2(arg));let mergedPrompt=buildCodexMergedPrompt(params,extraPromptFiles);if(mergedPrompt!==null){let promptFile=writeCodexPromptFile(params,mergedPrompt);parts.push(`"$(cat ${escapeShellArg2(promptFile)})"`)}else parts.push(escapeShellArg2(buildCodexAutoPrompt(params)));return{command:parts.join(" "),provider:"codex",env:Object.keys(env).length>0?env:void 0,meta:{role:params.role,skill:params.skill}}}function buildLaunchCommand(params){let validated=validateSpawnParams(params);switch(validated.provider){case"claude":return buildClaudeCommand(validated);case"codex":return buildCodexCommand(validated);case"claude-sdk":return{command:"claude-sdk-in-process",provider:"claude-sdk",meta:{role:validated.role,skill:validated.skill}};default:throw Error(`Unknown provider "${validated.provider}". Valid providers: claude, codex, claude-sdk`)}}var CLAUDE_TEAM_COLORS,spawnParamsSchema,CODEX_PROMPT_DIR="/tmp/genie-codex-prompts",CODEX_PROMPT_FILE_FLAGS;var init_provider_adapters=__esm(()=>{init_zod();init_inject();init_builtin_agents();init_provider_models();init_trace_context();CLAUDE_TEAM_COLORS=["red","blue","green","yellow","purple","orange","pink","cyan"],spawnParamsSchema=exports_external.object({provider:exports_external.enum(["claude","codex","claude-sdk","app-pty"]),team:exports_external.string().min(1,"Team name is required"),role:exports_external.string().optional(),agentTemplate:exports_external.string().optional(),skill:exports_external.string().optional(),agentId:exports_external.string().optional(),executorId:exports_external.string().uuid().optional(),extraArgs:exports_external.array(exports_external.string()).optional(),nativeTeam:exports_external.object({enabled:exports_external.boolean(),parentSessionId:exports_external.string().optional(),color:exports_external.string().optional(),agentType:exports_external.string().optional(),planModeRequired:exports_external.boolean().optional(),permissionMode:exports_external.string().optional(),agentName:exports_external.string().optional()}).optional(),sessionId:exports_external.string().uuid().optional(),resume:exports_external.string().optional(),systemPromptFile:exports_external.string().optional(),systemPrompt:exports_external.string().optional(),promptMode:exports_external.enum(["system","append"]).optional(),model:exports_external.string().optional(),initialPrompt:exports_external.string().optional(),name:exports_external.string().optional(),permissions:exports_external.object({allow:exports_external.array(exports_external.string()).optional(),deny:exports_external.array(exports_external.string()).optional(),allowedTools:exports_external.array(exports_external.string()).optional(),permissionMode:exports_external.enum(["default","acceptEdits","bypassPermissions","plan","dontAsk","auto","remoteApproval"]).optional()}).optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),otelPort:exports_external.number().optional(),otelLogPrompts:exports_external.boolean().optional(),otelWishSlug:exports_external.string().optional(),newWindow:exports_external.boolean().optional(),windowTarget:exports_external.string().optional()});CODEX_PROMPT_FILE_FLAGS=new Set(["--append-system-prompt-file","--system-prompt-file"])});var exports_audit={};__export(exports_audit,{recordAuditEvent:()=>recordAuditEvent,queryToolUsageDetail:()=>queryToolUsageDetail,queryToolUsage:()=>queryToolUsage,queryTimeline:()=>queryTimeline,querySummary:()=>querySummary,queryErrorPatterns:()=>queryErrorPatterns,queryCostBreakdown:()=>queryCostBreakdown,queryAuditEvents:()=>queryAuditEvents,getActor:()=>getActor,generateTraceId:()=>generateTraceId,followAuditEvents:()=>followAuditEvents});async function recordAuditEvent(entityType,entityId,eventType,actor,details){try{if(!await isAvailable())return;let sql=await getConnection();await sql`
|
|
184
184
|
INSERT INTO audit_events (entity_type, entity_id, event_type, actor, details)
|
|
185
185
|
VALUES (${entityType}, ${entityId}, ${eventType}, ${actor??null}, ${sql.json(details??{})})
|
|
186
186
|
`}catch{}}function parseSince(since){let match=since.match(/^(\d+)([smhd])$/);if(!match)return since;let amount=Number.parseInt(match[1],10),unit=match[2],ms={s:1000,m:60000,h:3600000,d:86400000}[unit]??3600000;return new Date(Date.now()-amount*ms).toISOString()}async function queryAuditEvents(options={}){let sql=await getConnection(),conditions=[],values=[],paramIdx=1;if(options.type)conditions.push(`(event_type = $${paramIdx} OR entity_type = $${paramIdx})`),paramIdx++,values.push(options.type);if(options.entity)conditions.push(`(entity_type = $${paramIdx} OR entity_id = $${paramIdx})`),paramIdx++,values.push(options.entity);if(options.since)conditions.push(`created_at >= $${paramIdx++}::timestamptz`),values.push(parseSince(options.since));if(options.errorsOnly)conditions.push("event_type LIKE '%error%' OR (details::text LIKE '%error%')");let where=conditions.length>0?`WHERE ${conditions.join(" AND ")}`:"",limit=options.limit??50;return await sql.unsafe(`SELECT id, entity_type, entity_id, event_type, actor, details, created_at
|
|
@@ -625,7 +625,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
|
|
|
625
625
|
${a.repoPath??null}, ${null},
|
|
626
626
|
${a.startedAt??new Date().toISOString()}
|
|
627
627
|
) ON CONFLICT (id) DO NOTHING
|
|
628
|
-
`,await sql`UPDATE agents SET current_executor_id = ${executorId} WHERE id = ${a.id} AND current_executor_id IS NULL`}async function seedWorkers(sql){let filePath=workersJsonPath();if(!needsMigration(filePath))return{agents:0,templates:0};let data=await readJson(filePath);if(!data)return{agents:0,templates:0};let agentCount=0;for(let agent of Object.values(data.workers??{})){if(!agent.id)continue;await upsertAgent(sql,agent),await upsertExecutorFromAgent(sql,agent),agentCount++}let templateCount=0;for(let tpl of Object.values(data.templates??{})){if(!tpl.id)continue;await upsertTemplate(sql,tpl),templateCount++}return{agents:agentCount,templates:templateCount}}function deriveLeader(cfg){if(!cfg.leadAgentId)return null;let at=cfg.leadAgentId.indexOf("@");return at===-1?cfg.leadAgentId:cfg.leadAgentId.slice(0,at)}async function upsertNativeTeam(sql,c){let
|
|
628
|
+
`,await sql`UPDATE agents SET current_executor_id = ${executorId} WHERE id = ${a.id} AND current_executor_id IS NULL`}async function seedWorkers(sql){let filePath=workersJsonPath();if(!needsMigration(filePath))return{agents:0,templates:0};let data=await readJson(filePath);if(!data)return{agents:0,templates:0};let agentCount=0;for(let agent of Object.values(data.workers??{})){if(!agent.id)continue;await upsertAgent(sql,agent),await upsertExecutorFromAgent(sql,agent),agentCount++}let templateCount=0;for(let tpl of Object.values(data.templates??{})){if(!tpl.id)continue;await upsertTemplate(sql,tpl),templateCount++}return{agents:agentCount,templates:templateCount}}function deriveLeader(cfg){if(!cfg.leadAgentId)return null;let at=cfg.leadAgentId.indexOf("@");return at===-1?cfg.leadAgentId:cfg.leadAgentId.slice(0,at)}function isValidTeamMember(s){return MEMBER_UUID_RE.test(s)||s.startsWith("dir:")}async function upsertNativeTeam(sql,c){let rawMemberNames=(c.members??[]).map((m)=>m.name).filter((n)=>typeof n==="string"&&n.length>0),memberNames=rawMemberNames.filter(isValidTeamMember),dropped=rawMemberNames.length-memberNames.length;if(dropped>0)console.warn(`[pg-seed] team "${c.name}": dropped ${dropped} legacy member name(s) failing migration 061 constraint (UUID or dir: prefix required); kept ${memberNames.length}`);await sql`
|
|
629
629
|
INSERT INTO teams (
|
|
630
630
|
name, repo, base_branch, worktree_path, leader,
|
|
631
631
|
members, status, native_team_parent_session_id,
|
|
@@ -656,7 +656,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
|
|
|
656
656
|
${msg.timestamp??new Date().toISOString()}
|
|
657
657
|
) ON CONFLICT (id) DO NOTHING
|
|
658
658
|
`}function parseJsonlRecords(content){let records=[];for(let line of content.trim().split(`
|
|
659
|
-
`).filter(Boolean))try{let msg=JSON.parse(line);if(msg.id)records.push(msg)}catch{}return records}async function seedTeamChat(sql,repoPath){let dir=join16(repoPath,".genie","chat");if(!existsSync12(dir))return 0;let files;try{files=await readdir3(dir)}catch{return 0}let count=0;for(let file of files){if(!file.endsWith(".jsonl")||file.endsWith(".migrated"))continue;if(!needsMigration(join16(dir,file)))continue;let teamName=file.replace(".jsonl","").replace(/--/g,"/"),content;try{content=await readFile4(join16(dir,file),"utf-8")}catch{continue}for(let msg of parseJsonlRecords(content))await upsertChatMessage(sql,msg,teamName,repoPath),count++}return count}async function markMigrated(repoPath){let workersPath=workersJsonPath();if(needsMigration(workersPath))await rename(workersPath,`${workersPath}.migrated`);if(!repoPath)return;await renameMatchingFiles(join16(repoPath,".genie","mailbox"),isMailboxFile),await renameMatchingFiles(join16(repoPath,".genie","chat"),(f)=>f.endsWith(".jsonl")&&!f.endsWith(".migrated"))}async function runSeed(sql,repoPath){let result2={agents:0,templates:0,teams:0,mailboxMessages:0,chatMessages:0},workers=await seedWorkers(sql);result2.agents=workers.agents,result2.templates=workers.templates;let teams=await seedTeams(sql);if(result2.teams=teams.count,repoPath)result2.mailboxMessages=await seedMailbox(sql,repoPath),result2.chatMessages=await seedTeamChat(sql,repoPath);if(await markMigrated(repoPath),!teams.hadFailures)await writeTeamsSeedMarker(teams.teamNames);return result2}var init_pg_seed=__esm(()=>{init_claude_native_teams()});import{execSync as execSync2}from"child_process";import{readFileSync as readFileSync8}from"fs";function getProcessStartTime(pid){if(!Number.isInteger(pid)||pid<=0)return null;try{if(process.platform==="darwin"){let raw=execSync2(`ps -o lstart= -p ${pid}`,{encoding:"utf8",timeout:1000,stdio:["ignore","pipe","ignore"]}).trim();return raw===""?null:raw}if(process.platform==="linux"){let raw=readFileSync8(`/proc/${pid}/stat`,"utf-8"),closeParen=raw.lastIndexOf(")");if(closeParen<0)return null;let starttime=raw.slice(closeParen+1).trim().split(/\s+/)[19];return starttime&&starttime.length>0?starttime:null}}catch{return null}return null}var init_process_identity=()=>{};function cachedError(xs){if(originCache.has(xs))return originCache.get(xs);let x=Error.stackTraceLimit;return Error.stackTraceLimit=4,originCache.set(xs,Error()),Error.stackTraceLimit=x,originCache.get(xs)}var originCache,originStackCache,originError,CLOSE,Query;var init_query=__esm(()=>{originCache=new Map,originStackCache=new Map,originError=Symbol("OriginError"),CLOSE={};Query=class Query extends Promise{constructor(strings,args,handler,canceller,options={}){let resolve3,reject;super((a,b)=>{resolve3=a,reject=b});this.tagged=Array.isArray(strings.raw),this.strings=strings,this.args=args,this.handler=handler,this.canceller=canceller,this.options=options,this.state=null,this.statement=null,this.resolve=(x)=>(this.active=!1,resolve3(x)),this.reject=(x)=>(this.active=!1,reject(x)),this.active=!1,this.cancelled=null,this.executed=!1,this.signature="",this[originError]=this.handler.debug?Error():this.tagged&&cachedError(this.strings)}get origin(){return(this.handler.debug?this[originError].stack:this.tagged&&originStackCache.has(this.strings)?originStackCache.get(this.strings):originStackCache.set(this.strings,this[originError].stack).get(this.strings))||""}static get[Symbol.species](){return Promise}cancel(){return this.canceller&&(this.canceller(this),this.canceller=null)}simple(){return this.options.simple=!0,this.options.prepare=!1,this}async readable(){return this.simple(),this.streaming=!0,this}async writable(){return this.simple(),this.streaming=!0,this}cursor(rows=1,fn){if(this.options.simple=!1,typeof rows==="function")fn=rows,rows=1;if(this.cursorRows=rows,typeof fn==="function")return this.cursorFn=fn,this;let prev;return{[Symbol.asyncIterator]:()=>({next:()=>{if(this.executed&&!this.active)return{done:!0};prev&&prev();let promise=new Promise((resolve3,reject)=>{this.cursorFn=(value)=>{return resolve3({value,done:!1}),new Promise((r)=>prev=r)},this.resolve=()=>(this.active=!1,resolve3({done:!0})),this.reject=(x)=>(this.active=!1,reject(x))});return this.execute(),promise},return(){return prev&&prev(CLOSE),{done:!0}}})}}describe(){return this.options.simple=!1,this.onlyDescribe=this.options.prepare=!0,this}stream(){throw Error(".stream has been renamed to .forEach")}forEach(fn){return this.forEachFn=fn,this.handle(),this}raw(){return this.isRaw=!0,this}values(){return this.isRaw="values",this}async handle(){!this.executed&&(this.executed=!0)&&await 1&&this.handler(this)}execute(){return this.handle(),this}then(){return this.handle(),super.then.apply(this,arguments)}catch(){return this.handle(),super.catch.apply(this,arguments)}finally(){return this.handle(),super.finally.apply(this,arguments)}}});function connection(x,options,socket){let{host,port}=socket||options,error=Object.assign(Error("write "+x+" "+(options.path||host+":"+port)),{code:x,errno:x,address:options.path||host},options.path?{}:{port});return Error.captureStackTrace(error,connection),error}function postgres(x){let error=new PostgresError(x);return Error.captureStackTrace(error,postgres),error}function generic(code,message){let error=Object.assign(Error(code+": "+message),{code});return Error.captureStackTrace(error,generic),error}function notSupported(x){let error=Object.assign(Error(x+" (B) is not supported"),{code:"MESSAGE_NOT_SUPPORTED",name:x});return Error.captureStackTrace(error,notSupported),error}var PostgresError,Errors;var init_errors2=__esm(()=>{PostgresError=class PostgresError extends Error{constructor(x){super(x.message);this.name=this.constructor.name,Object.assign(this,x)}};Errors={connection,postgres,generic,notSupported}});class NotTagged{then(){notTagged()}catch(){notTagged()}finally(){notTagged()}}function handleValue(x,parameters,types4,options){let value=x instanceof Parameter?x.value:x;if(value===void 0){if(x instanceof Parameter?x.value=options.transform.undefined:value=x=options.transform.undefined,value===void 0)throw Errors.generic("UNDEFINED_VALUE","Undefined values are not allowed")}return"$"+types4.push(x instanceof Parameter?(parameters.push(x.value),x.array?x.array[x.type||inferType(x.value)]||x.type||firstIsString(x.value):x.type):(parameters.push(x),inferType(x)))}function stringify(q,string,value,parameters,types4,options){for(let i2=1;i2<q.strings.length;i2++)string+=stringifyValue(string,value,parameters,types4,options)+q.strings[i2],value=q.args[i2];return string}function stringifyValue(string,value,parameters,types4,o){return value instanceof Builder?value.build(string,parameters,types4,o):value instanceof Query?fragment(value,parameters,types4,o):value instanceof Identifier?value.value:value&&value[0]instanceof Query?value.reduce((acc,x)=>acc+" "+fragment(x,parameters,types4,o),""):handleValue(value,parameters,types4,o)}function fragment(q,parameters,types4,options){return q.fragment=!0,stringify(q,q.strings[0],q.args[0],parameters,types4,options)}function valuesBuilder(first,parameters,types4,columns,options){return first.map((row)=>"("+columns.map((column)=>stringifyValue("values",row[column],parameters,types4,options)).join(",")+")").join(",")}function values(first,rest,parameters,types4,options){let multi=Array.isArray(first[0]),columns=rest.length?rest.flat():Object.keys(multi?first[0]:first);return valuesBuilder(multi?first:[first],parameters,types4,columns,options)}function select(first,rest,parameters,types4,options){if(typeof first==="string"&&(first=[first].concat(rest)),Array.isArray(first))return escapeIdentifiers(first,options);let value;return(rest.length?rest.flat():Object.keys(first)).map((x)=>{return value=first[x],(value instanceof Query?fragment(value,parameters,types4,options):value instanceof Identifier?value.value:handleValue(value,parameters,types4,options))+" as "+escapeIdentifier(options.transform.column.to?options.transform.column.to(x):x)}).join(",")}function notTagged(){throw Errors.generic("NOT_TAGGED_CALL","Query not called as a tagged template literal")}function firstIsString(x){if(Array.isArray(x))return firstIsString(x[0]);return typeof x==="string"?1009:0}function typeHandlers(types4){return Object.keys(types4).reduce((acc,k)=>{if(types4[k].from&&[].concat(types4[k].from).forEach((x)=>acc.parsers[x]=types4[k].parse),types4[k].serialize)acc.serializers[types4[k].to]=types4[k].serialize,types4[k].from&&[].concat(types4[k].from).forEach((x)=>acc.serializers[x]=types4[k].serialize);return acc},{parsers:{},serializers:{}})}function escapeIdentifiers(xs,{transform:{column}}){return xs.map((x)=>escapeIdentifier(column.to?column.to(x):x)).join(",")}function arrayEscape(x){return x.replace(escapeBackslash,"\\\\").replace(escapeQuote,"\\\"")}function arrayParserLoop(s,x,parser,typarray){let xs=[],delimiter=typarray===1020?";":",";for(;s.i<x.length;s.i++){if(s.char=x[s.i],s.quoted)if(s.char==="\\")s.str+=x[++s.i];else if(s.char==='"')xs.push(parser?parser(s.str):s.str),s.str="",s.quoted=x[s.i+1]==='"',s.last=s.i+2;else s.str+=s.char;else if(s.char==='"')s.quoted=!0;else if(s.char==="{")s.last=++s.i,xs.push(arrayParserLoop(s,x,parser,typarray));else if(s.char==="}"){s.quoted=!1,s.last<s.i&&xs.push(parser?parser(x.slice(s.last,s.i)):x.slice(s.last,s.i)),s.last=s.i+1;break}else if(s.char===delimiter&&s.p!=="}"&&s.p!=='"')xs.push(parser?parser(x.slice(s.last,s.i)):x.slice(s.last,s.i)),s.last=s.i+1;s.p=s.char}return s.last<s.i&&xs.push(parser?parser(x.slice(s.last,s.i+1)):x.slice(s.last,s.i+1)),xs}function createJsonTransform(fn){return function jsonTransform(x,column){return typeof x==="object"&&x!==null&&(column.type===114||column.type===3802)?Array.isArray(x)?x.map((x2)=>jsonTransform(x2,column)):Object.entries(x).reduce((acc,[k,v])=>Object.assign(acc,{[fn(k)]:jsonTransform(v,column)}),{}):x}}var types3,Identifier,Parameter,Builder,defaultHandlers,builders,serializers,parsers,mergeUserTypes=function(types4){let user=typeHandlers(types4||{});return{serializers:Object.assign({},serializers,user.serializers),parsers:Object.assign({},parsers,user.parsers)}},escapeIdentifier=function(str2){return'"'+str2.replace(/"/g,'""').replace(/\./g,'"."')+'"'},inferType=function inferType2(x){return x instanceof Parameter?x.type:x instanceof Date?1184:x instanceof Uint8Array?17:x===!0||x===!1?16:typeof x==="bigint"?20:Array.isArray(x)?inferType2(x[0]):0},escapeBackslash,escapeQuote,arraySerializer=function arraySerializer2(xs,serializer,options,typarray){if(Array.isArray(xs)===!1)return xs;if(!xs.length)return"{}";let first=xs[0],delimiter=typarray===1020?";":",";if(Array.isArray(first)&&!first.type)return"{"+xs.map((x)=>arraySerializer2(x,serializer,options,typarray)).join(delimiter)+"}";return"{"+xs.map((x)=>{if(x===void 0){if(x=options.transform.undefined,x===void 0)throw Errors.generic("UNDEFINED_VALUE","Undefined values are not allowed")}return x===null?"null":'"'+arrayEscape(serializer?serializer(x.type?x.value:x):""+x)+'"'}).join(delimiter)+"}"},arrayParserState,arrayParser=function(x,parser,typarray){return arrayParserState.i=arrayParserState.last=0,arrayParserLoop(arrayParserState,x,parser,typarray)},toCamel=(x)=>{let str2=x[0];for(let i2=1;i2<x.length;i2++)str2+=x[i2]==="_"?x[++i2].toUpperCase():x[i2];return str2},toPascal=(x)=>{let str2=x[0].toUpperCase();for(let i2=1;i2<x.length;i2++)str2+=x[i2]==="_"?x[++i2].toUpperCase():x[i2];return str2},toKebab=(x)=>x.replace(/_/g,"-"),fromCamel=(x)=>x.replace(/([A-Z])/g,"_$1").toLowerCase(),fromPascal=(x)=>(x.slice(0,1)+x.slice(1).replace(/([A-Z])/g,"_$1")).toLowerCase(),fromKebab=(x)=>x.replace(/-/g,"_"),camel,pascal,kebab;var init_types3=__esm(()=>{init_query();init_errors2();types3={string:{to:25,from:null,serialize:(x)=>""+x},number:{to:0,from:[21,23,26,700,701],serialize:(x)=>""+x,parse:(x)=>+x},json:{to:114,from:[114,3802],serialize:(x)=>JSON.stringify(x),parse:(x)=>JSON.parse(x)},boolean:{to:16,from:16,serialize:(x)=>x===!0?"t":"f",parse:(x)=>x==="t"},date:{to:1184,from:[1082,1114,1184],serialize:(x)=>(x instanceof Date?x:new Date(x)).toISOString(),parse:(x)=>new Date(x)},bytea:{to:17,from:17,serialize:(x)=>"\\x"+Buffer.from(x).toString("hex"),parse:(x)=>Buffer.from(x.slice(2),"hex")}};Identifier=class Identifier extends NotTagged{constructor(value){super();this.value=escapeIdentifier(value)}};Parameter=class Parameter extends NotTagged{constructor(value,type2,array){super();this.value=value,this.type=type2,this.array=array}};Builder=class Builder extends NotTagged{constructor(first,rest){super();this.first=first,this.rest=rest}build(before,parameters,types4,options){let keyword=builders.map(([x,fn])=>({fn,i:before.search(x)})).sort((a,b)=>a.i-b.i).pop();return keyword.i===-1?escapeIdentifiers(this.first,options):keyword.fn(this.first,this.rest,parameters,types4,options)}};defaultHandlers=typeHandlers(types3);builders=Object.entries({values,in:(...xs)=>{let x=values(...xs);return x==="()"?"(null)":x},select,as:select,returning:select,"\\(":select,update(first,rest,parameters,types4,options){return(rest.length?rest.flat():Object.keys(first)).map((x)=>escapeIdentifier(options.transform.column.to?options.transform.column.to(x):x)+"="+stringifyValue("values",first[x],parameters,types4,options))},insert(first,rest,parameters,types4,options){let columns=rest.length?rest.flat():Object.keys(Array.isArray(first)?first[0]:first);return"("+escapeIdentifiers(columns,options)+")values"+valuesBuilder(Array.isArray(first)?first:[first],parameters,types4,columns,options)}}).map(([x,fn])=>[new RegExp("((?:^|[\\s(])"+x+"(?:$|[\\s(]))(?![\\s\\S]*\\1)","i"),fn]);serializers=defaultHandlers.serializers,parsers=defaultHandlers.parsers;escapeBackslash=/\\/g,escapeQuote=/"/g;arrayParserState={i:0,char:null,str:"",quoted:!1,last:0};toCamel.column={from:toCamel};toCamel.value={from:createJsonTransform(toCamel)};fromCamel.column={to:fromCamel};camel={...toCamel};camel.column.to=fromCamel;toPascal.column={from:toPascal};toPascal.value={from:createJsonTransform(toPascal)};fromPascal.column={to:fromPascal};pascal={...toPascal};pascal.column.to=fromPascal;toKebab.column={from:toKebab};toKebab.value={from:createJsonTransform(toKebab)};fromKebab.column={to:fromKebab};kebab={...toKebab};kebab.column.to=fromKebab});var Result;var init_result=__esm(()=>{Result=class Result extends Array{constructor(){super();Object.defineProperties(this,{count:{value:null,writable:!0},state:{value:null,writable:!0},command:{value:null,writable:!0},columns:{value:null,writable:!0},statement:{value:null,writable:!0}})}static get[Symbol.species](){return Array}}});function Queue(initial=[]){let xs=initial.slice(),index=0;return{get length(){return xs.length-index},remove:(x)=>{let index2=xs.indexOf(x);return index2===-1?null:(xs.splice(index2,1),x)},push:(x)=>(xs.push(x),x),shift:()=>{let out=xs[index++];if(index===xs.length)index=0,xs=[];else xs[index-1]=void 0;return out}}}var queue_default;var init_queue=__esm(()=>{queue_default=Queue});function fit(x){if(buffer.length-b.i<x){let prev=buffer,length=prev.length;buffer=Buffer.allocUnsafe(length+(length>>1)+x),prev.copy(buffer)}}function reset(){return b.i=0,b}var buffer,messages,b,bytes_default;var init_bytes=__esm(()=>{buffer=Buffer.allocUnsafe(256),messages="BCcDdEFfHPpQSX".split("").reduce((acc,x)=>{let v=x.charCodeAt(0);return acc[x]=()=>{return buffer[0]=v,b.i=5,b},acc},{}),b=Object.assign(reset,messages,{N:String.fromCharCode(0),i:0,inc(x){return b.i+=x,b},str(x){let length=Buffer.byteLength(x);return fit(length),b.i+=buffer.write(x,b.i,length,"utf8"),b},i16(x){return fit(2),buffer.writeUInt16BE(x,b.i),b.i+=2,b},i32(x,i2){if(i2||i2===0)return buffer.writeUInt32BE(x,i2),b;return fit(4),buffer.writeUInt32BE(x,b.i),b.i+=4,b},z(x){return fit(x),buffer.fill(0,b.i,b.i+x),b.i+=x,b},raw(x){return buffer=Buffer.concat([buffer.subarray(0,b.i),x]),b.i=buffer.length,b},end(at=1){buffer.writeUInt32BE(b.i-at,at);let out=buffer.subarray(0,b.i);return b.i=0,buffer=Buffer.allocUnsafe(256),out}}),bytes_default=b});import net from"net";import tls from"tls";import crypto2 from"crypto";import Stream from"stream";import{performance as performance2}from"perf_hooks";function Connection(options,queues={},{onopen=noop,onend=noop,onclose=noop}={}){let{sslnegotiation,ssl,max,user,host,port,database,parsers:parsers2,transform,onnotice,onnotify,onparameter,max_pipeline,keep_alive,backoff,target_session_attrs}=options,sent=queue_default(),id=uid++,backend={pid:null,secret:null},idleTimer=timer(end,options.idle_timeout),lifeTimer=timer(end,options.max_lifetime),connectTimer=timer(connectTimedOut,options.connect_timeout),socket=null,cancelMessage,errorResponse=null,result2=new Result,incoming=Buffer.alloc(0),needsTypes=options.fetch_types,backendParameters={},statements={},statementId=Math.random().toString(36).slice(2),statementCount=1,closedTime=0,remaining=0,hostIndex=0,retries=0,length=0,delay=0,rows=0,serverSignature=null,nextWriteTimer=null,terminated=!1,incomings=null,results=null,initial=null,ending=null,stream=null,chunk=null,ended=null,nonce=null,query=null,final=null,connection2={queue:queues.closed,idleTimer,connect(query2){initial=query2,reconnect()},terminate,execute,cancel,end,count:0,id};return queues.closed&&queues.closed.push(connection2),connection2;async function createSocket(){let x;try{x=options.socket?await Promise.resolve(options.socket(options)):new net.Socket}catch(e){error(e);return}return x.on("error",error),x.on("close",closed),x.on("drain",drain),x}async function cancel({pid,secret},resolve3,reject){try{cancelMessage=bytes_default().i32(16).i32(80877102).i32(pid).i32(secret).end(16),await connect(),socket.once("error",reject),socket.once("close",resolve3)}catch(error2){reject(error2)}}function execute(q){if(terminated)return queryError(q,Errors.connection("CONNECTION_DESTROYED",options));if(stream)return queryError(q,Errors.generic("COPY_IN_PROGRESS","You cannot execute queries during copy"));if(q.cancelled)return;try{return q.state=backend,query?sent.push(q):(query=q,query.active=!0),build(q),write(toBuffer(q))&&!q.describeFirst&&!q.cursorFn&&sent.length<max_pipeline&&(!q.options.onexecute||q.options.onexecute(connection2))}catch(error2){return sent.length===0&&write(Sync),errored(error2),!0}}function toBuffer(q){if(q.parameters.length>=65534)throw Errors.generic("MAX_PARAMETERS_EXCEEDED","Max number of parameters (65534) exceeded");return q.options.simple?bytes_default().Q().str(q.statement.string+bytes_default.N).end():q.describeFirst?Buffer.concat([describe(q),Flush]):q.prepare?q.prepared?prepared(q):Buffer.concat([describe(q),prepared(q)]):unnamed(q)}function describe(q){return Buffer.concat([Parse(q.statement.string,q.parameters,q.statement.types,q.statement.name),Describe("S",q.statement.name)])}function prepared(q){return Buffer.concat([Bind(q.parameters,q.statement.types,q.statement.name,q.cursorName),q.cursorFn?Execute("",q.cursorRows):ExecuteUnnamed])}function unnamed(q){return Buffer.concat([Parse(q.statement.string,q.parameters,q.statement.types),DescribeUnnamed,prepared(q)])}function build(q){let parameters=[],types4=[],string=stringify(q,q.strings[0],q.args[0],parameters,types4,options);!q.tagged&&q.args.forEach((x)=>handleValue(x,parameters,types4,options)),q.prepare=options.prepare&&("prepare"in q.options?q.options.prepare:!0),q.string=string,q.signature=q.prepare&&types4+string,q.onlyDescribe&&delete statements[q.signature],q.parameters=q.parameters||parameters,q.prepared=q.prepare&&q.signature in statements,q.describeFirst=q.onlyDescribe||parameters.length&&!q.prepared,q.statement=q.prepared?statements[q.signature]:{string,types:types4,name:q.prepare?statementId+statementCount++:""},typeof options.debug==="function"&&options.debug(id,string,parameters,types4)}function write(x,fn){if(chunk=chunk?Buffer.concat([chunk,x]):Buffer.from(x),fn||chunk.length>=1024)return nextWrite(fn);return nextWriteTimer===null&&(nextWriteTimer=setImmediate(nextWrite)),!0}function nextWrite(fn){let x=socket.write(chunk,fn);return nextWriteTimer!==null&&clearImmediate(nextWriteTimer),chunk=nextWriteTimer=null,x}function connectTimedOut(){errored(Errors.connection("CONNECT_TIMEOUT",options,socket)),socket.destroy()}async function secure(){if(sslnegotiation!=="direct"){if(write(SSLRequest),!await new Promise((r)=>socket.once("data",(x)=>r(x[0]===83)))&&ssl==="prefer")return connected()}let options2={socket,servername:net.isIP(socket.host)?void 0:socket.host};if(sslnegotiation==="direct")options2.ALPNProtocols=["postgresql"];if(ssl==="require"||ssl==="allow"||ssl==="prefer")options2.rejectUnauthorized=!1;else if(typeof ssl==="object")Object.assign(options2,ssl);socket.removeAllListeners(),socket=tls.connect(options2),socket.on("secureConnect",connected),socket.on("error",error),socket.on("close",closed),socket.on("drain",drain)}function drain(){!query&&onopen(connection2)}function data(x){if(incomings){if(incomings.push(x),remaining-=x.length,remaining>0)return}incoming=incomings?Buffer.concat(incomings,length-remaining):incoming.length===0?x:Buffer.concat([incoming,x],incoming.length+x.length);while(incoming.length>4){if(length=incoming.readUInt32BE(1),length>=incoming.length){remaining=length-incoming.length,incomings=[incoming];break}try{handle(incoming.subarray(0,length+1))}catch(e){query&&(query.cursorFn||query.describeFirst)&&write(Sync),errored(e)}incoming=incoming.subarray(length+1),remaining=0,incomings=null}}async function connect(){if(terminated=!1,backendParameters={},socket||(socket=await createSocket()),!socket)return;if(connectTimer.start(),options.socket)return ssl?secure():connected();if(socket.on("connect",ssl?secure:connected),options.path)return socket.connect(options.path);socket.ssl=ssl,socket.connect(port[hostIndex],host[hostIndex]),socket.host=host[hostIndex],socket.port=port[hostIndex],hostIndex=(hostIndex+1)%port.length}function reconnect(){setTimeout(connect,closedTime?Math.max(0,closedTime+delay-performance2.now()):0)}function connected(){try{statements={},needsTypes=options.fetch_types,statementId=Math.random().toString(36).slice(2),statementCount=1,lifeTimer.start(),socket.on("data",data),keep_alive&&socket.setKeepAlive&&socket.setKeepAlive(!0,1000*keep_alive);let s=StartupMessage();write(s)}catch(err){error(err)}}function error(err){if(connection2.queue===queues.connecting&&options.host[retries+1])return;errored(err);while(sent.length)queryError(sent.shift(),err)}function errored(err){stream&&(stream.destroy(err),stream=null),query&&queryError(query,err),initial&&(queryError(initial,err),initial=null)}function queryError(query2,err){if(query2.reserve)return query2.reject(err);if(!err||typeof err!=="object")err=Error(err);"query"in err||"parameters"in err||Object.defineProperties(err,{stack:{value:err.stack+query2.origin.replace(/.*\n/,`
|
|
659
|
+
`).filter(Boolean))try{let msg=JSON.parse(line);if(msg.id)records.push(msg)}catch{}return records}async function seedTeamChat(sql,repoPath){let dir=join16(repoPath,".genie","chat");if(!existsSync12(dir))return 0;let files;try{files=await readdir3(dir)}catch{return 0}let count=0;for(let file of files){if(!file.endsWith(".jsonl")||file.endsWith(".migrated"))continue;if(!needsMigration(join16(dir,file)))continue;let teamName=file.replace(".jsonl","").replace(/--/g,"/"),content;try{content=await readFile4(join16(dir,file),"utf-8")}catch{continue}for(let msg of parseJsonlRecords(content))await upsertChatMessage(sql,msg,teamName,repoPath),count++}return count}async function markMigrated(repoPath){let workersPath=workersJsonPath();if(needsMigration(workersPath))await rename(workersPath,`${workersPath}.migrated`);if(!repoPath)return;await renameMatchingFiles(join16(repoPath,".genie","mailbox"),isMailboxFile),await renameMatchingFiles(join16(repoPath,".genie","chat"),(f)=>f.endsWith(".jsonl")&&!f.endsWith(".migrated"))}async function runSeed(sql,repoPath){let result2={agents:0,templates:0,teams:0,mailboxMessages:0,chatMessages:0},workers=await seedWorkers(sql);result2.agents=workers.agents,result2.templates=workers.templates;let teams=await seedTeams(sql);if(result2.teams=teams.count,repoPath)result2.mailboxMessages=await seedMailbox(sql,repoPath),result2.chatMessages=await seedTeamChat(sql,repoPath);if(await markMigrated(repoPath),!teams.hadFailures)await writeTeamsSeedMarker(teams.teamNames);return result2}var MEMBER_UUID_RE;var init_pg_seed=__esm(()=>{init_claude_native_teams();MEMBER_UUID_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/});import{execSync as execSync2}from"child_process";import{readFileSync as readFileSync8}from"fs";function getProcessStartTime(pid){if(!Number.isInteger(pid)||pid<=0)return null;try{if(process.platform==="darwin"){let raw=execSync2(`ps -o lstart= -p ${pid}`,{encoding:"utf8",timeout:1000,stdio:["ignore","pipe","ignore"]}).trim();return raw===""?null:raw}if(process.platform==="linux"){let raw=readFileSync8(`/proc/${pid}/stat`,"utf-8"),closeParen=raw.lastIndexOf(")");if(closeParen<0)return null;let starttime=raw.slice(closeParen+1).trim().split(/\s+/)[19];return starttime&&starttime.length>0?starttime:null}}catch{return null}return null}var init_process_identity=()=>{};function cachedError(xs){if(originCache.has(xs))return originCache.get(xs);let x=Error.stackTraceLimit;return Error.stackTraceLimit=4,originCache.set(xs,Error()),Error.stackTraceLimit=x,originCache.get(xs)}var originCache,originStackCache,originError,CLOSE,Query;var init_query=__esm(()=>{originCache=new Map,originStackCache=new Map,originError=Symbol("OriginError"),CLOSE={};Query=class Query extends Promise{constructor(strings,args,handler,canceller,options={}){let resolve3,reject;super((a,b)=>{resolve3=a,reject=b});this.tagged=Array.isArray(strings.raw),this.strings=strings,this.args=args,this.handler=handler,this.canceller=canceller,this.options=options,this.state=null,this.statement=null,this.resolve=(x)=>(this.active=!1,resolve3(x)),this.reject=(x)=>(this.active=!1,reject(x)),this.active=!1,this.cancelled=null,this.executed=!1,this.signature="",this[originError]=this.handler.debug?Error():this.tagged&&cachedError(this.strings)}get origin(){return(this.handler.debug?this[originError].stack:this.tagged&&originStackCache.has(this.strings)?originStackCache.get(this.strings):originStackCache.set(this.strings,this[originError].stack).get(this.strings))||""}static get[Symbol.species](){return Promise}cancel(){return this.canceller&&(this.canceller(this),this.canceller=null)}simple(){return this.options.simple=!0,this.options.prepare=!1,this}async readable(){return this.simple(),this.streaming=!0,this}async writable(){return this.simple(),this.streaming=!0,this}cursor(rows=1,fn){if(this.options.simple=!1,typeof rows==="function")fn=rows,rows=1;if(this.cursorRows=rows,typeof fn==="function")return this.cursorFn=fn,this;let prev;return{[Symbol.asyncIterator]:()=>({next:()=>{if(this.executed&&!this.active)return{done:!0};prev&&prev();let promise=new Promise((resolve3,reject)=>{this.cursorFn=(value)=>{return resolve3({value,done:!1}),new Promise((r)=>prev=r)},this.resolve=()=>(this.active=!1,resolve3({done:!0})),this.reject=(x)=>(this.active=!1,reject(x))});return this.execute(),promise},return(){return prev&&prev(CLOSE),{done:!0}}})}}describe(){return this.options.simple=!1,this.onlyDescribe=this.options.prepare=!0,this}stream(){throw Error(".stream has been renamed to .forEach")}forEach(fn){return this.forEachFn=fn,this.handle(),this}raw(){return this.isRaw=!0,this}values(){return this.isRaw="values",this}async handle(){!this.executed&&(this.executed=!0)&&await 1&&this.handler(this)}execute(){return this.handle(),this}then(){return this.handle(),super.then.apply(this,arguments)}catch(){return this.handle(),super.catch.apply(this,arguments)}finally(){return this.handle(),super.finally.apply(this,arguments)}}});function connection(x,options,socket){let{host,port}=socket||options,error=Object.assign(Error("write "+x+" "+(options.path||host+":"+port)),{code:x,errno:x,address:options.path||host},options.path?{}:{port});return Error.captureStackTrace(error,connection),error}function postgres(x){let error=new PostgresError(x);return Error.captureStackTrace(error,postgres),error}function generic(code,message){let error=Object.assign(Error(code+": "+message),{code});return Error.captureStackTrace(error,generic),error}function notSupported(x){let error=Object.assign(Error(x+" (B) is not supported"),{code:"MESSAGE_NOT_SUPPORTED",name:x});return Error.captureStackTrace(error,notSupported),error}var PostgresError,Errors;var init_errors2=__esm(()=>{PostgresError=class PostgresError extends Error{constructor(x){super(x.message);this.name=this.constructor.name,Object.assign(this,x)}};Errors={connection,postgres,generic,notSupported}});class NotTagged{then(){notTagged()}catch(){notTagged()}finally(){notTagged()}}function handleValue(x,parameters,types4,options){let value=x instanceof Parameter?x.value:x;if(value===void 0){if(x instanceof Parameter?x.value=options.transform.undefined:value=x=options.transform.undefined,value===void 0)throw Errors.generic("UNDEFINED_VALUE","Undefined values are not allowed")}return"$"+types4.push(x instanceof Parameter?(parameters.push(x.value),x.array?x.array[x.type||inferType(x.value)]||x.type||firstIsString(x.value):x.type):(parameters.push(x),inferType(x)))}function stringify(q,string,value,parameters,types4,options){for(let i2=1;i2<q.strings.length;i2++)string+=stringifyValue(string,value,parameters,types4,options)+q.strings[i2],value=q.args[i2];return string}function stringifyValue(string,value,parameters,types4,o){return value instanceof Builder?value.build(string,parameters,types4,o):value instanceof Query?fragment(value,parameters,types4,o):value instanceof Identifier?value.value:value&&value[0]instanceof Query?value.reduce((acc,x)=>acc+" "+fragment(x,parameters,types4,o),""):handleValue(value,parameters,types4,o)}function fragment(q,parameters,types4,options){return q.fragment=!0,stringify(q,q.strings[0],q.args[0],parameters,types4,options)}function valuesBuilder(first,parameters,types4,columns,options){return first.map((row)=>"("+columns.map((column)=>stringifyValue("values",row[column],parameters,types4,options)).join(",")+")").join(",")}function values(first,rest,parameters,types4,options){let multi=Array.isArray(first[0]),columns=rest.length?rest.flat():Object.keys(multi?first[0]:first);return valuesBuilder(multi?first:[first],parameters,types4,columns,options)}function select(first,rest,parameters,types4,options){if(typeof first==="string"&&(first=[first].concat(rest)),Array.isArray(first))return escapeIdentifiers(first,options);let value;return(rest.length?rest.flat():Object.keys(first)).map((x)=>{return value=first[x],(value instanceof Query?fragment(value,parameters,types4,options):value instanceof Identifier?value.value:handleValue(value,parameters,types4,options))+" as "+escapeIdentifier(options.transform.column.to?options.transform.column.to(x):x)}).join(",")}function notTagged(){throw Errors.generic("NOT_TAGGED_CALL","Query not called as a tagged template literal")}function firstIsString(x){if(Array.isArray(x))return firstIsString(x[0]);return typeof x==="string"?1009:0}function typeHandlers(types4){return Object.keys(types4).reduce((acc,k)=>{if(types4[k].from&&[].concat(types4[k].from).forEach((x)=>acc.parsers[x]=types4[k].parse),types4[k].serialize)acc.serializers[types4[k].to]=types4[k].serialize,types4[k].from&&[].concat(types4[k].from).forEach((x)=>acc.serializers[x]=types4[k].serialize);return acc},{parsers:{},serializers:{}})}function escapeIdentifiers(xs,{transform:{column}}){return xs.map((x)=>escapeIdentifier(column.to?column.to(x):x)).join(",")}function arrayEscape(x){return x.replace(escapeBackslash,"\\\\").replace(escapeQuote,"\\\"")}function arrayParserLoop(s,x,parser,typarray){let xs=[],delimiter=typarray===1020?";":",";for(;s.i<x.length;s.i++){if(s.char=x[s.i],s.quoted)if(s.char==="\\")s.str+=x[++s.i];else if(s.char==='"')xs.push(parser?parser(s.str):s.str),s.str="",s.quoted=x[s.i+1]==='"',s.last=s.i+2;else s.str+=s.char;else if(s.char==='"')s.quoted=!0;else if(s.char==="{")s.last=++s.i,xs.push(arrayParserLoop(s,x,parser,typarray));else if(s.char==="}"){s.quoted=!1,s.last<s.i&&xs.push(parser?parser(x.slice(s.last,s.i)):x.slice(s.last,s.i)),s.last=s.i+1;break}else if(s.char===delimiter&&s.p!=="}"&&s.p!=='"')xs.push(parser?parser(x.slice(s.last,s.i)):x.slice(s.last,s.i)),s.last=s.i+1;s.p=s.char}return s.last<s.i&&xs.push(parser?parser(x.slice(s.last,s.i+1)):x.slice(s.last,s.i+1)),xs}function createJsonTransform(fn){return function jsonTransform(x,column){return typeof x==="object"&&x!==null&&(column.type===114||column.type===3802)?Array.isArray(x)?x.map((x2)=>jsonTransform(x2,column)):Object.entries(x).reduce((acc,[k,v])=>Object.assign(acc,{[fn(k)]:jsonTransform(v,column)}),{}):x}}var types3,Identifier,Parameter,Builder,defaultHandlers,builders,serializers,parsers,mergeUserTypes=function(types4){let user=typeHandlers(types4||{});return{serializers:Object.assign({},serializers,user.serializers),parsers:Object.assign({},parsers,user.parsers)}},escapeIdentifier=function(str2){return'"'+str2.replace(/"/g,'""').replace(/\./g,'"."')+'"'},inferType=function inferType2(x){return x instanceof Parameter?x.type:x instanceof Date?1184:x instanceof Uint8Array?17:x===!0||x===!1?16:typeof x==="bigint"?20:Array.isArray(x)?inferType2(x[0]):0},escapeBackslash,escapeQuote,arraySerializer=function arraySerializer2(xs,serializer,options,typarray){if(Array.isArray(xs)===!1)return xs;if(!xs.length)return"{}";let first=xs[0],delimiter=typarray===1020?";":",";if(Array.isArray(first)&&!first.type)return"{"+xs.map((x)=>arraySerializer2(x,serializer,options,typarray)).join(delimiter)+"}";return"{"+xs.map((x)=>{if(x===void 0){if(x=options.transform.undefined,x===void 0)throw Errors.generic("UNDEFINED_VALUE","Undefined values are not allowed")}return x===null?"null":'"'+arrayEscape(serializer?serializer(x.type?x.value:x):""+x)+'"'}).join(delimiter)+"}"},arrayParserState,arrayParser=function(x,parser,typarray){return arrayParserState.i=arrayParserState.last=0,arrayParserLoop(arrayParserState,x,parser,typarray)},toCamel=(x)=>{let str2=x[0];for(let i2=1;i2<x.length;i2++)str2+=x[i2]==="_"?x[++i2].toUpperCase():x[i2];return str2},toPascal=(x)=>{let str2=x[0].toUpperCase();for(let i2=1;i2<x.length;i2++)str2+=x[i2]==="_"?x[++i2].toUpperCase():x[i2];return str2},toKebab=(x)=>x.replace(/_/g,"-"),fromCamel=(x)=>x.replace(/([A-Z])/g,"_$1").toLowerCase(),fromPascal=(x)=>(x.slice(0,1)+x.slice(1).replace(/([A-Z])/g,"_$1")).toLowerCase(),fromKebab=(x)=>x.replace(/-/g,"_"),camel,pascal,kebab;var init_types3=__esm(()=>{init_query();init_errors2();types3={string:{to:25,from:null,serialize:(x)=>""+x},number:{to:0,from:[21,23,26,700,701],serialize:(x)=>""+x,parse:(x)=>+x},json:{to:114,from:[114,3802],serialize:(x)=>JSON.stringify(x),parse:(x)=>JSON.parse(x)},boolean:{to:16,from:16,serialize:(x)=>x===!0?"t":"f",parse:(x)=>x==="t"},date:{to:1184,from:[1082,1114,1184],serialize:(x)=>(x instanceof Date?x:new Date(x)).toISOString(),parse:(x)=>new Date(x)},bytea:{to:17,from:17,serialize:(x)=>"\\x"+Buffer.from(x).toString("hex"),parse:(x)=>Buffer.from(x.slice(2),"hex")}};Identifier=class Identifier extends NotTagged{constructor(value){super();this.value=escapeIdentifier(value)}};Parameter=class Parameter extends NotTagged{constructor(value,type2,array){super();this.value=value,this.type=type2,this.array=array}};Builder=class Builder extends NotTagged{constructor(first,rest){super();this.first=first,this.rest=rest}build(before,parameters,types4,options){let keyword=builders.map(([x,fn])=>({fn,i:before.search(x)})).sort((a,b)=>a.i-b.i).pop();return keyword.i===-1?escapeIdentifiers(this.first,options):keyword.fn(this.first,this.rest,parameters,types4,options)}};defaultHandlers=typeHandlers(types3);builders=Object.entries({values,in:(...xs)=>{let x=values(...xs);return x==="()"?"(null)":x},select,as:select,returning:select,"\\(":select,update(first,rest,parameters,types4,options){return(rest.length?rest.flat():Object.keys(first)).map((x)=>escapeIdentifier(options.transform.column.to?options.transform.column.to(x):x)+"="+stringifyValue("values",first[x],parameters,types4,options))},insert(first,rest,parameters,types4,options){let columns=rest.length?rest.flat():Object.keys(Array.isArray(first)?first[0]:first);return"("+escapeIdentifiers(columns,options)+")values"+valuesBuilder(Array.isArray(first)?first:[first],parameters,types4,columns,options)}}).map(([x,fn])=>[new RegExp("((?:^|[\\s(])"+x+"(?:$|[\\s(]))(?![\\s\\S]*\\1)","i"),fn]);serializers=defaultHandlers.serializers,parsers=defaultHandlers.parsers;escapeBackslash=/\\/g,escapeQuote=/"/g;arrayParserState={i:0,char:null,str:"",quoted:!1,last:0};toCamel.column={from:toCamel};toCamel.value={from:createJsonTransform(toCamel)};fromCamel.column={to:fromCamel};camel={...toCamel};camel.column.to=fromCamel;toPascal.column={from:toPascal};toPascal.value={from:createJsonTransform(toPascal)};fromPascal.column={to:fromPascal};pascal={...toPascal};pascal.column.to=fromPascal;toKebab.column={from:toKebab};toKebab.value={from:createJsonTransform(toKebab)};fromKebab.column={to:fromKebab};kebab={...toKebab};kebab.column.to=fromKebab});var Result;var init_result=__esm(()=>{Result=class Result extends Array{constructor(){super();Object.defineProperties(this,{count:{value:null,writable:!0},state:{value:null,writable:!0},command:{value:null,writable:!0},columns:{value:null,writable:!0},statement:{value:null,writable:!0}})}static get[Symbol.species](){return Array}}});function Queue(initial=[]){let xs=initial.slice(),index=0;return{get length(){return xs.length-index},remove:(x)=>{let index2=xs.indexOf(x);return index2===-1?null:(xs.splice(index2,1),x)},push:(x)=>(xs.push(x),x),shift:()=>{let out=xs[index++];if(index===xs.length)index=0,xs=[];else xs[index-1]=void 0;return out}}}var queue_default;var init_queue=__esm(()=>{queue_default=Queue});function fit(x){if(buffer.length-b.i<x){let prev=buffer,length=prev.length;buffer=Buffer.allocUnsafe(length+(length>>1)+x),prev.copy(buffer)}}function reset(){return b.i=0,b}var buffer,messages,b,bytes_default;var init_bytes=__esm(()=>{buffer=Buffer.allocUnsafe(256),messages="BCcDdEFfHPpQSX".split("").reduce((acc,x)=>{let v=x.charCodeAt(0);return acc[x]=()=>{return buffer[0]=v,b.i=5,b},acc},{}),b=Object.assign(reset,messages,{N:String.fromCharCode(0),i:0,inc(x){return b.i+=x,b},str(x){let length=Buffer.byteLength(x);return fit(length),b.i+=buffer.write(x,b.i,length,"utf8"),b},i16(x){return fit(2),buffer.writeUInt16BE(x,b.i),b.i+=2,b},i32(x,i2){if(i2||i2===0)return buffer.writeUInt32BE(x,i2),b;return fit(4),buffer.writeUInt32BE(x,b.i),b.i+=4,b},z(x){return fit(x),buffer.fill(0,b.i,b.i+x),b.i+=x,b},raw(x){return buffer=Buffer.concat([buffer.subarray(0,b.i),x]),b.i=buffer.length,b},end(at=1){buffer.writeUInt32BE(b.i-at,at);let out=buffer.subarray(0,b.i);return b.i=0,buffer=Buffer.allocUnsafe(256),out}}),bytes_default=b});import net from"net";import tls from"tls";import crypto2 from"crypto";import Stream from"stream";import{performance as performance2}from"perf_hooks";function Connection(options,queues={},{onopen=noop,onend=noop,onclose=noop}={}){let{sslnegotiation,ssl,max,user,host,port,database,parsers:parsers2,transform,onnotice,onnotify,onparameter,max_pipeline,keep_alive,backoff,target_session_attrs}=options,sent=queue_default(),id=uid++,backend={pid:null,secret:null},idleTimer=timer(end,options.idle_timeout),lifeTimer=timer(end,options.max_lifetime),connectTimer=timer(connectTimedOut,options.connect_timeout),socket=null,cancelMessage,errorResponse=null,result2=new Result,incoming=Buffer.alloc(0),needsTypes=options.fetch_types,backendParameters={},statements={},statementId=Math.random().toString(36).slice(2),statementCount=1,closedTime=0,remaining=0,hostIndex=0,retries=0,length=0,delay=0,rows=0,serverSignature=null,nextWriteTimer=null,terminated=!1,incomings=null,results=null,initial=null,ending=null,stream=null,chunk=null,ended=null,nonce=null,query=null,final=null,connection2={queue:queues.closed,idleTimer,connect(query2){initial=query2,reconnect()},terminate,execute,cancel,end,count:0,id};return queues.closed&&queues.closed.push(connection2),connection2;async function createSocket(){let x;try{x=options.socket?await Promise.resolve(options.socket(options)):new net.Socket}catch(e){error(e);return}return x.on("error",error),x.on("close",closed),x.on("drain",drain),x}async function cancel({pid,secret},resolve3,reject){try{cancelMessage=bytes_default().i32(16).i32(80877102).i32(pid).i32(secret).end(16),await connect(),socket.once("error",reject),socket.once("close",resolve3)}catch(error2){reject(error2)}}function execute(q){if(terminated)return queryError(q,Errors.connection("CONNECTION_DESTROYED",options));if(stream)return queryError(q,Errors.generic("COPY_IN_PROGRESS","You cannot execute queries during copy"));if(q.cancelled)return;try{return q.state=backend,query?sent.push(q):(query=q,query.active=!0),build(q),write(toBuffer(q))&&!q.describeFirst&&!q.cursorFn&&sent.length<max_pipeline&&(!q.options.onexecute||q.options.onexecute(connection2))}catch(error2){return sent.length===0&&write(Sync),errored(error2),!0}}function toBuffer(q){if(q.parameters.length>=65534)throw Errors.generic("MAX_PARAMETERS_EXCEEDED","Max number of parameters (65534) exceeded");return q.options.simple?bytes_default().Q().str(q.statement.string+bytes_default.N).end():q.describeFirst?Buffer.concat([describe(q),Flush]):q.prepare?q.prepared?prepared(q):Buffer.concat([describe(q),prepared(q)]):unnamed(q)}function describe(q){return Buffer.concat([Parse(q.statement.string,q.parameters,q.statement.types,q.statement.name),Describe("S",q.statement.name)])}function prepared(q){return Buffer.concat([Bind(q.parameters,q.statement.types,q.statement.name,q.cursorName),q.cursorFn?Execute("",q.cursorRows):ExecuteUnnamed])}function unnamed(q){return Buffer.concat([Parse(q.statement.string,q.parameters,q.statement.types),DescribeUnnamed,prepared(q)])}function build(q){let parameters=[],types4=[],string=stringify(q,q.strings[0],q.args[0],parameters,types4,options);!q.tagged&&q.args.forEach((x)=>handleValue(x,parameters,types4,options)),q.prepare=options.prepare&&("prepare"in q.options?q.options.prepare:!0),q.string=string,q.signature=q.prepare&&types4+string,q.onlyDescribe&&delete statements[q.signature],q.parameters=q.parameters||parameters,q.prepared=q.prepare&&q.signature in statements,q.describeFirst=q.onlyDescribe||parameters.length&&!q.prepared,q.statement=q.prepared?statements[q.signature]:{string,types:types4,name:q.prepare?statementId+statementCount++:""},typeof options.debug==="function"&&options.debug(id,string,parameters,types4)}function write(x,fn){if(chunk=chunk?Buffer.concat([chunk,x]):Buffer.from(x),fn||chunk.length>=1024)return nextWrite(fn);return nextWriteTimer===null&&(nextWriteTimer=setImmediate(nextWrite)),!0}function nextWrite(fn){let x=socket.write(chunk,fn);return nextWriteTimer!==null&&clearImmediate(nextWriteTimer),chunk=nextWriteTimer=null,x}function connectTimedOut(){errored(Errors.connection("CONNECT_TIMEOUT",options,socket)),socket.destroy()}async function secure(){if(sslnegotiation!=="direct"){if(write(SSLRequest),!await new Promise((r)=>socket.once("data",(x)=>r(x[0]===83)))&&ssl==="prefer")return connected()}let options2={socket,servername:net.isIP(socket.host)?void 0:socket.host};if(sslnegotiation==="direct")options2.ALPNProtocols=["postgresql"];if(ssl==="require"||ssl==="allow"||ssl==="prefer")options2.rejectUnauthorized=!1;else if(typeof ssl==="object")Object.assign(options2,ssl);socket.removeAllListeners(),socket=tls.connect(options2),socket.on("secureConnect",connected),socket.on("error",error),socket.on("close",closed),socket.on("drain",drain)}function drain(){!query&&onopen(connection2)}function data(x){if(incomings){if(incomings.push(x),remaining-=x.length,remaining>0)return}incoming=incomings?Buffer.concat(incomings,length-remaining):incoming.length===0?x:Buffer.concat([incoming,x],incoming.length+x.length);while(incoming.length>4){if(length=incoming.readUInt32BE(1),length>=incoming.length){remaining=length-incoming.length,incomings=[incoming];break}try{handle(incoming.subarray(0,length+1))}catch(e){query&&(query.cursorFn||query.describeFirst)&&write(Sync),errored(e)}incoming=incoming.subarray(length+1),remaining=0,incomings=null}}async function connect(){if(terminated=!1,backendParameters={},socket||(socket=await createSocket()),!socket)return;if(connectTimer.start(),options.socket)return ssl?secure():connected();if(socket.on("connect",ssl?secure:connected),options.path)return socket.connect(options.path);socket.ssl=ssl,socket.connect(port[hostIndex],host[hostIndex]),socket.host=host[hostIndex],socket.port=port[hostIndex],hostIndex=(hostIndex+1)%port.length}function reconnect(){setTimeout(connect,closedTime?Math.max(0,closedTime+delay-performance2.now()):0)}function connected(){try{statements={},needsTypes=options.fetch_types,statementId=Math.random().toString(36).slice(2),statementCount=1,lifeTimer.start(),socket.on("data",data),keep_alive&&socket.setKeepAlive&&socket.setKeepAlive(!0,1000*keep_alive);let s=StartupMessage();write(s)}catch(err){error(err)}}function error(err){if(connection2.queue===queues.connecting&&options.host[retries+1])return;errored(err);while(sent.length)queryError(sent.shift(),err)}function errored(err){stream&&(stream.destroy(err),stream=null),query&&queryError(query,err),initial&&(queryError(initial,err),initial=null)}function queryError(query2,err){if(query2.reserve)return query2.reject(err);if(!err||typeof err!=="object")err=Error(err);"query"in err||"parameters"in err||Object.defineProperties(err,{stack:{value:err.stack+query2.origin.replace(/.*\n/,`
|
|
660
660
|
`),enumerable:options.debug},query:{value:query2.string,enumerable:options.debug},parameters:{value:query2.parameters,enumerable:options.debug},args:{value:query2.args,enumerable:options.debug},types:{value:query2.statement&&query2.statement.types,enumerable:options.debug}}),query2.reject(err)}function end(){return ending||(!connection2.reserved&&onend(connection2),!connection2.reserved&&!initial&&!query&&sent.length===0?(terminate(),new Promise((r)=>socket&&socket.readyState!=="closed"?socket.once("close",r):r())):ending=new Promise((r)=>ended=r))}function terminate(){if(terminated=!0,stream||query||initial||sent.length)error(Errors.connection("CONNECTION_DESTROYED",options));if(clearImmediate(nextWriteTimer),socket)socket.removeListener("data",data),socket.removeListener("connect",connected),socket.readyState==="open"&&socket.end(bytes_default().X().end());ended&&(ended(),ending=ended=null)}async function closed(hadError){if(incoming=Buffer.alloc(0),remaining=0,incomings=null,clearImmediate(nextWriteTimer),socket.removeListener("data",data),socket.removeListener("connect",connected),idleTimer.cancel(),lifeTimer.cancel(),connectTimer.cancel(),socket.removeAllListeners(),socket=null,initial)return reconnect();!hadError&&(query||sent.length)&&error(Errors.connection("CONNECTION_CLOSED",options,socket)),closedTime=performance2.now(),hadError&&options.shared.retries++,delay=(typeof backoff==="function"?backoff(options.shared.retries):backoff)*1000,onclose(connection2,Errors.connection("CONNECTION_CLOSED",options,socket))}function handle(xs,x=xs[0]){(x===68?DataRow:x===100?CopyData:x===65?NotificationResponse:x===83?ParameterStatus:x===90?ReadyForQuery:x===67?CommandComplete:x===50?BindComplete:x===49?ParseComplete:x===116?ParameterDescription:x===84?RowDescription:x===82?Authentication:x===110?NoData:x===75?BackendKeyData:x===69?ErrorResponse:x===115?PortalSuspended:x===51?CloseComplete:x===71?CopyInResponse:x===78?NoticeResponse:x===72?CopyOutResponse:x===99?CopyDone:x===73?EmptyQueryResponse:x===86?FunctionCallResponse:x===118?NegotiateProtocolVersion:x===87?CopyBothResponse:UnknownMessage)(xs)}function DataRow(x){let index=7,length2,column,value,row=query.isRaw?Array(query.statement.columns.length):{};for(let i2=0;i2<query.statement.columns.length;i2++)column=query.statement.columns[i2],length2=x.readInt32BE(index),index+=4,value=length2===-1?null:query.isRaw===!0?x.subarray(index,index+=length2):column.parser===void 0?x.toString("utf8",index,index+=length2):column.parser.array===!0?column.parser(x.toString("utf8",index+1,index+=length2)):column.parser(x.toString("utf8",index,index+=length2)),query.isRaw?row[i2]=query.isRaw===!0?value:transform.value.from?transform.value.from(value,column):value:row[column.name]=transform.value.from?transform.value.from(value,column):value;query.forEachFn?query.forEachFn(transform.row.from?transform.row.from(row):row,result2):result2[rows++]=transform.row.from?transform.row.from(row):row}function ParameterStatus(x){let[k,v]=x.toString("utf8",5,x.length-1).split(bytes_default.N);if(backendParameters[k]=v,options.parameters[k]!==v)options.parameters[k]=v,onparameter&&onparameter(k,v)}function ReadyForQuery(x){if(query)if(errorResponse)query.retried?errored(query.retried):query.prepared&&retryRoutines.has(errorResponse.routine)?retry(query,errorResponse):errored(errorResponse);else query.resolve(results||result2);else if(errorResponse)errored(errorResponse);if(query=results=errorResponse=null,result2=new Result,connectTimer.cancel(),initial){if(target_session_attrs){if(!backendParameters.in_hot_standby||!backendParameters.default_transaction_read_only)return fetchState();else if(tryNext(target_session_attrs,backendParameters))return terminate()}if(needsTypes)return initial.reserve&&(initial=null),fetchArrayTypes();initial&&!initial.reserve&&execute(initial),options.shared.retries=retries=0,initial=null;return}while(sent.length&&(query=sent.shift())&&(query.active=!0,query.cancelled))Connection(options).cancel(query.state,query.cancelled.resolve,query.cancelled.reject);if(query)return;connection2.reserved?!connection2.reserved.release&&x[5]===73?ending?terminate():(connection2.reserved=null,onopen(connection2)):connection2.reserved():ending?terminate():onopen(connection2)}function CommandComplete(x){rows=0;for(let i2=x.length-1;i2>0;i2--){if(x[i2]===32&&x[i2+1]<58&&result2.count===null)result2.count=+x.toString("utf8",i2+1,x.length-1);if(x[i2-1]>=65){result2.command=x.toString("utf8",5,i2),result2.state=backend;break}}if(final&&(final(),final=null),result2.command==="BEGIN"&&max!==1&&!connection2.reserved)return errored(Errors.generic("UNSAFE_TRANSACTION","Only use sql.begin, sql.reserved or max: 1"));if(query.options.simple)return BindComplete();if(query.cursorFn)result2.count&&query.cursorFn(result2),write(Sync)}function ParseComplete(){query.parsing=!1}function BindComplete(){!result2.statement&&(result2.statement=query.statement),result2.columns=query.statement.columns}function ParameterDescription(x){let length2=x.readUInt16BE(5);for(let i2=0;i2<length2;++i2)!query.statement.types[i2]&&(query.statement.types[i2]=x.readUInt32BE(7+i2*4));query.prepare&&(statements[query.signature]=query.statement),query.describeFirst&&!query.onlyDescribe&&(write(prepared(query)),query.describeFirst=!1)}function RowDescription(x){if(result2.command)results=results||[result2],results.push(result2=new Result),result2.count=null,query.statement.columns=null;let length2=x.readUInt16BE(5),index=7,start;query.statement.columns=Array(length2);for(let i2=0;i2<length2;++i2){start=index;while(x[index++]!==0);let table=x.readUInt32BE(index),number=x.readUInt16BE(index+4),type2=x.readUInt32BE(index+6);query.statement.columns[i2]={name:transform.column.from?transform.column.from(x.toString("utf8",start,index-1)):x.toString("utf8",start,index-1),parser:parsers2[type2],table,number,type:type2},index+=18}if(result2.statement=query.statement,query.onlyDescribe)return query.resolve(query.statement),write(Sync)}async function Authentication(x,type2=x.readUInt32BE(5)){(type2===3?AuthenticationCleartextPassword:type2===5?AuthenticationMD5Password:type2===10?SASL:type2===11?SASLContinue:type2===12?SASLFinal:type2!==0?UnknownAuth:noop)(x,type2)}async function AuthenticationCleartextPassword(){let payload=await Pass();write(bytes_default().p().str(payload).z(1).end())}async function AuthenticationMD5Password(x){let payload="md5"+await md5(Buffer.concat([Buffer.from(await md5(await Pass()+user)),x.subarray(9)]));write(bytes_default().p().str(payload).z(1).end())}async function SASL(){nonce=(await crypto2.randomBytes(18)).toString("base64"),bytes_default().p().str("SCRAM-SHA-256"+bytes_default.N);let i2=bytes_default.i;write(bytes_default.inc(4).str("n,,n=*,r="+nonce).i32(bytes_default.i-i2-4,i2).end())}async function SASLContinue(x){let res=x.toString("utf8",9).split(",").reduce((acc,x2)=>(acc[x2[0]]=x2.slice(2),acc),{}),saltedPassword=await crypto2.pbkdf2Sync(await Pass(),Buffer.from(res.s,"base64"),parseInt(res.i),32,"sha256"),clientKey=await hmac(saltedPassword,"Client Key"),auth="n=*,r="+nonce+",r="+res.r+",s="+res.s+",i="+res.i+",c=biws,r="+res.r;serverSignature=(await hmac(await hmac(saltedPassword,"Server Key"),auth)).toString("base64");let payload="c=biws,r="+res.r+",p="+xor(clientKey,Buffer.from(await hmac(await sha256(clientKey),auth))).toString("base64");write(bytes_default().p().str(payload).end())}function SASLFinal(x){if(x.toString("utf8",9).split(bytes_default.N,1)[0].slice(2)===serverSignature)return;errored(Errors.generic("SASL_SIGNATURE_MISMATCH","The server did not return the correct signature")),socket.destroy()}function Pass(){return Promise.resolve(typeof options.pass==="function"?options.pass():options.pass)}function NoData(){if(result2.statement=query.statement,result2.statement.columns=[],query.onlyDescribe)return query.resolve(query.statement),write(Sync)}function BackendKeyData(x){backend.pid=x.readUInt32BE(5),backend.secret=x.readUInt32BE(9)}async function fetchArrayTypes(){needsTypes=!1,(await new Query([`
|
|
661
661
|
select b.oid, b.typarray
|
|
662
662
|
from pg_catalog.pg_type a
|
|
@@ -1284,7 +1284,7 @@ Run 'genie agent list' to list agents.`)}async function resolveTarget(target,opt
|
|
|
1284
1284
|
`)}var STATE_ICONS;var init_brief=__esm(()=>{init_db();init_mailbox();init_runtime_events();init_team_manager();STATE_ICONS={working:"\u25CF",idle:"\u25CB",error:"\u2718"}});import{readFile as readFile5,rename as rename2,writeFile as writeFile5}from"fs/promises";function stripDerivedFields(config){let out={...config};for(let key of DERIVED_KEYS)delete out[key];return out}async function parseAgentYaml(path3){let raw;try{raw=await readFile5(path3,"utf-8")}catch(err){let message=err instanceof Error?err.message:String(err);throw Error(`Failed to read agent.yaml at ${path3}: ${message}`)}let parsed;try{parsed=load(raw)}catch(err){let message=err instanceof Error?err.message:String(err);throw Error(`Malformed YAML in ${path3}: ${message}`)}let input=parsed===null||parsed===void 0?{}:parsed;if(typeof input!=="object"||Array.isArray(input))throw Error(`agent.yaml at ${path3} must be a YAML mapping, got ${Array.isArray(input)?"array":typeof input}`);let result2=AgentConfigSchema.safeParse(input);if(!result2.success)throw Error(`Invalid agent.yaml at ${path3}: ${formatZodError(result2.error)}`);return result2.data}function formatZodError(error2){return error2.issues.map((issue)=>{let path3=issue.path.length>0?issue.path.join("."):"(root)";if(issue.code==="unrecognized_keys"){let keys=issue.keys.join(", ");return`unknown field(s) at ${path3}: ${keys}`}return`${path3}: ${issue.message}`}).join("; ")}async function writeAgentYaml(path3,config){let stripped=stripDerivedFields(config),yamlStr=dump(stripped,{lineWidth:-1,noRefs:!0,sortKeys:!1,quotingType:'"'});await acquireLock(path3);try{let tmpPath=`${path3}.tmp`;await writeFile5(tmpPath,yamlStr,"utf-8"),await rename2(tmpPath,path3)}finally{await releaseLock(path3)}}function extractFrontmatterFromAgentsMd(content){if(!content.startsWith(`---
|
|
1285
1285
|
`))return{frontmatter:null,body:content};let after=content.slice(4),frontmatter,afterClose;if(after.startsWith("---"))frontmatter="",afterClose=after.slice(3);else{let closeIdx=after.indexOf(`
|
|
1286
1286
|
---`);if(closeIdx===-1)return{frontmatter:null,body:content};frontmatter=after.slice(0,closeIdx),afterClose=after.slice(closeIdx+4)}let body=afterClose.startsWith(`
|
|
1287
|
-
`)?afterClose.slice(1):afterClose;return{frontmatter,body}}var SdkPermissionModeSchema,SdkEffortLevelSchema,SdkThinkingConfigSchema,SdkMcpStdioServerConfigSchema,SdkMcpSSEServerConfigSchema,SdkMcpHttpServerConfigSchema,SdkMcpServerConfigSchema,SdkSubagentConfigSchema,SdkCustomToolConfigSchema,SdkOutputFormatSchema,SdkPluginConfigSchema,SdkSandboxConfigSchema,SdkHookMatcherConfigSchema,SdkHookEventSchema,SdkBetaSchema,SdkSystemPromptSchema,SdkDirectoryConfigSchema,AgentConfigSchema,DERIVED_KEYS;var init_agent_yaml=__esm(()=>{init_js_yaml();init_zod();init_lockfile();SdkPermissionModeSchema=exports_external.enum(["default","acceptEdits","bypassPermissions","plan","dontAsk","auto","remoteApproval"]),SdkEffortLevelSchema=exports_external.union([exports_external.enum(["low","medium","high","max"]),exports_external.number()]),SdkThinkingConfigSchema=exports_external.union([exports_external.object({type:exports_external.literal("adaptive")}).strict(),exports_external.object({type:exports_external.literal("enabled"),budgetTokens:exports_external.number().optional()}).strict(),exports_external.object({type:exports_external.literal("disabled")}).strict()]),SdkMcpStdioServerConfigSchema=exports_external.object({type:exports_external.literal("stdio").optional(),command:exports_external.string(),args:exports_external.array(exports_external.string()).optional(),env:exports_external.record(exports_external.string()).optional()}).strict(),SdkMcpSSEServerConfigSchema=exports_external.object({type:exports_external.literal("sse"),url:exports_external.string(),headers:exports_external.record(exports_external.string()).optional()}).strict(),SdkMcpHttpServerConfigSchema=exports_external.object({type:exports_external.literal("http"),url:exports_external.string(),headers:exports_external.record(exports_external.string()).optional()}).strict(),SdkMcpServerConfigSchema=exports_external.union([SdkMcpStdioServerConfigSchema,SdkMcpSSEServerConfigSchema,SdkMcpHttpServerConfigSchema]),SdkSubagentConfigSchema=exports_external.object({description:exports_external.string(),prompt:exports_external.string(),tools:exports_external.array(exports_external.string()).optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),model:exports_external.string().optional(),mcpServers:exports_external.array(exports_external.union([exports_external.string(),exports_external.record(SdkMcpStdioServerConfigSchema)])).optional(),skills:exports_external.array(exports_external.string()).optional(),maxTurns:exports_external.number().optional(),background:exports_external.boolean().optional(),memory:exports_external.enum(["user","project","local"]).optional(),effort:SdkEffortLevelSchema.optional(),permissionMode:SdkPermissionModeSchema.optional()}).strict(),SdkCustomToolConfigSchema=exports_external.object({name:exports_external.string(),description:exports_external.string(),inputSchema:exports_external.record(exports_external.unknown()),handler:exports_external.string().optional()}).strict(),SdkOutputFormatSchema=exports_external.object({type:exports_external.literal("json_schema"),schema:exports_external.record(exports_external.unknown())}).strict(),SdkPluginConfigSchema=exports_external.object({type:exports_external.literal("local"),path:exports_external.string()}).strict(),SdkSandboxConfigSchema=exports_external.object({enabled:exports_external.boolean().optional(),autoAllowBashIfSandboxed:exports_external.boolean().optional(),failIfUnavailable:exports_external.boolean().optional(),network:exports_external.object({allowLocalBinding:exports_external.boolean().optional(),allowUnixSockets:exports_external.array(exports_external.string()).optional()}).strict().optional()}).strict(),SdkHookMatcherConfigSchema=exports_external.object({toolName:exports_external.string().optional(),agentName:exports_external.string().optional()}).strict(),SdkHookEventSchema=exports_external.enum(["PreToolUse","PostToolUse","PostToolUseFailure","Notification","UserPromptSubmit","SessionStart","SessionEnd","Stop","StopFailure","SubagentStart","SubagentStop","PreCompact","PostCompact","PermissionRequest","PermissionDenied","Setup","TeammateIdle","TaskCreated","TaskCompleted","Elicitation","ElicitationResult","ConfigChange","WorktreeCreate","WorktreeRemove","InstructionsLoaded","CwdChanged","FileChanged"]),SdkBetaSchema=exports_external.enum(["context-1m-2025-08-07"]),SdkSystemPromptSchema=exports_external.union([exports_external.string(),exports_external.object({type:exports_external.literal("preset"),preset:exports_external.literal("claude_code"),append:exports_external.string().optional()}).strict()]),SdkDirectoryConfigSchema=exports_external.object({permissionMode:SdkPermissionModeSchema.optional(),tools:exports_external.union([exports_external.array(exports_external.string()),exports_external.object({type:exports_external.literal("preset"),preset:exports_external.literal("claude_code")}).strict()]).optional(),allowedTools:exports_external.array(exports_external.string()).optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),maxTurns:exports_external.number().optional(),maxBudgetUsd:exports_external.number().optional(),effort:SdkEffortLevelSchema.optional(),thinking:SdkThinkingConfigSchema.optional(),agent:exports_external.string().optional(),agents:exports_external.record(SdkSubagentConfigSchema).optional(),mcpServers:exports_external.record(SdkMcpServerConfigSchema).optional(),plugins:exports_external.array(SdkPluginConfigSchema).optional(),customTools:exports_external.array(SdkCustomToolConfigSchema).optional(),persistSession:exports_external.boolean().optional(),enableFileCheckpointing:exports_external.boolean().optional(),outputFormat:SdkOutputFormatSchema.optional(),includePartialMessages:exports_external.boolean().optional(),includeHookEvents:exports_external.boolean().optional(),promptSuggestions:exports_external.boolean().optional(),agentProgressSummaries:exports_external.boolean().optional(),systemPrompt:SdkSystemPromptSchema.optional(),sandbox:SdkSandboxConfigSchema.optional(),betas:exports_external.array(SdkBetaSchema).optional(),settingSources:exports_external.array(exports_external.enum(["user","project","local"])).optional(),settings:exports_external.union([exports_external.string(),exports_external.record(exports_external.unknown())]).optional(),hooks:exports_external.record(SdkHookEventSchema,exports_external.array(SdkHookMatcherConfigSchema)).optional()}).strict(),AgentConfigSchema=exports_external.object({name:exports_external.string().optional(),dir:exports_external.string().optional(),repo:exports_external.string().optional(),team:exports_external.string().optional(),promptMode:exports_external.enum(["system","append"]).optional(),model:exports_external.string().optional(),roles:exports_external.array(exports_external.string()).optional(),omniAgentId:exports_external.string().optional(),registeredAt:exports_external.string().optional(),description:exports_external.string().optional(),color:exports_external.string().optional(),provider:exports_external.string().optional(),permissions:exports_external.object({preset:exports_external.string().optional(),allow:exports_external.array(exports_external.string()).optional(),deny:exports_external.array(exports_external.string()).optional(),bashAllowPatterns:exports_external.array(exports_external.string()).optional()}).strict().optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),omniScopes:exports_external.array(exports_external.string()).optional(),hooks:exports_external.record(exports_external.unknown()).optional(),sdk:SdkDirectoryConfigSchema.optional(),bridgeTmuxSession:exports_external.string().optional()}).strict(),DERIVED_KEYS=["name","dir","registeredAt"]});import{existsSync as existsSync36}from"fs";import{copyFile as copyFile2,readFile as readFile6,writeFile as writeFile6}from"fs/promises";import{join as join42}from"path";async function migrateAgentToYaml(agentDir,dbRow){let yamlPath=join42(agentDir,"agent.yaml"),agentsMdPath=join42(agentDir,"AGENTS.md"),bakPath=`${agentsMdPath}.bak`;if(existsSync36(yamlPath))return{migrated:!1,reason:"already-migrated",yamlPath};let agentsMdRaw=await readFile6(agentsMdPath,"utf-8"),{frontmatter,body}=extractFrontmatterFromAgentsMd(agentsMdRaw);if(frontmatter===null)return{migrated:!1,reason:"no-frontmatter",yamlPath};let fmParsed=parseFrontmatter2(frontmatter,agentsMdPath),fmClean=pickYamlFields(fmParsed),merged={...dbRow?pickYamlFields(dbRow):{},...fmClean},config=AgentConfigSchema.parse(merged);return await writeAgentYaml(yamlPath,config),await copyFile2(agentsMdPath,bakPath),await writeFile6(agentsMdPath,body),{migrated:!0,yamlPath,bakPath}}function parseFrontmatter2(frontmatter,sourcePath){let raw;try{raw=load(frontmatter)}catch(err){let msg=err instanceof Error?err.message:String(err);throw Error(`Malformed frontmatter in ${sourcePath}: ${msg}`)}if(raw===null||typeof raw!=="object"||Array.isArray(raw))throw Error(`Malformed frontmatter in ${sourcePath}: expected a YAML mapping at the top level`);return raw}function pickYamlFields(source){let out={};for(let[k,v]of Object.entries(source))if(YAML_ALLOWED_KEYS.has(k)&&v!==null&&v!==void 0)out[k]=v;return out}var YAML_ALLOWED_KEYS;var init_agent_migrate=__esm(()=>{init_js_yaml();init_agent_yaml();YAML_ALLOWED_KEYS=(()=>{let shape=AgentConfigSchema._def.shape(),keys=new Set(Object.keys(shape));return keys.delete("name"),keys.delete("dir"),keys.delete("registeredAt"),keys})()});var exports_agent_sync={};__export(exports_agent_sync,{watchAgentDirectory:()=>watchAgentDirectory,syncSingleAgentByName:()=>syncSingleAgentByName,syncAgentDirectory:()=>syncAgentDirectory,printSyncResult:()=>printSyncResult,healAgentFile:()=>healAgentFile});import{execSync as execSync8}from"child_process";import{existsSync as existsSync37,watch as fsWatch,readFileSync as readFileSync25,readdirSync as readdirSync10,realpathSync as realpathSync4,writeFileSync as writeFileSync16}from"fs";import{join as join43}from"path";function getGitRemoteUrl(dir){try{return execSync8(`git -C "${dir}" config --get remote.origin.url`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||null}catch{return null}}function extractOrgRepo(remoteUrl){let sshMatch=remoteUrl.match(/[^/:]+\/[^/]+?(?:\.git)?$/);if(sshMatch)return sshMatch[0].replace(/\.git$/,"");return null}function getRepoPathForAgent(agentDir){let reposLink=join43(agentDir,"repos");try{if(!existsSync37(reposLink))return null;let target=realpathSync4(reposLink);if(!existsSync37(target))return null;return target}catch{return null}}function discoverAgents(workspaceRoot){let agentsDir=join43(workspaceRoot,"agents");if(!existsSync37(agentsDir))return[];let agents=[];try{let entries=readdirSync10(agentsDir,{withFileTypes:!0});for(let entry2 of entries){if(!entry2.isDirectory())continue;let agentDir=join43(agentsDir,entry2.name);if(!existsSync37(join43(agentDir,"AGENTS.md")))continue;agents.push({name:entry2.name,dir:agentDir,repoUrl:getGitRemoteUrl(agentDir),productRepo:getRepoPathForAgent(agentDir)}),discoverSubAgents(agentDir,entry2.name,agents)}}catch{}return agents}function discoverSubAgents(parentDir,parentName,agents){let subAgentsDir=join43(parentDir,".genie","agents");if(!existsSync37(subAgentsDir))return;try{let entries=readdirSync10(subAgentsDir,{withFileTypes:!0});for(let entry2 of entries){if(!entry2.isDirectory())continue;let subDir=join43(subAgentsDir,entry2.name);if(!existsSync37(join43(subDir,"AGENTS.md")))continue;agents.push({name:`${parentName}/${entry2.name}`,dir:subDir,repoUrl:getGitRemoteUrl(parentDir),productRepo:getRepoPathForAgent(parentDir)})}}catch{}}function discoverSingleAgent(workspaceRoot,agentName){let agentDir=join43(workspaceRoot,"agents",agentName);if(!existsSync37(join43(agentDir,"AGENTS.md")))return null;return{name:agentName,dir:agentDir,repoUrl:getGitRemoteUrl(agentDir),productRepo:getRepoPathForAgent(agentDir)}}function healAgentFile(agentsMdPath,agentName,healResult){let content=readFileSync25(agentsMdPath,"utf-8"),fmMatch=content.match(/^(---\n)([\s\S]*?)(\n---)/);if(!fmMatch)return!1;let prefix=fmMatch[1],fmBlock=fmMatch[2],suffix=fmMatch[3],rest=content.slice(fmMatch[0].length),modified=!1,healedBlock=fmBlock;for(let{field,value}of INVALID_LITERALS)if(new RegExp(`^${field}:\\s*${value}\\s*$`,"m").test(healedBlock))healedBlock=healedBlock.replace(new RegExp(`${field}:\\s*${value}\\s*\\n?`,"m"),""),healResult.healed.push({agent:agentName,field,value}),modified=!0;if(!modified)return!1;let newContent=prefix+healedBlock+suffix+rest,tmpPath=`${agentsMdPath}.tmp.${Date.now()}`;writeFileSync16(tmpPath,newContent,"utf-8");let{renameSync:renameSync8}=__require("fs");return renameSync8(tmpPath,agentsMdPath),!0}function buildResolveContext(workspaceRoot,agentName){let workspaceDefaults;try{workspaceDefaults=getWorkspaceConfig(workspaceRoot).agents?.defaults}catch{}let parent;if(agentName.includes("/")){let parentName=agentName.split("/")[0],parentAgentsMd=join43(workspaceRoot,"agents",parentName,"AGENTS.md");if(existsSync37(parentAgentsMd)){let parentContent=readFileSync25(parentAgentsMd,"utf-8"),parentFm=parseFrontmatter(parentContent);parent={name:parentName,fields:parentFm}}}return{workspaceDefaults,parent}}function computeResolvedMetadata(fm,ctx){let declared={},resolved={};for(let field of Object.keys(BUILTIN_DEFAULTS)){let fmValue=fm[field];if(fmValue!==void 0&&fmValue!==null&&fmValue!==""&&fmValue!=="inherit")declared[field]=fmValue;let result2=resolveFieldWithSource(fm,field,ctx);resolved[field]={value:result2.value,source:result2.source}}return{declared,resolved}}async function syncAgentDirectory(workspaceRoot){let result2={registered:[],updated:[],migrated:[],archived:[],reactivated:[],healed:[],errors:[]},agents=discoverAgents(workspaceRoot),discoveredNames=new Set(agents.map((a)=>a.name)),healResult={healed:[]};for(let agent of agents){let agentsMdPath=join43(agent.dir,"AGENTS.md");try{healAgentFile(agentsMdPath,agent.name,healResult)}catch{}}result2.healed=healResult.healed;for(let h of healResult.healed)console.log(`[sync] healed ${h.agent}/AGENTS.md: removed invalid '${h.field}: ${h.value}' line`);for(let agent of agents)try{await syncSingleAgent(agent,result2,workspaceRoot)}catch(err){result2.errors.push({name:agent.name,error:err instanceof Error?err.message:String(err)})}return await removeMissingAgents(discoveredNames,result2),result2}function printSyncResult(result2){if(result2.healed.length>0)console.log(` Healed: ${result2.healed.length} invalid literal(s) removed`);if(result2.migrated.length>0)console.log(` Migrated: ${result2.migrated.join(", ")} (AGENTS.md frontmatter \u2192 agent.yaml)`);if(result2.registered.length>0)console.log(` Registered: ${result2.registered.join(", ")}`);if(result2.updated.length>0)console.log(` Updated: ${result2.updated.join(", ")}`);if(result2.reactivated.length>0)console.log(` Reactivated: ${result2.reactivated.join(", ")}`);if(result2.archived.length>0)console.log(` Removed: ${result2.archived.join(", ")}`);for(let err of result2.errors)console.error(` Error (${err.name}): ${err.error}`);let total=result2.registered.length+result2.updated.length+result2.reactivated.length;console.log(`
|
|
1287
|
+
`)?afterClose.slice(1):afterClose;return{frontmatter,body}}var SdkPermissionModeSchema,SdkEffortLevelSchema,SdkThinkingConfigSchema,SdkMcpStdioServerConfigSchema,SdkMcpSSEServerConfigSchema,SdkMcpHttpServerConfigSchema,SdkMcpServerConfigSchema,SdkSubagentConfigSchema,SdkCustomToolConfigSchema,SdkOutputFormatSchema,SdkPluginConfigSchema,SdkSandboxConfigSchema,SdkHookMatcherConfigSchema,SdkHookEventSchema,SdkBetaSchema,SdkSystemPromptSchema,SdkDirectoryConfigSchema,AgentConfigSchema,DERIVED_KEYS;var init_agent_yaml=__esm(()=>{init_js_yaml();init_zod();init_lockfile();SdkPermissionModeSchema=exports_external.enum(["default","acceptEdits","bypassPermissions","plan","dontAsk","auto","remoteApproval"]),SdkEffortLevelSchema=exports_external.union([exports_external.enum(["low","medium","high","max"]),exports_external.number()]),SdkThinkingConfigSchema=exports_external.union([exports_external.object({type:exports_external.literal("adaptive")}).strict(),exports_external.object({type:exports_external.literal("enabled"),budgetTokens:exports_external.number().optional()}).strict(),exports_external.object({type:exports_external.literal("disabled")}).strict()]),SdkMcpStdioServerConfigSchema=exports_external.object({type:exports_external.literal("stdio").optional(),command:exports_external.string(),args:exports_external.array(exports_external.string()).optional(),env:exports_external.record(exports_external.string()).optional()}).strict(),SdkMcpSSEServerConfigSchema=exports_external.object({type:exports_external.literal("sse"),url:exports_external.string(),headers:exports_external.record(exports_external.string()).optional()}).strict(),SdkMcpHttpServerConfigSchema=exports_external.object({type:exports_external.literal("http"),url:exports_external.string(),headers:exports_external.record(exports_external.string()).optional()}).strict(),SdkMcpServerConfigSchema=exports_external.union([SdkMcpStdioServerConfigSchema,SdkMcpSSEServerConfigSchema,SdkMcpHttpServerConfigSchema]),SdkSubagentConfigSchema=exports_external.object({description:exports_external.string(),prompt:exports_external.string(),tools:exports_external.array(exports_external.string()).optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),model:exports_external.string().optional(),mcpServers:exports_external.array(exports_external.union([exports_external.string(),exports_external.record(SdkMcpStdioServerConfigSchema)])).optional(),skills:exports_external.array(exports_external.string()).optional(),maxTurns:exports_external.number().optional(),background:exports_external.boolean().optional(),memory:exports_external.enum(["user","project","local"]).optional(),effort:SdkEffortLevelSchema.optional(),permissionMode:SdkPermissionModeSchema.optional()}).strict(),SdkCustomToolConfigSchema=exports_external.object({name:exports_external.string(),description:exports_external.string(),inputSchema:exports_external.record(exports_external.unknown()),handler:exports_external.string().optional()}).strict(),SdkOutputFormatSchema=exports_external.object({type:exports_external.literal("json_schema"),schema:exports_external.record(exports_external.unknown())}).strict(),SdkPluginConfigSchema=exports_external.object({type:exports_external.literal("local"),path:exports_external.string()}).strict(),SdkSandboxConfigSchema=exports_external.object({enabled:exports_external.boolean().optional(),autoAllowBashIfSandboxed:exports_external.boolean().optional(),failIfUnavailable:exports_external.boolean().optional(),network:exports_external.object({allowLocalBinding:exports_external.boolean().optional(),allowUnixSockets:exports_external.array(exports_external.string()).optional()}).strict().optional()}).strict(),SdkHookMatcherConfigSchema=exports_external.object({toolName:exports_external.string().optional(),agentName:exports_external.string().optional()}).strict(),SdkHookEventSchema=exports_external.enum(["PreToolUse","PostToolUse","PostToolUseFailure","Notification","UserPromptSubmit","SessionStart","SessionEnd","Stop","StopFailure","SubagentStart","SubagentStop","PreCompact","PostCompact","PermissionRequest","PermissionDenied","Setup","TeammateIdle","TaskCreated","TaskCompleted","Elicitation","ElicitationResult","ConfigChange","WorktreeCreate","WorktreeRemove","InstructionsLoaded","CwdChanged","FileChanged"]),SdkBetaSchema=exports_external.enum(["context-1m-2025-08-07"]),SdkSystemPromptSchema=exports_external.union([exports_external.string(),exports_external.object({type:exports_external.literal("preset"),preset:exports_external.literal("claude_code"),append:exports_external.string().optional()}).strict()]),SdkDirectoryConfigSchema=exports_external.object({permissionMode:SdkPermissionModeSchema.optional(),tools:exports_external.union([exports_external.array(exports_external.string()),exports_external.object({type:exports_external.literal("preset"),preset:exports_external.literal("claude_code")}).strict()]).optional(),allowedTools:exports_external.array(exports_external.string()).optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),maxTurns:exports_external.number().optional(),maxBudgetUsd:exports_external.number().optional(),effort:SdkEffortLevelSchema.optional(),thinking:SdkThinkingConfigSchema.optional(),agent:exports_external.string().optional(),agents:exports_external.record(SdkSubagentConfigSchema).optional(),mcpServers:exports_external.record(SdkMcpServerConfigSchema).optional(),plugins:exports_external.array(SdkPluginConfigSchema).optional(),customTools:exports_external.array(SdkCustomToolConfigSchema).optional(),persistSession:exports_external.boolean().optional(),enableFileCheckpointing:exports_external.boolean().optional(),outputFormat:SdkOutputFormatSchema.optional(),includePartialMessages:exports_external.boolean().optional(),includeHookEvents:exports_external.boolean().optional(),promptSuggestions:exports_external.boolean().optional(),agentProgressSummaries:exports_external.boolean().optional(),systemPrompt:SdkSystemPromptSchema.optional(),sandbox:SdkSandboxConfigSchema.optional(),betas:exports_external.array(SdkBetaSchema).optional(),settingSources:exports_external.array(exports_external.enum(["user","project","local"])).optional(),settings:exports_external.union([exports_external.string(),exports_external.record(exports_external.unknown())]).optional(),hooks:exports_external.record(SdkHookEventSchema,exports_external.array(SdkHookMatcherConfigSchema)).optional()}).strict(),AgentConfigSchema=exports_external.object({name:exports_external.string().optional(),dir:exports_external.string().optional(),repo:exports_external.string().optional(),team:exports_external.string().optional(),promptMode:exports_external.enum(["system","append"]).optional(),model:exports_external.string().optional(),roles:exports_external.array(exports_external.string()).optional(),omniAgentId:exports_external.string().optional(),registeredAt:exports_external.string().optional(),description:exports_external.string().optional(),color:exports_external.string().optional(),provider:exports_external.string().optional(),permissions:exports_external.object({preset:exports_external.string().optional(),allow:exports_external.array(exports_external.string()).optional(),deny:exports_external.array(exports_external.string()).optional(),bashAllowPatterns:exports_external.array(exports_external.string()).optional(),allowedTools:exports_external.array(exports_external.string()).optional(),permissionMode:SdkPermissionModeSchema.optional()}).strict().optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),omniScopes:exports_external.array(exports_external.string()).optional(),hooks:exports_external.record(exports_external.unknown()).optional(),sdk:SdkDirectoryConfigSchema.optional(),bridgeTmuxSession:exports_external.string().optional()}).strict(),DERIVED_KEYS=["name","dir","registeredAt"]});import{existsSync as existsSync36}from"fs";import{copyFile as copyFile2,readFile as readFile6,writeFile as writeFile6}from"fs/promises";import{join as join42}from"path";async function migrateAgentToYaml(agentDir,dbRow){let yamlPath=join42(agentDir,"agent.yaml"),agentsMdPath=join42(agentDir,"AGENTS.md"),bakPath=`${agentsMdPath}.bak`;if(existsSync36(yamlPath))return{migrated:!1,reason:"already-migrated",yamlPath};let agentsMdRaw=await readFile6(agentsMdPath,"utf-8"),{frontmatter,body}=extractFrontmatterFromAgentsMd(agentsMdRaw);if(frontmatter===null)return{migrated:!1,reason:"no-frontmatter",yamlPath};let fmParsed=parseFrontmatter2(frontmatter,agentsMdPath),fmClean=pickYamlFields(fmParsed),merged={...dbRow?pickYamlFields(dbRow):{},...fmClean},config=AgentConfigSchema.parse(merged);return await writeAgentYaml(yamlPath,config),await copyFile2(agentsMdPath,bakPath),await writeFile6(agentsMdPath,body),{migrated:!0,yamlPath,bakPath}}function parseFrontmatter2(frontmatter,sourcePath){let raw;try{raw=load(frontmatter)}catch(err){let msg=err instanceof Error?err.message:String(err);throw Error(`Malformed frontmatter in ${sourcePath}: ${msg}`)}if(raw===null||typeof raw!=="object"||Array.isArray(raw))throw Error(`Malformed frontmatter in ${sourcePath}: expected a YAML mapping at the top level`);return raw}function pickYamlFields(source){let out={};for(let[k,v]of Object.entries(source))if(YAML_ALLOWED_KEYS.has(k)&&v!==null&&v!==void 0)out[k]=v;return out}var YAML_ALLOWED_KEYS;var init_agent_migrate=__esm(()=>{init_js_yaml();init_agent_yaml();YAML_ALLOWED_KEYS=(()=>{let shape=AgentConfigSchema._def.shape(),keys=new Set(Object.keys(shape));return keys.delete("name"),keys.delete("dir"),keys.delete("registeredAt"),keys})()});var exports_agent_sync={};__export(exports_agent_sync,{watchAgentDirectory:()=>watchAgentDirectory,syncSingleAgentByName:()=>syncSingleAgentByName,syncAgentDirectory:()=>syncAgentDirectory,printSyncResult:()=>printSyncResult,healAgentFile:()=>healAgentFile});import{execSync as execSync8}from"child_process";import{existsSync as existsSync37,watch as fsWatch,readFileSync as readFileSync25,readdirSync as readdirSync10,realpathSync as realpathSync4,writeFileSync as writeFileSync16}from"fs";import{join as join43}from"path";function getGitRemoteUrl(dir){try{return execSync8(`git -C "${dir}" config --get remote.origin.url`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||null}catch{return null}}function extractOrgRepo(remoteUrl){let sshMatch=remoteUrl.match(/[^/:]+\/[^/]+?(?:\.git)?$/);if(sshMatch)return sshMatch[0].replace(/\.git$/,"");return null}function getRepoPathForAgent(agentDir){let reposLink=join43(agentDir,"repos");try{if(!existsSync37(reposLink))return null;let target=realpathSync4(reposLink);if(!existsSync37(target))return null;return target}catch{return null}}function discoverAgents(workspaceRoot){let agentsDir=join43(workspaceRoot,"agents");if(!existsSync37(agentsDir))return[];let agents=[];try{let entries=readdirSync10(agentsDir,{withFileTypes:!0});for(let entry2 of entries){if(!entry2.isDirectory())continue;let agentDir=join43(agentsDir,entry2.name);if(!existsSync37(join43(agentDir,"AGENTS.md")))continue;agents.push({name:entry2.name,dir:agentDir,repoUrl:getGitRemoteUrl(agentDir),productRepo:getRepoPathForAgent(agentDir)}),discoverSubAgents(agentDir,entry2.name,agents)}}catch{}return agents}function discoverSubAgents(parentDir,parentName,agents){let subAgentsDir=join43(parentDir,".genie","agents");if(!existsSync37(subAgentsDir))return;try{let entries=readdirSync10(subAgentsDir,{withFileTypes:!0});for(let entry2 of entries){if(!entry2.isDirectory())continue;let subDir=join43(subAgentsDir,entry2.name);if(!existsSync37(join43(subDir,"AGENTS.md")))continue;agents.push({name:`${parentName}/${entry2.name}`,dir:subDir,repoUrl:getGitRemoteUrl(parentDir),productRepo:getRepoPathForAgent(parentDir)})}}catch{}}function discoverSingleAgent(workspaceRoot,agentName){let agentDir=join43(workspaceRoot,"agents",agentName);if(!existsSync37(join43(agentDir,"AGENTS.md")))return null;return{name:agentName,dir:agentDir,repoUrl:getGitRemoteUrl(agentDir),productRepo:getRepoPathForAgent(agentDir)}}function healAgentFile(agentsMdPath,agentName,healResult){let content=readFileSync25(agentsMdPath,"utf-8"),fmMatch=content.match(/^(---\n)([\s\S]*?)(\n---)/);if(!fmMatch)return!1;let prefix=fmMatch[1],fmBlock=fmMatch[2],suffix=fmMatch[3],rest=content.slice(fmMatch[0].length),modified=!1,healedBlock=fmBlock;for(let{field,value}of INVALID_LITERALS)if(new RegExp(`^${field}:\\s*${value}\\s*$`,"m").test(healedBlock))healedBlock=healedBlock.replace(new RegExp(`${field}:\\s*${value}\\s*\\n?`,"m"),""),healResult.healed.push({agent:agentName,field,value}),modified=!0;if(!modified)return!1;let newContent=prefix+healedBlock+suffix+rest,tmpPath=`${agentsMdPath}.tmp.${Date.now()}`;writeFileSync16(tmpPath,newContent,"utf-8");let{renameSync:renameSync8}=__require("fs");return renameSync8(tmpPath,agentsMdPath),!0}function buildResolveContext(workspaceRoot,agentName){let workspaceDefaults;try{workspaceDefaults=getWorkspaceConfig(workspaceRoot).agents?.defaults}catch{}let parent;if(agentName.includes("/")){let parentName=agentName.split("/")[0],parentAgentsMd=join43(workspaceRoot,"agents",parentName,"AGENTS.md");if(existsSync37(parentAgentsMd)){let parentContent=readFileSync25(parentAgentsMd,"utf-8"),parentFm=parseFrontmatter(parentContent);parent={name:parentName,fields:parentFm}}}return{workspaceDefaults,parent}}function computeResolvedMetadata(fm,ctx){let declared={},resolved={};for(let field of Object.keys(BUILTIN_DEFAULTS)){let fmValue=fm[field];if(fmValue!==void 0&&fmValue!==null&&fmValue!==""&&fmValue!=="inherit")declared[field]=fmValue;let result2=resolveFieldWithSource(fm,field,ctx);resolved[field]={value:result2.value,source:result2.source}}return{declared,resolved}}async function syncAgentDirectory(workspaceRoot){let result2={registered:[],updated:[],migrated:[],archived:[],reactivated:[],healed:[],errors:[]},agents=discoverAgents(workspaceRoot),discoveredNames=new Set(agents.map((a)=>a.name)),healResult={healed:[]};for(let agent of agents){let agentsMdPath=join43(agent.dir,"AGENTS.md");try{healAgentFile(agentsMdPath,agent.name,healResult)}catch{}}result2.healed=healResult.healed;for(let h of healResult.healed)console.log(`[sync] healed ${h.agent}/AGENTS.md: removed invalid '${h.field}: ${h.value}' line`);for(let agent of agents)try{await syncSingleAgent(agent,result2,workspaceRoot)}catch(err){result2.errors.push({name:agent.name,error:err instanceof Error?err.message:String(err)})}return await removeMissingAgents(discoveredNames,result2),result2}function printSyncResult(result2){if(result2.healed.length>0)console.log(` Healed: ${result2.healed.length} invalid literal(s) removed`);if(result2.migrated.length>0)console.log(` Migrated: ${result2.migrated.join(", ")} (AGENTS.md frontmatter \u2192 agent.yaml)`);if(result2.registered.length>0)console.log(` Registered: ${result2.registered.join(", ")}`);if(result2.updated.length>0)console.log(` Updated: ${result2.updated.join(", ")}`);if(result2.reactivated.length>0)console.log(` Reactivated: ${result2.reactivated.join(", ")}`);if(result2.archived.length>0)console.log(` Removed: ${result2.archived.join(", ")}`);for(let err of result2.errors)console.error(` Error (${err.name}): ${err.error}`);let total=result2.registered.length+result2.updated.length+result2.reactivated.length;console.log(`
|
|
1288
1288
|
Synced: ${total} agent(s), ${result2.archived.length} removed.`)}async function removeMissingAgents(discoveredNames,result2){try{let entries=await ls();for(let entry2 of entries){if(discoveredNames.has(entry2.name))continue;if(entry2.scope==="built-in")continue;if(!entry2.dir||!entry2.dir.includes("/agents/"))continue;let{removed}=await rm3(entry2.name);if(removed)result2.archived.push(entry2.name)}}catch{}}async function maybeMigrateFrontmatter(agent,result2){let yamlPath=join43(agent.dir,"agent.yaml"),agentsMdPath=join43(agent.dir,"AGENTS.md");if(existsSync37(yamlPath)||!existsSync37(agentsMdPath))return;let{frontmatter}=extractFrontmatterFromAgentsMd(readFileSync25(agentsMdPath,"utf-8"));if(frontmatter===null)return;let existingEntry=await resolve6(agent.name),dbRow=existingEntry&&!existingEntry.builtin?dbRowFromEntry(existingEntry.entry):void 0;if((await migrateAgentToYaml(agent.dir,dbRow)).migrated)result2.migrated.push(agent.name)}function buildDirectoryPayload(dir,repoPath,cf){return{dir,repo:repoPath,promptMode:cf.promptMode,model:cf.model,description:cf.description,color:cf.color,provider:cf.provider,roles:cf.roles,permissions:cf.permissions,disallowedTools:cf.disallowedTools,omniScopes:cf.omniScopes,hooks:cf.hooks,sdk:cf.sdk,bridgeTmuxSession:cf.bridgeTmuxSession}}async function syncSingleAgent(agent,result2,workspaceRoot){let repoPath=(agent.repoUrl?extractOrgRepo(agent.repoUrl):null)??agent.repoUrl??agent.dir,yamlPath=join43(agent.dir,"agent.yaml"),agentsMdPath=join43(agent.dir,"AGENTS.md");await maybeMigrateFrontmatter(agent,result2);let configFields=existsSync37(yamlPath)?await readYamlAsConfigFields(yamlPath):readFrontmatterAsConfigFields(agentsMdPath);if(workspaceRoot){let ctx=buildResolveContext(workspaceRoot,agent.name);computeResolvedMetadata(configFields.rawForResolution,ctx)}let resolved=await resolve6(agent.name),existing=resolved&&!resolved.builtin?resolved.entry:null,payload=buildDirectoryPayload(agent.dir,repoPath,configFields);if(!existing){await add({name:agent.name,...payload}),result2.registered.push(agent.name);return}await edit(agent.name,payload),result2.updated.push(agent.name)}async function readYamlAsConfigFields(yamlPath){let cfg=await parseAgentYaml(yamlPath);return{promptMode:cfg.promptMode??"append",model:cfg.model,description:cfg.description,color:cfg.color,provider:cfg.provider,roles:cfg.roles,permissions:cfg.permissions,disallowedTools:cfg.disallowedTools,omniScopes:cfg.omniScopes,hooks:cfg.hooks,sdk:cfg.sdk,bridgeTmuxSession:cfg.bridgeTmuxSession,rawForResolution:cfg}}function readFrontmatterAsConfigFields(agentsMdPath){let content=existsSync37(agentsMdPath)?readFileSync25(agentsMdPath,"utf-8"):"",fm=parseFrontmatter(content);return{promptMode:fm.promptMode??"append",model:fm.model,description:fm.description,color:fm.color,provider:fm.provider,roles:fm.roles,permissions:fm.permissions,disallowedTools:fm.disallowedTools,omniScopes:fm.omniScopes,hooks:fm.hooks,sdk:fm.sdk,bridgeTmuxSession:fm.bridgeTmuxSession,rawForResolution:fm}}function dbRowFromEntry(entry2){return{team:entry2.team,model:entry2.model,description:entry2.description,color:entry2.color,provider:entry2.provider,promptMode:entry2.promptMode,permissions:entry2.permissions,disallowedTools:entry2.disallowedTools,omniScopes:entry2.omniScopes,hooks:entry2.hooks,sdk:entry2.sdk,bridgeTmuxSession:entry2.bridgeTmuxSession}}async function syncSingleAgentByName(workspaceRoot,agentName){let agent=discoverSingleAgent(workspaceRoot,agentName);if(!agent)return"not-found";let result2={registered:[],updated:[],migrated:[],archived:[],reactivated:[],healed:[],errors:[]};if(await syncSingleAgent(agent,result2,workspaceRoot),result2.registered.length>0)return"registered";if(result2.migrated.length>0)return"migrated";if(result2.updated.length>0)return"updated";return"synced"}function watchAgentDirectory(workspaceRoot,options){let agentsDir=join43(workspaceRoot,"agents");if(!existsSync37(agentsDir))return null;let debounceTimer=null,pendingChanges=new Set,processChanges=async()=>{let names=[...pendingChanges];pendingChanges.clear();for(let name of names)try{let action=await processWatchedAgent(workspaceRoot,agentsDir,name);if(action)options?.onSync?.(name,action)}catch{}},watcher=fsWatch(agentsDir,{persistent:!1},(_event,filename)=>{if(!filename)return;let name=filename.split("/")[0];if(!name||name.startsWith("."))return;if(pendingChanges.add(name),debounceTimer)clearTimeout(debounceTimer);debounceTimer=setTimeout(processChanges,2000)});return{close:()=>{if(debounceTimer)clearTimeout(debounceTimer);watcher.close()}}}async function processWatchedAgent(workspaceRoot,agentsDir,name){let agentDir=join43(agentsDir,name);if(existsSync37(agentDir)&&existsSync37(join43(agentDir,"AGENTS.md"))){let action=await syncSingleAgentByName(workspaceRoot,name);return action!=="synced"&&action!=="not-found"?action:null}if(!existsSync37(agentDir)){let{removed}=await rm3(name);if(removed)return"removed"}return null}var INVALID_LITERALS;var init_agent_sync=__esm(()=>{init_agent_directory();init_agent_migrate();init_agent_yaml();init_defaults();init_frontmatter();init_workspace();INVALID_LITERALS=[{field:"model",value:"inherit"}]});var exports_term_format={};__export(exports_term_format,{truncate:()=>truncate2,stripAnsi:()=>stripAnsi2,padRight:()=>padRight,formatTimestamp:()=>formatTimestamp,formatTime:()=>formatTime,formatRelativeTimestamp:()=>formatRelativeTimestamp,formatDate:()=>formatDate,color:()=>color});function padRight(str2,len){return str2.length>=len?str2:str2+" ".repeat(len-str2.length)}function truncate2(str2,len){return str2.length<=len?str2:`${str2.slice(0,len-1)}\u2026`}function formatDate(iso){if(!iso)return"-";return new Date(iso).toLocaleDateString("en-US",{month:"short",day:"numeric"})}function formatRelativeTimestamp(ts3){let d=new Date(ts3),diffMs=Date.now()-d.getTime();if(diffMs<60000)return`${Math.floor(diffMs/1000)}s ago`;if(diffMs<3600000)return`${Math.floor(diffMs/60000)}m ago`;if(diffMs<86400000)return`${Math.floor(diffMs/3600000)}h ago`;return d.toISOString().replace("T"," ").slice(0,19)}function formatTimestamp(iso,opts){if(!iso)return opts?.fallback??"-";let d=iso instanceof Date?iso:new Date(iso),fmt={month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1};if(opts?.seconds)fmt.second="2-digit";return d.toLocaleString("en-US",fmt)}function formatTime(iso,opts){try{let date=new Date(iso),fmt={hour:"2-digit",minute:"2-digit",hour12:!1};if(opts?.seconds)fmt.second="2-digit";return date.toLocaleTimeString("en-US",fmt)}catch{return opts?.fallback??"??:??"}}function color(name,text){return isTTY?`${ANSI[name]}${text}${ANSI.reset}`:text}function stripAnsi2(str2){return str2.replace(ANSI_REGEX,"")}var ANSI,isTTY,ANSI_REGEX;var init_term_format=__esm(()=>{ANSI={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",gray:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightCyan:"\x1B[96m"},isTTY=process.stdout.isTTY&&!process.env.NO_COLOR;ANSI_REGEX=/\x1b\[[0-9;]*m/g});var exports_task_service={};__export(exports_task_service,{updateTask:()=>updateTask,updateMessage:()=>updateMessage,untagTask:()=>untagTask,unblockTask:()=>unblockTask,unarchiveTask:()=>unarchiveTask,unarchiveProject:()=>unarchiveProject,tagTask:()=>tagTask,setRelease:()=>setRelease,setPreference:()=>setPreference,sendMessage:()=>sendMessage,resolveTaskId:()=>resolveTaskId,resolveChannels:()=>resolveChannels,removeMember:()=>removeMember,removeDependency:()=>removeDependency,removeActor:()=>removeActor,releaseTask:()=>releaseTask,moveTask:()=>moveTask,markDone:()=>markDone,listTypes:()=>listTypes,listTasksForActor:()=>listTasksForActor,listTasks:()=>listTasks,listTags:()=>listTags,listReleases:()=>listReleases,listProjectsFiltered:()=>listProjectsFiltered,listProjects:()=>listProjects,listConversations:()=>listConversations,linkTask:()=>linkTask,getType:()=>getType,getTaskTags:()=>getTaskTags,getTaskActors:()=>getTaskActors,getTask:()=>getTask,getStageLog:()=>getStageLog,getProjectByRepoPath:()=>getProjectByRepoPath,getProjectByName:()=>getProjectByName,getPreferences:()=>getPreferences,getMessages:()=>getMessages,getMessage:()=>getMessage,getMembers:()=>getMembers,getDependents:()=>getDependents,getConversation:()=>getConversation,getCheckoutOwner:()=>getCheckoutOwner,getBlockingDependencies:()=>getBlockingDependencies,getBlockers:()=>getBlockers,forceUnlockTask:()=>forceUnlockTask,findOrCreateConversation:()=>findOrCreateConversation,expireStaleCheckouts:()=>expireStaleCheckouts,ensureProject:()=>ensureProject,deletePreference:()=>deletePreference,createType:()=>createType,createTask:()=>createTask,createTag:()=>createTag,createProject:()=>createProject,commentOnTask:()=>commentOnTask,checkoutTask:()=>checkoutTask,blockTask:()=>blockTask,assignTask:()=>assignTask,archiveTask:()=>archiveTask,archiveProject:()=>archiveProject,archiveBoard:()=>archiveBoard,addMember:()=>addMember,addDependency:()=>addDependency});import{execSync as execSync9}from"child_process";function str2(v){return v!=null?String(v):null}function strOrDefault(v,def){return v!=null?String(v):def}function mapTask(row){return{id:row.id,seq:row.seq,parentId:str2(row.parent_id),repoPath:row.repo_path,projectId:str2(row.project_id),genieOsFolderId:str2(row.genie_os_folder_id),wishFile:str2(row.wish_file),groupName:str2(row.group_name),title:row.title,description:str2(row.description),acceptanceCriteria:str2(row.acceptance_criteria),typeId:row.type_id,stage:row.stage,status:row.status,priority:row.priority,startDate:str2(row.start_date),dueDate:str2(row.due_date),estimatedEffort:str2(row.estimated_effort),startedAt:str2(row.started_at),endedAt:str2(row.ended_at),blockedReason:str2(row.blocked_reason),releaseId:str2(row.release_id),checkoutRunId:str2(row.checkout_run_id),executionLockedAt:str2(row.execution_locked_at),checkoutTimeoutMs:row.checkout_timeout_ms??600000,sessionId:str2(row.session_id),paneId:str2(row.pane_id),traceId:str2(row.trace_id),boardId:str2(row.board_id),columnId:str2(row.column_id),externalId:str2(row.external_id),externalUrl:str2(row.external_url),archivedAt:str2(row.archived_at),metadata:row.metadata??{},createdAt:strOrDefault(row.created_at,""),updatedAt:strOrDefault(row.updated_at,"")}}function mapConversation(row){return{id:row.id,parentMessageId:row.parent_message_id!=null?Number(row.parent_message_id):null,name:row.name??null,type:row.type,linkedEntity:row.linked_entity??null,linkedEntityId:row.linked_entity_id??null,createdByType:row.created_by_type??null,createdById:row.created_by_id??null,metadata:row.metadata??{},createdAt:String(row.created_at),updatedAt:String(row.updated_at)}}function mapMessage(row){return{id:Number(row.id),conversationId:row.conversation_id,replyToId:row.reply_to_id!=null?Number(row.reply_to_id):null,senderType:row.sender_type,senderId:row.sender_id,body:row.body,metadata:row.metadata??{},createdAt:String(row.created_at),updatedAt:String(row.updated_at)}}function mapTaskActor(row){return{taskId:row.task_id,actorType:row.actor_type,actorId:row.actor_id,role:row.role,permissions:row.permissions??{},createdAt:String(row.created_at)}}function mapDependency(row){return{taskId:row.task_id,dependsOnId:row.depends_on_id,depType:row.dep_type,createdAt:String(row.created_at)}}function mapTag(row){return{id:row.id,name:row.name,color:row.color??palette.textDim,typeId:row.type_id??null,createdAt:String(row.created_at)}}function mapTaskType(row){return{id:row.id,name:row.name,description:row.description??null,icon:row.icon??null,stages:row.stages,isBuiltin:row.is_builtin,createdAt:String(row.created_at),updatedAt:String(row.updated_at)}}function mapNotificationPref(row){return{actorType:row.actor_type,actorId:row.actor_id,channel:row.channel,priorityThreshold:row.priority_threshold,isDefault:row.is_default,enabled:row.enabled,metadata:row.metadata??{},createdAt:String(row.created_at),updatedAt:String(row.updated_at)}}function mapStageLog(row){return{id:Number(row.id),taskId:row.task_id,fromStage:row.from_stage??null,toStage:row.to_stage,actorType:row.actor_type??null,actorId:row.actor_id??null,runId:row.run_id??null,gateType:row.gate_type??null,createdAt:String(row.created_at)}}function mapConversationMember(row){return{conversationId:row.conversation_id,actorType:row.actor_type,actorId:row.actor_id,role:row.role,joinedAt:String(row.joined_at)}}function mapProject(row){return{id:row.id,name:row.name,repoPath:str2(row.repo_path),description:str2(row.description),leaderAgent:str2(row.leader_agent),tmuxSession:str2(row.tmux_session),status:strOrDefault(row.status,"active"),archivedAt:str2(row.archived_at),createdAt:String(row.created_at)}}function getRepoPath(){try{return execSync9("git rev-parse --show-toplevel",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}catch{return process.cwd()}}async function resolveTaskId(idOrSeq,repoPath){let sql=await getConnection(),repo=repoPath??getRepoPath(),projectSeqMatch=idOrSeq.match(/^([^#]+)#(\d+)$/);if(projectSeqMatch&&!idOrSeq.startsWith("#")){let[,projectName,seqStr]=projectSeqMatch,seq2=Number.parseInt(seqStr,10);if(Number.isNaN(seq2))return null;let rows2=await sql`
|
|
1289
1289
|
SELECT t.id FROM tasks t
|
|
1290
1290
|
JOIN projects p ON t.project_id = p.id
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automagik/genie",
|
|
3
|
-
"version": "4.260503.
|
|
3
|
+
"version": "4.260503.8",
|
|
4
4
|
"description": "Collaborative terminal toolkit for human + AI workflows. NOTE: the npm distribution is being soft-deprecated — the canonical install is `curl -fsSL https://get.automagik.dev/genie | bash` (cosign + SLSA verified). See https://automagik.dev/genie/security/distribution-sovereignty",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genie",
|
|
3
|
-
"version": "4.260503.
|
|
3
|
+
"version": "4.260503.8",
|
|
4
4
|
"description": "Human-AI partnership for Claude Code. Share a terminal, orchestrate workers, evolve together. Brainstorm ideas, turn them into wishes, execute with /work, validate with /review, and ship as one team.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Namastex Labs"
|