@wjarka/cezarion 0.14.2 → 0.14.3-pr425.663

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 (64) hide show
  1. package/README.md +26 -2
  2. package/dist/contract/delegation.d.ts +9 -0
  3. package/dist/contract/index.js +4 -2
  4. package/dist/contract/runs.d.ts +18 -0
  5. package/dist/core/cursor-acp-runner.js +13 -0
  6. package/dist/core/cursor-acp-runner.js.map +1 -1
  7. package/dist/runs/agent-tmpdir.d.ts +44 -4
  8. package/dist/runs/agent-tmpdir.js +209 -31
  9. package/dist/runs/agent-tmpdir.js.map +1 -1
  10. package/dist/server/server.d.ts +5 -0
  11. package/dist/workflows/run.d.ts +4 -0
  12. package/dist/workflows/run.js +8 -1
  13. package/dist/workflows/run.js.map +1 -1
  14. package/package.json +3 -3
  15. package/scripts/mock-cursor-acp.mjs +15 -3
  16. package/web/dist/assets/agent-accounts-BxBsIXGa.js +1 -0
  17. package/web/dist/assets/alert-dialog-BOp2HnnL.js +43 -0
  18. package/web/dist/assets/{collapsible-D7QXWXZq.js → collapsible-bb0csfMs.js} +1 -1
  19. package/web/dist/assets/{commit-list-AwLNQE91.js → commit-list-CEVhJoCF.js} +1 -1
  20. package/web/dist/assets/{compare-variants-CBggabVc.js → compare-variants-CZqdiqvW.js} +1 -1
  21. package/web/dist/assets/{diff-C4aSZfrQ2.js → diff-BjLZHKfD2.js} +2 -2
  22. package/web/dist/assets/{diff-controls-74Z0C3ay.js → diff-controls-DaO836o4.js} +1 -1
  23. package/web/dist/assets/{diff-stat-B7f-F8cC.js → diff-stat-DpHwISUB.js} +1 -1
  24. package/web/dist/assets/{diff-view-BPKHTL85.js → diff-view-BaYxuP8L.js} +1 -1
  25. package/web/dist/assets/dropdown-menu-DAmCVaLJ.js +1 -0
  26. package/web/dist/assets/{git-toolbar-Dntzprrr.js → git-toolbar-rk3doc2w.js} +1 -1
  27. package/web/dist/assets/github-BPfdr6aa.js +1 -0
  28. package/web/dist/assets/{image-preview-BhuwWeyP.js → image-preview-CFHgISfb.js} +1 -1
  29. package/web/dist/assets/index-C4iEPAUV.js +7 -0
  30. package/web/dist/assets/index-DPOGn7D5.css +1 -0
  31. package/web/dist/assets/{markdown-BssEOroY.js → markdown-Ir62-VMS.js} +1 -1
  32. package/web/dist/assets/pill-Dvvq0Otw.js +1 -0
  33. package/web/dist/assets/{project-router-a1gx3dfP.js → project-router-CvFAMDcP.js} +1 -1
  34. package/web/dist/assets/{prompt-templates-B4eJ8kQZ.js → prompt-templates-BGGpAIzb.js} +1 -1
  35. package/web/dist/assets/repo-git-C1Qv1JmM.js +1 -0
  36. package/web/dist/assets/{run-diff-CHDwMBEQ.js → run-diff-DrQsmf3-.js} +1 -1
  37. package/web/dist/assets/run-header-C9Aeh27u.js +1 -0
  38. package/web/dist/assets/skills-_ZVZxmKz.js +1 -0
  39. package/web/dist/assets/{tab-link-DRP4FV8D.js → tab-link-CkIV8ixq.js} +1 -1
  40. package/web/dist/assets/task-changes-BU9upwUw.js +1 -0
  41. package/web/dist/assets/{task-commits-DTdRtZur.js → task-commits-CbJutMBx.js} +1 -1
  42. package/web/dist/assets/{task-files-Cr2qKUk2.js → task-files-_hQyxAc7.js} +2 -2
  43. package/web/dist/assets/task-thread-Yo52ML6l.js +9 -0
  44. package/web/dist/assets/{textarea-DAHMUyAp.js → textarea-DfvlPIgO.js} +1 -1
  45. package/web/dist/assets/thread-loading-B9uTF0dX.js +1 -0
  46. package/web/dist/assets/{token-metrics-Q0paVq5n.js → token-metrics-BLzFUb8F.js} +1 -1
  47. package/web/dist/assets/{utils-CG8vWc5K.js → utils-GZNjgma4.js} +1 -1
  48. package/web/dist/assets/workflows-B6Er16t0.js +11 -0
  49. package/web/dist/assets/{zoomable-image-BXioMWqb.js → zoomable-image-COhBxkky.js} +1 -1
  50. package/web/dist/index.html +14 -14
  51. package/web/dist/assets/agent-accounts-BP0XBzQP.js +0 -1
  52. package/web/dist/assets/alert-dialog-Bv9zV9w1.js +0 -43
  53. package/web/dist/assets/dropdown-menu-DkzcT6aO.js +0 -1
  54. package/web/dist/assets/github-CBYawanT.js +0 -1
  55. package/web/dist/assets/index-BpI26cbM.js +0 -7
  56. package/web/dist/assets/index-CG0CPeOx.css +0 -1
  57. package/web/dist/assets/pill-C7gWe96Z.js +0 -1
  58. package/web/dist/assets/repo-git-D8GN9ork.js +0 -1
  59. package/web/dist/assets/run-header-BlqnTQeP.js +0 -1
  60. package/web/dist/assets/skills-CkWBfIfQ.js +0 -1
  61. package/web/dist/assets/task-changes-CEyHhiK1.js +0 -1
  62. package/web/dist/assets/task-thread-C8XeQXO4.js +0 -9
  63. package/web/dist/assets/thread-loading-OtvWGq9Y.js +0 -1
  64. package/web/dist/assets/workflows-uDL1z3Qp.js +0 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wjarka/cezarion",
3
- "version": "0.14.2",
3
+ "version": "0.14.3-pr425.663",
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",
@@ -50,8 +50,8 @@
50
50
  "zod": "^4.4.3"
51
51
  },
52
52
  "devDependencies": {
53
- "@open-mercato/cezar-api-client": "^0.14.2",
54
- "@open-mercato/cezar-contract": "^0.14.2",
53
+ "@open-mercato/cezar-api-client": "0.14.3-pr425.663",
54
+ "@open-mercato/cezar-contract": "0.14.3-pr425.663",
55
55
  "@types/node": "^20.14.0",
56
56
  "@types/ws": "^8.18.1",
57
57
  "esbuild": "^0.28.1",
@@ -18,19 +18,21 @@ const configOptions = () => [
18
18
  ];
19
19
  const configuration = () => process.env.CEZ_MOCK_CURSOR_LEGACY === '1' ? {} : { configOptions: configOptions() };
20
20
  let pendingAsk;
21
+ let resumeDone = false;
21
22
  const update = (value, id = sessionId) => emit({ method: 'session/update', params: { sessionId: id, update: value } });
22
23
  const text = value => update({ sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: value } });
23
24
  const complete = id => reply(id, { stopReason: 'end_turn' });
24
25
  const question = { id: 'tests', prompt: 'Which test runner?', options: [{ id: 'vitest', label: 'Vitest' }, { id: 'jest', label: 'Jest' }], allowMultiple: false };
25
26
  async function prompt(id, content) {
26
27
  const input = content.filter(b => b.type === 'text').map(b => b.text).join('\n');
28
+ if (resumeDone) { resumeDone = false; text('Resumed work finished.\nCEZ:DONE'); complete(id); return; }
27
29
  if (input.includes('mock:hold')) await new Promise(r => setTimeout(r, 500));
28
30
  if (input.includes('mock:rpc-error')) { emit({ id, error: { code: -32603, message: 'Provider rejected request' } }); return; }
29
31
  if (input.includes('mock:provider-error')) { text('\n\nError: [unauthenticated] Backend rejected authentication.'); complete(id); return; }
30
32
  if (input.includes('mock:ask-bad')) { pendingAsk = { id }; emit({ id: 'bad-question', method: 'cursor/ask_question', params: { questions: [] } }); return; }
31
- if (input.includes('mock:plan')) { pendingAsk = { id }; emit({ id: 'plan-1', method: 'cursor/create_plan', params: { name: 'Test plan', overview: 'Approve the changes?', plan: 'Implement the change and run tests.' } }); return; }
33
+ if (input.includes('mock:plan')) { pendingAsk = { id, input }; emit({ id: 'plan-1', method: 'cursor/create_plan', params: { name: 'Test plan', overview: 'Approve the changes?', plan: 'Implement the change and run tests.' } }); return; }
32
34
  if (input.includes('mock:multi-ask')) { pendingAsk = { id }; emit({ id: 'multi-question', method: 'cursor/ask_question', params: { title: 'Choices', questions: [question, { ...question, id: 'build', prompt: 'Which build tool?', options: [{ id: 'vite', label: 'Vite' }, { id: 'webpack', label: 'Webpack' }] }] } }); return; }
33
- if (input.includes('mock:ask')) { pendingAsk = { id }; emit({ id: 'question-1', method: 'cursor/ask_question', params: { toolCallId: 'ask-tool', title: 'Tests', questions: [question] } }); return; }
35
+ if (input.includes('mock:ask')) { pendingAsk = { id, input }; emit({ id: 'question-1', method: 'cursor/ask_question', params: { toolCallId: 'ask-tool', title: 'Tests', questions: [question] } }); return; }
34
36
  if (input.includes('mock:permission')) { pendingAsk = { id }; emit({ id: 'permission-1', method: 'session/request_permission', params: { sessionId, toolCall: { toolCallId: 'shell-1', title: 'echo hello', kind: 'execute' }, options: [{ optionId: 'allow-once', name: 'Allow once', kind: 'allow_once' }, { optionId: 'reject-once', name: 'Reject', kind: 'reject_once' }] } }); return; }
35
37
  if (input.includes('mock:subagent')) {
36
38
  update({ sessionUpdate: 'tool_call', toolCallId: 'task-1', title: 'Review', kind: 'other', rawInput: { description: 'Review' }, status: 'in_progress' });
@@ -56,7 +58,17 @@ createInterface({ input: process.stdin }).on('line', line => {
56
58
  if (!msg.method) {
57
59
  if (pendingAsk) {
58
60
  const pending = pendingAsk; pendingAsk = undefined;
59
- setTimeout(() => { text(msg.id === 'bad-question' ? 'Malformed question skipped.' : `Answer accepted: ${JSON.stringify(msg.result)}`); complete(pending.id); }, 40);
61
+ // #383 run f192490f seq188–194: native reply, tool closes, end_turn.
62
+ // Variants exercise documented ACP terminal/ask frames at that boundary.
63
+ setTimeout(() => {
64
+ text(msg.id === 'bad-question' ? 'Malformed question skipped.' : `Answer accepted: ${JSON.stringify(msg.result)}`);
65
+ const input = pending.input ?? '';
66
+ resumeDone = input.includes('mock:resume-done');
67
+ if (input.includes('mock:answer-done')) text('\nCEZ:DONE');
68
+ if (input.includes('mock:answer-monitoring')) text('\nCEZ:MONITORING');
69
+ if (input.includes('mock:answer-ask')) emit({ id: 'question-2', method: 'cursor/ask_question', params: { title: 'Tests', questions: [question] } });
70
+ reply(pending.id, { stopReason: input.includes('mock:answer-cancelled') ? 'cancelled' : 'end_turn' });
71
+ }, 40);
60
72
  }
61
73
  return;
62
74
  }
@@ -0,0 +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,Jn as o,M as s,N as c,O as l,S as u,T as d,b as f,j as p,k as m,un as h,w as g,x as _,z as v}from"./alert-dialog-BOp2HnnL.js";import{t as y}from"./utils-GZNjgma4.js";import{_ as b,g as x,h as ee,m as te,p as S}from"./dropdown-menu-DAmCVaLJ.js";var C=e(t(),1),w=n(),T=`Popover`,[E,ne]=s(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)(x,{...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),s=(0,w.jsx)(c.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":J(i.open),...r,ref:o,onClick:p(e.onClick,i.onOpenToggle)});return i.hasCustomAnchor?s:(0,w.jsx)(S,{asChild:!0,...a,children:s})});P.displayName=N;var F=`PopoverPortal`,[re,I]=E(F,{forceMount:void 0}),L=e=>{let{__scopePopover:t,forceMount:n,children:i,container:a}=e,o=k(F,t);return(0,w.jsx)(re,{scope:t,forceMount:n,children:(0,w.jsx)(l,{present:n||o.open,children:(0,w.jsx)(r,{asChild:!0,container:a,children:i})})})};L.displayName=F;var R=`PopoverContent`,z=C.forwardRef((e,t)=>{let n=I(R,e.__scopePopover),{forceMount:r=n.forceMount,...i}=e,a=k(R,e.__scopePopover);return(0,w.jsx)(l,{present:r||a.open,children:a.modal?(0,w.jsx)(V,{...i,ref:t}):(0,w.jsx)(H,{...i,ref:t})})});z.displayName=R;var B=a(`PopoverContent.RemoveScroll`),V=C.forwardRef((e,t)=>{let n=k(R,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:B,allowPinchZoom:!0,children:(0,w.jsx)(U,{...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})})})}),H=C.forwardRef((e,t)=>{let n=k(R,e.__scopePopover),r=C.useRef(!1),i=C.useRef(!1);return(0,w.jsx)(U,{...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()}})}),U=C.forwardRef((e,t)=>{let{__scopePopover:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,disableOutsidePointerEvents:o,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:l,onInteractOutside:f,...p}=e,m=k(R,n),h=D(n);return u(),(0,w.jsx)(g,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,w.jsx)(d,{asChild:!0,disableOutsidePointerEvents:o,onInteractOutside:f,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:l,onDismiss:()=>m.onOpenChange(!1),deferPointerDownOutside:!0,children:(0,w.jsx)(ee,{"data-state":J(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)`}})})})}),W=`PopoverClose`,G=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=k(W,n);return(0,w.jsx)(c.button,{type:`button`,...r,ref:t,onClick:p(e.onClick,()=>i.onOpenChange(!1))})});G.displayName=W;var K=`PopoverArrow`,q=C.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=D(n);return(0,w.jsx)(te,{...i,...r,ref:t})});q.displayName=K;function J(e){return e?`open`:`closed`}var Y=A,X=M,Z=P,ie=L,ae=z;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)(Y,{"data-slot":`popover`,...e})})}function pe({onPointerDownCapture:e,onKeyDownCapture:t,...n}){let r=C.useContext($);return(0,w.jsx)(Z,{"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)(X,{"data-slot":`popover-anchor`,...e})}function ge(){let e=h(),t=o(),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};