@benz-ai-x/dsh-md-preview 0.2.6 → 0.2.7

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/lib/client.js CHANGED
@@ -61,7 +61,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
61
61
  `+e.scrub();for(let n of e.markers)t.marks.push(n)}return this.finishLeaf(t),null}stopAt(e){if(this.stoppedAt!=null&&this.stoppedAt<e)throw RangeError(`Can't move stoppedAt forward`);this.stoppedAt=e}reuseFragment(e){if(!this.fragments.moveTo(this.absoluteLineStart+e,this.absoluteLineStart)||!this.fragments.matches(this.block.hash))return!1;let t=this.fragments.takeNodes(this);return t?(this.absoluteLineStart+=t,this.lineStart=Ib(this.absoluteLineStart,this.ranges),this.moveRangeI(),this.absoluteLineStart<this.to?(this.lineStart++,this.absoluteLineStart++,this.readLine()):(this.atEnd=!0,this.readLine()),!0):!1}get depth(){return this.stack.length}parentType(e=this.depth-1){return this.parser.nodeSet.types[this.stack[e].type]}nextLine(){return this.lineStart+=this.line.text.length,this.absoluteLineEnd>=this.to?(this.absoluteLineStart=this.absoluteLineEnd,this.atEnd=!0,this.readLine(),!1):(this.lineStart++,this.absoluteLineStart=this.absoluteLineEnd+1,this.moveRangeI(),this.readLine(),!0)}peekLine(){return this.scanLine(this.absoluteLineEnd+1).text}moveRangeI(){for(;this.rangeI<this.ranges.length-1&&this.absoluteLineStart>=this.ranges[this.rangeI].to;)this.rangeI++,this.absoluteLineStart=Math.max(this.absoluteLineStart,this.ranges[this.rangeI].from)}scanLine(e){let t=lb;if(t.end=e,e>=this.to)t.text=``;else if(t.text=this.lineChunkAt(e),t.end+=t.text.length,this.ranges.length>1){let e=this.absoluteLineStart,n=this.rangeI;for(;this.ranges[n].to<t.end;){n++;let r=this.ranges[n].from,i=this.lineChunkAt(r);t.end=r+i.length,t.text=t.text.slice(0,this.ranges[n-1].to-e)+i,e=t.end-t.text.length}}return t}readLine(){let{line:e}=this,{text:t,end:n}=this.scanLine(this.absoluteLineStart);for(this.absoluteLineEnd=n,e.reset(t);e.depth<this.stack.length;e.depth++){let t=this.stack[e.depth],n=this.parser.skipContextMarkup[t.type];if(!n)throw Error(`Unhandled block context `+Q[t.type]);let r=this.line.markers.length;if(!n(t,this,e)){this.line.markers.length>r&&(t.end=this.line.markers[this.line.markers.length-1].to),e.forward();break}e.forward()}}lineChunkAt(e){let t=this.input.chunk(e),n;if(this.input.lineChunks)n=t==`
62
62
  `?``:t;else{let e=t.indexOf(`
63
63
  `);n=e<0?t:t.slice(0,e)}return e+n.length>this.to?n.slice(0,this.to-e):n}prevLineEnd(){return this.atEnd?this.lineStart:this.lineStart-1}startContext(e,t,n=0){this.block=Py.create(e,n,this.lineStart+t,this.block.hash,this.lineStart+this.line.text.length),this.stack.push(this.block)}startComposite(e,t,n=0){this.startContext(this.parser.getNodeType(e),t,n)}addNode(e,t,n){typeof e==`number`&&(e=new J(this.parser.nodeSet.types[e],_b,_b,(n??this.prevLineEnd())-t)),this.block.addChild(e,t-this.block.from)}addElement(e){this.block.addChild(e.toTree(this.parser.nodeSet),e.from-this.block.from)}addLeafElement(e,t){this.addNode(this.buffer.writeElements(Nb(t.children,e.marks),-t.from).finish(t.type,t.to-t.from),t.from)}finishContext(){let e=this.stack.pop(),t=this.stack[this.stack.length-1];t.addChild(e.toTree(this.parser.nodeSet),e.from-t.from),this.block=t}finish(){for(;this.stack.length>1;)this.finishContext();return this.addGaps(this.block.toTree(this.parser.nodeSet,this.lineStart))}addGaps(e){return this.ranges.length>1?db(this.ranges,0,e.topNode,this.ranges[0].from,this.reusePlaceholders):e}finishLeaf(e){for(let t of e.parsers)if(t.finish(this,e))return;let t=Nb(this.parser.parseInline(e.content,e.start),e.marks);this.addNode(this.buffer.writeElements(t,-e.start).finish(Q.Paragraph,e.content.length),e.start)}elt(e,t,n,r){return typeof e==`string`?$(this.parser.getNodeType(e),t,n,r):new bb(e,t)}get buffer(){return new vb(this.parser.nodeSet)}};function db(e,t,n,r,i){let a=e[t].to,o=[],s=[],c=n.from+r;function l(n,i){for(;i?n>=a:n>a;){let i=e[t+1].from-a;r+=i,n+=i,t++,a=e[t].to}}for(let u=n.firstChild;u;u=u.nextSibling){l(u.from+r,!0);let n=u.from+r,d,f=i.get(u.tree);f?d=f:u.to+r>a?(d=db(e,t,u,r,i),l(u.to+r,!1)):d=u.toTree(),o.push(d),s.push(n-c)}return l(n.to+r,!1),new J(n.type,o,s,n.to+r-c,n.tree?n.tree.propValues:void 0)}var fb=class e extends Rh{constructor(e,t,n,r,i,a,o,s,c){super(),this.nodeSet=e,this.blockParsers=t,this.leafBlockParsers=n,this.blockNames=r,this.endLeafBlock=i,this.skipContextMarkup=a,this.inlineParsers=o,this.inlineNames=s,this.wrappers=c,this.nodeTypes=Object.create(null);for(let t of e.types)this.nodeTypes[t.name]=t.id}createParse(e,t,n){let r=new ub(this,e,t,n);for(let i of this.wrappers)r=i(r,e,t,n);return r}configure(t){let n=mb(t);if(!n)return this;let{nodeSet:r,skipContextMarkup:i}=this,a=this.blockParsers.slice(),o=this.leafBlockParsers.slice(),s=this.blockNames.slice(),c=this.inlineParsers.slice(),l=this.inlineNames.slice(),u=this.endLeafBlock.slice(),d=this.wrappers;if(pb(n.defineNodes)){i=Object.assign({},i);let e=r.types.slice(),t;for(let r of n.defineNodes){let{name:n,block:a,composite:o,style:s}=typeof r==`string`?{name:r}:r;if(e.some(e=>e.name==n))continue;o&&(i[e.length]=(e,t,n)=>o(t,n,e.value));let c=e.length,l=o?[`Block`,`BlockContext`]:a?c>=Q.ATXHeading1&&c<=Q.SetextHeading2?[`Block`,`LeafBlock`,`Heading`]:[`Block`,`LeafBlock`]:void 0;e.push(mh.define({id:c,name:n,props:l&&[[K.group,l]]})),s&&(t||={},Array.isArray(s)||s instanceof Vh?t[n]=s:Object.assign(t,s))}r=new hh(e),t&&(r=r.extend(Kh(t)))}if(pb(n.props)&&(r=r.extend(...n.props)),pb(n.remove))for(let e of n.remove){let t=this.blockNames.indexOf(e),n=this.inlineNames.indexOf(e);t>-1&&(a[t]=o[t]=void 0),n>-1&&(c[n]=void 0)}if(pb(n.parseBlock))for(let e of n.parseBlock){let t=s.indexOf(e.name);if(t>-1)a[t]=e.parse,o[t]=e.leaf;else{let t=e.before?hb(s,e.before):e.after?hb(s,e.after)+1:s.length-1;a.splice(t,0,e.parse),o.splice(t,0,e.leaf),s.splice(t,0,e.name)}e.endLeaf&&u.push(e.endLeaf)}if(pb(n.parseInline))for(let e of n.parseInline){let t=l.indexOf(e.name);if(t>-1)c[t]=e.parse;else{let t=e.before?hb(l,e.before):e.after?hb(l,e.after)+1:l.length-1;c.splice(t,0,e.parse),l.splice(t,0,e.name)}}return n.wrap&&(d=d.concat(n.wrap)),new e(r,a,o,s,u,i,c,l,d)}getNodeType(e){let t=this.nodeTypes[e];if(t==null)throw RangeError(`Unknown node type '${e}'`);return t}parseInline(e,t){let n=new Mb(this,e,t);outer:for(let e=t;e<n.end;){let t=n.char(e);for(let r of this.inlineParsers)if(r){let i=r(n,t,e);if(i>=0){e=i;continue outer}}e++}return n.resolveMarkers(0)}};function pb(e){return e!=null&&e.length>0}function mb(e){if(!Array.isArray(e))return e;if(e.length==0)return null;let t=mb(e[0]);if(e.length==1)return t;let n=mb(e.slice(1));if(!n||!t)return t||n;let r=(e,t)=>(e||_b).concat(t||_b),i=t.wrap,a=n.wrap;return{props:r(t.props,n.props),defineNodes:r(t.defineNodes,n.defineNodes),parseBlock:r(t.parseBlock,n.parseBlock),parseInline:r(t.parseInline,n.parseInline),remove:r(t.remove,n.remove),wrap:i?a?(e,t,n,r)=>i(a(e,t,n,r),t,n,r):i:a}}function hb(e,t){let n=e.indexOf(t);if(n<0)throw RangeError(`Position specified relative to unknown parser ${t}`);return n}let gb=[mh.none];for(let e=1,t;t=Q[e];e++)gb[e]=mh.define({id:e,name:t,props:e>=Q.Escape?[]:[[K.group,e in Ry?[`Block`,`BlockContext`]:[`Block`,`LeafBlock`]]],top:t==`Document`});let _b=[];var vb=class{constructor(e){this.nodeSet=e,this.content=[],this.nodes=[]}write(e,t,n,r=0){return this.content.push(e,t,n,4+r*4),this}writeElements(e,t=0){for(let n of e)n.writeTo(this,t);return this}finish(e,t){return J.build({buffer:this.content,nodeSet:this.nodeSet,reused:this.nodes,topID:e,length:t})}},yb=class{constructor(e,t,n,r=_b){this.type=e,this.from=t,this.to=n,this.children=r}writeTo(e,t){let n=e.content.length;e.writeElements(this.children,t),e.content.push(this.type,this.from+t,this.to+t,e.content.length+4-n)}toTree(e){return new vb(e).writeElements(this.children,-this.from).finish(this.type,this.to-this.from)}},bb=class{constructor(e,t){this.tree=e,this.from=t}get to(){return this.from+this.tree.length}get type(){return this.tree.type.id}get children(){return _b}writeTo(e,t){e.nodes.push(this.tree),e.content.push(e.nodes.length-1,this.from+t,this.to+t,-1)}toTree(){return this.tree}};function $(e,t,n,r){return new yb(e,t,n,r)}let xb={resolve:`Emphasis`,mark:`EmphasisMark`},Sb={resolve:`Emphasis`,mark:`EmphasisMark`},Cb={},wb={};var Tb=class{constructor(e,t,n,r){this.type=e,this.from=t,this.to=n,this.side=r}};let Eb=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\u2010-\u2027]/;try{Eb=RegExp(`[\\p{S}|\\p{P}]`,`u`)}catch{}let Db={Escape(e,t,n){if(t!=92||n==e.end-1)return-1;let r=e.char(n+1);for(let t=0;t<32;t++)if(`!"#$%&'()*+,-./:;<=>?@[\\]^_\`{|}~`.charCodeAt(t)==r)return e.append($(Q.Escape,n,n+2));return-1},Entity(e,t,n){if(t!=38)return-1;let r=/^(?:#\d+|#x[a-f\d]+|\w+);/i.exec(e.slice(n+1,n+31));return r?e.append($(Q.Entity,n,n+1+r[0].length)):-1},InlineCode(e,t,n){if(t!=96||n&&e.char(n-1)==96)return-1;let r=n+1;for(;r<e.end&&e.char(r)==96;)r++;let i=r-n,a=0;for(;r<e.end;r++)if(e.char(r)==96){if(a++,a==i&&e.char(r+1)!=96)return e.append($(Q.InlineCode,n,r+1,[$(Q.CodeMark,n,n+i),$(Q.CodeMark,r+1-i,r+1)]))}else a=0;return-1},HTMLTag(e,t,n){if(t!=60||n==e.end-1)return-1;let r=e.slice(n+1,e.end),i=/^(?:[a-z][-\w+.]+:[^\s>]+|[a-z\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*)>/i.exec(r);if(i)return e.append($(Q.Autolink,n,n+1+i[0].length,[$(Q.LinkMark,n,n+1),$(Q.URL,n+1,n+i[0].length),$(Q.LinkMark,n+i[0].length,n+1+i[0].length)]));let a=/^!--[^>](?:-[^-]|[^-])*?-->/i.exec(r);if(a)return e.append($(Q.Comment,n,n+1+a[0].length));let o=/^\?[^]*?\?>/.exec(r);if(o)return e.append($(Q.ProcessingInstruction,n,n+1+o[0].length));let s=/^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(r);return s?e.append($(Q.HTMLTag,n,n+1+s[0].length)):-1},Emphasis(e,t,n){if(t!=95&&t!=42)return-1;let r=n+1;for(;e.char(r)==t;)r++;let i=e.slice(n-1,n),a=e.slice(r,r+1),o=Eb.test(i),s=Eb.test(a),c=/\s|^$/.test(i),l=/\s|^$/.test(a),u=!l&&(!s||c||o),d=!c&&(!o||l||s),f=u&&(t==42||!d||o),p=d&&(t==42||!u||s);return e.append(new Tb(t==95?xb:Sb,n,r,!!f|(p?2:0)))},HardBreak(e,t,n){if(t==92&&e.char(n+1)==10)return e.append($(Q.HardBreak,n,n+2));if(t==32){let t=n+1;for(;e.char(t)==32;)t++;if(e.char(t)==10&&t>=n+2)return e.append($(Q.HardBreak,n,t+1))}return-1},Link(e,t,n){return t==91?e.append(new Tb(Cb,n,n+1,1)):-1},Image(e,t,n){return t==33&&e.char(n+1)==91?e.append(new Tb(wb,n,n+2,1)):-1},LinkEnd(e,t,n){if(t!=93)return-1;for(let t=e.parts.length-1;t>=0;t--){let r=e.parts[t];if(r instanceof Tb&&(r.type==Cb||r.type==wb)){if(!r.side||e.skipSpace(r.to)==n&&!/[(\[]/.test(e.slice(n+1,n+2)))return e.parts[t]=null,-1;let i=e.takeContent(t),a=e.parts[t]=Ob(e,i,r.type==Cb?Q.Link:Q.Image,r.from,n+1);if(r.type==Cb)for(let n=0;n<t;n++){let t=e.parts[n];t instanceof Tb&&t.type==Cb&&(t.side=0)}return a.to}}return-1}};function Ob(e,t,n,r,i){let{text:a}=e,o=e.char(i),s=i;if(t.unshift($(Q.LinkMark,r,r+(n==Q.Image?2:1))),t.push($(Q.LinkMark,i-1,i)),o==40){let n=e.skipSpace(i+1),r=kb(a,n-e.offset,e.offset),o;r&&(n=e.skipSpace(r.to),n!=r.to&&(o=Ab(a,n-e.offset,e.offset),o&&(n=e.skipSpace(o.to)))),e.char(n)==41&&(t.push($(Q.LinkMark,i,i+1)),s=n+1,r&&t.push(r),o&&t.push(o),t.push($(Q.LinkMark,n,s)))}else if(o==91){let n=jb(a,i-e.offset,e.offset,!1);n&&(t.push(n),s=n.to)}return $(n,r,s,t)}function kb(e,t,n){if(e.charCodeAt(t)==60){for(let r=t+1;r<e.length;r++){let i=e.charCodeAt(r);if(i==62)return $(Q.URL,t+n,r+1+n);if(i==60||i==10)return!1}return null}{let r=0,i=t;for(let t=!1;i<e.length;i++){let n=e.charCodeAt(i);if(zy(n))break;if(t)t=!1;else if(n==40)r++;else if(n==41){if(!r)break;r--}else n==92&&(t=!0)}return i>t?$(Q.URL,t+n,i+n):i==e.length&&null}}function Ab(e,t,n){let r=e.charCodeAt(t);if(r!=39&&r!=34&&r!=40)return!1;let i=r==40?41:r;for(let r=t+1,a=!1;r<e.length;r++){let o=e.charCodeAt(r);if(a)a=!1;else if(o==i)return $(Q.LinkTitle,t+n,r+1+n);else o==92&&(a=!0)}return null}function jb(e,t,n,r){for(let i=!1,a=t+1,o=Math.min(e.length,a+999);a<o;a++){let o=e.charCodeAt(a);if(i)i=!1;else if(o==93)return!r&&$(Q.LinkLabel,t+n,a+1+n);else{if(r&&!zy(o)&&(r=!1),o==91)return!1;o==92&&(i=!0)}}return null}var Mb=class{constructor(e,t,n){this.parser=e,this.text=t,this.offset=n,this.parts=[]}char(e){return e>=this.end?-1:this.text.charCodeAt(e-this.offset)}get end(){return this.offset+this.text.length}slice(e,t){return this.text.slice(e-this.offset,t-this.offset)}append(e){return this.parts.push(e),e.to}addDelimiter(e,t,n,r,i){return this.append(new Tb(e,t,n,!!r|(i?2:0)))}get hasOpenLink(){for(let e=this.parts.length-1;e>=0;e--){let t=this.parts[e];if(t instanceof Tb&&(t.type==Cb||t.type==wb))return!0}return!1}addElement(e){return this.append(e)}resolveMarkers(e){for(let t=e;t<this.parts.length;t++){let n=this.parts[t];if(!(n instanceof Tb&&n.type.resolve&&n.side&2))continue;let r=n.type==xb||n.type==Sb,i=n.to-n.from,a,o=t-1;for(;o>=e;o--){let e=this.parts[o];if(e instanceof Tb&&e.side&1&&e.type==n.type&&!(r&&(n.side&1||e.side&2)&&(e.to-e.from+i)%3==0&&((e.to-e.from)%3||i%3))){a=e;break}}if(!a)continue;let s=n.type.resolve,c=[],l=a.from,u=n.to;if(r){let e=Math.min(2,a.to-a.from,i);l=a.to-e,u=n.from+e,s=e==1?`Emphasis`:`StrongEmphasis`}a.type.mark&&c.push(this.elt(a.type.mark,l,a.to));for(let e=o+1;e<t;e++)this.parts[e]instanceof yb&&c.push(this.parts[e]),this.parts[e]=null;n.type.mark&&c.push(this.elt(n.type.mark,n.from,u));let d=this.elt(s,l,u,c);this.parts[o]=r&&a.from!=l?new Tb(a.type,a.from,l,a.side):null,(this.parts[t]=r&&n.to!=u?new Tb(n.type,u,n.to,n.side):null)?this.parts.splice(t,0,d):this.parts[t]=d}let t=[];for(let n=e;n<this.parts.length;n++){let e=this.parts[n];e instanceof yb&&t.push(e)}return t}findOpeningDelimiter(e){for(let t=this.parts.length-1;t>=0;t--){let n=this.parts[t];if(n instanceof Tb&&n.type==e&&n.side&1)return t}return null}takeContent(e){let t=this.resolveMarkers(e);return this.parts.length=e,t}getDelimiterAt(e){let t=this.parts[e];return t instanceof Tb?t:null}skipSpace(e){return By(this.text,e-this.offset)+this.offset}elt(e,t,n,r){return typeof e==`string`?$(this.parser.getNodeType(e),t,n,r):new bb(e,t)}};Mb.linkStart=Cb,Mb.imageStart=wb;function Nb(e,t){if(!t.length)return e;if(!e.length)return t;let n=e.slice(),r=0;for(let e of t){for(;r<n.length&&n[r].to<e.to;)r++;if(r<n.length&&n[r].from<e.from){let t=n[r];t instanceof yb&&(n[r]=new yb(t.type,t.from,t.to,Nb(t.children,[e])))}else n.splice(r++,0,e)}return n}let Pb=[Q.CodeBlock,Q.ListItem,Q.OrderedList,Q.BulletList];var Fb=class{constructor(e,t){this.fragments=e,this.input=t,this.i=0,this.fragment=null,this.fragmentEnd=-1,this.cursor=null,e.length&&(this.fragment=e[this.i++])}nextFragment(){this.fragment=this.i<this.fragments.length?this.fragments[this.i++]:null,this.cursor=null,this.fragmentEnd=-1}moveTo(e,t){for(;this.fragment&&this.fragment.to<=e;)this.nextFragment();if(!this.fragment||this.fragment.from>(e?e-1:0))return!1;if(this.fragmentEnd<0){let e=this.fragment.to;for(;e>0&&this.input.read(e-1,e)!=`
64
- `;)e--;this.fragmentEnd=e?e-1:0}let n=this.cursor;n||(n=this.cursor=this.fragment.tree.cursor(),n.firstChild());let r=e+this.fragment.offset;for(;n.to<=r;)if(!n.parent())return!1;for(;;){if(n.from>=r)return this.fragment.from<=t;if(!n.childAfter(r))return!1}}matches(e){let t=this.cursor.tree;return t&&t.prop(K.contextHash)==e}takeNodes(e){let t=this.cursor,n=this.fragment.offset,r=this.fragmentEnd-+!!this.fragment.openEnd,i=e.absoluteLineStart,a=i,o=e.block.children.length,s=a,c=o;for(;;){if(t.to-n>r){if(t.type.isAnonymous&&t.firstChild())continue;break}let i=Ib(t.from-n,e.ranges);if(t.to-n<=e.ranges[e.rangeI].to)e.addNode(t.tree,i);else{let n=new J(e.parser.nodeSet.types[Q.Paragraph],[],[],0,e.block.hashProp);e.reusePlaceholders.set(n,t.tree),e.addNode(n,i)}if(t.type.is(`Block`)&&(Pb.indexOf(t.type.id)<0?(a=t.to-n,o=e.block.children.length):(a=s,o=c),s=t.to-n,c=e.block.children.length),!t.nextSibling())break}for(;e.block.children.length>o;)e.block.children.pop(),e.block.positions.pop();return a-i}};function Ib(e,t){let n=e;for(let r=1;r<t.length;r++){let i=t[r-1].to,a=t[r].from;i<e&&(n-=a-i)}return n}let Lb=Kh({"Blockquote/...":X.quote,HorizontalRule:X.contentSeparator,"ATXHeading1/... SetextHeading1/...":X.heading1,"ATXHeading2/... SetextHeading2/...":X.heading2,"ATXHeading3/...":X.heading3,"ATXHeading4/...":X.heading4,"ATXHeading5/...":X.heading5,"ATXHeading6/...":X.heading6,"Comment CommentBlock":X.comment,Escape:X.escape,Entity:X.character,"Emphasis/...":X.emphasis,"StrongEmphasis/...":X.strong,"Link/... Image/...":X.link,"OrderedList/... BulletList/...":X.list,"BlockQuote/...":X.quote,"InlineCode CodeText":X.monospace,"URL Autolink":X.url,"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark":X.processingInstruction,"CodeInfo LinkLabel":X.labelName,LinkTitle:X.string,Paragraph:X.content}),Rb=new fb(new hh(gb).extend(Lb),Object.keys(rb).map(e=>rb[e]),Object.keys(rb).map(e=>sb[e]),Object.keys(rb),cb,Ry,Object.keys(Db).map(e=>Db[e]),Object.keys(Db),[]),zb={resolve:`Strikethrough`,mark:`StrikethroughMark`},Bb={defineNodes:[{name:`Strikethrough`,style:{"Strikethrough/...":X.strikethrough}},{name:`StrikethroughMark`,style:X.processingInstruction}],parseInline:[{name:`Strikethrough`,parse(e,t,n){if(t!=126||e.char(n+1)!=126||e.char(n+2)==126)return-1;let r=e.slice(n-1,n),i=e.slice(n+2,n+3),a=/\s|^$/.test(r),o=/\s|^$/.test(i),s=Eb.test(r),c=Eb.test(i);return e.addDelimiter(zb,n,n+2,!o&&(!c||a||s),!a&&(!s||o||c))},after:`Emphasis`}]};function Vb(e,t,n=0,r,i=0){let a=0,o=!0,s=-1,c=-1,l=!1,u=()=>{r.push(e.elt(`TableCell`,i+s,i+c,e.parser.parseInline(t.slice(s,c),i+s)))};for(let d=n;d<t.length;d++){let n=t.charCodeAt(d);n==124&&!l?((!o||s>-1)&&a++,o=!1,r&&(s>-1&&u(),r.push(e.elt(`TableDelimiter`,d+i,d+i+1))),s=c=-1):(l||n!=32&&n!=9)&&(s<0&&(s=d),c=d+1),l=!l&&n==92}return s>-1&&(a++,r&&u()),a}function Hb(e,t){for(let n=t;n<e.length;n++){let t=e.charCodeAt(n);if(t==124)return!0;t==92&&n++}return!1}let Ub=/^[>\s]*\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/;var Wb=class{constructor(){this.rows=null}nextLine(e,t,n){if(this.rows==null){this.rows=!1;let r;if((t.next==45||t.next==58||t.next==124)&&Ub.test(r=t.text.slice(t.pos))){let i=[];Vb(e,n.content,0,i,n.start)==Vb(e,r,0)&&(this.rows=[e.elt(`TableHeader`,n.start,n.start+n.content.length,i),e.elt(`TableDelimiter`,e.lineStart+t.pos,e.lineStart+t.text.length)])}}else if(this.rows){let n=[];Vb(e,t.text,t.pos,n,e.lineStart),this.rows.push(e.elt(`TableRow`,e.lineStart+t.pos,e.lineStart+t.text.length,n))}return!1}finish(e,t){return this.rows?(e.addLeafElement(t,e.elt(`Table`,t.start,t.start+t.content.length,this.rows)),!0):!1}};let Gb={defineNodes:[{name:`Table`,block:!0},{name:`TableHeader`,style:{"TableHeader/...":X.heading}},`TableRow`,{name:`TableCell`,style:X.content},{name:`TableDelimiter`,style:X.processingInstruction}],parseBlock:[{name:`Table`,leaf(e,t){return Hb(t.content,0)?new Wb:null},endLeaf(e,t,n){if(n.parsers.some(e=>e instanceof Wb)||!Hb(t.text,t.basePos))return!1;let r=e.peekLine();return Ub.test(r)&&Vb(e,t.text,t.basePos)==Vb(e,r,t.basePos)},before:`SetextHeading`}]};var Kb=class{nextLine(){return!1}finish(e,t){return e.addLeafElement(t,e.elt(`Task`,t.start,t.start+t.content.length,[e.elt(`TaskMarker`,t.start,t.start+3),...e.parser.parseInline(t.content.slice(3),t.start+3)])),!0}};let qb={defineNodes:[{name:`Task`,block:!0,style:X.list},{name:`TaskMarker`,style:X.atom}],parseBlock:[{name:`TaskList`,leaf(e,t){return/^\[[ xX]\][ \t]/.test(t.content)&&e.parentType().name==`ListItem`?new Kb:null},after:`SetextHeading`}]},Jb=/(www\.)|(https?:\/\/)|([\w.+-]{1,100}@)|(mailto:|xmpp:)/gy,Yb=/[\w-]+(\.[\w-]+)+(:\d+)?(\/[^\s<]*)?/gy,Xb=/[\w-]+\.[\w-]+($|[/:])/,Zb=/[\w.+-]+@[\w-]+(\.[\w.-]+)+/gy,Qb=/\/[a-zA-Z\d@.]+/gy;function $b(e,t,n,r){let i=0;for(let a=t;a<n;a++)e[a]==r&&i++;return i}function ex(e,t){Yb.lastIndex=t;let n=Yb.exec(e);if(!n||Xb.exec(n[0])[0].indexOf(`_`)>-1)return-1;let r=t+n[0].length;for(;;){let n=e[r-1],i;if(/[?!.,:*_~]/.test(n)||n==`)`&&$b(e,t,r,`)`)>$b(e,t,r,`(`))r--;else if(n==`;`&&(i=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(t,r))))r=t+i.index;else break}return r}function tx(e,t){Zb.lastIndex=t;let n=Zb.exec(e);if(!n)return-1;let r=n[0][n[0].length-1];return r==`_`||r==`-`?-1:t+n[0].length-+(r==`.`)}let nx=[Gb,qb,Bb,{parseInline:[{name:`Autolink`,parse(e,t,n){let r=n-e.offset;if(r&&/\w/.test(e.text[r-1]))return-1;Jb.lastIndex=r;let i=Jb.exec(e.text),a=-1;return!i||(i[1]||i[2]?(a=ex(e.text,r+i[0].length),a>-1&&e.hasOpenLink&&(a=r+/([^\[\]]|\[[^\]]*\])*/.exec(e.text.slice(r,a))[0].length)):i[3]?a=tx(e.text,r):(a=tx(e.text,r+i[0].length),a>-1&&i[0]==`xmpp:`&&(Qb.lastIndex=a,i=Qb.exec(e.text),i&&(a=i.index+i[0].length))),a<0)?-1:(e.addElement(e.elt(`URL`,n,a+e.offset)),a+e.offset)}}]}];function rx(e,t,n){return(r,i,a)=>{if(i!=e||r.char(a+1)==e)return-1;let o=[r.elt(n,a,a+1)];for(let i=a+1;i<r.end;i++){let s=r.char(i);if(s==e)return r.addElement(r.elt(t,a,i+1,o.concat(r.elt(n,i,i+1))));if(s==92&&o.push(r.elt(`Escape`,i,i+++2)),zy(s))break}return-1}}let ix={defineNodes:[{name:`Superscript`,style:X.special(X.content)},{name:`SuperscriptMark`,style:X.processingInstruction}],parseInline:[{name:`Superscript`,parse:rx(94,`Superscript`,`SuperscriptMark`)}]},ax={defineNodes:[{name:`Subscript`,style:X.special(X.content)},{name:`SubscriptMark`,style:X.processingInstruction}],parseInline:[{name:`Subscript`,parse:rx(126,`Subscript`,`SubscriptMark`)}]},ox={defineNodes:[{name:`Emoji`,style:X.character}],parseInline:[{name:`Emoji`,parse(e,t,n){let r;return t!=58||!(r=/^[a-zA-Z_0-9]+:/.exec(e.slice(n+1,e.end)))?-1:e.addElement(e.elt(`Emoji`,n,n+1+r[0].length))}}]},sx=yg.define({parser:Rb.configure([nx,ax,ix,ox])});function cx({initialValue:e,onChange:t,onSave:n}){let r=(0,a.useRef)(null),o=(0,a.useRef)(t);o.current=t;let s=(0,a.useRef)(n);return s.current=n,(0,a.useEffect)(()=>{let t=r.current,n=new G({state:F.create({doc:e,extensions:[ch(),O_(),Nm(),Bm(),Xg($g,{fallback:!0}),G.lineWrapping,sx,_m.of([{key:`Mod-s`,run:()=>(s.current(),!0)},...Ny,...K_]),G.updateListener.of(e=>{e.docChanged&&o.current(e.state.doc.toString())}),G.theme({"&":{height:`100%`},".cm-scroller":{fontFamily:`inherit`}})]}),...t===null?{}:{parent:t}});return()=>{n.destroy()}},[e]),(0,i.jsx)(`div`,{className:`dsh-md-preview-editor`,ref:r})}function lx(e){return{code:{copyLabel:e(`copy`),copiedLabel:e(`copied`)},footnotes:e(`footnotes`)}}function ux({usePreviewTarget:e,close:t,read:n,write:r,t:s}){let c=e(e=>e),[l,u]=(0,a.useState)({state:`loading`}),[d,f]=(0,a.useState)(500),[p,m]=(0,a.useState)(0),h=(0,a.useMemo)(()=>lx(s),[s]),[g,_]=(0,a.useState)(`view`),[v,ee]=(0,a.useState)(``),[te,ne]=(0,a.useState)(!1),[re,y]=(0,a.useState)(!1),[b,x]=(0,a.useState)(!1),[ie,ae]=(0,a.useState)(!1),[oe,se]=(0,a.useState)(null),ce=(0,a.useRef)(null),le=(0,a.useRef)(null);(0,a.useEffect)(()=>()=>{le.current!==null&&window.clearTimeout(le.current)},[]),(0,a.useEffect)(()=>{if(c===null)return;u({state:`loading`}),_(`view`),ne(!1),y(!1);let e=new AbortController;return n(c.sessionId,c.path,e.signal).then(t=>{e.signal.aborted||u(t.ok?{state:`ready`,file:t.value}:{state:`failed`,code:t.error.code,message:t.error.message})}),()=>{e.abort()}},[n,c,p]),(0,a.useEffect)(()=>{ce.current?.abort(),ce.current=null},[c]);let ue=(0,a.useRef)(!1);(0,a.useEffect)(()=>{c===null?ue.current=!1:ue.current||=!0},[c]);let de=(0,a.useCallback)(e=>{f(t=>Math.min(1280,Math.max(320,t-e)))},[]),fe=g===`edit`&&l.state===`ready`&&v!==l.file.content,pe=(0,a.useCallback)(()=>{ae(!0),le.current!==null&&window.clearTimeout(le.current),le.current=window.setTimeout(()=>{ae(!1)},2e3)},[]),me=(0,a.useCallback)(e=>{if(c===null||l.state!==`ready`||b)return;let t=l.file,n=new AbortController;ce.current=n,x(!0),se(null),r(c.sessionId,c.path,v,e?void 0:t.fingerprint,e,n.signal).then(e=>{n.signal.aborted||(e.ok?(_(`view`),ne(!1),y(!1),pe(),m(e=>e+1)):e.error.code===`md-preview/conflict`?ne(!0):se({code:e.error.code,message:e.error.message}))}).finally(()=>{n.signal.aborted||x(!1)})},[l,v,pe,b,c,r]),he=(0,a.useCallback)(()=>{fe?y(!0):t()},[t,fe]);return c===null?null:(0,i.jsx)(`div`,{className:`dsh-md-preview-dock`,children:(0,i.jsxs)(`div`,{className:`dsh-md-preview-panel`,style:{width:`${d}px`},children:[(0,i.jsxs)(`div`,{className:`dsh-md-preview-header`,children:[(0,i.jsx)(`span`,{className:`dsh-md-preview-icon`,"aria-hidden":!0,children:`📄`}),(0,i.jsx)(`div`,{className:`dsh-md-preview-title`,title:c.path,children:ss(c.path)}),(0,i.jsx)(`span`,{className:`dsh-md-preview-version`,"aria-hidden":!0,children:`v0.2.6`}),g===`view`&&l.state===`ready`&&(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-icon`,"aria-label":s(`panel.edit`),title:s(`panel.edit`),onClick:()=>{ee(l.file.content),ne(!1),se(null),y(!1),_(`edit`)},children:(0,i.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,i.jsx)(`path`,{d:`M11.5 2.5l2 2L6 12l-3 1 1-3zM10 4l2 2`,stroke:`currentColor`,strokeWidth:`1.3`,fill:`none`,strokeLinecap:`round`,strokeLinejoin:`round`})})}),g===`edit`&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-icon`,"aria-label":s(`panel.save`),title:s(`panel.save`),disabled:b||!fe&&!te,onClick:()=>{me(!1)},children:(0,i.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,i.jsx)(`path`,{d:`M2 2h9l3 3v9H2zM5 2v4h6V2M4 14V9h8v5`,stroke:`currentColor`,strokeWidth:`1.3`,fill:`none`,strokeLinejoin:`round`})})}),(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-icon`,"aria-label":s(`panel.cancel`),title:s(`panel.cancel`),onClick:()=>{_(`view`),ne(!1),se(null),y(!1)},children:(0,i.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,i.jsx)(`path`,{d:`M3 3l10 10M13 3L3 13`,stroke:`currentColor`,strokeWidth:`1.3`,strokeLinecap:`round`})})})]}),(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-icon`,"aria-label":s(`panel.close`),onClick:he,children:(0,i.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,i.jsx)(`path`,{d:`M4 4l8 8M12 4l-8 8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),(0,i.jsxs)(`div`,{className:`dsh-md-preview-body`,children:[ie&&g===`view`&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-toast`,role:`status`,children:[`✓ `,s(`panel.saved`)]}),re&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-bar`,role:`alert`,children:[(0,i.jsx)(`span`,{children:s(`panel.unsaved.title`)}),(0,i.jsx)(`button`,{type:`button`,onClick:()=>{t()},children:s(`panel.unsaved.discard`)}),(0,i.jsx)(`button`,{type:`button`,onClick:()=>{y(!1)},children:s(`panel.unsaved.keep`)})]}),oe!==null&&g===`edit`&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-bar`,role:`alert`,children:[(0,i.jsxs)(`span`,{children:[s(`panel.saveError`),` · `,oe.code,oe.message.length>0?` — ${oe.message}`:``]}),(0,i.jsx)(`button`,{type:`button`,disabled:b,onClick:()=>{me(!1)},children:s(`panel.save.retry`)})]}),te&&g===`edit`&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-bar`,role:`alert`,children:[(0,i.jsx)(`span`,{children:s(`panel.conflict.title`)}),(0,i.jsx)(`button`,{type:`button`,onClick:()=>{_(`view`),ne(!1),m(e=>e+1)},children:s(`panel.conflict.reload`)}),(0,i.jsx)(`button`,{type:`button`,disabled:b,onClick:()=>{me(!0)},children:s(`panel.conflict.force`)})]}),g===`edit`?(0,i.jsx)(cx,{initialValue:l.state===`ready`?l.file.content:``,onChange:ee,onSave:()=>{me(!1)}}):(0,i.jsxs)(i.Fragment,{children:[l.state===`loading`&&(0,i.jsx)(`div`,{className:`dsh-md-preview-state`,children:s(`panel.loading`)}),l.state===`failed`&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-state`,children:[(0,i.jsxs)(`div`,{className:`dsh-md-preview-error`,children:[s(`panel.error`),` · `,l.code]}),(0,i.jsx)(`div`,{children:l.message}),(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-retry`,onClick:()=>{m(e=>e+1)},children:s(`panel.retry`)})]}),l.state===`ready`&&(0,i.jsx)(o.MarkdownText,{text:l.file.content,labels:h})]})]}),(0,i.jsx)(dx,{onResize:de})]})})}function dx(e){let[t,n]=(0,a.useState)(!1),r=(0,a.useRef)(!1),o=(0,a.useRef)(0),s=(0,a.useRef)(0),c=(0,a.useRef)(null),l=(0,a.useRef)(e.onResize);l.current=e.onResize;let u=(0,a.useCallback)(e=>{e.preventDefault();try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}r.current=!0,o.current=e.clientX,s.current=e.clientX,n(!0)},[]),d=(0,a.useCallback)(e=>{r.current&&(s.current=e.clientX,c.current??=requestAnimationFrame(()=>{c.current=null,l.current(s.current-o.current),o.current=s.current}))},[]),f=(0,a.useCallback)(e=>{if(r.current){try{e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId)}catch{}c.current!==null&&(cancelAnimationFrame(c.current),c.current=null),r.current=!1,n(!1)}},[]);return(0,i.jsx)(`div`,{"aria-hidden":!0,className:`dsh-md-preview-handle`,"data-dragging":t||void 0,onPointerDown:u,onPointerMove:d,onPointerUp:f})}let fx=`md-preview`,px={"panel.title":`Markdown 预览`,"panel.close":`关闭预览`,"panel.loading":`正在加载…`,"panel.empty":`没有可预览的文档`,"panel.error":`加载失败`,"panel.retry":`重试`,"panel.edit":`编辑`,"panel.save":`保存`,"panel.cancel":`取消编辑`,"panel.saved":`已保存`,"panel.saveError":`保存失败`,"panel.save.retry":`重试`,"panel.conflict.title":`文件已在别处被修改`,"panel.conflict.reload":`重新加载`,"panel.conflict.force":`强制覆盖`,"panel.unsaved.title":`有未保存的修改`,"panel.unsaved.discard":`放弃修改`,"panel.unsaved.keep":`继续编辑`,"chip.preview":`预览 {name}`,"chip.open":`打开 {name}`,"action.label":`预览文档`,"action.open":`预览 {name}`,copy:`复制`,copied:`已复制`,footnotes:`脚注`},mx={"panel.title":`Markdown preview`,"panel.close":`Close preview`,"panel.loading":`Loading…`,"panel.empty":`No document to preview`,"panel.error":`Failed to load`,"panel.retry":`Retry`,"panel.edit":`Edit`,"panel.save":`Save`,"panel.cancel":`Cancel editing`,"panel.saved":`Saved`,"panel.saveError":`Save failed`,"panel.save.retry":`Retry`,"panel.conflict.title":`The file changed elsewhere`,"panel.conflict.reload":`Reload`,"panel.conflict.force":`Overwrite`,"panel.unsaved.title":`You have unsaved changes`,"panel.unsaved.discard":`Discard changes`,"panel.unsaved.keep":`Keep editing`,"chip.preview":`Preview {name}`,"chip.open":`Open {name}`,"action.label":`Preview documents`,"action.open":`Preview {name}`,copy:`Copy`,copied:`Copied`,footnotes:`Footnotes`};function hx(e,t){let n=e.data.get(`deliverables`);if(n===void 0)return[];let r=[],i=new Set;for(let e of n.produced)e.seq>t||i.has(e.path)||(i.add(e.path),r.push(e.path));return r}function gx(e){let t=hx(e.turn,e.seq);return t.some(us)?ds(t):null}let _x=!1;function vx(){if(_x||typeof document>`u`)return;let e=document.createElement(`style`);e.setAttribute(`data-plugin-css`,`md-preview`),e.textContent=`
64
+ `;)e--;this.fragmentEnd=e?e-1:0}let n=this.cursor;n||(n=this.cursor=this.fragment.tree.cursor(),n.firstChild());let r=e+this.fragment.offset;for(;n.to<=r;)if(!n.parent())return!1;for(;;){if(n.from>=r)return this.fragment.from<=t;if(!n.childAfter(r))return!1}}matches(e){let t=this.cursor.tree;return t&&t.prop(K.contextHash)==e}takeNodes(e){let t=this.cursor,n=this.fragment.offset,r=this.fragmentEnd-+!!this.fragment.openEnd,i=e.absoluteLineStart,a=i,o=e.block.children.length,s=a,c=o;for(;;){if(t.to-n>r){if(t.type.isAnonymous&&t.firstChild())continue;break}let i=Ib(t.from-n,e.ranges);if(t.to-n<=e.ranges[e.rangeI].to)e.addNode(t.tree,i);else{let n=new J(e.parser.nodeSet.types[Q.Paragraph],[],[],0,e.block.hashProp);e.reusePlaceholders.set(n,t.tree),e.addNode(n,i)}if(t.type.is(`Block`)&&(Pb.indexOf(t.type.id)<0?(a=t.to-n,o=e.block.children.length):(a=s,o=c),s=t.to-n,c=e.block.children.length),!t.nextSibling())break}for(;e.block.children.length>o;)e.block.children.pop(),e.block.positions.pop();return a-i}};function Ib(e,t){let n=e;for(let r=1;r<t.length;r++){let i=t[r-1].to,a=t[r].from;i<e&&(n-=a-i)}return n}let Lb=Kh({"Blockquote/...":X.quote,HorizontalRule:X.contentSeparator,"ATXHeading1/... SetextHeading1/...":X.heading1,"ATXHeading2/... SetextHeading2/...":X.heading2,"ATXHeading3/...":X.heading3,"ATXHeading4/...":X.heading4,"ATXHeading5/...":X.heading5,"ATXHeading6/...":X.heading6,"Comment CommentBlock":X.comment,Escape:X.escape,Entity:X.character,"Emphasis/...":X.emphasis,"StrongEmphasis/...":X.strong,"Link/... Image/...":X.link,"OrderedList/... BulletList/...":X.list,"BlockQuote/...":X.quote,"InlineCode CodeText":X.monospace,"URL Autolink":X.url,"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark":X.processingInstruction,"CodeInfo LinkLabel":X.labelName,LinkTitle:X.string,Paragraph:X.content}),Rb=new fb(new hh(gb).extend(Lb),Object.keys(rb).map(e=>rb[e]),Object.keys(rb).map(e=>sb[e]),Object.keys(rb),cb,Ry,Object.keys(Db).map(e=>Db[e]),Object.keys(Db),[]),zb={resolve:`Strikethrough`,mark:`StrikethroughMark`},Bb={defineNodes:[{name:`Strikethrough`,style:{"Strikethrough/...":X.strikethrough}},{name:`StrikethroughMark`,style:X.processingInstruction}],parseInline:[{name:`Strikethrough`,parse(e,t,n){if(t!=126||e.char(n+1)!=126||e.char(n+2)==126)return-1;let r=e.slice(n-1,n),i=e.slice(n+2,n+3),a=/\s|^$/.test(r),o=/\s|^$/.test(i),s=Eb.test(r),c=Eb.test(i);return e.addDelimiter(zb,n,n+2,!o&&(!c||a||s),!a&&(!s||o||c))},after:`Emphasis`}]};function Vb(e,t,n=0,r,i=0){let a=0,o=!0,s=-1,c=-1,l=!1,u=()=>{r.push(e.elt(`TableCell`,i+s,i+c,e.parser.parseInline(t.slice(s,c),i+s)))};for(let d=n;d<t.length;d++){let n=t.charCodeAt(d);n==124&&!l?((!o||s>-1)&&a++,o=!1,r&&(s>-1&&u(),r.push(e.elt(`TableDelimiter`,d+i,d+i+1))),s=c=-1):(l||n!=32&&n!=9)&&(s<0&&(s=d),c=d+1),l=!l&&n==92}return s>-1&&(a++,r&&u()),a}function Hb(e,t){for(let n=t;n<e.length;n++){let t=e.charCodeAt(n);if(t==124)return!0;t==92&&n++}return!1}let Ub=/^[>\s]*\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/;var Wb=class{constructor(){this.rows=null}nextLine(e,t,n){if(this.rows==null){this.rows=!1;let r;if((t.next==45||t.next==58||t.next==124)&&Ub.test(r=t.text.slice(t.pos))){let i=[];Vb(e,n.content,0,i,n.start)==Vb(e,r,0)&&(this.rows=[e.elt(`TableHeader`,n.start,n.start+n.content.length,i),e.elt(`TableDelimiter`,e.lineStart+t.pos,e.lineStart+t.text.length)])}}else if(this.rows){let n=[];Vb(e,t.text,t.pos,n,e.lineStart),this.rows.push(e.elt(`TableRow`,e.lineStart+t.pos,e.lineStart+t.text.length,n))}return!1}finish(e,t){return this.rows?(e.addLeafElement(t,e.elt(`Table`,t.start,t.start+t.content.length,this.rows)),!0):!1}};let Gb={defineNodes:[{name:`Table`,block:!0},{name:`TableHeader`,style:{"TableHeader/...":X.heading}},`TableRow`,{name:`TableCell`,style:X.content},{name:`TableDelimiter`,style:X.processingInstruction}],parseBlock:[{name:`Table`,leaf(e,t){return Hb(t.content,0)?new Wb:null},endLeaf(e,t,n){if(n.parsers.some(e=>e instanceof Wb)||!Hb(t.text,t.basePos))return!1;let r=e.peekLine();return Ub.test(r)&&Vb(e,t.text,t.basePos)==Vb(e,r,t.basePos)},before:`SetextHeading`}]};var Kb=class{nextLine(){return!1}finish(e,t){return e.addLeafElement(t,e.elt(`Task`,t.start,t.start+t.content.length,[e.elt(`TaskMarker`,t.start,t.start+3),...e.parser.parseInline(t.content.slice(3),t.start+3)])),!0}};let qb={defineNodes:[{name:`Task`,block:!0,style:X.list},{name:`TaskMarker`,style:X.atom}],parseBlock:[{name:`TaskList`,leaf(e,t){return/^\[[ xX]\][ \t]/.test(t.content)&&e.parentType().name==`ListItem`?new Kb:null},after:`SetextHeading`}]},Jb=/(www\.)|(https?:\/\/)|([\w.+-]{1,100}@)|(mailto:|xmpp:)/gy,Yb=/[\w-]+(\.[\w-]+)+(:\d+)?(\/[^\s<]*)?/gy,Xb=/[\w-]+\.[\w-]+($|[/:])/,Zb=/[\w.+-]+@[\w-]+(\.[\w.-]+)+/gy,Qb=/\/[a-zA-Z\d@.]+/gy;function $b(e,t,n,r){let i=0;for(let a=t;a<n;a++)e[a]==r&&i++;return i}function ex(e,t){Yb.lastIndex=t;let n=Yb.exec(e);if(!n||Xb.exec(n[0])[0].indexOf(`_`)>-1)return-1;let r=t+n[0].length;for(;;){let n=e[r-1],i;if(/[?!.,:*_~]/.test(n)||n==`)`&&$b(e,t,r,`)`)>$b(e,t,r,`(`))r--;else if(n==`;`&&(i=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(t,r))))r=t+i.index;else break}return r}function tx(e,t){Zb.lastIndex=t;let n=Zb.exec(e);if(!n)return-1;let r=n[0][n[0].length-1];return r==`_`||r==`-`?-1:t+n[0].length-+(r==`.`)}let nx=[Gb,qb,Bb,{parseInline:[{name:`Autolink`,parse(e,t,n){let r=n-e.offset;if(r&&/\w/.test(e.text[r-1]))return-1;Jb.lastIndex=r;let i=Jb.exec(e.text),a=-1;return!i||(i[1]||i[2]?(a=ex(e.text,r+i[0].length),a>-1&&e.hasOpenLink&&(a=r+/([^\[\]]|\[[^\]]*\])*/.exec(e.text.slice(r,a))[0].length)):i[3]?a=tx(e.text,r):(a=tx(e.text,r+i[0].length),a>-1&&i[0]==`xmpp:`&&(Qb.lastIndex=a,i=Qb.exec(e.text),i&&(a=i.index+i[0].length))),a<0)?-1:(e.addElement(e.elt(`URL`,n,a+e.offset)),a+e.offset)}}]}];function rx(e,t,n){return(r,i,a)=>{if(i!=e||r.char(a+1)==e)return-1;let o=[r.elt(n,a,a+1)];for(let i=a+1;i<r.end;i++){let s=r.char(i);if(s==e)return r.addElement(r.elt(t,a,i+1,o.concat(r.elt(n,i,i+1))));if(s==92&&o.push(r.elt(`Escape`,i,i+++2)),zy(s))break}return-1}}let ix={defineNodes:[{name:`Superscript`,style:X.special(X.content)},{name:`SuperscriptMark`,style:X.processingInstruction}],parseInline:[{name:`Superscript`,parse:rx(94,`Superscript`,`SuperscriptMark`)}]},ax={defineNodes:[{name:`Subscript`,style:X.special(X.content)},{name:`SubscriptMark`,style:X.processingInstruction}],parseInline:[{name:`Subscript`,parse:rx(126,`Subscript`,`SubscriptMark`)}]},ox={defineNodes:[{name:`Emoji`,style:X.character}],parseInline:[{name:`Emoji`,parse(e,t,n){let r;return t!=58||!(r=/^[a-zA-Z_0-9]+:/.exec(e.slice(n+1,e.end)))?-1:e.addElement(e.elt(`Emoji`,n,n+1+r[0].length))}}]},sx=yg.define({parser:Rb.configure([nx,ax,ix,ox])});function cx({initialValue:e,onChange:t,onSave:n}){let r=(0,a.useRef)(null),o=(0,a.useRef)(t);o.current=t;let s=(0,a.useRef)(n);return s.current=n,(0,a.useEffect)(()=>{let t=r.current,n=new G({state:F.create({doc:e,extensions:[ch(),O_(),Nm(),Bm(),Xg($g,{fallback:!0}),G.lineWrapping,sx,_m.of([{key:`Mod-s`,run:()=>(s.current(),!0)},...Ny,...K_]),G.updateListener.of(e=>{e.docChanged&&o.current(e.state.doc.toString())}),G.theme({"&":{height:`100%`},".cm-scroller":{fontFamily:`inherit`}})]}),...t===null?{}:{parent:t}});return()=>{n.destroy()}},[e]),(0,i.jsx)(`div`,{className:`dsh-md-preview-editor`,ref:r})}function lx(e){return{code:{copyLabel:e(`copy`),copiedLabel:e(`copied`)},footnotes:e(`footnotes`)}}function ux({usePreviewTarget:e,close:t,read:n,write:r,t:s}){let c=e(e=>e),[l,u]=(0,a.useState)({state:`loading`}),[d,f]=(0,a.useState)(500),[p,m]=(0,a.useState)(0),h=(0,a.useMemo)(()=>lx(s),[s]),[g,_]=(0,a.useState)(`view`),[v,ee]=(0,a.useState)(``),[te,ne]=(0,a.useState)(!1),[re,y]=(0,a.useState)(!1),[b,x]=(0,a.useState)(!1),[ie,ae]=(0,a.useState)(!1),[oe,se]=(0,a.useState)(null),ce=(0,a.useRef)(null),le=(0,a.useRef)(null);(0,a.useEffect)(()=>()=>{le.current!==null&&window.clearTimeout(le.current)},[]),(0,a.useEffect)(()=>{if(c===null)return;u({state:`loading`}),_(`view`),ne(!1),y(!1);let e=new AbortController;return n(c.sessionId,c.path,e.signal).then(t=>{e.signal.aborted||u(t.ok?{state:`ready`,file:t.value}:{state:`failed`,code:t.error.code,message:t.error.message})}),()=>{e.abort()}},[n,c,p]),(0,a.useEffect)(()=>{ce.current?.abort(),ce.current=null},[c]);let ue=(0,a.useRef)(!1);(0,a.useEffect)(()=>{c===null?ue.current=!1:ue.current||=!0},[c]);let de=(0,a.useCallback)(e=>{f(t=>Math.min(1280,Math.max(320,t-e)))},[]),fe=g===`edit`&&l.state===`ready`&&v!==l.file.content,pe=(0,a.useCallback)(()=>{ae(!0),le.current!==null&&window.clearTimeout(le.current),le.current=window.setTimeout(()=>{ae(!1)},2e3)},[]),me=(0,a.useCallback)(e=>{if(c===null||l.state!==`ready`||b)return;let t=l.file,n=new AbortController;ce.current=n,x(!0),se(null),r(c.sessionId,c.path,v,e?void 0:t.fingerprint,e,n.signal).then(e=>{n.signal.aborted||(e.ok?(_(`view`),ne(!1),y(!1),pe(),m(e=>e+1)):e.error.code===`md-preview/conflict`?ne(!0):se({code:e.error.code,message:e.error.message}))}).finally(()=>{n.signal.aborted||x(!1)})},[l,v,pe,b,c,r]),he=(0,a.useCallback)(()=>{fe?y(!0):t()},[t,fe]);return c===null?null:(0,i.jsx)(`div`,{className:`dsh-md-preview-dock`,children:(0,i.jsxs)(`div`,{className:`dsh-md-preview-panel`,style:{width:`${d}px`},children:[(0,i.jsxs)(`div`,{className:`dsh-md-preview-header`,children:[(0,i.jsx)(`span`,{className:`dsh-md-preview-icon`,"aria-hidden":!0,children:`📄`}),(0,i.jsx)(`div`,{className:`dsh-md-preview-title`,title:c.path,children:ss(c.path)}),(0,i.jsx)(`span`,{className:`dsh-md-preview-version`,"aria-hidden":!0,children:`v0.2.7`}),g===`view`&&l.state===`ready`&&(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-icon`,"aria-label":s(`panel.edit`),title:s(`panel.edit`),onClick:()=>{ee(l.file.content),ne(!1),se(null),y(!1),_(`edit`)},children:(0,i.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,i.jsx)(`path`,{d:`M11.5 2.5l2 2L6 12l-3 1 1-3zM10 4l2 2`,stroke:`currentColor`,strokeWidth:`1.3`,fill:`none`,strokeLinecap:`round`,strokeLinejoin:`round`})})}),g===`edit`&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-icon`,"aria-label":s(`panel.save`),title:s(`panel.save`),disabled:b||!fe&&!te,onClick:()=>{me(!1)},children:(0,i.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,i.jsx)(`path`,{d:`M2 2h9l3 3v9H2zM5 2v4h6V2M4 14V9h8v5`,stroke:`currentColor`,strokeWidth:`1.3`,fill:`none`,strokeLinejoin:`round`})})}),(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-icon`,"aria-label":s(`panel.cancel`),title:s(`panel.cancel`),onClick:()=>{_(`view`),ne(!1),se(null),y(!1)},children:(0,i.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,i.jsx)(`path`,{d:`M3 3l10 10M13 3L3 13`,stroke:`currentColor`,strokeWidth:`1.3`,strokeLinecap:`round`})})})]}),(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-icon`,"aria-label":s(`panel.close`),onClick:he,children:(0,i.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,i.jsx)(`path`,{d:`M4 4l8 8M12 4l-8 8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),(0,i.jsxs)(`div`,{className:`dsh-md-preview-body`,children:[ie&&g===`view`&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-toast`,role:`status`,children:[`✓ `,s(`panel.saved`)]}),re&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-bar`,role:`alert`,children:[(0,i.jsx)(`span`,{children:s(`panel.unsaved.title`)}),(0,i.jsx)(`button`,{type:`button`,onClick:()=>{t()},children:s(`panel.unsaved.discard`)}),(0,i.jsx)(`button`,{type:`button`,onClick:()=>{y(!1)},children:s(`panel.unsaved.keep`)})]}),oe!==null&&g===`edit`&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-bar`,role:`alert`,children:[(0,i.jsxs)(`span`,{children:[s(`panel.saveError`),` · `,oe.code,oe.message.length>0?` — ${oe.message}`:``]}),(0,i.jsx)(`button`,{type:`button`,disabled:b,onClick:()=>{me(!1)},children:s(`panel.save.retry`)})]}),te&&g===`edit`&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-bar`,role:`alert`,children:[(0,i.jsx)(`span`,{children:s(`panel.conflict.title`)}),(0,i.jsx)(`button`,{type:`button`,onClick:()=>{_(`view`),ne(!1),m(e=>e+1)},children:s(`panel.conflict.reload`)}),(0,i.jsx)(`button`,{type:`button`,disabled:b,onClick:()=>{me(!0)},children:s(`panel.conflict.force`)})]}),g===`edit`?(0,i.jsx)(cx,{initialValue:l.state===`ready`?l.file.content:``,onChange:ee,onSave:()=>{me(!1)}}):(0,i.jsxs)(i.Fragment,{children:[l.state===`loading`&&(0,i.jsx)(`div`,{className:`dsh-md-preview-state`,children:s(`panel.loading`)}),l.state===`failed`&&(0,i.jsxs)(`div`,{className:`dsh-md-preview-state`,children:[(0,i.jsxs)(`div`,{className:`dsh-md-preview-error`,children:[s(`panel.error`),` · `,l.code]}),(0,i.jsx)(`div`,{children:l.message}),(0,i.jsx)(`button`,{type:`button`,className:`dsh-md-preview-retry`,onClick:()=>{m(e=>e+1)},children:s(`panel.retry`)})]}),l.state===`ready`&&(0,i.jsx)(o.MarkdownText,{text:l.file.content,labels:h})]})]}),(0,i.jsx)(dx,{onResize:de})]})})}function dx(e){let[t,n]=(0,a.useState)(!1),r=(0,a.useRef)(!1),o=(0,a.useRef)(0),s=(0,a.useRef)(0),c=(0,a.useRef)(null),l=(0,a.useRef)(e.onResize);l.current=e.onResize;let u=(0,a.useCallback)(e=>{e.preventDefault();try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}r.current=!0,o.current=e.clientX,s.current=e.clientX,n(!0)},[]),d=(0,a.useCallback)(e=>{r.current&&(s.current=e.clientX,c.current??=requestAnimationFrame(()=>{c.current=null,l.current(s.current-o.current),o.current=s.current}))},[]),f=(0,a.useCallback)(e=>{if(r.current){try{e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId)}catch{}c.current!==null&&(cancelAnimationFrame(c.current),c.current=null),r.current=!1,n(!1)}},[]);return(0,i.jsx)(`div`,{"aria-hidden":!0,className:`dsh-md-preview-handle`,"data-dragging":t||void 0,onPointerDown:u,onPointerMove:d,onPointerUp:f})}let fx=`md-preview`,px={"panel.title":`Markdown 预览`,"panel.close":`关闭预览`,"panel.loading":`正在加载…`,"panel.empty":`没有可预览的文档`,"panel.error":`加载失败`,"panel.retry":`重试`,"panel.edit":`编辑`,"panel.save":`保存`,"panel.cancel":`取消编辑`,"panel.saved":`已保存`,"panel.saveError":`保存失败`,"panel.save.retry":`重试`,"panel.conflict.title":`文件已在别处被修改`,"panel.conflict.reload":`重新加载`,"panel.conflict.force":`强制覆盖`,"panel.unsaved.title":`有未保存的修改`,"panel.unsaved.discard":`放弃修改`,"panel.unsaved.keep":`继续编辑`,"chip.preview":`预览 {name}`,"chip.open":`打开 {name}`,"action.label":`预览文档`,"action.open":`预览 {name}`,copy:`复制`,copied:`已复制`,footnotes:`脚注`},mx={"panel.title":`Markdown preview`,"panel.close":`Close preview`,"panel.loading":`Loading…`,"panel.empty":`No document to preview`,"panel.error":`Failed to load`,"panel.retry":`Retry`,"panel.edit":`Edit`,"panel.save":`Save`,"panel.cancel":`Cancel editing`,"panel.saved":`Saved`,"panel.saveError":`Save failed`,"panel.save.retry":`Retry`,"panel.conflict.title":`The file changed elsewhere`,"panel.conflict.reload":`Reload`,"panel.conflict.force":`Overwrite`,"panel.unsaved.title":`You have unsaved changes`,"panel.unsaved.discard":`Discard changes`,"panel.unsaved.keep":`Keep editing`,"chip.preview":`Preview {name}`,"chip.open":`Open {name}`,"action.label":`Preview documents`,"action.open":`Preview {name}`,copy:`Copy`,copied:`Copied`,footnotes:`Footnotes`};function hx(e,t){let n=e.data.get(`deliverables`);if(n===void 0)return[];let r=[],i=new Set;for(let e of n.produced)e.seq>t||i.has(e.path)||(i.add(e.path),r.push(e.path));return r}function gx(e){let t=hx(e.turn,e.seq);return t.some(us)?ds(t):null}let _x=!1;function vx(){if(_x||typeof document>`u`)return;let e=document.createElement(`style`);e.setAttribute(`data-plugin-css`,`md-preview`),e.textContent=`
65
65
  .dsh-md-preview-dock {
66
66
  position: absolute;
67
67
  inset: 0;
package/lib/index.js CHANGED
@@ -146,24 +146,7 @@ let MdPreviewService = (() => {
146
146
  * @throws RemoteError with a stable MdPreview failure code.
147
147
  */
148
148
  async read(sessionId, path, signal) {
149
- if (path.trim().length === 0) throw failure("md-preview/bad-request", "mdPreview/read requires a non-empty path");
150
- if (!isAllowedExtension(path, this.config.allowedExtensions)) throw failure("md-preview/unsupported-extension", `mdPreview/read refuses non-previewable path "${path}"`);
151
- const session = this.ctx.sessions.get(sessionId);
152
- if (session === void 0) throw failure("md-preview/unknown-session", `mdPreview/read cannot resolve session "${sessionId}"`);
153
- const cwd = session.header.cwd;
154
- if (cwd === void 0) throw failure("md-preview/no-workspace", `mdPreview/read session "${sessionId}" has no working directory`);
155
- const root = await this.resolveWorkspacePath(cwd, signal);
156
- let target;
157
- try {
158
- target = await this.resolveWorkspacePath(path, signal, cwd);
159
- } catch (error) {
160
- if (signal.aborted) throw error;
161
- throw failure("md-preview/not-found", `mdPreview/read cannot resolve path "${path}"`);
162
- }
163
- if (!this.ctx.fs.contains(root, target)) throw failure("md-preview/forbidden", "mdPreview/read refuses paths outside the session workspace");
164
- const info = await this.ctx.fs.stat(target, signal);
165
- if (info === void 0) throw failure("md-preview/not-found", `mdPreview/read cannot find "${path}"`);
166
- if (info.type !== "file") throw failure("md-preview/unsupported-extension", `mdPreview/read target "${path}" is not a regular file`);
149
+ const { target, info } = await this.resolveWorkspaceTarget(sessionId, path, signal, "read");
167
150
  if (info.size !== void 0 && info.size > this.config.maxBytes) throw failure("md-preview/too-large", `mdPreview/read refuses "${path}" above the configured byte cap`);
168
151
  let content;
169
152
  try {
@@ -192,24 +175,7 @@ let MdPreviewService = (() => {
192
175
  * @throws RemoteError with a stable MdPreview failure code.
193
176
  */
194
177
  async write(sessionId, path, content, fingerprint, force, signal) {
195
- if (path.trim().length === 0) throw failure("md-preview/bad-request", "mdPreview/write requires a non-empty path");
196
- if (!isAllowedExtension(path, this.config.allowedExtensions)) throw failure("md-preview/unsupported-extension", `mdPreview/write refuses non-previewable path "${path}"`);
197
- const session = this.ctx.sessions.get(sessionId);
198
- if (session === void 0) throw failure("md-preview/unknown-session", `mdPreview/write cannot resolve session "${sessionId}"`);
199
- const cwd = session.header.cwd;
200
- if (cwd === void 0) throw failure("md-preview/no-workspace", `mdPreview/write session "${sessionId}" has no working directory`);
201
- const root = await this.resolveWorkspacePath(cwd, signal);
202
- let target;
203
- try {
204
- target = await this.resolveWorkspacePath(path, signal, cwd);
205
- } catch (error) {
206
- if (signal.aborted) throw error;
207
- throw failure("md-preview/not-found", `mdPreview/write cannot resolve path "${path}"`);
208
- }
209
- if (!this.ctx.fs.contains(root, target)) throw failure("md-preview/forbidden", "mdPreview/write refuses paths outside the session workspace");
210
- const info = await this.ctx.fs.stat(target, signal);
211
- if (info === void 0) throw failure("md-preview/not-found", `mdPreview/write cannot find "${path}"`);
212
- if (info.type !== "file") throw failure("md-preview/unsupported-extension", `mdPreview/write target "${path}" is not a regular file`);
178
+ const { target, cwd } = await this.resolveWorkspaceTarget(sessionId, path, signal, "write");
213
179
  if (content.length > this.config.maxBytes) throw failure("md-preview/too-large", `mdPreview/write refuses "${path}" above the configured byte cap`);
214
180
  if (fingerprint === void 0 && !force) throw failure("md-preview/bad-request", "mdPreview/write requires a fingerprint or force");
215
181
  const expected = fingerprint === void 0 ? void 0 : {
@@ -237,12 +203,45 @@ let MdPreviewService = (() => {
237
203
  fingerprint: outcome.version
238
204
  };
239
205
  }
240
- /** Resolve one path against the workspace, with a plain not-found mapping. */
241
- async resolveWorkspacePath(path, signal, cwd) {
242
- return await this.ctx.fs.resolve(path, cwd === void 0 ? { signal } : {
243
- cwd,
244
- signal
245
- });
206
+ /**
207
+ * The shared authority preamble of the remote methods: resolve a path to a
208
+ * live, contained, regular workspace file, or reject it with the stable
209
+ * failure code. One home for the check order and the aborted-rethrow
210
+ * convention; `op` only names the calling method in diagnostics.
211
+ * @param sessionId - owning session; its header cwd roots the resolution.
212
+ * @param path - path as it appeared in the conversation.
213
+ * @param signal - caller cancellation carried through every fs call.
214
+ * @param op - calling method name for diagnostic messages.
215
+ * @returns the resolved target, its stat info, and the workspace cwd.
216
+ * @throws RemoteError with a stable MdPreview failure code.
217
+ */
218
+ async resolveWorkspaceTarget(sessionId, path, signal, op) {
219
+ if (path.trim().length === 0) throw failure("md-preview/bad-request", `mdPreview/${op} requires a non-empty path`);
220
+ if (!isAllowedExtension(path, this.config.allowedExtensions)) throw failure("md-preview/unsupported-extension", `mdPreview/${op} refuses non-previewable path "${path}"`);
221
+ const session = this.ctx.sessions.get(sessionId);
222
+ if (session === void 0) throw failure("md-preview/unknown-session", `mdPreview/${op} cannot resolve session "${sessionId}"`);
223
+ const cwd = session.header.cwd;
224
+ if (cwd === void 0) throw failure("md-preview/no-workspace", `mdPreview/${op} session "${sessionId}" has no working directory`);
225
+ const root = await this.ctx.fs.resolve(cwd, { signal });
226
+ let target;
227
+ try {
228
+ target = await this.ctx.fs.resolve(path, {
229
+ cwd,
230
+ signal
231
+ });
232
+ } catch (error) {
233
+ if (signal.aborted) throw error;
234
+ throw failure("md-preview/not-found", `mdPreview/${op} cannot resolve path "${path}"`);
235
+ }
236
+ if (!this.ctx.fs.contains(root, target)) throw failure("md-preview/forbidden", `mdPreview/${op} refuses paths outside the session workspace`);
237
+ const info = await this.ctx.fs.stat(target, signal);
238
+ if (info === void 0) throw failure("md-preview/not-found", `mdPreview/${op} cannot find "${path}"`);
239
+ if (info.type !== "file") throw failure("md-preview/unsupported-extension", `mdPreview/${op} target "${path}" is not a regular file`);
240
+ return {
241
+ target,
242
+ info,
243
+ cwd
244
+ };
246
245
  }
247
246
  };
248
247
  })();
@@ -50,7 +50,18 @@ export declare class MdPreviewService extends TypertRemoteService {
50
50
  * @throws RemoteError with a stable MdPreview failure code.
51
51
  */
52
52
  write(sessionId: SessionId, path: string, content: string, fingerprint: string | undefined, force: boolean, signal: AbortSignal): Promise<MdPreviewWriteResult>;
53
- /** Resolve one path against the workspace, with a plain not-found mapping. */
54
- private resolveWorkspacePath;
53
+ /**
54
+ * The shared authority preamble of the remote methods: resolve a path to a
55
+ * live, contained, regular workspace file, or reject it with the stable
56
+ * failure code. One home for the check order and the aborted-rethrow
57
+ * convention; `op` only names the calling method in diagnostics.
58
+ * @param sessionId - owning session; its header cwd roots the resolution.
59
+ * @param path - path as it appeared in the conversation.
60
+ * @param signal - caller cancellation carried through every fs call.
61
+ * @param op - calling method name for diagnostic messages.
62
+ * @returns the resolved target, its stat info, and the workspace cwd.
63
+ * @throws RemoteError with a stable MdPreview failure code.
64
+ */
65
+ private resolveWorkspaceTarget;
55
66
  }
56
67
  //# sourceMappingURL=remote.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benz-ai-x/dsh-md-preview",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "description": "DSH markdown preview: clicking a markdown document in the conversation opens a rendered preview panel docked to the right of the chat.",
5
5
  "license": "MIT",
6
6
  "repository": {