spexcode 0.5.2 → 0.5.4
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 +1 -1
- package/package.json +1 -1
- package/spec-cli/bin/spex.mjs +25 -1
- package/spec-cli/hooks/dispatch.sh +24 -1
- package/spec-cli/src/anchors.ts +192 -58
- package/spec-cli/src/attach.ts +11 -8
- package/spec-cli/src/claude-headless.ts +13 -52
- package/spec-cli/src/cli.ts +209 -71
- package/spec-cli/src/client.ts +143 -5
- package/spec-cli/src/gateway-hub.ts +2 -6
- package/spec-cli/src/gateway.ts +96 -11
- package/spec-cli/src/git.ts +1395 -96
- package/spec-cli/src/graph.ts +21 -17
- package/spec-cli/src/graphCache.ts +405 -61
- package/spec-cli/src/graphStream.ts +581 -182
- package/spec-cli/src/guide.ts +15 -4
- package/spec-cli/src/harness.ts +1133 -71
- package/spec-cli/src/headless-controller.ts +63 -0
- package/spec-cli/src/help.ts +120 -64
- package/spec-cli/src/host-resources.ts +698 -0
- package/spec-cli/src/index.ts +95 -21
- package/spec-cli/src/init.ts +73 -15
- package/spec-cli/src/issues.ts +36 -3
- package/spec-cli/src/layout.ts +189 -41
- package/spec-cli/src/lint.ts +152 -27
- package/spec-cli/src/localIssues.ts +5 -1
- package/spec-cli/src/maintenance-wrapper.ts +276 -0
- package/spec-cli/src/materialize.ts +6 -7
- package/spec-cli/src/opencode-headless.ts +4 -8
- package/spec-cli/src/pi-headless.ts +17 -60
- package/spec-cli/src/process-identity.ts +174 -0
- package/spec-cli/src/project-store.ts +17 -0
- package/spec-cli/src/pty-bridge.ts +6 -3
- package/spec-cli/src/reviews.ts +17 -13
- package/spec-cli/src/runtime-ownership.ts +88 -0
- package/spec-cli/src/session-maintenance.ts +750 -0
- package/spec-cli/src/session-timeline.ts +6 -6
- package/spec-cli/src/sessions.ts +1251 -208
- package/spec-cli/src/sh.ts +3 -0
- package/spec-cli/src/source-files.ts +27 -2
- package/spec-cli/src/specs.ts +58 -25
- package/spec-cli/src/supervise.ts +31 -11
- package/spec-cli/src/uninstall.ts +7 -6
- package/spec-cli/templates/hooks/commit-msg +14 -0
- package/spec-cli/templates/hooks/pre-commit +29 -15
- package/spec-cli/templates/hooks/prepare-commit-msg +20 -48
- package/spec-cli/templates/hooks/reference-transaction +105 -0
- package/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +1 -1
- package/spec-cli/templates/spec/project/.plugins/core/mark-active/mark-active.sh +23 -21
- package/spec-cli/templates/spec/project/.plugins/core/spec.md +12 -10
- package/spec-cli/templates/spec/project/.plugins/core/stop-gate/stop-gate.sh +15 -6
- package/spec-cli/templates/spec/project/.plugins/prompts/atomic-landing/spec.md +32 -0
- package/spec-dashboard/dist/assets/App-C5vbTw8Q.js +2 -0
- package/spec-dashboard/dist/assets/Dashboard-u8RIS3NY.js +27 -0
- package/spec-dashboard/dist/assets/EvalsPage-BS7ITcNo.js +2 -0
- package/spec-dashboard/dist/assets/IssuesPage-DXbqQFW_.js +1 -0
- package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/spec-dashboard/dist/assets/MobileApp-DVLnk9hz.js +2 -0
- package/spec-dashboard/dist/assets/Modal-6mHq6fbZ.js +1 -0
- package/spec-dashboard/dist/assets/{PageScroll-CadAKuSy.js → PageScroll-CAY4S4g4.js} +1 -1
- package/spec-dashboard/dist/assets/ProjectsPage-UQyzsTWN.js +1 -0
- package/spec-dashboard/dist/assets/SessionInterface-DKU4c1Z-.js +39 -0
- package/spec-dashboard/dist/assets/SessionWindow-zGwJaGbR.js +1 -0
- package/spec-dashboard/dist/assets/Settings-igR17pns.js +1 -0
- package/spec-dashboard/dist/assets/Thread-B-ZUarN1.js +13 -0
- package/spec-dashboard/dist/assets/TimelineChat-Cp579UoJ.css +1 -0
- package/spec-dashboard/dist/assets/TimelineChat-sc49Qj5d.js +276 -0
- package/spec-dashboard/dist/assets/data-B1ot4PF0.js +1 -0
- package/spec-dashboard/dist/assets/index-BqBNCa1V.js +41 -0
- package/spec-dashboard/dist/assets/index-CzutlTDf.css +1 -0
- package/spec-dashboard/dist/assets/{terminalFont-DmTPNdbU.js → terminalFont-C6oGNKrf.js} +1 -1
- package/spec-dashboard/dist/index.html +5 -4
- package/spec-dashboard/src/reviewFilters.js +46 -8
- package/spec-dashboard/src/session.js +64 -9
- package/spec-eval/src/cli.ts +144 -32
- package/spec-eval/src/evaltab.ts +16 -9
- package/spec-eval/src/freshness.ts +336 -54
- package/spec-eval/src/scenariofresh.ts +51 -1
- package/spec-eval/src/scenarios.ts +324 -25
- package/spec-eval/src/sessioneval.ts +969 -173
- package/spec-cli/src/message-stream.ts +0 -147
- package/spec-dashboard/dist/assets/Dashboard-CTAuTyZ3.js +0 -27
- package/spec-dashboard/dist/assets/EvalsPage-KbMMownG.js +0 -2
- package/spec-dashboard/dist/assets/IssuesPage-DmyLb9Rj.js +0 -1
- package/spec-dashboard/dist/assets/MobileApp-D2RZGt4Z.js +0 -2
- package/spec-dashboard/dist/assets/Modal-3brXUhM0.js +0 -1
- package/spec-dashboard/dist/assets/ProjectsPage-DU3x4Y8l.js +0 -1
- package/spec-dashboard/dist/assets/SessionInterface-BtrzlOPs.js +0 -39
- package/spec-dashboard/dist/assets/SessionWindow-BWH5O0jh.js +0 -13
- package/spec-dashboard/dist/assets/Settings-COgdKTJB.js +0 -1
- package/spec-dashboard/dist/assets/TimelineChat-DQ21GSJK.js +0 -1
- package/spec-dashboard/dist/assets/index-D6HBvKkJ.js +0 -41
- package/spec-dashboard/dist/assets/index-DFdlYy4H.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as O}from"./index-BqBNCa1V.js";const R=1e4,v=2.5*R;function N(e,{deadMs:t=v,setTimeoutImpl:s=setTimeout,clearTimeoutImpl:n=clearTimeout}={}){let r=0;const o=()=>{r&&(n(r),r=0)};return{arm:()=>{o(),r=s(()=>{r=0,e()},t)},disarm:o}}const $=280,E=54;function J(e,t){const s={};e.forEach(o=>{var a;o.parent&&(s[a=o.parent]??(s[a]=[])).push(o.id)});const n={},r=(o,a,l)=>{n[o]={x:a*$,y:l};const i=t.has(o)?s[o]||[]:[];if(!i.length)return;const h=l-(i.length-1)/2*E;i.forEach((j,f)=>r(j,a+1,h+f*E))};return e.filter(o=>!o.parent).forEach((o,a)=>r(o.id,0,a*E)),n}const I=[150,350,600,900];async function p(e,t){const s=typeof e=="string"?O(e):e;for(let n=0;;n++)try{return await fetch(s,t)}catch(r){if(n>=I.length)throw r;await new Promise(o=>setTimeout(o,I[n]))}}let T="";const P=()=>{T=""};async function C(){const e=await p("/api/graph",{cache:"no-store",headers:T?{"If-None-Match":T}:{}});if(e.status===304)return null;if(e.status===401||e.status===403){const n=await e.json().catch(()=>null);return{authRequired:(n==null?void 0:n.reason)||"project-login"}}const t=e.headers.get("etag")||"";return{board:await e.json(),seal:()=>{T=t}}}const S=(e,...t)=>O(`/api/specs/${encodeURIComponent(e)}${t.map(s=>"/"+s).join("")}`);function x({onBoard:e,onLegacyChange:t,onStatus:s}){let n=null,r=!1,o=null,a="";const l=u=>{const{nodes:c=[],sessions:m=[],...w}=u,g=new Map([["meta",w],["nodes#order",c.map(d=>d.id)],["sess#order",m.map(d=>d.id)]]);return c.forEach(d=>g.set("node:"+d.id,d)),m.forEach(d=>g.set("sess:"+d.id,d)),g},i=u=>{const c=(m,w)=>(u.get(w)||[]).map(g=>u.get(m+g));return{...u.get("meta")||{},nodes:c("node:","nodes#order"),sessions:c("sess:","sess#order")}},h=()=>{try{n==null||n.close()}catch{}o=null,a="",y()},j=N(()=>{!n||r||(s==null||s(!1),h(),j.arm(),t==null||t())}),f=()=>j.arm(),y=()=>{if(!r){try{n=new EventSource(O("/api/graph/stream?mode=delta"))}catch{n=null;return}n.addEventListener("graph-full",u=>{f();const{to:c,graph:m}=JSON.parse(u.data);o=l(m),a=c,P(),e(m,{authoritative:!0,tag:c}),s==null||s(!0)}),n.addEventListener("graph-delta",u=>{f();const c=JSON.parse(u.data);if(!o||a!==c.from){h();return}for(const m of c.del||[])o.delete(m);for(const[m,w]of Object.entries(c.set||{}))o.set(m,w);a=c.to,P(),e(i(o),{authoritative:!1,tag:c.to}),s==null||s(!0)}),n.addEventListener("graph-changed",()=>{f(),t==null||t()}),n.addEventListener("error",()=>s==null?void 0:s(!1)),n.addEventListener("ping",f),n.addEventListener("ready",f)}};return y(),s==null||s(!1),f(),()=>{r=!0,j.disarm();try{n==null||n.close()}catch{}}}function A(e,t,s=!1){if(!(e!=null&&e.sessions))return e;const n=new Set(e.sessions.map(a=>a.id));if(s)for(const a of t.keys())n.has(a)||t.delete(a);let r=!1;const o=e.sessions.map(a=>{var f,y;const l=a.evalSummary;if(!l||!Number.isInteger(l.generation)||!l.epoch)return a;const i=t.get(a.id),h=i&&i.epoch!==l.epoch;if(!i||(h?s:l.generation>=i.generation)){const u=((f=i==null?void 0:i.projection)==null?void 0:f.phase)==="ready"&&i.projection.value?{generation:i.projection.generation,revision:i.projection.revision,value:i.projection.value}:(y=i==null?void 0:i.projection)==null?void 0:y.lastKnown,c=h&&!l.value&&!l.lastKnown&&u?{...l,lastKnown:u}:l;return t.set(a.id,{epoch:c.epoch,generation:c.generation,projection:c}),c!==l?(r=!0,{...a,evalSummary:c}):a}return r=!0,{...a,evalSummary:i.projection}});return r?{...e,sessions:o}:e}const F=e=>{var t,s;return{title:((t=e==null?void 0:e.identity)==null?void 0:t.title)||(e==null?void 0:e.project)||"",icon:((s=e==null?void 0:e.identity)==null?void 0:s.icon)||(e==null?void 0:e.projectIcon)||"spexcode"}},k=(e,...t)=>O(`/api/sessions/${encodeURIComponent(e)}${t.map(s=>"/"+s).join("")}`);async function _(e){const t=await p(k(e,"timeline"),{cache:"no-store"});return t.ok?t.json():null}async function B(e){const t=await p(k(e));return t.ok?t.json():null}async function D(e,t,{replyVia:s}={}){const n=await p(k(e,"input"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({kind:"text",text:t,...s?{replyVia:s}:{}})}),r=await n.json().catch(()=>({}));return{ok:n.ok&&(r==null?void 0:r.ok)!==!1,error:r==null?void 0:r.error}}async function G(){return(await p("/api/plugins")).json()}async function K(){return(await p("/api/plugins?surface=review")).json()}async function M(){return(await p("/api/settings")).json()}async function q(e){const t=await p(`/api/issues/${encodeURIComponent(e)}`);if(t.status===404)return!1;if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}async function X(e,t,s){return(await p(`/api/issues/${encodeURIComponent(e)}/reply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({body:t,...s!=null&&s.length?{evidence:s}:{}})})).json()}async function Y(e){return(await p(`/api/issues/${encodeURIComponent(e)}/close`,{method:"POST"})).json()}async function z(e){return(await p(`/api/issues/${encodeURIComponent(e)}/promote`,{method:"POST"})).json()}async function H(e,t){return(await p(`/api/remarks/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ref:t})})).json()}async function Q({concern:e,body:t,evidence:s,store:n}){return(await p("/api/issues",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({concern:e,body:t,store:n,...s!=null&&s.length?{evidence:s}:{}})})).json()}async function V({node:e,scenario:t,issue:s,body:n,codeSha:r,evidence:o}){return(await p("/api/remarks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({node:e,scenario:t,issue:s,body:n,...r?{codeSha:r}:{},...o!=null&&o.length?{evidence:o}:{}})})).json()}async function W(e,t){return(await p(`/api/specs/${encodeURIComponent(e)}/evals/ok`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({scenario:t})})).json()}async function Z(e){return(await p("/api/evidence",{method:"POST",headers:{"Content-Type":"image/png"},body:e})).json()}export{$ as X,E as Y,A as a,K as b,Z as c,V as d,W as e,J as f,p as g,S as h,G as i,M as j,H as k,C as l,z as m,Y as n,X as o,F as p,q,Q as r,x as s,N as t,_ as u,B as v,D as w};
|