@rulemetric/cli 0.10.0 → 0.12.0
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/README.md +1 -2
- package/dist/base-command.js +1 -1
- package/dist/chunk-355GZ7LR.js +1 -0
- package/dist/{chunk-BN54LTXD.js → chunk-3737WF6X.js} +1 -1
- package/dist/chunk-3CX6YUEX.js +1 -0
- package/dist/chunk-3RN3LDUC.js +1 -0
- package/dist/{chunk-4T2FJLDA.js → chunk-3TSZ77FB.js} +1 -1
- package/dist/chunk-3UKZJAFS.js +7 -0
- package/dist/chunk-3ZHVP3KE.js +1 -0
- package/dist/{chunk-XILSJP4P.js → chunk-4MXLDBLV.js} +1 -1
- package/dist/{chunk-FORJT5H6.js → chunk-4NAYH7VA.js} +1 -1
- package/dist/{chunk-ZJOYLBRU.js → chunk-4QW5DQNL.js} +1 -1
- package/dist/{chunk-FH55JFUY.js → chunk-76MON4SR.js} +1 -1
- package/dist/chunk-7EKHB3U7.js +1 -0
- package/dist/{chunk-EOJ3LAP6.js → chunk-7FY23IMS.js} +1 -1
- package/dist/{chunk-MQ47NLPC.js → chunk-7H4HJ2RV.js} +1 -1
- package/dist/chunk-7HJJCRYK.js +1 -0
- package/dist/{chunk-7LXG3DDL.js → chunk-ADZ7HHCD.js} +1 -1
- package/dist/{chunk-MODFTCZY.js → chunk-B3BHB26P.js} +1 -1
- package/dist/{chunk-7L4P7FCK.js → chunk-BFDXMIXO.js} +1 -1
- package/dist/{chunk-NTJKAIHS.js → chunk-BTKKWYIU.js} +1 -1
- package/dist/{chunk-3VYV6ZYB.js → chunk-CNOD6HWU.js} +1 -1
- package/dist/{chunk-RSMLOYVJ.js → chunk-CQARFIJB.js} +1 -1
- package/dist/chunk-DS4P5C4F.js +48 -0
- package/dist/{chunk-7BYMIHIB.js → chunk-E2QYH6EF.js} +1 -1
- package/dist/{chunk-4PWGV2OW.js → chunk-E7BOAZ3X.js} +35 -20
- package/dist/chunk-E7XOYGL5.js +20 -0
- package/dist/{chunk-OFSUKSZ2.js → chunk-FPOPUEA6.js} +1 -1
- package/dist/chunk-GAFMAVFO.js +1 -0
- package/dist/{chunk-ERNDMEYG.js → chunk-GJKHHZSQ.js} +1 -1
- package/dist/chunk-GN3ZHQ46.js +1 -0
- package/dist/{chunk-OFC7HIBX.js → chunk-GP46IPK2.js} +1 -1
- package/dist/{chunk-F5WE6JXK.js → chunk-HNAVHRGY.js} +1 -1
- package/dist/chunk-HPN22ZIN.js +1 -0
- package/dist/{chunk-DAD4YBYC.js → chunk-I2CXODLD.js} +1 -1
- package/dist/chunk-IEQDLURA.js +1 -0
- package/dist/chunk-IS4JRZK2.js +12 -0
- package/dist/{chunk-N7ML6X6Y.js → chunk-IZHJNPER.js} +1 -1
- package/dist/{chunk-SE5SRPIB.js → chunk-JKXU7FAY.js} +1 -1
- package/dist/{chunk-X4N4MT2I.js → chunk-JPW4LP2O.js} +1 -1
- package/dist/{chunk-YVM2CHNV.js → chunk-KOQRNWIW.js} +1 -1
- package/dist/chunk-L6NQNVK2.js +3 -0
- package/dist/{chunk-BL4BN6RU.js → chunk-LB24UKHZ.js} +1 -1
- package/dist/chunk-LUCVMLHV.js +1 -0
- package/dist/chunk-M7QSC64D.js +1 -0
- package/dist/{chunk-X23L2MF6.js → chunk-NBTC5FNV.js} +1 -1
- package/dist/{chunk-WEBB76XA.js → chunk-NEP5EWHJ.js} +1 -1
- package/dist/chunk-NIEP5G3T.js +13 -0
- package/dist/chunk-NNOSORNV.js +13 -0
- package/dist/chunk-NQSB4YVT.js +1 -0
- package/dist/{chunk-OPUI7CM2.js → chunk-NTKO4H2K.js} +1 -1
- package/dist/{chunk-NDZVH5QW.js → chunk-OASW7DOD.js} +1 -1
- package/dist/{chunk-WVJEBQYU.js → chunk-OJSWNU56.js} +1 -1
- package/dist/{chunk-W65UX4FC.js → chunk-OZRUGBN5.js} +1 -1
- package/dist/chunk-QEKWPQDQ.js +2 -0
- package/dist/chunk-RBSEE2Z6.js +1 -0
- package/dist/{chunk-OI7MOALX.js → chunk-RDXWQDNZ.js} +1 -1
- package/dist/{chunk-6QKI756T.js → chunk-RFISMWRW.js} +1 -1
- package/dist/chunk-RHVU6IFW.js +1 -0
- package/dist/chunk-SCBOQFZ4.js +16 -0
- package/dist/chunk-SDBQOHXY.js +1 -0
- package/dist/{chunk-553EGRRW.js → chunk-TGIUOJUB.js} +1 -1
- package/dist/{chunk-B22HYCBV.js → chunk-TU2AR6XO.js} +1 -1
- package/dist/chunk-UK5JOTMW.js +1 -0
- package/dist/chunk-UPFH72PF.js +2 -0
- package/dist/{chunk-YY53MMH7.js → chunk-V3CAUY7M.js} +1 -1
- package/dist/{chunk-G5BXZT6F.js → chunk-VBXL7XO7.js} +1 -1
- package/dist/{chunk-4STKWINN.js → chunk-W54I75IW.js} +1 -1
- package/dist/{chunk-W2SG3KND.js → chunk-X5WOTWT4.js} +1 -1
- package/dist/{chunk-TCR7TSAJ.js → chunk-XLVOAGSG.js} +3 -3
- package/dist/{chunk-V5MJ4ICC.js → chunk-XRTZU7IZ.js} +1 -1
- package/dist/{chunk-6SUN4NOY.js → chunk-Y3T5Q5CD.js} +1 -1
- package/dist/{chunk-MIOMKROL.js → chunk-YE5ARPHO.js} +1 -1
- package/dist/chunk-ZL5LUOBZ.js +1 -0
- package/dist/commands/antigravity/backfill.js +1 -1
- package/dist/commands/auth/create-key.js +1 -1
- package/dist/commands/auth/login.js +1 -1
- package/dist/commands/auth/logout.js +1 -1
- package/dist/commands/auth/revoke-key.js +1 -1
- package/dist/commands/auth/signup.js +1 -1
- package/dist/commands/auth/status.js +1 -1
- package/dist/commands/capture/scope.js +1 -1
- package/dist/commands/catalog/index.js +1 -1
- package/dist/commands/catalog/recommend.js +1 -1
- package/dist/commands/crons/list.js +1 -1
- package/dist/commands/crons/run.js +1 -1
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/diagnostics.js +1 -1
- package/dist/commands/eval-targets/create.js +1 -1
- package/dist/commands/eval-targets/list.js +1 -1
- package/dist/commands/evals/agent.js +1 -1
- package/dist/commands/evals/auto-run.js +1 -1
- package/dist/commands/evals/benchmark.js +1 -1
- package/dist/commands/evals/compare.js +1 -1
- package/dist/commands/evals/create.js +1 -1
- package/dist/commands/evals/optimize-description.js +1 -1
- package/dist/commands/evals/optimize.js +1 -1
- package/dist/commands/evals/refine-cases.js +5 -6
- package/dist/commands/evals/run.js +1 -1
- package/dist/commands/evals/validate-judge.js +1 -1
- package/dist/commands/experiments/list.js +1 -1
- package/dist/commands/gateway/ensure.js +1 -1
- package/dist/commands/hooks/install.js +1 -1
- package/dist/commands/hooks/run.js +1 -1
- package/dist/commands/hooks/uninstall.js +1 -1
- package/dist/commands/instructions/create.js +1 -1
- package/dist/commands/instructions/dedupe.js +1 -1
- package/dist/commands/instructions/delete.js +1 -1
- package/dist/commands/instructions/fork.js +1 -1
- package/dist/commands/instructions/get.js +1 -1
- package/dist/commands/instructions/list.js +1 -1
- package/dist/commands/instructions/promote.js +1 -1
- package/dist/commands/instructions/pull.js +1 -1
- package/dist/commands/instructions/restore.js +1 -1
- package/dist/commands/instructions/retract.js +1 -1
- package/dist/commands/instructions/upstream.js +1 -1
- package/dist/commands/instructions/versions.js +1 -1
- package/dist/commands/launcher.js +1 -1
- package/dist/commands/local/down.js +1 -1
- package/dist/commands/local/up.js +1 -1
- package/dist/commands/org/current.js +1 -1
- package/dist/commands/org/list.js +1 -1
- package/dist/commands/org/switch.js +1 -1
- package/dist/commands/packs/add-instruction.js +1 -1
- package/dist/commands/packs/apply.js +1 -1
- package/dist/commands/packs/create.js +1 -1
- package/dist/commands/packs/fork.js +1 -1
- package/dist/commands/packs/get.js +1 -1
- package/dist/commands/packs/list.js +1 -1
- package/dist/commands/packs/remove-instruction.js +1 -1
- package/dist/commands/proxy/env.js +1 -1
- package/dist/commands/proxy/logs.js +1 -1
- package/dist/commands/proxy/restart.js +1 -1
- package/dist/commands/proxy/setup.js +1 -1
- package/dist/commands/proxy/start.js +1 -1
- package/dist/commands/proxy/status.js +1 -1
- package/dist/commands/proxy/stop.js +1 -1
- package/dist/commands/research/backfill.js +1 -1
- package/dist/commands/research/tail-transcript.js +1 -1
- package/dist/commands/service/install.js +1 -1
- package/dist/commands/service/status.js +1 -1
- package/dist/commands/service/uninstall.js +1 -1
- package/dist/commands/sessions/analyze.js +1 -1
- package/dist/commands/sessions/delete.js +1 -1
- package/dist/commands/sessions/end.js +1 -1
- package/dist/commands/sessions/import.js +1 -1
- package/dist/commands/sessions/list.js +1 -1
- package/dist/commands/sessions/start.js +1 -1
- package/dist/commands/setup.js +1 -1
- package/dist/commands/skills/export-approved.js +1 -1
- package/dist/commands/skills/install.js +4 -4
- package/dist/commands/skills/list.js +1 -1
- package/dist/commands/skills/publish.js +1 -1
- package/dist/commands/skills/search.js +1 -1
- package/dist/commands/skills/update.js +1 -1
- package/dist/commands/suggestions/accept.js +1 -1
- package/dist/commands/suggestions/auto.js +1 -1
- package/dist/commands/suggestions/dismiss.js +1 -1
- package/dist/commands/suggestions/list.js +1 -1
- package/dist/commands/suggestions/refresh.js +1 -1
- package/dist/commands/suggestions/undo.js +1 -1
- package/dist/dashboard/Dashboard.js +1 -1
- package/dist/dashboard/data.js +1 -1
- package/dist/dashboard/launcher/ActiveJobsList.js +1 -1
- package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
- package/dist/dashboard/launcher/NewLaunchForm.js +1 -1
- package/dist/dashboard/launcher/api.js +1 -1
- package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
- package/dist/dist-XEWF3R3N.js +1 -0
- package/dist/lib/active-org-refresh.js +1 -1
- package/dist/lib/agent-loop.js +1 -1
- package/dist/lib/antigravity-transcript.js +1 -1
- package/dist/lib/api-client.js +1 -1
- package/dist/lib/architecture/domain-layout.js +1 -0
- package/dist/lib/auto-run.js +1 -1
- package/dist/lib/codex-exec.js +1 -1
- package/dist/lib/ensure-api-key.js +1 -1
- package/dist/lib/ensure-fresh-token.js +1 -1
- package/dist/lib/eval-benchmark.js +1 -1
- package/dist/lib/eval-candidate-run.js +1 -1
- package/dist/lib/eval-case-generator.js +1 -1
- package/dist/lib/eval-conversation-handler.js +1 -1
- package/dist/lib/eval-grader.js +1 -1
- package/dist/lib/eval-resume.js +1 -1
- package/dist/lib/eval-run-batch.js +1 -1
- package/dist/lib/evolution-cost.js +1 -1
- package/dist/lib/evolution-enrolment.js +1 -1
- package/dist/lib/insights/generation/grading-transcript.js +1 -0
- package/dist/lib/insights/generation/installed-asks.js +1 -0
- package/dist/lib/insights/generation/prompts.js +1 -0
- package/dist/lib/insights/nomination/nominate.js +1 -0
- package/dist/lib/instruction-proposer.js +1 -1
- package/dist/lib/instructions/acceptance/accept-events.js +1 -0
- package/dist/lib/instructions/acceptance/accept-hook.js +1 -0
- package/dist/lib/instructions/acceptance/accept-types.js +0 -0
- package/dist/lib/instructions/acceptance/claude-md-blocks.js +1 -0
- package/dist/lib/instructions/acceptance/hook-install.js +1 -0
- package/dist/lib/instructions/acceptance/reverse-applications.js +1 -0
- package/dist/lib/instructions/acceptance/suggestion-accept.js +1 -0
- package/dist/lib/instructions/applications/render.js +1 -0
- package/dist/lib/instructions/applications/tagged-block.js +11 -0
- package/dist/lib/jobs/handlers/cron-auto-accept-suggestions.js +1 -0
- package/dist/lib/jobs/handlers/cron-eval-autorun.js +1 -0
- package/dist/lib/jobs/handlers/cron-instruction-evolution.js +1 -0
- package/dist/lib/jobs/handlers/cron-instruction-training.js +1 -0
- package/dist/lib/jobs/handlers/cron-refine-cases.js +1 -0
- package/dist/lib/jobs/handlers/cron-refresh-pricing.js +1 -0
- package/dist/lib/jobs/handlers/cron-refresh-skills.js +1 -0
- package/dist/lib/jobs/handlers/cron-retire-unused-skills.js +1 -0
- package/dist/lib/jobs/handlers/cron-suggest-instructions.js +1 -0
- package/dist/lib/jobs/handlers/distill-memories.js +1 -0
- package/dist/lib/jobs/handlers/process-changelog.js +1 -0
- package/dist/lib/jobs/handlers/process-conversation.js +1 -0
- package/dist/lib/jobs/handlers/process-eval.js +1 -0
- package/dist/lib/jobs/handlers/process-insights.js +1 -0
- package/dist/lib/jobs/handlers/process-judge-review.js +1 -0
- package/dist/lib/jobs/handlers/process-launch.js +1 -0
- package/dist/lib/jobs/handlers/process-memory-ab.js +1 -0
- package/dist/lib/jobs/handlers/process-run-cleanup.js +1 -0
- package/dist/lib/jobs/handlers/process-send-message.js +1 -0
- package/dist/lib/jobs/handlers/process-session-goal.js +1 -0
- package/dist/lib/judge-review-runner.js +1 -1
- package/dist/lib/llm-client.js +1 -1
- package/dist/lib/manual-tasks.js +1 -1
- package/dist/lib/optimize-compare.js +1 -1
- package/dist/lib/projects/workspace/eval-workspace.js +1 -0
- package/dist/lib/projects/workspace/eval-worktree.js +1 -0
- package/dist/lib/projects/workspace/repo-artifacts.js +1 -0
- package/dist/lib/projects/workspace/sweep-eval-worktrees.js +1 -0
- package/dist/lib/projects/workspace/worktree.js +1 -0
- package/dist/lib/refine-cases.js +1 -0
- package/dist/lib/research-client.js +1 -1
- package/dist/lib/retraction.js +1 -1
- package/dist/lib/reviewer-detect.js +1 -1
- package/dist/lib/setup-steps.js +1 -1
- package/dist/lib/skill-paths.js +1 -0
- package/dist/lib/skill-retirement.js +1 -0
- package/dist/lib/target-anchor.js +1 -0
- package/dist/lib/telemetry.js +1 -1
- package/dist/lib/terminal-target-heartbeat.js +1 -1
- package/oclif.manifest.json +378 -540
- package/package.json +7 -5
- package/dist/chunk-3A7RPMNN.js +0 -13
- package/dist/chunk-3IH22LYI.js +0 -1
- package/dist/chunk-7DFNBRLY.js +0 -61
- package/dist/chunk-CJRYYV76.js +0 -1
- package/dist/chunk-FP6QAPNK.js +0 -1
- package/dist/chunk-H6MN2AAF.js +0 -11
- package/dist/chunk-HKC224ZO.js +0 -1
- package/dist/chunk-L2CFSMBC.js +0 -1
- package/dist/chunk-S7YDBO42.js +0 -1
- package/dist/chunk-UC377K7P.js +0 -17
- package/dist/chunk-UY5QYCTK.js +0 -1
- package/dist/chunk-VKVWEG5J.js +0 -11
- package/dist/chunk-VXM4PEED.js +0 -46
- package/dist/commands/convert.js +0 -1
- package/dist/commands/converters.js +0 -1
- package/dist/commands/import.js +0 -1
- package/dist/dist-FAVALJ5C.js +0 -1
- package/dist/lib/claude-md-blocks.js +0 -1
- package/dist/lib/eval-workspace.js +0 -1
- package/dist/lib/eval-worktree.js +0 -1
- package/dist/lib/handlers/cron-auto-accept-suggestions.js +0 -1
- package/dist/lib/handlers/cron-eval-autorun.js +0 -1
- package/dist/lib/handlers/cron-instruction-evolution.js +0 -1
- package/dist/lib/handlers/cron-instruction-training.js +0 -1
- package/dist/lib/handlers/cron-refresh-pricing.js +0 -1
- package/dist/lib/handlers/cron-refresh-skills.js +0 -1
- package/dist/lib/handlers/cron-suggest-instructions.js +0 -1
- package/dist/lib/handlers/distill-memories.js +0 -1
- package/dist/lib/handlers/process-changelog.js +0 -1
- package/dist/lib/handlers/process-conversation.js +0 -1
- package/dist/lib/handlers/process-eval.js +0 -1
- package/dist/lib/handlers/process-insights.js +0 -1
- package/dist/lib/handlers/process-judge-review.js +0 -1
- package/dist/lib/handlers/process-launch.js +0 -1
- package/dist/lib/handlers/process-memory-ab.js +0 -1
- package/dist/lib/handlers/process-run-cleanup.js +0 -1
- package/dist/lib/handlers/process-send-message.js +0 -1
- package/dist/lib/handlers/process-session-goal.js +0 -1
- package/dist/lib/insights-prompts.js +0 -1
- package/dist/lib/repo-artifacts.js +0 -1
- package/dist/lib/suggestion-accept.js +0 -1
- package/dist/lib/worktree.js +0 -1
- /package/dist/{chunk-UGIUIZ2V.js → chunk-5INUF4A4.js} +0 -0
- /package/dist/{chunk-FK73GD2X.js → chunk-LJRE3LZ2.js} +0 -0
- /package/dist/{chunk-UF6US7VU.js → chunk-PZS55PW2.js} +0 -0
- /package/dist/{chunk-Z72VHGV7.js → chunk-U2NT5OSQ.js} +0 -0
- /package/dist/{chunk-RSKQRVPJ.js → chunk-ZYGBABMZ.js} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import{a as i,b as Ce}from"./chunk-ZLLER3HP.js";var qt=["claude_code","cursor","vscode_copilot","copilot_agent","rulemetric_mcp","codex","pi","opencode","antigravity"],Et=["user_message","assistant_message","tool_call","tool_result","thinking","error"];var O=class{static{i(this,"ClaudeCodeAdapter")}tool="claude_code";parse(e){let t=e.split(`
|
|
2
|
+
`).filter(c=>c.trim()),o=[];for(let c of t)try{o.push(JSON.parse(c))}catch{}let s=o.filter(c=>c.type==="user"||c.type==="assistant"),a=null,l=null,p={},r=o.find(c=>c.type==="user");r&&(a=r.cwd??null,l=r.gitBranch??null,r.version&&(p.claudeCodeVersion=r.version),r.sessionId&&(p.sessionId=r.sessionId));let u=o.find(c=>c.type==="assistant");u?.message?.model&&(p.model=u.message.model);let m=[],f=0;for(let c of s){let g=c.timestamp??new Date().toISOString();if(c.type==="user"){let _=c.message?.content;if(typeof _=="string")m.push({sequence:f++,eventType:"user_message",content:_,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:g,metadata:{}});else if(Array.isArray(_))for(let h of _)h.type==="tool_result"&&m.push({sequence:f++,eventType:"tool_result",content:typeof h.content=="string"?h.content:JSON.stringify(h.content),toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:g,metadata:{toolUseId:h.tool_use_id}})}else if(c.type==="assistant"){let _=Array.isArray(c.message?.content)?c.message.content:[],h=c.message?.usage,T=h?{input:h.input_tokens??0,output:h.output_tokens??0,cacheRead:h.cache_read_input_tokens??0,cacheWrite:h.cache_creation_input_tokens??0}:null,S={};c.message?.model&&(S.model=c.message.model),c.message?.stop_reason&&(S.stopReason=c.message.stop_reason),c.requestId&&(S.requestId=c.requestId),h?.service_tier&&(S.serviceTier=h.service_tier),h?.speed&&(S.speed=h.speed),h?.cache_creation&&(S.cacheCreationDetail=h.cache_creation),h?.server_tool_use&&(S.serverToolUse=h.server_tool_use);for(let w of _)w.type==="text"?m.push({sequence:f++,eventType:"assistant_message",content:w.text??"",toolName:null,toolInput:null,toolOutput:null,tokenUsage:T,timestamp:g,metadata:S}):w.type==="thinking"?m.push({sequence:f++,eventType:"thinking",content:w.thinking??"",toolName:null,toolInput:null,toolOutput:null,tokenUsage:T,timestamp:g,metadata:S}):w.type==="tool_use"&&m.push({sequence:f++,eventType:"tool_call",content:null,toolName:w.name??"unknown",toolInput:w.input??null,toolOutput:null,tokenUsage:T,timestamp:g,metadata:{...S,toolUseId:w.id}})}}let d=m.map(c=>c.timestamp).sort(),y=new Date().toISOString();return{tool:"claude_code",projectPath:a,gitBranch:l,startedAt:d[0]??y,endedAt:d[d.length-1]??null,events:m,metadata:p}}};var P=class{static{i(this,"CursorAdapter")}tool="cursor";parse(e){let t=Ce("better-sqlite3"),o=new t(e,{readonly:!0});try{let s=o.prepare("SELECT value FROM ItemTable WHERE key = 'composer.composerData'").get();return s?this.parseComposerJson(s.value):this.emptySession()}finally{o.close()}}parseComposerJson(e){let t;try{t=JSON.parse(e)}catch{return this.emptySession()}let o=Object.values(t.allComposers??{});if(o.length===0)return this.emptySession();let s=o.sort((u,m)=>{let f=u.createdAt?new Date(u.createdAt).getTime():0;return(m.createdAt?new Date(m.createdAt).getTime():0)-f})[0],a=s.conversation??[],l=[];for(let u=0;u<a.length;u++){let m=a[u],f=m.createdAt??new Date().toISOString();l.push({sequence:u,eventType:m.type===1?"user_message":"assistant_message",content:m.text,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:f,metadata:{}})}let p=l.map(u=>u.timestamp).sort(),r=new Date().toISOString();return{tool:"cursor",projectPath:null,gitBranch:null,startedAt:p[0]??r,endedAt:p[p.length-1]??null,events:l,metadata:{composerId:s.composerId}}}emptySession(){return{tool:"cursor",projectPath:null,gitBranch:null,startedAt:new Date().toISOString(),endedAt:null,events:[],metadata:{}}}};var N=class{static{i(this,"VSCodeCopilotAdapter")}tool="vscode_copilot";parse(e){let t;try{t=JSON.parse(e)}catch{return this.emptySession()}let o=t.requests??[],s=[],a=0;for(let r of o){let u=r.timestamp?new Date(r.timestamp).toISOString():new Date().toISOString();if(s.push({sequence:a++,eventType:"user_message",content:r.message,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:u,metadata:{}}),r.response){let m=r.response.timestamp?new Date(r.response.timestamp).toISOString():u;s.push({sequence:a++,eventType:"assistant_message",content:r.response.message,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:m,metadata:{}})}}let l=s.map(r=>r.timestamp).sort(),p=new Date().toISOString();return{tool:"vscode_copilot",projectPath:null,gitBranch:null,startedAt:l[0]??p,endedAt:l[l.length-1]??null,events:s,metadata:{...t.requesterUsername&&{username:t.requesterUsername},...t.customTitle&&{title:t.customTitle}}}}emptySession(){return{tool:"vscode_copilot",projectPath:null,gitBranch:null,startedAt:new Date().toISOString(),endedAt:null,events:[],metadata:{}}}};var D=class{static{i(this,"CopilotAgentAdapter")}tool="copilot_agent";parse(e){let t;try{t=JSON.parse(e)}catch{return this.emptySession()}let o=t.requests??[],s=[],a=0;for(let r of o){let u=r.timestamp?new Date(r.timestamp).toISOString():new Date().toISOString();if(s.push({sequence:a++,eventType:"user_message",content:r.message,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:u,metadata:{}}),r.toolCalls)for(let m of r.toolCalls){let f=m.timestamp?new Date(m.timestamp).toISOString():u;s.push({sequence:a++,eventType:"tool_call",content:null,toolName:m.name??"unknown",toolInput:m.input??null,toolOutput:m.output??null,tokenUsage:null,timestamp:f,metadata:{}})}if(r.response){let m=r.response.timestamp?new Date(r.response.timestamp).toISOString():u;s.push({sequence:a++,eventType:"assistant_message",content:r.response.message,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:m,metadata:{}})}}let l=s.map(r=>r.timestamp).sort(),p=new Date().toISOString();return{tool:"copilot_agent",projectPath:null,gitBranch:null,startedAt:l[0]??p,endedAt:l[l.length-1]??null,events:s,metadata:{...t.requesterUsername&&{username:t.requesterUsername},...t.customTitle&&{title:t.customTitle},...t.agentMode!=null&&{agentMode:t.agentMode}}}}emptySession(){return{tool:"copilot_agent",projectPath:null,gitBranch:null,startedAt:new Date().toISOString(),endedAt:null,events:[],metadata:{}}}};var b=class{static{i(this,"RuleMetricMcpAdapter")}tool="rulemetric_mcp";parse(e){let t;try{t=JSON.parse(e)}catch{return this.emptySession()}let s=(t.events??[]).map((l,p)=>({sequence:l.sequence??p,eventType:this.normalizeEventType(l.eventType),content:l.content??null,toolName:l.toolName??null,toolInput:l.toolInput??null,toolOutput:l.toolOutput??null,tokenUsage:l.tokenUsage??null,timestamp:l.timestamp??new Date().toISOString(),metadata:l.metadata??{}})),a=new Date().toISOString();return{tool:"rulemetric_mcp",projectPath:t.projectPath??null,gitBranch:t.gitBranch??null,startedAt:t.startedAt??s[0]?.timestamp??a,endedAt:t.endedAt??s[s.length-1]?.timestamp??null,events:s,metadata:t.metadata??{}}}normalizeEventType(e){return e&&["user_message","assistant_message","tool_call","tool_result","thinking","error"].includes(e)?e:"assistant_message"}emptySession(){return{tool:"rulemetric_mcp",projectPath:null,gitBranch:null,startedAt:new Date().toISOString(),endedAt:null,events:[],metadata:{}}}};function $e(n){try{return JSON.parse(n)}catch{return n}}i($e,"safeJsonParse");function Y(n,e){return Array.isArray(n)?n.filter(t=>t.type&&e.includes(t.type)).map(t=>t.text??"").filter(Boolean).join(`
|
|
3
|
+
|
|
4
|
+
`):""}i(Y,"textFromBlocks");function je(n){if(!n)return null;let e=n.cached_input_tokens??0,t=Math.max(0,(n.input_tokens??0)-e),o=(n.output_tokens??0)+(n.reasoning_output_tokens??0);return t===0&&o===0&&e===0?null:{input:t,output:o,cacheRead:e,cacheWrite:0}}i(je,"tokenUsageFromCodex");function Ue(n){if(!n)return new Date().toISOString();let e=new Date(n);return Number.isFinite(e.getTime())?e.toISOString():new Date().toISOString()}i(Ue,"normalizeTimestamp");function Z(){return{sequence:0,model:null,prevCumulativeTotal:0,callNames:{}}}i(Z,"freshCodexState");var C=class{static{i(this,"CodexAdapter")}tool="codex";parse(e){let t=Z(),{events:o,projectPath:s,gitBranch:a,metadata:l}=this.parseLines(e,t),p=o.map(u=>u.timestamp).sort(),r=new Date().toISOString();return{tool:"codex",projectPath:s,gitBranch:a,startedAt:p[0]??r,endedAt:p[p.length-1]??null,events:o,metadata:l}}parseAppend(e,t){let o={...t,callNames:{...t.callNames}},{events:s}=this.parseLines(e,o);return{events:s,state:o}}parseLines(e,t){let o=e.split(`
|
|
5
|
+
`).filter(m=>m.trim()),s=[],a={},l=t.callNames,p=null,r=null,u=null;for(let m of o){let f;try{f=JSON.parse(m)}catch{continue}let d=f.payload;if(!d)continue;let y=Ue(f.timestamp);if(f.type==="session_meta"){u=d.session_id??d.id??u,p=d.cwd??p,d.git_branch&&(r=d.git_branch),d.model&&(t.model=d.model),a.sessionId=u,a.codexSessionId=u,a.originator=d.originator,a.source=d.source,a.modelProvider=d.model_provider,a.codexCliVersion=d.cli_version;continue}if(f.type==="turn_context"){p=d.cwd??p,d.model&&(t.model=d.model,a.model=d.model);continue}if(f.type==="response_item"&&d.type==="message"){if(d.role==="user"){let c=Y(d.content,["input_text"]);if(!c)continue;s.push({sequence:t.sequence++,eventType:"user_message",content:c,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:y,metadata:{}})}else if(d.role==="assistant"){let c=Y(d.content,["output_text"]);if(!c)continue;s.push({sequence:t.sequence++,eventType:"assistant_message",content:c,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,model:t.model,timestamp:y,metadata:t.model?{model:t.model}:{}})}continue}if(f.type==="response_item"&&d.type==="function_call"){let c=d.name??"unknown";d.call_id&&(l[d.call_id]=c);let g=typeof d.arguments=="string"?$e(d.arguments):{};s.push({sequence:t.sequence++,eventType:"tool_call",content:null,toolName:c,toolInput:g&&typeof g=="object"&&!Array.isArray(g)?g:{arguments:g},toolOutput:null,tokenUsage:null,model:t.model,timestamp:y,metadata:{callId:d.call_id}});continue}if(f.type==="response_item"&&d.type==="function_call_output"){let c=d.call_id?l[d.call_id]??null:null;s.push({sequence:t.sequence++,eventType:"tool_result",content:d.output??null,toolName:c,toolInput:null,toolOutput:d.output==null?null:{output:d.output},tokenUsage:null,model:t.model,timestamp:y,metadata:{callId:d.call_id}});continue}if(f.type==="event_msg"&&d.type==="token_count"){let c=d.info,g=c?.total_token_usage?.total_tokens??0;if(g>0&&g===t.prevCumulativeTotal)continue;g>0&&(t.prevCumulativeTotal=g);let _=je(c?.last_token_usage??c?.total_token_usage);if(!_)continue;let h=c?.model??c?.model_name??t.model;s.push({sequence:t.sequence++,eventType:"assistant_message",content:null,toolName:null,toolInput:null,toolOutput:null,tokenUsage:_,model:h??null,timestamp:y,metadata:{codexEventType:"token_count",...h?{model:h}:{},reasoningOutputTokens:c?.last_token_usage?.reasoning_output_tokens??0}})}}return{events:s,projectPath:p,gitBranch:r,sessionId:u,metadata:a}}};var qe={claude_code:i(()=>new O,"claude_code"),cursor:i(()=>new P,"cursor"),vscode_copilot:i(()=>new N,"vscode_copilot"),copilot_agent:i(()=>new D,"copilot_agent"),rulemetric_mcp:i(()=>new b,"rulemetric_mcp"),codex:i(()=>new C,"codex")};function Ee(n){let e=qe[n];if(!e)throw new Error(`Unknown session tool: ${n}`);return e()}i(Ee,"getAdapter");function Re(n){let e=n.trim();if(e.startsWith("{")){let t=e.split(`
|
|
6
|
+
`)[0],o=null;try{o=JSON.parse(t)}catch{try{o=JSON.parse(e)}catch{}}if(o){if(o.type==="user"||o.type==="assistant")return"claude_code";if(Array.isArray(o.events)&&!o.requests&&!o.allComposers)return"rulemetric_mcp";if(Array.isArray(o.requests))return o.requests.some(a=>Array.isArray(a.toolCalls))||o.agentMode?"copilot_agent":"vscode_copilot";if(o.allComposers)return"cursor"}if(!o)try{let s=e.split(`
|
|
7
|
+
`).filter(a=>a.trim());if(s.length>1){let a=JSON.parse(s[0]);if(a.type==="user"||a.type==="assistant")return"claude_code"}}catch{}}return null}i(Re,"detectTool");import{readdir as G,stat as L}from"fs/promises";import{basename as Me,join as I}from"path";import{homedir as $}from"os";var Je={"claude-opus-4-7":"Opus 4.7","claude-opus-4-6":"Opus 4.6","claude-opus-4-5":"Opus 4.5","claude-opus-4-1":"Opus 4.1","claude-opus-4":"Opus 4","claude-sonnet-4-6":"Sonnet 4.6","claude-sonnet-4-5":"Sonnet 4.5","claude-sonnet-4":"Sonnet 4","claude-3-7-sonnet":"Sonnet 3.7","claude-3-5-sonnet":"Sonnet 3.5","claude-haiku-4-5":"Haiku 4.5","claude-3-5-haiku":"Haiku 3.5"};function Be(){return process.env.CLAUDE_CONFIG_DIR||I($(),".claude")}i(Be,"getClaudeDir");function Ge(){return I(Be(),"projects")}i(Ge,"getProjectsDir");function Le(){return process.platform==="darwin"?I($(),"Library","Application Support","Claude","local-agent-mode-sessions"):process.platform==="win32"?I($(),"AppData","Roaming","Claude","local-agent-mode-sessions"):I($(),".config","Claude","local-agent-mode-sessions")}i(Le,"getDesktopSessionsDir");async function Fe(n){let e=[];async function t(o,s){if(s>8)return;let a=await G(o).catch(()=>[]);for(let l of a){if(l==="node_modules"||l===".git")continue;let p=I(o,l);if((await L(p).catch(()=>null))?.isDirectory())if(l==="projects"){let u=await G(p).catch(()=>[]);for(let m of u){let f=I(p,m);(await L(f).catch(()=>null))?.isDirectory()&&e.push(f)}}else await t(p,s+1)}}return i(t,"walk"),await t(n,0),e}i(Fe,"findDesktopProjectDirs");var Q={name:"claude",displayName:"Claude Code",modelDisplayName(n){let e=n.replace(/@.*$/,"").replace(/-\d{8}$/,"");for(let[t,o]of Object.entries(Je))if(e.startsWith(t))return o;return e},toolDisplayName(n){return n},async discoverSessions(){let n=[],e=Ge();try{let o=await G(e);for(let s of o){let a=I(e,s);(await L(a).catch(()=>null))?.isDirectory()&&n.push({path:a,project:s,provider:"claude"})}}catch{}let t=await Fe(Le());for(let o of t)n.push({path:o,project:Me(o),provider:"claude"});return n},createSessionParser(){return{async*parse(){}}}};import{readdir as j,readFile as ee,stat as We}from"fs/promises";import{basename as He,join as A}from"path";import{homedir as ze}from"os";var Ke={"gpt-5.3-codex":"GPT-5.3 Codex","gpt-5.4-mini":"GPT-5.4 Mini","gpt-5.4":"GPT-5.4","gpt-5":"GPT-5","gpt-4o-mini":"GPT-4o Mini","gpt-4o":"GPT-4o"},te={exec_command:"Bash",read_file:"Read",write_file:"Edit",apply_diff:"Edit",apply_patch:"Edit",spawn_agent:"Agent",close_agent:"Agent",wait_agent:"Agent",read_dir:"Glob"};function Ve(){return process.env.CODEX_HOME??A(ze(),".codex")}i(Ve,"getCodexDir");function Xe(n){return n.replace(/^\//,"").replace(/\//g,"-")}i(Xe,"sanitizeProject");async function Ye(n){try{let t=(await ee(n,"utf-8")).split(`
|
|
8
|
+
`)[0];return t?.trim()?JSON.parse(t):null}catch{return null}}i(Ye,"readFirstLine");async function Ze(n){let e=await Ye(n);if(!e)return{valid:!1};let t=e.type==="session_meta"&&typeof e.payload?.originator=="string"&&e.payload.originator.toLowerCase().startsWith("codex");return{valid:t,meta:t?e:void 0}}i(Ze,"isValidCodexSession");async function Qe(n){let e=A(n,"sessions"),t=[],o;try{o=await j(e)}catch{return t}for(let s of o){if(!/^\d{4}$/.test(s))continue;let a=A(e,s),l=await j(a).catch(()=>[]);for(let p of l){if(!/^\d{2}$/.test(p))continue;let r=A(a,p),u=await j(r).catch(()=>[]);for(let m of u){if(!/^\d{2}$/.test(m))continue;let f=A(r,m),d=await j(f).catch(()=>[]);for(let y of d){if(!y.startsWith("rollout-")||!y.endsWith(".jsonl"))continue;let c=A(f,y);if(!(await We(c).catch(()=>null))?.isFile())continue;let{valid:_,meta:h}=await Ze(c);if(!_||!h)continue;let T=h.payload?.cwd??"unknown";t.push({path:c,project:Xe(T),provider:"codex"})}}}}return t}i(Qe,"discoverSessionsInDir");function et(n,e){return n?.info?.model??n?.info?.model_name??e??"gpt-5"}i(et,"resolveModel");function tt(n,e){return{async*parse(){let t;try{t=await ee(n.path,"utf-8")}catch{return}let o=t.split(`
|
|
9
|
+
`).filter(y=>y.trim()),s,a="",l=0,p=0,r=0,u=0,m=0,f=[],d="";for(let y of o){let c;try{c=JSON.parse(y)}catch{continue}if(c.type==="session_meta"){a=c.payload?.session_id??He(n.path,".jsonl"),s=c.payload?.model;continue}if(c.type==="response_item"&&c.payload?.type==="function_call"){let g=c.payload.name??"";f.push(te[g]??g);continue}if(c.type==="response_item"&&c.payload?.type==="message"&&c.payload?.role==="user"){let g=(c.payload.content??[]).filter(_=>_.type==="input_text").map(_=>_.text??"").filter(Boolean);g.length>0&&(d=g.join(" "));continue}if(c.type==="event_msg"&&c.payload?.type==="token_count"){let g=c.payload.info;if(!g)continue;let _=g.total_token_usage?.total_tokens??0;if(_>0&&_===l)continue;l=_;let h=g.last_token_usage,T=0,S=0,w=0,v=0;if(h)T=h.input_tokens??0,S=h.cached_input_tokens??0,w=h.output_tokens??0,v=h.reasoning_output_tokens??0;else if(_>0){let x=g.total_token_usage;if(!x)continue;T=(x.input_tokens??0)-p,S=(x.cached_input_tokens??0)-r,w=(x.output_tokens??0)-u,v=(x.reasoning_output_tokens??0)-m}if(!h){let x=g.total_token_usage;x&&(p=x.input_tokens??0,r=x.cached_input_tokens??0,u=x.output_tokens??0,m=x.reasoning_output_tokens??0)}if(T+S+w+v===0)continue;let De=Math.max(0,T-S),be=et(c.payload,s),X=c.timestamp??"",B=`codex:${n.path}:${X}:${_}`;if(e.has(B))continue;e.add(B),yield{provider:"codex",model:be,inputTokens:De,outputTokens:w,cacheCreationInputTokens:0,cacheReadInputTokens:S,cachedInputTokens:S,reasoningTokens:v,costUSD:0,tools:f,bashCommands:[],timestamp:X,speed:"standard",deduplicationKey:B,userMessage:d,sessionId:a},f=[],d=""}}}}}i(tt,"createParser");var ne={name:"codex",displayName:"Codex",modelDisplayName(n){for(let[e,t]of Object.entries(Ke))if(n.startsWith(e))return t;return n},toolDisplayName(n){return te[n]??n},async discoverSessions(){return Qe(Ve())},createSessionParser(n,e){return tt(n,e)}};import{readdir as nt,readFile as oe,stat as ot}from"fs/promises";import{basename as se,dirname as st,join as F}from"path";import{homedir as rt}from"os";var at={"gpt-4.1-nano":"GPT-4.1 Nano","gpt-4.1-mini":"GPT-4.1 Mini","gpt-4.1":"GPT-4.1","gpt-4o-mini":"GPT-4o Mini","gpt-4o":"GPT-4o","gpt-5-mini":"GPT-5 Mini","gpt-5":"GPT-5","claude-sonnet-4-5":"Sonnet 4.5","claude-sonnet-4":"Sonnet 4","claude-3-7-sonnet":"Sonnet 3.7","claude-3-5-sonnet":"Sonnet 3.5","o4-mini":"o4-mini",o3:"o3"},re={bash:"Bash",read_file:"Read",write_file:"Edit",edit_file:"Edit",create_file:"Write",delete_file:"Delete",search_files:"Grep",find_files:"Glob",list_directory:"LS",web_search:"WebSearch",fetch_webpage:"WebFetch",github_repo:"GitHub"},it=Object.entries(at).sort((n,e)=>e[0].length-n[0].length);function lt(){return F(rt(),".copilot","session-state")}i(lt,"getCopilotSessionStateDir");function ct(n){let e=n.match(/^cwd:\s*(.+)$/m);return e?.[1]&&e[1].replace(/\s*#.*$/,"").replace(/^['"]|['"]$/g,"").trim()||null}i(ct,"parseCwd");function ut(n,e){return{async*parse(){let t;try{t=await oe(n.path,"utf-8")}catch{return}let o=se(st(n.path)),s=t.split(`
|
|
10
|
+
`).filter(p=>p.trim()),a="",l="";for(let p of s){let r;try{r=JSON.parse(p)}catch{continue}if(r.type==="session.model_change"){a=r.data.newModel??a;continue}if(r.type==="user.message"){l=r.data.content??"";continue}if(r.type==="assistant.message"){let{messageId:u,outputTokens:m,toolRequests:f=[]}=r.data;if(m===0||!a)continue;let d=`copilot:${o}:${u}`;if(e.has(d))continue;e.add(d);let y=f.map(c=>c.name??"").filter(Boolean).map(c=>re[c]??c);yield{provider:"copilot",model:a,inputTokens:0,outputTokens:m,cacheCreationInputTokens:0,cacheReadInputTokens:0,cachedInputTokens:0,reasoningTokens:0,costUSD:0,tools:y,bashCommands:[],timestamp:r.timestamp??"",speed:"standard",deduplicationKey:d,userMessage:l,sessionId:o},l=""}}}}}i(ut,"createParser");async function pt(n){let e=[],t;try{t=await nt(n)}catch{return e}for(let o of t){let s=F(n,o,"events.jsonl");if(!(await ot(s).catch(()=>null))?.isFile())continue;let l=o;try{let p=await oe(F(n,o,"workspace.yaml"),"utf-8"),r=ct(p);r&&(l=se(r))}catch{}e.push({path:s,project:l,provider:"copilot"})}return e}i(pt,"discoverSessionsInDir");var ae={name:"copilot",displayName:"GitHub Copilot",modelDisplayName(n){for(let[e,t]of it)if(n===e||n.startsWith(e+"-"))return t;return n},toolDisplayName(n){return re[n]??n},async discoverSessions(){return pt(lt())},createSessionParser(n,e){return ut(n,e)}};import{readdir as ie,readFile as ce,stat as le}from"fs/promises";import{basename as ue,join as W}from"path";import{homedir as dt}from"os";var mt={"gpt-5.4":"GPT-5.4","gpt-5.4-mini":"GPT-5.4 Mini","gpt-5":"GPT-5","gpt-4o":"GPT-4o","gpt-4o-mini":"GPT-4o Mini"},pe={bash:"Bash",read:"Read",edit:"Edit",write:"Write",glob:"Glob",grep:"Grep",task:"Agent",dispatch_agent:"Agent",fetch:"WebFetch",search:"WebSearch",todo:"TodoWrite",patch:"Patch"},ft=Object.entries(mt).sort((n,e)=>e[0].length-n[0].length);function ht(){return W(dt(),".pi","agent","sessions")}i(ht,"getPiSessionsDir");async function gt(n){try{let t=(await ce(n,"utf-8")).split(`
|
|
11
|
+
`)[0];return t?.trim()?JSON.parse(t):null}catch{return null}}i(gt,"readFirstEntry");function yt(n){return n.split(/[;&|]+/).map(e=>e.trim().split(/\s+/)[0]).filter(Boolean)}i(yt,"extractBashCommands");async function _t(n){let e=[],t;try{t=await ie(n)}catch{return e}for(let o of t){let s=W(n,o);if(!(await le(s).catch(()=>null))?.isDirectory())continue;let l;try{l=await ie(s)}catch{continue}for(let p of l){if(!p.endsWith(".jsonl"))continue;let r=W(s,p);if(!(await le(r).catch(()=>null))?.isFile())continue;let m=await gt(r);if(!m||m.type!=="session")continue;let f=m.cwd??o;e.push({path:r,project:ue(f),provider:"pi"})}}return e}i(_t,"discoverSessionsInDir");function St(n,e){return{async*parse(){let t;try{t=await ce(n.path,"utf-8")}catch{return}let o=t.split(`
|
|
12
|
+
`).filter(l=>l.trim()),s=ue(n.path,".jsonl"),a="";for(let[l,p]of o.entries()){let r;try{r=JSON.parse(p)}catch{continue}if(r.type==="session"){s=r.id??s;continue}if(r.type!=="message")continue;let u=r.message;if(!u)continue;if(u.role==="user"){let v=(u.content??[]).filter(k=>k.type==="text").map(k=>k.text??"").filter(Boolean);v.length>0&&(a=v.join(" "));continue}if(u.role!=="assistant"||!u.usage)continue;let{input:m,output:f,cacheRead:d,cacheWrite:y}=u.usage;if(m===0&&f===0)continue;let c=u.model??"gpt-5",g=u.responseId??"",_=`pi:${n.path}:${g||r.id||r.timestamp||String(l)}`;if(e.has(_))continue;e.add(_);let h=(u.content??[]).filter(v=>v.type==="toolCall"&&v.name),T=h.map(v=>pe[v.name]??v.name),S=h.filter(v=>v.name==="bash").flatMap(v=>{let k=v.arguments?.command;return typeof k=="string"?yt(k):[]}),w=r.timestamp??"";yield{provider:"pi",model:c,inputTokens:m,outputTokens:f,cacheCreationInputTokens:y,cacheReadInputTokens:d,cachedInputTokens:d,reasoningTokens:0,costUSD:0,tools:T,bashCommands:S,timestamp:w,speed:"standard",deduplicationKey:_,userMessage:a,sessionId:s},a=""}}}}i(St,"createParser");var de={name:"pi",displayName:"Pi",modelDisplayName(n){for(let[e,t]of ft)if(n.startsWith(e))return t;return n},toolDisplayName(n){return pe[n]??n},async discoverSessions(){return _t(ht())},createSessionParser(n,e){return St(n,e)}};var ye=[Q,ne,ae,de],me=null,fe=!1;async function _e(){if(fe)return me;fe=!0;try{let{cursor:n}=await import("./cursor-T7AMCMKS.js");return me=n,n}catch{return null}}i(_e,"loadCursor");var he=null,ge=!1;async function Se(){if(ge)return he;ge=!0;try{let{opencode:n}=await import("./opencode-QRJ3BH23.js");return he=n,n}catch{return null}}i(Se,"loadOpenCode");async function ve(){let[n,e]=await Promise.all([_e(),Se()]),t=[...ye];return n&&t.push(n),e&&t.push(e),t}i(ve,"getAllProviders");async function vt(n){let e=await ve(),t=n&&n!=="all"?e.filter(s=>s.name===n):e,o=[];for(let s of t){let a=await s.discoverSessions();o.push(...a)}return o}i(vt,"discoverAllSessions");async function wt(n){return n==="cursor"?await _e()??void 0:n==="opencode"?await Se()??void 0:ye.find(e=>e.name===n)}i(wt,"getProvider");import{spawn as V}from"node:child_process";import{randomUUID as kt}from"node:crypto";import{writeFile as Te}from"node:fs/promises";import{tmpdir as xe}from"node:os";import{join as Ie}from"node:path";import{spawn as Tt}from"node:child_process";function H(n){return`rm-${n.trim().replace(/[^A-Za-z0-9_.-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"session"}`}i(H,"sanitizeTmuxName");function z(n){let e=n.runId?["env",`RULEMETRIC_RUN_ID=${n.runId}`,"claude"]:["claude"];return n.resumeSessionId&&e.push("--resume",n.resumeSessionId),n.model&&e.push("--model",n.model),["new-session","-d","-s",n.sessionName,"-c",n.projectPath,"--",...e]}i(z,"buildTmuxLaunchArgs");function U(n,e,t={}){return t.literal===!1?["send-keys","-t",n,e]:["send-keys","-t",n,"-l","--",e]}i(U,"buildTmuxSendKeysArgs");function xt(n){return["has-session","-t",n]}i(xt,"buildTmuxHasSessionArgs");function q(n){return`tmux attach -t ${n}`}i(q,"buildTmuxAttachCommand");function It(){let n=["/opt/homebrew/bin","/usr/local/bin"],e=(process.env.PATH??"").split(":").filter(Boolean),t=n.filter(o=>!e.includes(o));return t.length===0?process.env:{...process.env,PATH:[...e,...t].join(":")}}i(It,"tmuxSpawnEnv");function K(n){return new Promise(e=>{let t=Tt("tmux",n,{stdio:["ignore","ignore","pipe"],env:It()}),o="";t.stderr.on("data",s=>{o+=s.toString()}),t.on("close",s=>e({code:s,stderr:o})),t.on("error",s=>e({code:null,stderr:s.message}))})}i(K,"runTmux");async function we(){return(await K(["-V"])).code===0}i(we,"isTmuxAvailable");var At=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ot(n){if(n!==void 0){if(At.test(n))return n;console.warn(`[claude-code-launcher] dropping non-uuid runId (RULEMETRIC_RUN_ID not injected): ${JSON.stringify(n)}`)}}i(Ot,"validateRunId");function Pt(n){return`'${n.replace(/'/g,"'\\''")}'`}i(Pt,"shellSingleQuote");var E=class{static{i(this,"ClaudeCodeLauncher")}options;tool="claude_code";constructor(e={}){this.options=e}capabilities={headless:!0,interactive:!0,remoteSpawn:!0};async launch(e){let t=kt(),o={...e,runId:Ot(e.runId)};return o.mode==="headless"?this.launchHeadless(o,t):this.launchInteractive(o,t)}async launchHeadless(e,t){let o=["-p",e.prompt??"","--output-format","json"];e.systemPrompt&&o.push("--system-prompt",e.systemPrompt),e.model&&o.push("--model",e.model);let s={...process.env};return delete s.CLAUDECODE,delete s.HTTPS_PROXY,e.runId&&(s.RULEMETRIC_RUN_ID=e.runId),new Promise(a=>{let l=V("claude",o,{cwd:e.projectPath,env:s,stdio:["ignore","pipe","pipe"]}),p="",r="";l.stdout.on("data",m=>{p+=m.toString()}),l.stderr.on("data",m=>{r+=m.toString()});let u=e.timeout?setTimeout(()=>{l.kill("SIGTERM")},e.timeout):null;l.on("close",m=>{u&&clearTimeout(u);let f=p;try{let d=JSON.parse(p);f=d.result??d.content??p}catch{}a({sessionId:t,pid:l.pid,exitCode:m,output:f,error:m!==0?r:void 0})}),l.on("error",m=>{u&&clearTimeout(u),a({sessionId:t,error:`Failed to spawn claude: ${m.message}`})})})}async launchInteractive(e,t){return await(this.options.tmuxAvailable??we)().catch(()=>!1)?this.launchInteractiveTmux(e,t):this.launchInteractiveTerminal(e,t,"tmux_not_found")}async launchInteractiveTmux(e,t){let o=this.options.runTmux??K,s=H(`claude-${e.resumeSessionId??t}`),a=await o(z({sessionName:s,projectPath:e.projectPath,resumeSessionId:e.resumeSessionId,model:e.model,runId:e.runId}));if(a.code!==0)return this.launchInteractiveTerminal(e,t,"tmux_launch_failed",`tmux new-session exited ${a.code}: ${a.stderr.trim()||"no stderr"}`);let l=await this.openTerminalAttach(s,t);if(e.prompt){let p=await o(U(s,e.prompt));if(p.code!==0)return{sessionId:t,liveSendAvailable:!1,fallbackReason:"tmux_launch_failed",error:`tmux send-keys exited ${p.code}: ${p.stderr.trim()||"no stderr"}`};let r=await o(U(s,"Enter",{literal:!1}));if(r.code!==0)return{sessionId:t,liveSendAvailable:!1,fallbackReason:"tmux_launch_failed",error:`tmux send Enter exited ${r.code}: ${r.stderr.trim()||"no stderr"}`}}return{sessionId:t,pid:l.pid,liveSendAvailable:!0,...l.error?{error:l.error}:{},terminalTarget:{kind:"tmux",target:s,attachCommand:q(s),live:!0}}}async openTerminalAttach(e,t){let o=Ie(xe(),`rulemetric-attach-${t}.command`),s=`#!/bin/zsh
|
|
13
|
+
rm -- "$0"
|
|
14
|
+
${q(e)}
|
|
15
|
+
`;return await Te(o,s,{mode:493}),new Promise(a=>{let l=V("open",["-a","Terminal",o],{stdio:["ignore","pipe","pipe"]}),p="";l.stderr.on("data",r=>{p+=r.toString()}),l.on("close",r=>{a(r===0?{pid:l.pid}:{pid:l.pid,error:`open attach exited ${r}: ${p.trim()||"no stderr"}`})}),l.on("error",r=>{a({error:`Failed to spawn open attach: ${r.message}`})})})}async launchInteractiveTerminal(e,t,o,s){let a=["claude"];e.resumeSessionId?a.push("--resume",e.resumeSessionId):e.prompt&&a.push("-p",JSON.stringify(e.prompt)),e.model&&a.push("--model",e.model);let l=a.join(" "),p=Ie(xe(),`rulemetric-launch-${t}.command`),r=e.runId?`export RULEMETRIC_RUN_ID=${Pt(e.runId)}
|
|
16
|
+
`:"",u=`#!/bin/zsh
|
|
17
|
+
rm -- "$0"
|
|
18
|
+
cd ${JSON.stringify(e.projectPath)} || exit
|
|
19
|
+
`+r+`${l}
|
|
20
|
+
`;return await Te(p,u,{mode:493}),new Promise(m=>{let f=V("open",["-a","Terminal",p],{stdio:["ignore","pipe","pipe"]}),d="";f.stderr.on("data",y=>{d+=y.toString()}),f.on("close",y=>{if(y===0)m({sessionId:t,pid:f.pid,liveSendAvailable:!1,fallbackReason:o,...s?{error:s}:{}});else{let c=d.trim()||"no stderr";m({sessionId:t,pid:f.pid,liveSendAvailable:!1,fallbackReason:o,error:s?`${s}; open exited ${y}: ${c}`:`open exited ${y}: ${c}`})}}),f.on("error",y=>{m({sessionId:t,liveSendAvailable:!1,fallbackReason:o,error:`Failed to spawn open: ${y.message}`})})})}};import{spawn as ke}from"node:child_process";import{randomUUID as Nt}from"node:crypto";var R=class{static{i(this,"CodexLauncher")}tool="codex";capabilities={headless:!0,interactive:!0,remoteSpawn:!0};async launch(e){let t=Nt();return e.mode==="headless"?this.launchHeadless(e,t):this.launchInteractive(e,t)}launchHeadless(e,t){let o=["-q",e.prompt??""];return e.model&&o.push("--model",e.model),new Promise(s=>{let a=ke("codex",o,{cwd:e.projectPath,stdio:["ignore","pipe","pipe"]}),l="",p="";a.stdout.on("data",u=>{l+=u.toString()}),a.stderr.on("data",u=>{p+=u.toString()});let r=e.timeout?setTimeout(()=>{a.kill("SIGTERM")},e.timeout):null;a.on("close",u=>{r&&clearTimeout(r),s({sessionId:t,pid:a.pid,exitCode:u,output:l,error:u!==0?p:void 0})}),a.on("error",u=>{r&&clearTimeout(r),s({sessionId:t,error:`Failed to spawn codex: ${u.message}`})})})}launchInteractive(e,t){let o=["codex"];e.prompt&&o.push(JSON.stringify(e.prompt));let s=`cd ${JSON.stringify(e.projectPath)} && ${o.join(" ")}`,a=ke("osascript",["-e",`tell application "Terminal" to do script ${JSON.stringify(s)}`],{stdio:"ignore",detached:!0});return a.unref(),Promise.resolve({sessionId:t,pid:a.pid})}};import{spawn as Ae}from"node:child_process";import{randomUUID as Dt}from"node:crypto";var M=class{static{i(this,"AiderLauncher")}tool="aider";capabilities={headless:!0,interactive:!0,remoteSpawn:!0};async launch(e){let t=Dt();return e.mode==="headless"?this.launchHeadless(e,t):this.launchInteractive(e,t)}launchHeadless(e,t){let o=["--message",e.prompt??"","--yes"];return e.model&&o.push("--model",e.model),new Promise(s=>{let a=Ae("aider",o,{cwd:e.projectPath,stdio:["ignore","pipe","pipe"]}),l="",p="";a.stdout.on("data",u=>{l+=u.toString()}),a.stderr.on("data",u=>{p+=u.toString()});let r=e.timeout?setTimeout(()=>{a.kill("SIGTERM")},e.timeout):null;a.on("close",u=>{r&&clearTimeout(r),s({sessionId:t,pid:a.pid,exitCode:u,output:l,error:u!==0?p:void 0})}),a.on("error",u=>{r&&clearTimeout(r),s({sessionId:t,error:`Failed to spawn aider: ${u.message}`})})})}launchInteractive(e,t){let o=["aider"];e.model&&o.push("--model",e.model);let s=`cd ${JSON.stringify(e.projectPath)} && ${o.join(" ")}`,a=Ae("osascript",["-e",`tell application "Terminal" to do script ${JSON.stringify(s)}`],{stdio:"ignore",detached:!0});return a.unref(),Promise.resolve({sessionId:t,pid:a.pid})}};import{spawn as bt}from"node:child_process";import{randomUUID as Ct}from"node:crypto";var J=class{static{i(this,"GenericLauncher")}tool;constructor(e){this.tool=e}capabilities={headless:!1,interactive:!0,remoteSpawn:!1};async launch(e){let t=Ct();if(e.mode==="headless")return{sessionId:t,error:`${this.tool} does not support headless mode`};let o=`cd ${JSON.stringify(e.projectPath)} && echo "Session ${t} \u2014 tool: ${this.tool}" && exec $SHELL`,s=bt("osascript",["-e",`tell application "Terminal" to do script ${JSON.stringify(o)}`],{stdio:"ignore",detached:!0});return s.unref(),{sessionId:t,pid:s.pid}}};var Oe={claude_code:i(()=>new E,"claude_code"),codex:i(()=>new R,"codex"),aider:i(()=>new M,"aider")};function $t(n){let e=Oe[n];return e?e():new J(n)}i($t,"getLauncher");function jt(){return Object.entries(Oe).map(([n,e])=>({tool:n,capabilities:e().capabilities}))}i(jt,"getAvailableLaunchers");import Pe from"node:path";function Ne(n){return n.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"")||"worktree"}i(Ne,"sanitizeBranch");function Ut(n){return Pe.resolve(n.basePath??Pe.join(n.repoRoot,"..",".rulemetric-worktrees",Ne(n.branch)))}i(Ut,"worktreePathFor");export{qt as a,Et as b,O as c,P as d,N as e,D as f,b as g,Z as h,C as i,Ee as j,Re as k,ve as l,vt as m,wt as n,H as o,z as p,U as q,xt as r,q as s,$t as t,jt as u,Ne as v,Ut as w};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as c,f as d}from"./chunk-
|
|
1
|
+
import{e as c,f as d}from"./chunk-GP46IPK2.js";import{a as m}from"./chunk-ZLLER3HP.js";async function f(g,p){let r=m(e=>p?.logger?.info?.(e)??console.log(e),"log"),{projectPath:s}=g,i=`[cron_instruction_training] ${s}`;if(!s)return{skipped:"no-project-path"};let n=await d("/api/instruction-experiments/settle",{projectPath:s}),o=n.settled.map(e=>e.outcome),a=o.filter(e=>e==="graduated").length;for(let e of n.settled)r(`${i}: experiment ${e.experimentId} \u2192 ${e.outcome}`);n.examined>0&&r(`${i}: examined ${n.examined} running experiment(s) \u2014 ${n.settled.length} settled (${a} graduated), ${n.stillRunning} still gathering`);let t=await c(`/api/instruction-suggestions/trialable?projectPath=${encodeURIComponent(s)}`);for(let e of t.refused)r(`${i}: not trialling "${e.name}" \u2014 ${e.reason}`);if(t.candidates.length===0)return r(`${i}: no new trial started (${t.running}/${t.limits.maxConcurrent} running, ${t.slots} slot(s) free)`),{examined:n.examined,settled:n.settled.length,graduated:a,nominated:0,running:t.running,outcomes:o};let u=0;for(let e of t.candidates)try{await d("/api/instruction-experiments",{instructionId:e.instructionId,projectPath:s,source:"trial"}),u+=1,r(`${i}: now measuring "${e.name}" (score ${e.score.toFixed(2)})`)}catch(l){r(`${i}: could not measure "${e.name}" \u2014 ${l instanceof Error?l.message:String(l)}`)}return{examined:n.examined,settled:n.settled.length,graduated:a,nominated:u,running:t.running+u,outcomes:o}}m(f,"cronInstructionTraining");export{f as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as $}from"./chunk-IS4JRZK2.js";import{e as b}from"./chunk-GP46IPK2.js";import{a as g}from"./chunk-ZLLER3HP.js";import{existsSync as k,statSync as A}from"node:fs";async function v(y,h){let s=g(n=>h?.logger?.info?.(n)??console.log(n),"log"),{projectPath:o}=y,r=`[cron_auto_accept_suggestions] ${o}`;if(!o)return{skipped:"no-project-path"};if(!k(o)||!A(o).isDirectory())return s(`${r}: project directory no longer exists on this machine \u2014 skipping`),{skipped:"project-path-missing"};let e=await b(`/api/instruction-suggestions/auto-acceptable?projectPath=${encodeURIComponent(o)}`);if(!e.consent.allowed)return s(`${r}: ${e.consent.reason??"no consent"} (${e.consent.source})`),{skipped:"no-consent",reason:e.consent.reason};for(let n of e.refused)s(`${r}: refused "${n.name}" \u2014 ${n.reason}`);if(e.eligible.length===0)return s(`${r}: nothing to adopt`+(e.budget?` (rules ${e.budget.used}/${e.budget.max}`+(e.budget.skillsUsed!==void 0?`, skills ${e.budget.skillsUsed}`+(e.budget.skillsMax==null?" (uncapped)":`/${e.budget.skillsMax}`):"")+` used in ${e.budget.windowDays}d)`:"")),{skipped:"nothing-eligible",refused:e.refused.length,adopted:0};let i=0,f=0,a=0,l=0,d=0,u=0,c=0,m=[];for(let n of e.eligible)try{let t=await $({suggestionId:n.id,dir:o,projectPath:o,actor:"auto"});if(t.action==="added")i+=1,m.push(t.name),n.type==="skill"&&(f+=1),s(`${r}: adopted ${n.type==="skill"?"skill":"rule"} "${t.name}" (score ${n.score.toFixed(2)})`);else if(t.action==="redundant"){t.partialOverlap?d+=1:l+=1;for(let p of t.messages)s(`${r}: ${p}`)}else if(t.action==="unresolvable-reference"){u+=1;for(let p of t.messages)s(`${r}: ${p}`)}else a+=1,s(`${r}: "${t.name}" was already in CLAUDE.md`)}catch(t){c+=1,s(`${r}: failed to adopt "${n.name}" \u2014 ${t instanceof Error?t.message:String(t)}`)}return s(`${r}: ${i} adopted, ${a} already present, ${l} already covered in other words, ${d} refused for partial overlap, ${u} refused for naming files this project does not have, ${c} failed, ${e.refused.length} refused upstream. Undo any of them with \`rulemetric suggestions undo <instruction-id>\`.`),{adopted:i,skills:f,alreadyPresent:a,redundant:l,partialOverlaps:d,unresolvableReferences:u,failed:c,refused:e.refused.length,names:m}}g(v,"cronAutoAcceptSuggestions");export{v as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as E}from"./chunk-
|
|
1
|
+
import{f as E}from"./chunk-B3BHB26P.js";import{b,e as y,f as k,h as M}from"./chunk-GP46IPK2.js";import{a as u}from"./chunk-ZLLER3HP.js";var v=50,I=24e3,P=3,R=3,C=40,N=4e3,x=new Set(["fact","decision","correction","convention"]),L=`You are distilling DURABLE, PROJECT-SPECIFIC knowledge from an AI coding session so a future agent working on the SAME project starts smarter.
|
|
2
2
|
|
|
3
3
|
Extract ONLY facts / decisions / corrections / conventions that will STILL be true and useful in FUTURE sessions \u2014 architecture facts, deliberate design decisions, corrections of a wrong approach, or project conventions.
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as m}from"./chunk-U2NT5OSQ.js";import{c as g,e as k}from"./chunk-UPFH72PF.js";import{a as l}from"./chunk-ZLLER3HP.js";import{mkdirSync as E,readdirSync as w,rmSync as S,writeFileSync as h}from"node:fs";import{join as p,relative as b,sep as x}from"node:path";var A="v2-neutral-workspace",I=["CLAUDE.md","CLAUDE.local.md","AGENTS.md"],W=new Set(["node_modules",".git","dist","build",".next","coverage"]);function y(e){let i=[],n=new Set(I),t=l(a=>{let r;try{r=w(a,{withFileTypes:!0})}catch{return}for(let s of r){let o=p(a,s.name);if(s.isDirectory()){if(W.has(s.name)||s.name.startsWith(".")&&s.name!==".claude")continue;t(o)}else n.has(s.name)&&i.push(b(e,o))}},"walk");return t(e),i}l(y,"findAmbientInstructionFiles");function C(e){let i=[];for(let n of y(e))try{S(p(e,n),{force:!0}),i.push(n)}catch{}return i}l(C,"stripAmbientInstructions");function F(e){return/[a-z0-9]/i.test(e??"")?g(e??""):"eval-target-skill"}l(F,"skillSlug");function O(e={}){let{baseDir:i,targetType:n,targetContent:t,targetName:a}=e,r=m(i),s=C(r.workDir),o="none",d,u=[];if(t)switch(n){case"prompt":d=t,o="system_prompt";break;case"skill":{let c=F(a),v=k({dirName:c,content:t});f(r.workDir,p(".claude","skills",c,"SKILL.md"),v.text),o="skill";break}default:f(r.workDir,"CLAUDE.md",t),u.push("CLAUDE.md"),o="claude_md";break}let D=y(r.workDir).filter(c=>!u.includes(c));return{workDir:r.workDir,systemPrompt:d,delivery:o,methodology:A,isWorktree:r.isWorktree,strippedFiles:s,leakedFiles:D,cleanup:r.cleanup}}l(O,"createEvalWorkspace");function f(e,i,n){let t=p(e,i),a=t.slice(0,t.lastIndexOf(x));E(a,{recursive:!0}),h(t,n,"utf8")}l(f,"writeFileInWorkspace");export{A as a,I as b,y as c,F as d,O as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as E}from"./chunk-
|
|
1
|
+
import{k as E}from"./chunk-DS4P5C4F.js";import{a as p,e as w}from"./chunk-PZNWH4VQ.js";import{a as o}from"./chunk-ZLLER3HP.js";import{fileURLToPath as v}from"node:url";import{existsSync as A,readFileSync as b}from"node:fs";import{dirname as L,join as x}from"node:path";function C(){let t=L(v(import.meta.url));for(let e=0;e<8;e++){let s=x(t,"package.json");if(A(s))try{let i=JSON.parse(b(s,"utf8"));if(i.name==="@rulemetric/cli"&&i.version)return i.version}catch{}let n=L(t);if(n===t)break;t=n}return"0.0.0"}o(C,"readCliVersion");var O=C(),I="https://rulemetric.com",l=class extends Error{constructor(s,n){super(n);this.statusCode=s;this.name="ApiError"}static{o(this,"ApiError")}};function S(){let t=p(),e=process.env.RULEMETRIC_API_URL??t.apiUrl;if(!e){if(process.env.RULEMETRIC_STRICT_LOCAL==="1"||t.strictLocal==="1")throw new Error("RULEMETRIC_STRICT_LOCAL is set but no RULEMETRIC_API_URL is configured \u2014 refusing the cloud default. Set RULEMETRIC_API_URL in the environment or ~/.config/rulemetric/env.");e=I}let s=new URL(e);if(s.protocol==="http:"&&s.hostname!=="localhost"&&s.hostname!=="127.0.0.1")throw new Error(`API URL must use HTTPS for non-localhost hosts: ${e}`);return e}o(S,"getBaseUrl");async function a(t,e={}){let n=`${S()}${t}`,i={"Content-Type":"application/json","User-Agent":`rulemetric-cli/${O}`,...e.headers},m=p(),d=process.env.RULEMETRIC_API_KEY||m.apiKey||w()?.accessToken||m.accessToken;d&&(i.Authorization=`Bearer ${d}`);let h=new URL(n),f=h.hostname==="localhost"||h.hostname==="127.0.0.1",P=process.env.HTTPS_PROXY,R=process.env.HTTP_PROXY;f&&(delete process.env.HTTPS_PROXY,delete process.env.HTTP_PROXY);let u=e.timeoutMs?new AbortController:void 0,g=!1,y=u?setTimeout(()=>{g=!0,u.abort()},e.timeoutMs):void 0,r;try{r=await fetch(n,{method:e.method??"GET",headers:i,body:e.body?JSON.stringify(e.body):void 0,signal:u?.signal})}catch(T){if(g){let U=new URL(n).host,_=Math.round(e.timeoutMs/1e3);throw new l(408,`Request to ${U} timed out after ${_}s. This is usually transient or a local proxy/gateway issue \u2014 retry, and if it persists check HTTPS_PROXY / the RuleMetric gateway (:8787).`)}throw T}finally{y&&clearTimeout(y),f&&(P!==void 0&&(process.env.HTTPS_PROXY=P),R!==void 0&&(process.env.HTTP_PROXY=R))}let c;if(r.headers.get("content-type")?.includes("application/json")?c=await r.json():c=await r.text(),!r.ok){let{message:T}=E(r.status,c);throw new l(r.status,T)}return c}o(a,"api");var j=o(t=>a(t),"apiGet"),F=o((t,e)=>a(t,{method:"POST",body:e}),"apiPost"),B=o((t,e)=>a(t,{method:"PUT",body:e}),"apiPut"),D=o((t,e)=>a(t,{method:"PATCH",body:e}),"apiPatch"),G=o(t=>a(t,{method:"DELETE"}),"apiDelete");export{I as a,l as b,S as c,a as d,j as e,F as f,B as g,D as h,G as i};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as E,d as R}from"./chunk-
|
|
1
|
+
import{b as E,d as R}from"./chunk-GP46IPK2.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as C}from"node:crypto";import{existsSync as A,mkdirSync as I,readFileSync as p,renameSync as L,rmdirSync as M,writeFileSync as m}from"node:fs";import{homedir as U,tmpdir as x}from"node:os";import{join as c}from"node:path";var $=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function v(t){return $.test(t)?t:`antigravity-${C("sha256").update(t).digest("hex").slice(0,16)}`}o(v,"hookSessionKey");var _=100,F=new Set(["RUN_COMMAND","VIEW_FILE","LIST_DIRECTORY","CODE_ACTION","GREP_SEARCH","SEARCH_WEB"]),H=new Set(["CONVERSATION_HISTORY","KNOWLEDGE_ARTIFACTS","CHECKPOINT"]);function T(){return process.env.RULEMETRIC_CONFIG_DIR??c(U(),".config","rulemetric")}o(T,"configDir");function O(){return c(T(),"antigravity-state")}o(O,"stateDir");function P(t){return c(O(),`${t}.json`)}o(P,"stateFile");function k(){let t=c(T(),"env");if(A(t))try{let n=p(t,"utf-8");for(let r of n.split(/\r?\n/)){let e=r.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);if(!e)continue;let i=e[1];if(process.env[i]!==void 0)continue;let s=e[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),process.env[i]=s}}catch{}}o(k,"loadEnvFile");function b(t){try{let n=p(P(t),"utf-8"),r=JSON.parse(n);if(r&&typeof r=="object"&&"lastStepIdx"in r){let e=r.lastStepIdx;if(typeof e=="number"&&Number.isFinite(e))return{lastStepIdx:e}}}catch{}return null}o(b,"loadState");function g(t,n){I(O(),{recursive:!0});let r=P(t),e=`${r}.tmp`;m(e,JSON.stringify(n),{mode:384});try{L(e,r)}catch{m(r,JSON.stringify(n),{mode:384})}}o(g,"saveState");function N(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=c(r,v(t));try{return p(e,"utf-8").trim()||null}catch{return null}}o(N,"resolveRwSessionId");function W(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=v(t),i=c(r,`${e}.seq`),s=c(r,`${e}.seqlock`),l=Date.now()+5e3;for(;Date.now()<l;)try{I(s);break}catch{}let a=1;try{a=parseInt(p(i,"utf-8").trim(),10)+1,(!Number.isFinite(a)||a<1)&&(a=1)}catch{a=1}try{m(i,String(a))}catch{}try{M(s)}catch{}return a}o(W,"nextSequence");function Y(t,n){let r;try{r=p(t,"utf-8")}catch{return[]}let e=[];for(let i of r.split(/\r?\n/))if(i.trim())try{let s=JSON.parse(i);typeof s.step_index=="number"&&s.step_index>n&&e.push(s)}catch{}return e.sort((i,s)=>i.step_index-s.step_index),e}o(Y,"readNewRecords");function G(t){let n;try{n=p(t,"utf-8")}catch{return-1}let r=-1;for(let e of n.split(/\r?\n/))if(e.trim())try{let i=JSON.parse(e);typeof i.step_index=="number"&&i.step_index>r&&(r=i.step_index)}catch{}return r}o(G,"findMaxStepIndex");function J(t){let n=t.match(/<USER_REQUEST>\s*([\s\S]*?)\s*<\/USER_REQUEST>/);return n?n[1].trim():t.trim()}o(J,"extractUserPrompt");function j(t,n){let r=t.created_at??new Date().toISOString(),e={antigravityStepIndex:t.step_index,antigravitySource:t.source,antigravityType:t.type};if(H.has(t.type)||F.has(t.type))return null;if(t.source==="USER_EXPLICIT"&&t.type==="USER_INPUT")return{sequence:n,eventType:"user_message",content:J(t.content??""),timestamp:r,metadata:e};if(t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"){let i=[];return t.thinking&&t.thinking.trim()&&i.push(`[thinking]
|
|
2
2
|
${t.thinking.trim()}`),t.content&&t.content.trim()&&i.push(t.content.trim()),t.tool_calls&&t.tool_calls.length>0&&(e.antigravityToolCalls=t.tool_calls.map(s=>s.name).filter(Boolean)),{sequence:n,eventType:"assistant_response",content:i.join(`
|
|
3
3
|
|
|
4
4
|
`)||null,timestamp:r,metadata:e}}return t.source==="MODEL"&&t.type==="GENERIC"?{sequence:n,eventType:"tool_result",content:t.content??null,timestamp:r,metadata:e}:t.source==="SYSTEM"&&(t.type==="SYSTEM_MESSAGE"||t.type==="ERROR_MESSAGE")?null:{sequence:n,eventType:`antigravity_${t.type.toLowerCase()}`,content:t.content??null,timestamp:r,metadata:e}}o(j,"classifyRecord");function q(t){try{let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}o(q,"parseHookPayload");async function K(t,n,r,e,i={}){let s=i.errorSink??(u=>process.stderr.write(u)),l=0,a=0,d=0,S=0,f=e;for(let u of t){l++,i.onProgress?.({attempted:l,total:t.length,record:u});let w=W(r),y=j(u,w);if(!y)S++;else try{await R(`/api/sessions/${n}/events`,{method:"POST",body:y}),a++}catch(h){d++;let D=h instanceof E?h.statusCode:"unknown";s(`[antigravity-tailer] failed step=${u.step_index} type=${u.type} status=${D}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as u,c as d}from"./chunk-NQSB4YVT.js";import{b as g}from"./chunk-CNOD6HWU.js";import{e as m,f as p,h as l}from"./chunk-GP46IPK2.js";import{a as s}from"./chunk-ZLLER3HP.js";async function x(f,R){let r=s(e=>R?.logger?.info?.(e)??console.log(e),"log"),{evalTargetId:n}=f,i=`[cron_refine_cases] ${n}`,t=await m(`/api/eval-targets/${n}`);if(!(t.metadata?.autoRefineCases===!0))return r(`${i} not opted in (metadata.autoRefineCases)`),{skipped:"not-opted-in",reason:`"${t.name}" has not opted into automatic case refinement. Set metadata.autoRefineCases=true to let the loop cull cases that carry no treatment signal, or run \`rulemetric evals refine-cases ${n}\` by hand.`,targetName:t.name};let C=await m(`/api/eval-targets/${n}/judge-calibration`),a=u(C.caseDiscrimination);if(a.refused)return r(`${i} ${a.refused}: ${a.summary}`),{skipped:a.refused,reason:a.summary,targetName:t.name};r(`${i} ${a.summary}`);let o=await d(a,{generate:s(e=>g({content:t.content,name:t.name,feedback:e}),"generate"),createCase:s(e=>p(`/api/eval-targets/${n}/evals`,{name:e.name,prompt:e.prompt,expectations:e.expectations}),"createCase"),retireCase:s(async(e,y)=>{await l(`/api/eval-targets/${n}/evals/${e}`,{retire:!0,retiredReason:y})},"retireCase"),log:r});r(`${i} ${o.summary}`);let{skipped:c,...$}=o;return{...$,targetName:t.name,...c?{skipped:c,reason:o.summary}:{}}}s(x,"cronRefineCases");export{x as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as f}from"./chunk-
|
|
1
|
+
import{c as f}from"./chunk-RFISMWRW.js";import{a as l}from"./chunk-5RBLIVBF.js";import{b as g,e as k}from"./chunk-GP46IPK2.js";import{a as m}from"./chunk-ZLLER3HP.js";async function C(w,i={}){let R=i.removeWorktreeFn??f,t=i.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
|
|
2
2
|
`)),j=i.getRunDetail??(async e=>{try{return await k(`/api/runs/${e}`)}catch(r){if(r instanceof g&&r.statusCode===404)return null;throw r}}),{runId:o}=w,n=await j(o);if(!n)throw new l(`Run ${o} not found`);if(!n.run.projectPath)throw new l(`Run ${o} has no projectPath; cannot resolve a repo root for worktree cleanup`);let a=n.run.projectPath,$=n.sessions.filter(e=>e.endedAt!=null),s=[],u=0,c=0,p=0,d=0,h=new Set;for(let e of $)if(!(!e.projectPath||e.projectPath===a)&&!h.has(e.projectPath)){h.add(e.projectPath);try{let r=await R({repoRoot:a,worktreePath:e.projectPath});r.removed?(u++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"removed"}),t(`removed worktree ${e.projectPath} (session ${e.id})`)):r.reason==="dirty"?(c++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"skipped-dirty"}),t(`skipped dirty worktree ${e.projectPath} (session ${e.id}) \u2014 uncommitted changes`)):(p++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"absent"}),t(`worktree absent ${e.projectPath} (session ${e.id})`))}catch(r){let P=r instanceof Error?r.message:String(r);d++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"error",error:P.slice(0,1e3)}),t(`error removing worktree ${e.projectPath} (session ${e.id}): ${P}`)}}return t(`run ${o} cleanup: removed=${u} skippedDirty=${c} absent=${p} errored=${d}`),{runId:o,repoRoot:a,removed:u,skippedDirty:c,absent:p,errored:d,worktrees:s}}m(C,"processRunCleanup");export{C as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as p}from"./chunk-ZLLER3HP.js";import{execSync as u}from"node:child_process";import{rmSync as d,existsSync as w,statSync as g,readdirSync as l}from"node:fs";import{join as y}from"node:path";import{tmpdir as h}from"node:os";var S=3600*1e3;function A(t={}){let i=t.cwd??process.cwd(),o=t.tmp??h(),a=t.minAgeMs??S,f=t.now??Date.now(),r=[],n=0,s;try{s=l(o).filter(c=>c.startsWith("rulemetric-eval-"))}catch{return{removed:r,skipped:n}}for(let c of s){let e=y(o,c),m;try{m=f-g(e).mtimeMs}catch{continue}if(m<a){n+=1;continue}try{u(`git worktree remove --force "${e}"`,{cwd:i,stdio:"pipe"})}catch{try{w(e)&&d(e,{recursive:!0,force:!0})}catch{continue}}r.push(e)}if(r.length>0)try{u("git worktree prune",{cwd:i,stdio:"pipe"})}catch{}return{removed:r,skipped:n}}p(A,"sweepEvalWorktrees");export{S as a,A as b};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{a as R,b as T}from"./chunk-7HJJCRYK.js";import{a as p,b as y}from"./chunk-355GZ7LR.js";import{a as $,b as w,e as U}from"./chunk-LJRE3LZ2.js";import{g as j,i as D,j as x}from"./chunk-UPFH72PF.js";import{e as I,f as P,i as C}from"./chunk-GP46IPK2.js";import{A as S,B as b,n as k,y as A}from"./chunk-DS4P5C4F.js";import{a as u}from"./chunk-ZLLER3HP.js";import*as l from"node:fs";import*as m from"node:path";var O=new Set(["mcp","subagent","feature"]);function L(e,t,i){let a=m.join(e,"CLAUDE.md"),s=$(t),o=w(t),r=l.existsSync(a)?l.readFileSync(a,"utf8"):"";if(r.includes(s))return!1;let d=`${r.length>0&&!r.endsWith(`
|
|
2
|
+
`)?`
|
|
3
|
+
|
|
4
|
+
`:r.length>0?`
|
|
5
|
+
`:""}
|
|
6
|
+
${s}
|
|
7
|
+
${i}
|
|
8
|
+
${o}
|
|
9
|
+
`;return l.writeFileSync(a,r+d,"utf8"),!0}u(L,"appendToCLAUDEmd");function E(e,t){let i=m.join(e,"CLAUDE.md");if(!l.existsSync(i))return!1;let a=$(t),s=w(t),o=l.readFileSync(i,"utf8"),r=o.indexOf(a);if(r===-1)return!1;let c=o.indexOf(s,r);if(c===-1)return!1;let d=o.slice(0,r),n=o.slice(c+s.length),v=(d.replace(/\n+$/,"")+`
|
|
10
|
+
`+n.replace(/^\n+/,"")).replace(/^\n+/,"");return l.writeFileSync(i,v,"utf8"),!0}u(E,"removeFromCLAUDEmd");function h(e,t=90){return e.length<=t?e:`${e.slice(0,t-1)}\u2026`}u(h,"truncate");function M(e){return I(`/api/instruction-suggestions/${encodeURIComponent(e)}`)}u(M,"fetchSuggestion");async function X(e){let t=e.suggestion??await M(e.suggestionId);if(t.kind==="remove")return _(e,t);if(t.kind==="trim")return F(e,t);let i=t.instructionId;t.instructionScope==="public"&&(i=(await P(`/api/instructions/${encodeURIComponent(t.instructionId)}/promote-from-public`,{targetScope:"personal"})).instructionId);let a=await I(`/api/instructions/${encodeURIComponent(i)}`),o=a.type!=="skill"&&a.type!=="hook"&&!O.has(a.type??"")?b(a.content,n=>l.existsSync(m.join(e.dir,n))):[];if(o.length>0)return await y(e.suggestionId,e.projectPath,i,e.actor,"unresolvable_reference"),{action:"unresolvable-reference",instructionId:i,name:a.name,fileModified:!1,unresolvable:o,messages:[`Refused: ${a.name} tells the agent to run something this project does not have.`,...o.map(n=>` ${n.path} \u2014 no such file under ${e.dir}`),"Nothing was written. A confident instruction pointing at a file that is not there costs every future session the time it takes to discover that."]};let r;if(!e.force){let n=A(a.content,U(e.dir)),v=e.actor==="auto"?n.matches.length>0:n.redundant;if(!n.redundant&&n.matches.length>0&&(r=n),v){let g=n.redundant;return await y(e.suggestionId,e.projectPath,i,e.actor,g?"redundant":"partial_overlap"),{action:"redundant",instructionId:i,name:a.name,fileModified:!1,redundancy:n,partialOverlap:g?void 0:n,messages:[g?`Skipped: ${a.name} already applies here in different words \u2014 adding it would spend context to say the same thing twice.`:`Refused: ${n.matches.length} of ${n.matches.length+n.novel.length} asks in ${a.name} are already covered here, so adopting it would restate the file back at itself.`,...n.matches.map(f=>` "${h(f.directive)}"
|
|
11
|
+
already covered by ${f.matchedSource??f.matchedId} (${(f.similarity*100).toFixed(0)}% match): "${h(f.matchedDirective)}"`),...g?[]:["Still wanted, and not adopted:",...n.novel.map(f=>` "${h(f)}"`),"Propose those on their own and they can be adopted, tracked and undone individually."],"Add it anyway with `--force` if the overlap is not real."]}}}if(a.type==="skill")return N(e,{...a,id:i});if(a.type==="hook")return T(e,{...a,id:i});if(O.has(a.type??""))return{action:"manual-required",instructionId:i,name:a.name,fileModified:!1,messages:[`Not installed: ${a.name} is a ${a.type} artifact, and installing one runs code or edits tool configuration \u2014 that always requires a human.`,` Review it: rulemetric instructions get ${i}`,"Nothing was written. This proposal will keep appearing until you act on it or dismiss it."]};let c=L(e.dir,i,a.content);await p(e.suggestionId,e.projectPath,i,e.actor);let d=c&&r?[` Note: ${r.matches.length} of ${r.matches.length+r.novel.length} asks in this rule already appear elsewhere in context; it was added for the rest.`,...r.matches.map(n=>` "${h(n.directive)}"
|
|
12
|
+
repeats ${n.matchedSource??n.matchedId} (${(n.similarity*100).toFixed(0)}%): "${h(n.matchedDirective)}"`)]:[];return{action:c?"added":"already-present",instructionId:i,name:a.name,fileModified:c,partialOverlap:c?r:void 0,messages:c?[`Accepted: added ${a.name} to CLAUDE.md. It will be active starting in your next session.`,...d]:[`Already present: ${a.name} is already in CLAUDE.md (block id: ${i}).`]}}u(X,"acceptSuggestion");async function N(e,t){if(!e.force){let n=S({name:t.name,content:t.content},D(e.dir));if(n)return await y(e.suggestionId,e.projectPath,t.id,e.actor),{action:"redundant",instructionId:t.id,name:t.name,fileModified:!1,duplicateOf:n,messages:[`Skipped: ${t.name} is already installed here as ${n.name}`+(n.reason==="name-stem"?" (same skill, different content-hash suffix).":` (${(n.similarity*100).toFixed(0)}% identical body).`),` Installed: ${x(e.dir,n.name)}`,"A second copy is not more available \u2014 it is one more thing to keep in sync."]}}let i=j({dir:e.dir,name:t.name,content:t.content,description:t.description}),a=[...i.warnings],s=[m.relative(e.dir,i.skillFile)];i.linkKind!=="none"&&s.push(m.relative(e.dir,i.linkPath));let o={boundaryClass:"inside",targets:s,requires:[],provides:[`skill:${i.dirName}`]},r={kind:"delete-paths",paths:s},c=k(o,r);if(c.length===0)try{await R({instructionId:t.id,projectPath:e.projectPath,targetPath:i.skillFile,beforeHash:"",appliedHash:"",boundaryClass:o.boundaryClass,targets:o.targets,inverse:r,requires:o.requires,provides:o.provides,applyMode:e.actor==="auto"?"auto":"human"})}catch(n){a.push(`the effect ledger did not record this install (${n instanceof Error?n.message:String(n)}) \u2014 \`suggestions undo\` will not remove it; delete ${s.join(" and ")} by hand.`)}else a.push(`no reversible inverse could be recorded (${c.map(n=>n.message).join("; ")}).`);await p(e.suggestionId,e.projectPath,t.id,e.actor);let d=[`Accepted: installed skill ${i.dirName} to ${m.relative(e.dir,i.skillFile)}.`];i.linkKind==="none"&&d.push("Claude Code will NOT see it yet \u2014 its path is taken by a directory this command did not create."),d.push("It loads on demand, so it costs no context until a task matches its description."),d.push(`Undo with: rulemetric suggestions undo ${t.id}`);for(let n of a)d.push(` Warning: ${n}`);return{action:"added",instructionId:t.id,name:t.name,fileModified:!0,messages:d}}u(N,"acceptSkill");async function F(e,t){let i=t.estimatedTokens?` It currently costs roughly ${t.estimatedTokens} tokens per session (estimated).`:"";return await p(e.suggestionId,e.projectPath,t.instructionId,e.actor),{action:"acknowledged",instructionId:t.instructionId,name:t.name,fileModified:!1,messages:[`Noted: ${t.name} is measured neutral, not harmful.${i}`,"Nothing was changed \u2014 trimming is a judgement call about which parts carry the value,","and the measurement only found the absence of a detectable effect, not which half to cut.",` View it: rulemetric instructions get ${t.instructionId}`," Then edit CLAUDE.md (or the instruction) and let the next measurement cycle re-check it.","This suggestion will stop re-surfacing."]}}u(F,"acknowledgeTrim");async function _(e,t){let i=E(e.dir,t.instructionId);await C(`/api/instructions/${encodeURIComponent(t.instructionId)}`);let a=t.estimatedTokens?` Frees roughly ${t.estimatedTokens} tokens of context per session (estimated).`:"",s=i?[`Retired: removed ${t.name} from CLAUDE.md and archived it.${a}`]:[`Archived ${t.name}.${a}`,"CLAUDE.md was not modified \u2014 no rulemetric-managed block for this instruction was found in this directory. If you added it by hand, remove it yourself."];return s.push("Undo with: rulemetric instructions restore "+t.instructionId),await p(e.suggestionId,e.projectPath,t.instructionId,e.actor),{action:i?"retired":"archived-only",instructionId:t.instructionId,name:t.name,fileModified:i,messages:s}}u(_,"acceptRemoval");export{L as a,E as b,M as c,X as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as o,f as a}from"./chunk-
|
|
1
|
+
import{b as o,f as a}from"./chunk-GP46IPK2.js";import{a as n}from"./chunk-ZLLER3HP.js";function c(e){return e==null?e??null:e instanceof Date?e.toISOString():e}n(c,"serializeDate");async function d(e){let r={provider:e.provider,plan:e.plan,limitType:e.limitType,value:e.value,unit:e.unit,comparator:e.comparator,resetsAt:c(e.resetsAt),sourceType:e.sourceType,sourceUrl:e.sourceUrl,sourceEvidence:e.sourceEvidence,confidence:e.confidence,observedAt:c(e.observedAt)};return a("/api/internal/research/observe",r)}n(d,"postObservation");async function f(e){let r=0,i=0,s=[];for(let u of e)try{await d(u),r++}catch(t){i++;let p=t instanceof o?`HTTP ${t.statusCode}: ${t.message}`:String(t);s.length<5&&s.push(p)}return{posted:r,failed:i,errors:s}}n(f,"postObservations");export{d as a,f as b};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as c,c as d}from"./chunk-IZTIYR5Q.js";import{d as u}from"./chunk-
|
|
1
|
+
import{a as c,c as d}from"./chunk-IZTIYR5Q.js";import{d as u}from"./chunk-RDXWQDNZ.js";import{a}from"./chunk-Y3T5Q5CD.js";import{a as n}from"./chunk-OJSWNU56.js";import{b as i}from"./chunk-GP46IPK2.js";import{g as r}from"./chunk-PZNWH4VQ.js";import{a as s}from"./chunk-ZLLER3HP.js";import{Command as f,Flags as h}from"@oclif/core";function p(t){return t instanceof i?t.statusCode>=500||t.statusCode===408||t.statusCode===0:/fetch failed|ECONNREFUSED|ECONNRESET|ETIMEDOUT|EAI_AGAIN|bad gateway|timed out/i.test(t.message??"")}s(p,"isAvailabilityError");var m=class extends f{static{s(this,"BaseCommand")}static baseFlags={"api-url":h.string({description:"Override API base URL",env:"RULEMETRIC_API_URL",hidden:!0})};async init(){await super.init();let{flags:e}=await this.parse(this.constructor);e["api-url"]&&(process.env.RULEMETRIC_API_URL=e["api-url"]);let o=d(this.config.version);o&&!this.argv.includes("--quiet")&&!process.env.RULEMETRIC_QUIET&&process.stderr.write(`
|
|
2
2
|
${o}
|
|
3
3
|
|
|
4
4
|
`),c();try{await a()}catch{}}requireAuth(){r()||this.error("Not logged in. Run `rulemetric auth login` to authenticate."),n()}async catch(e){throw p(e)&&await u({command:this.id,statusCode:e instanceof i?e.statusCode:void 0,message:e.message,cliVersion:this.config.version}),e instanceof i&&(e.statusCode===401&&this.error("Session expired. Run `rulemetric auth login` to re-authenticate."),this.error(e.message)),(e.message?.includes("fetch failed")||e.message?.includes("ECONNREFUSED"))&&this.error("Could not connect to the API server. Is it running?"),e}};export{m as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f}from"./chunk-
|
|
1
|
+
import{f}from"./chunk-B3BHB26P.js";import{b as S,e as a,h as y}from"./chunk-GP46IPK2.js";import{a as p}from"./chunk-ZLLER3HP.js";var _=1800*1e3,G=300*1e3,T=10,h=`Given these messages from an AI coding session, write a 1-2 sentence summary of what the user is trying to accomplish. Focus on the goal, not the steps. No preamble.
|
|
2
2
|
|
|
3
3
|
Return strict JSON in the form: {"goalSummary": "..."}`;async function k(n,e={}){let d=e.llm??f,o=e.now??Date.now,w=e.getSession??(async s=>{try{return await a(`/api/sessions/${s}`)}catch(t){if(t instanceof S&&t.statusCode===404)return null;throw t}}),m=e.getEvents??((s,t)=>a(`/api/sessions/${s}/events?limit=${t.limit}&sort=${t.sort}`)),v=e.saveGoal??(async(s,t)=>{await y(`/api/sessions/${s}/enrich`,{analysis:t})}),i=await w(n.sessionId);if(!i)return{skipped:"not_found"};let[P]=await m(n.sessionId,{limit:1,sort:"desc"}),A=new Date(P?.timestamp??i.startedAt).getTime();if(o()-A>_)return{skipped:"stale"};let l=i.analysis??{},c=l.goalSummaryAt?new Date(l.goalSummaryAt).getTime():0;if(c&&o()-c<G)return{skipped:"recent"};let g=(await m(n.sessionId,{limit:T*2,sort:"asc"})).filter(s=>s.content&&(s.eventType==="user_message"||s.eventType==="assistant_response")).map(s=>`${s.eventType==="user_message"?"USER":"ASSISTANT"}: ${s.content}`).join(`
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as h,b as D}from"./chunk-
|
|
1
|
+
import{a as h,b as D}from"./chunk-LUCVMLHV.js";import{d as _,e as C}from"./chunk-DS4P5C4F.js";import{a as o}from"./chunk-ZLLER3HP.js";import*as m from"node:fs/promises";import*as x from"node:path";import{eq as z}from"drizzle-orm";import{randomBytes as H}from"node:crypto";var A="#0d9488",g="#1a1a1a",y="#666666",M="#f5f5f7",k="#ffffff",I="#e5e5e9",O=["Added","Changed","Fixed","Removed","Deprecated","Security"];function U(e){let t=["January","February","March","April","May","June","July","August","September","October","November","December"],[n,r,a]=e.split("-").map(p=>parseInt(p,10));return!n||!r||!a||r<1||r>12?e:`${t[r-1]} ${a}, ${n}`}o(U,"formatIsoDate");function l(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}o(l,"escapeHtml");function P(e){let t=[];for(let n of O){let r=e[n];r&&r.length>0&&t.push({name:n,items:r})}return t}o(P,"orderedSections");function v(e){let{version:t,date:n,sections:r,unsubscribeUrl:a,productUrl:p,recipientName:u}=e,c=U(n),s=`What's new in RuleMetric \u2014 ${c}`,b=u?`Hi ${u},`:"Hi there,",i=P(r),d=new Date().getUTCFullYear(),E=i.map(({name:$,items:R})=>{let w=R.map(S=>` <li style="margin:0 0 6px 0;font-size:15px;line-height:1.5;color:${g};">${l(S)}</li>`).join(`
|
|
2
2
|
`);return` <h3 style="margin:24px 0 8px 0;font-size:16px;line-height:1.3;font-weight:600;color:${g};">${$}</h3>
|
|
3
3
|
<ul style="margin:0 0 8px 0;padding-left:20px;">
|
|
4
4
|
${w}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{e as p}from"./chunk-LJRE3LZ2.js";import{x as f}from"./chunk-DS4P5C4F.js";import{a as r}from"./chunk-ZLLER3HP.js";var g=80,h=/\b(must|never|always|do not|don'?t|avoid|prefer|require[sd]?|before|after|only|instead of|use|run|add|keep|stop|refuse|check|verify|ask|write|read)\b/i,m=200,k=r(()=>({asks:[],omitted:0}),"empty");function A(s){return s.replace(/\s+/g," ").trim().toLowerCase()}r(A,"key");function I(s){let t=[];for(let o of s.split(`
|
|
2
|
+
`)){let e=o.trim(),n=t.length>0?t[t.length-1]:"",i=e===""||/^(?:[-*+]|\d+[.)]|#|```|>|\||!)/.test(e);if(n!==""&&!/[.!?:;]$/.test(n)&&!/^(?:#|```)/.test(n)&&!i){t[t.length-1]=`${n} ${e}`;continue}t.push(e)}return t.join(`
|
|
3
|
+
`)}r(I,"unwrap");function y(s,t=p){if(!s)return k();try{let o=new Set,e=[],n=[];for(let l of t(s))for(let d of f(I(l.content))){let c=A(d);if(c===""||o.has(c))continue;o.add(c);let a=d.replace(/\s+/g," ").trim(),u=a.length>m?`${a.slice(0,m)}\u2026`:a;(h.test(u)?e:n).push(u)}let i=[...e,...n];return{asks:i.slice(0,g),omitted:Math.max(0,i.length-g)}}catch{return k()}}r(y,"readInstalledAsks");export{g as a,m as b,y as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as m,c as d}from"./chunk-
|
|
1
|
+
import{a as m,c as d}from"./chunk-VBXL7XO7.js";import{a as s}from"./chunk-ZLLER3HP.js";var h=4,i=1,_=2,f=.0641;function x(e,r=f){return!(e>0)||!(r>=0)?null:Math.sqrt((m+d)**2*r/e)}s(x,"mdeForPairs");function w(e,r=f){if(!(e>0))throw new Error("pairsForMde: mde must be > 0");if(!(r>=0))throw new Error("pairsForMde: variance must be >= 0");return Math.max(1,Math.ceil((m+d)**2*r/e**2))}s(w,"pairsForMde");var p=10,c=128;function R(e){let r=e.autoEvolvePairs;if(r==null)return{minPairs:p,configured:!1};let a=typeof r=="number"?r:typeof r=="string"?Number(r):NaN;if(!Number.isFinite(a)||a<1)return{minPairs:p,configured:!1,note:`metadata.autoEvolvePairs=${JSON.stringify(r)} is not a positive number \u2014 using the default ${p}`};let n=Math.floor(a);return{minPairs:Math.min(c,Math.max(10,n)),configured:!0,...n>c?{note:`metadata.autoEvolvePairs=${n} clamped to the ${c}-pair ceiling`}:n<10?{note:`metadata.autoEvolvePairs=${n} raised to ${10} \u2014 a controlled verdict is refused below ${10} pairs, so a smaller batch buys a certain refusal. Use metadata.autoEvolvePaused to stop the spend instead.`}:{}}}s(R,"readPairBudget");function $(e){let r=e.autoEvolvePaused;return r===!0||r==="true"}s($,"isEvolutionPaused");function O(e){let{liveCases:r,passes:a,variance:n}=e,t=Math.max(0,r)*Math.max(0,a),o=t*2,l=t*2;return{liveCases:r,passes:a,plannedPairs:t,proposalCalls:i,executorCalls:o,graderCalls:l,totalCalls:i+o+l,maxCalls:i+o+l*_,mde:x(t,n)}}s(O,"estimateEvolutionCost");function L(e){let{runs:r,plannedPairs:a,usablePairs:n,passes:t,liveCases:o,wallMs:l,variance:g}=e,b=e.proposalCalls??i,v=e.verdictPairs??n,C=r.length,E=r.filter(P=>P.status==="completed"&&P.grading?.judge_model!=null).length;return{proposalCalls:b,executorCalls:C,graderCalls:E,modelCalls:b+C+E,plannedPairs:a,usablePairs:n,verdictPairs:v,passes:t,liveCases:o,mde:x(v,g),wallMs:l}}s(L,"observedEvolutionCost");function A(e){return e==null?"n/a":`${(e*100).toFixed(1)}pp`}s(A,"pp");function D(e){return`${e.liveCases} case(s) x ${e.passes} pass(es) = ${e.plannedPairs} planned pair(s), ~${e.totalCalls} model calls (up to ${e.maxCalls}) \u2014 resolves an effect of +/-${A(e.mde)} at 80% power`}s(D,"describeEvolutionCost");export{h as a,i as b,_ as c,f as d,x as e,w as f,p as g,c as h,R as i,$ as j,O as k,L as l,A as m,D as n};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as p,c as Xr}from"./chunk-ZLLER3HP.js";import{boolean as Zr,date as es,index as Ut,integer as ts,jsonb as os,pgTable as Bt,text as j,timestamp as U,uniqueIndex as ns,uuid as de}from"drizzle-orm/pg-core";var Ho=Bt("announcements",{id:de("id").primaryKey().defaultRandom(),version:j("version").notNull().unique(),releaseDate:es("release_date").notNull(),subject:j("subject").notNull(),htmlBody:j("html_body").notNull(),textBody:j("text_body").notNull(),sections:os("sections").notNull().default({}),status:j("status").notNull().default("draft"),recipientCount:ts("recipient_count"),sentAt:U("sent_at",{withTimezone:!0}),sentBy:de("sent_by"),error:j("error"),createdAt:U("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:U("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ut("idx_announcements_status").on(e.status),Ut("idx_announcements_created").on(e.createdAt)]),Uo=Bt("announcement_deliveries",{id:de("id").primaryKey().defaultRandom(),announcementId:de("announcement_id").notNull(),userId:de("user_id").notNull(),email:j("email").notNull(),status:j("status").notNull().default("pending"),providerId:j("provider_id"),error:j("error"),sentAt:U("sent_at",{withTimezone:!0}),createdAt:U("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ns("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Ut("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),Bo=Bt("notification_preferences",{userId:de("user_id").primaryKey(),productAnnouncements:Zr("product_announcements").notNull().default(!0),unsubscribeToken:j("unsubscribe_token").notNull().unique(),unsubscribedAt:U("unsubscribed_at",{withTimezone:!0}),createdAt:U("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:U("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{boolean as rt,integer as ke,pgTable as rs,real as Fo,text as st,timestamp as Vt,uuid as Jo}from"drizzle-orm/pg-core";import{pgTable as nt,text as ue,timestamp as Re,jsonb as Vo,uuid as Z,primaryKey as Go}from"drizzle-orm/pg-core";var l=nt("organizations",{id:Z("id").primaryKey().defaultRandom(),name:ue("name").unique().notNull(),slug:ue("slug").unique().notNull(),metadata:Vo("metadata"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Re("updated_at",{withTimezone:!0}).defaultNow()}),v=nt("teams",{id:Z("id").primaryKey().defaultRandom(),orgId:Z("org_id").references(()=>l.id,{onDelete:"cascade"}),name:ue("name").notNull(),slug:ue("slug").notNull(),metadata:Vo("metadata"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()}),le=nt("user_organizations",{userId:Z("user_id").notNull(),orgId:Z("org_id").references(()=>l.id,{onDelete:"cascade"}).notNull(),role:ue("role").notNull().default("member"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()},e=>[Go({columns:[e.userId,e.orgId]})]),ce=nt("user_teams",{userId:Z("user_id").notNull(),teamId:Z("team_id").references(()=>v.id,{onDelete:"cascade"}).notNull(),role:ue("role").notNull().default("member"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()},e=>[Go({columns:[e.userId,e.teamId]})]);var o=rs("profiles",{id:Jo("id").primaryKey(),email:st("email"),displayName:st("display_name"),activeOrgId:Jo("active_org_id").references(()=>l.id,{onDelete:"set null"}),isSuperadmin:rt("is_superadmin").notNull().default(!1),claudeCodePlan:st("claude_code_plan"),planSource:st("plan_source").notNull().default("detected"),setupCompletedAt:Vt("setup_completed_at",{withTimezone:!0}),liveSendSkipped:rt("live_send_skipped").notNull().default(!1),autoAcceptSuggestions:rt("auto_accept_suggestions").notNull().default(!0),evolutionPaused:rt("evolution_paused").notNull().default(!1),suggestionConfidenceThreshold:Fo("suggestion_confidence_threshold").notNull().default(.7),autoAcceptMinScore:Fo("auto_accept_min_score"),autoAcceptMaxPerRun:ke("auto_accept_max_per_run"),autoAcceptMaxPerWindow:ke("auto_accept_max_per_window"),autoAcceptWindowDays:ke("auto_accept_window_days"),trialMaxConcurrent:ke("trial_max_concurrent"),trialMaxPerRun:ke("trial_max_per_run"),createdAt:Vt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Vt("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as ss,text as Gt,timestamp as it,uuid as at,index as $o}from"drizzle-orm/pg-core";var S=ss("org_invitations",{id:at("id").primaryKey().defaultRandom(),orgId:at("org_id").notNull().references(()=>l.id,{onDelete:"cascade"}),email:Gt("email").notNull(),role:Gt("role").notNull().default("member"),teamId:at("team_id").references(()=>v.id,{onDelete:"set null"}),invitedBy:at("invited_by").notNull().references(()=>o.id,{onDelete:"cascade"}),token:Gt("token").notNull().unique(),expiresAt:it("expires_at",{withTimezone:!0}).notNull(),acceptedAt:it("accepted_at",{withTimezone:!0}),revokedAt:it("revoked_at",{withTimezone:!0}),createdAt:it("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[$o("idx_org_invitations_token").on(e.token),$o("idx_org_invitations_org").on(e.orgId)]);import{pgTable as Ft,text as x,timestamp as B,jsonb as dt,uuid as z,integer as ut,boolean as is,uniqueIndex as lt,index as Ee}from"drizzle-orm/pg-core";var n=Ft("instructions",{id:z("id").primaryKey().defaultRandom(),name:x("name").notNull(),description:x("description").notNull(),type:x("type").notNull().default("instruction"),scope:x("scope").notNull(),scopeRef:z("scope_ref"),version:x("version").notNull(),content:x("content").notNull(),frontmatter:dt("frontmatter").notNull(),slots:dt("slots"),tags:x("tags").array(),compatibility:x("compatibility").array(),createdBy:z("created_by"),createdAt:B("created_at",{withTimezone:!0}).defaultNow(),updatedAt:B("updated_at",{withTimezone:!0}).defaultNow(),archived:is("archived").default(!1),archivedAt:B("archived_at",{withTimezone:!0}),archivedBy:z("archived_by"),forkedFromId:z("forked_from_id").references(()=>n.id,{onDelete:"set null"}),upstreamVersion:x("upstream_version"),badge:x("badge"),contentHash:x("content_hash"),contextIdentity:x("context_identity"),scanScore:ut("scan_score"),scanFindings:dt("scan_findings"),popularityScore:ut("popularity_score"),sourceUpdatedAt:B("source_updated_at",{withTimezone:!0})},e=>[lt("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Ee("idx_instructions_scope").on(e.scope,e.scopeRef),Ee("idx_instructions_created_by").on(e.createdBy),Ee("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),Ee("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),Qo=Ft("instruction_version_identities",{id:z("id").primaryKey().defaultRandom(),instructionId:z("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),contentHash:x("content_hash").notNull(),versionOrdinal:ut("version_ordinal").notNull(),content:x("content"),firstSeenAt:B("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:B("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),createdAt:B("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[lt("instruction_version_identities_hash_unique").on(e.instructionId,e.contentHash),lt("instruction_version_identities_ordinal_unique").on(e.instructionId,e.versionOrdinal),Ee("idx_ivi_instruction").on(e.instructionId)]),_e=Ft("instruction_versions",{id:z("id").primaryKey().defaultRandom(),instructionId:z("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:ut("version_number").notNull(),content:x("content").notNull(),frontmatter:dt("frontmatter").notNull(),changeSummary:x("change_summary"),createdBy:z("created_by"),createdAt:B("created_at",{withTimezone:!0}).defaultNow()},e=>[lt("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);import{pgTable as as,text as ds,timestamp as us,jsonb as ls,uuid as Jt,index as Yo}from"drizzle-orm/pg-core";var me=as("instruction_events",{id:Jt("id").primaryKey().defaultRandom(),instructionId:Jt("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:ds("event_type").notNull(),actorId:Jt("actor_id").notNull(),metadata:ls("metadata"),createdAt:us("created_at",{withTimezone:!0}).defaultNow()},e=>[Yo("idx_instruction_events_instruction").on(e.instructionId),Yo("idx_instruction_events_type").on(e.eventType)]);import{boolean as cs,jsonb as _s,pgTable as Qt,primaryKey as Wo,text as ee,timestamp as Se,uniqueIndex as $t,uuid as te}from"drizzle-orm/pg-core";import{sql as ms}from"drizzle-orm";var r=Qt("projects",{id:te("id").primaryKey().defaultRandom(),orgId:te("org_id").references(()=>l.id,{onDelete:"cascade"}),name:ee("name").notNull(),description:ee("description"),githubRepo:ee("github_repo"),gitRemoteUrl:ee("git_remote_url"),gitRootCommit:ee("git_root_commit"),gitRemoteAliases:ee("git_remote_aliases").array().notNull().default([]),metadata:_s("metadata"),createdBy:te("created_by"),createdAt:Se("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Se("updated_at",{withTimezone:!0}).defaultNow()},e=>[$t("projects_org_name_idx").on(e.orgId,e.name),$t("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(ms`${e.gitRemoteUrl} IS NOT NULL`)]),V=Qt("project_instructions",{projectId:te("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),instructionId:te("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:Se("added_at",{withTimezone:!0}).defaultNow(),addedBy:te("added_by")},e=>[Wo({columns:[e.projectId,e.instructionId]})]),Xo=Qt("project_checkouts",{projectId:te("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),path:ee("path").notNull(),isWorktree:cs("is_worktree").notNull().default(!1),firstSeen:Se("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:Se("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[Wo({columns:[e.projectId,e.path]}),$t("project_checkouts_path_unique").on(e.path)]);import{pgTable as Xt,text as I,timestamp as be,jsonb as oe,uuid as b,integer as _t,uniqueIndex as en,index as R}from"drizzle-orm/pg-core";import{pgTable as ps,text as pe,timestamp as Yt,jsonb as Zo,uuid as ct,integer as fs,boolean as xs,index as Wt}from"drizzle-orm/pg-core";var g=ps("agent_runs",{id:ct("id").primaryKey().defaultRandom(),userId:ct("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:ct("org_id").references(()=>l.id,{onDelete:"set null"}),projectId:ct("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:pe("project_path"),gitRemote:pe("git_remote"),baseBranch:pe("base_branch"),title:pe("title"),prompt:pe("prompt"),toolSpec:Zo("tool_spec").notNull().default([]),autoWorktree:xs("auto_worktree").notNull().default(!0),status:pe("status").notNull().default("pending"),sessionCount:fs("session_count").notNull().default(0),metadata:Zo("metadata").notNull().default({}),createdAt:Yt("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Yt("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Yt("completed_at",{withTimezone:!0})},e=>[Wt("idx_agent_runs_user").on(e.userId),Wt("idx_agent_runs_org_created").on(e.orgId,e.createdAt),Wt("idx_agent_runs_project").on(e.projectId)]);var u=Xt("sessions",{id:b("id").primaryKey().defaultRandom(),userId:b("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:I("external_session_id"),projectId:b("project_id").references(()=>r.id,{onDelete:"set null"}),orgId:b("org_id").references(()=>l.id,{onDelete:"set null"}),tool:I("tool").notNull(),projectPath:I("project_path"),gitBranch:I("git_branch"),startedAt:be("started_at",{withTimezone:!0}).notNull(),endedAt:be("ended_at",{withTimezone:!0}),eventCount:_t("event_count").default(0),tokenUsage:oe("token_usage"),analysis:oe("analysis"),analyzedAt:be("analyzed_at",{withTimezone:!0}),analyzedEventCount:_t("analyzed_event_count"),analyzedTurnCount:_t("analyzed_turn_count"),metadata:oe("metadata").default({}),origin:I("origin").notNull().default("unknown"),runId:b("run_id").references(()=>g.id,{onDelete:"set null"}),model:I("model"),harnessVersion:I("harness_version"),createdAt:be("created_at",{withTimezone:!0}).defaultNow()},e=>[R("idx_sessions_user").on(e.userId),R("idx_sessions_tool").on(e.tool),R("idx_sessions_started_at").on(e.startedAt),R("idx_sessions_project").on(e.projectId),R("idx_sessions_org_started_at").on(e.orgId,e.startedAt),R("idx_sessions_run").on(e.runId),en("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),fe=Xt("session_events",{id:b("id").primaryKey().defaultRandom(),sessionId:b("session_id").notNull().references(()=>u.id,{onDelete:"cascade"}),sequence:_t("sequence").notNull(),eventType:I("event_type").notNull(),content:I("content"),toolName:I("tool_name"),toolInput:oe("tool_input"),toolOutput:oe("tool_output"),tokenUsage:oe("token_usage"),model:I("model"),timestamp:be("timestamp",{withTimezone:!0}).notNull(),metadata:oe("metadata").default({})},e=>[en("session_events_session_sequence_idx").on(e.sessionId,e.sequence),R("idx_session_events_session_id").on(e.sessionId),R("idx_session_events_event_type").on(e.eventType),R("idx_session_events_model").on(e.model)]),G=Xt("session_instructions",{sessionId:b("session_id").notNull().references(()=>u.id,{onDelete:"cascade"}),instructionId:b("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:I("link_method").notNull(),contentHash:I("content_hash")},e=>[R("idx_session_instructions_instruction_id").on(e.instructionId)]);import{pgTable as tn,text as mt,timestamp as on,uuid as k,integer as nn,index as xe,unique as Ns}from"drizzle-orm/pg-core";var P=tn("treatment_assignments",{id:k("id").primaryKey().defaultRandom(),userId:k("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:mt("treatment_type").notNull(),treatmentId:k("treatment_id").notNull(),treatmentVersion:nn("treatment_version").notNull().default(1),projectId:k("project_id").references(()=>r.id,{onDelete:"set null"}),assignedBy:k("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:mt("method").notNull(),assignedAt:on("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[xe("idx_treatment_assignments_user").on(e.userId),xe("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),xe("idx_treatment_assignments_project").on(e.projectId)]),K=tn("treatment_exposures",{id:k("id").primaryKey().defaultRandom(),sessionId:k("session_id").notNull().references(()=>u.id,{onDelete:"cascade"}),userId:k("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:mt("treatment_type").notNull(),treatmentId:k("treatment_id").notNull(),treatmentVersion:nn("treatment_version").notNull().default(1),assignmentId:k("assignment_id").references(()=>P.id,{onDelete:"set null"}),method:mt("method").notNull(),exposedAt:on("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ns("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),xe("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),xe("idx_treatment_exposures_user").on(e.userId),xe("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as gs,text as Zt,timestamp as hs,uuid as pt,integer as vs,index as rn,uniqueIndex as Is}from"drizzle-orm/pg-core";var sn=gs("pending_treatment_exposures",{id:pt("id").primaryKey().defaultRandom(),userId:pt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:Zt("external_session_id").notNull(),treatmentType:Zt("treatment_type").notNull(),treatmentId:pt("treatment_id").notNull(),treatmentVersion:vs("treatment_version").notNull().default(1),method:Zt("method").notNull().default("injected"),projectId:pt("project_id").references(()=>r.id,{onDelete:"set null"}),createdAt:hs("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Is("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),rn("idx_pending_treatment_exposures_ext").on(e.externalSessionId),rn("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as an,text as F,timestamp as dn,uuid as Ne,numeric as ys,index as eo,unique as Ts}from"drizzle-orm/pg-core";var Pe=an("instruction_experiments",{id:Ne("id").primaryKey().defaultRandom(),userId:Ne("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:Ne("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:F("project_path").notNull(),status:F("status").notNull().default("running"),treatedShare:ys("treated_share").notNull().default("0.5"),salt:F("salt").notNull(),contentHash:F("content_hash"),source:F("source").notNull().default("manual"),stoppedReason:F("stopped_reason"),createdAt:dn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[eo("idx_instruction_experiments_lookup").on(e.userId,e.projectPath)]),un=an("instruction_experiment_arms",{id:Ne("id").primaryKey().defaultRandom(),experimentId:Ne("experiment_id").notNull().references(()=>Pe.id,{onDelete:"cascade"}),userId:Ne("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:F("external_session_id").notNull(),arm:F("arm").notNull(),assignedAt:dn("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ts("instruction_experiment_arms_unique").on(e.experimentId,e.externalSessionId),eo("idx_instruction_experiment_arms_experiment").on(e.experimentId,e.arm),eo("idx_instruction_experiment_arms_session").on(e.externalSessionId)]);import{pgTable as ws,text as to,timestamp as As,uuid as ft,numeric as oo,integer as ln,jsonb as js,index as Ds,unique as zs}from"drizzle-orm/pg-core";var cn=ws("instruction_verdicts",{id:ft("id").primaryKey().defaultRandom(),userId:ft("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:ft("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),contentHash:to("content_hash").notNull(),projectPath:to("project_path").notNull(),segment:js("segment").notNull().default({}),decision:to("decision").notNull(),delta:oo("delta").notNull(),ciLower:oo("ci_lower").notNull(),ciUpper:oo("ci_upper").notNull(),nTreated:ln("n_treated").notNull(),nControl:ln("n_control").notNull(),experimentId:ft("experiment_id").references(()=>Pe.id,{onDelete:"set null"}),decidedAt:As("decided_at",{withTimezone:!0}).notNull().defaultNow()},e=>[zs("instruction_verdicts_unique").on(e.instructionId,e.contentHash,e.projectPath),Ds("idx_instruction_verdicts_render").on(e.userId,e.projectPath)]);import{pgTable as Rs,text as xt,timestamp as no,uuid as ro,integer as ks,unique as Es,index as Ss}from"drizzle-orm/pg-core";var _n=Rs("insight_recommendation_log",{id:ro("id").primaryKey().defaultRandom(),userId:ro("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),projectPath:xt("project_path").notNull().default(""),category:xt("category").notNull(),contentHash:xt("content_hash").notNull(),label:xt("label").notNull().default(""),firstSeenAt:no("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:no("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),timesGenerated:ks("times_generated").notNull().default(1),lastJobId:ro("last_job_id"),dismissedAt:no("dismissed_at",{withTimezone:!0})},e=>[Es("insight_recommendation_log_unique").on(e.userId,e.projectPath,e.contentHash),Ss("idx_insight_recommendation_log_read").on(e.userId,e.projectPath)]);import{pgTable as bs,text as ge,timestamp as so,uuid as Ke,integer as mn,index as Nt}from"drizzle-orm/pg-core";var T=bs("memories",{id:Ke("id").primaryKey().defaultRandom(),userId:Ke("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:Ke("org_id"),projectId:Ke("project_id").references(()=>r.id,{onDelete:"set null"}),version:mn("version").notNull().default(1),parentId:Ke("parent_id").references(()=>T.id,{onDelete:"set null"}),kind:ge("kind").notNull(),title:ge("title").notNull(),body:ge("body").notNull(),source:ge("source").notNull(),status:ge("status").notNull().default("active"),trustClass:ge("trust_class"),trustVersion:mn("trust_version"),trustComputedAt:so("trust_computed_at",{withTimezone:!0}),createdAt:so("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:so("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Nt("idx_memories_user").on(e.userId),Nt("idx_memories_project").on(e.projectId),Nt("idx_memories_parent").on(e.parentId),Nt("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as Ps,text as Ce,timestamp as io,uuid as ao,integer as pn,jsonb as Ks,index as fn}from"drizzle-orm/pg-core";var xn=Ps("memory_experiments",{id:ao("id").primaryKey().defaultRandom(),memoryId:ao("memory_id").notNull().references(()=>T.id,{onDelete:"cascade"}),userId:ao("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),memoryVersion:pn("memory_version").notNull().default(1),taskPrompt:Ce("task_prompt").notNull(),expectations:Ce("expectations").array().notNull().default([]),trials:pn("trials").notNull().default(10),model:Ce("model"),status:Ce("status").notNull().default("pending"),result:Ks("result").$type(),error:Ce("error"),createdAt:io("created_at",{withTimezone:!0}).notNull().defaultNow(),startedAt:io("started_at",{withTimezone:!0}),completedAt:io("completed_at",{withTimezone:!0})},e=>[fn("idx_memory_experiments_memory").on(e.memoryId),fn("idx_memory_experiments_user").on(e.userId)]);import{pgTable as Cs,text as he,timestamp as uo,uuid as lo,jsonb as qs,uniqueIndex as Os,index as Nn}from"drizzle-orm/pg-core";var gt=Cs("session_terminal_targets",{id:lo("id").primaryKey().defaultRandom(),userId:lo("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:lo("session_id").references(()=>u.id,{onDelete:"set null"}),externalSessionId:he("external_session_id"),kind:he("kind").notNull(),target:he("target").notNull(),status:he("status").notNull().default("active"),attachCommand:he("attach_command").notNull(),projectPath:he("project_path"),metadata:qs("metadata").notNull().default({}),lastSeenAt:uo("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:uo("created_at",{withTimezone:!0}).defaultNow(),updatedAt:uo("updated_at",{withTimezone:!0}).defaultNow()},e=>[Os("idx_session_terminal_targets_user_target").on(e.userId,e.target),Nn("idx_session_terminal_targets_session").on(e.sessionId),Nn("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as Ms,index as ht,jsonb as gn,pgTable as Ls,text as ne,timestamp as qe,uuid as vt,integer as hn}from"drizzle-orm/pg-core";var vn=Ls("session_send_jobs",{id:vt("id").primaryKey().defaultRandom(),userId:vt("user_id").notNull(),sessionId:vt("session_id").notNull().references(()=>u.id,{onDelete:"cascade"}),terminalTargetId:vt("terminal_target_id").references(()=>gt.id,{onDelete:"set null"}),target:ne("target").notNull(),message:ne("message").notNull(),submit:Ms("submit").notNull().default(!0),delivery:ne("delivery").notNull().default("live"),status:ne("status").notNull().default("pending"),result:gn("result"),error:ne("error"),attempts:hn("attempts").notNull().default(0),taskKind:ne("task_kind"),payload:gn("payload"),claimedBy:ne("claimed_by"),claimedAt:qe("claimed_at",{withTimezone:!0}),leaseExpiresAt:qe("lease_expires_at",{withTimezone:!0}),leaseRecoveries:hn("lease_recoveries").notNull().default(0),createdAt:qe("created_at",{withTimezone:!0}).defaultNow(),updatedAt:qe("updated_at",{withTimezone:!0}).defaultNow(),completedAt:qe("completed_at",{withTimezone:!0})},e=>[ht("idx_session_send_jobs_user").on(e.userId),ht("idx_session_send_jobs_session").on(e.sessionId),ht("idx_session_send_jobs_status").on(e.status),ht("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as yn,text as re,timestamp as It,jsonb as Tn,uuid as J,integer as Hs,boolean as Us,uniqueIndex as Bs,index as In,primaryKey as Vs}from"drizzle-orm/pg-core";var D=yn("packs",{id:J("id").primaryKey().defaultRandom(),name:re("name").notNull(),description:re("description").notNull(),scope:re("scope").notNull(),scopeRef:J("scope_ref"),version:re("version").notNull().default("1.0.0"),tags:re("tags").array(),badge:re("badge"),metadata:Tn("metadata"),createdBy:J("created_by"),createdAt:It("created_at",{withTimezone:!0}).defaultNow(),updatedAt:It("updated_at",{withTimezone:!0}).defaultNow(),archived:Us("archived").default(!1),archivedAt:It("archived_at",{withTimezone:!0}),archivedBy:J("archived_by"),forkedFromId:J("forked_from_id").references(()=>D.id,{onDelete:"set null"}),upstreamVersion:re("upstream_version")},e=>[Bs("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),In("idx_packs_scope").on(e.scope,e.scopeRef),In("idx_packs_created_by").on(e.createdBy)]),$=yn("pack_instructions",{packId:J("pack_id").references(()=>D.id,{onDelete:"cascade"}).notNull(),instructionId:J("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:Hs("position").notNull().default(0),slotOverrides:Tn("slot_overrides"),addedAt:It("added_at",{withTimezone:!0}).defaultNow(),addedBy:J("added_by")},e=>[Vs({columns:[e.packId,e.instructionId]})]);import{pgTable as Gs,text as co,timestamp as Fs,jsonb as Js,uuid as _o,index as ve}from"drizzle-orm/pg-core";var Ie=Gs("instruction_usage_events",{id:_o("id").primaryKey().defaultRandom(),instructionId:_o("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:_o("user_id").notNull(),surface:co("surface").notNull(),action:co("action").notNull(),metadata:Js("metadata"),traceId:co("trace_id"),createdAt:Fs("created_at",{withTimezone:!0}).defaultNow()},e=>[ve("idx_usage_events_instruction").on(e.instructionId),ve("idx_usage_events_user").on(e.userId),ve("idx_usage_events_surface").on(e.surface),ve("idx_usage_events_action").on(e.action),ve("idx_usage_events_created_at").on(e.createdAt),ve("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as $s,text as yt,timestamp as wn,jsonb as Qs,uuid as An,index as mo}from"drizzle-orm/pg-core";var jn=$s("worker_connections",{id:An("id").primaryKey().defaultRandom(),userId:An("user_id").notNull(),workerType:yt("worker_type").notNull().default("mcp"),clientName:yt("client_name").notNull(),clientVersion:yt("client_version"),workerVersion:yt("worker_version"),lastHeartbeat:wn("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:wn("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Qs("metadata")},e=>[mo("idx_worker_connections_user").on(e.userId),mo("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),mo("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as Ys,text as Tt,timestamp as Ws,jsonb as Xs,uuid as Dn,index as zn}from"drizzle-orm/pg-core";var Rn=Ys("cli_setup_events",{id:Dn("id").primaryKey().defaultRandom(),userId:Dn("user_id").notNull(),deviceId:Tt("device_id").notNull(),event:Tt("event").notNull(),cliVersion:Tt("cli_version"),os:Tt("os"),props:Xs("props").notNull().default({}),createdAt:Ws("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[zn("idx_cli_setup_events_user").on(e.userId,e.createdAt),zn("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as Zs,text as se,integer as ei,boolean as ti,timestamp as oi,jsonb as ni,uuid as ri,index as kn}from"drizzle-orm/pg-core";var En=Zs("cli_error_events",{id:ri("id").primaryKey().defaultRandom(),deviceId:se("device_id"),event:se("event").notNull(),command:se("command"),statusCode:ei("status_code"),message:se("message"),cliVersion:se("cli_version"),os:se("os"),nodeVersion:se("node_version"),proxied:ti("proxied"),props:ni("props").notNull().default({}),createdAt:oi("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[kn("idx_cli_error_events_created").on(e.createdAt),kn("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{sql as po}from"drizzle-orm";import{pgTable as ie,text as _,timestamp as h,jsonb as w,uuid as c,integer as C,boolean as Oe,index as f,unique as Sn}from"drizzle-orm/pg-core";var s=ie("eval_targets",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),name:_("name").notNull(),type:_("type").notNull(),content:_("content").notNull(),description:_("description").notNull().default(""),metadata:w("metadata").notNull().default({}),version:C("version").notNull().default(1),parentId:c("parent_id").references(()=>s.id,{onDelete:"set null"}),instructionId:c("instruction_id").references(()=>n.id,{onDelete:"set null"}),projectPath:_("project_path"),createdAt:h("created_at",{withTimezone:!0}).defaultNow(),updatedAt:h("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("eval_targets_name_user_idx").on(e.name,e.userId),f("idx_eval_targets_user").on(e.userId),f("idx_eval_targets_type").on(e.type),f("idx_eval_targets_parent").on(e.parentId),f("idx_eval_targets_instruction").on(e.instructionId).where(po`${e.instructionId} IS NOT NULL`),f("idx_eval_targets_project").on(e.projectPath).where(po`${e.projectPath} IS NOT NULL`)]),q=ie("evals",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),name:_("name").notNull(),prompt:_("prompt").notNull(),expectedOutput:_("expected_output").notNull().default(""),files:w("files").notNull().default([]),expectations:w("expectations").notNull().default([]),retiredAt:h("retired_at",{withTimezone:!0}),retiredReason:_("retired_reason"),createdAt:h("created_at",{withTimezone:!0}).defaultNow(),updatedAt:h("updated_at",{withTimezone:!0}).defaultNow(),contentUpdatedAt:h("content_updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[f("idx_evals_target").on(e.evalTargetId),f("idx_evals_target_active").on(e.evalTargetId).where(po`${e.retiredAt} IS NULL`)]),E=ie("eval_runs",{id:c("id").primaryKey().defaultRandom(),jobId:c("job_id"),evalId:c("eval_id").notNull().references(()=>q.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalTargetVersion:C("eval_target_version").notNull(),configuration:_("configuration").notNull(),runNumber:C("run_number").notNull().default(1),iteration:C("iteration").notNull().default(1),status:_("status").notNull().default("completed"),outputs:w("outputs").notNull().default({}),timing:w("timing").notNull().default({}),grading:w("grading").notNull().default({}),comparison:w("comparison"),createdAt:h("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_runs_eval").on(e.evalId),f("idx_eval_runs_target").on(e.evalTargetId),f("idx_eval_runs_iteration").on(e.evalTargetId,e.iteration)]),bn=ie("eval_comparisons",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),targetAId:c("target_a_id").notNull().references(()=>s.id,{onDelete:"cascade"}),targetBId:c("target_b_id").notNull().references(()=>s.id,{onDelete:"cascade"}),targetAVersion:C("target_a_version").notNull(),targetBVersion:C("target_b_version").notNull(),isSwapped:Oe("is_swapped").notNull().default(!1),winnerTargetId:c("winner_target_id").references(()=>s.id,{onDelete:"set null"}),perEval:w("per_eval").notNull().default([]),overall:w("overall").notNull().default({}),rawOutput:_("raw_output"),model:_("model"),status:_("status").notNull().default("completed"),createdAt:h("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_comparisons_target_a").on(e.targetAId),f("idx_eval_comparisons_target_b").on(e.targetBId),f("idx_eval_comparisons_user").on(e.userId)]),Pn=ie("eval_grade_annotations",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalRunId:c("eval_run_id").notNull().references(()=>E.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),expectationIndex:C("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Oe("judge_passed").notNull(),judgeMethod:_("judge_method").notNull(),judgeModel:_("judge_model"),verdict:_("verdict").notNull(),flag:_("flag"),note:_("note"),createdAt:h("created_at",{withTimezone:!0}).defaultNow(),updatedAt:h("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_grade_annotations_target").on(e.evalTargetId),f("idx_eval_grade_annotations_run").on(e.evalRunId),Sn("eval_grade_annotations_eval_run_id_expectation_index_key").on(e.evalRunId,e.expectationIndex)]),Kn=ie("judge_reviewer_verdicts",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalRunId:c("eval_run_id").notNull().references(()=>E.id,{onDelete:"cascade"}),expectationIndex:C("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Oe("judge_passed").notNull(),humanPassed:Oe("human_passed").notNull(),reviewerEngine:_("reviewer_engine").notNull(),reviewerModel:_("reviewer_model").notNull(),reviewerPassed:Oe("reviewer_passed").notNull(),resolvedAt:h("resolved_at",{withTimezone:!0}),resolution:_("resolution"),createdAt:h("created_at",{withTimezone:!0}).defaultNow(),updatedAt:h("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_jrv_target").on(e.evalTargetId),Sn("judge_reviewer_verdicts_eval_run_id_expectation_index_review_key").on(e.evalRunId,e.expectationIndex,e.reviewerModel)]),ye=ie("benchmarks",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),iteration:C("iteration").notNull().default(1),runSummary:w("run_summary").notNull().default({}),notes:w("notes").notNull().default([]),feedback:w("feedback"),createdAt:h("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_benchmarks_target").on(e.evalTargetId)]);import{sql as fo}from"drizzle-orm";import{pgTable as si,text as O,timestamp as ii,jsonb as wt,uuid as At,boolean as ai,index as Me,uniqueIndex as di}from"drizzle-orm/pg-core";var Cn=si("instruction_promotions",{id:At("id").primaryKey().defaultRandom(),userId:At("user_id").notNull(),evalTargetId:At("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),instructionId:At("instruction_id").references(()=>n.id,{onDelete:"set null"}),fromContentHash:O("from_content_hash").notNull(),toContentHash:O("to_content_hash").notNull(),fromContent:O("from_content").notNull(),toContent:O("to_content").notNull(),proposalSource:O("proposal_source").notNull(),proposalRationale:O("proposal_rationale").notNull().default(""),decision:O("decision").notNull(),applied:ai("applied").notNull().default(!1),refusals:wt("refusals").notNull().default([]),rationale:O("rationale").notNull().default(""),effectClass:O("effect_class").notNull(),verdict:wt("verdict").notNull().default({}),gates:wt("gates").notNull().default({}),touchedSections:wt("touched_sections").notNull().default([]),createdAt:ii("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Me("idx_instruction_promotions_budget").on(e.evalTargetId,e.createdAt.desc()).where(fo`${e.applied}`),Me("idx_instruction_promotions_target").on(e.evalTargetId,e.createdAt.desc()),Me("idx_instruction_promotions_user").on(e.userId,e.createdAt.desc()),Me("idx_instruction_promotions_to_hash").on(e.toContentHash),di("uq_instruction_promotions_applied").on(e.evalTargetId,e.fromContentHash,e.toContentHash).where(fo`${e.applied}`),Me("idx_instruction_promotions_applied_hash").on(e.toContentHash,e.createdAt.desc()).where(fo`${e.applied}`)]);import{index as Le,integer as ui,jsonb as li,pgTable as ci,text as y,timestamp as Te,uniqueIndex as _i,uuid as He}from"drizzle-orm/pg-core";var qn=ci("recommendation_applications",{id:He("id").primaryKey().defaultRandom(),userId:He("user_id").notNull(),instructionId:He("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectId:He("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:y("project_path").notNull(),harness:y("harness").notNull(),targetPath:y("target_path").notNull(),status:y("status").notNull().default("proposed"),applyMode:y("apply_mode").notNull(),beforeHash:y("before_hash"),appliedHash:y("applied_hash"),appliedAt:Te("applied_at",{withTimezone:!0}),measurementStartedAt:Te("measurement_started_at",{withTimezone:!0}),measurementEndedAt:Te("measurement_ended_at",{withTimezone:!0}),verdict:y("verdict"),verdictDetail:y("verdict_detail"),revertedAt:Te("reverted_at",{withTimezone:!0}),boundaryClass:y("boundary_class"),targets:y("targets").array().notNull().default([]),inverse:li("inverse"),requires:y("requires").array().notNull().default([]),provides:y("provides").array().notNull().default([]),applyBatchId:He("apply_batch_id"),applySeq:ui("apply_seq"),createdAt:Te("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Te("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[_i("uq_recommendation_applications_target").on(e.userId,e.instructionId,e.projectPath,e.harness,e.targetPath),Le("idx_recommendation_applications_user_status").on(e.userId,e.status,e.updatedAt.desc()),Le("idx_recommendation_applications_user_harness").on(e.userId,e.harness,e.updatedAt.desc()),Le("idx_recommendation_applications_project").on(e.projectId,e.updatedAt.desc()),Le("idx_recommendation_applications_batch").on(e.userId,e.applyBatchId,e.applySeq.desc()),Le("idx_recommendation_applications_requires").using("gin",e.requires)]);import{pgTable as mi,text as Q,timestamp as pi,jsonb as Ue,uuid as xo,integer as No,real as fi,index as Be,uniqueIndex as On}from"drizzle-orm/pg-core";var Y=mi("context_snapshots",{id:xo("id").primaryKey().defaultRandom(),sessionId:xo("session_id").references(()=>u.id,{onDelete:"cascade"}),userId:xo("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:No("sequence").notNull().default(0),provider:Q("provider").notNull(),model:Q("model").notNull(),systemPrompt:Q("system_prompt").notNull(),injectedInstructions:Ue("injected_instructions").notNull().default([]),messagesSummary:Ue("messages_summary").notNull(),tools:Ue("tools").notNull().default([]),systemHash:Q("system_hash").notNull(),requestHash:Q("request_hash").notNull().default(""),toolsHash:Q("tools_hash"),injectedHash:Q("injected_hash"),messagesDelta:Ue("messages_delta").default([]),messagesDeltaRef:Q("messages_delta_ref"),maxTokens:No("max_tokens"),temperature:fi("temperature"),estimatedTokens:No("estimated_tokens"),capturedAt:pi("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Ue("metadata").default({})},e=>[Be("idx_context_snapshots_session").on(e.sessionId),Be("idx_context_snapshots_user").on(e.userId),Be("idx_context_snapshots_hash").on(e.systemHash),Be("idx_context_snapshots_request_hash").on(e.requestHash),On("idx_snapshots_session_request").on(e.sessionId,e.requestHash),On("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),Be("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as xi,text as Mn,timestamp as Ni,jsonb as gi,integer as hi,index as vi}from"drizzle-orm/pg-core";var Ln=xi("content_blobs",{hash:Mn("hash").primaryKey(),contentType:Mn("content_type").notNull(),content:gi("content").notNull(),sizeBytes:hi("size_bytes").notNull().default(0),createdAt:Ni("created_at",{withTimezone:!0}).defaultNow()},e=>[vi("idx_content_blobs_type").on(e.contentType)]);import{pgTable as Ii,text as jt,timestamp as Ve,jsonb as Dt,uuid as go,index as zt,integer as Hn}from"drizzle-orm/pg-core";var we=Ii("eval_jobs",{id:go("id").primaryKey().defaultRandom(),userId:go("user_id").notNull(),evalTargetId:go("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),status:jt("status").notNull().default("pending"),config:Dt("config").notNull().default({}),progress:Dt("progress").notNull().default({}),result:Dt("result"),error:jt("error"),attempts:Hn("attempts").notNull().default(0),taskKind:jt("task_kind"),payload:Dt("payload"),claimedBy:jt("claimed_by"),claimedAt:Ve("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ve("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Hn("lease_recoveries").notNull().default(0),createdAt:Ve("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ve("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ve("completed_at",{withTimezone:!0})},e=>[zt("idx_eval_jobs_user").on(e.userId),zt("idx_eval_jobs_target").on(e.evalTargetId),zt("idx_eval_jobs_status").on(e.status),zt("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as yi,text as Ge,timestamp as Fe,jsonb as Un,uuid as Bn,integer as Vn,index as Gn}from"drizzle-orm/pg-core";var Fn=yi("agent_jobs",{id:Bn("id").primaryKey().defaultRandom(),userId:Bn("user_id").notNull(),taskKind:Ge("task_kind").notNull(),status:Ge("status").notNull().default("pending"),payload:Un("payload").notNull(),dedupeKey:Ge("dedupe_key"),result:Un("result"),error:Ge("error"),attempts:Vn("attempts").notNull().default(0),claimedBy:Ge("claimed_by"),claimedAt:Fe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Fe("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Vn("lease_recoveries").notNull().default(0),createdAt:Fe("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Fe("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Fe("completed_at",{withTimezone:!0})},e=>[Gn("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),Gn("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as Ti,text as Je,timestamp as $e,jsonb as Rt,uuid as ho,index as kt,integer as Jn}from"drizzle-orm/pg-core";var $n=Ti("insights_jobs",{id:ho("id").primaryKey().defaultRandom(),userId:ho("user_id").notNull(),status:Je("status").notNull().default("pending"),projectPath:Je("project_path"),projectId:ho("project_id").references(()=>r.id,{onDelete:"set null"}),config:Rt("config").notNull().default({}),progress:Rt("progress").notNull().default({}),result:Rt("result"),error:Je("error"),attempts:Jn("attempts").notNull().default(0),taskKind:Je("task_kind"),payload:Rt("payload"),claimedBy:Je("claimed_by"),claimedAt:$e("claimed_at",{withTimezone:!0}),leaseExpiresAt:$e("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Jn("lease_recoveries").notNull().default(0),createdAt:$e("created_at",{withTimezone:!0}).defaultNow(),updatedAt:$e("updated_at",{withTimezone:!0}).defaultNow(),completedAt:$e("completed_at",{withTimezone:!0})},e=>[kt("idx_insights_jobs_user").on(e.userId),kt("idx_insights_jobs_status").on(e.status),kt("idx_insights_jobs_pending").on(e.userId,e.status),kt("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as wi,text as vo,timestamp as Et,uuid as Qn,index as Ai,uniqueIndex as ji}from"drizzle-orm/pg-core";var Ae=wi("api_keys",{id:Qn("id").primaryKey().defaultRandom(),userId:Qn("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:vo("name").notNull(),keyHash:vo("key_hash").notNull(),keyPrefix:vo("key_prefix").notNull(),lastUsedAt:Et("last_used_at",{withTimezone:!0}),expiresAt:Et("expires_at",{withTimezone:!0}),revokedAt:Et("revoked_at",{withTimezone:!0}),createdAt:Et("created_at",{withTimezone:!0}).defaultNow()},e=>[Ai("idx_api_keys_user").on(e.userId),ji("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as Di,text as Io,timestamp as Yn,uuid as zi,index as Ri}from"drizzle-orm/pg-core";var Wn=Di("extension_auth_codes",{code:Io("code").primaryKey(),userId:zi("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:Io("editor"),email:Io("email"),expiresAt:Yn("expires_at",{withTimezone:!0}).notNull(),createdAt:Yn("created_at",{withTimezone:!0}).defaultNow()},e=>[Ri("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as ki,text as Ei,timestamp as Xn,jsonb as Si,uuid as yo,index as Zn}from"drizzle-orm/pg-core";var je=ki("eval_conversations",{id:yo("id").primaryKey().defaultRandom(),evalTargetId:yo("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:yo("user_id").notNull(),messages:Si("messages").notNull().default([]),status:Ei("status").notNull().default("active"),createdAt:Xn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Xn("updated_at",{withTimezone:!0}).defaultNow()},e=>[Zn("idx_eval_conversations_target").on(e.evalTargetId),Zn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as bi,text as M,timestamp as er,jsonb as Pi,uuid as To}from"drizzle-orm/pg-core";var tr=bi("skill_submissions",{id:To("id").primaryKey().defaultRandom(),skillId:M("skill_id").notNull(),name:M("name").notNull(),description:M("description").notNull(),category:M("category").notNull(),tools:M("tools").array().notNull(),tags:M("tags").array().default([]),content:M("content").notNull(),status:M("status").notNull().default("pending"),submittedBy:To("submitted_by").notNull(),reviewedBy:To("reviewed_by"),reviewNote:M("review_note"),metadata:Pi("metadata"),createdAt:er("created_at",{withTimezone:!0}).defaultNow(),updatedAt:er("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Ki,text as Qe,timestamp as or,jsonb as Ci,uuid as qi,uniqueIndex as Oi,index as nr}from"drizzle-orm/pg-core";var rr=Ki("harness_releases",{id:qi("id").primaryKey().defaultRandom(),harness:Qe("harness").notNull(),version:Qe("version").notNull(),publishedAt:or("published_at",{withTimezone:!0}).notNull(),title:Qe("title"),body:Qe("body"),categories:Ci("categories").default({}),url:Qe("url"),createdAt:or("created_at",{withTimezone:!0}).defaultNow()},e=>[Oi("idx_harness_releases_unique").on(e.harness,e.version),nr("idx_harness_releases_harness").on(e.harness),nr("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as Mi,text as De,timestamp as sr,jsonb as Li,uuid as ir,index as ar,uniqueIndex as Hi}from"drizzle-orm/pg-core";var wo=Mi("notifications",{id:ir("id").primaryKey().defaultRandom(),userId:ir("user_id").notNull(),type:De("type").notNull(),title:De("title").notNull(),body:De("body"),url:De("url"),sourceTable:De("source_table"),sourceId:De("source_id"),metadata:Li("metadata").notNull().default({}),readAt:sr("read_at",{withTimezone:!0}),createdAt:sr("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ar("idx_notifications_user_created").on(e.userId,e.createdAt),ar("idx_notifications_user_unread").on(e.userId),Hi("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as Ui,text as Ye,timestamp as We,jsonb as Ao,uuid as jo,index as St,integer as dr}from"drizzle-orm/pg-core";var ze=Ui("launch_jobs",{id:jo("id").primaryKey().defaultRandom(),userId:jo("user_id").notNull(),tool:Ye("tool").notNull(),status:Ye("status").notNull().default("pending"),config:Ao("config").notNull().default({}),result:Ao("result"),error:Ye("error"),attempts:dr("attempts").notNull().default(0),taskKind:Ye("task_kind"),payload:Ao("payload"),claimedBy:Ye("claimed_by"),claimedAt:We("claimed_at",{withTimezone:!0}),leaseExpiresAt:We("lease_expires_at",{withTimezone:!0}),leaseRecoveries:dr("lease_recoveries").notNull().default(0),createdAt:We("created_at",{withTimezone:!0}).defaultNow(),updatedAt:We("updated_at",{withTimezone:!0}).defaultNow(),completedAt:We("completed_at",{withTimezone:!0}),runId:jo("run_id").references(()=>g.id,{onDelete:"set null"})},e=>[St("idx_launch_jobs_user").on(e.userId),St("idx_launch_jobs_status").on(e.status),St("idx_launch_jobs_pending").on(e.userId,e.status),St("idx_launch_jobs_run").on(e.runId)]);import{pgTable as ur,uuid as L,text as W,real as Bi,timestamp as Xe,boolean as Vi,uniqueIndex as Gi,index as Ze}from"drizzle-orm/pg-core";var lr=["add","remove","trim"],Do=ur("instruction_suggestions",{id:L("id").primaryKey().defaultRandom(),userId:L("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:L("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:W("project_path").notNull(),projectId:L("project_id").references(()=>r.id,{onDelete:"set null"}),score:Bi("score").notNull(),reason:W("reason").notNull(),kind:W("kind").$type().notNull().default("add"),generatedAt:Xe("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:Vi("is_stale").notNull().default(!1),dismissedAt:Xe("dismissed_at",{withTimezone:!0}),acceptedAt:Xe("accepted_at",{withTimezone:!0}),declinedAt:Xe("declined_at",{withTimezone:!0}),declinedReason:W("declined_reason"),promotedToInstructionId:L("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Gi("idx_instruction_suggestions_user_project_instruction_kind").on(e.userId,e.projectPath,e.instructionId,e.kind),Ze("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),Ze("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),Ze("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),cr=ur("instruction_suggestion_events",{id:L("id").primaryKey().defaultRandom(),suggestionId:L("suggestion_id").notNull().references(()=>Do.id,{onDelete:"cascade"}),userId:L("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:W("event_type").notNull(),tool:W("tool"),sessionId:L("session_id"),projectPath:W("project_path").notNull(),actor:W("actor"),createdAt:Xe("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ze("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),Ze("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as Fi,text as zo,integer as Ji,numeric as et,timestamp as Ro,index as $i,primaryKey as Qi}from"drizzle-orm/pg-core";var _r=Fi("model_pricing",{provider:zo("provider").notNull(),modelId:zo("model_id").notNull(),inputPerM:et("input_per_m").notNull(),outputPerM:et("output_per_m").notNull(),cacheReadPerM:et("cache_read_per_m").notNull(),cacheWrite5mPerM:et("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:et("cache_write_1h_per_m").notNull(),contextWindow:Ji("context_window"),effectiveFrom:Ro("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:Ro("effective_until",{withTimezone:!0}),source:zo("source").notNull(),verifiedAt:Ro("verified_at",{withTimezone:!0})},e=>[Qi({columns:[e.provider,e.modelId,e.effectiveFrom]}),$i("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Yi,text as ae,numeric as mr,timestamp as pr,uuid as fr,jsonb as Wi,index as xr}from"drizzle-orm/pg-core";var Nr=Yi("limit_observations",{id:fr("id").primaryKey().defaultRandom(),observedAt:pr("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:ae("provider").notNull(),plan:ae("plan").notNull(),limitType:ae("limit_type").notNull(),value:mr("value").notNull(),unit:ae("unit").notNull(),comparator:ae("comparator").notNull().default("="),resetsAt:pr("resets_at",{withTimezone:!0}),sourceType:ae("source_type").notNull(),sourceUrl:ae("source_url"),sourceEvidence:Wi("source_evidence"),confidence:mr("confidence").notNull(),userId:fr("user_id")},e=>[xr("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),xr("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as Xi,text as bt,timestamp as Zi,uuid as ea,jsonb as ta,boolean as oa,uniqueIndex as na}from"drizzle-orm/pg-core";var gr=Xi("provider_docs_snapshots",{id:ea("id").primaryKey().defaultRandom(),fetchedAt:Zi("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:bt("provider").notNull(),docUrl:bt("doc_url").notNull(),contentHash:bt("content_hash").notNull(),content:bt("content").notNull(),parseSuccess:oa("parse_success").notNull(),parseErrors:ta("parse_errors")},e=>[na("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as ra,text as Pt,numeric as hr,timestamp as vr,uuid as sa,primaryKey as ia,index as aa}from"drizzle-orm/pg-core";var Ir=ra("plan_limits_active",{provider:Pt("provider").notNull(),plan:Pt("plan").notNull(),limitType:Pt("limit_type").notNull(),value:hr("value").notNull(),unit:Pt("unit").notNull(),effectiveFrom:vr("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:vr("effective_until",{withTimezone:!0}),confidence:hr("confidence").notNull(),sourceObservationIds:sa("source_observation_ids").array().notNull()},e=>[ia({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),aa("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as da,text as ko,timestamp as ua,uuid as yr,jsonb as la,index as ca}from"drizzle-orm/pg-core";var Tr=da("alert_dispatches",{id:yr("id").primaryKey().defaultRandom(),userId:yr("user_id").notNull(),alertKey:ko("alert_key").notNull(),severity:ko("severity").notNull(),lastDispatchedAt:ua("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:la("last_state").notNull(),channel:ko("channel").notNull()},e=>[ca("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{pgTable as _a,text as Eo,timestamp as wr,uuid as So,integer as ma,index as pa,unique as fa}from"drizzle-orm/pg-core";var Ar=_a("scaffolding_fingerprints",{id:So("id").primaryKey().defaultRandom(),userId:So("user_id").notNull(),harness:Eo("harness").notNull(),model:Eo("model").notNull(),toolsHash:Eo("tools_hash").notNull(),firstSeenAt:wr("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:wr("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),snapshotCount:ma("snapshot_count").notNull().default(1),firstSessionId:So("first_session_id")},e=>[fa("scaffolding_fingerprints_user_id_harness_model_tools_hash_key").on(e.userId,e.harness,e.model,e.toolsHash),pa("idx_scaffolding_fp_segment").on(e.userId,e.harness,e.model)]);import{pgTable as xa,text as bo,timestamp as Na,jsonb as ga,uuid as jr,integer as ha,unique as va}from"drizzle-orm/pg-core";var Dr=xa("scaffolding_segments",{id:jr("id").primaryKey().defaultRandom(),userId:jr("user_id").notNull(),harness:bo("harness").notNull(),model:bo("model").notNull(),coreNames:ga("core_names").notNull(),coreHash:bo("core_hash").notNull(),activeFingerprints:ha("active_fingerprints").notNull(),computedAt:Na("computed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[va("scaffolding_segments_user_id_harness_model_key").on(e.userId,e.harness,e.model)]);import{drizzle as Sr}from"drizzle-orm/postgres-js";import br from"postgres";var Kt={};Xr(Kt,{SUGGESTION_KINDS:()=>lr,agentJobs:()=>Fn,agentRuns:()=>g,agentRunsRelations:()=>Ka,alertDispatches:()=>Tr,announcementDeliveries:()=>Uo,announcements:()=>Ho,apiKeys:()=>Ae,apiKeysRelations:()=>ya,benchmarks:()=>ye,benchmarksRelations:()=>Ja,cliErrorEvents:()=>En,cliSetupEvents:()=>Rn,contentBlobs:()=>Ln,contextSnapshots:()=>Y,contextSnapshotsRelations:()=>Ya,evalComparisons:()=>bn,evalConversations:()=>je,evalConversationsRelations:()=>Qa,evalGradeAnnotations:()=>Pn,evalJobs:()=>we,evalJobsRelations:()=>$a,evalRuns:()=>E,evalRunsRelations:()=>Fa,evalTargets:()=>s,evalTargetsRelations:()=>Va,evals:()=>q,evalsRelations:()=>Ga,extensionAuthCodes:()=>Wn,harnessReleases:()=>rr,insightRecommendationLog:()=>_n,insightsJobs:()=>$n,instructionEvents:()=>me,instructionEventsRelations:()=>Ra,instructionExperimentArms:()=>un,instructionExperiments:()=>Pe,instructionPromotions:()=>Cn,instructionSuggestionEvents:()=>cr,instructionSuggestions:()=>Do,instructionUsageEvents:()=>Ie,instructionUsageEventsRelations:()=>Ba,instructionVerdicts:()=>cn,instructionVersionIdentities:()=>Qo,instructionVersions:()=>_e,instructionVersionsRelations:()=>Ea,instructions:()=>n,instructionsRelations:()=>za,judgeReviewerVerdicts:()=>Kn,launchJobs:()=>ze,launchJobsRelations:()=>Ca,limitObservations:()=>Nr,memories:()=>T,memoriesRelations:()=>ka,memoryExperiments:()=>xn,modelPricing:()=>_r,notificationPreferences:()=>Bo,notifications:()=>wo,orgInvitations:()=>S,orgInvitationsRelations:()=>Aa,organizations:()=>l,organizationsRelations:()=>Ta,packInstructions:()=>$,packInstructionsRelations:()=>Ua,packs:()=>D,packsRelations:()=>Ha,pendingTreatmentExposures:()=>sn,planLimitsActive:()=>Ir,profiles:()=>o,profilesRelations:()=>Ia,projectCheckouts:()=>Xo,projectInstructions:()=>V,projectInstructionsRelations:()=>ba,projects:()=>r,projectsRelations:()=>Sa,providerDocsSnapshots:()=>gr,recommendationApplications:()=>qn,scaffoldingFingerprints:()=>Ar,scaffoldingSegments:()=>Dr,sessionEvents:()=>fe,sessionEventsRelations:()=>qa,sessionInstructions:()=>G,sessionInstructionsRelations:()=>Oa,sessionSendJobs:()=>vn,sessionTerminalTargets:()=>gt,sessions:()=>u,sessionsRelations:()=>Pa,skillSubmissions:()=>tr,teams:()=>v,teamsRelations:()=>wa,treatmentAssignments:()=>P,treatmentAssignmentsRelations:()=>Ma,treatmentExposures:()=>K,treatmentExposuresRelations:()=>La,userOrganizations:()=>le,userOrganizationsRelations:()=>ja,userTeams:()=>ce,userTeamsRelations:()=>Da,workerConnections:()=>jn});import{relations as i}from"drizzle-orm";var Ia=i(o,({many:e})=>({sessions:e(u),contextSnapshots:e(Y),apiKeys:e(Ae)})),ya=i(Ae,({one:e})=>({profile:e(o,{fields:[Ae.userId],references:[o.id]})})),Ta=i(l,({many:e})=>({teams:e(v),userOrganizations:e(le),projects:e(r),invitations:e(S)})),wa=i(v,({one:e,many:t})=>({organization:e(l,{fields:[v.orgId],references:[l.id]}),userTeams:t(ce),invitations:t(S)})),Aa=i(S,({one:e})=>({organization:e(l,{fields:[S.orgId],references:[l.id]}),team:e(v,{fields:[S.teamId],references:[v.id]}),inviter:e(o,{fields:[S.invitedBy],references:[o.id]})})),ja=i(le,({one:e})=>({organization:e(l,{fields:[le.orgId],references:[l.id]})})),Da=i(ce,({one:e})=>({team:e(v,{fields:[ce.teamId],references:[v.id]})})),za=i(n,({one:e,many:t})=>({versions:t(_e),projectInstructions:t(V),events:t(me),usageEvents:t(Ie),sessionInstructions:t(G),packInstructions:t($),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),Ra=i(me,({one:e})=>({instruction:e(n,{fields:[me.instructionId],references:[n.id]})})),ka=i(T,({one:e,many:t})=>({project:e(r,{fields:[T.projectId],references:[r.id]}),parent:e(T,{fields:[T.parentId],references:[T.id]}),versions:t(T)})),Ea=i(_e,({one:e})=>({instruction:e(n,{fields:[_e.instructionId],references:[n.id]})})),Sa=i(r,({one:e,many:t})=>({organization:e(l,{fields:[r.orgId],references:[l.id]}),projectInstructions:t(V),sessions:t(u)})),ba=i(V,({one:e})=>({project:e(r,{fields:[V.projectId],references:[r.id]}),instruction:e(n,{fields:[V.instructionId],references:[n.id]})})),Pa=i(u,({one:e,many:t})=>({profile:e(o,{fields:[u.userId],references:[o.id]}),project:e(r,{fields:[u.projectId],references:[r.id]}),run:e(g,{fields:[u.runId],references:[g.id]}),events:t(fe),sessionInstructions:t(G),treatmentExposures:t(K),contextSnapshots:t(Y)})),Ka=i(g,({one:e,many:t})=>({profile:e(o,{fields:[g.userId],references:[o.id]}),organization:e(l,{fields:[g.orgId],references:[l.id]}),project:e(r,{fields:[g.projectId],references:[r.id]}),sessions:t(u),launchJobs:t(ze)})),Ca=i(ze,({one:e})=>({run:e(g,{fields:[ze.runId],references:[g.id]})})),qa=i(fe,({one:e})=>({session:e(u,{fields:[fe.sessionId],references:[u.id]})})),Oa=i(G,({one:e})=>({session:e(u,{fields:[G.sessionId],references:[u.id]}),instruction:e(n,{fields:[G.instructionId],references:[n.id]})})),Ma=i(P,({one:e,many:t})=>({owner:e(o,{fields:[P.userId],references:[o.id]}),project:e(r,{fields:[P.projectId],references:[r.id]}),exposures:t(K)})),La=i(K,({one:e})=>({session:e(u,{fields:[K.sessionId],references:[u.id]}),owner:e(o,{fields:[K.userId],references:[o.id]}),assignment:e(P,{fields:[K.assignmentId],references:[P.id]})})),Ha=i(D,({one:e,many:t})=>({packInstructions:t($),forkedFrom:e(D,{fields:[D.forkedFromId],references:[D.id]})})),Ua=i($,({one:e})=>({pack:e(D,{fields:[$.packId],references:[D.id]}),instruction:e(n,{fields:[$.instructionId],references:[n.id]})})),Ba=i(Ie,({one:e})=>({instruction:e(n,{fields:[Ie.instructionId],references:[n.id]})})),Va=i(s,({one:e,many:t})=>({parent:e(s,{fields:[s.parentId],references:[s.id]}),evals:t(q),evalRuns:t(E),benchmarks:t(ye),evalJobs:t(we),evalConversations:t(je)})),Ga=i(q,({one:e,many:t})=>({evalTarget:e(s,{fields:[q.evalTargetId],references:[s.id]}),runs:t(E)})),Fa=i(E,({one:e})=>({eval:e(q,{fields:[E.evalId],references:[q.id]}),evalTarget:e(s,{fields:[E.evalTargetId],references:[s.id]})})),Ja=i(ye,({one:e})=>({evalTarget:e(s,{fields:[ye.evalTargetId],references:[s.id]})})),$a=i(we,({one:e})=>({evalTarget:e(s,{fields:[we.evalTargetId],references:[s.id]})})),Qa=i(je,({one:e})=>({evalTarget:e(s,{fields:[je.evalTargetId],references:[s.id]})})),Ya=i(Y,({one:e})=>({session:e(u,{fields:[Y.sessionId],references:[u.id]}),profile:e(o,{fields:[Y.userId],references:[o.id]})}));var tt=0,zr=0,ot=0,Rr=0;var Wa=0;function Po(){tt++,tt>zr&&(zr=tt)}p(Po,"trackDbOpStart");function Ko(){tt>0&&tt--}p(Ko,"trackDbOpEnd");function Co(){ot++,ot>Rr&&(Rr=ot)}p(Co,"trackHeavyDbOpStart");function qo(){ot>0&&ot--}p(qo,"trackHeavyDbOpEnd");function kr(){Wa++}p(kr,"recordQueryDeadline");var qt,Mt,Oo=!1,Ct;var Er,Lt,Ot;function Pr(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}p(Pr,"getEnv");function Kr(){if(Oo)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!qt){let e=process.env.PG_APPLICATION_NAME||"rulemetric",t=Number(process.env.PG_POOL_MAX)||3,a=Number(process.env.PG_CONNECT_TIMEOUT_S)||10,d=Number(process.env.PG_STATEMENT_TIMEOUT_MS)||0,m=Number(process.env.PG_IDLE_TIMEOUT)||5,N=Number(process.env.PG_KEEP_ALIVE_S)||60;Mt=br(Pr("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:a,idle_timeout:m,keep_alive:N,max_lifetime:300,connection:{application_name:e,...d>0?{statement_timeout:d}:{}}}),qt=Sr(Mt,{schema:Kt})}return qt}p(Kr,"getDb");function Cr(){if(Oo)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Ot){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;Lt=br(Pr("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:Number(process.env.PG_CONNECT_TIMEOUT_S)||10,idle_timeout:Number(process.env.PG_IDLE_TIMEOUT)||5,keep_alive:Number(process.env.PG_KEEP_ALIVE_S)||60,max_lifetime:300,connection:{application_name:e}}),Ot=Sr(Lt,{schema:Kt})}return Ot}p(Cr,"getHeavyDb");async function Xa(){if(Ct)return Ct;Oo=!0;let e=Mt,t=Er,a=Lt;return Mt=void 0,qt=void 0,Er=void 0,Lt=void 0,Ot=void 0,Ct=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),a?a.end({timeout:5}):Promise.resolve()]).then(()=>{}),Ct}p(Xa,"closeDb");var Za=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function qr(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Za.has(a)}p(qr,"isRetryableConnectError");var ed=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function Or(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&ed.has(a)}p(Or,"isRetryableResetError");async function Mr(e,t={}){let a=t.attempts??3,d=t.baseMs??100,m;for(let N=0;N<a;N++)try{return await e()}catch(A){m=A;let H=qr(A)||t.retryResets===!0&&Or(A);if(N===a-1||!H)throw A;await new Promise(X=>setTimeout(X,d*2**N))}throw m}p(Mr,"withDbRetry");var Ht=class extends Error{static{p(this,"QueryDeadlineError")}code="QUERY_DEADLINE";constructor(t){super(`Query exceeded the client-side deadline of ${t}ms \u2014 the DB pool is likely saturated (acquire-wait) or holding a dead socket; failing fast to avoid pinning the caller. See client.ts.`),this.name="QueryDeadlineError"}};function Lr(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}p(Lr,"queryDeadlineMs");function Hr(){let e=Number(process.env.PG_HEAVY_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:6e4}p(Hr,"heavyQueryDeadlineMs");function td(e,t,a=!0){let d,m=new Promise((N,A)=>{d=setTimeout(()=>{a&&kr(),A(new Ht(t))},t);let H=d;typeof H.unref=="function"&&H.unref()});return Promise.race([e,m]).finally(()=>clearTimeout(d))}p(td,"raceWithDeadline");var Ur=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),Br=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function Mo(e,t=!1,a=0,d=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(m,N,A){if(N==="then"){let X=Reflect.get(m,N,A);return typeof X!="function"?X:(Fr,Jr)=>{let $r=d?Co:Po,Qr=d?qo:Ko;$r();let Lo=Mr(()=>new Promise((Yr,Wr)=>X.call(m,Yr,Wr)),{retryResets:t});return(a>0?td(Lo,a,!d):Lo).finally(Qr).then(Fr,Jr)}}let H=Reflect.get(m,N,A);return typeof H=="function"?(...X)=>Mo(H.apply(m,X),t,a,d):H}})}p(Mo,"wrapBuilder");function Vr(e,t=!1){let a=t?Co:Po,d=t?qo:Ko;a();try{return Promise.resolve(e()).finally(d)}catch(m){throw d(),m}}p(Vr,"gaugeTransaction");var Gr=new Proxy({},{get(e,t){let a=Kr(),d=a[t];if(typeof t=="string"&&Ur.has(t)&&typeof d=="function"){let m=Br.has(t),N=Lr();return(...A)=>Mo(d.apply(a,A),m,N)}return t==="transaction"&&typeof d=="function"?(...m)=>Vr(()=>d.apply(a,m)):d}}),od=new Proxy({},{get(e,t){let a=Cr(),d=a[t];if(typeof t=="string"&&Ur.has(t)&&typeof d=="function"){let m=Br.has(t);return(...N)=>Mo(d.apply(a,N),m,Hr(),!0)}return t==="transaction"&&typeof d=="function"?(...m)=>Vr(()=>d.apply(a,m),!0):d}});export{Ho as a,Kr as b,Xa as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as t}from"./chunk-ZLLER3HP.js";import{existsSync as o}from"node:fs";function s(e,r){let n=a(e,r);return n.anchored?null:{skipped:n.code,reason:n.reason}}t(s,"anchorRefusal");function a(e,r=o){let{name:n}=e;return e.instructionId||e.projectPath?{anchored:!0,kind:"link",...e.instructionId?{instructionId:e.instructionId}:{},...e.projectPath?{projectPath:e.projectPath}:{}}:n.startsWith("/")?r(n)?{anchored:!0,kind:"file",path:n}:{anchored:!1,code:"missing-file",reason:`target "${n}" names a file that does not exist, so there is nothing to measure or write back to. The file was moved or deleted, or this checkout is gone.`}:{anchored:!1,code:"unanchored",reason:`target "${n}" is not named by an absolute path, so it is not anchored to any file. A promotion here would rewrite the eval target row and nothing else \u2014 no session reads it. Enroll a target named by the file it measures, or turn autoRunEnabled off.`}}t(a,"resolveTargetAnchor");export{s as a,a as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{d as i,e as n,g,h as m}from"./chunk-NJ5UED3H.js";import{b as f}from"./chunk-ZXF5NE54.js";import{a as s}from"./chunk-ZLLER3HP.js";import{Box as u,Text as t}from"ink";import{jsx as l,jsxs as e}from"react/jsx-runtime";var y={pending:{glyph:"\u25CC",color:n},queued:{glyph:"\u25CC",color:n},running:{glyph:"\u25CF",color:i},completed:{glyph:"\u2713",color:g},failed:{glyph:"\u2717",color:m},cancelled:{glyph:"\u2298",color:n}};function b(c){let p=Date.now()-new Date(c).getTime(),r=Math.floor(p/6e4);if(r<1)return"now";if(r<60)return`${r}m`;let o=Math.floor(r/60);return o<24?`${o}h`:`${Math.floor(o/24)}d`}s(b,"ago");function w({jobs:c,selectedIndex:p,focused:r}){return c.length===0?e(u,{flexDirection:"column",paddingX:1,children:[l(t,{bold:!0,color:i,children:"\u25BC Active jobs"}),l(t,{dimColor:!0,children:" (no jobs yet \u2014 press tab to focus the form below)"})]}):e(u,{flexDirection:"column",paddingX:1,children:[e(t,{bold:!0,color:i,children:["\u25BC Active jobs (last ",c.length,")"]}),c.map((o,h)=>{let d=r&&h===p,a=y[o.status]??{glyph:"?",color:n},x=o.config?.projectPath??"",T=(o.config?.prompt??"").slice(0,30);return e(t,{wrap:"truncate-end",children:[l(t,{color:d?i:n,children:d?"\u25B6 ":" "}),e(t,{color:a.color,children:[a.glyph," "]}),l(t,{dimColor:!0,children:o.status.padEnd(10)}),l(t,{children:f(o.tool).padEnd(14)}),l(t,{dimColor:!0,children:x.padEnd(28)}),e(t,{children:['"',T,'"']}),e(t,{dimColor:!0,children:[" ",b(o.createdAt)]})]},o.id)})]})}s(w,"ActiveJobsList");export{w as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as l}from"./chunk-
|
|
1
|
+
import{b as l}from"./chunk-RFISMWRW.js";import{a as p}from"./chunk-5RBLIVBF.js";import{h}from"./chunk-GP46IPK2.js";import{a as c}from"./chunk-ZLLER3HP.js";async function g(t){if(!t.worktree?.create)return t;let{branch:e,baseRef:s}=t.worktree,n=await l({repoRoot:t.projectPath,branch:e,baseRef:s});return{...t,projectPath:n.path,gitBranch:n.branch}}c(g,"resolveWorktreeForLaunch");async function L(t,e){let{mirrorId:s,tool:n}=t,{config:r}=t,a=c(o=>e.logger.info(o),"log");if(e.job.attempts>1)throw new p(`process_launch is not safe to retry (attempt ${e.job.attempts}). Re-launch manually.`);r=await g(r),r.worktree?.create&&a(`Worktree resolved: ${r.projectPath} (branch ${r.gitBranch})`),a(`Launching ${n}...`);let{getLauncher:f}=await import("./dist-XEWF3R3N.js"),i=await f(n).launch(r);a(`Launch completed: sessionId=${i.sessionId}`);let u={...i,worktreePath:r.worktree?.create?r.projectPath:void 0,runId:r.runId};return await h(`/api/launch-jobs/${s}/state`,{result:u}).catch(o=>{a(`result persist failed: ${o instanceof Error?o.message:String(o)}`)}),u}c(L,"processLaunch");export{g as a,L as b};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import{a as I}from"./chunk-5RBLIVBF.js";import{a as j,d as A}from"./chunk-3UKZJAFS.js";import{c as x}from"./chunk-L6NQNVK2.js";import{a as T,b as R,c as L,d as P}from"./chunk-E7BOAZ3X.js";import{a as H}from"./chunk-UK5JOTMW.js";import{c as D,d as J,f as S}from"./chunk-B3BHB26P.js";import{e as _,f as F,h as g}from"./chunk-GP46IPK2.js";import{a as z}from"./chunk-DS4P5C4F.js";import{a as p}from"./chunk-ZLLER3HP.js";var U=p((l,{limit:a,sort:n,eventTypes:s})=>_(`/api/sessions/${l}/events?limit=${a}&sort=${n}&eventType=${encodeURIComponent(s.join(","))}&hasContent=true`),"fetchTranscriptTurns");async function rs(l,a){let{mirrorId:n,projectPath:s,projectId:r,config:u}=l,t=p(e=>a.logger.info(e),"log");if(u?.sessionId)return V({mirrorId:n,sessionId:u.sessionId},t);t(`Processing insights job ${n}...`),await g(`/api/insights-jobs/${n}/progress`,{status:"running",progress:{step:"reading_data"}});try{let{repaired:e}=await F("/api/sessions/repair-analyzed-at",{});e>0&&t(` Repaired analyzed_at on ${e} orphan session(s).`)}catch(e){t(` Warning: analyzed_at repair failed: ${e instanceof Error?e.message:String(e)}`)}let m=20,$=200,v=15*6e4,G=3,C=Date.now()+v;if(J()!=="none"){let e=0,i=0;try{for(;e<$&&Date.now()<C;){let c=await _(`/api/sessions?needsFacets=true&graderVersion=${2}&limit=${m}&offset=${i}`);if(c.length===0)break;t(` Generating facets for ${c.length} un-analyzed sessions (drained ${e} so far)...`);for(let f=0;f<c.length&&!(e>=$||Date.now()>=C);f+=G){let b=c.slice(f,f+G);await Promise.all(b.map(async y=>{if(!(e>=$||Date.now()>=C))try{let d=await A(B=>U(y.id,B));if(d.turnCount<2){e++,i++;return}let k=await S(P,d.text,4096);k&&typeof k.outcome=="string"?(await g(`/api/sessions/${y.id}/enrich`,{analysis:{source:"generated_facets",...k,graderVersion:2},...y.eventCount!=null?{analyzedEventCount:y.eventCount}:{},analyzedTurnCount:d.turnCount}),t(` Generated facets for session ${y.id} (${y.tool}, ${d.turnCount} turns)`)):i++,e++}catch(d){t(` Failed to generate facets for session ${y.id}: ${d instanceof Error?d.message:String(d)}`),e++,i++}}))}if(c.length<m)break}}catch(c){t(` Warning: facet generation failed after ${e} sessions: ${c instanceof Error?c.message:String(c)}`)}if(e>0){let c=Date.now()>=C?`time budget (${Math.round(v/6e4)}m)`:e>=$?`hard cap (${$})`:"queue empty";t(` Facet drain stopped on ${c} after ${e} session(s); the rest resume next run.`)}}let w=await Y(s,r);if(!w)throw new I("No session data found \u2014 ensure sessions are captured and enriched.");t(` Found ${w.stats.sessions} sessions, generating recommendations...`);let E=await q(s,t);E&&t(` Generator memory: ${E.split(`
|
|
2
|
+
`).length} lines of prior-advice context`);let o={},h=R.length+1;for(let e=0;e<R.length;e++){let i=R[e];t(` [${e+1}/${h}] Generating ${i.name}...`);try{await g(`/api/insights-jobs/${n}/progress`,{status:"running",progress:{step:i.name,current:e+1,total:h,partial:{...o}}})}catch(b){t(` Warning: progress update failed for ${i.name}: ${b instanceof Error?b.message:String(b)}`)}t(` Running LLM prompt for ${i.name}...`);let c=i.usesGeneratorMemory&&E?`${w.summary}
|
|
3
|
+
${E}`:w.summary,f=await S(i.prompt,c,i.maxTokens);f?(o[i.name]=f,t(` Got result for ${i.name}`)):t(` No result for ${i.name} (LLM returned null)`)}t(` [${h}/${h}] Generating at_a_glance...`),await g(`/api/insights-jobs/${n}/progress`,{status:"running",progress:{step:"at_a_glance",current:h,total:h,partial:{...o}}});let W=[w.summary,o.what_works?`
|
|
4
|
+
## What Works
|
|
5
|
+
${JSON.stringify(o.what_works)}`:"",o.friction_analysis?`
|
|
6
|
+
## Friction
|
|
7
|
+
${JSON.stringify(o.friction_analysis)}`:"",o.suggestions?`
|
|
8
|
+
## Suggestions
|
|
9
|
+
${JSON.stringify(o.suggestions)}`:"",o.on_the_horizon?`
|
|
10
|
+
## On the Horizon
|
|
11
|
+
${JSON.stringify(o.on_the_horizon)}`:""].join(`
|
|
12
|
+
`),M=await S(L,W,8192);M&&(o.at_a_glance=M),t(" Uploading results..."),t(` Done! Recommendations generated for job ${n}`),z(o);let N={recommendations:o};return await g(`/api/insights-jobs/${n}/state`,{result:N}).catch(e=>{t(`result persist failed: ${e instanceof Error?e.message:String(e)}`)}),await H(o,s,t),N}p(rs,"processInsights");async function V(l,a){let{mirrorId:n,sessionId:s}=l;a(`Analyzing session ${s} via tool CLI...`),await g(`/api/insights-jobs/${n}/progress`,{status:"running",progress:{step:"fetching_session"}});let r=await _(`/api/sessions/${s}`);if(r.analysis&&r.analysis.source==="session_analysis")return a(` Session ${s} already analyzed \u2014 skipping (idempotency guard)`),{sessionId:s,skipped:!0,reason:"already_analyzed"};let u=await A(m=>U(s,m));if(u.turnCount<2)throw new I("Session has too few conversation turns to analyze");await g(`/api/insights-jobs/${n}/progress`,{status:"running",progress:{step:"running_analysis",tool:r.tool}});let t=await D(r.tool,P,u.text);if(!t)throw new Error(`Analysis failed \u2014 ${r.tool} CLI returned no result`);return await g(`/api/sessions/${s}/enrich`,{analysis:{source:"session_analysis",tool:r.tool,...t,graderVersion:2},...r.eventCount!=null?{analyzedEventCount:r.eventCount}:{},analyzedTurnCount:u.turnCount}),a(` Session ${s} analyzed via ${r.tool}`),{sessionId:s,tool:r.tool,facets:t}}p(V,"processSessionAnalysisInline");async function q(l,a,n=_,s=x){let{asks:r,omitted:u}=s(l);try{let t=await n(`/api/insights/recommendations/history?projectPath=${encodeURIComponent(l??"")}`);return!t||!Array.isArray(t.dismissed)||!Array.isArray(t.repeated)?T({dismissed:[],repeated:[],installed:r,installedOmitted:u}):T({...t,installed:r,installedOmitted:u})}catch(t){return a(` Warning: generator memory unavailable (${t instanceof Error?t.message:String(t)}) \u2014 generating without it`),T({dismissed:[],repeated:[],installed:r,installedOmitted:u})}}p(q,"fetchGeneratorMemory");async function Y(l,a){try{let n=new URLSearchParams;a?n.set("projectId",a):l&&n.set("projectPath",l);let s=await _(`/api/insights/compute?${n}`);if(!s||s.total_sessions===0)return null;let r=Object.entries(s.tool_counts??{}).sort((t,m)=>m[1]-t[1]).slice(0,10).map(([t,m])=>`${t}: ${m}`).join(", ");return{summary:[`Sessions: ${s.total_sessions}, Messages: ${s.total_messages}, Session-hours: ${Math.round(s.total_duration_hours)} (sum of per-session spans across ${s.sessions_with_meta} measured sessions; concurrent sessions counted separately, so this exceeds elapsed time)`,`Top tools: ${r}`,s.goal_categories&&Object.keys(s.goal_categories).length>0?`Goals: ${JSON.stringify(s.goal_categories)}`:"",s.friction&&Object.keys(s.friction).length>0?`Friction: ${JSON.stringify(s.friction)}`:"",s.outcomes&&Object.keys(s.outcomes).length>0?`Outcomes: ${JSON.stringify(s.outcomes)}`:"",s.projects&&Object.keys(s.projects).length>0?`Projects: ${JSON.stringify(s.projects)}`:""].filter(Boolean).join(`
|
|
13
|
+
`),stats:{sessions:s.total_sessions,totalMessages:s.total_messages,totalSessionHours:s.total_duration_hours,measuredSessions:s.sessions_with_meta,toolCounts:s.tool_counts,goalCounts:s.goal_categories,frictionCounts:s.friction}}}catch(n){throw new O(n instanceof Error?n.message:String(n))}}p(Y,"buildDataSummaryFromApi");var O=class extends Error{static{p(this,"InsightsSummaryUnavailableError")}constructor(a){super(`Could not read session summary (retryable): ${a}`),this.name="InsightsSummaryUnavailableError"}};export{rs as a,q as b};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import{a as g,c as w}from"./chunk-UPFH72PF.js";import{f as p,g as m,h as k,i as h,j as y}from"./chunk-DS4P5C4F.js";import{a as s}from"./chunk-ZLLER3HP.js";import{existsSync as u,readFileSync as f,writeFileSync as v,copyFileSync as R,rmSync as P,statSync as x,readdirSync as $,mkdirSync as j}from"node:fs";import{join as i,dirname as L}from"node:path";import{homedir as c}from"node:os";var I=["/plugins/cache/","/plugins/marketplaces/","/node_modules/","/.git/"];function _(e){return I.some(t=>e.includes(t))}s(_,"isUnownedPath");function K(e,t){let n=i(c(),".config","rulemetric","retraction-backups",t),r=e.replace(/^\/+/,"").replace(/\//g,"__");return i(n,r)}s(K,"backupPathFor");function b(e){return e.split(`
|
|
2
|
+
`).slice(0,40).map(t=>`- ${t}`).join(`
|
|
3
|
+
`)}s(b,"shortDiff");function d(e,t,n){return{kind:e,path:t,ok:!1,refusal:n,preview:"",warnings:[]}}s(d,"refuse");function B(e){let[t,...n]=e.split("::"),r=n.join("::");if(!r)return null;switch(t){case"claude_md":return{kind:"claude_md_section",target:r};case"memory":return{kind:"memory_section",target:r};case"skill":return{kind:"skill_file",target:r};default:return null}}s(B,"pathFromContextIdentity");function D(e,t){let n=e.replace(/^skills--/,""),r=w(e);return[...(r===n?[n]:[r,n]).flatMap(a=>[i(t,...g.split("/"),a,"SKILL.md"),i(t,".claude","skills",a,"SKILL.md"),i(t,".claude","skills",`${a}.md`),i(c(),...g.split("/"),a,"SKILL.md"),i(c(),".claude","skills",a,"SKILL.md"),i(c(),".claude","skills",`${a}.md`)]),...F(n)]}s(D,"candidateSkillPaths");function F(e){let t=i(c(),".claude","plugins","marketplaces");if(!u(t))return[];let n=[];try{for(let r of $(t))n.push(i(t,r,"skills",e,"SKILL.md"),i(t,r,"plugins",e,"SKILL.md"),i(t,r,"skills",`${e}.md`))}catch{}return n}s(F,"pluginSkillPaths");function H(e){switch(e.kind){case"claude_md_section":case"memory_section":case"claude_md_block":return C(e);case"skill_file":return E(e);case"settings_hook":case"mcp_server":return N(e)}}s(H,"planRetraction");function C(e){let t=e.target;if(!u(t))return d(e.kind,t,`File does not exist: ${t}`);if(_(t))return d(e.kind,t,`Refusing to edit a path this tool does not own: ${t}`);let n=f(t,"utf-8"),r=e.body?m(n,e.body):p(n,e.heading??"");if(!r.removed){let l={"not-found":"The content is not present in this file (already removed, or edited since).",ambiguous:"The content appears more than once \u2014 refusing to guess which copy the verdict was about.","would-empty-file":"Removing it would empty the file. Delete the file by hand if that is really the intent."}[r.reason??"not-found"];return d(e.kind,t,l)}let o=[];return S(t,e.cwd)||o.push("This file is not tracked by git in this repo \u2014 the timestamped backup is your only undo."),{kind:e.kind,path:t,ok:!0,preview:b(r.removedText??""),nextContent:r.content,warnings:o}}s(C,"planFileEdit");function E(e){let t=e.target.startsWith("/")?[e.target]:D(e.target,e.cwd),n=t.find(l=>u(l));if(!n)return d("skill_file",t[0]??e.target,`No local skill file found for "${e.target}". Searched:
|
|
4
|
+
${t.join(`
|
|
5
|
+
`)}`);if(_(n))return d("skill_file",n,`"${e.target}" is installed by a plugin (${n}).
|
|
6
|
+
Deleting it would be undone by the next plugin update, and the files are not ours to remove.
|
|
7
|
+
Uninstall the plugin that provides it instead.`);let r=f(n,"utf-8"),o=[];return S(n,e.cwd)||o.push("Not tracked by git \u2014 the timestamped backup is your only undo."),{kind:"skill_file",path:n,ok:!0,deletesFile:!0,preview:b(r.split(`
|
|
8
|
+
`).slice(0,20).join(`
|
|
9
|
+
`)),warnings:o}}s(E,"planSkillDelete");function N(e){let t=e.kind==="mcp_server"?[i(e.cwd,".mcp.json"),i(e.cwd,".claude","settings.json"),i(c(),".claude","settings.json")]:[i(e.cwd,".claude","settings.json"),i(c(),".claude","settings.json"),i(e.cwd,".claude","settings.local.json")];for(let n of t){if(!u(n))continue;let r;try{r=JSON.parse(f(n,"utf-8"))}catch{continue}let o=e.kind==="mcp_server"?h(r,e.target):k(r,e.target);if(!o.removed)continue;let l=y(r,o.value);return l.length>0?d(e.kind,n,`Refusing: this rewrite would drop ${l.join(", ")} from ${n}. A settings file missing these breaks Claude Code entirely.`):{kind:e.kind,path:n,ok:!0,preview:o.removedDescriptions.map(a=>`- ${a}`).join(`
|
|
10
|
+
`),nextContent:`${JSON.stringify(o.value,null,2)}
|
|
11
|
+
`,warnings:n.endsWith("settings.local.json")?["Editing settings.local.json \u2014 this file also carries the proxy env block."]:[]}}return d(e.kind,t[0],`"${e.target}" was not found in any settings file. Searched:
|
|
12
|
+
${t.join(`
|
|
13
|
+
`)}`)}s(N,"planSettingsEdit");function S(e,t){try{let n=i(t,".git");return e.startsWith(t)&&u(n)&&x(n).isDirectory()}catch{return!1}}s(S,"isGitTracked");function J(e,t){if(!e.ok)return{applied:!1,backupPath:null,error:e.refusal??"plan is not applicable"};let n=K(e.path,t);try{j(L(n),{recursive:!0}),R(e.path,n)}catch(r){return{applied:!1,backupPath:null,error:`backup failed, nothing written: ${String(r)}`}}try{return e.deletesFile?P(e.path,{force:!0}):v(e.path,e.nextContent??""),{applied:!0,backupPath:n}}catch(r){return{applied:!1,backupPath:n,error:`write failed: ${String(r)}`}}}s(J,"applyRetraction");export{K as a,B as b,D as c,H as d,J as e};
|