@wjarka/cezarion 0.14.9-dev.842 → 0.14.9-dev.878

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 (66) hide show
  1. package/README.md +8 -0
  2. package/dist/ci-wait/controller.d.ts +12 -12
  3. package/dist/core/claude-cli-runner.js +1 -1
  4. package/dist/core/claude-cli-runner.js.map +1 -1
  5. package/dist/core/cursor-acp-runner.d.ts +2 -0
  6. package/dist/core/cursor-acp-runner.js +116 -26
  7. package/dist/core/cursor-acp-runner.js.map +1 -1
  8. package/dist/core/cursor-provider-error.d.ts +3 -0
  9. package/dist/core/cursor-provider-error.js +13 -3
  10. package/dist/core/cursor-provider-error.js.map +1 -1
  11. package/dist/core/opencode-server-runner.js +12 -5
  12. package/dist/core/opencode-server-runner.js.map +1 -1
  13. package/dist/core/pi-runner.js +17 -4
  14. package/dist/core/pi-runner.js.map +1 -1
  15. package/dist/delegation/results.js +10 -6
  16. package/dist/delegation/results.js.map +1 -1
  17. package/dist/delegation/transport.d.ts +50 -50
  18. package/dist/git-worktree.d.ts +3 -1
  19. package/dist/git-worktree.js +26 -4
  20. package/dist/git-worktree.js.map +1 -1
  21. package/dist/runs/retention.d.ts +7 -2
  22. package/dist/runs/retention.js +39 -7
  23. package/dist/runs/retention.js.map +1 -1
  24. package/dist/runs/store.js +1 -1
  25. package/dist/runs/store.js.map +1 -1
  26. package/dist/server/server.d.ts +1211 -1211
  27. package/dist/server/server.js +5 -2
  28. package/dist/server/server.js.map +1 -1
  29. package/dist/task-cli/cli.js +36 -2
  30. package/dist/task-cli/cli.js.map +1 -1
  31. package/dist/workflows/run.d.ts +8 -0
  32. package/dist/workflows/run.js +80 -13
  33. package/dist/workflows/run.js.map +1 -1
  34. package/package.json +3 -3
  35. package/scripts/mock-cursor-acp.mjs +17 -3
  36. package/scripts/mock-cursor-hang-stdin.mjs +16 -0
  37. package/scripts/mock-pi-rpc.mjs +15 -4
  38. package/web/dist/assets/{agent-accounts-JPfZPgKn.js → agent-accounts-tNk0wiKj.js} +1 -1
  39. package/web/dist/assets/centered-state-DXxIJA15.js +43 -0
  40. package/web/dist/assets/{collapsible-CTymFdL7.js → collapsible-D3Lh_nlG.js} +1 -1
  41. package/web/dist/assets/{commit-list-BZpYGQl2.js → commit-list-CgoIXaVd.js} +1 -1
  42. package/web/dist/assets/{compare-variants-9VkybaQ7.js → compare-variants-2AnPP6ez.js} +1 -1
  43. package/web/dist/assets/{diff-controls-CpcHG3Mm.js → diff-controls-BCazakYu.js} +1 -1
  44. package/web/dist/assets/{dropdown-menu-_YAzCaoQ.js → dropdown-menu-CyFz8H2A.js} +1 -1
  45. package/web/dist/assets/{git-toolbar-BvKDz6uS.js → git-toolbar-DT4Q02mZ.js} +1 -1
  46. package/web/dist/assets/{github-CgjJCGrD.js → github-vwoJvCTz.js} +1 -1
  47. package/web/dist/assets/{index-BJtve0Pm.js → index-1YNk4P3I.js} +4 -4
  48. package/web/dist/assets/{markdown-CFWZnvMh.js → markdown-0VE-LMFx.js} +1 -1
  49. package/web/dist/assets/{pill-QfwkuR50.js → pill-BU5y1CTd.js} +1 -1
  50. package/web/dist/assets/{project-router-CkAA39N5.js → project-router-EEnXzYjj.js} +1 -1
  51. package/web/dist/assets/{prompt-templates-Cfna_S0T.js → prompt-templates-D8lCwJds.js} +1 -1
  52. package/web/dist/assets/{repo-git-DgzgJ0cP.js → repo-git-CYDGngEk.js} +1 -1
  53. package/web/dist/assets/{run-diff-YbCEQn5I.js → run-diff-C-Ij6Y04.js} +1 -1
  54. package/web/dist/assets/{run-header-DMgIbr1d.js → run-header-DYiqx0qE.js} +1 -1
  55. package/web/dist/assets/{skills-BW79kUTd.js → skills-CH6TkMy9.js} +1 -1
  56. package/web/dist/assets/{tab-link-MIHvczEm.js → tab-link-CQc65wEy.js} +1 -1
  57. package/web/dist/assets/{task-changes-C96ekt94.js → task-changes-CEi-l2GZ.js} +1 -1
  58. package/web/dist/assets/{task-commits-DBfcMZyG.js → task-commits-BYdWmsx1.js} +1 -1
  59. package/web/dist/assets/{task-files-BKpH8dKQ.js → task-files-DHUEF1Fh.js} +1 -1
  60. package/web/dist/assets/{task-thread-Dnq7Ek6W.js → task-thread-DAxvkDvr.js} +2 -2
  61. package/web/dist/assets/{textarea-D2vAVgYW.js → textarea-BOXhPgVD.js} +1 -1
  62. package/web/dist/assets/{thread-loading-NW8Mthco.js → thread-loading-D9dDLmql.js} +1 -1
  63. package/web/dist/assets/{token-metrics-D188e6_0.js → token-metrics-DJeOZ5n-.js} +1 -1
  64. package/web/dist/assets/{workflows-BFY1hgp3.js → workflows-CpHaJbUe.js} +1 -1
  65. package/web/dist/index.html +11 -11
  66. package/web/dist/assets/centered-state-HwCqQkH3.js +0 -43
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wjarka/cezarion",
3
- "version": "0.14.9-dev.842",
3
+ "version": "0.14.9-dev.878",
4
4
  "description": "Local cockpit for running and tracking AI agent tasks in your repo. Uses your logged-in `claude` CLI and `gh` — zero config, zero database.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -51,8 +51,8 @@
51
51
  "zod": "^4.4.3"
52
52
  },
53
53
  "devDependencies": {
54
- "@open-mercato/cezar-api-client": "0.14.9-dev.842",
55
- "@open-mercato/cezar-contract": "0.14.9-dev.842",
54
+ "@open-mercato/cezar-api-client": "0.14.9-dev.878",
55
+ "@open-mercato/cezar-contract": "0.14.9-dev.878",
56
56
  "@types/node": "^20.14.0",
57
57
  "@types/ws": "^8.18.1",
58
58
  "esbuild": "^0.28.1",
@@ -1,9 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  // Offline Cursor ACP wire. Shapes: cursor.com/docs/cli/acp; ACP v1 schema.
3
3
  import { createInterface } from 'node:readline';
4
- import { appendFileSync } from 'node:fs';
4
+ import { appendFileSync, readFileSync, writeFileSync } from 'node:fs';
5
5
  const record = (file, value) => { if (file) appendFileSync(file, `${JSON.stringify(value, (key, value) => key === 'env' && Array.isArray(value) ? value.map(item => item.name?.startsWith('CEZ_TOOL_') ? { ...item, value: '[redacted]' } : item) : value)}\n`); };
6
6
  record(process.env.CEZ_MOCK_ARGS_FILE, process.argv.slice(2));
7
+ /** #529: remaining-count file. Each session/new or session/load decrements; at >0 the process writes stderr and exits 1 before the reply. */
8
+ function consumeBootstrapCrash() {
9
+ const file = process.env.CEZ_MOCK_CURSOR_CRASH_ON_LOAD;
10
+ if (!file) return;
11
+ let remaining = 0;
12
+ try { remaining = Number(readFileSync(file, 'utf8')); } catch { return; }
13
+ if (!Number.isFinite(remaining) || remaining <= 0) return;
14
+ writeFileSync(file, String(remaining - 1));
15
+ process.stderr.write(`${process.env.CEZ_MOCK_CURSOR_CRASH_STDERR ?? 'Cursor ACP mock bootstrap crash'}\n`);
16
+ process.exit(1);
17
+ }
7
18
  const emit = value => process.stdout.write(`${JSON.stringify({ jsonrpc: '2.0', ...value })}\n`);
8
19
  const reply = (id, result) => emit({ id, result });
9
20
  let sessionId = 'cursor-offline-session';
@@ -36,6 +47,9 @@ async function prompt(id, content) {
36
47
  // bare 'mock:provider-error' prefix, which every one of them contains.
37
48
  // #508: observed Cursor 2026.09.18-9a7762b error envelope, followed by end_turn.
38
49
  if (input.includes('mock:provider-error-protocol') && (input.includes('-exhaust') || prompts === 1)) { text('\n\nError: RetriableError: [invalid_argument] protocol error: missing EndStreamResponse'); complete(id); return; }
50
+ // #528: observed Cursor SSL record-layer envelope (run 4bcd5420 seq 2667). Matched
51
+ // before the bare mock:provider-error prefix, same pattern as protocol.
52
+ if (input.includes('mock:provider-error-ssl') && (input.includes('-exhaust') || prompts === 1)) { text('\n\nError: RetriableError: [internal] C0AC9346CC7B0000:error:0A000119:SSL routines:tls_get_more_records:decryption failed or bad record mac:../deps/openssl/openssl/ssl/record/methods/tls_common.c:869:'); complete(id); return; }
39
53
  // #531: observed run 2f891027 seq 2005 capacity envelope. Match before the bare prefix.
40
54
  // Do not reuse the protocol mock's `includes('-exhaust')` check: that token is a
41
55
  // substring of `resource-exhausted` and would never recover.
@@ -97,8 +111,8 @@ createInterface({ input: process.stdin }).on('line', async line => {
97
111
  switch (msg.method) {
98
112
  case 'initialize': reply(msg.id, { protocolVersion: 1, agentCapabilities: { loadSession: true, promptCapabilities: { image: true } } }); break;
99
113
  case 'cursor/list_available_models': reply(msg.id, { models: [{ value: model, name: model, configOptions: configOptions().filter(option => option.id !== 'model') }] }); break;
100
- case 'session/new': reply(msg.id, { sessionId, ...configuration() }); break;
101
- case 'session/load': sessionId = msg.params.sessionId; reply(msg.id, configuration()); break;
114
+ case 'session/new': consumeBootstrapCrash(); reply(msg.id, { sessionId, ...configuration() }); break;
115
+ case 'session/load': consumeBootstrapCrash(); sessionId = msg.params.sessionId; reply(msg.id, configuration()); break;
102
116
  case 'session/set_model': model = msg.params.modelId; reply(msg.id, {}); break;
103
117
  case 'session/set_config_option':
104
118
  if (msg.params.configId === 'model') model = msg.params.value;
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ // #529 review: initialize, then close stdin and stay alive so bootstrap cannot hang.
3
+ import { createInterface } from 'node:readline';
4
+ import { closeSync } from 'node:fs';
5
+ const emit = value => process.stdout.write(`${JSON.stringify({ jsonrpc: '2.0', ...value })}\n`);
6
+ createInterface({ input: process.stdin }).on('line', line => {
7
+ let msg; try { msg = JSON.parse(line); } catch { return; }
8
+ if (msg.method === 'initialize') {
9
+ // Close before replying: a fast parent sends session/new as soon as it
10
+ // reads initialize, and that write must encounter the dead input pipe.
11
+ try { closeSync(0); } catch { /* already closed */ }
12
+ emit({ id: msg.id, result: { protocolVersion: 1, agentCapabilities: { loadSession: true } } });
13
+ }
14
+ });
15
+ process.on('SIGTERM', () => { /* ignore — review: SIGTERM-only abort must not hang */ });
16
+ setInterval(() => {}, 1e6);
@@ -13,6 +13,9 @@ const write = (value) => process.stdout.write(`${JSON.stringify(value)}\n`);
13
13
  // turn. Steers accepted by a scripted turn are read just before it settles: a user
14
14
  // message_start/end, then an echo, unless the turn is `late` (never read).
15
15
  let activeTurn = null;
16
+ // Pi 0.87 defaults steeringMode to one-at-a-time (#551). Cezar's runner must
17
+ // send set_steering_mode all for a burst to reach the same next step.
18
+ let steeringMode = 'one-at-a-time';
16
19
  // The prompt a queued handler is running; pi records it as the turn's user message.
17
20
  let currentPrompt;
18
21
  const send = (value) => {
@@ -29,15 +32,17 @@ const send = (value) => {
29
32
  }
30
33
  if (value?.type === 'agent_settled' && activeTurn) {
31
34
  const turn = activeTurn; activeTurn = null;
32
- if (!turn.late) for (const text of turn.steers) {
35
+ const deliverNow = turn.late ? [] : (steeringMode === 'all' ? turn.steers : turn.steers.slice(0, 1));
36
+ const defer = turn.late ? turn.steers : (steeringMode === 'all' ? [] : turn.steers.slice(1));
37
+ for (const text of deliverNow) {
33
38
  write({ type: 'message_start', message: { role: 'user', content: [{ type: 'text', text }] } });
34
39
  write({ type: 'message_end', message: { role: 'user', content: [{ type: 'text', text }] } });
35
40
  sendText([text]);
36
41
  write({ type: 'message_end', message: { role: 'assistant', usage: { input: 1, output: 1, cacheRead: 0, cacheWrite: 0, cost: { total: 0 } } } });
37
42
  }
38
43
  write(value);
39
- // A steer that arrived after the final model call runs as the next prompt.
40
- if (turn.late) for (const text of turn.steers) queue = queue.then(() => { currentPrompt = text; return handle({ type: 'prompt', message: text }); });
44
+ // one-at-a-time leftover, or a late steer, runs as the next prompt.
45
+ for (const text of defer) queue = queue.then(() => { currentPrompt = text; return handle({ type: 'prompt', message: text }); });
41
46
  return;
42
47
  }
43
48
  write(value);
@@ -101,7 +106,7 @@ async function handle(command) {
101
106
  thinkingLevel: 'medium',
102
107
  isStreaming: false,
103
108
  isCompacting: false,
104
- steeringMode: 'all',
109
+ steeringMode,
105
110
  followUpMode: 'one-at-a-time',
106
111
  autoCompactionEnabled: true,
107
112
  messageCount: 0,
@@ -306,6 +311,12 @@ async function handle(command) {
306
311
  });
307
312
  }, 250);
308
313
  }
314
+ } else if (command.type === 'set_steering_mode') {
315
+ if (command.mode === 'all' || command.mode === 'one-at-a-time') steeringMode = command.mode;
316
+ if (process.env.CEZ_MOCK_STDIN_FILE) {
317
+ try { appendFileSync(process.env.CEZ_MOCK_STDIN_FILE, `${JSON.stringify({ type: 'set_steering_mode', mode: command.mode })}\n`); } catch { /* best effort */ }
318
+ }
319
+ send({ ...(command.id ? { id: command.id } : {}), type: 'response', command: 'set_steering_mode', success: true });
309
320
  } else if (command.type === 'abort') {
310
321
  send({ type: 'response', command: 'abort', success: true });
311
322
  }
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./react-runtime-CCIEwYL0.js";import{C as r,D as i,I as a,M as o,N as s,O as c,S as l,T as u,Zn as d,b as f,j as p,k as m,un as h,w as g,x as _,z as v}from"./centered-state-HwCqQkH3.js";import{t as y}from"./utils-DKheTxGD.js";import{_ as b,g as ee,h as x,m as te,p as S}from"./dropdown-menu-_YAzCaoQ.js";var C=e(t(),1),w=n(),T=`Popover`,[E,ne]=o(T,[b]),D=b(),[O,k]=E(T),A=e=>{let{__scopePopover:t,children:n,open:r,defaultOpen:a,onOpenChange:o,modal:s=!1}=e,c=D(t),l=C.useRef(null),[u,d]=C.useState(!1),[f,p]=m({prop:r,defaultProp:a??!1,onChange:o,caller:T});return(0,w.jsx)(ee,{...c,children:(0,w.jsx)(O,{scope:t,contentId:i(),triggerRef:l,open:f,onOpenChange:p,onOpenToggle:C.useCallback(()=>p(e=>!e),[p]),hasCustomAnchor:u,onCustomAnchorAdd:C.useCallback(()=>d(!0),[]),onCustomAnchorRemove:C.useCallback(()=>d(!1),[]),modal:s,children:n})})};A.displayName=T;var j=`PopoverAnchor`,M=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=k(j,n),a=D(n),{onCustomAnchorAdd:o,onCustomAnchorRemove:s}=i;return C.useEffect(()=>(o(),()=>s()),[o,s]),(0,w.jsx)(S,{...a,...r,ref:t})});M.displayName=j;var N=`PopoverTrigger`,P=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=k(N,n),a=D(n),o=v(t,i.triggerRef),c=(0,w.jsx)(s.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":Y(i.open),...r,ref:o,onClick:p(e.onClick,i.onOpenToggle)});return i.hasCustomAnchor?c:(0,w.jsx)(S,{asChild:!0,...a,children:c})});P.displayName=N;var F=`PopoverPortal`,[I,L]=E(F,{forceMount:void 0}),R=e=>{let{__scopePopover:t,forceMount:n,children:i,container:a}=e,o=k(F,t);return(0,w.jsx)(I,{scope:t,forceMount:n,children:(0,w.jsx)(c,{present:n||o.open,children:(0,w.jsx)(r,{asChild:!0,container:a,children:i})})})};R.displayName=F;var z=`PopoverContent`,B=C.forwardRef((e,t)=>{let n=L(z,e.__scopePopover),{forceMount:r=n.forceMount,...i}=e,a=k(z,e.__scopePopover);return(0,w.jsx)(c,{present:r||a.open,children:a.modal?(0,w.jsx)(H,{...i,ref:t}):(0,w.jsx)(U,{...i,ref:t})})});B.displayName=z;var V=a(`PopoverContent.RemoveScroll`),H=C.forwardRef((e,t)=>{let n=k(z,e.__scopePopover),r=C.useRef(null),i=v(t,r),a=C.useRef(!1);return C.useEffect(()=>{let e=r.current;if(e)return f(e)},[]),(0,w.jsx)(_,{as:V,allowPinchZoom:!0,children:(0,w.jsx)(W,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:p(e.onCloseAutoFocus,e=>{e.preventDefault(),a.current||n.triggerRef.current?.focus()}),onPointerDownOutside:p(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;a.current=r},{checkForDefaultPrevented:!1}),onFocusOutside:p(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})}),U=C.forwardRef((e,t)=>{let n=k(z,e.__scopePopover),r=C.useRef(!1),i=C.useRef(!1);return(0,w.jsx)(W,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),W=C.forwardRef((e,t)=>{let{__scopePopover:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,disableOutsidePointerEvents:o,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:d,onInteractOutside:f,...p}=e,m=k(z,n),h=D(n);return l(),(0,w.jsx)(g,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,w.jsx)(u,{asChild:!0,disableOutsidePointerEvents:o,onInteractOutside:f,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:d,onDismiss:()=>m.onOpenChange(!1),deferPointerDownOutside:!0,children:(0,w.jsx)(x,{"data-state":Y(m.open),role:`dialog`,id:m.contentId,...h,...p,ref:t,style:{...p.style,"--radix-popover-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-popover-content-available-width":`var(--radix-popper-available-width)`,"--radix-popover-content-available-height":`var(--radix-popper-available-height)`,"--radix-popover-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-popover-trigger-height":`var(--radix-popper-anchor-height)`}})})})}),G=`PopoverClose`,K=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=k(G,n);return(0,w.jsx)(s.button,{type:`button`,...r,ref:t,onClick:p(e.onClick,()=>i.onOpenChange(!1))})});K.displayName=G;var q=`PopoverArrow`,J=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=D(n);return(0,w.jsx)(te,{...i,...r,ref:t})});J.displayName=q;function Y(e){return e?`open`:`closed`}var X=A,Z=M,re=P,ie=R,ae=B;function Q(e){let t=e.visualViewport;return t?Math.max(0,Math.round(e.innerHeight-t.height-t.offsetTop)):0}function oe(e,t,n,r=250){let i=e.visualViewport;if(!i)return t(0),()=>{};let a,o=()=>{let i=Q(e);t(i),n&&(clearTimeout(a),a=setTimeout(()=>n(i),r))};return t(Q(e)),i.addEventListener(`resize`,o),i.addEventListener(`scroll`,o),()=>{clearTimeout(a),i.removeEventListener(`resize`,o),i.removeEventListener(`scroll`,o),t(0)}}function se(e){let t=e.visualViewport;return t?{top:Math.max(0,Math.round(t.offsetTop)),bottom:Q(e)}:{top:0,bottom:0}}function ce(e,t=0){let n=typeof t==`number`?{top:t,right:t,bottom:t,left:t}:t;return{top:(n.top??0)+e.top,right:n.right??0,bottom:(n.bottom??0)+e.bottom,left:n.left??0}}function le(e,t){let n=e.visualViewport;if(!n)return t({top:0,bottom:0}),()=>{};let r=()=>t(se(e));return r(),n.addEventListener(`resize`,r),n.addEventListener(`scroll`,r),()=>{n.removeEventListener(`resize`,r),n.removeEventListener(`scroll`,r)}}function ue(){let[e,t]=(0,C.useState)({top:0,bottom:0});return(0,C.useEffect)(()=>le(window,e=>t(t=>t.top===e.top&&t.bottom===e.bottom?t:e)),[]),e}function de(e){let t=(0,C.useRef)(e);t.current=e,(0,C.useEffect)(()=>{let e=document.documentElement;return oe(window,t=>e.style.setProperty(`--kb`,`${t}px`),e=>t.current?.(e))},[])}var $=C.createContext(null);function fe({...e}){let t=C.useRef(!1);return(0,w.jsx)($,{value:t,children:(0,w.jsx)(X,{"data-slot":`popover`,...e})})}function pe({onPointerDownCapture:e,onKeyDownCapture:t,...n}){let r=C.useContext($);return(0,w.jsx)(re,{"data-slot":`popover-trigger`,...n,onPointerDownCapture:t=>{r&&(r.current=t.pointerType===`touch`),e?.(t)},onKeyDownCapture:e=>{r&&(r.current=!1),t?.(e)}})}function me({className:e,align:t=`center`,sideOffset:n=4,collisionPadding:r,onOpenAutoFocus:i,...a}){let o=ue(),s=C.useContext($);return(0,w.jsx)(ie,{children:(0,w.jsx)(ae,{"data-slot":`popover-content`,align:t,sideOffset:n,onOpenAutoFocus:e=>{let t=s?.current;if(s&&(s.current=!1),i?.(e),e.defaultPrevented||!t)return;let n=e.target;n instanceof HTMLElement&&n.querySelector(`[cmdk-input]`)&&(e.preventDefault(),n.focus({preventScroll:!0}))},collisionPadding:ce(o,r),className:y(`z-50 w-72 max-w-(--radix-popover-content-available-width) [overflow-wrap:anywhere] origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...a})})}function he({...e}){return(0,w.jsx)(Z,{"data-slot":`popover-anchor`,...e})}function ge(){let e=h(),t=d(),n=(e.data?.profiles??[]).map(e=>({provider:e.provider,id:e.id,label:e.label,configDir:e.configDir})),r=t.data?.info?.root;return{accounts:n,repoAccount:r?e.data?.selections?.[r]:void 0}}function _e(e,t){return e.filter(e=>e.provider===t).length>1}export{me as a,he as i,ge as n,pe as o,fe as r,de as s,_e as t};
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./react-runtime-CCIEwYL0.js";import{C as r,D as i,I as a,M as o,N as s,O as c,S as l,T as u,Zn as d,b as f,j as p,k as m,un as h,w as g,x as _,z as v}from"./centered-state-DXxIJA15.js";import{t as y}from"./utils-DKheTxGD.js";import{_ as b,g as ee,h as x,m as te,p as S}from"./dropdown-menu-CyFz8H2A.js";var C=e(t(),1),w=n(),T=`Popover`,[E,ne]=o(T,[b]),D=b(),[O,k]=E(T),A=e=>{let{__scopePopover:t,children:n,open:r,defaultOpen:a,onOpenChange:o,modal:s=!1}=e,c=D(t),l=C.useRef(null),[u,d]=C.useState(!1),[f,p]=m({prop:r,defaultProp:a??!1,onChange:o,caller:T});return(0,w.jsx)(ee,{...c,children:(0,w.jsx)(O,{scope:t,contentId:i(),triggerRef:l,open:f,onOpenChange:p,onOpenToggle:C.useCallback(()=>p(e=>!e),[p]),hasCustomAnchor:u,onCustomAnchorAdd:C.useCallback(()=>d(!0),[]),onCustomAnchorRemove:C.useCallback(()=>d(!1),[]),modal:s,children:n})})};A.displayName=T;var j=`PopoverAnchor`,M=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=k(j,n),a=D(n),{onCustomAnchorAdd:o,onCustomAnchorRemove:s}=i;return C.useEffect(()=>(o(),()=>s()),[o,s]),(0,w.jsx)(S,{...a,...r,ref:t})});M.displayName=j;var N=`PopoverTrigger`,P=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=k(N,n),a=D(n),o=v(t,i.triggerRef),c=(0,w.jsx)(s.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":Y(i.open),...r,ref:o,onClick:p(e.onClick,i.onOpenToggle)});return i.hasCustomAnchor?c:(0,w.jsx)(S,{asChild:!0,...a,children:c})});P.displayName=N;var F=`PopoverPortal`,[I,L]=E(F,{forceMount:void 0}),R=e=>{let{__scopePopover:t,forceMount:n,children:i,container:a}=e,o=k(F,t);return(0,w.jsx)(I,{scope:t,forceMount:n,children:(0,w.jsx)(c,{present:n||o.open,children:(0,w.jsx)(r,{asChild:!0,container:a,children:i})})})};R.displayName=F;var z=`PopoverContent`,B=C.forwardRef((e,t)=>{let n=L(z,e.__scopePopover),{forceMount:r=n.forceMount,...i}=e,a=k(z,e.__scopePopover);return(0,w.jsx)(c,{present:r||a.open,children:a.modal?(0,w.jsx)(H,{...i,ref:t}):(0,w.jsx)(U,{...i,ref:t})})});B.displayName=z;var V=a(`PopoverContent.RemoveScroll`),H=C.forwardRef((e,t)=>{let n=k(z,e.__scopePopover),r=C.useRef(null),i=v(t,r),a=C.useRef(!1);return C.useEffect(()=>{let e=r.current;if(e)return f(e)},[]),(0,w.jsx)(_,{as:V,allowPinchZoom:!0,children:(0,w.jsx)(W,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:p(e.onCloseAutoFocus,e=>{e.preventDefault(),a.current||n.triggerRef.current?.focus()}),onPointerDownOutside:p(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;a.current=r},{checkForDefaultPrevented:!1}),onFocusOutside:p(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})}),U=C.forwardRef((e,t)=>{let n=k(z,e.__scopePopover),r=C.useRef(!1),i=C.useRef(!1);return(0,w.jsx)(W,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),W=C.forwardRef((e,t)=>{let{__scopePopover:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,disableOutsidePointerEvents:o,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:d,onInteractOutside:f,...p}=e,m=k(z,n),h=D(n);return l(),(0,w.jsx)(g,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,w.jsx)(u,{asChild:!0,disableOutsidePointerEvents:o,onInteractOutside:f,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:d,onDismiss:()=>m.onOpenChange(!1),deferPointerDownOutside:!0,children:(0,w.jsx)(x,{"data-state":Y(m.open),role:`dialog`,id:m.contentId,...h,...p,ref:t,style:{...p.style,"--radix-popover-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-popover-content-available-width":`var(--radix-popper-available-width)`,"--radix-popover-content-available-height":`var(--radix-popper-available-height)`,"--radix-popover-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-popover-trigger-height":`var(--radix-popper-anchor-height)`}})})})}),G=`PopoverClose`,K=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=k(G,n);return(0,w.jsx)(s.button,{type:`button`,...r,ref:t,onClick:p(e.onClick,()=>i.onOpenChange(!1))})});K.displayName=G;var q=`PopoverArrow`,J=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=D(n);return(0,w.jsx)(te,{...i,...r,ref:t})});J.displayName=q;function Y(e){return e?`open`:`closed`}var X=A,Z=M,re=P,ie=R,ae=B;function Q(e){let t=e.visualViewport;return t?Math.max(0,Math.round(e.innerHeight-t.height-t.offsetTop)):0}function oe(e,t,n,r=250){let i=e.visualViewport;if(!i)return t(0),()=>{};let a,o=()=>{let i=Q(e);t(i),n&&(clearTimeout(a),a=setTimeout(()=>n(i),r))};return t(Q(e)),i.addEventListener(`resize`,o),i.addEventListener(`scroll`,o),()=>{clearTimeout(a),i.removeEventListener(`resize`,o),i.removeEventListener(`scroll`,o),t(0)}}function se(e){let t=e.visualViewport;return t?{top:Math.max(0,Math.round(t.offsetTop)),bottom:Q(e)}:{top:0,bottom:0}}function ce(e,t=0){let n=typeof t==`number`?{top:t,right:t,bottom:t,left:t}:t;return{top:(n.top??0)+e.top,right:n.right??0,bottom:(n.bottom??0)+e.bottom,left:n.left??0}}function le(e,t){let n=e.visualViewport;if(!n)return t({top:0,bottom:0}),()=>{};let r=()=>t(se(e));return r(),n.addEventListener(`resize`,r),n.addEventListener(`scroll`,r),()=>{n.removeEventListener(`resize`,r),n.removeEventListener(`scroll`,r)}}function ue(){let[e,t]=(0,C.useState)({top:0,bottom:0});return(0,C.useEffect)(()=>le(window,e=>t(t=>t.top===e.top&&t.bottom===e.bottom?t:e)),[]),e}function de(e){let t=(0,C.useRef)(e);t.current=e,(0,C.useEffect)(()=>{let e=document.documentElement;return oe(window,t=>e.style.setProperty(`--kb`,`${t}px`),e=>t.current?.(e))},[])}var $=C.createContext(null);function fe({...e}){let t=C.useRef(!1);return(0,w.jsx)($,{value:t,children:(0,w.jsx)(X,{"data-slot":`popover`,...e})})}function pe({onPointerDownCapture:e,onKeyDownCapture:t,...n}){let r=C.useContext($);return(0,w.jsx)(re,{"data-slot":`popover-trigger`,...n,onPointerDownCapture:t=>{r&&(r.current=t.pointerType===`touch`),e?.(t)},onKeyDownCapture:e=>{r&&(r.current=!1),t?.(e)}})}function me({className:e,align:t=`center`,sideOffset:n=4,collisionPadding:r,onOpenAutoFocus:i,...a}){let o=ue(),s=C.useContext($);return(0,w.jsx)(ie,{children:(0,w.jsx)(ae,{"data-slot":`popover-content`,align:t,sideOffset:n,onOpenAutoFocus:e=>{let t=s?.current;if(s&&(s.current=!1),i?.(e),e.defaultPrevented||!t)return;let n=e.target;n instanceof HTMLElement&&n.querySelector(`[cmdk-input]`)&&(e.preventDefault(),n.focus({preventScroll:!0}))},collisionPadding:ce(o,r),className:y(`z-50 w-72 max-w-(--radix-popover-content-available-width) [overflow-wrap:anywhere] origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...a})})}function he({...e}){return(0,w.jsx)(Z,{"data-slot":`popover-anchor`,...e})}function ge(){let e=h(),t=d(),n=(e.data?.profiles??[]).map(e=>({provider:e.provider,id:e.id,label:e.label,configDir:e.configDir})),r=t.data?.info?.root;return{accounts:n,repoAccount:r?e.data?.selections?.[r]:void 0}}function _e(e,t){return e.filter(e=>e.provider===t).length>1}export{me as a,he as i,ge as n,pe as o,fe as r,de as s,_e as t};