agent-log-viewer 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -21
- package/bin/cli.mjs +212 -12
- package/bin/server-runtime.mjs +51 -0
- package/bin/server-runtime.test.ts +190 -0
- package/dist/mcp-server.mjs +58 -25
- package/dist/runtime-host.mjs +40301 -0
- package/dist/standalone/.next/BUILD_ID +1 -1
- package/dist/standalone/.next/app-path-routes-manifest.json +13 -13
- package/dist/standalone/.next/build-manifest.json +2 -2
- package/dist/standalone/.next/prerender-manifest.json +3 -3
- package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js +3 -3
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js +3 -3
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js +3 -3
- package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js +3 -3
- package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js +3 -3
- package/dist/standalone/.next/server/app/api/limits/history/route.js +3 -3
- package/dist/standalone/.next/server/app/api/limits/route.js +3 -3
- package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/operations/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/stream/route.js +1 -1
- package/dist/standalone/.next/server/app/api/spawn/policy/route.js +3 -3
- package/dist/standalone/.next/server/app/api/tasks/route.js +2 -2
- package/dist/standalone/.next/server/app/index.html +1 -1
- package/dist/standalone/.next/server/app/index.rsc +2 -2
- package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/page.js +15 -12
- package/dist/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app-paths-manifest.json +13 -13
- package/dist/standalone/.next/server/chunks/2338.js +4 -1
- package/dist/standalone/.next/server/chunks/2904.js +3 -3
- package/dist/standalone/.next/server/chunks/3740.js +7 -7
- package/dist/standalone/.next/server/chunks/4012.js +3 -3
- package/dist/standalone/.next/server/chunks/4972.js +1 -1
- package/dist/standalone/.next/server/chunks/5689.js +2 -2
- package/dist/standalone/.next/server/chunks/7471.js +6 -6
- package/dist/standalone/.next/server/chunks/7733.js +3 -3
- package/dist/standalone/.next/server/chunks/8797.js +1 -1
- package/dist/standalone/.next/server/chunks/8817.js +1 -1
- package/dist/standalone/.next/server/chunks/9364.js +11 -11
- package/dist/standalone/.next/server/chunks/9411.js +2 -2
- package/dist/standalone/.next/server/chunks/9733.js +3 -3
- package/dist/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/standalone/.next/server/pages/404.html +1 -1
- package/dist/standalone/.next/server/pages/500.html +1 -1
- package/dist/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/standalone/.next/static/chunks/app/{page-ac9463b910bf83fe.js → page-7ba2538fa87e3d62.js} +17 -14
- package/dist/standalone/package.json +1 -1
- package/package.json +1 -1
- /package/dist/standalone/.next/static/{kt9OPe8iwfpNcdOX9ygvb → 2ybXlxpylgBaGz43zp2fM}/_buildManifest.js +0 -0
- /package/dist/standalone/.next/static/{kt9OPe8iwfpNcdOX9ygvb → 2ybXlxpylgBaGz43zp2fM}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=4012,exports.ids=[4012],exports.modules={4012:(a,b,c)=>{c.r(b),c.d(b,{CODEX_VIEWER_SPAWN_FEATURES:()=>v,NATIVE_MULTI_AGENT_HOOK_MATCHER:()=>p,NATIVE_MULTI_AGENT_TOOLS:()=>o,NATIVE_SUBAGENT_DENY_MESSAGE:()=>t,VIEWER_SPAWN_CAPABILITY_ENV:()=>r,VIEWER_SPAWN_CAPABILITY_HEADER:()=>k,VIEWER_SPAWN_ENDPOINT:()=>q,VIEWER_SPAWN_PROMPT_FENCE:()=>u,applyClaudeSpawnPolicy:()=>
|
|
2
|
-
printf '%s\\n' ${
|
|
1
|
+
"use strict";exports.id=4012,exports.ids=[4012],exports.modules={4012:(a,b,c)=>{c.r(b),c.d(b,{CODEX_VIEWER_SPAWN_FEATURES:()=>v,NATIVE_MULTI_AGENT_HOOK_MATCHER:()=>p,NATIVE_MULTI_AGENT_TOOLS:()=>o,NATIVE_SUBAGENT_DENY_MESSAGE:()=>t,VIEWER_SPAWN_CAPABILITY_ENV:()=>r,VIEWER_SPAWN_CAPABILITY_HEADER:()=>k,VIEWER_SPAWN_ENDPOINT:()=>q,VIEWER_SPAWN_PROMPT_FENCE:()=>u,applyClaudeSpawnPolicy:()=>H,claudeSpawnPolicyPaths:()=>x,fenceViewerSpawnPrompt:()=>I,prepareManagedClaudeSpawnHome:()=>G,resolveClaudeMcpServers:()=>E,viewerMcpRegistered:()=>F,viewerMcpServerEntry:()=>w});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c.n(h),j=c(10230);let k="x-llv-spawn-capability",l="LLV_MANAGED_NATIVE_SUBAGENT_DENY=1 ",m=".llv",n=["enableAllProjectMcpServers","enabledMcpjsonServers","disabledMcpjsonServers"],o=Object.freeze(["Task","Agent","Workflow","TeamCreate","TeamDelete","SendMessage"]),p=o.join("|"),q="http://127.0.0.1:8898/api/spawn",r="LLV_SPAWN_CAPABILITY",s=`Send header ${k}: $${r}.`,t=`Sub-agents are disabled on this surface. Spawn через POST ${q} with {engine, model, cwd, prompt, src: <your transcript path>, role, reviews?} and ${s} The worker then appears on the board with correct lineage.`,u=`Viewer spawn policy: avoid native sub-agent, collaboration, and background-agent features. Spawn every helper through POST ${q} with {engine, model, cwd, prompt, src: <your transcript path>, role, reviews?}. ${s} The worker appears on the board with correct lineage.`,v={plugins:!1,apps:!1,multi_agent:!1};function w(a=process.cwd()){let b=[g().resolve(a,"bin","mcp-server.mjs"),g().resolve(a,"..","..","bin","mcp-server.mjs")].find(a=>e().existsSync(a));if(!b)throw Error(`Viewer MCP launcher could not be resolved from package cwd: ${a}`);return{command:"bun",args:[b]}}function x(a,b){if(!/^[A-Za-z0-9_-]{1,128}$/.test(b))throw Error("Claude spawn policy profile id is invalid");let c=g().join(a,m,"hooks","deny-native-subagents.sh");return{settingsPath:g().join(a,m,"spawn-settings",`${b}.json`),mcpConfigPath:g().join(a,m,"spawn-mcp",`${b}.json`),hookPath:c,command:`${l}${z(c)}`}}function y(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:null}function z(a){return"'"+a.replace(/'/g,"'\\''")+"'"}function A(a,b,c){e().mkdirSync(g().dirname(a),{recursive:!0,mode:448});let d=g().join(g().dirname(a),`.${g().basename(a)}.${process.pid}.${i().randomUUID()}.tmp`);try{e().writeFileSync(d,b,{mode:c}),e().chmodSync(d,c),e().renameSync(d,a)}finally{e().rmSync(d,{force:!0})}}function B(a){let b;if(!e().existsSync(a))return{};try{b=JSON.parse(e().readFileSync(a,"utf8"))}catch{throw Error(`Claude settings are invalid JSON: ${a}`)}let c=y(b);if(!c)throw Error(`Claude settings must contain a JSON object: ${a}`);return c}function C(a){return Array.isArray(a)?a.filter(a=>"string"==typeof a):[]}function D(a){if(!a)return{};let b=g().resolve(a),c=b;for(let a=b;;a=g().dirname(a)){if(e().existsSync(g().join(a,".git"))){c=a;break}if(g().dirname(a)===a)break}let d=g().join(c,".mcp.json");return e().existsSync(d)?y(B(d).mcpServers)??{}:{}}function E(a,b,c=g().join(a,".claude.json")){let d=e().existsSync(c)?B(c):{},f=y(d.mcpServers)??{},h=y(d.projects),i=b&&h?y(h[b]):null,j=D(b),k=y(i?.mcpServers)??{};return{...f,...j,...k}}function F(a,b,c){return null!==y(E(a,b,c).viewer)}function G(a,b){let c=g().join(a,".claude.json");try{let a=e().lstatSync(c);if(a.isSymbolicLink()||!a.isFile())throw Error(`Claude state path is unsafe: ${c}`)}catch(a){if("ENOENT"!==a.code)throw a}let d={};if(e().existsSync(c)){let a;try{a=JSON.parse(e().readFileSync(c,"utf8"))}catch{throw Error(`Claude state is invalid JSON: ${c}`)}let b=y(a);if(!b)throw Error(`Claude state must contain a JSON object: ${c}`);d=b}let f=void 0===d.projects?{}:y(d.projects);if(!f)throw Error(`Claude state projects must contain a JSON object: ${c}`);let h=void 0===f[b]?{}:y(f[b]);if(!h)throw Error(`Claude project state must contain a JSON object: ${b}`);A(c,JSON.stringify({...d,hasCompletedOnboarding:!0,bypassPermissionsModeAccepted:!0,projects:{...f,[b]:{...h,hasTrustDialogAccepted:!0,hasCompletedProjectOnboarding:!0}}},null,2)+"\n",384)}function H(a,b={}){var c,d;let f,h=g().join(a,"settings.json"),k=x(a,b.profileId??i().randomUUID()),m=e().existsSync(h),o=m?B(h):b.baseSettingsPath?B(b.baseSettingsPath):{},q=m?{}:o;if(!b.allowSubagents&&!0===o.disableAllHooks)throw Error("Claude settings disableAllHooks prevents the Viewer spawn policy from enforcing native sub-agent denial");if(!b.allowSubagents&&!0===o.allowManagedHooksOnly)throw Error("Claude settings allowManagedHooksOnly prevents the Viewer spawn policy from enforcing native sub-agent denial");let r=void 0===o.hooks?{}:y(o.hooks);if(!r)throw Error("Claude settings hooks must contain a JSON object");let s=function(a){if(void 0===a)return[];if(!Array.isArray(a))throw Error("Claude settings hooks.PreToolUse must be an array");return a.flatMap(a=>{let b=y(a);if(!b||!Array.isArray(b.hooks))return[a];let c=b.hooks.filter(a=>{var b;return!("string"==typeof(b=y(a)?.command)&&b.startsWith(l))});return c.length?[{...b,hooks:c}]:[]})}(r.PreToolUse);if(!b.allowSubagents){let a=`#!/bin/sh
|
|
2
|
+
printf '%s\\n' ${z(t)} >&2
|
|
3
3
|
exit 2
|
|
4
|
-
`;
|
|
4
|
+
`;A(k.hookPath,a,448),s.push({matcher:p,hooks:[{type:"command",command:k.command}]})}let u=b.allowSubagents?q:{...q,disableAllHooks:!1,allowManagedHooksOnly:!1},v=(c=b.cwd,d=b.mcpServers,f=E(a,c,b.mcpStatePath),Object.fromEntries((0,j.c1)(d).flatMap(a=>{let b=y(f[a])??("viewer"===a?{type:"stdio",...w()}:null);return b?[[a,b]]:[]}))),F=new Set(Object.keys(v)),G=Object.keys(D(b.cwd)).filter(a=>!F.has(a)),I=Object.fromEntries(Object.entries(u).filter(([a])=>"mcpServers"!==a)),J=Object.fromEntries(n.flatMap(a=>void 0===o[a]?[]:[[a,o[a]]]));void 0!==o.enabledMcpjsonServers&&(J.enabledMcpjsonServers=C(o.enabledMcpjsonServers).filter(a=>F.has(a)));let K=[...new Set([...C(o.disabledMcpjsonServers),...G])];return K.length>0&&(J.disabledMcpjsonServers=K),A(k.settingsPath,JSON.stringify({...I,...J,hooks:{...r,PreToolUse:s}},null,2)+"\n",384),A(k.mcpConfigPath,JSON.stringify({mcpServers:v},null,2)+"\n",384),k}function I(a,b){return"codex"!==a?b:[b.trim(),u].filter(Boolean).join("\n\n")}}};
|
|
@@ -125,6 +125,6 @@
|
|
|
125
125
|
`).get(this.options.collection);if(d&&Number.isInteger((c={pid:d.owner_pid,startIdentity:d.owner_start_identity}).pid)&&c.pid>0&&function(a,b){if(!j.B.pidAlive(a))return!1;if(null===b)return!0;let c=j.B.processIdentity(a);return null===c||c===b}(c.pid,c.startIdentity))return a.exec("ROLLBACK"),!1;return d&&a.query("DELETE FROM state_leases WHERE collection = ?").run(this.options.collection),a.query(`
|
|
126
126
|
INSERT INTO state_leases(collection, owner_token, owner_pid, owner_start_identity, acquired_at)
|
|
127
127
|
VALUES (?, ?, ?, ?, ?)
|
|
128
|
-
`).run(this.options.collection,b,process.pid,j.B.processIdentity(process.pid),Date.now()),a.exec("COMMIT"),!0}catch(b){if(z(a),A(b))return!1;throw b}}acquireLeaseSync(){let a=v(this.filename),b=e().randomUUID();try{for(let c=0;c<6e3;c+=1){if(this.tryAcquireLease(a,b))return b;Atomics.wait(m,0,0,5)}throw new k.Qm(this.options.busyMessage)}finally{a.close()}}async acquireLease(){let a=v(this.filename),b=e().randomUUID();try{for(let c=0;c<6e3;c+=1){if(this.tryAcquireLease(a,b))return b;await new Promise(a=>setTimeout(a,5))}throw new k.Qm(this.options.busyMessage)}finally{a.close()}}releaseLeaseSync(a){let b=v(this.filename);try{for(let c=0;c<6e3;c+=1)try{b.exec("BEGIN IMMEDIATE"),b.query("DELETE FROM state_leases WHERE collection = ? AND owner_token = ?").run(this.options.collection,a),b.exec("COMMIT");return}catch(a){if(z(b),!A(a))throw a;Atomics.wait(m,0,0,5)}throw new k.Qm(this.options.busyMessage)}finally{b.close()}}async releaseLease(a){let b=v(this.filename);try{for(let c=0;c<6e3;c+=1)try{b.exec("BEGIN IMMEDIATE"),b.query("DELETE FROM state_leases WHERE collection = ? AND owner_token = ?").run(this.options.collection,a),b.exec("COMMIT");return}catch(a){if(z(b),!A(a))throw a;await new Promise(a=>setTimeout(a,5))}throw new k.Qm(this.options.busyMessage)}finally{b.close()}}}},16196:(a,b,c)=>{function d(a){if(void 0===a)return!1;switch(a.trim().replace(/^(["'])([\s\S]*)\1$/,"$2").trim().toLowerCase()){case"0":case"false":case"off":case"no":return!0;default:return!1}}function
|
|
128
|
+
`).run(this.options.collection,b,process.pid,j.B.processIdentity(process.pid),Date.now()),a.exec("COMMIT"),!0}catch(b){if(z(a),A(b))return!1;throw b}}acquireLeaseSync(){let a=v(this.filename),b=e().randomUUID();try{for(let c=0;c<6e3;c+=1){if(this.tryAcquireLease(a,b))return b;Atomics.wait(m,0,0,5)}throw new k.Qm(this.options.busyMessage)}finally{a.close()}}async acquireLease(){let a=v(this.filename),b=e().randomUUID();try{for(let c=0;c<6e3;c+=1){if(this.tryAcquireLease(a,b))return b;await new Promise(a=>setTimeout(a,5))}throw new k.Qm(this.options.busyMessage)}finally{a.close()}}releaseLeaseSync(a){let b=v(this.filename);try{for(let c=0;c<6e3;c+=1)try{b.exec("BEGIN IMMEDIATE"),b.query("DELETE FROM state_leases WHERE collection = ? AND owner_token = ?").run(this.options.collection,a),b.exec("COMMIT");return}catch(a){if(z(b),!A(a))throw a;Atomics.wait(m,0,0,5)}throw new k.Qm(this.options.busyMessage)}finally{b.close()}}async releaseLease(a){let b=v(this.filename);try{for(let c=0;c<6e3;c+=1)try{b.exec("BEGIN IMMEDIATE"),b.query("DELETE FROM state_leases WHERE collection = ? AND owner_token = ?").run(this.options.collection,a),b.exec("COMMIT");return}catch(a){if(z(b),!A(a))throw a;await new Promise(a=>setTimeout(a,5))}throw new k.Qm(this.options.busyMessage)}finally{b.close()}}}},16196:(a,b,c)=>{function d(a){return`${a} is unavailable; start agent-log-viewer through its CLI and check the CLI log for the host startup failure`}function e(a){if(void 0===a)return!1;switch(a.trim().replace(/^(["'])([\s\S]*)\1$/,"$2").trim().toLowerCase()){case"0":case"false":case"off":case"no":return!0;default:return!1}}function f(a=process.env){return!e(a.LLV_STRUCTURED_HOSTS)}function g(a=process.env){return e(a.LLV_RUNTIME_EVENTS)}function h(a=process.env){return!g(a)&&!!j(a)}function i(a=process.env){return!e(a.NEXT_PUBLIC_RUNTIME_UI)}function j(a=process.env){return a.LLV_RUNTIME_HOST_SOCKET?.trim()||null}c.d(b,{Ee:()=>i,S0:()=>j,Zn:()=>h,cM:()=>f,ji:()=>g,lN:()=>d})},21420:(a,b,c)=>{let d;c.d(b,{P3:()=>h,bL:()=>f,x_:()=>g});let e=BigInt(1e6);class f extends Error{constructor(...a){super(...a),this.name="StructuredRuntimeRequirementError"}}function g(a=process.platform,b=process.versions){if("darwin"===a&&!b.bun)throw new f("structured hosts on macOS require the Viewer server to run with Bun")}function h(a){if(!Number.isInteger(a)||a<=0)return null;let b=function(){if(void 0!==d)return d;if("darwin"!==process.platform)return d=null;try{let a=c(85786),b=a.dlopen("/usr/lib/libproc.dylib",{proc_pidinfo:{args:[a.FFIType.i32,a.FFIType.i32,a.FFIType.u64,a.FFIType.ptr,a.FFIType.i32],returns:a.FFIType.i32}});d=(c,d)=>Number(b.symbols.proc_pidinfo(c,3,BigInt(0),a.ptr(d),d.byteLength))}catch{d=null}return d}();if(!b)return null;let f=Buffer.alloc(136);try{var g=b(a,f);if(!Number.isInteger(a)||a<=0||g<136||f.byteLength<136||f.readUInt32LE(12)!==a)return null;let c=f.readBigUInt64LE(120),d=f.readBigUInt64LE(128);return c===BigInt(0)||d>=e?null:`${a}:${c}:${d.toString().padStart(6,"0")}`}catch{return null}}},27146:(a,b,c)=>{c.d(b,{ks:()=>n,oy:()=>t,Pn:()=>r,BQ:()=>s});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h);function j(a=process.env){return"1"===a.LLV_STAGING}let k="agent-log-viewer",l="live-log-viewer";function m(){return process.env.XDG_CONFIG_HOME||i().join(g().homedir(),".config")}function n(a){var b=m(),c=a;let d=i().join(b,k,c);if(e().existsSync(d))return d;let f=i().join(b,l,c);return e().existsSync(f)?f:d}let o=new Set,p=".migrated-from-legacy";function q(a,b){if("1"===process.env.LLV_RESOURCE_OBSERVATION_WORKER||o.has(a))return;let c=i().join(a,p),d=()=>`${new Date().toISOString()} ${b}
|
|
129
129
|
`;try{if(e().existsSync(c))return void o.add(a);if(!e().existsSync(b)){e().mkdirSync(a,{recursive:!0}),e().writeFileSync(c,d()),o.add(a);return}if(!e().existsSync(a)){e().mkdirSync(i().dirname(a),{recursive:!0});let c=`${a}.migrating.${process.pid}`;e().rmSync(c,{recursive:!0,force:!0});try{e().cpSync(b,c,{recursive:!0}),e().writeFileSync(i().join(c,p),d()),e().renameSync(c,a)}catch(a){throw e().rmSync(c,{recursive:!0,force:!0}),a}o.add(a);return}e().cpSync(b,a,{recursive:!0,force:!1,errorOnExist:!1}),e().writeFileSync(c,d()),o.add(a)}catch(c){console.error(`viewer state migration ${b} -> ${a} failed; will retry:`,c)}}function r(){let a=process.env.LLV_STATE_DIR;if(j()){var b=a;let c=b||i().join(m(),k,"state-staging"),d=i().resolve(c);if([i().join(m(),k,"state"),i().join(m(),l,"state"),i().join(g().homedir(),".claude","viewer-state")].some(a=>i().resolve(a)===d))throw Error(`staging mode refuses the production state dir ${d}; set LLV_STATE_DIR to a staging-only dir`);return c}if(a)return a;let c=i().join(m(),k,"state");return q(c,i().join(g().homedir(),".claude","viewer-state")),c}function s(...a){return i().join(r(),...a)}function t(){if(j())return s("inbox");let a=i().join(m(),k,"inbox");return q(a,i().join(g().homedir(),".claude","viewer-inbox")),a}},52e3:(a,b,c)=>{let d;c.d(b,{B:()=>C});var e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(1198);let j="/proc";function k(a){try{return f().readFileSync(h().join(j,String(a),"cmdline"),"utf8").split("\0").filter(Boolean)}catch{return[]}}function l(a){try{return f().readlinkSync(h().join(j,String(a),"cwd"))}catch{return null}}function m(a){let b;try{b=f().readFileSync(h().join(j,String(a),"stat"),"utf8")}catch{return null}return b.slice(b.lastIndexOf(")")+2).trim().split(/\s+/)}function n(a){try{return(128&f().lstatSync(a).mode)!=0}catch{return!1}}function o(a){let b;try{b=f().readdirSync(j,{withFileTypes:!0})}catch{return}for(let c of b){let b;if(!c.isDirectory()||!/^\d+$/.test(c.name))continue;let d=Number(c.name),e=h().join(j,c.name,"fd");try{b=f().readdirSync(e,{withFileTypes:!0})}catch{continue}for(let c of b){let b,g=h().join(e,c.name);try{b=f().readlinkSync(g)}catch{continue}a(b,d,()=>n(g))}}}let p={name:"linux",pidAlive:function(a){return Number.isInteger(a)&&a>0&&f().existsSync(h().join(j,String(a)))},readArgv:k,readCwd:l,readPpid:function(a){let b=m(a),c=b?Number(b[1]):NaN;return Number.isInteger(c)&&c>1?c:null},processIdentity:function(a){let b=m(a),c=b?.[19];return c?`${a}:${c}`:null},readEnvVar:function(a,b){let c;try{c=f().readFileSync(h().join(j,String(a),"environ"),"utf8")}catch{return null}let d=b+"=",e=null;for(let a of c.split("\0"))a.startsWith(d)&&(e=a.slice(d.length));return e},listProcesses:function(){let a,b=[];try{a=f().readdirSync(j,{withFileTypes:!0})}catch{return b}for(let c of a){if(!c.isDirectory()||!/^\d+$/.test(c.name))continue;let a=Number(c.name);b.push({pid:a,argv:k(a),cwd:l(a),tty:function(a){let b=m(a),c=b?Number(b[4]):NaN;return Number.isInteger(c)&&c>0?c:0}(a)})}return b},systemMemory:function(){try{return(0,i.NW)(f().readFileSync(h().join(j,"meminfo"),"utf8"))}catch{return null}},processMemory:function(a){let b=new Map;for(let c of a)if(Number.isInteger(c)&&!(c<=0))try{b.set(c,(0,i.sW)(f().readFileSync(h().join(j,String(c),"status"),"utf8")))}catch{}return b},ppidMap:function(){let a,b=new Map;try{a=f().readdirSync(j,{withFileTypes:!0})}catch{return b}for(let c of a){if(!c.isDirectory()||!/^\d+$/.test(c.name))continue;let a=Number(c.name),d=m(a),e=d?Number(d[1]):NaN;Number.isInteger(e)&&e>0&&b.set(a,e)}return b},scanFdTargetsUnder:function(a,b){o(b)},scanFdTargetsFor:function(a,b){o(b)},pidWritesPath:function(a,b){let c,d;try{c=f().realpathSync(b)}catch{c=null}let e=h().join(j,String(a),"fd");try{d=f().readdirSync(e,{withFileTypes:!0})}catch{return!1}for(let a of d){let d,g=h().join(e,a.name);try{d=f().readlinkSync(g)}catch{continue}if((d===b||d===c)&&n(g))return!0}return!1},pidHoldsPath:function(a,b){let c;try{c=f().readdirSync(h().join(j,String(a),"fd"),{withFileTypes:!0})}catch{return!1}for(let d of c)try{if(f().readlinkSync(h().join(j,String(a),"fd",d.name))===b)return!0}catch{continue}return!1}};var q=c(31421),r=c(48161),s=c.n(r),t=c(21420);function u(a,b){let c=(0,q.spawnSync)(a,b,{encoding:"utf8",maxBuffer:0x1000000,timeout:1e4});return c.error||"string"!=typeof c.stdout?"":c.stdout}let v=new Map,w=1,x=/^\s*(\d+)\s+(\d+)\s+(\S+)\s+(.*)$/;function y(a,b){let c=0,d="";for(let e of a.split("\n")){if(!e)continue;let a=e[0],f=e.slice(1);if("p"===a)c=Number(f),d="";else if("f"===a)d="";else if("a"===a)d=f;else if("n"===a&&c>0&&f){let a="w"===d||"u"===d;b(f,c,()=>a)}}}let z=null;function A(){let a=Date.now();if(z&&a-z.at<5e3)return z.byPid;let b=function(a){let b=new Map;for(let c of a.split("\n")){let a=x.exec(c);if(!a)continue;let d=Number(a[1]),e=Number(a[2]),f=(a[4]??"").trim().split(/\s+/).filter(Boolean);b.set(d,{ppid:Number.isInteger(e)&&e>1?e:null,tty:function(a){if(!a||"?"===a||"??"===a||"-"===a)return 0;let b=v.get(a);return void 0===b&&(b=w,w+=1,v.set(a,b)),b}(a[3]??""),argv:f})}return b}(u("ps",["-axo","pid=,ppid=,tty=,args="])),c=function(a){let b=new Map,c=0;for(let d of a.split("\n")){if(!d)continue;let a=d[0],e=d.slice(1);"p"===a?c=Number(e):"n"===a&&c>0&&b.set(c,e)}return b}(u("lsof",["-w","-d","cwd","-Fpn"])),d=new Map;for(let[a,e]of b)d.set(a,{argv:e.argv,ppid:e.ppid,tty:e.tty,cwd:c.get(a)??null});return z={at:a,byPid:d},d}let B={name:"portable",pidAlive:function(a){if(!Number.isInteger(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch(a){return"EPERM"===a.code}},readArgv:function(a){return A().get(a)?.argv??[]},readCwd:function(a){return A().get(a)?.cwd??null},readPpid:function(a){return A().get(a)?.ppid??null},processIdentity:function(a){return!Number.isInteger(a)||a<=0?null:"darwin"===process.platform?(0,t.P3)(a):null},readEnvVar:function(){return null},listProcesses:function(){let a=[];for(let[b,c]of A())a.push({pid:b,argv:c.argv,cwd:c.cwd,tty:c.tty});return a},systemMemory:function(){let a=s().totalmem(),b=(0,i.Lc)(u("vm_stat",[]));if(!a||null===b)return null;let c=(0,i.yh)(u("sysctl",["-n","vm.swapusage"]));return{ramTotal:a,ramAvailable:Math.min(b,a),swapTotal:c?.swapTotal??0,swapUsed:c?.swapUsed??0}},processMemory:function(a){let b=new Set;for(let c of a)Number.isInteger(c)&&c>0&&b.add(c);let c=new Map;if(0===b.size)return c;for(let[a,d]of(0,i.CT)(u("ps",["-axo","pid=,rss="])))b.has(a)&&c.set(a,{rssBytes:d,swapBytes:0});return c},ppidMap:function(){let a=new Map;for(let[b,c]of A())null!==c.ppid&&a.set(b,c.ppid);return a},scanFdTargetsUnder:function(a,b){a&&f().existsSync(a)&&y(u("lsof",["-w","+D",a,"-Fpfan"]),b)},scanFdTargetsFor:function(a,b){let c=[...new Set(a.filter(Boolean))];0!==c.length&&y(u("lsof",["-w","-Fpfan","--",...c]),b)},pidWritesPath:function(a,b){let c=!1;return y(u("lsof",["-w","-a","-p",String(a),"-Fpfan","--",b]),(a,b,d)=>{d()&&(c=!0)}),c},pidHoldsPath:function(a,b){let c=!1;return y(u("lsof",["-w","-a","-p",String(a),"-Fpfan","--",b]),()=>{c=!0}),c}},C="portable"===(d=process.env.VIEWER_PROC_BACKEND)?B:"linux"===d||"linux"===process.platform?p:B},61532:(a,b,c)=>{c.d(b,{lk:()=>g,vE:()=>h,xE:()=>i});let d=process;function e(){return{state:"pending",phase:"waiting for structured startup",completedHosts:0,totalHosts:null,updatedAt:new Date().toISOString()}}function f(a,b){if(!Number.isSafeInteger(b.completedHosts)||b.completedHosts<0)throw Error("structured host startup completed count is invalid");if(null!==b.totalHosts&&(!Number.isSafeInteger(b.totalHosts)||b.totalHosts<b.completedHosts))throw Error("structured host startup total count is invalid");d.__llvStructuredHostStartupProgress={...b,state:a,updatedAt:new Date().toISOString()}}function g(a){f(!0===d.__llvStructuredHostStartupFailed?"failed":"pending",a)}function h(){d.__llvStructuredHostStartupFailed=!0,f("failed",d.__llvStructuredHostStartupProgress??e())}function i(){d.__llvStructuredHostStartupFailed=!1,f("ready",{...d.__llvStructuredHostStartupProgress??e(),phase:"ready"})}},89204:(a,b,c)=>{c.d(b,{Ol:()=>r,Qm:()=>l,pM:()=>s});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(52e3);let k=new Int32Array(new SharedArrayBuffer(4));class l extends Error{constructor(a){super(a),this.name="FileTransactionBusyError"}}function m(a){try{let b=JSON.parse(g().readFileSync(a,"utf8"));if("number"==typeof b.pid&&Number.isInteger(b.pid)&&b.pid>0){let a="string"==typeof b.startIdentity?b.startIdentity:null;if(!j.B.pidAlive(b.pid))return!0;if(null!==a){let c=j.B.processIdentity(b.pid);return null!==c&&c!==a}return!1}return Date.now()-g().statSync(a).mtimeMs>3e4}catch{try{return Date.now()-g().statSync(a).mtimeMs>3e4}catch{return!1}}}function n(a,b){try{JSON.parse(g().readFileSync(a,"utf8")).token===b&&g().rmSync(a,{force:!0})}catch{}}function o(a){let b=`${a}.write-lock`,c=`${a}.write-locks`;g().mkdirSync(c,{recursive:!0,mode:448});let d={pid:process.pid,startIdentity:j.B.processIdentity(process.pid),token:e().randomUUID()},f=i().join(c,`${String(Date.now()).padStart(16,"0")}-${process.pid}-${e().randomUUID()}.json`);return g().writeFileSync(f,JSON.stringify(d),{encoding:"utf8",flag:"wx",mode:384}),{lockPath:b,queuePath:c,owner:d,ticketPath:f}}function p(a){let b;if(function(a){let b=[];for(let c of g().readdirSync(a.queuePath).filter(a=>a.endsWith(".json")).sort()){let d=i().join(a.queuePath,c);if(m(d)){g().rmSync(d,{force:!0});continue}g().existsSync(d)&&b.push(d)}return b[0]??null}(a)!==a.ticketPath)return null;try{b=g().openSync(a.lockPath,"wx",384)}catch(b){if("EEXIST"!==b.code)throw b;return m(a.lockPath)&&g().rmSync(a.lockPath,{force:!0}),null}try{return g().writeFileSync(b,JSON.stringify(a.owner),"utf8"),g().fsyncSync(b),b}catch(c){throw g().closeSync(b),g().rmSync(a.lockPath,{force:!0}),c}}function q(a,b){g().closeSync(b),n(a.lockPath,a.owner.token)}function r(a,b,c){let d=o(a);try{for(let a=0;a<6e3;a+=1){let a=p(d);if(null===a){Atomics.wait(k,0,0,5);continue}try{return c()}finally{q(d,a)}}throw new l(b)}finally{n(d.ticketPath,d.owner.token)}}async function s(a,b,c){let d=o(a);try{for(let a=0;a<6e3;a+=1){let a=p(d);if(null===a){await new Promise(a=>setTimeout(a,5));continue}try{return await c()}finally{q(d,a)}}throw new l(b)}finally{n(d.ticketPath,d.owner.token)}}},94972:(a,b,c)=>{c.r(b),c.d(b,{accountControllerDelayMs:()=>t,activateViewerRuntimeWhenCurrent:()=>s,checkpointHotStateRollbackMirrorsForDemotion:()=>w,completeViewerReleaseDemotion:()=>v,completeViewerRuntimeActivation:()=>D,establishHotStateCutoverBoundary:()=>r,initializeHotStateStoresAtStartup:()=>x,initializeOperatorSpawnCapabilityAtStartup:()=>z,registerViewerRuntime:()=>E,runStructuredHostStartup:()=>C,scheduleAccountMigrationController:()=>u,startCurrentReleaseControllers:()=>y,startWakatimeIntegrationIfEnabled:()=>A,viewerReleaseOwnsTraffic:()=>p});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(27146),i=c(16196),j=c(95697),k=c(14928),l=c(61532),m=c(21420),n=c(65281);let o=globalThis;function p(a=process.env,b=()=>e().readFileSync((0,h.BQ)("viewer-release.json"),"utf8")){let c,d=a.PORT?.trim();if(!d)return!0;try{c=b()}catch(a){return"ENOENT"===a.code}try{let a=JSON.parse(c);if("string"!=typeof a.endpoint)return!1;return new URL(a.endpoint).port===d}catch{return!1}}function q(){return["flows.json","pipelines.json","pipelines-archive.json","workflows.json"].map(a=>{let b=(0,h.BQ)(a);try{let c=e().statSync(b,{bigint:!0});return`${a}:${c.mtimeNs}:${c.size}`}catch{return`${a}:missing`}}).join("|")}async function r(a,b={}){let d=g().dirname((0,h.BQ)("state.sqlite")),f=(0,j.jU)(d);if((null!==f||e().existsSync((0,h.BQ)("viewer-release.json")))&&null===f)throw Error("viewer release cannot publish hot-state authority");if(null===f)return(0,k.iy)((0,h.BQ)("state.sqlite")),{authority:null,reimportLegacy:!1};let i=(0,j.a5)(d);if(i?.mode==="sqlite"&&i.releaseRevision!==f)return i=(0,j.RG)(d,"sqlite",f),(0,k.iy)((0,h.BQ)("state.sqlite")),{authority:i,reimportLegacy:!1};if(i?.mode==="sqlite"&&i.releaseRevision===f)return(0,k.iy)((0,h.BQ)("state.sqlite")),{authority:i,reimportLegacy:!1};if(i?.mode==="fencing")throw Error("hot-state cutover cannot replace an active rollback fence");(i?.mode!=="preparing"||i.releaseRevision!==f)&&(i=(0,j.RG)(d,"preparing",f));let{hotStateMigrationApplied:l,hotStateMigrationDryRun:m}=await Promise.all([c.e(2904),c.e(5689),c.e(3953),c.e(8817),c.e(3916),c.e(6796),c.e(7159)]).then(c.bind(c,25682));if(l())return(0,k.iy)((0,h.BQ)("state.sqlite")),{authority:i,reimportLegacy:!1};let n=b.pollMs??250,o=b.stablePolls??3,p=b.maxPolls??12,s=b.schedule??((a,b)=>setTimeout(a,b)),t=b.legacySignature??q,u=t(),v=0;for(let b=0;b<p;b+=1){if(await new Promise(a=>s(a,n).unref?.()),!a())throw Error("viewer release lost traffic during hot-state cutover");let b=t();if(v=b===u?v+1:0,u=b,v>=o)return m(),(0,k.iy)((0,h.BQ)("state.sqlite")),{authority:i,reimportLegacy:!0}}throw Error("legacy hot-state files did not quiesce during release cutover")}async function s(a,b,c={}){let d=c.pollMs??250,e=c.schedule??((a,b)=>setTimeout(a,b)),f=c.log??console.error,g=!1,h=!1,i=!1,j=null,k=()=>{if(h)return;if(g&&!b()){h=!0,Promise.resolve(c.onDemoted?.({fenced:null!==j})).catch(a=>{f("[viewer release] demotion checkpoint failed",a)});return}let a=g?c.fenceRequest?.()??null:null;a&&"fencing"===a.mode?j===a.epoch||i||(i=!0,Promise.resolve(c.onFenceRequested?.(a)).then(()=>{j=a.epoch}).catch(a=>{f("[viewer release] hot-state fence checkpoint failed",a)}).finally(()=>{i=!1})):i||(j=null),e(k,d).unref?.()},l=async()=>{g||(g=!0,e(k,d).unref?.(),await a())};if(b())return void await l();let m=()=>{if(!g){if(!b())return void e(m,d).unref?.();l().catch(a=>f("[viewer release] deferred runtime activation failed",a))}};e(m,d).unref?.()}function t(a=process.env){let b=Number(a.LLV_ACCOUNT_CONTROLLER_DELAY_MS??0);return Number.isFinite(b)?Math.max(0,b):0}function u(a,b){let c=()=>{a().catch(a=>{console.error("[account migration controller] initial durable reconciliation failed",a)})},d=setTimeout(()=>{b>0?c():setTimeout(c,0).unref?.()},b);d.unref?.()}async function v(a,b=a=>process.exit(a),c=console.error){try{await a(),b(0)}catch(a){c("[viewer release] demotion checkpoint failed",a),b(1)}}async function w(){let[a,b,d]=await Promise.all([Promise.all([c.e(2904),c.e(5689),c.e(3953),c.e(8817),c.e(1888)]).then(c.bind(c,98817)),Promise.all([c.e(5689),c.e(3916),c.e(9507)]).then(c.bind(c,3916)),Promise.all([c.e(2904),c.e(5689),c.e(3953),c.e(8817),c.e(6796),c.e(7126)]).then(c.bind(c,96796))]),e=a.checkpointFlowRollbackMirrorForDemotion(),f=b.checkpointPipelineRollbackMirrorsForDemotion(),g=d.checkpointWorkflowRollbackMirrorForDemotion();return{flows:e,pipelines:f.pipelines,pipelinesArchive:f.pipelinesArchive,workflows:g}}async function x(a={authority:null,reimportLegacy:!1},b={}){let[d,e,f]=await Promise.all([Promise.all([c.e(2904),c.e(5689),c.e(3953),c.e(8817),c.e(1888)]).then(c.bind(c,98817)),Promise.all([c.e(5689),c.e(3916),c.e(9507)]).then(c.bind(c,3916)),Promise.all([c.e(2904),c.e(5689),c.e(3953),c.e(8817),c.e(6796),c.e(7126)]).then(c.bind(c,96796))]);return((0,k.t0)((0,h.BQ)("state.sqlite"),[d.flowStateCollectionSeed(),...e.pipelineStateCollectionSeeds(),f.workflowStateCollectionSeed()],{reimportExisting:a.reimportLegacy,...b.afterCollectionImport?{afterCollectionImport:b.afterCollectionImport}:{}}),d.loadFlows(),e.loadPipelines(),e.loadArchivedPipelines(),f.loadWorkflows(),a.authority?.mode==="preparing")?(0,j.H0)(g().dirname((0,h.BQ)("state.sqlite")),a.authority):a.authority}async function y(a=process.env,b={loadFlowPipelineController:()=>Promise.all([c.e(2904),c.e(5689),c.e(3953),c.e(8817),c.e(3916),c.e(6796),c.e(8465),c.e(3740),c.e(3598),c.e(8444),c.e(156)]).then(c.bind(c,60156)),loadAccountMigrationController:()=>Promise.all([c.e(2904),c.e(5689),c.e(3953),c.e(8817),c.e(3916),c.e(6796),c.e(8465),c.e(3740),c.e(3598),c.e(8444),c.e(7868)]).then(c.bind(c,37868)),loadTelegramReportScheduler:()=>Promise.all([c.e(3953),c.e(3598),c.e(9246)]).then(c.bind(c,99246))}){let{startFlowPipelineController:d}=await b.loadFlowPipelineController();d();try{let a=await b.loadTelegramReportScheduler?.();a?.ensureTelegramReportScheduler()}catch(a){console.error("[telegram report] scheduler start failed",a instanceof Error?a.name:"unknown")}if("1"===a.LLV_ACCOUNT_CONTROLLER_DISABLED)return;let{startAccountMigrationController:e}=await b.loadAccountMigrationController();u(e,t(a))}async function z(a=process.env,b=a=>console.error(a)){let{ensureOperatorSpawnCapability:d,rotateOperatorSpawnCapability:e}=await c.e(4260).then(c.bind(c,74260));"1"===a.LLV_ROTATE_OPERATOR_SPAWN_CAPABILITY?e():d();let f=a.PORT?.trim()||"8898";b(`[viewer] Open http://127.0.0.1:${f}.`)}async function A(a=process.env,b=B,c=(a,b)=>console.error(a,b)){if("1"===a.LLV_WAKATIME_ENABLED)try{await b()}catch{c("[wakatime] startup_failed",{})}}async function B(){if(o.__llvWakatimeWorker)return;let a=process.cwd(),b=g().join(a,"src/lib/wakatimeSync.worker.ts"),d=g().join(a,".next/server/wakatime-sync-worker.js"),f="/usr/local/bin/bun-container",h=e().existsSync(b)&&e().existsSync(f)?{executable:f,workerPath:b}:e().existsSync(d)?{executable:process.versions.bun?process.execPath:process.env.LLV_BUN_EXECUTABLE||"bun",workerPath:d}:{executable:process.execPath,workerPath:b},{spawn:i}=await Promise.resolve().then(c.t.bind(c,31421,23)),j=e().existsSync("/usr/bin/nice"),k=i(j?"/usr/bin/nice":h.executable,[...j?["-n","10",h.executable]:[],h.workerPath],{cwd:a,stdio:["ignore","inherit","inherit"],env:{...(0,n.Fd)(process.env),LLV_WAKATIME_SYNC_WORKER:"1"}});o.__llvWakatimeWorker=k,k.once("error",a=>{console.error("[wakatime] worker_start_failed",{message:a.message})}),k.once("exit",(a,b)=>{if(o.__llvWakatimeWorker===k&&(o.__llvWakatimeWorker=void 0),o.__llvWakatimeWorkerRestart)return;console.error("[wakatime] worker_exited",{code:a,signal:b});let c=setTimeout(()=>{o.__llvWakatimeWorkerRestart=void 0,B()},1e3);c.unref?.(),o.__llvWakatimeWorkerRestart=c})}async function C(a,b=console.error,c={}){let d=c.schedule??((a,b)=>setTimeout(a,b)),e=c.maxRetryMs??1e3,f=Math.min(Math.max(c.jitterRatio??.2,0),1),g=c.random??Math.random,h=c.initialRetryMs??100,i=!1,j=0,k=null,n=null,o=c.waitUntilReady?new Promise((a,b)=>{k=a,n=b}):null,p=async()=>{j+=1;try{await a(),(0,l.xE)(),k?.(),j>1&&b("[structured hosts] startup adoption recovered",{attempts:j})}catch(k){if((0,l.vE)(),k instanceof m.bL)throw b("[structured hosts] startup adoption failed",k),n?.(k),k;if(i)return;let a=1+(2*Math.min(Math.max(g(),0),1)-1)*f,c=Math.min(e,Math.max(0,Math.round(h*a)));h=Math.min(2*h,e),i=!0,1===j&&b("[structured hosts] startup adoption failed; retry scheduled",k),d(()=>{i=!1,p().catch(a=>{b("[structured hosts] startup adoption retry aborted",a)})},c).unref?.()}};await p(),await o}async function D(a){await a.initializeOperatorCapability(),await a.startWakatime(),a.publishHotStateActivation(),a.startStructuredHosts?.(),await a.startControllers(),a.publishViewerReleaseReady()}async function E(){(0,n.kL)();let a=()=>p(),b=g().dirname((0,h.BQ)("state.sqlite")),d=null;await s(async()=>{let e=await r(a);d=e.authority?.releaseRevision??null;let f=await x(e),g=null;await D({initializeOperatorCapability:z,startWakatime:A,startStructuredHosts:(0,i.cM)()?()=>{(async()=>{let{adoptStructuredHostsAtStartup:a}=await Promise.all([c.e(2904),c.e(5689),c.e(3953),c.e(8817),c.e(3916),c.e(6796),c.e(8465),c.e(3740),c.e(3598),c.e(8026)]).then(c.bind(c,28026));await C(a,console.error,{waitUntilReady:!0})})().catch(a=>console.error("[structured hosts] background startup aborted",a))}:null,startControllers:y,publishHotStateActivation:()=>{f&&(g=(0,j.tT)(b,f))},publishViewerReleaseReady:()=>{g&&(0,j.uB)(b,g)}})},a,{fenceRequest:()=>{let a=(0,j.jU)(b),c=(0,j.a5)(b);return null!==a&&c?.mode==="fencing"&&c.releaseRevision===a?c:null},onFenceRequested:async a=>{let d=await w(),{agentRegistry:e}=await Promise.all([c.e(2904),c.e(3953)]).then(c.bind(c,12904));e().checkpointRollbackMirrorForDemotion(),(0,j.u_)(b,a,d)},onDemoted:({fenced:a})=>v(async()=>{if(a)return;let e=(0,j.a5)(b);if(!d||e?.releaseRevision!==d||"sqlite"!==e.mode&&"fencing"!==e.mode)return;let{agentRegistry:f}=await Promise.all([c.e(2904),c.e(3953)]).then(c.bind(c,12904));await w(),f().checkpointRollbackMirrorForDemotion()})})}},95697:(a,b,c)=>{c.d(b,{H0:()=>w,Ny:()=>q,RG:()=>u,T2:()=>r,X4:()=>o,a5:()=>n,jU:()=>p,tT:()=>x,uB:()=>y,u_:()=>v});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(89204);let k="LLV_HOT_STATE_RELEASE_REVISION";function l(a){return i().join(a,"hot-state-authority.json")}function m(a){return"string"==typeof a&&/^[0-9a-f]{40}$/.test(a)}function n(a){try{var b;let c=!(b=JSON.parse(g().readFileSync(l(a),"utf8")))||"object"!=typeof b||Array.isArray(b)?null:1===b.schemaVersion&&Number.isInteger(b.epoch)&&!(b.epoch<1)&&["legacy","preparing","sqlite","fencing"].includes(String(b.mode))&&(null===b.releaseRevision||m(b.releaseRevision))&&"string"==typeof b.updatedAt&&(void 0===b.activationReadyAt||"string"==typeof b.activationReadyAt)&&(void 0===b.releaseReadyAt||"string"==typeof b.releaseReadyAt)&&(void 0===b.releaseReadyAt||void 0!==b.activationReadyAt)&&(void 0===b.checkpoint||function(a){if(!a||"object"!=typeof a||Array.isArray(a))return!1;let b=a.revisions,c=b?[b.flows,b.pipelines,b.pipelinesArchive,b.workflows]:[];return"string"==typeof a.acknowledgedAt&&4===c.length&&c.every(a=>Number.isInteger(a)&&a>=0)}(b.checkpoint))?b:null;if(!c)throw Error("hot-state authority is invalid");return c}catch(a){if("ENOENT"===a.code)return null;throw a}}function o(a,b=process.env){let c=b.LLV_VIEWER_DEPLOY_TARGET?.trim()||i().join(a,"viewer-release.json");try{var d;let a=!(d=JSON.parse(g().readFileSync(c,"utf8")))||"object"!=typeof d||Array.isArray(d)?null:"string"==typeof d.endpoint&&m(d.revision)&&(void 0===d.hotStateBackend||"sqlite-v1"===d.hotStateBackend)?d:null;if(!a)throw Error("Viewer release target cannot authorize hot state");return a}catch(a){if("ENOENT"===a.code)return null;throw a}}function p(a,b=process.env){let c=o(a,b);if(!c)return null;let d=b[k]?.trim();if(d)return m(d)&&d===c.revision?d:null;let e=b.PORT?.trim();if(!e)return null;try{return new URL(c.endpoint).port===e?c.revision:null}catch{return null}}function q(a,b=process.env){let c=o(a,b);if(!c)return!0;let d=n(a),e=p(a,b);return e?d?.mode==="sqlite"&&d.releaseRevision===e&&c.revision===e:!(b[k]?.trim()||b.PORT?.trim())&&d?.mode==="sqlite"&&d.releaseRevision===c.revision&&"string"==typeof d.activationReadyAt}function r(a,b=process.env){let c=o(a,b);if(!c)return!0;let d=p(a,b);if(!d)return!1;let e=n(a);return e?.mode==="preparing"&&e.releaseRevision===d&&c.revision===d}function s(a,b){return null!==a&&JSON.stringify(a)===JSON.stringify(b)}function t(a,b,c,d,f={}){if(f.releaseReadyAt&&!f.activationReadyAt)throw Error("Viewer release readiness requires completed hot-state activation");let h={schemaVersion:1,epoch:f.epoch??(b?.epoch??0)+1,mode:c,releaseRevision:d,updatedAt:new Date().toISOString(),...f.activationReadyAt?{activationReadyAt:f.activationReadyAt}:{},...f.releaseReadyAt?{releaseReadyAt:f.releaseReadyAt}:{},...f.checkpoint?{checkpoint:f.checkpoint}:{}};if(!Number.isInteger(h.epoch)||h.epoch<1)throw Error("hot-state authority epoch is invalid");if(b&&h.epoch<b.epoch)throw Error("hot-state authority epoch cannot regress");return!function(a,b){let c=i().dirname(a);g().mkdirSync(c,{recursive:!0,mode:448});let d=i().join(c,`.${i().basename(a)}.${process.pid}.${e().randomUUID()}.tmp`),f=g().openSync(d,"wx",384);try{g().writeFileSync(f,`${JSON.stringify(b,null,2)}
|
|
130
130
|
`,"utf8"),g().fsyncSync(f)}finally{g().closeSync(f)}g().renameSync(d,a);let h=g().openSync(c,"r");try{g().fsyncSync(h)}finally{g().closeSync(h)}}(l(a),h),h}function u(a,b,c,d={}){if(null!==c&&!m(c))throw Error("hot-state release revision is invalid");return(0,j.Ol)(l(a),"hot-state authority is busy",()=>t(a,n(a),b,c,d))}function v(a,b,c){return(0,j.Ol)(l(a),"hot-state authority is busy",()=>{let d=n(a);if(!d||"fencing"!==d.mode||d.epoch!==b.epoch||d.releaseRevision!==b.releaseRevision||d.checkpoint)throw Error("hot-state fence request changed before checkpoint acknowledgement");return t(a,d,"fencing",d.releaseRevision,{epoch:d.epoch,checkpoint:{acknowledgedAt:new Date().toISOString(),revisions:c}})})}function w(a,b){return(0,j.Ol)(l(a),"hot-state authority is busy",()=>{let c=n(a);if(!c||!s(c,b)||"preparing"!==c.mode)throw Error("hot-state preparation changed before completion");return t(a,c,"sqlite",c.releaseRevision,{epoch:c.epoch})})}function x(a,b){return(0,j.Ol)(l(a),"hot-state authority is busy",()=>{let c=n(a);if(!c||!s(c,b)||"sqlite"!==c.mode)throw Error("hot-state authority changed before activation completed");return t(a,c,"sqlite",c.releaseRevision,{epoch:c.epoch,activationReadyAt:new Date().toISOString()})})}function y(a,b){return(0,j.Ol)(l(a),"hot-state authority is busy",()=>{let c=n(a);if(!c||!s(c,b)||"sqlite"!==c.mode||"string"!=typeof c.activationReadyAt)throw Error("hot-state authority changed before Viewer release startup completed");return t(a,c,"sqlite",c.releaseRevision,{epoch:c.epoch,activationReadyAt:c.activationReadyAt,releaseReadyAt:new Date().toISOString()})})}}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=5689,exports.ids=[5689],exports.modules={22371:(a,b,c)=>{c.d(b,{le:()=>k,pQ:()=>o,e3:()=>p});var d=c(73024),e=c.n(d);c(76760);var f=c(27146),g=c(22619),h=c(51888),i=c(49048);let j=["orchestrator","reviewer","verifier","builder","architect","cleaner","prod-auditor","deployer"],k=12e3;class l extends Error{constructor(a,b){super(a,b),this.name="RoleStoreError"}}let m=()=>(0,f.BQ)("role-presets.json");function n(a){return i.W.map(b=>{let c=a[b.id];return{...b,config:{...b.config,...c?.config},promptScaffold:c?.promptScaffold??b.promptScaffold}})}function o(){return n(function(){let a,b;try{a=e().readFileSync(m(),"utf8")}catch(a){if("ENOENT"===a.code)return{schemaVersion:1,overrides:{}};throw new l(`could not read role override registry: ${m()}`,{cause:a})}try{b=JSON.parse(a)}catch(a){throw new l("role override registry contains malformed JSON",{cause:a})}if(1!==b.schemaVersion)throw new l(`unsupported role override schema: ${String(b.schemaVersion)}`);if(!b.overrides||"object"!=typeof b.overrides||Array.isArray(b.overrides))throw new l("role override registry must contain an overrides object");let c={};for(let[a,d]of Object.entries(b.overrides)){if(!("string"==typeof a&&j.includes(a))||!function(a){if(!a||"object"!=typeof a||Array.isArray(a)||Object.keys(a).some(a=>"config"!==a&&"promptScaffold"!==a)||void 0!==a.promptScaffold&&("string"!=typeof a.promptScaffold||a.promptScaffold.length>k))return!1;if(void 0!==a.config){if(!a.config||"object"!=typeof a.config||Array.isArray(a.config)||Object.keys(a.config).some(a=>"engine"!==a&&"model"!==a&&"effort"!==a))return!1;let{engine:b,model:c,effort:d}=a.config;if(void 0!==b&&"claude"!==b&&"codex"!==b||void 0!==c&&("string"!=typeof c||c.length>128)||void 0!==d&&("string"!=typeof d||d.length>32))return!1}return!0}(d)||!function(a,b){let c={...i.W.find(b=>b.id===a).config,...b.config};return!(c.model.length>128||/[\u0000-\u001f\u007f]/.test(c.model))&&("claude"!==c.engine||!!(0,h.OV)(c.model))&&("codex"!==c.engine||!!c.model.startsWith("gpt-"))&&(0,g.z9)(c.engine,c.effort)}(a,d))throw new l(`invalid role override: ${a}`);c[a]=d}return{schemaVersion:1,overrides:c}}().overrides)}function p(){try{return o()}catch(a){return console.warn("[roles] override registry unreadable; falling back to built-in defaults",a),n({})}}},22619:(a,b,c)=>{c.d(b,{BL:()=>j,ck:()=>g,ve:()=>i,z9:()=>e});let d={claude:["low","medium","high","xhigh","max"],codex:["low","medium","high","xhigh"]};function e(a,b){return d[a].includes(b)}let f=["minimal","low","medium","high","xhigh","max","ultra"];function g(a){return f.includes(a)}let h=[[/^gpt-5\.6-(sol|terra)\b/,["low","medium","high","xhigh","max","ultra"]],[/^gpt-5\.6\b/,["low","medium","high","xhigh","max"]]];function i(a,b){if("claude"===a)return d.claude;if("codex"!==a)return null;let c=(b??"").trim().toLowerCase();for(let[a,b]of h)if(a.test(c))return b;return d.codex}function j(a,b){let c="string"==typeof b.effort?b.effort.trim():"";return c&&!e(a,c)?{effort:null,fast:null,error:`effort for ${a} must be one of: ${d[a].join(", ")}`}:{effort:c||null,fast:"codex"===a&&"boolean"==typeof b.fast?b.fast:null}}},38751:(a,b,c)=>{c.d(b,{E2:()=>s,G$:()=>r,JC:()=>v,YX:()=>x,oh:()=>y});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(27146),k=c(14928),l=c(46211);let m=null;function n(){return(0,j.BQ)("project-aliases.json")}function o(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let b=Object.entries(a);return b.every(([a,b])=>!!a.trim()&&"string"==typeof b&&!!b.trim())?Object.fromEntries(b):null}function p(){let a,b=n();try{a=g().statSync(b)}catch{return(m={file:b,mtimeMs:-1,size:-1,snapshot:{aliases:{},displayNames:{}}}).snapshot}if(m&&m.file===b&&m.mtimeMs===a.mtimeMs&&m.size===a.size)return m.snapshot;try{let c=JSON.parse(g().readFileSync(b,"utf8")),d=1===c.schemaVersion?o(c.aliases):null,e=1===c.schemaVersion?o(c.displayNames):null,f=d&&e?{aliases:d,displayNames:e}:{aliases:{},displayNames:{}};return m={file:b,mtimeMs:a.mtimeMs,size:a.size,snapshot:f},f}catch{let c={aliases:{},displayNames:{}};return m={file:b,mtimeMs:a.mtimeMs,size:a.size,snapshot:c},c}}function q(a,b){let c=a,d=new Set;for(;b[c]&&!d.has(c);)d.add(c),c=b[c];return d.has(c)?a:c}function r(a){return q(a,p().aliases)}function s(){let a=p();return{aliases:{...a.aliases},displayNames:{...a.displayNames}}}function t(a){try{let b=JSON.parse(g().readFileSync((0,j.BQ)(a),"utf8"));return b&&"object"==typeof b&&!Array.isArray(b)?b:null}catch{return null}}function u(a,b,c){let d=(["flows","pipelines","workflows"].includes(b)?(0,k.Vx)((0,j.BQ)("state.sqlite"),b):null)??t(a)?.[b];if(!Array.isArray(d))return[];let e=[];for(let a of d)!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.project&&a.project.trim()&&"string"==typeof a[c]&&a[c].trim()&&e.push([a.project,a[c]]);return e}function v(){let a=function(){let a=t("worktree-map.json");if(!a)return new Map;let b=new Map;for(let[c,d]of Object.entries(a)){if(!d||"object"!=typeof d||Array.isArray(d))continue;let a=d.repo;"string"==typeof a&&a.trim()&&b.set(c,a)}return b}(),b=[...u("flows.json","flows","cwd"),...u("pipelines.json","pipelines","repoDir"),...u("workflows.json","workflows","repoDir")],c=new Map;for(let[d,e]of b){let b=(0,l.V5)(e)??a.get(e),f=b?(0,l.im)(b):null;if(!f)continue;let g=c.get(d)??new Map,h=g.get(f.project)??{registration:{source:d,target:f.project,displayName:f.displayName},records:0};h.records+=1,g.set(f.project,h),c.set(d,g)}let d=[],e=[];for(let[a,b]of c){if(b.has(a)){b.size>1&&e.push(a);continue}let c=[...b.values()].sort((a,b)=>b.records-a.records),f=c.reduce((a,b)=>a+b.records,0),g=c[0];2*g.records>f?d.push(g.registration):e.push(a)}let f=function(a){let b=new Map(a.map(a=>[a.source,a.target])),c=new Set,d=new Set;for(let[a,e]of[["tasks.json","tasks"],["flows.json","flows"],["pipelines.json","pipelines"],["workflows.json","workflows"]]){let f=new Map;for(let g of function(a,b){let c=(["flows","pipelines","workflows"].includes(b)?(0,k.Vx)((0,j.BQ)("state.sqlite"),b):null)??t(a)?.[b];return Array.isArray(c)?c.filter(a=>!!a&&"object"==typeof a&&!Array.isArray(a)):[]}(a,e)){if("string"!=typeof g.id||!g.id.trim()||"string"!=typeof g.project||!g.project.trim())continue;let a=r(g.project),h=b.get(a)??a,i=`${h}\0${g.id}`,j=f.get(i);j&&j!==a?(c.add(`${e} id collision`),b.has(j)&&d.add(j),b.has(a)&&d.add(a)):f.set(i,a)}}return{labels:[...c],sources:d}}(d);return e.push(...f.labels),{registrations:d.filter(a=>!f.sources.has(a.source)),conflicts:e}}function w(a){let b=p(),c={...b.aliases},d={...b.displayNames};for(let b of a){let a=b.source.trim(),e=q(b.target.trim(),c),f=b.displayName.trim();if(!a||!e||!f)return null;let g=c[a]?q(c[a],c):null;if(g&&g!==e)return null;a!==e&&(c[a]=e),d[e]=f}return{aliases:c,displayNames:d}}function x(a){return null!==w(a)}function y(a){if(0===a.length)return!0;let b=w(a);if(!b)return!1;let c=n(),d=i().join(i().dirname(c),`.${i().basename(c)}.${process.pid}.${e().randomUUID()}.tmp`);try{return g().mkdirSync(i().dirname(c),{recursive:!0,mode:448}),g().writeFileSync(d,JSON.stringify({schemaVersion:1,...b},null,2)+"\n",{encoding:"utf8",mode:384}),g().renameSync(d,c),m=null,p(),!0}catch{try{g().rmSync(d,{force:!0})}catch{}return!1}}},46211:(a,b,c)=>{c.d(b,{MO:()=>m,Mv:()=>l,NP:()=>o,V5:()=>s,im:()=>t,rj:()=>p,z:()=>n});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j);let l="project_unresolved",m="Unresolved project";function n(a){return/^(?:repo|dir)-[0-9a-f]{32}$/.test(a)}function o(a){let b=(()=>{try{return g().realpathSync.native(a)}catch{return k().resolve(a)}})(),c=k().basename(b);if(!c||b===k().sep)return null;let d=b===i().homedir()?`home-${c}`:c,f=e().createHash("sha256").update(`dir:${b}`).digest("hex").slice(0,32);return{project:`dir-${f}`,displayName:d}}function p(a){return a===l?m:a}function q(a){try{return g().statSync(k().join(a,"HEAD")).isFile()}catch{return!1}}function r(a){let b=k().join(a,".git");try{let c=g().lstatSync(b);if(c.isDirectory())return q(b)?b:null;if(!c.isFile())return null;let d=g().readFileSync(b,"utf8").slice(0,4096),e=/^gitdir:\s*(.+?)\s*$/im.exec(d)?.[1];if(!e)return null;let f=k().resolve(a,e);return q(f)?f:null}catch{return null}}function s(a){let b=k().resolve(a);for(;;){if(r(b))return b;let a=k().dirname(b);if(a===b)return null;b=a}}function t(a){let b,c=r(a);if(!c)return null;try{b=g().readFileSync(k().join(function(a){try{let b=g().readFileSync(k().join(a,"commondir"),"utf8").trim();return b?k().resolve(a,b):a}catch{return a}}(c),"config"),"utf8")}catch{return null}let d=function(a){let b=!1;for(let c of a.split(/\r?\n/)){let a=/^\s*\[\s*remote\s+"([^"]+)"\s*\]\s*$/i.exec(c);if(a){b="origin"===a[1];continue}if(/^\s*\[/.test(c)){b=!1;continue}if(!b)continue;let d=/^\s*url\s*=\s*(.*?)\s*$/i.exec(c)?.[1],e=d?.replace(/\s+[;#].*$/,"").trim();if(e)return e}return null}(b),f=(()=>{try{return g().realpathSync.native(a)}catch{return k().resolve(a)}})(),h=d?function(a,b){let c=/^[a-z][a-z0-9+.-]*:\/\//i.test(a)?null:/^(?:[^@\s]+@)?([^:/\s]+):(.+)$/.exec(a);if(c){let a=c[1].toLowerCase(),b=c[2].replace(/^\/+|\/+$/g,"").replace(/\.git$/i,"");return b?`${a}/${b}`:null}try{let b=new URL(a);if("file:"===b.protocol){let a=k().resolve(b.pathname).replace(/\.git$/i,"");return`file:${a}`}let c=b.hostname.toLowerCase(),d=b.port?`:${b.port}`:"",e=b.pathname.replace(/^\/+|\/+$/g,"").replace(/\.git$/i,"");return c&&e?`${c}${d}/${e}`:null}catch{let c=k().resolve(b,a).replace(/\.git$/i,"");return`file:${c}`}}(d,a):`local:${f}`,i=h&&h.replace(/^file:/,"").split("/").filter(Boolean).at(-1)?.trim()||null;if(!h||!i)return null;let j=e().createHash("sha256").update(h).digest("hex").slice(0,32);return{project:`repo-${j}`,displayName:i,canonicalRemote:h}}},49048:(a,b,c)=>{c.d(b,{W:()=>g});var d=c(51888);let e=["Read-only mode: edits, staging, commits, pushes, service restarts, and GitHub comments are prohibited.","Every finding carries file:line evidence. Clean work earns a clear NO FINDINGS verdict."],f="Two standing rules. (1) Anchor the frame: when the assignment carries the requester's originating requirement, validate the work against that verbatim requirement, never against the artifact's previous revision — WRONG-PREMISE (\"this does not serve the original requirement\") is an expected verdict and outranks any finding about internal rigour. (2) Over-engineering pass: on every review, flag machinery heavier than the problem it solves (a library plus wrapper where a native primitive does), name the simpler mechanism, and report what to cut — OVER-BUILT is a first-class verdict, and a round that only removes scope is a successful round.",g=[{id:"orchestrator",name:"Orchestrator",description:"Coordinates fresh agents through the Viewer control plane.",config:{engine:"claude",model:"opus",effort:"high"},parameters:[{key:"mode",label:"Mode",description:"Operating mode for the coordination run.",kind:"select",options:["standard","plan-tickets","wayfind","backlog-campaign"]},{key:"repo",label:"Repository",description:"Repository for backlog-campaign mode.",kind:"text"},{key:"issueQuery",label:"Issue query",description:"GitHub issue query for backlog-campaign mode.",kind:"text"},{key:"urgent",label:"Urgent list",description:"Comma-separated urgent issue ids.",kind:"text"},{key:"maxWorkers",label:"Maximum workers",description:"Worker cap for backlog-campaign mode.",kind:"integer",default:3,min:1,max:20},{key:"mergePolicy",label:"Merge policy",description:"Delivery policy for backlog-campaign mode.",kind:"select",options:["pr","merge"]},{key:"completionPolicy",label:"Completion policy",description:"Terminal policy for backlog-campaign mode.",kind:"select",options:["pr-opened","merged","released"]}],promptScaffold:`You are the Orchestrator. Drive work through the production Viewer API at http://127.0.0.1:8898. Use fresh empty sessions with src lineage; forks are disabled. Keep every worker visible and controllable in the Viewer.
|
|
1
|
+
"use strict";exports.id=5689,exports.ids=[5689],exports.modules={22371:(a,b,c)=>{c.d(b,{le:()=>k,pQ:()=>o,e3:()=>p});var d=c(73024),e=c.n(d);c(76760);var f=c(27146),g=c(22619),h=c(51888),i=c(49048);let j=["orchestrator","reviewer","verifier","builder","architect","cleaner","prod-auditor","deployer"],k=12e3;class l extends Error{constructor(a,b){super(a,b),this.name="RoleStoreError"}}let m=()=>(0,f.BQ)("role-presets.json");function n(a){return i.W.map(b=>{let c=a[b.id];return{...b,config:{...b.config,...c?.config},promptScaffold:c?.promptScaffold??b.promptScaffold}})}function o(){return n(function(){let a,b;try{a=e().readFileSync(m(),"utf8")}catch(a){if("ENOENT"===a.code)return{schemaVersion:1,overrides:{}};throw new l(`could not read role override registry: ${m()}`,{cause:a})}try{b=JSON.parse(a)}catch(a){throw new l("role override registry contains malformed JSON",{cause:a})}if(1!==b.schemaVersion)throw new l(`unsupported role override schema: ${String(b.schemaVersion)}`);if(!b.overrides||"object"!=typeof b.overrides||Array.isArray(b.overrides))throw new l("role override registry must contain an overrides object");let c={};for(let[a,d]of Object.entries(b.overrides)){if(!("string"==typeof a&&j.includes(a))||!function(a){if(!a||"object"!=typeof a||Array.isArray(a)||Object.keys(a).some(a=>"config"!==a&&"promptScaffold"!==a)||void 0!==a.promptScaffold&&("string"!=typeof a.promptScaffold||a.promptScaffold.length>k))return!1;if(void 0!==a.config){if(!a.config||"object"!=typeof a.config||Array.isArray(a.config)||Object.keys(a.config).some(a=>"engine"!==a&&"model"!==a&&"effort"!==a))return!1;let{engine:b,model:c,effort:d}=a.config;if(void 0!==b&&"claude"!==b&&"codex"!==b||void 0!==c&&("string"!=typeof c||c.length>128)||void 0!==d&&("string"!=typeof d||d.length>32))return!1}return!0}(d)||!function(a,b){let c={...i.W.find(b=>b.id===a).config,...b.config};return!(c.model.length>128||/[\u0000-\u001f\u007f]/.test(c.model))&&("claude"!==c.engine||!!(0,h.OV)(c.model))&&("codex"!==c.engine||!!c.model.startsWith("gpt-"))&&(0,g.z9)(c.engine,c.effort)}(a,d))throw new l(`invalid role override: ${a}`);c[a]=d}return{schemaVersion:1,overrides:c}}().overrides)}function p(){try{return o()}catch(a){return console.warn("[roles] override registry unreadable; falling back to built-in defaults",a),n({})}}},22619:(a,b,c)=>{c.d(b,{BL:()=>j,ck:()=>g,ve:()=>i,z9:()=>e});let d={claude:["low","medium","high","xhigh","max"],codex:["low","medium","high","xhigh"]};function e(a,b){return d[a].includes(b)}let f=["minimal","low","medium","high","xhigh","max","ultra"];function g(a){return f.includes(a)}let h=[[/^gpt-5\.6-(sol|terra)\b/,["low","medium","high","xhigh","max","ultra"]],[/^gpt-5\.6\b/,["low","medium","high","xhigh","max"]]];function i(a,b){if("claude"===a)return d.claude;if("codex"!==a)return null;let c=(b??"").trim().toLowerCase();for(let[a,b]of h)if(a.test(c))return b;return d.codex}function j(a,b){let c="string"==typeof b.effort?b.effort.trim():"";return c&&!e(a,c)?{effort:null,fast:null,error:`effort for ${a} must be one of: ${d[a].join(", ")}`}:{effort:c||null,fast:"codex"===a&&"boolean"==typeof b.fast?b.fast:null}}},38751:(a,b,c)=>{c.d(b,{E2:()=>s,G$:()=>r,JC:()=>v,YX:()=>x,oh:()=>y});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(27146),k=c(14928),l=c(46211);let m=null;function n(){return(0,j.BQ)("project-aliases.json")}function o(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let b=Object.entries(a);return b.every(([a,b])=>!!a.trim()&&"string"==typeof b&&!!b.trim())?Object.fromEntries(b):null}function p(){let a,b=n();try{a=g().statSync(b)}catch{return(m={file:b,mtimeMs:-1,size:-1,snapshot:{aliases:{},displayNames:{}}}).snapshot}if(m&&m.file===b&&m.mtimeMs===a.mtimeMs&&m.size===a.size)return m.snapshot;try{let c=JSON.parse(g().readFileSync(b,"utf8")),d=1===c.schemaVersion?o(c.aliases):null,e=1===c.schemaVersion?o(c.displayNames):null,f=d&&e?{aliases:d,displayNames:e}:{aliases:{},displayNames:{}};return m={file:b,mtimeMs:a.mtimeMs,size:a.size,snapshot:f},f}catch{let c={aliases:{},displayNames:{}};return m={file:b,mtimeMs:a.mtimeMs,size:a.size,snapshot:c},c}}function q(a,b){let c=a,d=new Set;for(;b[c]&&!d.has(c);)d.add(c),c=b[c];return d.has(c)?a:c}function r(a){return q(a,p().aliases)}function s(){let a=p();return{aliases:{...a.aliases},displayNames:{...a.displayNames}}}function t(a){try{let b=JSON.parse(g().readFileSync((0,j.BQ)(a),"utf8"));return b&&"object"==typeof b&&!Array.isArray(b)?b:null}catch{return null}}function u(a,b,c){let d=(["flows","pipelines","workflows"].includes(b)?(0,k.Vx)((0,j.BQ)("state.sqlite"),b):null)??t(a)?.[b];if(!Array.isArray(d))return[];let e=[];for(let a of d)!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.project&&a.project.trim()&&"string"==typeof a[c]&&a[c].trim()&&e.push([a.project,a[c]]);return e}function v(){let a=function(){let a=t("worktree-map.json");if(!a)return new Map;let b=new Map;for(let[c,d]of Object.entries(a)){if(!d||"object"!=typeof d||Array.isArray(d))continue;let a=d.repo;"string"==typeof a&&a.trim()&&b.set(c,a)}return b}(),b=[...u("flows.json","flows","cwd"),...u("pipelines.json","pipelines","repoDir"),...u("workflows.json","workflows","repoDir")],c=new Map;for(let[d,e]of b){let b=(0,l.V5)(e)??a.get(e),f=b?(0,l.im)(b):null;if(!f)continue;let g=c.get(d)??new Map,h=g.get(f.project)??{registration:{source:d,target:f.project,displayName:f.displayName},records:0};h.records+=1,g.set(f.project,h),c.set(d,g)}let d=[],e=[];for(let[a,b]of c){if(b.has(a)){b.size>1&&e.push(a);continue}let c=[...b.values()].sort((a,b)=>b.records-a.records),f=c.reduce((a,b)=>a+b.records,0),g=c[0];2*g.records>f?d.push(g.registration):e.push(a)}let f=function(a){let b=new Map(a.map(a=>[a.source,a.target])),c=new Set,d=new Set;for(let[a,e]of[["tasks.json","tasks"],["flows.json","flows"],["pipelines.json","pipelines"],["workflows.json","workflows"]]){let f=new Map;for(let g of function(a,b){let c=(["flows","pipelines","workflows"].includes(b)?(0,k.Vx)((0,j.BQ)("state.sqlite"),b):null)??t(a)?.[b];return Array.isArray(c)?c.filter(a=>!!a&&"object"==typeof a&&!Array.isArray(a)):[]}(a,e)){if("string"!=typeof g.id||!g.id.trim()||"string"!=typeof g.project||!g.project.trim())continue;let a=r(g.project),h=b.get(a)??a,i=`${h}\0${g.id}`,j=f.get(i);j&&j!==a?(c.add(`${e} id collision`),b.has(j)&&d.add(j),b.has(a)&&d.add(a)):f.set(i,a)}}return{labels:[...c],sources:d}}(d);return e.push(...f.labels),{registrations:d.filter(a=>!f.sources.has(a.source)),conflicts:e}}function w(a){let b=p(),c={...b.aliases},d={...b.displayNames};for(let b of a){let a=b.source.trim(),e=q(b.target.trim(),c),f=b.displayName.trim();if(!a||!e||!f)return null;let g=c[a]?q(c[a],c):null;if(g&&g!==e)return null;a!==e&&(c[a]=e),d[e]=f}return{aliases:c,displayNames:d}}function x(a){return null!==w(a)}function y(a){if(0===a.length)return!0;let b=w(a);if(!b)return!1;let c=n(),d=i().join(i().dirname(c),`.${i().basename(c)}.${process.pid}.${e().randomUUID()}.tmp`);try{return g().mkdirSync(i().dirname(c),{recursive:!0,mode:448}),g().writeFileSync(d,JSON.stringify({schemaVersion:1,...b},null,2)+"\n",{encoding:"utf8",mode:384}),g().renameSync(d,c),m=null,p(),!0}catch{try{g().rmSync(d,{force:!0})}catch{}return!1}}},46211:(a,b,c)=>{c.d(b,{MO:()=>m,Mv:()=>l,NP:()=>o,V5:()=>s,im:()=>t,rj:()=>p,z:()=>n});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j);let l="project_unresolved",m="Unresolved project";function n(a){return/^(?:repo|dir)-[0-9a-f]{32}$/.test(a)}function o(a){let b=(()=>{try{return g().realpathSync.native(a)}catch{return k().resolve(a)}})(),c=k().basename(b);if(!c||b===k().sep)return null;let d=b===i().homedir()?`home-${c}`:c,f=e().createHash("sha256").update(`dir:${b}`).digest("hex").slice(0,32);return{project:`dir-${f}`,displayName:d}}function p(a){return a===l?m:a}function q(a){try{return g().statSync(k().join(a,"HEAD")).isFile()}catch{return!1}}function r(a){let b=k().join(a,".git");try{let c=g().lstatSync(b);if(c.isDirectory())return q(b)?b:null;if(!c.isFile())return null;let d=g().readFileSync(b,"utf8").slice(0,4096),e=/^gitdir:\s*(.+?)\s*$/im.exec(d)?.[1];if(!e)return null;let f=k().resolve(a,e);return q(f)?f:null}catch{return null}}function s(a){let b=k().resolve(a);for(;;){if(r(b))return b;let a=k().dirname(b);if(a===b)return null;b=a}}function t(a){let b,c=r(a);if(!c)return null;try{b=g().readFileSync(k().join(function(a){try{let b=g().readFileSync(k().join(a,"commondir"),"utf8").trim();return b?k().resolve(a,b):a}catch{return a}}(c),"config"),"utf8")}catch{return null}let d=function(a){let b=!1;for(let c of a.split(/\r?\n/)){let a=/^\s*\[\s*remote\s+"([^"]+)"\s*\]\s*$/i.exec(c);if(a){b="origin"===a[1];continue}if(/^\s*\[/.test(c)){b=!1;continue}if(!b)continue;let d=/^\s*url\s*=\s*(.*?)\s*$/i.exec(c)?.[1],e=d?.replace(/\s+[;#].*$/,"").trim();if(e)return e}return null}(b),f=(()=>{try{return g().realpathSync.native(a)}catch{return k().resolve(a)}})(),h=d?function(a,b){let c=/^[a-z][a-z0-9+.-]*:\/\//i.test(a)?null:/^(?:[^@\s]+@)?([^:/\s]+):(.+)$/.exec(a);if(c){let a=c[1].toLowerCase(),b=c[2].replace(/^\/+|\/+$/g,"").replace(/\.git$/i,"");return b?`${a}/${b}`:null}try{let b=new URL(a);if("file:"===b.protocol){let a=k().resolve(b.pathname).replace(/\.git$/i,"");return`file:${a}`}let c=b.hostname.toLowerCase(),d=b.port?`:${b.port}`:"",e=b.pathname.replace(/^\/+|\/+$/g,"").replace(/\.git$/i,"");return c&&e?`${c}${d}/${e}`:null}catch{let c=k().resolve(b,a).replace(/\.git$/i,"");return`file:${c}`}}(d,a):`local:${f}`,i=h&&h.replace(/^file:/,"").split("/").filter(Boolean).at(-1)?.trim()||null;if(!h||!i)return null;let j=e().createHash("sha256").update(h).digest("hex").slice(0,32);return{project:`repo-${j}`,displayName:i,canonicalRemote:h}}},49048:(a,b,c)=>{c.d(b,{W:()=>h});var d=c(51888);let e=["Read-only mode: edits, staging, commits, pushes, service restarts, and GitHub comments are prohibited.","Every finding carries file:line evidence. Clean work earns a clear NO FINDINGS verdict."],f="Two standing rules. (1) Anchor the frame: when the assignment carries the requester's originating requirement, validate the work against that verbatim requirement, never against the artifact's previous revision — WRONG-PREMISE (\"this does not serve the original requirement\") is an expected verdict and outranks any finding about internal rigour. (2) Over-engineering pass: on every review, flag machinery heavier than the problem it solves (a library plus wrapper where a native primitive does), name the simpler mechanism, and report what to cut — OVER-BUILT is a first-class verdict, and a round that only removes scope is a successful round.",g=`http://127.0.0.1:${process.env.PORT?.trim()||"8898"}`,h=[{id:"orchestrator",name:"Orchestrator",description:"Coordinates fresh agents through the Viewer control plane.",config:{engine:"claude",model:"opus",effort:"high"},parameters:[{key:"mode",label:"Mode",description:"Operating mode for the coordination run.",kind:"select",options:["standard","plan-tickets","wayfind","backlog-campaign"]},{key:"repo",label:"Repository",description:"Repository for backlog-campaign mode.",kind:"text"},{key:"issueQuery",label:"Issue query",description:"GitHub issue query for backlog-campaign mode.",kind:"text"},{key:"urgent",label:"Urgent list",description:"Comma-separated urgent issue ids.",kind:"text"},{key:"maxWorkers",label:"Maximum workers",description:"Worker cap for backlog-campaign mode.",kind:"integer",default:3,min:1,max:20},{key:"mergePolicy",label:"Merge policy",description:"Delivery policy for backlog-campaign mode.",kind:"select",options:["pr","merge"]},{key:"completionPolicy",label:"Completion policy",description:"Terminal policy for backlog-campaign mode.",kind:"select",options:["pr-opened","merged","released"]}],promptScaffold:`You are the Orchestrator. Drive work through the production Viewer API at ${g}. Use fresh empty sessions with src lineage; forks are disabled. Keep every worker visible and controllable in the Viewer.
|
|
2
2
|
|
|
3
3
|
Mode: {{mode}}
|
|
4
4
|
Repository: {{repo}}
|
|
@@ -8,4 +8,4 @@ Maximum workers: {{maxWorkers}}
|
|
|
8
8
|
Merge policy: {{mergePolicy}}
|
|
9
9
|
Completion policy: {{completionPolicy}}
|
|
10
10
|
|
|
11
|
-
For backlog-campaign mode, inventory dependencies before assignment, use Opus/Sol gates, route backend work to Terra and frontend work to Opus, complete one review round, and require root release checks. Before a Viewer replacement, preserve the external-worker deployment barrier.`,safetyFences:[
|
|
11
|
+
For backlog-campaign mode, inventory dependencies before assignment, use Opus/Sol gates, route backend work to Terra and frontend work to Opus, complete one review round, and require root release checks. Before a Viewer replacement, preserve the external-worker deployment barrier.`,safetyFences:[`Viewer control uses ${g} with src lineage.`,"Fresh empty sessions only; forks are disabled.","One owner holds a file at a time across active worktrees."],capabilities:["spawn"]},{id:"reviewer",name:"Reviewer",description:"Reviews a code diff and returns severity-ranked evidence-backed findings.",config:{engine:"codex",model:d.je,effort:"xhigh"},parameters:[{key:"diffSource",label:"Diff source",description:"Diff or pull request reference to inspect.",kind:"text",required:!0},{key:"lens",label:"Lens",description:"Review lens.",kind:"select",options:["correctness","over-engineering","silent-failure","test-coverage","scope","prod-ops","standards+spec","code-smells","all"]},{key:"mode",label:"Mode",description:"Reviewer context mode.",kind:"select",options:["fresh"]},{key:"parallelN",label:"Parallel passes",description:"Independent review passes.",kind:"integer",min:1,max:8}],promptScaffold:`You are a fresh-context Reviewer. Inspect {{diffSource}} with lens {{lens}}. Run {{parallelN}} independent pass(es), preserving their axes. Report the reviewed SHA. State plainly when GitHub or DNS access was unavailable. Classify any gate blocked by sandbox limits as an environmental note and keep it out of code findings. Run TypeScript checks with bunx tsc --noEmit --incremental false so they do not need a tsbuildinfo write in the checkout. Return severity-ranked findings with file:line evidence, or exactly NO FINDINGS when the diff is clean. Every finding is an actionable fix plan: clear problem statement, fix intent, constraints, and acceptance criteria. No copy-paste code unless absolutely necessary. ${f}`,safetyFences:e,capabilities:["read-only"]},{id:"verifier",name:"Verifier",description:"Tests supplied hypotheses and returns a per-claim evidence verdict.",config:{engine:"codex",model:d.je,effort:"high"},parameters:[{key:"claims",label:"Claims",description:"Hypotheses to confirm or refute.",kind:"text",required:!0}],promptScaffold:"You are a Verifier. Evaluate these supplied claims: {{claims}}. Rank falsifiable hypotheses before testing. Return CONFIRMED or WRONG for every claim with exact evidence and identify missing evidence.",safetyFences:e,capabilities:["read-only"]},{id:"builder",name:"Builder",description:"Writes product code for a scoped directive.",config:{engine:"codex",model:d.je,effort:"medium"},parameters:[{key:"mode",label:"Mode",description:"Implementation discipline.",kind:"select",options:["plain","apply-fixes","tdd","diagnose","prototype","merge-resolve"]},{key:"domain",label:"Domain",description:"Product domain for the implementation.",kind:"select",options:["general","frontend"]}],promptScaffold:"You are a Builder in {{mode}} mode. Implement the scoped product directive with focused checks. Keep changes within the assigned file ownership, run a self-review, and report the verification evidence.",safetyFences:["Product source changes stay inside the assigned scope.","A deployment requires a Deployer role and explicit operator approval."],capabilities:[]},{id:"architect",name:"Architect",description:"Produces an evidence-grounded design without product edits.",config:{engine:"claude",model:"opus",effort:"high"},parameters:[{key:"mode",label:"Mode",description:"Architecture output mode.",kind:"select",options:["design","spec","architecture-audit"]}],promptScaffold:`You are an Architect in {{mode}} mode. Ground the design in current code, state options and trade-offs, then deliver a design document. Product-source edits are prohibited. Open the document with the requester's originating requirement verbatim (with date and source; redact credentials and personal data). The default answer to "should we build this" is no unless that requirement demands it; validate the final design against the quote, and move cut scope into a "Deferred — not currently justified" section instead of deleting it. ${f}`,safetyFences:["Product-source edits, staging, commits, pushes, and service restarts are prohibited.","Capture an ADR only for a hard-to-reverse decision with a material trade-off."],capabilities:["read-only"]},{id:"cleaner",name:"Cleaner",description:"Safely recovers a dirty checkout under a backup contract.",config:{engine:"codex",model:d.fC,effort:"low"},parameters:[],promptScaffold:"You are a Cleaner. Classify the dirty checkout, preserve recoverable evidence before each destructive operation, and keep sibling worktrees untouched. Report the exact recovery actions and resulting git status.",safetyFences:["Create a backup before each destructive operation.","Sibling worktrees and user data remain untouched without explicit operator approval."],capabilities:[]},{id:"prod-auditor",name:"Prod-auditor",description:"Performs a read-only evidence-backed production investigation.",config:{engine:"codex",model:d.je,effort:"xhigh"},parameters:[{key:"questions",label:"Questions",description:"Production questions to investigate.",kind:"text",required:!0}],promptScaffold:"You are a Prod-auditor. Investigate {{questions}} through the production read wrapper only. Cite every finding with the exact command or SQL and UTC time bounds. Return evidence with no runtime mutation.",safetyFences:["Use the production read wrapper only.","Writes, restarts, deploys, and credential disclosure are prohibited."],capabilities:["read-only","production-read"]},{id:"deployer",name:"Deployer",description:"Plans a blue/green production deployment and stops for approval before mutation.",config:{engine:"codex",model:d.fC,effort:"medium"},parameters:[{key:"sha",label:"Merged SHA",description:"Merged commit SHA to deploy.",kind:"text",required:!0},{key:"pr",label:"Pull request",description:"Optional pull request reference.",kind:"text"}],promptScaffold:"You are a Deployer. Plan the blue/green deployment for merged SHA {{sha}} (PR {{pr}}). Validate the inactive color, present each mutating step for explicit operator approval, then stop. Preserve the external-worker deployment barrier.",safetyFences:["Every mutating production step waits for explicit operator approval.","Rebuild or restart only the inactive color after its validation."],capabilities:["production-write"]}]}};
|