@rulemetric/cli 0.16.0 → 0.17.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.
Files changed (61) hide show
  1. package/dist/chunk-2PO5I3XR.js +1 -0
  2. package/dist/chunk-3MYCWZ63.js +1 -0
  3. package/dist/chunk-4ZDE63UG.js +1 -0
  4. package/dist/{chunk-D4FP5M2B.js → chunk-AKCCNLHL.js} +1 -1
  5. package/dist/{chunk-TU2AR6XO.js → chunk-B22HYCBV.js} +1 -1
  6. package/dist/chunk-CDSSOOIG.js +1 -0
  7. package/dist/{chunk-MMMT34KO.js → chunk-CPDW7WW2.js} +10 -10
  8. package/dist/{chunk-GDLQNY4V.js → chunk-EMZFZCS4.js} +1 -1
  9. package/dist/chunk-F5GSKVF2.js +1 -0
  10. package/dist/{chunk-HYQ5YKBC.js → chunk-FCALFMZV.js} +1 -1
  11. package/dist/{chunk-RIYVZDOQ.js → chunk-FHRBW4AQ.js} +1 -1
  12. package/dist/{chunk-XQCGAPLN.js → chunk-IMN4BWAR.js} +1 -1
  13. package/dist/chunk-KUW6AVSI.js +1 -0
  14. package/dist/{chunk-IG4JMWFK.js → chunk-QXPGTEMO.js} +1 -1
  15. package/dist/{chunk-WOANSBMJ.js → chunk-RDQXK5LG.js} +1 -1
  16. package/dist/chunk-STUNT4N3.js +1 -0
  17. package/dist/chunk-SW24KZ5C.js +1 -0
  18. package/dist/chunk-VBGHPAUT.js +2 -0
  19. package/dist/{chunk-NBTC5FNV.js → chunk-X23L2MF6.js} +1 -1
  20. package/dist/chunk-XFOG2PDJ.js +1 -0
  21. package/dist/{chunk-6T6YFPBW.js → chunk-ZBTJ5R7C.js} +1 -1
  22. package/dist/chunk-ZLBYYLJZ.js +3 -0
  23. package/dist/commands/evals/agent.js +1 -1
  24. package/dist/commands/research/resume-scoped-outcomes.js +1 -0
  25. package/dist/commands/sessions/list.js +1 -1
  26. package/dist/commands/suggestions/accept.js +1 -1
  27. package/dist/commands/suggestions/undo.js +1 -1
  28. package/dist/dashboard/Dashboard.js +1 -1
  29. package/dist/dashboard/data.js +1 -1
  30. package/dist/dashboard/launcher/ActiveJobsList.js +1 -1
  31. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  32. package/dist/dashboard/launcher/NewLaunchForm.js +1 -1
  33. package/dist/{dist-UAAG2IWQ.js → dist-5647V2E7.js} +1 -1
  34. package/dist/lib/agent-loop.js +1 -1
  35. package/dist/lib/agent-presence.js +1 -0
  36. package/dist/lib/instructions/acceptance/accept-hook.js +1 -1
  37. package/dist/lib/instructions/acceptance/suggestion-accept.js +1 -1
  38. package/dist/lib/jobs/handlers/cron-auto-accept-suggestions.js +1 -1
  39. package/dist/lib/jobs/handlers/cron-reconcile-attribution.js +1 -1
  40. package/dist/lib/jobs/handlers/cron-refresh-skills.js +1 -1
  41. package/dist/lib/jobs/handlers/finalize-scoped-launch.js +1 -1
  42. package/dist/lib/jobs/handlers/prepare-suggestion-live.js +1 -1
  43. package/dist/lib/jobs/handlers/process-eval.js +1 -1
  44. package/dist/lib/jobs/handlers/process-launch.js +1 -1
  45. package/dist/lib/jobs/handlers/process-run-cleanup.js +1 -1
  46. package/dist/lib/jobs/handlers/process-suggestion-eval.js +1 -1
  47. package/dist/lib/manual-tasks.js +1 -1
  48. package/dist/lib/projects/workspace/worktree.js +1 -1
  49. package/dist/lib/scoped-outcome-store.js +1 -0
  50. package/dist/lib/work-report.js +1 -1
  51. package/oclif.manifest.json +43 -1
  52. package/package.json +6 -6
  53. package/dist/chunk-3WCX2SLU.js +0 -1
  54. package/dist/chunk-CZBO3A6B.js +0 -3
  55. package/dist/chunk-EHW2KS6R.js +0 -1
  56. package/dist/chunk-I6W2KC6W.js +0 -1
  57. package/dist/chunk-OCCJEWOF.js +0 -1
  58. package/dist/chunk-PZS55PW2.js +0 -1
  59. package/dist/chunk-TTZWVZIW.js +0 -1
  60. package/dist/chunk-U3YPVLM3.js +0 -1
  61. package/dist/chunk-XXPWPKTD.js +0 -1
@@ -1,3 +1,3 @@
1
- import{a as G,b as V,c as j,d as q}from"../../chunk-J4W6GNCF.js";import{b as M}from"../../chunk-GH4EZK2O.js";import{c as g}from"../../chunk-HTAHNQZJ.js";import{e as D}from"../../chunk-OCCJEWOF.js";import"../../chunk-XXPWPKTD.js";import"../../chunk-5TM7AOH2.js";import"../../chunk-IEQDLURA.js";import"../../chunk-KINIFUZQ.js";import"../../chunk-U3YPVLM3.js";import"../../chunk-TQM7MF5C.js";import"../../chunk-WOANSBMJ.js";import"../../chunk-IG4JMWFK.js";import"../../chunk-ZYGBABMZ.js";import"../../chunk-GIQ2HK3W.js";import"../../chunk-TTZWVZIW.js";import"../../chunk-FZMO7XSN.js";import"../../chunk-MOJY6S5J.js";import"../../chunk-I6W2KC6W.js";import"../../chunk-5A6TMSRO.js";import"../../chunk-HYQ5YKBC.js";import"../../chunk-JU5ZNXPK.js";import"../../chunk-3WCX2SLU.js";import"../../chunk-KOORMTZO.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-Q7IDLOSP.js";import"../../chunk-CZBO3A6B.js";import"../../chunk-USKRCVX3.js";import"../../chunk-7YZURVZD.js";import"../../chunk-PZS55PW2.js";import"../../chunk-QPAOX7P2.js";import"../../chunk-3ZHVP3KE.js";import"../../chunk-EFEPD4AZ.js";import"../../chunk-HOQPVOMF.js";import"../../chunk-E4CIJ67Z.js";import"../../chunk-EHW2KS6R.js";import"../../chunk-D4FP5M2B.js";import"../../chunk-CVPAKEEZ.js";import"../../chunk-VUNJGZPP.js";import"../../chunk-GGUXEZC3.js";import"../../chunk-GLBWNB2N.js";import"../../chunk-CQD2R3BA.js";import"../../chunk-3UKZJAFS.js";import"../../chunk-77FH6UZP.js";import"../../chunk-KE5K3F7J.js";import"../../chunk-PIVEJTNF.js";import"../../chunk-KR36ZDGN.js";import"../../chunk-WL34G6IR.js";import"../../chunk-GIRPEMTW.js";import"../../chunk-SIGZEQ3K.js";import"../../chunk-DQYYHX6K.js";import"../../chunk-RIYVZDOQ.js";import"../../chunk-6T6YFPBW.js";import"../../chunk-ISYU5BMU.js";import"../../chunk-DANMUHNW.js";import"../../chunk-MMMT34KO.js";import"../../chunk-FXQS7AEZ.js";import"../../chunk-LJRE3LZ2.js";import"../../chunk-TSLBCZ5P.js";import"../../chunk-65LFPUDB.js";import"../../chunk-HBDKOU2N.js";import"../../chunk-3H44B6PB.js";import"../../chunk-6UEFCMR2.js";import"../../chunk-MODXEGCU.js";import"../../chunk-MHVHGKDK.js";import"../../chunk-RBSEE2Z6.js";import"../../chunk-PDXHRF4E.js";import"../../chunk-KGU2IW54.js";import"../../chunk-M7QSC64D.js";import"../../chunk-ZKPURXUS.js";import"../../chunk-ISEUEYSC.js";import"../../chunk-GYKYJJNF.js";import"../../chunk-G7V4ZZZ3.js";import"../../chunk-LJE5J3EW.js";import"../../chunk-AHLVY52I.js";import"../../chunk-YXMAGC53.js";import"../../chunk-T7HZZ4DJ.js";import"../../chunk-DHIEGG4T.js";import"../../chunk-PPAHIVG5.js";import"../../chunk-5MXZJWQS.js";import"../../chunk-CT7FWSIU.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-OZQNSELV.js";import"../../chunk-HFGO5762.js";import"../../chunk-VS5ROGDP.js";import"../../chunk-FADINV4H.js";import"../../chunk-SWSOEYC7.js";import"../../chunk-U2NT5OSQ.js";import"../../chunk-KGURGIZ2.js";import"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import"../../chunk-FG343JM3.js";import"../../chunk-CDY7TQFZ.js";import"../../chunk-KFNFLMUR.js";import"../../chunk-4GOXEEXZ.js";import"../../chunk-JP6ULOEX.js";import"../../chunk-JNLDISBA.js";import"../../chunk-GPBN4ROE.js";import"../../chunk-6XTLP2G7.js";import"../../chunk-PJ3WHQ67.js";import{b as A,d as C,g as S,i as E,j as L,k as $}from"../../chunk-QI3FJKGK.js";import{a as O}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{f as m}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import{e as I,l as p}from"../../chunk-PZNWH4VQ.js";import{a as e}from"../../chunk-ZLLER3HP.js";import{trace as de,context as me}from"@opentelemetry/api";import{NodeSDK as W}from"@opentelemetry/sdk-node";import{OTLPTraceExporter as Y}from"@opentelemetry/exporter-trace-otlp-http";import{BatchSpanProcessor as J,ConsoleSpanExporter as z,SimpleSpanProcessor as Q}from"@opentelemetry/sdk-trace-node";import{Resource as Z}from"@opentelemetry/resources";import{ATTR_SERVICE_NAME as ee,ATTR_SERVICE_VERSION as te}from"@opentelemetry/semantic-conventions";function F(r){if(!r)return{};let n={};for(let o of r.split(",")){let s=o.indexOf("=");if(s===-1)continue;let i=o.slice(0,s).trim(),c=o.slice(s+1).trim();i&&(n[i]=c)}return n}e(F,"parseOtlpHeaders");var u=null;function T(){return process.env.TELEMETRY_ENABLED!=="false"}e(T,"isTelemetryEnabled");function x(r){if(!T()||u!==null)return"off";let n=new Z({[ee]:r.serviceName,[te]:r.serviceVersion??"0.1.0"}),o=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,s,i;if(o){let c=F(process.env.OTEL_EXPORTER_OTLP_HEADERS),l=new Y({url:`${o}/v1/traces`,headers:c});i=new J(l),s="otlp"}else if(process.env.OTEL_SPAN_EXPORT==="none")i=void 0,s="silent";else{let c=new z;i=new Q(c),s="console"}return u=new W({resource:n,spanProcessors:i?[i]:[]}),u.start(),s}e(x,"initTelemetry");async function h(){u&&(await u.shutdown(),u=null)}e(h,"shutdownTelemetry");import{SpanKind as Pe,SpanStatusCode as Re}from"@opentelemetry/api";import{trace as Ie,context as Oe}from"@opentelemetry/api";import*as f from"@sentry/node";var v=!1;function w(r){if(v)return!1;let n=process.env.SENTRY_DSN;return n?(f.init({dsn:n,serverName:r.serviceName,environment:process.env.NODE_ENV??"development",tracesSampleRate:0}),v=!0,!0):!1}e(w,"initSentry");async function y(r){v&&await f.flush(r)}e(y,"flushSentry");import{existsSync as ne,mkdirSync as oe,readFileSync as k,unlinkSync as X,writeFileSync as U}from"node:fs";import{dirname as se,join as R}from"node:path";import{execFileSync as ie}from"node:child_process";var a=R(p(),"evals-agent.lock");function ce(r){try{return process.kill(r,0),!0}catch(n){return n.code==="EPERM"}}e(ce,"pidAlive");function ae(r){if(!ce(r))return!1;try{let n=ie("ps",["-p",String(r),"-o","command="],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return/run\.js\s+evals\s+agent|evals\s+agent/.test(n)}catch{return!0}}e(ae,"isLiveAgent");function le(){try{oe(se(a),{recursive:!0})}catch{}for(let r=0;r<2;r++)try{return U(a,String(process.pid),{flag:"wx"}),{ok:!0}}catch(n){if(n.code!=="EEXIST")throw n;let o=0;try{o=Number(k(a,"utf-8").trim())}catch{}if(o&&o!==process.pid&&ae(o))return{ok:!1,holder:o};try{X(a)}catch{}}try{U(a,String(process.pid))}catch{}return{ok:!0}}e(le,"acquireAgentLock");function P(){try{ne(a)&&Number(k(a,"utf-8").trim())===process.pid&&X(a)}catch{}}e(P,"releaseAgentLock");var N=class r extends O{static{e(this,"EvalAgentCommand")}static description="The worker daemon: long-polls /api/work/next, claims jobs, and runs them locally. Installed as a launchd service by `rulemetric service install`.";static examples=["<%= config.bin %> evals agent"];async run(){await this.parse(r),this.requireAuth();let n=le();if(!n.ok){this.log(`Another rulemetric evals agent is already running (pid ${n.holder}). Refusing to start a second instance.`);return}process.env.PG_APPLICATION_NAME||="rulemetric-agent",w({serviceName:"rulemetric-agent"})&&this.log("[sentry] error capture enabled");let s=x({serviceName:"rulemetric-agent"});s==="otlp"?this.log(`[otel] traces exporting to ${process.env.OTEL_EXPORTER_OTLP_ENDPOINT}`):s==="console"?this.log("[otel] cron spans printing to stdout (set OTEL_EXPORTER_OTLP_ENDPOINT to ship to a backend)"):this.log("[otel] disabled (TELEMETRY_ENABLED=false)"),!I()&&!process.env.RULEMETRIC_API_KEY&&this.error("No auth token found. Run `rulemetric auth login` first."),this.log("Starting thin agent (Phase 4b parallel-run)..."),this.log(`Long-polling /api/work/next. Press Ctrl+C to stop.
1
+ import{a as G,b as V,c as j,d as q}from"../../chunk-J4W6GNCF.js";import{b as M}from"../../chunk-GH4EZK2O.js";import{c as g}from"../../chunk-HTAHNQZJ.js";import{e as D}from"../../chunk-3MYCWZ63.js";import"../../chunk-5TM7AOH2.js";import"../../chunk-IEQDLURA.js";import"../../chunk-KINIFUZQ.js";import"../../chunk-KOORMTZO.js";import"../../chunk-Q7IDLOSP.js";import"../../chunk-2PO5I3XR.js";import"../../chunk-TQM7MF5C.js";import"../../chunk-RDQXK5LG.js";import"../../chunk-QXPGTEMO.js";import"../../chunk-ZYGBABMZ.js";import"../../chunk-GIQ2HK3W.js";import"../../chunk-STUNT4N3.js";import"../../chunk-E4CIJ67Z.js";import"../../chunk-FZMO7XSN.js";import"../../chunk-MOJY6S5J.js";import"../../chunk-KUW6AVSI.js";import"../../chunk-5A6TMSRO.js";import"../../chunk-FCALFMZV.js";import"../../chunk-JU5ZNXPK.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-VBGHPAUT.js";import"../../chunk-GGUXEZC3.js";import"../../chunk-ZLBYYLJZ.js";import"../../chunk-USKRCVX3.js";import"../../chunk-7YZURVZD.js";import"../../chunk-SW24KZ5C.js";import"../../chunk-QPAOX7P2.js";import"../../chunk-3ZHVP3KE.js";import"../../chunk-EFEPD4AZ.js";import"../../chunk-HOQPVOMF.js";import"../../chunk-AKCCNLHL.js";import"../../chunk-CVPAKEEZ.js";import"../../chunk-VUNJGZPP.js";import"../../chunk-GLBWNB2N.js";import"../../chunk-CQD2R3BA.js";import"../../chunk-3UKZJAFS.js";import"../../chunk-77FH6UZP.js";import"../../chunk-KE5K3F7J.js";import"../../chunk-WL34G6IR.js";import"../../chunk-KR36ZDGN.js";import"../../chunk-GIRPEMTW.js";import"../../chunk-DQYYHX6K.js";import"../../chunk-4ZDE63UG.js";import"../../chunk-F5GSKVF2.js";import"../../chunk-PIVEJTNF.js";import"../../chunk-FHRBW4AQ.js";import"../../chunk-ZBTJ5R7C.js";import"../../chunk-DANMUHNW.js";import"../../chunk-ISYU5BMU.js";import"../../chunk-CPDW7WW2.js";import"../../chunk-CDSSOOIG.js";import"../../chunk-XFOG2PDJ.js";import"../../chunk-SIGZEQ3K.js";import"../../chunk-FXQS7AEZ.js";import"../../chunk-LJRE3LZ2.js";import"../../chunk-TSLBCZ5P.js";import"../../chunk-65LFPUDB.js";import"../../chunk-HBDKOU2N.js";import"../../chunk-3H44B6PB.js";import"../../chunk-6UEFCMR2.js";import"../../chunk-MODXEGCU.js";import"../../chunk-MHVHGKDK.js";import"../../chunk-RBSEE2Z6.js";import"../../chunk-PDXHRF4E.js";import"../../chunk-KGU2IW54.js";import"../../chunk-M7QSC64D.js";import"../../chunk-ZKPURXUS.js";import"../../chunk-ISEUEYSC.js";import"../../chunk-GYKYJJNF.js";import"../../chunk-G7V4ZZZ3.js";import"../../chunk-LJE5J3EW.js";import"../../chunk-AHLVY52I.js";import"../../chunk-YXMAGC53.js";import"../../chunk-T7HZZ4DJ.js";import"../../chunk-DHIEGG4T.js";import"../../chunk-PPAHIVG5.js";import"../../chunk-5MXZJWQS.js";import"../../chunk-CT7FWSIU.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-OZQNSELV.js";import"../../chunk-HFGO5762.js";import"../../chunk-VS5ROGDP.js";import"../../chunk-FADINV4H.js";import"../../chunk-SWSOEYC7.js";import"../../chunk-U2NT5OSQ.js";import"../../chunk-KGURGIZ2.js";import"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import"../../chunk-FG343JM3.js";import"../../chunk-CDY7TQFZ.js";import"../../chunk-KFNFLMUR.js";import"../../chunk-4GOXEEXZ.js";import"../../chunk-JP6ULOEX.js";import"../../chunk-JNLDISBA.js";import"../../chunk-GPBN4ROE.js";import"../../chunk-6XTLP2G7.js";import"../../chunk-PJ3WHQ67.js";import{b as A,d as C,g as S,i as E,j as L,k as $}from"../../chunk-QI3FJKGK.js";import{a as O}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{f as m}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import{e as I,l as p}from"../../chunk-PZNWH4VQ.js";import{a as e}from"../../chunk-ZLLER3HP.js";import{trace as de,context as me}from"@opentelemetry/api";import{NodeSDK as W}from"@opentelemetry/sdk-node";import{OTLPTraceExporter as Y}from"@opentelemetry/exporter-trace-otlp-http";import{BatchSpanProcessor as J,ConsoleSpanExporter as z,SimpleSpanProcessor as Q}from"@opentelemetry/sdk-trace-node";import{Resource as Z}from"@opentelemetry/resources";import{ATTR_SERVICE_NAME as ee,ATTR_SERVICE_VERSION as te}from"@opentelemetry/semantic-conventions";function F(r){if(!r)return{};let n={};for(let o of r.split(",")){let s=o.indexOf("=");if(s===-1)continue;let i=o.slice(0,s).trim(),c=o.slice(s+1).trim();i&&(n[i]=c)}return n}e(F,"parseOtlpHeaders");var u=null;function T(){return process.env.TELEMETRY_ENABLED!=="false"}e(T,"isTelemetryEnabled");function x(r){if(!T()||u!==null)return"off";let n=new Z({[ee]:r.serviceName,[te]:r.serviceVersion??"0.1.0"}),o=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,s,i;if(o){let c=F(process.env.OTEL_EXPORTER_OTLP_HEADERS),l=new Y({url:`${o}/v1/traces`,headers:c});i=new J(l),s="otlp"}else if(process.env.OTEL_SPAN_EXPORT==="none")i=void 0,s="silent";else{let c=new z;i=new Q(c),s="console"}return u=new W({resource:n,spanProcessors:i?[i]:[]}),u.start(),s}e(x,"initTelemetry");async function h(){u&&(await u.shutdown(),u=null)}e(h,"shutdownTelemetry");import{SpanKind as Pe,SpanStatusCode as Re}from"@opentelemetry/api";import{trace as Ie,context as Oe}from"@opentelemetry/api";import*as f from"@sentry/node";var v=!1;function w(r){if(v)return!1;let n=process.env.SENTRY_DSN;return n?(f.init({dsn:n,serverName:r.serviceName,environment:process.env.NODE_ENV??"development",tracesSampleRate:0}),v=!0,!0):!1}e(w,"initSentry");async function y(r){v&&await f.flush(r)}e(y,"flushSentry");import{existsSync as ne,mkdirSync as oe,readFileSync as k,unlinkSync as X,writeFileSync as U}from"node:fs";import{dirname as se,join as R}from"node:path";import{execFileSync as ie}from"node:child_process";var a=R(p(),"evals-agent.lock");function ce(r){try{return process.kill(r,0),!0}catch(n){return n.code==="EPERM"}}e(ce,"pidAlive");function ae(r){if(!ce(r))return!1;try{let n=ie("ps",["-p",String(r),"-o","command="],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return/run\.js\s+evals\s+agent|evals\s+agent/.test(n)}catch{return!0}}e(ae,"isLiveAgent");function le(){try{oe(se(a),{recursive:!0})}catch{}for(let r=0;r<2;r++)try{return U(a,String(process.pid),{flag:"wx"}),{ok:!0}}catch(n){if(n.code!=="EEXIST")throw n;let o=0;try{o=Number(k(a,"utf-8").trim())}catch{}if(o&&o!==process.pid&&ae(o))return{ok:!1,holder:o};try{X(a)}catch{}}try{U(a,String(process.pid))}catch{}return{ok:!0}}e(le,"acquireAgentLock");function P(){try{ne(a)&&Number(k(a,"utf-8").trim())===process.pid&&X(a)}catch{}}e(P,"releaseAgentLock");var N=class r extends O{static{e(this,"EvalAgentCommand")}static description="The worker daemon: long-polls /api/work/next, claims jobs, and runs them locally. Installed as a launchd service by `rulemetric service install`.";static examples=["<%= config.bin %> evals agent"];async run(){await this.parse(r),this.requireAuth();let n=le();if(!n.ok){this.log(`Another rulemetric evals agent is already running (pid ${n.holder}). Refusing to start a second instance.`);return}process.env.PG_APPLICATION_NAME||="rulemetric-agent",w({serviceName:"rulemetric-agent"})&&this.log("[sentry] error capture enabled");let s=x({serviceName:"rulemetric-agent"});s==="otlp"?this.log(`[otel] traces exporting to ${process.env.OTEL_EXPORTER_OTLP_ENDPOINT}`):s==="console"?this.log("[otel] cron spans printing to stdout (set OTEL_EXPORTER_OTLP_ENDPOINT to ship to a backend)"):this.log("[otel] disabled (TELEMETRY_ENABLED=false)"),!I()&&!process.env.RULEMETRIC_API_KEY&&this.error("No auth token found. Run `rulemetric auth login` first."),this.log("Starting thin agent (Phase 4b parallel-run)..."),this.log(`Long-polling /api/work/next. Press Ctrl+C to stop.
2
2
  `);let c=new AbortController,l=await A({configDir:p()});if(this.log(`[transcript-sync] Codex capture: ${S(l)}`),l.error)this.log(`[transcript-sync] WARNING: ${l.error}`);else if(l.mode==="allowlist")for(let t of l.roots)this.log(`[transcript-sync] \u2022 ${t}`);let d=await C({configDir:p()});if(this.log(`[transcript-sync] Pi capture: ${E(d)}`),d.error)this.log(`[transcript-sync] WARNING: ${d.error}`);else if(d.mode==="allowlist")for(let t of d.roots)this.log(`[transcript-sync] \u2022 ${t}`);let B=new M({postSnapshot:e((t,K)=>m(`/api/sessions/${t}/context-snapshots`,K),"postSnapshot"),linkInstructions:e(t=>m("/api/sessions/link-instructions",{sessionId:t}),"linkInstructions"),log:e(t=>this.log(`[transcript-sync] ${t}`),"log")}),H=new G({providers:[V(void 0,void 0,L({configDir:p(),onChange:e(t=>this.log(`[transcript-sync] Codex capture changed: ${S(t)}`),"onChange")})),j(void 0,void 0,$({configDir:p(),onChange:e(t=>this.log(`[transcript-sync] Pi capture changed: ${E(t)}`),"onChange")}))],statePath:R(p(),"transcript-sync-state.json"),importTranscript:e(t=>m("/api/sessions/import",t),"importTranscript"),emitInstructions:e(t=>B.emit(t),"emitInstructions"),log:e(t=>this.log(`[transcript-sync] ${t}`),"log")});q(H,{signal:c.signal,log:e(t=>this.log(`[transcript-sync] ${t}`),"log")});let _=e(async t=>{this.log(`
3
3
  [${t}] shutting down agent...`),c.abort(),await Promise.allSettled([y(2e3),h(),g()]),P(),process.exit(0)},"shutdown");process.on("SIGINT",()=>{_("SIGINT")}),process.on("SIGTERM",()=>{_("SIGTERM")});let b=!1;try{await D({signal:c.signal,log:e(t=>this.log(t),"log"),version:this.config.version,readInstalledVersion:e(()=>{try{return JSON.parse(k(R(this.config.root,"package.json"),"utf-8")).version??null}catch{return null}},"readInstalledVersion"),onVersionDrift:e(()=>{b=!0},"onVersionDrift")}),b&&(this.log("[upgrade] Installed CLI version changed \u2014 restarting worker onto the new code."),await Promise.allSettled([y(2e3),h(),g()]),P(),process.exit(1))}finally{P(),await g()}}};export{N as default};
@@ -0,0 +1 @@
1
+ import{g as d}from"../../chunk-CDSSOOIG.js";import{c as i,s as a}from"../../chunk-XFOG2PDJ.js";import"../../chunk-SIGZEQ3K.js";import{a as s}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as o}from"../../chunk-ZLLER3HP.js";import{Flags as p}from"@oclif/core";var r=class n extends s{static{o(this,"ResearchResumeScopedOutcomes")}static description="Finish uploading scoped headless outcomes whose receipt was preserved locally after the actor exited but whose capture or verification upload failed. Never re-runs the actor or re-measures the repository; ships the stored receipt and exact transcript only.";static hidden=!0;static examples=["<%= config.bin %> research resume-scoped-outcomes","<%= config.bin %> research resume-scoped-outcomes --list"];static flags={list:p.boolean({description:"Show the outcome store without uploading anything",default:!1})};async run(){let{flags:l}=await this.parse(n);if(this.log(`Outcome store: ${i()}`),l.list){for(let e of a()){let c=e.ledger?.completedAt?"delivered":e.receipt?`pending (${e.ledger?.completed.join(",")||"nothing"} done${e.ledger?.lastError?`; last error at ${e.ledger.lastError.step}: ${e.ledger.lastError.message}`:""})`:"unmeasured (no receipt)";this.log(`${e.confirmationId}/${e.externalSessionId}: ${c}`)}return}this.requireAuth();let t=await d(e=>this.log(e));this.log(`scanned=${t.scanned} delivered=${t.delivered} failed=${t.failed} unmeasured=${t.unmeasured}`),t.failed>0&&this.exit(1)}};export{r as default};
@@ -1 +1 @@
1
- import{a as l}from"../../chunk-MMMT34KO.js";import{a}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as r}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as n}from"../../chunk-ZLLER3HP.js";import{Flags as c}from"@oclif/core";var o=class d extends a{static{n(this,"SessionsList")}static description="List captured sessions";static examples=["<%= config.bin %> sessions list","<%= config.bin %> sessions list --tool claude_code","<%= config.bin %> sessions list --tool codex"];static flags={tool:c.string({description:`Filter by tool (${l.join(", ")})`}),limit:c.integer({description:"Max results",default:20})};async run(){let{flags:e}=await this.parse(d);this.requireAuth();let s=new URLSearchParams;e.tool&&s.set("tool",e.tool),s.set("limit",String(e.limit));let i=await r(`/api/sessions?${s}`);if(i.length===0){this.log("No sessions found.");return}for(let t of i){let p=t.projectPath?.split("/").pop()??"\u2014",m=t.analysis?.adherenceScore!=null?`${t.analysis.adherenceScore}%`:"\u2014",u=new Date(t.startedAt).toLocaleDateString();this.log(`${t.id.slice(0,8)} ${t.tool.padEnd(15)} ${p.padEnd(20)} ${String(t.eventCount).padStart(5)} events ${m.padStart(4)} adherence ${u}`)}}};export{o as default};
1
+ import{a as l}from"../../chunk-CPDW7WW2.js";import{a}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as r}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as n}from"../../chunk-ZLLER3HP.js";import{Flags as c}from"@oclif/core";var o=class d extends a{static{n(this,"SessionsList")}static description="List captured sessions";static examples=["<%= config.bin %> sessions list","<%= config.bin %> sessions list --tool claude_code","<%= config.bin %> sessions list --tool codex"];static flags={tool:c.string({description:`Filter by tool (${l.join(", ")})`}),limit:c.integer({description:"Max results",default:20})};async run(){let{flags:e}=await this.parse(d);this.requireAuth();let s=new URLSearchParams;e.tool&&s.set("tool",e.tool),s.set("limit",String(e.limit));let i=await r(`/api/sessions?${s}`);if(i.length===0){this.log("No sessions found.");return}for(let t of i){let p=t.projectPath?.split("/").pop()??"\u2014",m=t.analysis?.adherenceScore!=null?`${t.analysis.adherenceScore}%`:"\u2014",u=new Date(t.startedAt).toLocaleDateString();this.log(`${t.id.slice(0,8)} ${t.tool.padEnd(15)} ${p.padEnd(20)} ${String(t.eventCount).padStart(5)} events ${m.padStart(4)} adherence ${u}`)}}};export{o as default};
@@ -1 +1 @@
1
- import{a}from"../../chunk-WLVQJH4E.js";import{h as r}from"../../chunk-RIYVZDOQ.js";import"../../chunk-6T6YFPBW.js";import"../../chunk-ISYU5BMU.js";import"../../chunk-DANMUHNW.js";import"../../chunk-LJRE3LZ2.js";import{a as o}from"../../chunk-MODXEGCU.js";import"../../chunk-OZQNSELV.js";import"../../chunk-HFGO5762.js";import"../../chunk-VS5ROGDP.js";import"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import{a as i}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as s}from"../../chunk-ZLLER3HP.js";import{Args as m,Flags as p}from"@oclif/core";var e=class c extends i{static{s(this,"SuggestionsAccept")}static description="Accept a suggestion and append the instruction to CLAUDE.md";static examples=["<%= config.bin %> suggestions accept <id>"];static args={id:m.string({description:"Suggestion UUID from `suggestions list`",required:!0})};static flags={force:p.boolean({description:"Add the rule even if this project already says the same thing in other words",default:!1})};async run(){let{args:t,flags:d}=await this.parse(c);this.requireAuth(),a(t.id,"suggestion ID");let n=await r({suggestionId:t.id,dir:process.cwd(),projectPath:o(process.cwd()),actor:"human",force:d.force});for(let g of n.messages)this.log(g)}};export{e as default};
1
+ import{a}from"../../chunk-WLVQJH4E.js";import{h as r}from"../../chunk-FHRBW4AQ.js";import"../../chunk-ZBTJ5R7C.js";import"../../chunk-DANMUHNW.js";import"../../chunk-ISYU5BMU.js";import"../../chunk-LJRE3LZ2.js";import{a as o}from"../../chunk-MODXEGCU.js";import"../../chunk-OZQNSELV.js";import"../../chunk-HFGO5762.js";import"../../chunk-VS5ROGDP.js";import"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import{a as i}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as s}from"../../chunk-ZLLER3HP.js";import{Args as m,Flags as p}from"@oclif/core";var e=class c extends i{static{s(this,"SuggestionsAccept")}static description="Accept a suggestion and append the instruction to CLAUDE.md";static examples=["<%= config.bin %> suggestions accept <id>"];static args={id:m.string({description:"Suggestion UUID from `suggestions list`",required:!0})};static flags={force:p.boolean({description:"Add the rule even if this project already says the same thing in other words",default:!1})};async run(){let{args:t,flags:d}=await this.parse(c);this.requireAuth(),a(t.id,"suggestion ID");let n=await r({suggestionId:t.id,dir:process.cwd(),projectPath:o(process.cwd()),actor:"human",force:d.force});for(let g of n.messages)this.log(g)}};export{e as default};
@@ -1 +1 @@
1
- import{a as f,c as g}from"../../chunk-SFZPFNC6.js";import{a as l}from"../../chunk-WLVQJH4E.js";import{d as p}from"../../chunk-RIYVZDOQ.js";import"../../chunk-6T6YFPBW.js";import"../../chunk-ISYU5BMU.js";import"../../chunk-DANMUHNW.js";import"../../chunk-LJRE3LZ2.js";import{a as m}from"../../chunk-MODXEGCU.js";import"../../chunk-OZQNSELV.js";import"../../chunk-HFGO5762.js";import"../../chunk-VS5ROGDP.js";import{d as u}from"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import{a as d}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{f as a}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as c}from"../../chunk-ZLLER3HP.js";import{relative as h}from"node:path";import{Args as P}from"@oclif/core";var o=class I extends d{static{c(this,"SuggestionsUndo")}static description="Remove an adopted instruction from this project's agent instruction files and stop it being re-proposed";static examples=["<%= config.bin %> suggestions undo <instruction-id>"];static args={instructionId:P.string({description:"Instruction ID from the rulemetric:start marker in the instruction file",required:!0})};async run(){let{args:r}=await this.parse(I);this.requireAuth(),l(r.instructionId,"instruction ID");let e=m(process.cwd()),i=process.cwd(),v=u(i).map(t=>h(i,t.path)),w=p(i,r.instructionId).map(t=>h(i,t.path)),A=await f({dir:process.cwd(),instructionId:r.instructionId,projectPath:e}),n=null,s=null;try{n=(await a("/api/instruction-suggestions/undo",{projectPath:e,instructionId:r.instructionId})).name}catch(t){s=t instanceof Error?t.message:String(t)}for(let t of g({stripped:w,searched:v,reversals:A,name:n,instructionId:r.instructionId,dismissalError:s}))this.log(t);s&&this.exit(1)}};export{o as default};
1
+ import{a as f,c as g}from"../../chunk-SFZPFNC6.js";import{a as l}from"../../chunk-WLVQJH4E.js";import{d as p}from"../../chunk-FHRBW4AQ.js";import"../../chunk-ZBTJ5R7C.js";import"../../chunk-DANMUHNW.js";import"../../chunk-ISYU5BMU.js";import"../../chunk-LJRE3LZ2.js";import{a as m}from"../../chunk-MODXEGCU.js";import"../../chunk-OZQNSELV.js";import"../../chunk-HFGO5762.js";import"../../chunk-VS5ROGDP.js";import{d as u}from"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import{a as d}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{f as a}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as c}from"../../chunk-ZLLER3HP.js";import{relative as h}from"node:path";import{Args as P}from"@oclif/core";var o=class I extends d{static{c(this,"SuggestionsUndo")}static description="Remove an adopted instruction from this project's agent instruction files and stop it being re-proposed";static examples=["<%= config.bin %> suggestions undo <instruction-id>"];static args={instructionId:P.string({description:"Instruction ID from the rulemetric:start marker in the instruction file",required:!0})};async run(){let{args:r}=await this.parse(I);this.requireAuth(),l(r.instructionId,"instruction ID");let e=m(process.cwd()),i=process.cwd(),v=u(i).map(t=>h(i,t.path)),w=p(i,r.instructionId).map(t=>h(i,t.path)),A=await f({dir:process.cwd(),instructionId:r.instructionId,projectPath:e}),n=null,s=null;try{n=(await a("/api/instruction-suggestions/undo",{projectPath:e,instructionId:r.instructionId})).name}catch(t){s=t instanceof Error?t.message:String(t)}for(let t of g({stripped:w,searched:v,reversals:A,name:n,instructionId:r.instructionId,dismissalError:s}))this.log(t);s&&this.exit(1)}};export{o as default};
@@ -1 +1 @@
1
- import{a as O}from"../chunk-DVN7GFJG.js";import{a as E}from"../chunk-O2SDD2WW.js";import{a as M}from"../chunk-GBMF3TP6.js";import{a as U}from"../chunk-MYGVN6X4.js";import{a as D}from"../chunk-WSCK4WNK.js";import{a as R}from"../chunk-4Z5ECCJE.js";import"../chunk-ARNZQBMX.js";import{a as B,b as S,c as F}from"../chunk-XQCGAPLN.js";import{a as z}from"../chunk-GDLQNY4V.js";import"../chunk-PJ4RIUI3.js";import"../chunk-NBTC5FNV.js";import"../chunk-TU2AR6XO.js";import{a as u,b as T,d as a,e as v}from"../chunk-NJ5UED3H.js";import"../chunk-NWV66NMA.js";import"../chunk-ZXF5NE54.js";import"../chunk-MMMT34KO.js";import{a as G}from"../chunk-3AV3GTMP.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import{a as b}from"../chunk-ZLLER3HP.js";import{useState as h,useEffect as lt,useCallback as H,useRef as dt}from"react";import{render as J,Box as c,Text as e,useInput as ct,useApp as ut}from"ink";import{Fragment as wt,jsx as t,jsxs as f}from"react/jsx-runtime";var ht=90;function V(){let s=process.stdout.columns||80,n=Math.min(160,s),r=n>=ht,d=r?Math.floor(n/2):n,x=Math.max(6,Math.min(10,d-34));return{dashWidth:n,wide:r,halfWidth:d,barWidth:x}}b(V,"getLayout");function K({active:s,providerName:n}){return f(c,{justifyContent:"space-between",paddingX:1,children:[t(c,{gap:1,children:u.map(r=>t(e,{bold:s===r,color:s===r?a:v,children:s===r?`[ ${T[r]} ]`:` ${T[r]} `},r))}),n&&t(e,{color:a,bold:!0,children:n})]})}b(K,"PeriodTabs");function Q({width:s,insightsFocused:n=!1}){return t(c,{borderStyle:"round",borderColor:v,width:s,justifyContent:"center",paddingX:1,children:f(e,{children:[t(e,{color:a,bold:!0,children:"<"}),t(e,{color:a,children:">"}),t(e,{dimColor:!0,children:" switch "}),t(e,{color:a,bold:!0,children:"q"}),t(e,{dimColor:!0,children:" quit "}),t(e,{color:a,bold:!0,children:"s"}),f(e,{dimColor:!0,children:[" ",n?"back":"suggestions"," "]}),t(e,{color:a,bold:!0,children:"1"}),t(e,{dimColor:!0,children:"-"}),t(e,{color:a,bold:!0,children:"5"}),t(e,{dimColor:!0,children:" period "}),t(e,{color:a,bold:!0,children:"r"}),t(e,{dimColor:!0,children:" refresh "}),t(e,{color:a,bold:!0,children:"n"}),t(e,{dimColor:!0,children:" new session "}),t(e,{color:a,bold:!0,children:"m"}),t(e,{dimColor:!0,children:" measurement "}),t(e,{color:a,bold:!0,children:"l"}),t(e,{dimColor:!0,children:" launcher"})]})})}b(Q,"StatusBar");function ft({wide:s,width:n,children:r}){return s?t(c,{width:n,children:r}):t(wt,{children:r})}b(ft,"Row");function mt({initialLocal:s,initialApi:n,initialInstructions:r,initialPeriod:d,initialLauncherFocused:x=!1}){let{exit:j}=ut(),[o,L]=h(d),[Z,tt]=h(s),[W,et]=h(n),[ot,it]=h(r),[rt,k]=h(!1),[Y,_]=h(!1),[m,I]=h(!1),[q,N]=h(x),nt=G()?.orgSlug??null,y=dt(null),st=V(),g=H(async()=>{k(!0);let[i,p,P]=await Promise.all([B(),S(),F()]);tt(i),et(p),it(P),k(!1)},[]);lt(()=>{let i=setInterval(g,3e4);return()=>clearInterval(i)},[g]);let w=H(i=>{i!==o&&(L(i),y.current&&clearTimeout(y.current),y.current=setTimeout(g,300))},[o,g]);ct((i,p)=>{if(q||Y)return;if(i==="q"){if(m){I(!1);return}j();return}if(i==="s"){I(A=>!A);return}if(p.escape&&m){I(!1);return}if(i==="m"&&!m){_(!0);return}if(i==="l"&&!m){N(!0);return}if(m)return;if(i==="r"){g();return}if(i==="n"){import("../dist-UAAG2IWQ.js").then(({getLauncher:A})=>{A("claude_code").launch({projectPath:process.cwd(),mode:"interactive"})});return}let P=u.indexOf(o);p.leftArrow?w(u[(P-1+u.length)%u.length]):p.rightArrow||p.tab?w(u[(P+1)%u.length]):i==="1"?w("today"):i==="2"?w("week"):i==="3"?w("30days"):i==="4"?w("month"):i==="5"&&w("all")});let{dashWidth:l,wide:X,halfWidth:at,barWidth:C}=st,$=X?at:l;return Y?t(U,{width:l,onClose:()=>_(!1)}):rt?f(c,{flexDirection:"column",width:l,children:[t(K,{active:o}),t(c,{borderStyle:"round",borderColor:a,paddingX:1,width:l,children:f(e,{dimColor:!0,children:["Loading ",T[o],"..."]})}),t(Q,{width:l})]}):q?t(c,{flexDirection:"column",width:l,children:t(z,{onClose:()=>N(!1),activeOrg:nt,defaultProjectPath:process.cwd(),width:l})}):f(c,{flexDirection:"column",width:l,children:[t(K,{active:o}),t(R,{local:Z,api:W,label:T[o],width:l}),f(ft,{wide:X,width:l,children:[t(D,{api:W,width:$,barWidth:C}),t(O,{api:W,width:$,barWidth:C})]}),t(M,{instructions:ot,width:l,barWidth:C}),t(E,{api:W,width:l,focused:m}),t(Q,{width:l,insightsFocused:m})]})}b(mt,"InteractiveDashboard");async function Bt(s="week",n={}){let[r,d,x]=await Promise.all([B(),S(),F()]);if(process.stdin.isTTY&&process.stdout.isTTY){let{waitUntilExit:o}=J(t(mt,{initialLocal:r,initialApi:d,initialInstructions:x,initialPeriod:s,initialLauncherFocused:n.openLauncher??!1}));await o()}else{let o=V(),{unmount:L}=J(f(c,{flexDirection:"column",width:o.dashWidth,children:[t(R,{local:r,api:d,label:T[s],width:o.dashWidth}),t(D,{api:d,width:o.dashWidth,barWidth:o.barWidth}),t(O,{api:d,width:o.dashWidth,barWidth:o.barWidth}),t(M,{instructions:x,width:o.dashWidth,barWidth:o.barWidth}),t(E,{api:d,width:o.dashWidth})]}),{patchConsole:!1});L()}}b(Bt,"renderDashboard");export{Bt as renderDashboard};
1
+ import{a as R}from"../chunk-4Z5ECCJE.js";import{a as O}from"../chunk-DVN7GFJG.js";import{a as E}from"../chunk-O2SDD2WW.js";import{a as M}from"../chunk-GBMF3TP6.js";import{a as U}from"../chunk-MYGVN6X4.js";import{a as D}from"../chunk-WSCK4WNK.js";import"../chunk-ARNZQBMX.js";import{a as B,b as S,c as F}from"../chunk-IMN4BWAR.js";import{a as z}from"../chunk-EMZFZCS4.js";import"../chunk-PJ4RIUI3.js";import"../chunk-X23L2MF6.js";import"../chunk-B22HYCBV.js";import"../chunk-ZXF5NE54.js";import{a as u,b as T,d as a,e as v}from"../chunk-NJ5UED3H.js";import"../chunk-NWV66NMA.js";import"../chunk-CPDW7WW2.js";import{a as G}from"../chunk-3AV3GTMP.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import{a as b}from"../chunk-ZLLER3HP.js";import{useState as h,useEffect as lt,useCallback as H,useRef as dt}from"react";import{render as J,Box as c,Text as e,useInput as ct,useApp as ut}from"ink";import{Fragment as wt,jsx as t,jsxs as f}from"react/jsx-runtime";var ht=90;function V(){let s=process.stdout.columns||80,n=Math.min(160,s),r=n>=ht,d=r?Math.floor(n/2):n,x=Math.max(6,Math.min(10,d-34));return{dashWidth:n,wide:r,halfWidth:d,barWidth:x}}b(V,"getLayout");function K({active:s,providerName:n}){return f(c,{justifyContent:"space-between",paddingX:1,children:[t(c,{gap:1,children:u.map(r=>t(e,{bold:s===r,color:s===r?a:v,children:s===r?`[ ${T[r]} ]`:` ${T[r]} `},r))}),n&&t(e,{color:a,bold:!0,children:n})]})}b(K,"PeriodTabs");function Q({width:s,insightsFocused:n=!1}){return t(c,{borderStyle:"round",borderColor:v,width:s,justifyContent:"center",paddingX:1,children:f(e,{children:[t(e,{color:a,bold:!0,children:"<"}),t(e,{color:a,children:">"}),t(e,{dimColor:!0,children:" switch "}),t(e,{color:a,bold:!0,children:"q"}),t(e,{dimColor:!0,children:" quit "}),t(e,{color:a,bold:!0,children:"s"}),f(e,{dimColor:!0,children:[" ",n?"back":"suggestions"," "]}),t(e,{color:a,bold:!0,children:"1"}),t(e,{dimColor:!0,children:"-"}),t(e,{color:a,bold:!0,children:"5"}),t(e,{dimColor:!0,children:" period "}),t(e,{color:a,bold:!0,children:"r"}),t(e,{dimColor:!0,children:" refresh "}),t(e,{color:a,bold:!0,children:"n"}),t(e,{dimColor:!0,children:" new session "}),t(e,{color:a,bold:!0,children:"m"}),t(e,{dimColor:!0,children:" measurement "}),t(e,{color:a,bold:!0,children:"l"}),t(e,{dimColor:!0,children:" launcher"})]})})}b(Q,"StatusBar");function ft({wide:s,width:n,children:r}){return s?t(c,{width:n,children:r}):t(wt,{children:r})}b(ft,"Row");function mt({initialLocal:s,initialApi:n,initialInstructions:r,initialPeriod:d,initialLauncherFocused:x=!1}){let{exit:j}=ut(),[o,L]=h(d),[Z,tt]=h(s),[W,et]=h(n),[ot,it]=h(r),[rt,k]=h(!1),[Y,_]=h(!1),[m,I]=h(!1),[q,N]=h(x),nt=G()?.orgSlug??null,y=dt(null),st=V(),g=H(async()=>{k(!0);let[i,p,P]=await Promise.all([B(),S(),F()]);tt(i),et(p),it(P),k(!1)},[]);lt(()=>{let i=setInterval(g,3e4);return()=>clearInterval(i)},[g]);let w=H(i=>{i!==o&&(L(i),y.current&&clearTimeout(y.current),y.current=setTimeout(g,300))},[o,g]);ct((i,p)=>{if(q||Y)return;if(i==="q"){if(m){I(!1);return}j();return}if(i==="s"){I(A=>!A);return}if(p.escape&&m){I(!1);return}if(i==="m"&&!m){_(!0);return}if(i==="l"&&!m){N(!0);return}if(m)return;if(i==="r"){g();return}if(i==="n"){import("../dist-5647V2E7.js").then(({getLauncher:A})=>{A("claude_code").launch({projectPath:process.cwd(),mode:"interactive"})});return}let P=u.indexOf(o);p.leftArrow?w(u[(P-1+u.length)%u.length]):p.rightArrow||p.tab?w(u[(P+1)%u.length]):i==="1"?w("today"):i==="2"?w("week"):i==="3"?w("30days"):i==="4"?w("month"):i==="5"&&w("all")});let{dashWidth:l,wide:X,halfWidth:at,barWidth:C}=st,$=X?at:l;return Y?t(U,{width:l,onClose:()=>_(!1)}):rt?f(c,{flexDirection:"column",width:l,children:[t(K,{active:o}),t(c,{borderStyle:"round",borderColor:a,paddingX:1,width:l,children:f(e,{dimColor:!0,children:["Loading ",T[o],"..."]})}),t(Q,{width:l})]}):q?t(c,{flexDirection:"column",width:l,children:t(z,{onClose:()=>N(!1),activeOrg:nt,defaultProjectPath:process.cwd(),width:l})}):f(c,{flexDirection:"column",width:l,children:[t(K,{active:o}),t(R,{local:Z,api:W,label:T[o],width:l}),f(ft,{wide:X,width:l,children:[t(D,{api:W,width:$,barWidth:C}),t(O,{api:W,width:$,barWidth:C})]}),t(M,{instructions:ot,width:l,barWidth:C}),t(E,{api:W,width:l,focused:m}),t(Q,{width:l,insightsFocused:m})]})}b(mt,"InteractiveDashboard");async function Bt(s="week",n={}){let[r,d,x]=await Promise.all([B(),S(),F()]);if(process.stdin.isTTY&&process.stdout.isTTY){let{waitUntilExit:o}=J(t(mt,{initialLocal:r,initialApi:d,initialInstructions:x,initialPeriod:s,initialLauncherFocused:n.openLauncher??!1}));await o()}else{let o=V(),{unmount:L}=J(f(c,{flexDirection:"column",width:o.dashWidth,children:[t(R,{local:r,api:d,label:T[s],width:o.dashWidth}),t(D,{api:d,width:o.dashWidth,barWidth:o.barWidth}),t(O,{api:d,width:o.dashWidth,barWidth:o.barWidth}),t(M,{instructions:x,width:o.dashWidth,barWidth:o.barWidth}),t(E,{api:d,width:o.dashWidth})]}),{patchConsole:!1});L()}}b(Bt,"renderDashboard");export{Bt as renderDashboard};
@@ -1 +1 @@
1
- import{a,b,c}from"../chunk-XQCGAPLN.js";import"../chunk-MMMT34KO.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as loadApiInsights,c as loadLinkedInstructions,a as loadLocalStats};
1
+ import{a,b,c}from"../chunk-IMN4BWAR.js";import"../chunk-CPDW7WW2.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as loadApiInsights,c as loadLinkedInstructions,a as loadLocalStats};
@@ -1 +1 @@
1
- import{a}from"../../chunk-NBTC5FNV.js";import"../../chunk-NJ5UED3H.js";import"../../chunk-ZXF5NE54.js";import"../../chunk-ZLLER3HP.js";export{a as ActiveJobsList};
1
+ import{a}from"../../chunk-X23L2MF6.js";import"../../chunk-ZXF5NE54.js";import"../../chunk-NJ5UED3H.js";import"../../chunk-ZLLER3HP.js";export{a as ActiveJobsList};
@@ -1 +1 @@
1
- import{a}from"../../chunk-GDLQNY4V.js";import"../../chunk-PJ4RIUI3.js";import"../../chunk-NBTC5FNV.js";import"../../chunk-TU2AR6XO.js";import"../../chunk-NJ5UED3H.js";import"../../chunk-NWV66NMA.js";import"../../chunk-ZXF5NE54.js";import"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import"../../chunk-ZLLER3HP.js";export{a as LauncherOverlay};
1
+ import{a}from"../../chunk-EMZFZCS4.js";import"../../chunk-PJ4RIUI3.js";import"../../chunk-X23L2MF6.js";import"../../chunk-B22HYCBV.js";import"../../chunk-ZXF5NE54.js";import"../../chunk-NJ5UED3H.js";import"../../chunk-NWV66NMA.js";import"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import"../../chunk-ZLLER3HP.js";export{a as LauncherOverlay};
@@ -1 +1 @@
1
- import{a}from"../../chunk-TU2AR6XO.js";import"../../chunk-NJ5UED3H.js";import"../../chunk-ZXF5NE54.js";import"../../chunk-ZLLER3HP.js";export{a as NewLaunchForm};
1
+ import{a}from"../../chunk-B22HYCBV.js";import"../../chunk-ZXF5NE54.js";import"../../chunk-NJ5UED3H.js";import"../../chunk-ZLLER3HP.js";export{a as NewLaunchForm};
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x}from"./chunk-MMMT34KO.js";import"./chunk-ZLLER3HP.js";export{c as ClaudeCodeAdapter,i as CodexAdapter,f as CopilotAgentAdapter,d as CursorAdapter,j as PiAdapter,g as RuleMetricMcpAdapter,b as SESSION_EVENT_TYPES,a as SESSION_TOOLS,e as VSCodeCopilotAdapter,t as buildTmuxAttachCommand,s as buildTmuxHasSessionArgs,q as buildTmuxLaunchArgs,r as buildTmuxSendKeysArgs,l as detectTool,n as discoverAllSessions,h as freshCodexState,k as getAdapter,m as getAllProviders,v as getAvailableLaunchers,u as getLauncher,o as getProvider,w as sanitizeBranch,p as sanitizeTmuxName,x as worktreePathFor};
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x}from"./chunk-CPDW7WW2.js";import"./chunk-ZLLER3HP.js";export{c as ClaudeCodeAdapter,i as CodexAdapter,f as CopilotAgentAdapter,d as CursorAdapter,j as PiAdapter,g as RuleMetricMcpAdapter,b as SESSION_EVENT_TYPES,a as SESSION_TOOLS,e as VSCodeCopilotAdapter,t as buildTmuxAttachCommand,s as buildTmuxHasSessionArgs,q as buildTmuxLaunchArgs,r as buildTmuxSendKeysArgs,l as detectTool,n as discoverAllSessions,h as freshCodexState,k as getAdapter,m as getAllProviders,v as getAvailableLaunchers,u as getLauncher,o as getProvider,w as sanitizeBranch,p as sanitizeTmuxName,x as worktreePathFor};
@@ -1 +1 @@
1
- import{a,b,c,d,e}from"../chunk-OCCJEWOF.js";import"../chunk-XXPWPKTD.js";import"../chunk-5TM7AOH2.js";import"../chunk-IEQDLURA.js";import"../chunk-KINIFUZQ.js";import"../chunk-U3YPVLM3.js";import"../chunk-TQM7MF5C.js";import"../chunk-WOANSBMJ.js";import"../chunk-IG4JMWFK.js";import"../chunk-ZYGBABMZ.js";import"../chunk-GIQ2HK3W.js";import"../chunk-TTZWVZIW.js";import"../chunk-FZMO7XSN.js";import"../chunk-MOJY6S5J.js";import"../chunk-I6W2KC6W.js";import"../chunk-5A6TMSRO.js";import"../chunk-HYQ5YKBC.js";import"../chunk-JU5ZNXPK.js";import"../chunk-3WCX2SLU.js";import"../chunk-KOORMTZO.js";import"../chunk-5RBLIVBF.js";import"../chunk-Q7IDLOSP.js";import"../chunk-CZBO3A6B.js";import"../chunk-USKRCVX3.js";import"../chunk-7YZURVZD.js";import"../chunk-PZS55PW2.js";import"../chunk-QPAOX7P2.js";import"../chunk-3ZHVP3KE.js";import"../chunk-EFEPD4AZ.js";import"../chunk-HOQPVOMF.js";import"../chunk-E4CIJ67Z.js";import"../chunk-EHW2KS6R.js";import"../chunk-D4FP5M2B.js";import"../chunk-CVPAKEEZ.js";import"../chunk-VUNJGZPP.js";import"../chunk-GGUXEZC3.js";import"../chunk-GLBWNB2N.js";import"../chunk-CQD2R3BA.js";import"../chunk-3UKZJAFS.js";import"../chunk-77FH6UZP.js";import"../chunk-KE5K3F7J.js";import"../chunk-PIVEJTNF.js";import"../chunk-KR36ZDGN.js";import"../chunk-WL34G6IR.js";import"../chunk-GIRPEMTW.js";import"../chunk-SIGZEQ3K.js";import"../chunk-DQYYHX6K.js";import"../chunk-RIYVZDOQ.js";import"../chunk-6T6YFPBW.js";import"../chunk-ISYU5BMU.js";import"../chunk-DANMUHNW.js";import"../chunk-MMMT34KO.js";import"../chunk-FXQS7AEZ.js";import"../chunk-LJRE3LZ2.js";import"../chunk-TSLBCZ5P.js";import"../chunk-65LFPUDB.js";import"../chunk-HBDKOU2N.js";import"../chunk-3H44B6PB.js";import"../chunk-6UEFCMR2.js";import"../chunk-MODXEGCU.js";import"../chunk-RBSEE2Z6.js";import"../chunk-PDXHRF4E.js";import"../chunk-KGU2IW54.js";import"../chunk-M7QSC64D.js";import"../chunk-ZKPURXUS.js";import"../chunk-ISEUEYSC.js";import"../chunk-GYKYJJNF.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-DHIEGG4T.js";import"../chunk-PPAHIVG5.js";import"../chunk-5MXZJWQS.js";import"../chunk-CT7FWSIU.js";import"../chunk-N7ODX6PO.js";import"../chunk-OZQNSELV.js";import"../chunk-HFGO5762.js";import"../chunk-VS5ROGDP.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-KFNFLMUR.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as CAPABILITIES,a as HANDLERS,c as availableCapabilities,d as pollForWork,e as runAgentLoop};
1
+ import{a,b,c,d,e}from"../chunk-3MYCWZ63.js";import"../chunk-5TM7AOH2.js";import"../chunk-IEQDLURA.js";import"../chunk-KINIFUZQ.js";import"../chunk-KOORMTZO.js";import"../chunk-Q7IDLOSP.js";import"../chunk-2PO5I3XR.js";import"../chunk-TQM7MF5C.js";import"../chunk-RDQXK5LG.js";import"../chunk-QXPGTEMO.js";import"../chunk-ZYGBABMZ.js";import"../chunk-GIQ2HK3W.js";import"../chunk-STUNT4N3.js";import"../chunk-E4CIJ67Z.js";import"../chunk-FZMO7XSN.js";import"../chunk-MOJY6S5J.js";import"../chunk-KUW6AVSI.js";import"../chunk-5A6TMSRO.js";import"../chunk-FCALFMZV.js";import"../chunk-JU5ZNXPK.js";import"../chunk-5RBLIVBF.js";import"../chunk-VBGHPAUT.js";import"../chunk-GGUXEZC3.js";import"../chunk-ZLBYYLJZ.js";import"../chunk-USKRCVX3.js";import"../chunk-7YZURVZD.js";import"../chunk-SW24KZ5C.js";import"../chunk-QPAOX7P2.js";import"../chunk-3ZHVP3KE.js";import"../chunk-EFEPD4AZ.js";import"../chunk-HOQPVOMF.js";import"../chunk-AKCCNLHL.js";import"../chunk-CVPAKEEZ.js";import"../chunk-VUNJGZPP.js";import"../chunk-GLBWNB2N.js";import"../chunk-CQD2R3BA.js";import"../chunk-3UKZJAFS.js";import"../chunk-77FH6UZP.js";import"../chunk-KE5K3F7J.js";import"../chunk-WL34G6IR.js";import"../chunk-KR36ZDGN.js";import"../chunk-GIRPEMTW.js";import"../chunk-DQYYHX6K.js";import"../chunk-4ZDE63UG.js";import"../chunk-F5GSKVF2.js";import"../chunk-PIVEJTNF.js";import"../chunk-FHRBW4AQ.js";import"../chunk-ZBTJ5R7C.js";import"../chunk-DANMUHNW.js";import"../chunk-ISYU5BMU.js";import"../chunk-CPDW7WW2.js";import"../chunk-CDSSOOIG.js";import"../chunk-XFOG2PDJ.js";import"../chunk-SIGZEQ3K.js";import"../chunk-FXQS7AEZ.js";import"../chunk-LJRE3LZ2.js";import"../chunk-TSLBCZ5P.js";import"../chunk-65LFPUDB.js";import"../chunk-HBDKOU2N.js";import"../chunk-3H44B6PB.js";import"../chunk-6UEFCMR2.js";import"../chunk-MODXEGCU.js";import"../chunk-RBSEE2Z6.js";import"../chunk-PDXHRF4E.js";import"../chunk-KGU2IW54.js";import"../chunk-M7QSC64D.js";import"../chunk-ZKPURXUS.js";import"../chunk-ISEUEYSC.js";import"../chunk-GYKYJJNF.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-DHIEGG4T.js";import"../chunk-PPAHIVG5.js";import"../chunk-5MXZJWQS.js";import"../chunk-CT7FWSIU.js";import"../chunk-N7ODX6PO.js";import"../chunk-OZQNSELV.js";import"../chunk-HFGO5762.js";import"../chunk-VS5ROGDP.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-KFNFLMUR.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as CAPABILITIES,a as HANDLERS,c as availableCapabilities,d as pollForWork,e as runAgentLoop};
@@ -0,0 +1 @@
1
+ import{a}from"../chunk-4ZDE63UG.js";import"../chunk-F5GSKVF2.js";import"../chunk-PIVEJTNF.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{a as startPresenceHeartbeat};
@@ -1 +1 @@
1
- import{a,b}from"../../../chunk-6T6YFPBW.js";import"../../../chunk-ISYU5BMU.js";import"../../../chunk-DANMUHNW.js";import"../../../chunk-OZQNSELV.js";import"../../../chunk-HFGO5762.js";import"../../../chunk-VS5ROGDP.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{b as acceptHook,a as recordApplication};
1
+ import{a,b}from"../../../chunk-ZBTJ5R7C.js";import"../../../chunk-DANMUHNW.js";import"../../../chunk-ISYU5BMU.js";import"../../../chunk-OZQNSELV.js";import"../../../chunk-HFGO5762.js";import"../../../chunk-VS5ROGDP.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{b as acceptHook,a as recordApplication};
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h}from"../../../chunk-RIYVZDOQ.js";import"../../../chunk-6T6YFPBW.js";import"../../../chunk-ISYU5BMU.js";import"../../../chunk-DANMUHNW.js";import"../../../chunk-LJRE3LZ2.js";import"../../../chunk-OZQNSELV.js";import"../../../chunk-HFGO5762.js";import"../../../chunk-VS5ROGDP.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{h as acceptSuggestion,b as appendBlockToFile,c as appendToAgentInstructionFiles,a as appendToCLAUDEmd,g as fetchSuggestion,f as removeBlockFromFile,d as removeFromAgentInstructionFiles,e as removeFromCLAUDEmd};
1
+ import{a,b,c,d,e,f,g,h}from"../../../chunk-FHRBW4AQ.js";import"../../../chunk-ZBTJ5R7C.js";import"../../../chunk-DANMUHNW.js";import"../../../chunk-ISYU5BMU.js";import"../../../chunk-LJRE3LZ2.js";import"../../../chunk-OZQNSELV.js";import"../../../chunk-HFGO5762.js";import"../../../chunk-VS5ROGDP.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{h as acceptSuggestion,b as appendBlockToFile,c as appendToAgentInstructionFiles,a as appendToCLAUDEmd,g as fetchSuggestion,f as removeBlockFromFile,d as removeFromAgentInstructionFiles,e as removeFromCLAUDEmd};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-D4FP5M2B.js";import"../../../chunk-CVPAKEEZ.js";import"../../../chunk-RIYVZDOQ.js";import"../../../chunk-6T6YFPBW.js";import"../../../chunk-ISYU5BMU.js";import"../../../chunk-DANMUHNW.js";import"../../../chunk-LJRE3LZ2.js";import"../../../chunk-OZQNSELV.js";import"../../../chunk-HFGO5762.js";import"../../../chunk-VS5ROGDP.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as cronAutoAcceptSuggestions};
1
+ import{a}from"../../../chunk-AKCCNLHL.js";import"../../../chunk-CVPAKEEZ.js";import"../../../chunk-FHRBW4AQ.js";import"../../../chunk-ZBTJ5R7C.js";import"../../../chunk-DANMUHNW.js";import"../../../chunk-ISYU5BMU.js";import"../../../chunk-LJRE3LZ2.js";import"../../../chunk-OZQNSELV.js";import"../../../chunk-HFGO5762.js";import"../../../chunk-VS5ROGDP.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as cronAutoAcceptSuggestions};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-CZBO3A6B.js";import"../../../chunk-CVPAKEEZ.js";import"../../../chunk-SIGZEQ3K.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as cronReconcileAttribution};
1
+ import{a}from"../../../chunk-ZLBYYLJZ.js";import"../../../chunk-CVPAKEEZ.js";import"../../../chunk-CDSSOOIG.js";import"../../../chunk-XFOG2PDJ.js";import"../../../chunk-SIGZEQ3K.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as cronReconcileAttribution};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-PZS55PW2.js";import"../../../chunk-ZLLER3HP.js";export{a as cronRefreshSkills};
1
+ import{a,b,c,d}from"../../../chunk-SW24KZ5C.js";import"../../../chunk-ZLLER3HP.js";export{a as DEFAULT_REGISTRY_REFRESH_BUDGET_MS,b as SYNC_BATCH_TIMEOUT_MS,d as cronRefreshSkills,c as registryRefreshBudgetMs};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-EHW2KS6R.js";import"../../../chunk-SIGZEQ3K.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as finalizeScopedLaunch};
1
+ import{a as b,b as c,c as d,d as e,e as f,f as g,g as h}from"../../../chunk-CDSSOOIG.js";import{b as a}from"../../../chunk-XFOG2PDJ.js";import"../../../chunk-SIGZEQ3K.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as DELIVERY_STEPS,b as ScopedOutcomeError,e as collectScopedReceipt,f as deliverScopedReceipt,g as finalizeScopedLaunch,h as resumePendingScopedOutcomes,c as scopedOutcomeFailure,d as stageScopedProtocol};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-I6W2KC6W.js";import"../../../chunk-3WCX2SLU.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as prepareSuggestionLive};
1
+ import{a}from"../../../chunk-KUW6AVSI.js";import"../../../chunk-VBGHPAUT.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as prepareSuggestionLive};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-HYQ5YKBC.js";import"../../../chunk-JU5ZNXPK.js";import"../../../chunk-3WCX2SLU.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-KR36ZDGN.js";import"../../../chunk-HBDKOU2N.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-DHIEGG4T.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processEval};
1
+ import{a}from"../../../chunk-FCALFMZV.js";import"../../../chunk-JU5ZNXPK.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-VBGHPAUT.js";import"../../../chunk-KR36ZDGN.js";import"../../../chunk-HBDKOU2N.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-DHIEGG4T.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processEval};
@@ -1 +1 @@
1
- import{a,b}from"../../../chunk-U3YPVLM3.js";import"../../../chunk-IG4JMWFK.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-EHW2KS6R.js";import"../../../chunk-SIGZEQ3K.js";import"../../../chunk-MMMT34KO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{b as processLaunch,a as resolveWorktreeForLaunch};
1
+ import{a,b}from"../../../chunk-2PO5I3XR.js";import"../../../chunk-QXPGTEMO.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-CPDW7WW2.js";import"../../../chunk-CDSSOOIG.js";import"../../../chunk-XFOG2PDJ.js";import"../../../chunk-SIGZEQ3K.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{b as processLaunch,a as resolveWorktreeForLaunch};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-WOANSBMJ.js";import"../../../chunk-IG4JMWFK.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-MMMT34KO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processRunCleanup};
1
+ import{a}from"../../../chunk-RDQXK5LG.js";import"../../../chunk-QXPGTEMO.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-CPDW7WW2.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processRunCleanup};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-TTZWVZIW.js";import"../../../chunk-I6W2KC6W.js";import"../../../chunk-HYQ5YKBC.js";import"../../../chunk-JU5ZNXPK.js";import"../../../chunk-3WCX2SLU.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-KR36ZDGN.js";import"../../../chunk-HBDKOU2N.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-DHIEGG4T.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processSuggestionEval};
1
+ import{a}from"../../../chunk-STUNT4N3.js";import"../../../chunk-KUW6AVSI.js";import"../../../chunk-FCALFMZV.js";import"../../../chunk-JU5ZNXPK.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-VBGHPAUT.js";import"../../../chunk-KR36ZDGN.js";import"../../../chunk-HBDKOU2N.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-DHIEGG4T.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processSuggestionEval};
@@ -1 +1 @@
1
- import{a as m}from"../chunk-5CVP5NFH.js";import"../chunk-HTAHNQZJ.js";import{c as h}from"../chunk-FZMO7XSN.js";import"../chunk-MOJY6S5J.js";import{a as d}from"../chunk-CZBO3A6B.js";import{a as k}from"../chunk-PZS55PW2.js";import{e as p}from"../chunk-EFEPD4AZ.js";import"../chunk-HOQPVOMF.js";import"../chunk-CVPAKEEZ.js";import"../chunk-PIVEJTNF.js";import"../chunk-GIRPEMTW.js";import"../chunk-SIGZEQ3K.js";import"../chunk-MODXEGCU.js";import{a as f}from"../chunk-4VN5PG2S.js";import"../chunk-DHIEGG4T.js";import"../chunk-PPAHIVG5.js";import"../chunk-5MXZJWQS.js";import"../chunk-CT7FWSIU.js";import"../chunk-N7ODX6PO.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import{A as c,B as g,z as u}from"../chunk-X6CF5KTW.js";import{f as l}from"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import{a}from"../chunk-ZLLER3HP.js";var b={cron_check_changelog:a(async(r,n)=>{let t=await m({logger:{info:a(e=>n.logger.info(e),"info"),warn:a(e=>n.logger.warn(e),"warn")}});n.logger.info(`[cron_check_changelog] result: created=${t.createdCount} skipped=${t.skippedCount}`)},"cron_check_changelog"),cron_suggest_instructions:a((r,n)=>p(r,n),"cron_suggest_instructions"),cron_reconcile_attribution:a((r,n)=>d(r,n).then(()=>{}),"cron_reconcile_attribution"),cron_refresh_skills:a((r,n)=>k(r,n),"cron_refresh_skills"),harbor_ab:a(async(r,n)=>{let t=r.measurement,e=t?l.parse(t):null;for(let s of u("proven")){let i=c(s,e);if(i){n.logger.warn(i);continue}let o=await h(g(s,"manual",e),n);n.logger.info(`[harbor_ab] ${s.task}: ${o.decision} \u2014 ${o.reason}`)}},"harbor_ab")},w=f.map(r=>{let n=b[r.name];if(!n)throw new Error(`manual-tasks: no handler registered for "${r.name}"`);return{...r,handler:n}});async function v(r,n={}){let t=w.find(o=>o.name===r);if(!t)return{name:r,durationMs:0,ok:!1,error:`Unknown task: ${r}`,logs:[]};let e=[],s={logger:{info:a(o=>e.push({level:"info",message:o}),"info"),warn:a(o=>e.push({level:"warn",message:o}),"warn"),error:a(o=>e.push({level:"error",message:o}),"error")},job:{attempts:0}},i=Date.now();try{return await t.handler(n,s),{name:r,durationMs:Date.now()-i,ok:!0,logs:e}}catch(o){return{name:r,durationMs:Date.now()-i,ok:!1,error:o instanceof Error?o.message:String(o),logs:e}}}a(v,"runManualTask");export{w as MANUAL_TASKS,v as runManualTask};
1
+ import{a as m}from"../chunk-5CVP5NFH.js";import"../chunk-HTAHNQZJ.js";import{c as h}from"../chunk-FZMO7XSN.js";import"../chunk-MOJY6S5J.js";import{a as d}from"../chunk-ZLBYYLJZ.js";import{d as k}from"../chunk-SW24KZ5C.js";import{e as p}from"../chunk-EFEPD4AZ.js";import"../chunk-HOQPVOMF.js";import"../chunk-CVPAKEEZ.js";import"../chunk-GIRPEMTW.js";import"../chunk-PIVEJTNF.js";import"../chunk-CDSSOOIG.js";import"../chunk-XFOG2PDJ.js";import"../chunk-SIGZEQ3K.js";import"../chunk-MODXEGCU.js";import{a as f}from"../chunk-4VN5PG2S.js";import"../chunk-DHIEGG4T.js";import"../chunk-PPAHIVG5.js";import"../chunk-5MXZJWQS.js";import"../chunk-CT7FWSIU.js";import"../chunk-N7ODX6PO.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import{A as c,B as g,z as u}from"../chunk-X6CF5KTW.js";import{f as l}from"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import{a}from"../chunk-ZLLER3HP.js";var b={cron_check_changelog:a(async(r,n)=>{let t=await m({logger:{info:a(e=>n.logger.info(e),"info"),warn:a(e=>n.logger.warn(e),"warn")}});n.logger.info(`[cron_check_changelog] result: created=${t.createdCount} skipped=${t.skippedCount}`)},"cron_check_changelog"),cron_suggest_instructions:a((r,n)=>p(r,n),"cron_suggest_instructions"),cron_reconcile_attribution:a((r,n)=>d(r,n).then(()=>{}),"cron_reconcile_attribution"),cron_refresh_skills:a((r,n)=>k(r,n),"cron_refresh_skills"),harbor_ab:a(async(r,n)=>{let t=r.measurement,e=t?l.parse(t):null;for(let s of u("proven")){let i=c(s,e);if(i){n.logger.warn(i);continue}let o=await h(g(s,"manual",e),n);n.logger.info(`[harbor_ab] ${s.task}: ${o.decision} \u2014 ${o.reason}`)}},"harbor_ab")},w=f.map(r=>{let n=b[r.name];if(!n)throw new Error(`manual-tasks: no handler registered for "${r.name}"`);return{...r,handler:n}});async function v(r,n={}){let t=w.find(o=>o.name===r);if(!t)return{name:r,durationMs:0,ok:!1,error:`Unknown task: ${r}`,logs:[]};let e=[],s={logger:{info:a(o=>e.push({level:"info",message:o}),"info"),warn:a(o=>e.push({level:"warn",message:o}),"warn"),error:a(o=>e.push({level:"error",message:o}),"error")},job:{attempts:0}},i=Date.now();try{return await t.handler(n,s),{name:r,durationMs:Date.now()-i,ok:!0,logs:e}}catch(o){return{name:r,durationMs:Date.now()-i,ok:!1,error:o instanceof Error?o.message:String(o),logs:e}}}a(v,"runManualTask");export{w as MANUAL_TASKS,v as runManualTask};
@@ -1 +1 @@
1
- import{a as b,b as c,c as d}from"../../../chunk-IG4JMWFK.js";import{w as a}from"../../../chunk-MMMT34KO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-ZLLER3HP.js";export{c as ensureWorktree,d as removeWorktree,b as runGit,a as sanitizeBranch};
1
+ import{a as b,b as c,c as d}from"../../../chunk-QXPGTEMO.js";import{w as a}from"../../../chunk-CPDW7WW2.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-ZLLER3HP.js";export{c as ensureWorktree,d as removeWorktree,b as runGit,a as sanitizeBranch};
@@ -0,0 +1 @@
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u}from"../chunk-XFOG2PDJ.js";import"../chunk-ZLLER3HP.js";export{b as DELIVERY_STEPS,a as SCOPED_OUTCOME_STORE_VERSION,d as confirmationDir,t as isDelivered,i as ledgerPath,s as listScopedOutcomeEntries,e as outcomeDir,l as preserveTranscript,f as protocolPath,o as readLedger,n as readReceipt,k as readStagedProtocol,h as receiptPath,u as removeScopedOutcomeEntry,c as scopedOutcomeStoreRoot,j as stageProtocol,q as transcriptBytes,g as transcriptPath,r as transcriptSize,p as writeLedger,m as writeReceiptOnce};
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i}from"../chunk-XXPWPKTD.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{c as HEARTBEAT_RETRY_BUDGET_MS,b as REPORT_RETRY_BUDGET_MS,d as REPORT_RETRY_INITIAL_MS,e as REPORT_RETRY_MAX_MS,a as RETRYABLE_REPORT_STATUSES,g as abortableSleep,h as isRetryableReportError,i as postReportWithRetry,f as structuredLog};
1
+ import{a,b,c,d,e,f,g,h,i,j}from"../chunk-F5GSKVF2.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{c as HEARTBEAT_RETRY_BUDGET_MS,b as REPORT_RETRY_BUDGET_MS,d as REPORT_RETRY_INITIAL_MS,e as REPORT_RETRY_MAX_MS,a as RETRYABLE_REPORT_STATUSES,g as abortableSleep,i as isDefinitiveLeaseLoss,h as isRetryableReportError,j as postReportWithRetry,f as structuredLog};
@@ -3636,6 +3636,48 @@
3636
3636
  "backfill.js"
3637
3637
  ]
3638
3638
  },
3639
+ "research:resume-scoped-outcomes": {
3640
+ "aliases": [],
3641
+ "args": {},
3642
+ "description": "Finish uploading scoped headless outcomes whose receipt was preserved locally after the actor exited but whose capture or verification upload failed. Never re-runs the actor or re-measures the repository; ships the stored receipt and exact transcript only.",
3643
+ "examples": [
3644
+ "<%= config.bin %> research resume-scoped-outcomes",
3645
+ "<%= config.bin %> research resume-scoped-outcomes --list"
3646
+ ],
3647
+ "flags": {
3648
+ "api-url": {
3649
+ "description": "Override API base URL",
3650
+ "env": "RULEMETRIC_API_URL",
3651
+ "hidden": true,
3652
+ "name": "api-url",
3653
+ "hasDynamicHelp": false,
3654
+ "multiple": false,
3655
+ "type": "option"
3656
+ },
3657
+ "list": {
3658
+ "description": "Show the outcome store without uploading anything",
3659
+ "name": "list",
3660
+ "allowNo": false,
3661
+ "type": "boolean"
3662
+ }
3663
+ },
3664
+ "hasDynamicHelp": false,
3665
+ "hidden": true,
3666
+ "hiddenAliases": [],
3667
+ "id": "research:resume-scoped-outcomes",
3668
+ "pluginAlias": "@rulemetric/cli",
3669
+ "pluginName": "@rulemetric/cli",
3670
+ "pluginType": "core",
3671
+ "strict": true,
3672
+ "enableJsonFlag": false,
3673
+ "isESM": true,
3674
+ "relativePath": [
3675
+ "dist",
3676
+ "commands",
3677
+ "research",
3678
+ "resume-scoped-outcomes.js"
3679
+ ]
3680
+ },
3639
3681
  "research:tail-transcript": {
3640
3682
  "aliases": [],
3641
3683
  "args": {
@@ -4800,5 +4842,5 @@
4800
4842
  ]
4801
4843
  }
4802
4844
  },
4803
- "version": "0.16.0"
4845
+ "version": "0.17.0"
4804
4846
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rulemetric/cli",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -80,9 +80,9 @@
80
80
  "postgres": "^3.4.0",
81
81
  "react": "^19.0.0",
82
82
  "zod": "^3.24.0",
83
- "@rulemetric/hooks": "0.16.0",
84
- "@rulemetric/proxy": "0.16.0",
85
- "@rulemetric/skills-registry": "0.16.0"
83
+ "@rulemetric/proxy": "0.17.0",
84
+ "@rulemetric/skills-registry": "0.17.0",
85
+ "@rulemetric/hooks": "0.17.0"
86
86
  },
87
87
  "//deps": "Worker (`evals agent`) runtime deps: the @opentelemetry/* set, @sentry/node, and postgres are STATIC top-level imports loaded at worker startup (via bundled @rulemetric/{telemetry,db}) — they MUST be runtime deps or a clean `npm i -g` crashes with ModuleLoadError. `better-sqlite3` is optionalDependencies (below): it's a native module, lazy `require()`'d inside a try/catch (packages/session providers cursor/opencode) so a missing binary degrades gracefully — making it a hard dep would break `npm i -g` on platforms without prebuilt binaries. `resend` stays a devDep: lazy `await import('resend')` guarded by RESEND_API_KEY, which end-user workers never set (provider falls back to noop). Classification verified via import-graph scan of dist/commands/evals/agent.js + per-importer static/lazy check.",
88
88
  "optionalDependencies": {
@@ -103,14 +103,14 @@
103
103
  "typescript": "^5.9.0",
104
104
  "vitest": "^3.2.0",
105
105
  "@rulemetric/contracts": "0.0.1",
106
- "@rulemetric/api": "0.0.1",
107
106
  "@rulemetric/core": "0.0.1",
108
107
  "@rulemetric/db": "0.0.1",
109
108
  "@rulemetric/effectiveness": "0.0.1",
110
109
  "@rulemetric/email": "0.0.1",
110
+ "@rulemetric/typescript-config": "0.0.0",
111
111
  "@rulemetric/session": "0.2.1",
112
112
  "@rulemetric/telemetry": "0.0.1",
113
- "@rulemetric/typescript-config": "0.0.0"
113
+ "@rulemetric/api": "0.0.1"
114
114
  },
115
115
  "scripts": {
116
116
  "build": "node scripts/build.mjs",
@@ -1 +0,0 @@
1
- import{a as f}from"./chunk-ZLLER3HP.js";import{z as e}from"zod";var m=e.string().regex(/^[a-f0-9]{64}$/),t=e.string().min(1).max(2e4),d=e.string().min(1).max(240).refine(i=>!i.startsWith("/")&&!i.includes("\\")&&i.split("/").every(r=>r!==".."&&r!=="."&&r!==""&&!r.startsWith(".")),"fixture paths must be relative, without traversal or hidden configuration"),p=e.object({path:d,content:e.string().max(1e5)}).strict(),h=e.object({name:t,path:d,kind:e.enum(["text_equals","json_equals","file_absent"]),expected:e.string().max(1e5),primary:e.boolean()}).strict(),g=e.object({evalId:e.string().uuid(),taskId:t,family:t,lineage:t,split:e.enum(["exploration","validation"]),incidentSessionIds:e.array(e.string().uuid()).min(1),opportunity:e.enum(["failure","success","costly_success","should_not_trigger"]),prompt:t,fixtureVersion:t,verifierVersion:t,files:e.array(p).max(100),checks:e.array(h).min(1).max(30),oracleFiles:e.array(p).max(100)}).strict(),b=e.object({version:e.literal(1),revision:e.number().int().positive(),question:t,hypotheses:e.array(t).min(2),interventionType:e.enum(["instruction","retrieval","tool","executable_check","workflow","removal","none"]),baseline:e.object({content:e.string().max(16e3),files:e.array(p).max(30)}).strict(),treatment:e.object({content:e.string().max(16e3),files:e.array(p).max(30)}).strict(),scope:e.object({projectPath:t,harnessVersion:t,deliveryMode:e.literal("explicit-system-and-fixture-file"),engine:e.enum(["claude","codex"]),model:t,provider:e.enum(["anthropic","openai"]),repositoryRevision:e.string().regex(/^[a-f0-9]{40}$/),ambientContext:e.literal("frozen-fixture"),permissions:e.literal("isolated-fixture-write"),tools:e.array(t).min(1),expiresAt:e.string().datetime()}).strict(),sampling:e.object({rationale:t,exclusions:e.array(t),eligibleOpportunities:e.number().int().positive(),sampledOpportunities:e.number().int().positive()}).strict(),analysis:e.object({role:e.enum(["diagnostic","exploration","frozen_validation"]),primaryOutcome:t,safeguards:e.array(t).min(1),eligibility:t,assignmentUnit:e.literal("task"),weighting:e.literal("equal-task"),method:e.literal("paired-task-bootstrap"),stopping:e.literal("fixed-final"),primaryComparison:e.literal("treatment-minus-baseline"),repetitions:e.number().int().min(1).max(10),usefulEffect:e.number().positive().max(1),reliabilityMargin:e.number().min(0).max(1),maxCalls:e.number().int().min(2).max(200),maxSecondsPerCall:e.number().int().min(10).max(600),humanReviewMinutes:e.number().nonnegative().nullable(),reviewNote:t}).strict(),tasks:e.array(g).min(1).max(50),supersedes:e.string().uuid().nullable()}).strict().superRefine((i,r)=>{let a=f(s=>r.addIssue({code:"custom",message:s}),"fail");(new Set(i.tasks.map(s=>s.evalId)).size!==i.tasks.length||new Set(i.tasks.map(s=>s.taskId)).size!==i.tasks.length)&&a("task identity must be unique, not repetition"),i.scope.engine==="claude"!=(i.scope.provider==="anthropic")&&a("engine/provider mismatch"),i.scope.engine==="claude"&&[...i.scope.tools].sort().join(",")!=="Bash,Edit,Read,Write"&&a("Claude fixture execution supports exactly Read, Write, Edit and Bash");for(let s of[i.baseline,i.treatment])Array.from(s.content).reduce((n,c)=>{let u=c.codePointAt(0);return n+(u<128?1:u<2048?2:u<65536?3:4)},0)>16e3&&a("Instruction delivery exceeds the UTF-8 byte budget");let o=new Map;for(let s of i.tasks){for(let n of[s.lineage,s.family])o.has(n)&&o.get(n)!==s.split&&a("family or incident lineage leaks across splits"),o.set(n,s.split);[...s.files,...i.baseline.files,...i.treatment.files].some(n=>["CLAUDE.md","CLAUDE.local.md","AGENTS.md"].includes(n.path.split("/").at(-1)))&&a("Fixture files cannot introduce ambient instruction files"),new Set(s.checks.map(n=>n.name)).size!==s.checks.length&&a("Check names must be unique"),s.checks.some(n=>n.primary)||a("each task needs an independent primary artifact check"),new Set(s.files.map(n=>n.path)).size!==s.files.length&&a("duplicate fixture file path");for(let n of[i.baseline,i.treatment])new Set(n.files.map(c=>c.path)).size!==n.files.length&&a("duplicate intervention file path"),n.files.some(c=>s.files.some(u=>u.path===c.path))&&a("intervention must not overwrite common fixture files")}let l=i.tasks.filter(s=>s.split===(i.analysis.role==="frozen_validation"?"validation":"exploration"));l.length||a("no tasks in the selected split"),l.length*2*i.analysis.repetitions>i.analysis.maxCalls&&a("planned calls exceed resource ceiling"),i.sampling.sampledOpportunities>i.sampling.eligibleOpportunities&&a("sampled opportunities exceed eligible opportunities")}),I=e.object({version:e.literal(1),id:e.string().uuid(),protocolHash:m,protocol:b}).strict(),j=e.object({studyId:e.string().uuid(),protocolHash:m,taskId:t,arm:e.enum(["baseline","treatment"]),repetition:e.number().int().positive(),eligible:e.boolean(),exclusion:e.string().nullable(),primaryPassed:e.boolean(),safeguardsPassed:e.boolean(),checks:e.array(e.object({name:t,passed:e.boolean(),actual:e.string().nullable()})),deliveryHash:m,fixtureHash:m,harnessVersion:e.string().nullable(),engine:e.string().nullable(),model:e.string().nullable(),provider:e.string().nullable(),durationMs:e.number().nonnegative(),tokens:e.number().nonnegative().nullable(),costUsd:e.number().nonnegative().nullable()}).strict(),x=e.object({harnessVersion:t,repositoryRevision:e.string().regex(/^[a-f0-9]{40}$/),contextHashes:e.record(m.nullable())}).strict(),y=e.object({name:t,path:d,kind:e.literal("command_exit"),expected:e.literal("0"),primary:e.boolean(),command:e.array(e.string().min(1).max(2e3)).min(1).max(30),timeoutMs:e.number().int().min(100).max(12e4),fileHashes:e.record(d,m).refine(i=>Object.keys(i).length>0&&Object.keys(i).length<=300,"Freeze verifier files")}).strict().refine(i=>Object.hasOwn(i.fileHashes,i.path),"The verifier entry point must be frozen"),v=e.union([h,y]),k=e.object({version:e.literal(1),kind:e.literal("artifact-checks"),environment:x,tasks:e.array(e.object({taskId:e.string().min(1).max(500),checks:e.array(v).min(1).max(30)}).strict()).min(4).max(200)}).strict(),w=e.object({version:e.literal(1),mode:e.enum(["confirmation","exploration"]).optional(),research:e.object({question:t,rationale:t,eligibility:t,riskReview:t,enrollment:e.literal("prospective-launches").optional(),suggestionId:e.string().uuid().optional(),evalTargetId:e.string().uuid().optional(),carryoverPolicy:e.literal("fresh-session-per-task"),adoptionPolicy:e.literal("no-adoption")}).strict().optional(),projectPath:t,taskFamily:t,harness:e.literal("claude_code"),model:t,configurationHash:m,baselineDeliveryHash:m,treatmentDeliveryHash:m,primaryOutcome:t,verification:k.optional(),outcomeRule:e.object({source:e.literal("session_analysis"),completedValues:e.array(e.string().min(1)).min(1),failedValues:e.array(e.string().min(1)).min(1)}).strict(),eligibleTaskIds:e.array(e.string().min(1).max(500)).min(4).max(200),maxAssignments:e.number().int().min(4).max(200),decisionRule:e.object({method:e.literal("fisher-exact-two-sided-v1").default("fisher-exact-two-sided-v1"),alpha:e.literal(.05).default(.05),minCompletedPerArm:e.number().int().min(2).max(100),minimumAbsoluteEffect:e.number().min(.01).max(1)}).strict(),expiresAt:e.string().datetime()}).strict().superRefine((i,r)=>{if(i.mode==="exploration"&&(!i.research||!i.verification||i.eligibleTaskIds.length<=i.maxAssignments)&&r.addIssue({code:"custom",message:"Exploration requires a research justification, independent verification and reserved follow-up tasks"}),i.mode!=="exploration"&&i.verification?.tasks.some(o=>o.checks.some(l=>l.kind==="command_exit"))&&r.addIssue({code:"custom",message:"Repository checks currently support exploration only"}),i.mode!=="exploration"&&i.research&&r.addIssue({code:"custom",message:"Research enrollment is only available in explicit exploration mode"}),new Set(i.eligibleTaskIds).size!==i.eligibleTaskIds.length&&r.addIssue({code:"custom",path:["eligibleTaskIds"],message:"Eligible task IDs must be unique"}),i.maxAssignments>i.eligibleTaskIds.length&&r.addIssue({code:"custom",path:["maxAssignments"],message:"Assignment ceiling exceeds the pre-registered eligible task set"}),i.verification){let o=i.verification.tasks;(new Set(o.map(l=>l.taskId)).size!==o.length||o.length!==i.eligibleTaskIds.length||o.some(l=>!i.eligibleTaskIds.includes(l.taskId)||!l.checks.some(s=>s.primary)||new Set(l.checks.map(s=>s.name)).size!==l.checks.length))&&r.addIssue({code:"custom",path:["verification"],message:"Every eligible task needs one frozen verifier with unique checks and a primary outcome"})}i.outcomeRule.completedValues.some(o=>i.outcomeRule.failedValues.includes(o))&&r.addIssue({code:"custom",path:["outcomeRule"],message:"Outcome values must map to exactly one result"})});export{I as a,w as b};
@@ -1,3 +0,0 @@
1
- import{h as R}from"./chunk-CVPAKEEZ.js";import{a as S,b as v,c as $,f as w,g as A}from"./chunk-SIGZEQ3K.js";import{e as y,f}from"./chunk-GIXHG5FK.js";import{a as c}from"./chunk-ZLLER3HP.js";import{execFileSync as x}from"node:child_process";import{openSync as P,readSync as C,closeSync as j,readFileSync as E}from"node:fs";function I(l){let t;try{t=P(l,"r");let o=Buffer.alloc(64*1024),s=C(t,o,0,o.length,0),i=o.subarray(0,s).toString("utf-8");for(let r of i.split(`
2
- `))if(r.startsWith("{"))try{let a=JSON.parse(r).cwd;if(typeof a=="string"&&a.startsWith("/"))return a}catch{}return null}catch{return null}finally{t!==void 0&&j(t)}}c(I,"readTranscriptCwd");function W(l){let t=c(r=>{try{return x("git",["-C",l,...r],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:5e3}).trim()||null}catch{return null}},"git");if(!t(["rev-parse","--show-toplevel"]))return null;let s=t(["rev-parse","--git-dir"]),i=t(["rev-parse","--git-common-dir"]);return{gitRemote:t(["remote","get-url","origin"]),gitRootCommit:t(["rev-list","--max-parents=0","HEAD"])?.split(`
3
- `).pop()?.trim()??null,gitBranch:t(["branch","--show-current"]),isWorktree:!!s&&!!i&&s!==i}}c(W,"gitAnchors");async function O(l,t,o=v(W,I)){let s=Math.min(l.limit??200,1e3),i=await R(()=>y(`/api/sessions/unattributed?limit=${s}`),{log:c(e=>t.logger.info(e),"log"),label:"sessions/unattributed",idempotent:!0}),r=i.sessions??[],a=i.total??r.length;if(r.length===0)return t.logger.info("no unattributed sessions"),{scanned:0,repaired:0,reimported:0,unrepairable:0,remaining:0};let m=0,g=0,u=0;for(let e of r){if(!e.externalSessionId){u++;continue}let n=A(e,o);if(!n){u++;continue}try{await f("/api/sessions",{tool:e.tool,externalSessionId:e.externalSessionId,projectPath:n.projectPath,...n.gitBranch?{gitBranch:n.gitBranch}:{},metadata:{...n.gitRemote?{gitRemote:n.gitRemote}:{},...n.gitRootCommit?{gitRootCommit:n.gitRootCommit}:{},isWorktree:n.isWorktree,reconciledAttribution:!0}}),m++}catch(d){u++,t.logger.info(`reconcile failed for ${e.externalSessionId}: ${d.message}`);continue}let p=e.tool==="claude_code"?$(e.externalSessionId,o):null,b=w({tool:e.tool,pathWasJunk:!!e.projectPath&&S(e.projectPath),endedAt:e.endedAt??null,transcript:p?o.stat(p):null});if(b.reimport&&p)try{let d=E(p,"utf-8");await f(`/api/sessions/${e.id}/reimport`,{content:d,tool:"claude_code"}),g++}catch(d){t.logger.info(`reimport failed for ${e.externalSessionId} (${b.reason}): ${d.message}`)}}let h=a-m;return t.logger.info(`reconciled attribution: scanned=${r.length} repaired=${m} reimported=${g} unrepairable=${u} remaining=${h} (of ${a} total)`),{scanned:r.length,repaired:m,reimported:g,unrepairable:u,remaining:h}}c(O,"cronReconcileAttribution");export{O as a};
@@ -1 +0,0 @@
1
- import{b as p,c as s}from"./chunk-SIGZEQ3K.js";import{e as n,f as i}from"./chunk-GIXHG5FK.js";import{a}from"./chunk-ZLLER3HP.js";import{readFileSync as u,statSync as f}from"node:fs";import{join as h}from"node:path";import{pathToFileURL as w}from"node:url";import{scriptsDir as j}from"@rulemetric/hooks/scripts-dir";async function L(r,t){let e=r.scopedConfirmation,o=s(t,p(()=>null,()=>null));if(!o||f(o).size>2e7)throw new Error("Completed actor transcript is missing or exceeds the capture bound");let c=await import(w(h(j,"scoped-live.mjs")).href);c.transcriptEvidence(o,t);let d=await i("/api/sessions",{tool:"claude_code",externalSessionId:t,projectPath:r.projectPath});await i(`/api/sessions/${d.id}/reimport`,{tool:"claude_code",content:u(o,"utf8")});let{confirmation:m}=await n(`/api/scoped-live-confirmations/${e.id}/contract`),l=c.collectScopedOutcome(m.protocol,e.taskId,t,r.projectPath,o);return await i(`/api/scoped-live-confirmations/${e.id}/verify`,l),await i("/api/instruction-experiments/settle",{projectPath:r.projectPath}),{status:"recorded",sessionId:t,studyId:e.id}}a(L,"finalizeScopedLaunch");export{L as a};
@@ -1 +0,0 @@
1
- import{b as I}from"./chunk-3WCX2SLU.js";import{e as a,f as u}from"./chunk-GIXHG5FK.js";import{a as d}from"./chunk-ZLLER3HP.js";import{createHash as P,randomUUID as R}from"node:crypto";import{readFileSync as m,existsSync as g}from"node:fs";import{join as r}from"node:path";import{pathToFileURL as $}from"node:url";import{execFileSync as H}from"node:child_process";import{scriptsDir as C}from"@rulemetric/hooks/scripts-dir";var h=d(t=>P("sha256").update(t).digest("hex"),"hash");async function N(t){let k=await a(`/api/instruction-suggestions/${t.suggestionId}/test`);if(k.liveStudies?.length)return{status:"existing",studyId:k.liveStudies[0].id};let o=await a(`/api/eval-targets/${t.evalTargetId}`);if(!o.projectPath||!o.instructionId)return{status:"blocked",reason:"The suggestion has no project and instruction link."};let s=o.projectPath;if(!g(r(s,"package.json")))return{status:"blocked",reason:"Automatic repository checks currently require a package.json type-check or typecheck script."};let c=JSON.parse(m(r(s,"package.json"),"utf8")),f=["type-check","typecheck"].find(e=>typeof c.scripts?.[e]=="string");if(!f)return{status:"blocked",reason:"Add a type-check or typecheck script to prepare independently checked code tasks."};let y=await a(`/api/eval-targets/${t.evalTargetId}/runs?jobId=${t.evalJobId}&limit=100`),v=y.flatMap(e=>e.outputs?.engine==="claude"&&e.outputs.model?[e.outputs.model]:[]),p=[...new Set(v)];if(p.length!==1||v.length!==y.length)return{status:"blocked",reason:"Live delivery needs one observed Claude model across the comparison runs."};let l=await import($(r(C,"scoped-live.mjs")).href);if(typeof l.runRepositoryCheck!="function")return{status:"blocked",reason:"Upgrade the installed hooks to support repository checks."};let n=l.observeEnvironment(s);for(let e of Object.keys(n.contextHashes))if(n.contextHashes[e]&&/(?:CLAUDE(?:\.local)?|AGENTS)\.md$/.test(e)&&m(e,"utf8").includes(t.content.trim()))return{status:"blocked",reason:"The candidate already exists in background instructions; it cannot be withheld from baseline tasks."};let S=H("git",["ls-files","-z"],{cwd:s,encoding:"utf8",timeout:5e3}).split("\0"),b=[...new Set(["package.json",...S.filter(e=>/(^|\/)(package\.json|tsconfig[^/]*\.json|turbo\.json|pnpm-workspace\.yaml|pnpm-lock\.yaml|package-lock\.json|yarn\.lock)$/.test(e))])];if(b.length>300)return{status:"blocked",reason:"Repository verifier configuration exceeds the 300-file preparation bound."};let T=Object.fromEntries(b.sort().map(e=>[e,h(m(r(s,e),"utf8"))])),x={name:"Repository type checking passes",path:"package.json",kind:"command_exit",expected:"0",primary:!0,command:[c.packageManager?.startsWith("pnpm@")||g(r(s,"pnpm-lock.yaml"))?"pnpm":c.packageManager?.startsWith("yarn@")||g(r(s,"yarn.lock"))?"yarn":"npm","run",f],timeoutMs:12e4,fileHashes:T},i=l.runRepositoryCheck(s,x);if(i.error||i.exitCode===null)return{status:"blocked",reason:`The verifier could not execute: ${i.error??"no exit status"}`};let j=Array.from({length:21},()=>`work-${R()}`),w=I.parse({version:1,mode:"exploration",research:{question:`Does ${o.name} increase the fraction of fresh launched tasks leaving repository type checks passing?`,rationale:o.description||"Test the exact suggested instruction on prospective project work.",eligibility:"Fresh work requests supplied before launch in this project, using the pinned Claude model. One request per task; resumed and repeated work excluded.",riskReview:"Twenty task assignments, one baseline follow-up, seven-day expiry. Frozen repository checks; changes to checker configuration invalidate outcomes. Shared-checkout carryover is recorded; final causal interpretation remains inconclusive. No automatic adoption.",enrollment:"prospective-launches",suggestionId:t.suggestionId,evalTargetId:t.evalTargetId,carryoverPolicy:"fresh-session-per-task",adoptionPolicy:"no-adoption"},projectPath:s,taskFamily:"fresh-project-work",harness:"claude_code",model:p[0],configurationHash:h(JSON.stringify(n)),baselineDeliveryHash:h(""),treatmentDeliveryHash:t.contentHash,primaryOutcome:"Repository type checking passes after the task; this is not a claim of full task correctness.",outcomeRule:{source:"session_analysis",completedValues:["achieved"],failedValues:["failed"]},eligibleTaskIds:j,maxAssignments:20,decisionRule:{minCompletedPerArm:2,minimumAbsoluteEffect:.1},expiresAt:new Date(Date.now()+7*864e5).toISOString(),verification:{version:1,kind:"artifact-checks",environment:n,tasks:j.map(e=>({taskId:e,checks:[x]}))}}),A=await u("/api/instruction-experiments",{instructionId:o.instructionId,projectPath:s,source:"trial",mode:"scoped"});return{status:"waiting_for_work",studyId:(await u(`/api/instruction-experiments/${A.experimentId}/scoped-live-confirmations`,{protocol:w})).confirmation.id,verifierReadiness:i,taskLimit:20,outcome:w.primaryOutcome,model:p[0]}}d(N,"prepareSuggestionLive");export{N as a};
@@ -1 +0,0 @@
1
- import{b as R,c as $,f as s,g as I,i as w}from"./chunk-XXPWPKTD.js";import{c as re}from"./chunk-5TM7AOH2.js";import{b as te}from"./chunk-IEQDLURA.js";import{d as oe,e as se,f as ae}from"./chunk-KINIFUZQ.js";import{b as F}from"./chunk-U3YPVLM3.js";import{a as Y}from"./chunk-TQM7MF5C.js";import{a as q}from"./chunk-WOANSBMJ.js";import{a as U}from"./chunk-ZYGBABMZ.js";import{a as G}from"./chunk-GIQ2HK3W.js";import{a as W}from"./chunk-TTZWVZIW.js";import{c as N}from"./chunk-FZMO7XSN.js";import{a as O}from"./chunk-5A6TMSRO.js";import{a as V}from"./chunk-HYQ5YKBC.js";import{a as J}from"./chunk-KOORMTZO.js";import{b as L}from"./chunk-5RBLIVBF.js";import{a as Q}from"./chunk-Q7IDLOSP.js";import{a as x}from"./chunk-CZBO3A6B.js";import{a as ee}from"./chunk-USKRCVX3.js";import{a as X}from"./chunk-7YZURVZD.js";import{a as D}from"./chunk-PZS55PW2.js";import{a as ne}from"./chunk-QPAOX7P2.js";import{e as P}from"./chunk-EFEPD4AZ.js";import{b as K}from"./chunk-E4CIJ67Z.js";import{a as Z}from"./chunk-D4FP5M2B.js";import{a as z}from"./chunk-VUNJGZPP.js";import{a as j}from"./chunk-GGUXEZC3.js";import{b as C}from"./chunk-PIVEJTNF.js";import{k as B}from"./chunk-KGU2IW54.js";import{d as S}from"./chunk-GPBN4ROE.js";import{b as M,e as T,f as E}from"./chunk-GIXHG5FK.js";import{a as l}from"./chunk-ZLLER3HP.js";var H=null,h=null,ue={process_eval:V,process_suggestion_eval:W,process_insights:J,process_launch:F,process_send_message:U,process_conversation:O,process_session_goal:G,distill_memories:K,memory_ab:Y,process_run_cleanup:q,cron_refine_cases:ee,cron_retire_unused_skills:ne,cron_reconcile_attribution:x,cron_suggest_instructions:P,cron_refresh_skills:D,cron_refresh_pricing:X,cron_eval_autorun:z,cron_auto_accept_suggestions:Z,cron_instruction_training:j,cron_instruction_evolution:B,process_judge_review:Q,harbor_ab:N},ie=Object.keys(ue),pe=new Set([]);function ge(e=process.env){return e.DATABASE_URL?ie:ie.filter(t=>!pe.has(t))}l(ge,"availableCapabilities");var _e=3e4,fe=3e4,ve=3e4,le=500,de=1e4,ke=`thin-agent-${process.pid}`,A=null;function be(e,t,r,p){let d;try{let i=S();d={claude:i.claudeBin!=null,codex:i.codexBin!=null,pi:i.piBin!=null,codexModel:i.codexConfiguredModel}}catch{}let m;try{m=C()}catch{}let g=l(i=>E("/api/workers/heartbeat",{workerType:"cli-worker",clientName:ke,clientVersion:p,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:i,metadata:{capabilities:e,mode:"thin-agent",measurementProtocol:1,studyProtocol:1,scopedCollector:2,memorySnapshots:1,boundedAutorun:1,llmEngines:d,harborReady:m,machine:H?.summary()}}).then(c=>{let u=c?.advisory;u&&u.message!==A?(A=u.message,s(r,{event:"worker_advisory",code:u.code,message:u.message})):u||(A=null)}).catch(c=>{s(r,{event:"presence_heartbeat_error",error:c instanceof Error?c.message:String(c)})}),"send");g("alive");let f=setInterval(()=>g("alive"),ve),a=null,n=l(()=>a||(clearInterval(f),a=Promise.race([g("shutting_down"),new Promise(i=>setTimeout(i,2e3).unref())]),a),"sayGoodbye");return t.addEventListener("abort",()=>{n()},{once:!0}),{shutdown:n}}l(be,"startPresenceHeartbeat");async function we(e,t,r=S()){let p=[...r.claudeBin?["claude"]:[],...r.codexBin?["codex"]:[],...r.piBin?["pi"]:[]],d=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${t}&measurementProtocol=1&studyProtocol=1&scopedCollector=2&memorySnapshots=1&boundedAutorun=1&measurementEngines=${encodeURIComponent(p.join(","))}`,m=await T(`/api/work/next?${d}`);return m==null||typeof m=="string"?null:m}l(we,"pollForWork");function he(e,t){return{logger:{info:l(r=>t(r),"info"),warn:l(r=>t(r),"warn"),error:l(r=>t(r),"error")},job:{attempts:e}}}l(he,"makeHelpers");async function ye(e,t,r,p){let d=ue[e.kind],m=Date.now();if(s(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!d){let n=`unknown kind: ${e.kind}`;s(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:n}),await E(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:n,terminal:!0}).catch(()=>{});return}let g=l(()=>{s(r,{event:"heartbeat",jobId:e.id}),w(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken},{budgetMs:Math.min($,Math.max(0,t-1e3)),signal:p,log:r,event:"heartbeat",jobId:e.id}).then(n=>{n.ok||s(r,{event:"heartbeat_error",jobId:e.id,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})})},"beat"),f=setInterval(g,t);h={jobId:e.id,beat:g};let a;try{let n=he(e.attempts,r);a={kind:"complete",result:await d(e.payload,n)??{}}}catch(n){let i=H?.pausesSince(m)??[],c=ae(i),u=n instanceof Error?n.message:String(n),v=L(n),o=!v&&se(i);a={kind:"fail",message:c?`${c}; ${u}`:u,pausedDuringJob:!!c,terminal:v,hostSuspended:o}}try{if(a.kind==="complete"){s(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-m});let n=await w(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:a.result},{budgetMs:R,signal:p,log:r,event:"complete_post",jobId:e.id});n.ok||s(r,{event:"complete_post_error",jobId:e.id,kind:e.kind,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})}else{s(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-m,terminal:a.terminal,error:a.message,...a.pausedDuringJob?{pausedDuringJob:!0}:{},...a.hostSuspended?{hostSuspended:!0}:{}});let n=await w(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:a.message,terminal:a.terminal,hostSuspended:a.hostSuspended},{budgetMs:R,signal:p,log:r,event:"fail_post",jobId:e.id});n.ok||s(r,{event:"fail_post_error",jobId:e.id,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})}}finally{clearInterval(f),h=null}}l(ye,"runOne");var ce=new Set(["process_eval","process_suggestion_eval","process_conversation","process_insights","process_session_goal","distill_memories","memory_ab","cron_suggest_instructions","cron_eval_autorun","cron_instruction_evolution","process_judge_review","harbor_ab"]);async function en(e){let t=e.log??(()=>{}),r=e.pollWaitMs??_e,p=e.heartbeatIntervalMs??fe,d=e.capabilities??ge();s(t,{event:"agent_start",capabilities:d,pollWaitMs:r,heartbeatIntervalMs:p});try{let o=te();o.removed.length>0&&s(t,{event:"eval_worktrees_swept",removed:o.removed.length})}catch(o){s(t,{event:"eval_worktree_sweep_failed",error:o instanceof Error?o.message:String(o)})}H=oe({signal:e.signal,onPause:l(o=>{s(t,{event:"machine_pause",...o,jobId:h?.jobId??null}),h?.beat()},"onPause")});let m=be(d,e.signal,t,e.version);re({signal:e.signal,log:t}).catch(o=>{s(t,{event:"tt_heartbeat_fatal",error:o instanceof Error?o.message:String(o)})});let g=5*6e4,f=0,a=l(()=>{if(!e.readInstalledVersion||!e.version)return!1;let o=Date.now();if(o-f<g)return!1;f=o;let b=e.readInstalledVersion();return!!(b&&b!==e.version)},"versionDrifted"),n=new AbortController,i=n.signal;e.signal.aborted?n.abort():e.signal.addEventListener("abort",()=>n.abort(),{once:!0});let c=l(async(o,b)=>{let _=le;for(;!i.aborted;){if(a()){s(t,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),n.abort(),e.onVersionDrift?.();break}let y=null;try{y=await we([...b],r)}catch(k){let me=k instanceof M?k.statusCode:void 0;if(s(t,{event:"poll_error",lane:o,status:me,error:k instanceof Error?k.message:String(k)}),!await I(_,i))break;_=Math.min(_*2,de);continue}if(!y){if(s(t,{event:"poll_204",lane:o}),!await I(_,i))break;_=Math.min(_*2,de);continue}_=le,await ye(y,p,t,i)}},"runLane"),u=d.filter(o=>ce.has(o)),v=d.filter(o=>!ce.has(o));u.length>0&&v.length>0?(s(t,{event:"agent_lanes",heavy:u.length,fast:v.length}),await Promise.all([c("heavy",u),c("fast",v)])):await c("single",d),await m.shutdown(),s(t,{event:"agent_stop"})}l(en,"runAgentLoop");export{ue as a,ie as b,ge as c,we as d,en as e};
@@ -1 +0,0 @@
1
- import{a as c}from"./chunk-ZLLER3HP.js";import{fetchAllSources as _,TIER_1_SOURCES as b,TIER_2_SOURCES as w,loadDiscoveredSources as $}from"@rulemetric/skills-registry";import{writeFile as U,mkdir as I}from"node:fs/promises";import O from"node:os";import E from"node:path";var l=200;async function v(m,e){let u=e.failed>0?16096779:2278750,d={title:e.failed>0?"\u26A0\uFE0F Skills registry refresh (partial failures)":"\u2705 Skills registry refreshed",color:u,fields:[{name:"Total skills",value:String(e.total),inline:!0},{name:"Sources",value:String(e.sources),inline:!0},{name:"Duration",value:`${Math.round(e.durationMs/1e3)}s`,inline:!0},{name:"Inserted",value:String(e.inserted),inline:!0},{name:"Updated",value:String(e.updated),inline:!0},{name:"Unchanged",value:String(e.unchanged),inline:!0},...e.failed>0?[{name:"Failed",value:String(e.failed),inline:!0}]:[]],timestamp:new Date().toISOString()};try{let n=await fetch(m,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({embeds:[d]})});n.ok||console.error("[cron-refresh-skills] Discord alert failed",n.status)}catch(n){console.error("[cron-refresh-skills] Discord alert threw",n)}}c(v,"postDiscordAlert");var C=c(async(m,e)=>{if(!process.env.GITHUB_TOKEN){e.logger.warn("GITHUB_TOKEN unset \u2014 skipping skills registry refresh. Without a token the unauthenticated 60 req/hr cap is too tight for ~351 sources; set GITHUB_TOKEN (5000 req/hr) and re-run.");return}let u=Date.now(),g=$(),d=new Set,n=[...b,...w,...g].filter(r=>d.has(r.repo)?!1:(d.add(r.repo),!0));e.logger.info(`Fetching from ${n.length} sources (T1=${b.length}, T2=${w.length}, discovered=${g.length})`);let o=await _(n,{onProgress:c((r,a)=>e.logger.info(`fetched ${a} from ${r}`),"onProgress")}),S=E.join(O.homedir(),".config","rulemetric");await I(S,{recursive:!0});let R=E.join(S,"skills-registry.json");await U(R,JSON.stringify({generatedAt:new Date().toISOString(),skills:o.entries},null,2)),e.logger.info(`Refreshed disk registry: ${o.entries.length} skills`);let k=process.env.RULEMETRIC_API_URL,T=process.env.RULEMETRIC_REGISTRY_BOT_TOKEN;if(!k||!T){e.logger.warn("RULEMETRIC_API_URL or RULEMETRIC_REGISTRY_BOT_TOKEN unset; skipping DB sync");return}let f=0,h=0,p=0,s=0;for(let r=0;r<o.entries.length;r+=l){let a=o.entries.slice(r,r+l).map(t=>({id:t.id,name:t.name,description:t.description,content:t.content,source:t.source,tags:t.tags,category:t.category,updatedAt:t.updatedAt,sourceUpdatedAt:t.sourceUpdatedAt,popularity:t.popularity}));try{let t=await fetch(`${k}/api/skills/sync-public`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${T}`},body:JSON.stringify({skills:a})});if(!t.ok){e.logger.warn(`Batch ${r/l} failed: ${t.status} ${await t.text()}`),s+=a.length;continue}let i=await t.json();f+=i.inserted,h+=i.updated,p+=i.unchanged,i.skipped&&(e.logger.warn(`Batch ${r/l}: ${i.skipped} skills skipped (invalid)`),s+=i.skipped)}catch(t){e.logger.warn(`Batch ${r/l} threw: ${t instanceof Error?t.message:String(t)}`),s+=a.length}}e.logger.info(`DB sync: inserted=${f} updated=${h} unchanged=${p} failed=${s}`);let y=process.env.DISCORD_WEBHOOK_URL;y&&await v(y,{total:o.entries.length,inserted:f,updated:h,unchanged:p,failed:s,sources:n.length,durationMs:Date.now()-u})},"cronRefreshSkills");export{C as a};
@@ -1 +0,0 @@
1
- import{a as d}from"./chunk-I6W2KC6W.js";import{a as g}from"./chunk-HYQ5YKBC.js";import{e as c,h as p}from"./chunk-GIXHG5FK.js";import{a as i}from"./chunk-ZLLER3HP.js";import{createHash as l}from"node:crypto";import{z as r}from"zod";var m=r.object({content:r.string().min(1),name:r.string().min(1),type:r.enum(["instruction","skill"]),contentHash:r.string().regex(/^[a-f0-9]{64}$/),suggestionId:r.string().uuid()}).strict();async function w(e,u){let t=m.parse(e.candidateSnapshot);if(l("sha256").update(t.content).digest("hex")!==t.contentHash)throw new Error("Candidate snapshot hash mismatch");let o=e.preparationSourceJobId?{preparationSourceJobId:e.preparationSourceJobId}:await g({...e,candidateSnapshot:t,config:{...e.config,parallel:1,runsPerEval:1,iteration:1,skipBaseline:!1,skipGrading:!1,generateIfEmpty:!0,timeout:12e4}},u);if((await c(`/api/eval-targets/${e.evalTargetId}/jobs`)).find(s=>s.id===e.mirrorId)?.status==="cancelled")return{...o,cancelled:!0,adoptionAllowed:!1};let a;try{a=await d({evalTargetId:e.evalTargetId,evalJobId:e.preparationSourceJobId??e.mirrorId,...t})}catch(s){a={status:"blocked",reason:s instanceof Error?s.message:String(s)}}let n={...o,livePreparation:a,evidenceKind:"constructed_evaluation",candidateHash:t.contentHash,suggestionId:t.suggestionId,adoptionAllowed:!1};return await p(`/api/eval-jobs/${e.mirrorId}/state`,{result:n}),n}i(w,"processSuggestionEval");export{w as a};
@@ -1 +0,0 @@
1
- import{b as l}from"./chunk-IG4JMWFK.js";import{a as f}from"./chunk-5RBLIVBF.js";import{a as p}from"./chunk-EHW2KS6R.js";import{h as m}from"./chunk-GIXHG5FK.js";import{a as c}from"./chunk-ZLLER3HP.js";async function d(t){if(!t.worktree?.create)return t;let{branch:n,baseRef:i}=t.worktree,o=await l({repoRoot:t.projectPath,branch:n,baseRef:i});return{...t,projectPath:o.path,gitBranch:o.branch}}c(d,"resolveWorktreeForLaunch");async function j(t,n){let{mirrorId:i,tool:o}=t,{config:r}=t,a=c(e=>n.logger.info(e),"log");if(n.job.attempts>1)throw new f(`process_launch is not safe to retry (attempt ${n.job.attempts}). Re-launch manually.`);r=await d(r),r.worktree?.create&&a(`Worktree resolved: ${r.projectPath} (branch ${r.gitBranch})`),a(`Launching ${o}...`);let{getLauncher:g}=await import("./dist-UAAG2IWQ.js"),u=await g(o).launch(r);a(`Launch completed: sessionId=${u.sessionId}`);let s;if(r.scopedConfirmation&&r.mode==="headless")try{s=await p(r,u.sessionId)}catch(e){s={status:"unmeasured",reason:e instanceof Error?e.message:String(e)}}let h={...u,...s?{studyOutcome:s}:{},worktreePath:r.worktree?.create?r.projectPath:void 0,runId:r.runId};return await m(`/api/launch-jobs/${i}/state`,{result:h}).catch(e=>{a(`result persist failed: ${e instanceof Error?e.message:String(e)}`)}),h}c(j,"processLaunch");export{d as a,j as b};
@@ -1 +0,0 @@
1
- import{b as c,f as m}from"./chunk-GIXHG5FK.js";import{a as s}from"./chunk-ZLLER3HP.js";var R=new Set([408,429,502,503,504]),_=12e4,T=2e4,b=1e3,l=15e3;function p(t,e){try{t(JSON.stringify({ts:new Date().toISOString(),...e}))}catch{t(`[agent-loop] log_error event=${e.event}`)}}s(p,"structuredLog");function f(t,e){return e.aborted?Promise.resolve(!1):t<=0?Promise.resolve(!0):new Promise(r=>{let a=setTimeout(()=>{e.removeEventListener("abort",o),r(!0)},t),o=s(()=>{clearTimeout(a),e.removeEventListener("abort",o),r(!1)},"onAbort");e.addEventListener("abort",o,{once:!0})})}s(f,"abortableSleep");function g(t){return t instanceof c?R.has(t.statusCode):!0}s(g,"isRetryableReportError");async function S(t,e,r){let a=Date.now()+r.budgetMs,o=b;for(let i=1;;i++)try{return await m(t,e),{ok:!0,attempts:i}}catch(n){let u=a-Date.now();if(!g(n)||u<=0||r.signal.aborted)return{ok:!1,attempts:i,error:n};if(p(r.log,{event:`${r.event}_retry`,jobId:r.jobId,attempt:i,status:n instanceof c?n.statusCode:void 0,error:n instanceof Error?n.message:String(n),retryInMs:Math.min(o,u)}),!await f(Math.min(o,u),r.signal))return{ok:!1,attempts:i,error:n};o=Math.min(o*2,l)}}s(S,"postReportWithRetry");export{R as a,_ as b,T as c,b as d,l as e,p as f,f as g,g as h,S as i};