@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.
- package/README.md +8 -0
- package/dist/ci-wait/controller.d.ts +12 -12
- package/dist/core/claude-cli-runner.js +1 -1
- package/dist/core/claude-cli-runner.js.map +1 -1
- package/dist/core/cursor-acp-runner.d.ts +2 -0
- package/dist/core/cursor-acp-runner.js +116 -26
- package/dist/core/cursor-acp-runner.js.map +1 -1
- package/dist/core/cursor-provider-error.d.ts +3 -0
- package/dist/core/cursor-provider-error.js +13 -3
- package/dist/core/cursor-provider-error.js.map +1 -1
- package/dist/core/opencode-server-runner.js +12 -5
- package/dist/core/opencode-server-runner.js.map +1 -1
- package/dist/core/pi-runner.js +17 -4
- package/dist/core/pi-runner.js.map +1 -1
- package/dist/delegation/results.js +10 -6
- package/dist/delegation/results.js.map +1 -1
- package/dist/delegation/transport.d.ts +50 -50
- package/dist/git-worktree.d.ts +3 -1
- package/dist/git-worktree.js +26 -4
- package/dist/git-worktree.js.map +1 -1
- package/dist/runs/retention.d.ts +7 -2
- package/dist/runs/retention.js +39 -7
- package/dist/runs/retention.js.map +1 -1
- package/dist/runs/store.js +1 -1
- package/dist/runs/store.js.map +1 -1
- package/dist/server/server.d.ts +1211 -1211
- package/dist/server/server.js +5 -2
- package/dist/server/server.js.map +1 -1
- package/dist/task-cli/cli.js +36 -2
- package/dist/task-cli/cli.js.map +1 -1
- package/dist/workflows/run.d.ts +8 -0
- package/dist/workflows/run.js +80 -13
- package/dist/workflows/run.js.map +1 -1
- package/package.json +3 -3
- package/scripts/mock-cursor-acp.mjs +17 -3
- package/scripts/mock-cursor-hang-stdin.mjs +16 -0
- package/scripts/mock-pi-rpc.mjs +15 -4
- package/web/dist/assets/{agent-accounts-JPfZPgKn.js → agent-accounts-tNk0wiKj.js} +1 -1
- package/web/dist/assets/centered-state-DXxIJA15.js +43 -0
- package/web/dist/assets/{collapsible-CTymFdL7.js → collapsible-D3Lh_nlG.js} +1 -1
- package/web/dist/assets/{commit-list-BZpYGQl2.js → commit-list-CgoIXaVd.js} +1 -1
- package/web/dist/assets/{compare-variants-9VkybaQ7.js → compare-variants-2AnPP6ez.js} +1 -1
- package/web/dist/assets/{diff-controls-CpcHG3Mm.js → diff-controls-BCazakYu.js} +1 -1
- package/web/dist/assets/{dropdown-menu-_YAzCaoQ.js → dropdown-menu-CyFz8H2A.js} +1 -1
- package/web/dist/assets/{git-toolbar-BvKDz6uS.js → git-toolbar-DT4Q02mZ.js} +1 -1
- package/web/dist/assets/{github-CgjJCGrD.js → github-vwoJvCTz.js} +1 -1
- package/web/dist/assets/{index-BJtve0Pm.js → index-1YNk4P3I.js} +4 -4
- package/web/dist/assets/{markdown-CFWZnvMh.js → markdown-0VE-LMFx.js} +1 -1
- package/web/dist/assets/{pill-QfwkuR50.js → pill-BU5y1CTd.js} +1 -1
- package/web/dist/assets/{project-router-CkAA39N5.js → project-router-EEnXzYjj.js} +1 -1
- package/web/dist/assets/{prompt-templates-Cfna_S0T.js → prompt-templates-D8lCwJds.js} +1 -1
- package/web/dist/assets/{repo-git-DgzgJ0cP.js → repo-git-CYDGngEk.js} +1 -1
- package/web/dist/assets/{run-diff-YbCEQn5I.js → run-diff-C-Ij6Y04.js} +1 -1
- package/web/dist/assets/{run-header-DMgIbr1d.js → run-header-DYiqx0qE.js} +1 -1
- package/web/dist/assets/{skills-BW79kUTd.js → skills-CH6TkMy9.js} +1 -1
- package/web/dist/assets/{tab-link-MIHvczEm.js → tab-link-CQc65wEy.js} +1 -1
- package/web/dist/assets/{task-changes-C96ekt94.js → task-changes-CEi-l2GZ.js} +1 -1
- package/web/dist/assets/{task-commits-DBfcMZyG.js → task-commits-BYdWmsx1.js} +1 -1
- package/web/dist/assets/{task-files-BKpH8dKQ.js → task-files-DHUEF1Fh.js} +1 -1
- package/web/dist/assets/{task-thread-Dnq7Ek6W.js → task-thread-DAxvkDvr.js} +2 -2
- package/web/dist/assets/{textarea-D2vAVgYW.js → textarea-BOXhPgVD.js} +1 -1
- package/web/dist/assets/{thread-loading-NW8Mthco.js → thread-loading-D9dDLmql.js} +1 -1
- package/web/dist/assets/{token-metrics-D188e6_0.js → token-metrics-DJeOZ5n-.js} +1 -1
- package/web/dist/assets/{workflows-BFY1hgp3.js → workflows-CpHaJbUe.js} +1 -1
- package/web/dist/index.html +11 -11
- 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.
|
|
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.
|
|
55
|
-
"@open-mercato/cezar-contract": "0.14.9-dev.
|
|
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);
|
package/scripts/mock-pi-rpc.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
//
|
|
40
|
-
|
|
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
|
|
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-
|
|
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};
|