@ironbee-ai/cli 0.21.2 → 0.23.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 (62) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/assets/auth.html +79 -0
  3. package/dist/clients/claude/agents/ironbee-verifier.md +12 -2
  4. package/dist/clients/claude/commands/ironbee-verify.md +28 -15
  5. package/dist/clients/claude/hooks/activity-start.js +1 -1
  6. package/dist/clients/claude/hooks/require-verdict.js +2 -2
  7. package/dist/clients/claude/hooks/require-verification.js +7 -7
  8. package/dist/clients/claude/hooks/track-action.js +1 -1
  9. package/dist/clients/claude/index.js +4 -4
  10. package/dist/clients/claude/platforms/skill.android.md +65 -0
  11. package/dist/clients/codex/agents/ironbee-verifier.md +11 -1
  12. package/dist/clients/codex/commands/ironbee-verify/SKILL.md +24 -5
  13. package/dist/clients/codex/hooks/require-verification.js +7 -7
  14. package/dist/clients/codex/hooks/track-action.js +1 -1
  15. package/dist/clients/codex/index.js +2 -2
  16. package/dist/clients/codex/platforms/command-verify.android.md +61 -0
  17. package/dist/clients/codex/platforms/rule.android.md +32 -0
  18. package/dist/clients/codex/platforms/skill.android.md +55 -0
  19. package/dist/clients/codex/skills/ironbee-verification.md +3 -0
  20. package/dist/clients/codex/util.js +11 -11
  21. package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +21 -4
  22. package/dist/clients/cursor/hooks/require-verdict.js +1 -1
  23. package/dist/clients/cursor/hooks/require-verification.js +6 -6
  24. package/dist/clients/cursor/hooks/track-action.js +1 -1
  25. package/dist/clients/cursor/index.js +1 -1
  26. package/dist/clients/cursor/platforms/command-verify.android.md +61 -0
  27. package/dist/clients/cursor/platforms/rule.android.md +32 -0
  28. package/dist/clients/cursor/platforms/skill.android.md +55 -0
  29. package/dist/clients/cursor/rules/ironbee-verification.mdc +3 -0
  30. package/dist/clients/cursor/skills/ironbee-verification.md +3 -0
  31. package/dist/commands/android.js +1 -0
  32. package/dist/commands/config.js +2 -2
  33. package/dist/commands/cycle-toggle.js +4 -4
  34. package/dist/commands/hook.js +16 -15
  35. package/dist/commands/import.js +4 -4
  36. package/dist/commands/install.js +1 -1
  37. package/dist/commands/login.js +2 -2
  38. package/dist/commands/mode-select.js +2 -0
  39. package/dist/hooks/core/actions.js +6 -5
  40. package/dist/hooks/core/session-state.js +1 -1
  41. package/dist/hooks/core/submit-verdict.js +4 -4
  42. package/dist/hooks/core/verification-lifecycle.js +1 -1
  43. package/dist/hooks/core/verify-gate.js +29 -23
  44. package/dist/import/claude/events/tool-call.js +1 -1
  45. package/dist/import/codex/events/tool-call.js +1 -1
  46. package/dist/index.js +1 -1
  47. package/dist/lib/auth.js +5 -5
  48. package/dist/lib/collector.js +1 -1
  49. package/dist/lib/config.js +1 -1
  50. package/dist/lib/install-version.js +1 -0
  51. package/dist/lib/platform-section.js +4 -3
  52. package/dist/lib/prompt.js +4 -4
  53. package/dist/lib/recording-tools.js +1 -0
  54. package/dist/lib/schema-sync.js +2 -0
  55. package/dist/lib/version.js +1 -1
  56. package/dist/scripts/postinstall.js +1 -1
  57. package/dist/tui/config/schema.js +1 -1
  58. package/dist/tui/platforms/area.js +2 -2
  59. package/dist/tui/projects/area.js +4 -4
  60. package/dist/tui/sessions/area.js +3 -3
  61. package/package.json +1 -1
  62. package/dist/assets/login.html +0 -93
@@ -1,4 +1,4 @@
1
- "use strict";var ce=Object.create;var I=Object.defineProperty;var fe=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var ye=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty;var i=(n,s)=>I(n,"name",{value:s,configurable:!0});var be=(n,s)=>{for(var p in s)I(n,p,{get:s[p],enumerable:!0})},Q=(n,s,p,y)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of ue(s))!pe.call(n,a)&&a!==p&&I(n,a,{get:()=>s[a],enumerable:!(y=fe(s,a))||y.enumerable});return n};var he=(n,s,p)=>(p=n!=null?ce(ye(n)):{},Q(s||!n||!n.__esModule?I(p,"default",{value:n,enumerable:!0}):p,n)),me=n=>Q(I({},"__esModule",{value:!0}),n);var je={};be(je,{projectsArea:()=>we});module.exports=me(je);var W=he(require("blessed")),U=require("fs"),q=require("path"),h=require("../../clients/registry"),T=require("../../commands/install"),G=require("../../commands/cycle-toggle"),V=require("../../commands/uninstall"),m=require("../../lib/config"),v=require("../../lib/projects-registry"),f=require("../shell/util");const S=6;function u(n){const s=n.replace(/[/\\]+$/,"").split(/[/\\]/);return s[s.length-1]||n}i(u,"basename");function ve(n){const s=n.session.launchDir;function p(e){try{return(0,v.canonicalizePath)(e)}catch{return e}}i(p,"safeCanonical");const y=p(s);let a=(0,v.listProjects)(),j=Math.max(0,a.findIndex(e=>e.path===y)),D=p(n.session.projectDir),b="cwd";const A=W.box({parent:n.container,top:0,left:0,width:"100%",height:S,border:{type:"line"},label:" Current directory ",tags:!0,style:{border:{fg:"yellow"}},content:""}),g=W.list({parent:n.container,top:S,left:0,width:"52%",height:`100%-${S}`,border:{type:"line"},label:" Registered projects ",tags:!0,keys:!1,mouse:!1,invertSelected:!1,scrollbar:{ch:" "},style:{selected:{bg:"blue"},border:{fg:"cyan"}},items:[]}),P=W.box({parent:n.container,top:S,left:"52%",width:"48%",height:`100%-${S}`,border:{type:"line"},label:" Detail ",tags:!0,scrollable:!0,alwaysScroll:!0,scrollbar:{ch:" "},style:{border:{fg:"cyan"}},content:""});function k(){return a.length===0?void 0:a[(0,f.clamp)(j,0,a.length-1)]}i(k,"selected");function C(e){return(0,h.detectClients)(e).map(t=>t.name).join(", ")}i(C,"detectedNames");function L(e){return e===D||p(e)===D}i(L,"isActive");function Y(e){const o=(0,h.isProjectActive)(e)?"{green-fg}\u25CF{/green-fg}":"{red-fg}\u25CB{/red-fg}";return`${L(e.path)?"{yellow-fg}\u2605{/yellow-fg} ":" "}${o} ${(0,f.escapeTags)(u(e.path))} {gray-fg}${(0,f.escapeTags)(C(e.path))}{/gray-fg}`}i(Y,"rowLabel");function B(){return{installed:C(s),registered:a.some(e=>e.path===y),active:L(y)}}i(B,"cwdState");function w(e,t){return t?`{bold}${e}{/bold}`:`{gray-fg}${e}{/gray-fg}`}i(w,"keyLabel");function z(){const{installed:e,registered:t,active:o}=B(),r=e.length>0,d=[];d.push(r?`{green-fg}\u25CF installed{/green-fg} {gray-fg}(${(0,f.escapeTags)(e)}){/gray-fg}`:"{gray-fg}\u25CB not installed{/gray-fg}"),d.push(t?"{green-fg}registered{/green-fg}":"{gray-fg}not registered{/gray-fg}"),d.push(o?"{yellow-fg}\u2605 active project{/yellow-fg}":"{gray-fg}not the active project{/gray-fg}");const l=`${w("i install",!r)} ${w("x uninstall",r)} {gray-fg}\xB7{/gray-fg} ${w("a register",!t)} ${w("d unregister",t)} {gray-fg}\xB7{/gray-fg} ${w("c make active",!o)}`,c=[];return c.push(`{bold}${(0,f.escapeTags)(s)}{/bold}`),c.push(d.join(" {gray-fg}\xB7{/gray-fg} ")),c.push(l),c.join(`
2
- `)}i(z,"buildCwdPanel");function X(){const e="{bold}Tab{/bold} switch section {bold}I/X{/bold} all {bold}r{/bold} refresh {bold}Esc/q{/bold}";let t;if(b==="cwd"){const{installed:o,registered:r}=B(),d=o.length>0;t=`{cyan-fg}cwd:{/cyan-fg} ${w("i install",!d)} ${w("x uninstall",d)} ${w("a register",!r)} ${w("d unregister",r)} {bold}c{/bold} make active`}else t="{bold}\u2191/\u2193{/bold} move {bold}Enter{/bold} switch {bold}i{/bold} install {bold}x{/bold} uninstall {bold}d{/bold} unregister";return` ${t} {gray-fg}\u2502{/gray-fg} ${e}`}i(X,"buildStatus");function J(e){if(e===void 0){const d=C(s).length>0,l=[];return l.push("{gray-fg}No projects registered yet.{/gray-fg}"),l.push(""),l.push("{gray-fg}Use the {/gray-fg}{bold}Current directory{/bold}{gray-fg} panel above:{/gray-fg}"),l.push(d?"{bold}x{/bold} {gray-fg}\u2014 uninstall IronBee from here (removes hooks + guidance){/gray-fg}":"{bold}i{/bold} {gray-fg}\u2014 install IronBee here (writes hooks + guidance, registers it){/gray-fg}"),l.push("{bold}a{/bold} {gray-fg}\u2014 register here only (inventory, no artifact writes){/gray-fg}"),l.join(`
3
- `)}const t=(0,h.isProjectActive)(e),o=(0,m.getConfigLayerPaths)(e.path),r=[];return r.push(`{bold}${(0,f.escapeTags)(u(e.path))}{/bold}`),r.push("{gray-fg}"+"\u2500".repeat(46)+"{/gray-fg}"),r.push(`{gray-fg}path:{/gray-fg} ${(0,f.escapeTags)(e.path)}`),r.push(`{gray-fg}detected:{/gray-fg} ${(0,f.escapeTags)(C(e.path))||"(none on disk)"}`),r.push(`{gray-fg}added:{/gray-fg} ${(0,f.escapeTags)(e.installedAt)}`),r.push(`{gray-fg}on disk:{/gray-fg} ${t?"{green-fg}detected{/green-fg}":"{red-fg}stale (artifacts not detected){/red-fg}"}`),r.push(""),r.push("{bold}config layers{/bold}"),r.push(` {gray-fg}global {/gray-fg} ${(0,f.escapeTags)(o.global)}`),r.push(` {gray-fg}project{/gray-fg} ${(0,f.escapeTags)(o.project??"-")}`),r.push(` {gray-fg}local {/gray-fg} ${(0,f.escapeTags)(o.local??"-")}`),r.push(""),L(e.path)?(r.push("{yellow-fg}\u2605 active project{/yellow-fg} \u2014 Config / Sessions / Queue target this."),r.push("{gray-fg}c (in the cwd panel) = unselect \u2192 back to the current directory{/gray-fg}")):r.push("{gray-fg}Enter/s = make active (Config / Sessions / Queue switch to it){/gray-fg}"),r.push("{gray-fg}i = install \xB7 x = uninstall (pick a client when >1 registered; runs here, blocking){/gray-fg}"),r.join(`
4
- `)}i(J,"buildDetail");function R(e,t){const o=e.style;o.border!==void 0&&(o.border.fg=t)}i(R,"setBorderFg");function K(){const e=b==="cwd";A.setLabel(e?" {yellow-fg}\u25B8 Current directory{/yellow-fg} ":" Current directory "),g.setLabel(e?" Registered projects ":" {yellow-fg}\u25B8 Registered projects{/yellow-fg} "),R(A,e?"yellow":"gray"),R(g,e?"gray":"yellow"),R(P,e?"gray":"cyan");const t=g.style.selected??{};t.bg=e?void 0:"blue",t.fg=void 0}i(K,"applyFocusStyles");function E(){D=p(n.session.projectDir),n.setStatus(X()),K(),A.setContent(z()),a.length===0?g.setItems(["{gray-fg}(no registered projects){/gray-fg}"]):(g.setItems(a.map(e=>Y(e))),g.select((0,f.clamp)(j,0,a.length-1))),P.setContent(J(k())),P.setScroll(0),n.screen.render()}i(E,"render");function H(){b=b==="cwd"?"list":"cwd",E()}i(H,"toggleSection");function $(e){if(a=(0,v.listProjects)(),e!==void 0){const t=a.findIndex(o=>o.path===e);t>=0&&(j=t)}j=(0,f.clamp)(j,0,Math.max(0,a.length-1)),E()}i($,"refresh");function N(e){a.length!==0&&(j=(0,f.clamp)(j+e,0,a.length-1),E())}i(N,"move");function Z(){try{(0,v.upsertProject)(s),$(y),n.session.message(`Registered ${u(s)} in the inventory. Use d to unregister, i to install.`)}catch(e){n.session.message(`Register failed: ${e instanceof Error?e.message:String(e)}`)}}i(Z,"registerCwd");function x(){n.session.confirm(`Unregister ${u(s)}? (inventory only, no files touched)`,e=>{if(e)try{(0,v.removeProject)(s),$()}catch(t){n.session.message(`Unregister failed: ${t instanceof Error?t.message:String(t)}`)}})}i(x,"unregisterCwd");function ee(){if(a.some(e=>e.path===y)){n.session.message(`${u(s)} is already registered \u2014 press d to unregister.`);return}Z()}i(ee,"cwdRegister");function ne(){if(!a.some(e=>e.path===y)){n.session.message(`${u(s)} is not registered \u2014 nothing to unregister.`);return}x()}i(ne,"cwdUnregister");function _(){if(L(y)){n.session.message(`The current directory (${u(s)}) is already the active project.`);return}n.setActiveProject(y);const e=a.findIndex(t=>t.path===y);e>=0&&(j=e),E(),n.session.message(`Active project \u2192 current directory (${u(s)}). Any switched project is unselected.`)}i(_,"setActiveToCwd");function te(e,t){const o=n.session.silently(()=>(0,m.loadConfig)(e));if((0,m.getVerificationMode)(o)==="monitor"){t(void 0);return}const r=m.ALL_CYCLES.map(l=>`${l} \u2014 ${T.CYCLE_HINTS[l]}`),d=m.ALL_CYCLES.map((l,c)=>(0,m.isCycleEnabled)(o,l)?c:-1).filter(l=>l>=0);n.session.pickMulti("Which platforms should require verification?",r,d,l=>{if(l===null){t("cancel");return}t(l.map(c=>m.ALL_CYCLES[c]))})}i(te,"choosePlatforms");function M(e,t,o){F(t,r=>{te(e,d=>{d!=="cancel"&&n.session.runWithOutput(`Install ${u(e)} (${r.map(l=>l.name).join(", ")})`,()=>{d!==void 0&&(0,G.reconcileCyclesInLayer)(e,"project",d);for(const l of r)l.install(e);(0,v.upsertProject)(e)}).then(()=>$(o))})})}i(M,"doInstall");function O(e,t){F("Uninstall which client?",o=>{n.session.confirm(`Uninstall ${o.map(r=>r.name).join(", ")} from ${u(e)}?`,r=>{r&&n.session.runWithOutput(`Uninstall ${u(e)} (${o.map(d=>d.name).join(", ")})`,()=>{const d=new Set(o.map(c=>c.name));for(const c of o)c.uninstall(e);if(!h.REGISTERED_CLIENTS.some(c=>!d.has(c.name)&&c.detect(e))){const c=(0,q.join)(e,".ironbee");(0,U.existsSync)(c)&&(0,U.rmSync)(c,{recursive:!0,force:!0}),(0,v.removeProject)(e)}}).then(()=>$(t))})})}i(O,"doUninstall");function re(){if(C(s).length>0){n.session.message(`${u(s)} is already installed \u2014 press x to uninstall.`);return}M(s,"Install into the current directory \u2014 which client?",y)}i(re,"cwdInstall");function ie(){if(C(s).length===0){n.session.message(`${u(s)} is not installed \u2014 nothing to uninstall.`);return}O(s,y)}i(ie,"cwdUninstall");function se(){const e=k();e!==void 0&&(n.setActiveProject(e.path),E(),n.session.message(`Active project \u2192 ${u(e.path)}. Config / Sessions / Queue now target it.`))}i(se,"switchTo");function oe(){const e=k();e!==void 0&&n.session.confirm(`Unregister ${u(e.path)}? (inventory only, no files touched)`,t=>{if(t)try{(0,v.removeProject)(e.path),$()}catch(o){n.session.message(`Unregister failed: ${o instanceof Error?o.message:String(o)}`)}})}i(oe,"unregisterSelected");function F(e,t){if(h.REGISTERED_CLIENTS.length<=1){t(h.REGISTERED_CLIENTS);return}const o=h.REGISTERED_CLIENTS.map(r=>r.name);n.session.pick(e,["All clients",...o],r=>{r<0||t(r===0?h.REGISTERED_CLIENTS:[h.REGISTERED_CLIENTS[r-1]])})}i(F,"pickClient");function le(){const e=k();e!==void 0&&M(e.path,"Install which client?")}i(le,"installSelected");function ae(){const e=k();e!==void 0&&O(e.path)}i(ae,"uninstallSelected");async function ge(){await n.session.runWithOutput("Install \u2014 all registered projects",async()=>{await(0,T.runInstallAll)({})}),$()}i(ge,"installAll");function de(){n.session.confirm("Uninstall IronBee from ALL registered projects? (destructive)",e=>{e&&n.session.runWithOutput("Uninstall \u2014 all registered projects",async()=>{await(0,V.runUninstallAll)({yes:!0})}).then(()=>$())})}return i(de,"uninstallAllFlow"),g.key(["tab"],()=>H()),g.key(["S-tab"],()=>H()),g.key(["up","k"],()=>{b==="list"&&N(-1)}),g.key(["down","j"],()=>{b==="list"&&N(1)}),g.key(["i"],()=>{b==="cwd"?re():le()}),g.key(["x"],()=>{b==="cwd"?ie():ae()}),g.key(["d"],()=>{b==="cwd"?ne():oe()}),g.key(["a"],()=>{b==="cwd"&&ee()}),g.key(["c"],()=>{b==="cwd"&&_()}),g.key(["enter","s"],()=>{b==="list"?se():_()}),g.key(["S-i"],()=>{ge()}),g.key(["S-x"],()=>de()),g.key(["r"],()=>$()),E(),g.focus(),n.screen.render(),{unmount(){A.destroy(),g.destroy(),P.destroy()}}}i(ve,"mountProjectsView");const we={id:"projects",title:"Projects",summary:"Registry \u2014 switch active \xB7 register / unregister \xB7 install / uninstall (+ --all)",mount(n){return ve(n)}};0&&(module.exports={projectsArea});
1
+ "use strict";var ye=Object.create;var S=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var be=Object.getPrototypeOf,me=Object.prototype.hasOwnProperty;var r=(n,o)=>S(n,"name",{value:o,configurable:!0});var ve=(n,o)=>{for(var p in o)S(n,p,{get:o[p],enumerable:!0})},q=(n,o,p,y)=>{if(o&&typeof o=="object"||typeof o=="function")for(let g of he(o))!me.call(n,g)&&g!==p&&S(n,g,{get:()=>o[g],enumerable:!(y=pe(o,g))||y.enumerable});return n};var we=(n,o,p)=>(p=n!=null?ye(be(n)):{},q(o||!n||!n.__esModule?S(p,"default",{value:n,enumerable:!0}):p,n)),je=n=>q(S({},"__esModule",{value:!0}),n);var Ee={};ve(Ee,{projectsArea:()=>Ce});module.exports=je(Ee);var V=we(require("blessed")),D=require("fs"),G=require("path"),b=require("../../clients/registry"),U=require("../../commands/install"),Y=require("../../commands/cycle-toggle"),w=require("../../commands/mode-select"),z=require("../../commands/uninstall"),v=require("../../lib/config"),m=require("../../lib/projects-registry"),f=require("../shell/util");const A=6;function u(n){const o=n.replace(/[/\\]+$/,"").split(/[/\\]/);return o[o.length-1]||n}r(u,"basename");function $e(n){const o=n.session.launchDir;function p(e){try{return(0,m.canonicalizePath)(e)}catch{return e}}r(p,"safeCanonical");const y=p(o);let g=(0,m.listProjects)(),$=Math.max(0,g.findIndex(e=>e.path===y)),T=p(n.session.projectDir),h="cwd";const P=V.box({parent:n.container,top:0,left:0,width:"100%",height:A,border:{type:"line"},label:" Current directory ",tags:!0,style:{border:{fg:"yellow"}},content:""}),d=V.list({parent:n.container,top:A,left:0,width:"52%",height:`100%-${A}`,border:{type:"line"},label:" Registered projects ",tags:!0,keys:!1,mouse:!1,invertSelected:!1,scrollbar:{ch:" "},style:{selected:{bg:"blue"},border:{fg:"cyan"}},items:[]}),L=V.box({parent:n.container,top:A,left:"52%",width:"48%",height:`100%-${A}`,border:{type:"line"},label:" Detail ",tags:!0,scrollable:!0,alwaysScroll:!0,scrollbar:{ch:" "},style:{border:{fg:"cyan"}},content:""});function I(){return g.length===0?void 0:g[(0,f.clamp)($,0,g.length-1)]}r(I,"selected");function E(e){return(0,b.detectClients)(e).map(i=>i.name).join(", ")}r(E,"detectedNames");function M(e){return e===T||p(e)===T}r(M,"isActive");function X(e){const s=(0,b.isProjectActive)(e)?"{green-fg}\u25CF{/green-fg}":"{red-fg}\u25CB{/red-fg}";return`${M(e.path)?"{yellow-fg}\u2605{/yellow-fg} ":" "}${s} ${(0,f.escapeTags)(u(e.path))} {gray-fg}${(0,f.escapeTags)(E(e.path))}{/gray-fg}`}r(X,"rowLabel");function B(){return{installed:E(o),registered:g.some(e=>e.path===y),active:M(y)}}r(B,"cwdState");function j(e,i){return i?`{bold}${e}{/bold}`:`{gray-fg}${e}{/gray-fg}`}r(j,"keyLabel");function J(){const{installed:e,registered:i,active:s}=B(),t=e.length>0,c=[];c.push(t?`{green-fg}\u25CF installed{/green-fg} {gray-fg}(${(0,f.escapeTags)(e)}){/gray-fg}`:"{gray-fg}\u25CB not installed{/gray-fg}"),c.push(i?"{green-fg}registered{/green-fg}":"{gray-fg}not registered{/gray-fg}"),c.push(s?"{yellow-fg}\u2605 active project{/yellow-fg}":"{gray-fg}not the active project{/gray-fg}");const a=`${j("i install",!t)} ${j("x uninstall",t)} {gray-fg}\xB7{/gray-fg} ${j("a register",!i)} ${j("d unregister",i)} {gray-fg}\xB7{/gray-fg} ${j("c make active",!s)}`,l=[];return l.push(`{bold}${(0,f.escapeTags)(o)}{/bold}`),l.push(c.join(" {gray-fg}\xB7{/gray-fg} ")),l.push(a),l.join(`
2
+ `)}r(J,"buildCwdPanel");function K(){const e="{bold}Tab{/bold} switch section {bold}I/X{/bold} all {bold}r{/bold} refresh {bold}Esc/q{/bold}";let i;if(h==="cwd"){const{installed:s,registered:t}=B(),c=s.length>0;i=`{cyan-fg}cwd:{/cyan-fg} ${j("i install",!c)} ${j("x uninstall",c)} ${j("a register",!t)} ${j("d unregister",t)} {bold}c{/bold} make active`}else i="{bold}\u2191/\u2193{/bold} move {bold}Enter{/bold} switch {bold}i{/bold} install {bold}x{/bold} uninstall {bold}d{/bold} unregister";return` ${i} {gray-fg}\u2502{/gray-fg} ${e}`}r(K,"buildStatus");function Z(e){if(e===void 0){const c=E(o).length>0,a=[];return a.push("{gray-fg}No projects registered yet.{/gray-fg}"),a.push(""),a.push("{gray-fg}Use the {/gray-fg}{bold}Current directory{/bold}{gray-fg} panel above:{/gray-fg}"),a.push(c?"{bold}x{/bold} {gray-fg}\u2014 uninstall IronBee from here (removes hooks + guidance){/gray-fg}":"{bold}i{/bold} {gray-fg}\u2014 install IronBee here (writes hooks + guidance, registers it){/gray-fg}"),a.push("{bold}a{/bold} {gray-fg}\u2014 register here only (inventory, no artifact writes){/gray-fg}"),a.join(`
3
+ `)}const i=(0,b.isProjectActive)(e),s=(0,v.getConfigLayerPaths)(e.path),t=[];return t.push(`{bold}${(0,f.escapeTags)(u(e.path))}{/bold}`),t.push("{gray-fg}"+"\u2500".repeat(46)+"{/gray-fg}"),t.push(`{gray-fg}path:{/gray-fg} ${(0,f.escapeTags)(e.path)}`),t.push(`{gray-fg}detected:{/gray-fg} ${(0,f.escapeTags)(E(e.path))||"(none on disk)"}`),t.push(`{gray-fg}added:{/gray-fg} ${(0,f.escapeTags)(e.installedAt)}`),t.push(`{gray-fg}on disk:{/gray-fg} ${i?"{green-fg}detected{/green-fg}":"{red-fg}stale (artifacts not detected){/red-fg}"}`),t.push(""),t.push("{bold}config layers{/bold}"),t.push(` {gray-fg}global {/gray-fg} ${(0,f.escapeTags)(s.global)}`),t.push(` {gray-fg}project{/gray-fg} ${(0,f.escapeTags)(s.project??"-")}`),t.push(` {gray-fg}local {/gray-fg} ${(0,f.escapeTags)(s.local??"-")}`),t.push(""),M(e.path)?(t.push("{yellow-fg}\u2605 active project{/yellow-fg} \u2014 Config / Sessions / Queue target this."),t.push("{gray-fg}c (in the cwd panel) = unselect \u2192 back to the current directory{/gray-fg}")):t.push("{gray-fg}Enter/s = make active (Config / Sessions / Queue switch to it){/gray-fg}"),t.push("{gray-fg}i = install \xB7 x = uninstall (pick a client when >1 registered; runs here, blocking){/gray-fg}"),t.join(`
4
+ `)}r(Z,"buildDetail");function W(e,i){const s=e.style;s.border!==void 0&&(s.border.fg=i)}r(W,"setBorderFg");function x(){const e=h==="cwd";P.setLabel(e?" {yellow-fg}\u25B8 Current directory{/yellow-fg} ":" Current directory "),d.setLabel(e?" Registered projects ":" {yellow-fg}\u25B8 Registered projects{/yellow-fg} "),W(P,e?"yellow":"gray"),W(d,e?"gray":"yellow"),W(L,e?"gray":"cyan");const i=d.style.selected??{};i.bg=e?void 0:"blue",i.fg=void 0}r(x,"applyFocusStyles");function k(){T=p(n.session.projectDir),n.setStatus(K()),x(),P.setContent(J()),g.length===0?d.setItems(["{gray-fg}(no registered projects){/gray-fg}"]):(d.setItems(g.map(e=>X(e))),d.select((0,f.clamp)($,0,g.length-1))),L.setContent(Z(I())),L.setScroll(0),n.screen.render()}r(k,"render");function H(){h=h==="cwd"?"list":"cwd",k()}r(H,"toggleSection");function C(e){if(g=(0,m.listProjects)(),e!==void 0){const i=g.findIndex(s=>s.path===e);i>=0&&($=i)}$=(0,f.clamp)($,0,Math.max(0,g.length-1)),k()}r(C,"refresh");function _(e){g.length!==0&&($=(0,f.clamp)($+e,0,g.length-1),k())}r(_,"move");function ee(){try{(0,m.upsertProject)(o),C(y),n.session.message(`Registered ${u(o)} in the inventory. Use d to unregister, i to install.`)}catch(e){n.session.message(`Register failed: ${e instanceof Error?e.message:String(e)}`)}}r(ee,"registerCwd");function ne(){n.session.confirm(`Unregister ${u(o)}? (inventory only, no files touched)`,e=>{if(e)try{(0,m.removeProject)(o),C()}catch(i){n.session.message(`Unregister failed: ${i instanceof Error?i.message:String(i)}`)}})}r(ne,"unregisterCwd");function te(){if(g.some(e=>e.path===y)){n.session.message(`${u(o)} is already registered \u2014 press d to unregister.`);return}ee()}r(te,"cwdRegister");function ie(){if(!g.some(e=>e.path===y)){n.session.message(`${u(o)} is not registered \u2014 nothing to unregister.`);return}ne()}r(ie,"cwdUnregister");function O(){if(M(y)){n.session.message(`The current directory (${u(o)}) is already the active project.`);return}n.setActiveProject(y);const e=g.findIndex(i=>i.path===y);e>=0&&($=e),k(),n.session.message(`Active project \u2192 current directory (${u(o)}). Any switched project is unselected.`)}r(O,"setActiveToCwd");function re(e,i){const s=n.session.silently(()=>(0,w.resolveInstallDefaultMode)(e)),t=[s,...w.ALL_MODES.filter(a=>a!==s)],c=t.map(a=>`${w.MODE_LABELS[a]} \u2014 ${w.MODE_HINTS[a]}`);n.session.pick("Which verification mode?",c,a=>{if(a<0){i("cancel");return}i(t[a])})}r(re,"chooseMode");function oe(e,i,s){if(i==="monitor"){s(void 0);return}const t=n.session.silently(()=>(0,v.loadConfig)(e)),c=v.ALL_CYCLES.map(l=>`${l} \u2014 ${U.CYCLE_HINTS[l]}`),a=v.ALL_CYCLES.map((l,R)=>(0,v.isCyclePatternsActive)(t,l)?R:-1).filter(l=>l>=0);n.session.pickMulti("Which platforms should require verification?",c,a,l=>{if(l===null){s("cancel");return}s(l.map(R=>v.ALL_CYCLES[R]))})}r(oe,"choosePlatforms");function N(e,i,s){Q(i,t=>{re(e,c=>{c!=="cancel"&&oe(e,c,a=>{a!=="cancel"&&n.session.runWithOutput(`Install ${u(e)} (${t.map(l=>l.name).join(", ")})`,()=>{(0,w.applyModeToLayer)(e,"project",c),a!==void 0&&(0,Y.reconcileCyclesInLayer)(e,"project",a,!0);for(const l of t)l.install(e);(0,m.upsertProject)(e)}).then(()=>C(s))})})})}r(N,"doInstall");function F(e,i){Q("Uninstall which client?",s=>{n.session.confirm(`Uninstall ${s.map(t=>t.name).join(", ")} from ${u(e)}?`,t=>{t&&n.session.runWithOutput(`Uninstall ${u(e)} (${s.map(c=>c.name).join(", ")})`,()=>{const c=new Set(s.map(l=>l.name));for(const l of s)l.uninstall(e);if(!b.REGISTERED_CLIENTS.some(l=>!c.has(l.name)&&l.detect(e))){const l=(0,G.join)(e,".ironbee");(0,D.existsSync)(l)&&(0,D.rmSync)(l,{recursive:!0,force:!0}),(0,m.removeProject)(e)}}).then(()=>C(i))})})}r(F,"doUninstall");function se(){if(E(o).length>0){n.session.message(`${u(o)} is already installed \u2014 press x to uninstall.`);return}N(o,"Install into the current directory \u2014 which client?",y)}r(se,"cwdInstall");function le(){if(E(o).length===0){n.session.message(`${u(o)} is not installed \u2014 nothing to uninstall.`);return}F(o,y)}r(le,"cwdUninstall");function ae(){const e=I();e!==void 0&&(n.setActiveProject(e.path),k(),n.session.message(`Active project \u2192 ${u(e.path)}. Config / Sessions / Queue now target it.`))}r(ae,"switchTo");function ge(){const e=I();e!==void 0&&n.session.confirm(`Unregister ${u(e.path)}? (inventory only, no files touched)`,i=>{if(i)try{(0,m.removeProject)(e.path),C()}catch(s){n.session.message(`Unregister failed: ${s instanceof Error?s.message:String(s)}`)}})}r(ge,"unregisterSelected");function Q(e,i){if(b.REGISTERED_CLIENTS.length<=1){i(b.REGISTERED_CLIENTS);return}const s=b.REGISTERED_CLIENTS.map(t=>t.name);n.session.pick(e,["All clients",...s],t=>{t<0||i(t===0?b.REGISTERED_CLIENTS:[b.REGISTERED_CLIENTS[t-1]])})}r(Q,"pickClient");function de(){const e=I();e!==void 0&&N(e.path,"Install which client?")}r(de,"installSelected");function ce(){const e=I();e!==void 0&&F(e.path)}r(ce,"uninstallSelected");async function fe(){await n.session.runWithOutput("Install \u2014 all registered projects",async()=>{await(0,U.runInstallAll)({})}),C()}r(fe,"installAll");function ue(){n.session.confirm("Uninstall IronBee from ALL registered projects? (destructive)",e=>{e&&n.session.runWithOutput("Uninstall \u2014 all registered projects",async()=>{await(0,z.runUninstallAll)({yes:!0})}).then(()=>C())})}return r(ue,"uninstallAllFlow"),d.key(["tab"],()=>H()),d.key(["S-tab"],()=>H()),d.key(["up","k"],()=>{h==="list"&&_(-1)}),d.key(["down","j"],()=>{h==="list"&&_(1)}),d.key(["i"],()=>{h==="cwd"?se():de()}),d.key(["x"],()=>{h==="cwd"?le():ce()}),d.key(["d"],()=>{h==="cwd"?ie():ge()}),d.key(["a"],()=>{h==="cwd"&&te()}),d.key(["c"],()=>{h==="cwd"&&O()}),d.key(["enter","s"],()=>{h==="list"?ae():O()}),d.key(["S-i"],()=>{fe()}),d.key(["S-x"],()=>ue()),d.key(["r"],()=>C()),k(),d.focus(),n.screen.render(),{unmount(){P.destroy(),d.destroy(),L.destroy()}}}r($e,"mountProjectsView");const Ce={id:"projects",title:"Projects",summary:"Registry \u2014 switch active \xB7 register / unregister \xB7 install / uninstall (+ --all)",mount(n){return $e(n)}};0&&(module.exports={projectsArea});
@@ -1,3 +1,3 @@
1
- "use strict";var A=Object.create;var c=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var f=(e,i)=>c(e,"name",{value:i,configurable:!0});var I=(e,i)=>{for(var t in i)c(e,t,{get:i[t],enumerable:!0})},S=(e,i,t,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let g of V(i))!j.call(e,g)&&g!==t&&c(e,g,{get:()=>i[g],enumerable:!(l=C(i,g))||l.enumerable});return e};var E=(e,i,t)=>(t=e!=null?A(T(e)):{},S(i||!e||!e.__esModule?c(t,"default",{value:e,enumerable:!0}):t,e)),x=e=>S(c({},"__esModule",{value:!0}),e);var H={};I(H,{sessionsArea:()=>B});module.exports=x(H);var b=E(require("blessed")),o=require("../shell/util"),u=require("./read");const L=" {bold}\u2191/\u2193{/bold} move {bold}v{/bold} verify {bold}r{/bold} refresh {bold}Esc{/bold} back {bold}q{/bold} quit";function v(e){return e==="pass"?"{green-fg}pass{/green-fg}":e==="fail"?"{red-fg}fail{/red-fg}":`{gray-fg}${(0,o.escapeTags)(e??"\u2014")}{/gray-fg}`}f(v,"verdictColor");function O(e){const i=e.session.projectDir;let t=(0,u.listSessions)(i),l=0;const g=b.list({parent:e.container,top:0,left:0,width:"55%",height:"100%",border:{type:"line"},label:" Sessions ",tags:!0,keys:!1,mouse:!1,scrollbar:{ch:" "},style:{selected:{bg:"blue",fg:"white"},border:{fg:"cyan"}},items:[]}),y=b.box({parent:e.container,top:0,left:"55%",width:"45%",height:"100%",border:{type:"line"},label:" Detail ",tags:!0,scrollable:!0,alwaysScroll:!0,scrollbar:{ch:" "},style:{border:{fg:"cyan"}},content:""});function $(r){const n=r.active===!0?"{green-fg}\u25CF{/green-fg}":"{gray-fg}\u25CB{/gray-fg}",s=r.id.length>18?r.id.slice(0,17)+"\u2026":r.id.padEnd(18," ");return`${n} ${(0,o.escapeTags)(s)} ${v(r.verdictStatus)}`}f($,"rowLabel");function h(r,n,s,a){if(s.length!==0){r.push(`{bold}${n}{/bold}`);for(const d of s)r.push(` {${a}-fg}\u2022{/${a}-fg} ${(0,o.escapeTags)(d)}`);r.push("")}}f(h,"pushList");function w(r){if(r===void 0)return"{gray-fg}No sessions for this project yet.{/gray-fg}";const n=(0,u.readSessionDetail)(i,r.id),s=[];s.push(`{bold}${(0,o.escapeTags)(r.id)}{/bold}`),s.push("{gray-fg}"+"\u2500".repeat(40)+"{/gray-fg}"),s.push(`{gray-fg}phase:{/gray-fg} ${(0,o.escapeTags)(r.phase??"\u2014")}`),s.push(`{gray-fg}verdict:{/gray-fg} ${v(r.verdictStatus)}`),s.push(`{gray-fg}active:{/gray-fg} ${r.active===void 0?"\u2014":String(r.active)}`),s.push(`{gray-fg}retries:{/gray-fg} ${r.retries===void 0?"\u2014":String(r.retries)}`);const a=n.firstTs!==void 0&&n.lastTs!==void 0?`${(0,o.escapeTags)(new Date(n.firstTs).toISOString())} \u2192 ${(0,o.escapeTags)(new Date(n.lastTs).toISOString())}`:r.mtimeMs>0?(0,o.escapeTags)(new Date(r.mtimeMs).toISOString()):"\u2014";s.push(`{gray-fg}span:{/gray-fg} ${a}`),s.push(""),s.push("{bold}events{/bold}");const d=n.counts;return s.push(` {gray-fg}activities{/gray-fg} ${d.activities} {gray-fg}verifications{/gray-fg} ${d.verifications} {gray-fg}verdicts{/gray-fg} ${d.verdicts}`),s.push(` {gray-fg}file_changes{/gray-fg} ${d.fileChanges} {gray-fg}tool_calls{/gray-fg} ${d.toolCalls}`),s.push(""),n.verdict!==void 0?(s.push(`{bold}last verdict{/bold} ${v(n.verdict.status)}`),h(s,"checks",n.verdict.checks,"green"),h(s,"issues",n.verdict.issues,"red"),h(s,"fixes",n.verdict.fixes,"yellow")):s.push("{gray-fg}no verdict on file{/gray-fg}"),s.join(`
2
- `)}f(w,"buildDetail");function p(){t.length===0?g.setItems(["{gray-fg}(no sessions){/gray-fg}"]):(g.setItems(t.map(n=>$(n))),g.select((0,o.clamp)(l,0,t.length-1)));const r=t.length===0?void 0:t[(0,o.clamp)(l,0,t.length-1)];y.setContent(w(r)),y.setScroll(0),e.screen.render()}f(p,"render");function m(r){t.length!==0&&(l=(0,o.clamp)(l+r,0,t.length-1),p())}f(m,"move");function k(){return t.length===0?void 0:t[(0,o.clamp)(l,0,t.length-1)]}f(k,"current");function D(){const r=k();if(r===void 0)return;const n=(0,u.readSessionDetail)(i,r.id),s=(0,u.validateVerdict)(n.verdict,r.retries),a=[];if(!s.hasVerdict)a.push("{gray-fg}No verdict on file \u2014 nothing to validate.{/gray-fg}"),a.push("{gray-fg}(an enabled session writes verdict.json via submit-verdict; a monitoring-only session never does){/gray-fg}");else{for(const d of s.checks)a.push(d.ok?`{green-fg}\u2713{/green-fg} ${(0,o.escapeTags)(d.label)}`:`{red-fg}\u2717{/red-fg} ${(0,o.escapeTags)(d.label)} {gray-fg}\u2014 ${(0,o.escapeTags)(d.reason??"")}{/gray-fg}`);s.retries!==void 0&&s.retries>0&&a.push("",`{gray-fg}retries:{/gray-fg} {yellow-fg}${s.retries}{/yellow-fg}`),a.push(""),a.push(s.wouldAllow?"{green-fg}\u2713 PASS{/green-fg} \u2014 the Stop hook would allow completion.":"{red-fg}\u2717 BLOCKED{/red-fg} \u2014 the Stop hook would not allow completion.")}e.session.showPane(`Verify (dry-run) \u2014 ${r.id}`,a.join(`
3
- `))}return f(D,"verifySession"),g.key(["up","k"],()=>m(-1)),g.key(["down","j"],()=>m(1)),g.key(["v"],()=>D()),g.key(["r"],()=>{t=(0,u.listSessions)(i),l=(0,o.clamp)(l,0,Math.max(0,t.length-1)),p()}),e.setStatus(L),p(),g.focus(),e.screen.render(),{unmount(){g.destroy(),y.destroy()}}}f(O,"mountSessionsView");const B={id:"sessions",title:"Sessions",summary:"Browse sessions + verify (dry-run verdict validation)",mount(e){return O(e)}};0&&(module.exports={sessionsArea});
1
+ "use strict";var A=Object.create;var c=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var l=(e,i)=>c(e,"name",{value:i,configurable:!0});var I=(e,i)=>{for(var s in i)c(e,s,{get:i[s],enumerable:!0})},S=(e,i,s,f)=>{if(i&&typeof i=="object"||typeof i=="function")for(let g of V(i))!j.call(e,g)&&g!==s&&c(e,g,{get:()=>i[g],enumerable:!(f=C(i,g))||f.enumerable});return e};var E=(e,i,s)=>(s=e!=null?A(T(e)):{},S(i||!e||!e.__esModule?c(s,"default",{value:e,enumerable:!0}):s,e)),x=e=>S(c({},"__esModule",{value:!0}),e);var H={};I(H,{sessionsArea:()=>B});module.exports=x(H);var b=E(require("blessed")),o=require("../shell/util"),u=require("./read");const L=" {bold}\u2191/\u2193{/bold} move {bold}v{/bold} verify {bold}r{/bold} refresh {bold}Esc{/bold} back {bold}q{/bold} quit";function v(e){return e==="pass"?"{green-fg}pass{/green-fg}":e==="fail"?"{red-fg}fail{/red-fg}":e==="fail_reported"?"{red-fg}fail (reported){/red-fg}":`{gray-fg}${(0,o.escapeTags)(e??"\u2014")}{/gray-fg}`}l(v,"verdictColor");function O(e){const i=e.session.projectDir;let s=(0,u.listSessions)(i),f=0;const g=b.list({parent:e.container,top:0,left:0,width:"55%",height:"100%",border:{type:"line"},label:" Sessions ",tags:!0,keys:!1,mouse:!1,scrollbar:{ch:" "},style:{selected:{bg:"blue",fg:"white"},border:{fg:"cyan"}},items:[]}),y=b.box({parent:e.container,top:0,left:"55%",width:"45%",height:"100%",border:{type:"line"},label:" Detail ",tags:!0,scrollable:!0,alwaysScroll:!0,scrollbar:{ch:" "},style:{border:{fg:"cyan"}},content:""});function $(r){const n=r.active===!0?"{green-fg}\u25CF{/green-fg}":"{gray-fg}\u25CB{/gray-fg}",t=r.id.length>18?r.id.slice(0,17)+"\u2026":r.id.padEnd(18," ");return`${n} ${(0,o.escapeTags)(t)} ${v(r.verdictStatus)}`}l($,"rowLabel");function h(r,n,t,a){if(t.length!==0){r.push(`{bold}${n}{/bold}`);for(const d of t)r.push(` {${a}-fg}\u2022{/${a}-fg} ${(0,o.escapeTags)(d)}`);r.push("")}}l(h,"pushList");function w(r){if(r===void 0)return"{gray-fg}No sessions for this project yet.{/gray-fg}";const n=(0,u.readSessionDetail)(i,r.id),t=[];t.push(`{bold}${(0,o.escapeTags)(r.id)}{/bold}`),t.push("{gray-fg}"+"\u2500".repeat(40)+"{/gray-fg}"),t.push(`{gray-fg}phase:{/gray-fg} ${(0,o.escapeTags)(r.phase??"\u2014")}`),t.push(`{gray-fg}verdict:{/gray-fg} ${v(r.verdictStatus)}`),t.push(`{gray-fg}active:{/gray-fg} ${r.active===void 0?"\u2014":String(r.active)}`),t.push(`{gray-fg}retries:{/gray-fg} ${r.retries===void 0?"\u2014":String(r.retries)}`);const a=n.firstTs!==void 0&&n.lastTs!==void 0?`${(0,o.escapeTags)(new Date(n.firstTs).toISOString())} \u2192 ${(0,o.escapeTags)(new Date(n.lastTs).toISOString())}`:r.mtimeMs>0?(0,o.escapeTags)(new Date(r.mtimeMs).toISOString()):"\u2014";t.push(`{gray-fg}span:{/gray-fg} ${a}`),t.push(""),t.push("{bold}events{/bold}");const d=n.counts;return t.push(` {gray-fg}activities{/gray-fg} ${d.activities} {gray-fg}verifications{/gray-fg} ${d.verifications} {gray-fg}verdicts{/gray-fg} ${d.verdicts}`),t.push(` {gray-fg}file_changes{/gray-fg} ${d.fileChanges} {gray-fg}tool_calls{/gray-fg} ${d.toolCalls}`),t.push(""),n.verdict!==void 0?(t.push(`{bold}last verdict{/bold} ${v(n.verdict.status)}`),h(t,"checks",n.verdict.checks,"green"),h(t,"issues",n.verdict.issues,"red"),h(t,"fixes",n.verdict.fixes,"yellow")):t.push("{gray-fg}no verdict on file{/gray-fg}"),t.join(`
2
+ `)}l(w,"buildDetail");function p(){s.length===0?g.setItems(["{gray-fg}(no sessions){/gray-fg}"]):(g.setItems(s.map(n=>$(n))),g.select((0,o.clamp)(f,0,s.length-1)));const r=s.length===0?void 0:s[(0,o.clamp)(f,0,s.length-1)];y.setContent(w(r)),y.setScroll(0),e.screen.render()}l(p,"render");function m(r){s.length!==0&&(f=(0,o.clamp)(f+r,0,s.length-1),p())}l(m,"move");function k(){return s.length===0?void 0:s[(0,o.clamp)(f,0,s.length-1)]}l(k,"current");function D(){const r=k();if(r===void 0)return;const n=(0,u.readSessionDetail)(i,r.id),t=(0,u.validateVerdict)(n.verdict,r.retries),a=[];if(!t.hasVerdict)a.push("{gray-fg}No verdict on file \u2014 nothing to validate.{/gray-fg}"),a.push("{gray-fg}(an enabled session writes verdict.json via submit-verdict; a monitoring-only session never does){/gray-fg}");else{for(const d of t.checks)a.push(d.ok?`{green-fg}\u2713{/green-fg} ${(0,o.escapeTags)(d.label)}`:`{red-fg}\u2717{/red-fg} ${(0,o.escapeTags)(d.label)} {gray-fg}\u2014 ${(0,o.escapeTags)(d.reason??"")}{/gray-fg}`);t.retries!==void 0&&t.retries>0&&a.push("",`{gray-fg}retries:{/gray-fg} {yellow-fg}${t.retries}{/yellow-fg}`),a.push(""),a.push(t.wouldAllow?"{green-fg}\u2713 PASS{/green-fg} \u2014 the Stop hook would allow completion.":"{red-fg}\u2717 BLOCKED{/red-fg} \u2014 the Stop hook would not allow completion.")}e.session.showPane(`Verify (dry-run) \u2014 ${r.id}`,a.join(`
3
+ `))}return l(D,"verifySession"),g.key(["up","k"],()=>m(-1)),g.key(["down","j"],()=>m(1)),g.key(["v"],()=>D()),g.key(["r"],()=>{s=(0,u.listSessions)(i),f=(0,o.clamp)(f,0,Math.max(0,s.length-1)),p()}),e.setStatus(L),p(),g.focus(),e.screen.render(),{unmount(){g.destroy(),y.destroy()}}}l(O,"mountSessionsView");const B={id:"sessions",title:"Sessions",summary:"Browse sessions + verify (dry-run verdict validation)",mount(e){return O(e)}};0&&(module.exports={sessionsArea});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ironbee-ai/cli",
3
- "version": "0.21.2",
3
+ "version": "0.23.0",
4
4
  "description": "The CLI for IronBee — Verification and Intelligence Layer for Agentic Development",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1,93 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <title>Connected — IronBee</title>
6
- <style>
7
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
8
- body {
9
- font-family: system-ui, -apple-system, sans-serif;
10
- display: flex;
11
- align-items: center;
12
- justify-content: center;
13
- min-height: 100vh;
14
- background: #0f0f11;
15
- color: #e5e5e5;
16
- }
17
- .container {
18
- display: flex;
19
- flex-direction: column;
20
- align-items: center;
21
- gap: 20px;
22
- max-width: 840px;
23
- padding: 2.5rem;
24
- text-align: center;
25
- }
26
- .logo {
27
- width: 288px;
28
- height: 288px;
29
- opacity: 0.95;
30
- }
31
- .logo-row {
32
- display: flex;
33
- align-items: center;
34
- gap: 12px;
35
- }
36
- .logo-name {
37
- font-size: 1.4rem;
38
- font-weight: 600;
39
- letter-spacing: 2px;
40
- color: #e5e5e5;
41
- }
42
- h1 {
43
- font-size: 2rem;
44
- font-weight: 700;
45
- color: #e5e5e5;
46
- letter-spacing: -0.3px;
47
- margin-top: 4px;
48
- }
49
- p {
50
- color: #888;
51
- font-size: 0.9rem;
52
- line-height: 1.6;
53
- }
54
- </style>
55
- </head>
56
- <body>
57
- <div class="container">
58
- <div class="logo-row">
59
- <svg class="logo" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
60
- <path d="M217.557 138.711C211.185 166.725 218.839 188.038 224.039 201.771L249.307 154.531L275.674 201.771C285.561 179.579 286.328 161.013 281.167 135.964C277.431 117.837 259.744 95.3889 249.307 84C241.91 92.6058 222.355 117.618 217.557 138.711Z" fill="url(#g0)"/>
61
- <path d="M249.527 416C223.951 394.731 206.425 358.067 202.396 343.052L249.527 381.394L272.378 362.937L295.559 343.052C290.988 371.089 262.417 403.805 249.527 416Z" fill="url(#g1)"/>
62
- <path d="M220.854 231.434L250.077 171.12L279.629 231.434L250.077 256.153L220.854 231.434Z" fill="url(#g2)"/>
63
- <path d="M298.525 286.804C302.568 301.218 299.258 322.399 297.097 331.188L273.587 350.303L249.857 369.749L225.907 349.754L202.397 331.188C197.387 320.465 200.31 297.131 202.397 286.804L249.857 324.486L298.525 286.804Z" fill="url(#g3)"/>
64
- <path d="M249.856 313.609L203.495 275.268C203.495 263.315 211.552 247.29 215.58 240.771L249.856 267.028L284.573 240.771C291.955 248.066 296.071 266.809 297.207 275.268L249.856 313.609Z" fill="url(#g4)"/>
65
- <path d="M215.909 165.298C215.36 179.579 220.853 193.752 224.039 201.771L236.563 178.481L249.307 154.531L275.674 201.881C280.947 190.785 284.902 174.526 284.133 167.275C281.277 147.061 274.136 138.052 264.138 125.638C255.679 132.01 244.847 132.141 235.355 125.638C223.38 137.613 216.568 156.289 215.909 165.298Z" fill="url(#g5)" fill-opacity="0.7"/>
66
- <path d="M249.856 347.996L202.396 286.804L249.856 324.486L298.525 286.804L249.856 347.996Z" fill="#333941" fill-opacity="0.64"/>
67
- <path d="M249.527 292.296L215.58 240.771L249.857 267.028L284.573 240.771L249.527 292.296Z" fill="#333941" fill-opacity="0.35"/>
68
- <path d="M249.419 404.685L202.396 343.053L249.419 381.614L295.559 343.053L249.419 404.685Z" fill="#0F0F0F" fill-opacity="0.1"/>
69
- <path d="M285.482 209.139C297.06 183.136 300.205 166.929 294.24 132.4L346.304 224.989L319.38 218.541L350.314 284.253C319.826 267.918 305.852 251.479 285.482 209.139Z" fill="url(#g6)"/>
70
- <path d="M214.785 209.139C203.206 183.136 200.062 166.929 206.027 132.4L153.963 224.989L180.887 218.541L149.953 284.253C180.44 267.918 194.414 251.479 214.785 209.139Z" fill="url(#g7)"/>
71
- <path d="M458.055 281.287L306.25 134.086L375.851 242.958L344.516 235.599L359.745 289.281C390.46 298.849 431.254 294.285 458.055 281.287Z" fill="url(#g8)"/>
72
- <path d="M42.2112 281.287L194.017 134.086L124.415 242.958L155.75 235.599L140.521 289.281C109.807 298.849 69.0124 294.285 42.2112 281.287Z" fill="url(#g9)"/>
73
- <path d="M155.707 235.608C120.279 262.873 94.8569 272.188 42.5488 281.311C69.9036 294.823 110.553 298.339 140.546 289.221L155.707 235.608Z" fill="black" fill-opacity="0.16"/>
74
- <path d="M344.558 235.608C380.054 262.765 405.526 272.042 457.935 281.129C430.527 294.588 389.799 298.089 359.748 289.007L344.558 235.608Z" fill="black" fill-opacity="0.16"/>
75
- <defs>
76
- <linearGradient id="g0" x1="248.978" y1="84" x2="248.978" y2="416" gradientUnits="userSpaceOnUse"><stop stop-color="#E5E5E5"/><stop offset="1" stop-color="#272F39"/></linearGradient>
77
- <linearGradient id="g1" x1="248.978" y1="84" x2="248.978" y2="416" gradientUnits="userSpaceOnUse"><stop stop-color="#E5E5E5"/><stop offset="1" stop-color="#272F39"/></linearGradient>
78
- <linearGradient id="g2" x1="250.032" y1="171.12" x2="250.032" y2="369.749" gradientUnits="userSpaceOnUse"><stop stop-color="#D9D9D9"/><stop offset="1" stop-color="#272F39"/></linearGradient>
79
- <linearGradient id="g3" x1="250.032" y1="171.12" x2="250.032" y2="369.749" gradientUnits="userSpaceOnUse"><stop stop-color="#D9D9D9"/><stop offset="1" stop-color="#272F39"/></linearGradient>
80
- <linearGradient id="g4" x1="250.351" y1="240.771" x2="250.351" y2="313.609" gradientUnits="userSpaceOnUse"><stop stop-color="#D9D9D9"/><stop offset="1" stop-color="#272F39"/></linearGradient>
81
- <linearGradient id="g5" x1="250.05" y1="125.638" x2="250.05" y2="201.881" gradientUnits="userSpaceOnUse"><stop stop-color="#B1B1B2"/><stop offset="1" stop-color="#343B43"/></linearGradient>
82
- <linearGradient id="g6" x1="315.879" y1="132.019" x2="318.569" y2="284.812" gradientUnits="userSpaceOnUse"><stop stop-color="#D9D9D9"/><stop offset="1" stop-color="#454B54"/></linearGradient>
83
- <linearGradient id="g7" x1="184.387" y1="132.019" x2="181.698" y2="284.812" gradientUnits="userSpaceOnUse"><stop stop-color="#D9D9D9"/><stop offset="1" stop-color="#454B54"/></linearGradient>
84
- <linearGradient id="g8" x1="380.834" y1="132.773" x2="383.683" y2="294.632" gradientUnits="userSpaceOnUse"><stop stop-color="#D9D9D9"/><stop offset="1" stop-color="#4A5159"/></linearGradient>
85
- <linearGradient id="g9" x1="119.433" y1="132.773" x2="116.583" y2="294.632" gradientUnits="userSpaceOnUse"><stop stop-color="#D9D9D9"/><stop offset="1" stop-color="#4A5159"/></linearGradient>
86
- </defs>
87
- </svg>
88
- </div>
89
- <h3>IronBee CLI connected to the IronBee platform successfully.</h3>
90
- <p>You can close this tab.</p>
91
- </div>
92
- </body>
93
- </html>