@automagik/genie 4.260421.23 → 4.260421.24
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
|
@@ -51,12 +51,12 @@ ${content}`;if(params.extraArgs){let fileIdx=params.extraArgs.indexOf("--append-
|
|
|
51
51
|
${readFileSync5(params.extraArgs[fileIdx+1],"utf-8")}`,params.extraArgs.splice(fileIdx,2)}writeFileSync5(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 buildClaudeCommand(params){preflightCheck("claude");let parts=[resolveShellBinary("claude")??"claude","--dangerously-skip-permissions"],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;if(appendOtelEnv(env,params),params.nativeTeam?.enabled)appendNativeTeamFlags(parts,env,params.nativeTeam,params);if(params.resume)parts.push("--resume",escapeShellArg2(params.resume));else if(params.sessionId)parts.push("--session-id",escapeShellArg2(params.sessionId));if(params.role)parts.push("--agent",escapeShellArg2(params.role));if(params.model)parts.push("--model",escapeShellArg2(params.model));if(params.name)parts.push("--name",escapeShellArg2(params.name));appendSystemPromptFlags(parts,params);let settingsObj={};if(!params.skipHooks){let hookEntry={type:"command",command:buildDispatchCommand(),timeout:15};settingsObj.hooks={PreToolUse:[{matcher:"*",hooks:[hookEntry]}],PostToolUse:[{matcher:"*",hooks:[hookEntry]}],UserPromptSubmit:[{hooks:[hookEntry]}],Stop:[{hooks:[hookEntry]}]}}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}if(Object.keys(settingsObj).length>0)parts.push("--settings",escapeShellArg2(JSON.stringify(settingsObj)));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));return 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 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;if(params.team)env.GENIE_TEAM=params.team;if(parts.push("--yolo"),parts.push("--no-alt-screen"),params.extraArgs)for(let arg of params.extraArgs)parts.push(escapeShellArg2(arg));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.`);let prompt=promptParts.join(" ");return parts.push(escapeShellArg2(prompt)),{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;var init_provider_adapters=__esm(()=>{init_zod();init_inject();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(),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(),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()})});var exports_audit={};__export(exports_audit,{recordAuditEvent:()=>recordAuditEvent,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`
|
|
52
52
|
INSERT INTO audit_events (entity_type, entity_id, event_type, actor, details)
|
|
53
53
|
VALUES (${entityType}, ${entityId}, ${eventType}, ${actor??null}, ${sql.json(details??{})})
|
|
54
|
-
`}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
|
|
54
|
+
`}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
|
|
55
55
|
FROM audit_events ${where}
|
|
56
56
|
ORDER BY created_at DESC
|
|
57
57
|
LIMIT ${limit}`,values)}async function followAuditEvents(options,onEvent){let sql=await getConnection(),seed=await sql`
|
|
58
58
|
SELECT COALESCE(MAX(id), 0)::int AS max_id FROM audit_events
|
|
59
|
-
`,lastSeenId=Number(seed[0]?.max_id??0),active=!0,drainChain=Promise.resolve(),drain=async()=>{if(!active)return;let conditions=["id > $1"],values=[lastSeenId],paramIdx=2;if(options.type)conditions.push(`event_type = $${paramIdx
|
|
59
|
+
`,lastSeenId=Number(seed[0]?.max_id??0),active=!0,drainChain=Promise.resolve(),drain=async()=>{if(!active)return;let conditions=["id > $1"],values=[lastSeenId],paramIdx=2;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.errorsOnly)conditions.push("(event_type LIKE '%error%' OR details::text LIKE '%error%')");let where=`WHERE ${conditions.join(" AND ")}`,rows=await sql.unsafe(`SELECT id, entity_type, entity_id, event_type, actor, details, created_at
|
|
60
60
|
FROM audit_events ${where}
|
|
61
61
|
ORDER BY id ASC
|
|
62
62
|
LIMIT 200`,values);for(let row of rows)lastSeenId=row.id,onEvent(row)},queueDrain=()=>{drainChain=drainChain.then(drain).catch(()=>{})},listener=await sql.listen("genie_audit_event",()=>{queueDrain()}),pollTimer=setInterval(queueDrain,2000);return await drain(),{stop:async()=>{active=!1,clearInterval(pollTimer),await drainChain,await listener.unlisten()}}}async function queryErrorPatterns(since){let sql=await getConnection(),sinceTs=since?parseSince(since):new Date(Date.now()-86400000).toISOString(),messageExpr=`COALESCE(
|
|
@@ -3700,7 +3700,7 @@ Registering in Omni (${omniUrl})...`);let existingId=await findOmniAgent(name);i
|
|
|
3700
3700
|
text,
|
|
3701
3701
|
data,
|
|
3702
3702
|
created_at::text AS created_at
|
|
3703
|
-
`;function
|
|
3703
|
+
`;function kindFilterToLikePatterns(input){let escaped=input.replace(/\\/g,"\\\\").replace(/%/g,"\\%").replace(/_/g,"\\_");if(escaped.includes("*"))return[escaped.replace(/\*/g,"%")];if(escaped.includes("."))return[`${escaped}%`];return[`${escaped}%`,`%.${escaped}.%`,`%.${escaped}`]}function parseSince2(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];return new Date(Date.now()-amount*ms).toISOString()}async function queryV2Batch(filter){let sql=await getConnection(),clauses=[],values2=[],param=(v)=>{return values2.push(v),`$${values2.length}`};if(filter.afterId!=null)clauses.push(`id > ${param(filter.afterId)}`);if(filter.kindPrefix){let ors=kindFilterToLikePatterns(filter.kindPrefix).flatMap((p)=>{let placeholder=param(p);return[`subject LIKE ${placeholder} ESCAPE '\\'`,`kind LIKE ${placeholder} ESCAPE '\\'`]});clauses.push(`(${ors.join(" OR ")})`)}if(filter.severity)clauses.push(`(COALESCE(severity, data->>'_severity') = ${param(filter.severity)})`);if(filter.since)clauses.push(`created_at >= ${param(parseSince2(filter.since))}::timestamptz`);let limit=filter.limit??500,where=clauses.length>0?`WHERE ${clauses.join(" AND ")}`:"",rows=await sql.unsafe(`SELECT ${V2_SELECT}
|
|
3704
3704
|
FROM genie_runtime_events
|
|
3705
3705
|
${where}
|
|
3706
3706
|
ORDER BY id ASC
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genie",
|
|
3
|
-
"version": "4.260421.
|
|
3
|
+
"version": "4.260421.24",
|
|
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"
|