@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++}`),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
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++}`),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
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 kindFilterToLike(input){let escaped=input.replace(/\\/g,"\\\\").replace(/%/g,"\\%").replace(/_/g,"\\_");if(escaped.includes("*"))return escaped.replace(/\*/g,"%");return`${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 pattern=kindFilterToLike(filter.kindPrefix);clauses.push(`(subject LIKE ${param(pattern)} ESCAPE '\\' OR kind LIKE ${param(pattern)} ESCAPE '\\')`)}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}
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": "@automagik/genie",
3
- "version": "4.260421.23",
3
+ "version": "4.260421.24",
4
4
  "description": "Collaborative terminal toolkit for human + AI workflows",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genie",
3
- "version": "4.260421.23",
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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genie-plugin",
3
- "version": "4.260421.23",
3
+ "version": "4.260421.24",
4
4
  "private": true,
5
5
  "description": "Runtime dependencies for genie bundled CLIs",
6
6
  "type": "module",