@vpxa/aikit 0.1.169 → 0.1.171
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/package.json +1 -1
- package/packages/blocks-core/dist/index.js +1 -1
- package/packages/present/dist/index.html +1 -1
- package/packages/server/viewers/canvas.html +1 -1
- package/packages/server/viewers/report-template.html +1 -1
- package/packages/server/viewers/tour-viewer.html +1 -1
- package/scaffold/dist/definitions/flows.mjs +47 -23
- package/scaffold/dist/definitions/protocols.mjs +6 -1
- package/scaffold/dist/definitions/skills/brainstorming.mjs +5 -5
- package/scaffold/dist/definitions/skills/c4-architecture.mjs +1 -1
- package/scaffold/dist/definitions/skills/docs.mjs +1 -1
- package/scaffold/dist/definitions/skills/requirements-clarity.mjs +1 -1
package/package.json
CHANGED
|
@@ -22,7 +22,7 @@ ${h}
|
|
|
22
22
|
}
|
|
23
23
|
`,Re=/^(#{1,6})\s+(.+)$/,ze=/^(?:(?:-\s*){3,}|(?:\*\s*){3,}|(?:_\s*){3,})$/;function Be(e){return e.length?`<p>${e.map(e=>s(e)).join(`<br>`)}</p>`:``}function Ve(e,t){let r=String(e.value??``);if(r.trimStart().startsWith(`<`))return`<div class="bk-markdown">${r}</div>`;let i=[],a=[],o=!1,s=[],c=``,l=()=>{let e=Be(a);e&&(i.push(e),a.length=0)};for(let e of r.split(/\r?\n/)){let t=e.trim();if(t.startsWith("```")){if(!o)l(),o=!0,c=t.slice(3).trim(),s=[];else{let e=c?` class="${n(c)}"`:``;i.push(`<pre class="bk-code"><code${e}>${n(s.join(`
|
|
24
24
|
`))}</code></pre>`),o=!1,s=[],c=``}continue}if(o){s.push(e);continue}if(!t){l();continue}let r=t.match(Re);if(r){l();let[,e,t]=r,a=e.length;i.push(`<h${a} class="bk-heading bk-heading--${a}">${n(t)}</h${a}>`);continue}if(ze.test(t)){l(),i.push(`<hr>`);continue}a.push(e)}if(l(),o&&s.length>0){let e=c?` class="${n(c)}"`:``;i.push(`<pre class="bk-code"><code${e}>${n(s.join(`
|
|
25
|
-
`))}</code></pre>`)}return`<div class="bk-markdown">${i.join(``)}</div>`}function He(e,t){return`<pre class="bk-mermaid mermaid">${n(String(e.value??``))}</pre>`}function Ue(e){if(e==null||e===``)return``;let t=a(e),r=Number(String(e).replace(/[^0-9.-]/g,``));return`<span class="bk-metric-trend">${Number.isNaN(r)?``:r>0?`↑ `:r<0?`↓ `:`→ `}${n(t)}</span>`}function We(e,t){return`<div class="bk-metrics">${f(e).map(e=>`<article class="bk-metric" data-tone="${u(e.status)}"><div class="bk-metric-label">${n(e.label)}</div><div class="bk-metric-value">${n(a(e.value))}</div>${Ue(e.trend)}</article>`).join(``)}</div>`}function Ge(e,t){return`<p class="bk-paragraph">${n(String(e.value??e.text??``))}</p>`}function Ke(e){let t=o(e);if(Array.isArray(t))return t;if(t&&typeof t==`object`){if(Array.isArray(t.items))return t.items;if(`value`in t)return[t]}return[]}function qe(e,t){return`<div class="bk-progress">${Ke(e.value).map(e=>{let t=Math.max(1,Number(e.max)||100),r=Math.max(0,Number(e.value)||0),i=Math.round(Math.min(r/t*100,100)),a=u(e.color);return`<div class="bk-progress-item"><div class="bk-progress-meta"><span>${n(e.label)}</span><span>${i}%</span></div><div class="bk-progress-track"><span class="bk-progress-bar" style="width:${i}%;background:var(--dt-${a}-emphasis);box-shadow:0 0 16px var(--dt-glow-${a});"></span></div></div>`}).join(``)}</div>`}function Je(e){if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e??``)}}function Ye(e,t){return`<pre class="bk-prompt">${n(Je(e.value))}</pre>`}function Xe(e,t){return`<hr class="bk-separator">`}function Ze(e){let t=o(e);return Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.items)?t.items:[]}function Qe(e,t){return`<div class="bk-status-board">${Ze(e.value).map(e=>{let t=e.items.map(e=>{let t=u(e.status),r=e.description?`<div class="bk-status-description">${n(e.description)}</div>`:``;return`<div class="bk-status-item"><span class="bk-status-pill" style="background:var(--dt-${t}-subtle);color:var(--dt-${t}-fg);">${n(e.status??`pending`)}</span><div class="bk-status-copy"><div class="bk-status-label">${n(e.label??e.name??``)}</div>${r}</div></div>`}).join(``);return`<section class="bk-status-category"><div class="bk-status-category-title">${n(e.category)}</div><div class="bk-status-items">${t}</div></section>`}).join(``)}</div>`}function $e(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _(e){let t=(e??[]).map(e=>{if($e(e)){let t=typeof e.key==`string`?e.key:String(e.label??``);return{key:t,label:typeof e.label==`string`?e.label:t}}let t=String(e);return{key:t,label:t}});return{headers:t.map(e=>e.label),keys:t.map(e=>e.key)}}function et(e){if(Array.isArray(e.columns)){let{headers:t,keys:n}=_(e.columns),r=Array.isArray(e.rows)?e.rows:[];return r.length>0&&Array.isArray(r[0])?{headers:t,keys:n,rows:r.map(e=>Object.fromEntries(n.map((t,n)=>[t,e[n]??``])))}:r.length>0&&typeof r[0]==`object`&&r[0]!==null?{headers:t,keys:n,rows:r}:{headers:t,keys:n,rows:[]}}let t=o(e.value);if(Array.isArray(t)){if(t.length>0&&typeof t[0]==`object`&&t[0]!==null&&!Array.isArray(t[0])){let n=t,r=Array.isArray(e.headers)?e.headers.map(String):Object.keys(n[0]??{});return{headers:r,keys:r,rows:n}}if(t.length>0&&Array.isArray(t[0])){let[n,...r]=t,i=Array.isArray(e.headers)?e.headers.map(String):n.map(String);return{headers:i,keys:i,rows:r.map(e=>Object.fromEntries(i.map((t,n)=>[t,e[n]])))}}}if(t&&typeof t==`object`){let n=Array.isArray(e.headers)?e.headers.map(String):Array.isArray(t.headers)?t.headers.map(String):[],r=Array.isArray(t.rows)?t.rows:[];if(r.length>0&&Array.isArray(r[0]))return{headers:n,keys:n,rows:r.map(e=>Object.fromEntries(n.map((t,n)=>[t,e[n]])))};if(r.length>0&&typeof r[0]==`object`&&r[0]!==null)return{headers:n,keys:n,rows:r}}if(Array.isArray(e.headers)){let t=e.headers.map(String);return{headers:t,keys:t,rows:[]}}if(Array.isArray(e.columns)){let{headers:t,keys:n}=_(e.columns);return{headers:t,keys:n,rows:[]}}return{headers:[],keys:[],rows:[]}}function tt(e,t){let{headers:r,keys:i,rows:o}=et(e);return r.length===0?`<div class="bk-table-wrap"><table class="bk-table"><tbody></tbody></table></div>`:`<div class="bk-table-wrap"><table class="bk-table">${`<thead><tr>${r.map(e=>`<th>${n(e)}</th>`).join(``)}</tr></thead>`}<tbody>${o.map(e=>`<tr>${i.map(t=>`<td>${n(a(e[t]))}</td>`).join(``)}</tr>`).join(``)}</tbody></table></div>`}function nt(e){let t=o(e);return Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.items)?t.items:[]}function rt(e,t){return`<div class="bk-tags">${nt(e.value).map(e=>{let t=typeof e==`string`?e:String(e.text??e.label??``),r=u(typeof e==`string`?void 0:e.status??e.tone??e.color);return`<span class="bk-tag" style="background:var(--dt-${r}-subtle);color:var(--dt-${r}-fg);">${n(t)}</span>`}).join(``)}</div>`}function it(e,t){return`<div class="bk-text">${s(String(e.value??``)).replace(/\n/g,`<br>`)}</div>`}function at(e,t){return`<div class="bk-timeline">${f(e).map(e=>{let t=u(e.status),r=e.description?`<div class="bk-timeline-description">${n(e.description)}</div>`:``,i=e.timestamp?`<div class="bk-timeline-timestamp">${n(e.timestamp)}</div>`:``;return`<article class="bk-timeline-item" data-tone="${t}"><span class="bk-timeline-dot" style="background:${`var(--dt-${t}-emphasis)`};box-shadow:0 0 0 6px var(--dt-glow-${t});"></span><div class="bk-timeline-title">${n(e.title)}</div>${r}${i}</article>`}).join(``)}</div>`}function v(e,t){if(Array.isArray(e)){let r=e.map(e=>v(e)).join(``);return t?`<details class="bk-tree-node" open><summary>${n(t)}</summary><div class="bk-tree-children">${r}</div></details>`:`<div class="bk-tree-children">${r}</div>`}if(e&&typeof e==`object`){let r=e;if(typeof r.name==`string`)return v(r.children??[],r.name);let i=Object.entries(r).map(([e,t])=>v(t,e)).join(``);return t?`<details class="bk-tree-node" open><summary>${n(t)}</summary><div class="bk-tree-children">${i}</div></details>`:`<div class="bk-tree-children">${i}</div>`}let r=n(a(e));return t?`<div class="bk-tree-leaf"><span class="bk-tree-key">${n(t)}</span><span class="bk-tree-value">${r}</span></div>`:`<div class="bk-tree-leaf">${r}</div>`}function ot(e,t){return`<div class="bk-tree">${v(o(e.value))}</div>`}const y={"--dt-bg-primary":`#ffffff`,"--dt-bg-secondary":`#f6f8fa`,"--dt-bg-tertiary":`#eaeef2`,"--dt-bg-canvas":`#f0f0f0`,"--dt-text-primary":`#1f2328`,"--dt-text-secondary":`#656d76`,"--dt-text-tertiary":`#8b949e`,"--dt-border-default":`#d0d7de`,"--dt-border-muted":`#d8dee4`,"--dt-border-subtle":`#eaeef2`,"--dt-accent-fg":`#0969da`,"--dt-accent-emphasis":`#0550ae`,"--dt-accent-muted":`rgba(9, 105, 218, 0.4)`,"--dt-accent-subtle":`rgba(9, 105, 218, 0.1)`,"--dt-success-fg":`#1a7f37`,"--dt-success-emphasis":`#116329`,"--dt-success-muted":`rgba(26, 127, 55, 0.4)`,"--dt-success-subtle":`rgba(26, 127, 55, 0.1)`,"--dt-danger-fg":`#cf222e`,"--dt-danger-emphasis":`#a40e26`,"--dt-danger-muted":`rgba(207, 34, 46, 0.4)`,"--dt-danger-subtle":`rgba(207, 34, 46, 0.1)`,"--dt-warning-fg":`#9a6700`,"--dt-warning-emphasis":`#7d4e00`,"--dt-warning-muted":`rgba(154, 103, 0, 0.4)`,"--dt-warning-subtle":`rgba(154, 103, 0, 0.1)`,"--dt-purple-fg":`#8250df`,"--dt-purple-emphasis":`#6639ba`,"--dt-purple-muted":`rgba(130, 80, 223, 0.4)`,"--dt-purple-subtle":`rgba(130, 80, 223, 0.1)`,"--dt-font-sans":`'Segoe UI', system-ui, -apple-system, sans-serif`,"--dt-font-mono":`'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, monospace`,"--dt-font-size-xs":`0.75rem`,"--dt-font-size-sm":`0.8125rem`,"--dt-font-size-base":`0.875rem`,"--dt-font-size-lg":`1rem`,"--dt-font-size-xl":`1.25rem`,"--dt-font-size-2xl":`1.5rem`,"--dt-font-size-3xl":`2rem`,"--dt-space-1":`0.25rem`,"--dt-space-2":`0.5rem`,"--dt-space-3":`0.75rem`,"--dt-space-4":`1rem`,"--dt-space-6":`1.5rem`,"--dt-space-8":`2rem`,"--dt-space-12":`3rem`,"--dt-space-16":`4rem`,"--dt-radius-sm":`6px`,"--dt-radius-md":`8px`,"--dt-radius-lg":`12px`,"--dt-radius-xl":`16px`,"--dt-shadow-sm":`0 1px 2px rgba(0, 0, 0, 0.07)`,"--dt-shadow-md":`0 3px 6px rgba(0, 0, 0, 0.1)`,"--dt-shadow-lg":`0 8px 24px rgba(0, 0, 0, 0.12)`,"--dt-glow-accent":`rgba(9, 105, 218, 0.08)`,"--dt-glow-success":`rgba(26, 127, 55, 0.08)`,"--dt-glow-danger":`rgba(207, 34, 46, 0.08)`,"--dt-glow-warning":`rgba(154, 103, 0, 0.08)`,"--dt-glow-purple":`rgba(130, 80, 223, 0.08)`,"--dt-transition-fast":`150ms ease`,"--dt-transition-normal":`200ms ease`},b={"--dt-bg-primary":`#0d1117`,"--dt-bg-secondary":`#161b22`,"--dt-bg-tertiary":`#21262d`,"--dt-bg-canvas":`#010409`,"--dt-text-primary":`#f0f6fc`,"--dt-text-secondary":`#9198a1`,"--dt-text-tertiary":`#656d76`,"--dt-border-default":`#30363d`,"--dt-border-muted":`#21262d`,"--dt-border-subtle":`#1f242d`,"--dt-accent-fg":`#58a6ff`,"--dt-accent-emphasis":`#1f6feb`,"--dt-accent-muted":`rgba(56, 139, 253, 0.4)`,"--dt-accent-subtle":`rgba(56, 139, 253, 0.15)`,"--dt-success-fg":`#3fb950`,"--dt-success-emphasis":`#238636`,"--dt-success-muted":`rgba(63, 185, 80, 0.4)`,"--dt-success-subtle":`rgba(63, 185, 80, 0.15)`,"--dt-danger-fg":`#f85149`,"--dt-danger-emphasis":`#da3633`,"--dt-danger-muted":`rgba(248, 81, 73, 0.4)`,"--dt-danger-subtle":`rgba(248, 81, 73, 0.15)`,"--dt-warning-fg":`#d29922`,"--dt-warning-emphasis":`#bb8009`,"--dt-warning-muted":`rgba(210, 153, 34, 0.4)`,"--dt-warning-subtle":`rgba(210, 153, 34, 0.15)`,"--dt-purple-fg":`#bc8cff`,"--dt-purple-emphasis":`#a371f7`,"--dt-purple-muted":`rgba(188, 140, 255, 0.4)`,"--dt-purple-subtle":`rgba(188, 140, 255, 0.15)`,"--dt-shadow-sm":`0 1px 2px rgba(1, 4, 9, 0.35)`,"--dt-shadow-md":`0 3px 6px rgba(1, 4, 9, 0.4)`,"--dt-shadow-lg":`0 8px 24px rgba(1, 4, 9, 0.45)`,"--dt-glow-accent":`rgba(56, 139, 253, 0.14)`,"--dt-glow-success":`rgba(63, 185, 80, 0.14)`,"--dt-glow-danger":`rgba(248, 81, 73, 0.14)`,"--dt-glow-warning":`rgba(210, 153, 34, 0.14)`,"--dt-glow-purple":`rgba(188, 140, 255, 0.14)`},st=`--dt-bg-primary.--dt-bg-secondary.--dt-bg-tertiary.--dt-bg-canvas.--dt-text-primary.--dt-text-secondary.--dt-text-tertiary.--dt-border-default.--dt-border-muted.--dt-border-subtle.--dt-accent-fg.--dt-accent-emphasis.--dt-accent-muted.--dt-accent-subtle.--dt-success-fg.--dt-success-emphasis.--dt-success-muted.--dt-success-subtle.--dt-danger-fg.--dt-danger-emphasis.--dt-danger-muted.--dt-danger-subtle.--dt-warning-fg.--dt-warning-emphasis.--dt-warning-muted.--dt-warning-subtle.--dt-purple-fg.--dt-purple-emphasis.--dt-purple-muted.--dt-purple-subtle.--dt-font-sans.--dt-font-mono.--dt-font-size-xs.--dt-font-size-sm.--dt-font-size-base.--dt-font-size-lg.--dt-font-size-xl.--dt-font-size-2xl.--dt-font-size-3xl.--dt-space-1.--dt-space-2.--dt-space-3.--dt-space-4.--dt-space-6.--dt-space-8.--dt-space-12.--dt-space-16.--dt-radius-sm.--dt-radius-md.--dt-radius-lg.--dt-radius-xl.--dt-shadow-sm.--dt-shadow-md.--dt-shadow-lg.--dt-glow-accent.--dt-glow-success.--dt-glow-danger.--dt-glow-warning.--dt-glow-purple.--dt-transition-fast.--dt-transition-normal`.split(`.`),ct=`--dt-bg-primary.--dt-bg-secondary.--dt-bg-tertiary.--dt-bg-canvas.--dt-text-primary.--dt-text-secondary.--dt-text-tertiary.--dt-border-default.--dt-border-muted.--dt-border-subtle.--dt-accent-fg.--dt-accent-emphasis.--dt-accent-muted.--dt-accent-subtle.--dt-success-fg.--dt-success-emphasis.--dt-success-muted.--dt-success-subtle.--dt-danger-fg.--dt-danger-emphasis.--dt-danger-muted.--dt-danger-subtle.--dt-warning-fg.--dt-warning-emphasis.--dt-warning-muted.--dt-warning-subtle.--dt-purple-fg.--dt-purple-emphasis.--dt-purple-muted.--dt-purple-subtle.--dt-shadow-sm.--dt-shadow-md.--dt-shadow-lg.--dt-glow-accent.--dt-glow-success.--dt-glow-danger.--dt-glow-warning.--dt-glow-purple`.split(`.`),x={actions:`
|
|
25
|
+
`))}</code></pre>`)}return`<div class="bk-markdown">${i.join(``)}</div>`}function He(e,t){return`<pre class="bk-mermaid mermaid">${n(String(e.value??``))}</pre>`}function Ue(e){if(e==null||e===``)return``;let t=a(e),r=Number(String(e).replace(/[^0-9.-]/g,``));return`<span class="bk-metric-trend">${Number.isNaN(r)?``:r>0?`↑ `:r<0?`↓ `:`→ `}${n(t)}</span>`}function We(e,t){return`<div class="bk-metrics">${f(e).map(e=>`<article class="bk-metric" data-tone="${u(e.status)}"><div class="bk-metric-label">${n(e.label)}</div><div class="bk-metric-value">${n(a(e.value))}</div>${Ue(e.trend)}</article>`).join(``)}</div>`}function Ge(e,t){return`<p class="bk-paragraph">${n(String(e.value??e.text??``))}</p>`}function Ke(e){let t=o(e);if(Array.isArray(t))return t;if(t&&typeof t==`object`){if(Array.isArray(t.items))return t.items;if(`value`in t)return[t]}return[]}function qe(e,t){return`<div class="bk-progress">${Ke(e.value).map(e=>{let t=Math.max(1,Number(e.max)||100),r=Math.max(0,Number(e.value)||0),i=Math.round(Math.min(r/t*100,100)),a=u(e.color);return`<div class="bk-progress-item"><div class="bk-progress-meta"><span>${n(e.label)}</span><span>${i}%</span></div><div class="bk-progress-track"><span class="bk-progress-bar" style="width:${i}%;background:var(--dt-${a}-emphasis);box-shadow:0 0 16px var(--dt-glow-${a});"></span></div></div>`}).join(``)}</div>`}function Je(e){if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e??``)}}function Ye(e,t){return`<pre class="bk-prompt">${n(Je(e.value))}</pre>`}function Xe(e,t){return`<hr class="bk-separator">`}function Ze(e){let t=o(e);return Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.items)?t.items:[]}function Qe(e,t){return`<div class="bk-status-board">${Ze(e.value).map(e=>{let t=e.items.map(e=>{let t=u(e.status),r=e.description?`<div class="bk-status-description">${n(e.description)}</div>`:``;return`<div class="bk-status-item"><span class="bk-status-pill" style="background:var(--dt-${t}-subtle);color:var(--dt-${t}-fg);">${n(e.status??`pending`)}</span><div class="bk-status-copy"><div class="bk-status-label">${n(e.label??e.name??``)}</div>${r}</div></div>`}).join(``);return`<section class="bk-status-category"><div class="bk-status-category-title">${n(e.category)}</div><div class="bk-status-items">${t}</div></section>`}).join(``)}</div>`}function $e(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _(e){let t=(e??[]).map(e=>{if($e(e)){let t=typeof e.key==`string`?e.key:String(e.label??``);return{key:t,label:typeof e.label==`string`?e.label:t}}let t=String(e);return{key:t,label:t}});return{headers:t.map(e=>e.label),keys:t.map(e=>e.key)}}function et(e){if(Array.isArray(e.columns)){let{headers:t,keys:n}=_(e.columns),r=Array.isArray(e.rows)?e.rows:[];return r.length>0&&Array.isArray(r[0])?{headers:t,keys:n,rows:r.map(e=>Object.fromEntries(n.map((t,n)=>[t,e[n]??``])))}:r.length>0&&typeof r[0]==`object`&&r[0]!==null?{headers:t,keys:n,rows:r}:{headers:t,keys:n,rows:[]}}let t=o(e.value);if(Array.isArray(t)){if(t.length>0&&typeof t[0]==`object`&&t[0]!==null&&!Array.isArray(t[0])){let n=t,r=Array.isArray(e.headers)?e.headers.map(String):Object.keys(n[0]??{});return{headers:r,keys:r,rows:n}}if(t.length>0&&Array.isArray(t[0])){let[n,...r]=t,i=Array.isArray(e.headers)?e.headers.map(String):n.map(String);return{headers:i,keys:i,rows:r.map(e=>Object.fromEntries(i.map((t,n)=>[t,e[n]])))}}}if(t&&typeof t==`object`){let n=Array.isArray(e.headers)?e.headers.map(String):Array.isArray(t.headers)?t.headers.map(String):[],r=Array.isArray(t.rows)?t.rows:[];if(r.length>0&&Array.isArray(r[0]))return{headers:n,keys:n,rows:r.map(e=>Object.fromEntries(n.map((t,n)=>[t,e[n]])))};if(r.length>0&&typeof r[0]==`object`&&r[0]!==null)return{headers:n,keys:n,rows:r}}if(Array.isArray(e.headers)){let t=e.headers.map(String);return{headers:t,keys:t,rows:[]}}if(Array.isArray(e.columns)){let{headers:t,keys:n}=_(e.columns);return{headers:t,keys:n,rows:[]}}return{headers:[],keys:[],rows:[]}}function tt(e,t){let{headers:r,keys:i,rows:o}=et(e);return r.length===0?`<div class="bk-table-wrap"><table class="bk-table"><tbody></tbody></table></div>`:`<div class="bk-table-wrap"><table class="bk-table">${`<thead><tr>${r.map(e=>`<th>${n(e)}</th>`).join(``)}</tr></thead>`}<tbody>${o.map(e=>`<tr>${i.map(t=>`<td>${n(a(e[t]))}</td>`).join(``)}</tr>`).join(``)}</tbody></table></div>`}function nt(e){let t=o(e);return Array.isArray(t)?t:t&&typeof t==`object`&&Array.isArray(t.items)?t.items:[]}function rt(e,t){return`<div class="bk-tags">${nt(e.value).map(e=>{let t=typeof e==`string`?e:String(e.text??e.label??``),r=u(typeof e==`string`?void 0:e.status??e.tone??e.color);return`<span class="bk-tag" style="background:var(--dt-${r}-subtle);color:var(--dt-${r}-fg);">${n(t)}</span>`}).join(``)}</div>`}function it(e,t){return`<div class="bk-text">${s(String(e.value??``)).replace(/\n/g,`<br>`)}</div>`}function at(e,t){return`<div class="bk-timeline">${f(e).map(e=>{let t=u(e.status),r=e.description?`<div class="bk-timeline-description">${n(e.description)}</div>`:``,i=e.timestamp?`<div class="bk-timeline-timestamp">${n(e.timestamp)}</div>`:``;return`<article class="bk-timeline-item" data-tone="${t}"><span class="bk-timeline-dot" style="background:${`var(--dt-${t}-emphasis)`};box-shadow:0 0 0 6px var(--dt-glow-${t});"></span><div class="bk-timeline-title">${n(e.title)}</div>${r}${i}</article>`}).join(``)}</div>`}function v(e,t){if(Array.isArray(e)){let r=e.map(e=>v(e)).join(``);return t?`<details class="bk-tree-node" open><summary>${n(t)}</summary><div class="bk-tree-children">${r}</div></details>`:`<div class="bk-tree-children">${r}</div>`}if(e&&typeof e==`object`){let r=e,i=typeof r.name==`string`?r.name:typeof r.label==`string`?r.label:typeof r.title==`string`?r.title:void 0;if(i!==void 0)return v(r.children??[],i);let a=Object.entries(r).map(([e,t])=>v(t,e)).join(``);return t?`<details class="bk-tree-node" open><summary>${n(t)}</summary><div class="bk-tree-children">${a}</div></details>`:`<div class="bk-tree-children">${a}</div>`}let r=n(a(e));return t?`<div class="bk-tree-leaf"><span class="bk-tree-key">${n(t)}</span><span class="bk-tree-value">${r}</span></div>`:`<div class="bk-tree-leaf">${r}</div>`}function ot(e,t){return`<div class="bk-tree">${v(o(e.value))}</div>`}const y={"--dt-bg-primary":`#ffffff`,"--dt-bg-secondary":`#f6f8fa`,"--dt-bg-tertiary":`#eaeef2`,"--dt-bg-canvas":`#f0f0f0`,"--dt-text-primary":`#1f2328`,"--dt-text-secondary":`#656d76`,"--dt-text-tertiary":`#8b949e`,"--dt-border-default":`#d0d7de`,"--dt-border-muted":`#d8dee4`,"--dt-border-subtle":`#eaeef2`,"--dt-accent-fg":`#0969da`,"--dt-accent-emphasis":`#0550ae`,"--dt-accent-muted":`rgba(9, 105, 218, 0.4)`,"--dt-accent-subtle":`rgba(9, 105, 218, 0.1)`,"--dt-success-fg":`#1a7f37`,"--dt-success-emphasis":`#116329`,"--dt-success-muted":`rgba(26, 127, 55, 0.4)`,"--dt-success-subtle":`rgba(26, 127, 55, 0.1)`,"--dt-danger-fg":`#cf222e`,"--dt-danger-emphasis":`#a40e26`,"--dt-danger-muted":`rgba(207, 34, 46, 0.4)`,"--dt-danger-subtle":`rgba(207, 34, 46, 0.1)`,"--dt-warning-fg":`#9a6700`,"--dt-warning-emphasis":`#7d4e00`,"--dt-warning-muted":`rgba(154, 103, 0, 0.4)`,"--dt-warning-subtle":`rgba(154, 103, 0, 0.1)`,"--dt-purple-fg":`#8250df`,"--dt-purple-emphasis":`#6639ba`,"--dt-purple-muted":`rgba(130, 80, 223, 0.4)`,"--dt-purple-subtle":`rgba(130, 80, 223, 0.1)`,"--dt-font-sans":`'Segoe UI', system-ui, -apple-system, sans-serif`,"--dt-font-mono":`'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, monospace`,"--dt-font-size-xs":`0.75rem`,"--dt-font-size-sm":`0.8125rem`,"--dt-font-size-base":`0.875rem`,"--dt-font-size-lg":`1rem`,"--dt-font-size-xl":`1.25rem`,"--dt-font-size-2xl":`1.5rem`,"--dt-font-size-3xl":`2rem`,"--dt-space-1":`0.25rem`,"--dt-space-2":`0.5rem`,"--dt-space-3":`0.75rem`,"--dt-space-4":`1rem`,"--dt-space-6":`1.5rem`,"--dt-space-8":`2rem`,"--dt-space-12":`3rem`,"--dt-space-16":`4rem`,"--dt-radius-sm":`6px`,"--dt-radius-md":`8px`,"--dt-radius-lg":`12px`,"--dt-radius-xl":`16px`,"--dt-shadow-sm":`0 1px 2px rgba(0, 0, 0, 0.07)`,"--dt-shadow-md":`0 3px 6px rgba(0, 0, 0, 0.1)`,"--dt-shadow-lg":`0 8px 24px rgba(0, 0, 0, 0.12)`,"--dt-glow-accent":`rgba(9, 105, 218, 0.08)`,"--dt-glow-success":`rgba(26, 127, 55, 0.08)`,"--dt-glow-danger":`rgba(207, 34, 46, 0.08)`,"--dt-glow-warning":`rgba(154, 103, 0, 0.08)`,"--dt-glow-purple":`rgba(130, 80, 223, 0.08)`,"--dt-transition-fast":`150ms ease`,"--dt-transition-normal":`200ms ease`},b={"--dt-bg-primary":`#0d1117`,"--dt-bg-secondary":`#161b22`,"--dt-bg-tertiary":`#21262d`,"--dt-bg-canvas":`#010409`,"--dt-text-primary":`#f0f6fc`,"--dt-text-secondary":`#9198a1`,"--dt-text-tertiary":`#656d76`,"--dt-border-default":`#30363d`,"--dt-border-muted":`#21262d`,"--dt-border-subtle":`#1f242d`,"--dt-accent-fg":`#58a6ff`,"--dt-accent-emphasis":`#1f6feb`,"--dt-accent-muted":`rgba(56, 139, 253, 0.4)`,"--dt-accent-subtle":`rgba(56, 139, 253, 0.15)`,"--dt-success-fg":`#3fb950`,"--dt-success-emphasis":`#238636`,"--dt-success-muted":`rgba(63, 185, 80, 0.4)`,"--dt-success-subtle":`rgba(63, 185, 80, 0.15)`,"--dt-danger-fg":`#f85149`,"--dt-danger-emphasis":`#da3633`,"--dt-danger-muted":`rgba(248, 81, 73, 0.4)`,"--dt-danger-subtle":`rgba(248, 81, 73, 0.15)`,"--dt-warning-fg":`#d29922`,"--dt-warning-emphasis":`#bb8009`,"--dt-warning-muted":`rgba(210, 153, 34, 0.4)`,"--dt-warning-subtle":`rgba(210, 153, 34, 0.15)`,"--dt-purple-fg":`#bc8cff`,"--dt-purple-emphasis":`#a371f7`,"--dt-purple-muted":`rgba(188, 140, 255, 0.4)`,"--dt-purple-subtle":`rgba(188, 140, 255, 0.15)`,"--dt-shadow-sm":`0 1px 2px rgba(1, 4, 9, 0.35)`,"--dt-shadow-md":`0 3px 6px rgba(1, 4, 9, 0.4)`,"--dt-shadow-lg":`0 8px 24px rgba(1, 4, 9, 0.45)`,"--dt-glow-accent":`rgba(56, 139, 253, 0.14)`,"--dt-glow-success":`rgba(63, 185, 80, 0.14)`,"--dt-glow-danger":`rgba(248, 81, 73, 0.14)`,"--dt-glow-warning":`rgba(210, 153, 34, 0.14)`,"--dt-glow-purple":`rgba(188, 140, 255, 0.14)`},st=`--dt-bg-primary.--dt-bg-secondary.--dt-bg-tertiary.--dt-bg-canvas.--dt-text-primary.--dt-text-secondary.--dt-text-tertiary.--dt-border-default.--dt-border-muted.--dt-border-subtle.--dt-accent-fg.--dt-accent-emphasis.--dt-accent-muted.--dt-accent-subtle.--dt-success-fg.--dt-success-emphasis.--dt-success-muted.--dt-success-subtle.--dt-danger-fg.--dt-danger-emphasis.--dt-danger-muted.--dt-danger-subtle.--dt-warning-fg.--dt-warning-emphasis.--dt-warning-muted.--dt-warning-subtle.--dt-purple-fg.--dt-purple-emphasis.--dt-purple-muted.--dt-purple-subtle.--dt-font-sans.--dt-font-mono.--dt-font-size-xs.--dt-font-size-sm.--dt-font-size-base.--dt-font-size-lg.--dt-font-size-xl.--dt-font-size-2xl.--dt-font-size-3xl.--dt-space-1.--dt-space-2.--dt-space-3.--dt-space-4.--dt-space-6.--dt-space-8.--dt-space-12.--dt-space-16.--dt-radius-sm.--dt-radius-md.--dt-radius-lg.--dt-radius-xl.--dt-shadow-sm.--dt-shadow-md.--dt-shadow-lg.--dt-glow-accent.--dt-glow-success.--dt-glow-danger.--dt-glow-warning.--dt-glow-purple.--dt-transition-fast.--dt-transition-normal`.split(`.`),ct=`--dt-bg-primary.--dt-bg-secondary.--dt-bg-tertiary.--dt-bg-canvas.--dt-text-primary.--dt-text-secondary.--dt-text-tertiary.--dt-border-default.--dt-border-muted.--dt-border-subtle.--dt-accent-fg.--dt-accent-emphasis.--dt-accent-muted.--dt-accent-subtle.--dt-success-fg.--dt-success-emphasis.--dt-success-muted.--dt-success-subtle.--dt-danger-fg.--dt-danger-emphasis.--dt-danger-muted.--dt-danger-subtle.--dt-warning-fg.--dt-warning-emphasis.--dt-warning-muted.--dt-warning-subtle.--dt-purple-fg.--dt-purple-emphasis.--dt-purple-muted.--dt-purple-subtle.--dt-shadow-sm.--dt-shadow-md.--dt-shadow-lg.--dt-glow-accent.--dt-glow-success.--dt-glow-danger.--dt-glow-warning.--dt-glow-purple`.split(`.`),x={actions:`
|
|
26
26
|
.bk-actions {
|
|
27
27
|
display: flex;
|
|
28
28
|
flex-wrap: wrap;
|
|
@@ -1540,7 +1540,7 @@ ${Ue}
|
|
|
1540
1540
|
.bk-timeline-timestamp {
|
|
1541
1541
|
color: var(--dt-text-secondary);
|
|
1542
1542
|
}
|
|
1543
|
-
`;function Bt(e,t){return`<div class="bk-timeline">${ee(e).map(e=>{let t=f(e.status),n=e.description?`<div class="bk-timeline-description">${i(e.description)}</div>`:``,r=e.timestamp?`<div class="bk-timeline-timestamp">${i(e.timestamp)}</div>`:``;return`<article class="bk-timeline-item" data-tone="${t}"><span class="bk-timeline-dot" style="background:${`var(--dt-${t}-emphasis)`};box-shadow:0 0 0 6px var(--dt-glow-${t});"></span><div class="bk-timeline-title">${i(e.title)}</div>${n}${r}</article>`}).join(``)}</div>`}function Vt(e,t){if(Array.isArray(e)){let n=e.map(e=>Vt(e)).join(``);return t?`<details class="bk-tree-node" open><summary>${i(t)}</summary><div class="bk-tree-children">${n}</div></details>`:`<div class="bk-tree-children">${n}</div>`}if(e&&typeof e==`object`){let n=e
|
|
1543
|
+
`;function Bt(e,t){return`<div class="bk-timeline">${ee(e).map(e=>{let t=f(e.status),n=e.description?`<div class="bk-timeline-description">${i(e.description)}</div>`:``,r=e.timestamp?`<div class="bk-timeline-timestamp">${i(e.timestamp)}</div>`:``;return`<article class="bk-timeline-item" data-tone="${t}"><span class="bk-timeline-dot" style="background:${`var(--dt-${t}-emphasis)`};box-shadow:0 0 0 6px var(--dt-glow-${t});"></span><div class="bk-timeline-title">${i(e.title)}</div>${n}${r}</article>`}).join(``)}</div>`}function Vt(e,t){if(Array.isArray(e)){let n=e.map(e=>Vt(e)).join(``);return t?`<details class="bk-tree-node" open><summary>${i(t)}</summary><div class="bk-tree-children">${n}</div></details>`:`<div class="bk-tree-children">${n}</div>`}if(e&&typeof e==`object`){let n=e,r=typeof n.name==`string`?n.name:typeof n.label==`string`?n.label:typeof n.title==`string`?n.title:void 0;if(r!==void 0)return Vt(n.children??[],r);let a=Object.entries(n).map(([e,t])=>Vt(t,e)).join(``);return t?`<details class="bk-tree-node" open><summary>${i(t)}</summary><div class="bk-tree-children">${a}</div></details>`:`<div class="bk-tree-children">${a}</div>`}let n=i(s(e));return t?`<div class="bk-tree-leaf"><span class="bk-tree-key">${i(t)}</span><span class="bk-tree-value">${n}</span></div>`:`<div class="bk-tree-leaf">${n}</div>`}var Ht=`
|
|
1544
1544
|
.bk-tree {
|
|
1545
1545
|
display: grid;
|
|
1546
1546
|
gap: var(--dt-space-2);
|
|
@@ -1218,7 +1218,7 @@ ${Sh}
|
|
|
1218
1218
|
.bk-timeline-timestamp {
|
|
1219
1219
|
color: var(--dt-text-secondary);
|
|
1220
1220
|
}
|
|
1221
|
-
`}));function Kh(e,t){if(Array.isArray(e)){let n=e.map(e=>Kh(e)).join(``);return t?`<details class="bk-tree-node" open><summary>${ph(t)}</summary><div class="bk-tree-children">${n}</div></details>`:`<div class="bk-tree-children">${n}</div>`}if(e&&typeof e==`object`){let n=e
|
|
1221
|
+
`}));function Kh(e,t){if(Array.isArray(e)){let n=e.map(e=>Kh(e)).join(``);return t?`<details class="bk-tree-node" open><summary>${ph(t)}</summary><div class="bk-tree-children">${n}</div></details>`:`<div class="bk-tree-children">${n}</div>`}if(e&&typeof e==`object`){let n=e,r=typeof n.name==`string`?n.name:typeof n.label==`string`?n.label:typeof n.title==`string`?n.title:void 0;if(r!==void 0)return Kh(n.children??[],r);let i=Object.entries(n).map(([e,t])=>Kh(t,e)).join(``);return t?`<details class="bk-tree-node" open><summary>${ph(t)}</summary><div class="bk-tree-children">${i}</div></details>`:`<div class="bk-tree-children">${i}</div>`}let n=ph(gh(e));return t?`<div class="bk-tree-leaf"><span class="bk-tree-key">${ph(t)}</span><span class="bk-tree-value">${n}</span></div>`:`<div class="bk-tree-leaf">${n}</div>`}function Dne(e,t){return`<div class="bk-tree">${Kh(_h(e.value))}</div>`}var qh,Jh=o((()=>{xh(),qh=`
|
|
1222
1222
|
.bk-tree {
|
|
1223
1223
|
display: grid;
|
|
1224
1224
|
gap: var(--dt-space-2);
|
|
@@ -1152,7 +1152,7 @@ ${Ne}
|
|
|
1152
1152
|
.bk-timeline-timestamp {
|
|
1153
1153
|
color: var(--dt-text-secondary);
|
|
1154
1154
|
}
|
|
1155
|
-
`;function Et(t,n){return`<div class="bk-timeline">${l(t).map(t=>{let n=c(t.status),r=t.description?`<div class="bk-timeline-description">${e(t.description)}</div>`:``,i=t.timestamp?`<div class="bk-timeline-timestamp">${e(t.timestamp)}</div>`:``;return`<article class="bk-timeline-item" data-tone="${n}"><span class="bk-timeline-dot" style="background:${`var(--dt-${n}-emphasis)`};box-shadow:0 0 0 6px var(--dt-glow-${n});"></span><div class="bk-timeline-title">${e(t.title)}</div>${r}${i}</article>`}).join(``)}</div>`}function C(t,n){if(Array.isArray(t)){let r=t.map(e=>C(e)).join(``);return n?`<details class="bk-tree-node" open><summary>${e(n)}</summary><div class="bk-tree-children">${r}</div></details>`:`<div class="bk-tree-children">${r}</div>`}if(t&&typeof t==`object`){let r=t
|
|
1155
|
+
`;function Et(t,n){return`<div class="bk-timeline">${l(t).map(t=>{let n=c(t.status),r=t.description?`<div class="bk-timeline-description">${e(t.description)}</div>`:``,i=t.timestamp?`<div class="bk-timeline-timestamp">${e(t.timestamp)}</div>`:``;return`<article class="bk-timeline-item" data-tone="${n}"><span class="bk-timeline-dot" style="background:${`var(--dt-${n}-emphasis)`};box-shadow:0 0 0 6px var(--dt-glow-${n});"></span><div class="bk-timeline-title">${e(t.title)}</div>${r}${i}</article>`}).join(``)}</div>`}function C(t,n){if(Array.isArray(t)){let r=t.map(e=>C(e)).join(``);return n?`<details class="bk-tree-node" open><summary>${e(n)}</summary><div class="bk-tree-children">${r}</div></details>`:`<div class="bk-tree-children">${r}</div>`}if(t&&typeof t==`object`){let r=t,i=typeof r.name==`string`?r.name:typeof r.label==`string`?r.label:typeof r.title==`string`?r.title:void 0;if(i!==void 0)return C(r.children??[],i);let a=Object.entries(r).map(([e,t])=>C(t,e)).join(``);return n?`<details class="bk-tree-node" open><summary>${e(n)}</summary><div class="bk-tree-children">${a}</div></details>`:`<div class="bk-tree-children">${a}</div>`}let i=e(r(t));return n?`<div class="bk-tree-leaf"><span class="bk-tree-key">${e(n)}</span><span class="bk-tree-value">${i}</span></div>`:`<div class="bk-tree-leaf">${i}</div>`}var Dt=`
|
|
1156
1156
|
.bk-tree {
|
|
1157
1157
|
display: grid;
|
|
1158
1158
|
gap: var(--dt-space-2);
|
|
@@ -1163,7 +1163,7 @@ ${Me}
|
|
|
1163
1163
|
.bk-timeline-timestamp {
|
|
1164
1164
|
color: var(--dt-text-secondary);
|
|
1165
1165
|
}
|
|
1166
|
-
`;function kt(e,t){return`<div class="bk-timeline">${E(e).map(e=>{let t=T(e.status),n=e.description?`<div class="bk-timeline-description">${_(e.description)}</div>`:``,r=e.timestamp?`<div class="bk-timeline-timestamp">${_(e.timestamp)}</div>`:``;return`<article class="bk-timeline-item" data-tone="${t}"><span class="bk-timeline-dot" style="background:${`var(--dt-${t}-emphasis)`};box-shadow:0 0 0 6px var(--dt-glow-${t});"></span><div class="bk-timeline-title">${_(e.title)}</div>${n}${r}</article>`}).join(``)}</div>`}function At(e,t){if(Array.isArray(e)){let n=e.map(e=>At(e)).join(``);return t?`<details class="bk-tree-node" open><summary>${_(t)}</summary><div class="bk-tree-children">${n}</div></details>`:`<div class="bk-tree-children">${n}</div>`}if(e&&typeof e==`object`){let n=e
|
|
1166
|
+
`;function kt(e,t){return`<div class="bk-timeline">${E(e).map(e=>{let t=T(e.status),n=e.description?`<div class="bk-timeline-description">${_(e.description)}</div>`:``,r=e.timestamp?`<div class="bk-timeline-timestamp">${_(e.timestamp)}</div>`:``;return`<article class="bk-timeline-item" data-tone="${t}"><span class="bk-timeline-dot" style="background:${`var(--dt-${t}-emphasis)`};box-shadow:0 0 0 6px var(--dt-glow-${t});"></span><div class="bk-timeline-title">${_(e.title)}</div>${n}${r}</article>`}).join(``)}</div>`}function At(e,t){if(Array.isArray(e)){let n=e.map(e=>At(e)).join(``);return t?`<details class="bk-tree-node" open><summary>${_(t)}</summary><div class="bk-tree-children">${n}</div></details>`:`<div class="bk-tree-children">${n}</div>`}if(e&&typeof e==`object`){let n=e,r=typeof n.name==`string`?n.name:typeof n.label==`string`?n.label:typeof n.title==`string`?n.title:void 0;if(r!==void 0)return At(n.children??[],r);let i=Object.entries(n).map(([e,t])=>At(t,e)).join(``);return t?`<details class="bk-tree-node" open><summary>${_(t)}</summary><div class="bk-tree-children">${i}</div></details>`:`<div class="bk-tree-children">${i}</div>`}let n=_(b(e));return t?`<div class="bk-tree-leaf"><span class="bk-tree-key">${_(t)}</span><span class="bk-tree-value">${n}</span></div>`:`<div class="bk-tree-leaf">${n}</div>`}var jt=`
|
|
1167
1167
|
.bk-tree {
|
|
1168
1168
|
display: grid;
|
|
1169
1169
|
gap: var(--dt-space-2);
|
|
@@ -238,7 +238,7 @@ When technical decisions need resolution, follow the **3-phase multi-model decis
|
|
|
238
238
|
- Researcher-Delta (Executor): Feasibility, performance, fastest implementation path
|
|
239
239
|
3. **Phase 2 — Peer Review** — Anonymize outputs as Perspective A/B/C/D, launch 4 reviewers in parallel asking: strongest argument, biggest blind spot, consensus gap, verdict
|
|
240
240
|
4. **Phase 3 — Structured Verdict** — Synthesize into: Where Agrees / Where Clashes / Blind Spots Caught / Recommendation (with confidence) / First Step
|
|
241
|
-
5. **Present & Record** — Render verdict with \`present
|
|
241
|
+
5. **Present & Record** — Render verdict with \`present({ schemaVersion: 1, title: "Decision Verdict", blocks: [...] })\`; use \`table\` for multi-perspective comparisons, \`list\` for blind spots and recommendations, and \`kv\` for verdict metadata. NEVER \`code\` blocks for structured data. Produce ADR via \`adr-skill\`
|
|
242
242
|
|
|
243
243
|
**Floor tier shortcut**: Skip Phase 2 (peer review), go straight from research to verdict.
|
|
244
244
|
|
|
@@ -293,12 +293,14 @@ Run \`forge_ground({ task, files: [<relevant files>], root_path: "." })\` to:
|
|
|
293
293
|
|
|
294
294
|
### 7. Present to User
|
|
295
295
|
|
|
296
|
-
Use \`present({
|
|
296
|
+
Use \`present({ schemaVersion: 1, title: "Design Review", blocks: [...] })\` to show:
|
|
297
297
|
- Design decisions summary
|
|
298
298
|
- FORGE tier and rationale
|
|
299
299
|
- Key trade-offs
|
|
300
300
|
- Open questions requiring user input
|
|
301
301
|
|
|
302
|
+
Use \`kv\` for FORGE tier and rationale, \`list\` for trade-offs and open questions, \`table\` for decision comparisons, and \`markdown\` for narrative summary. NEVER \`code\` blocks for structured data. Add \`actions\` only when you need browser transport for user choices.
|
|
303
|
+
|
|
302
304
|
**🛑 MANDATORY STOP** — Wait for user approval of design decisions before proceeding.
|
|
303
305
|
|
|
304
306
|
### 8. Report to Orchestrator
|
|
@@ -340,9 +342,11 @@ Load these skills BEFORE executing this step:
|
|
|
340
342
|
|
|
341
343
|
### Presentation Rules
|
|
342
344
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
343
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
345
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
346
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
344
347
|
- Tables, charts, progress tracking, code review findings → always present
|
|
345
|
-
-
|
|
348
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
349
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
346
350
|
- Only use plain text for brief confirmations and simple questions
|
|
347
351
|
|
|
348
352
|
## Completion Criteria
|
|
@@ -476,9 +480,11 @@ Load these skills BEFORE executing this step:
|
|
|
476
480
|
|
|
477
481
|
### Presentation Rules
|
|
478
482
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
479
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
483
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
484
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
480
485
|
- Tables, charts, progress tracking, code review findings → always present
|
|
481
|
-
-
|
|
486
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
487
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
482
488
|
- Only use plain text for brief confirmations and simple questions
|
|
483
489
|
|
|
484
490
|
### Orchestrator Dispatch Protocol
|
|
@@ -629,9 +635,11 @@ Load these skills BEFORE executing this step:
|
|
|
629
635
|
|
|
630
636
|
### Presentation Rules
|
|
631
637
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
632
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
638
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
639
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
633
640
|
- Tables, charts, progress tracking, code review findings → always present
|
|
634
|
-
-
|
|
641
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
642
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
635
643
|
- Only use plain text for brief confirmations and simple questions
|
|
636
644
|
|
|
637
645
|
## Completion Criteria
|
|
@@ -787,9 +795,11 @@ Load these skills BEFORE executing this step:
|
|
|
787
795
|
|
|
788
796
|
### Presentation Rules
|
|
789
797
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
790
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
798
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
799
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
791
800
|
- Tables, charts, progress tracking, code review findings → always present
|
|
792
|
-
-
|
|
801
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
802
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
793
803
|
- Only use plain text for brief confirmations and simple questions
|
|
794
804
|
|
|
795
805
|
## Completion Criteria
|
|
@@ -896,6 +906,8 @@ present({ schemaVersion: 1, title: "Task Plan: <feature>", template: "task-plan@
|
|
|
896
906
|
|
|
897
907
|
This renders an interactive dependency graph showing phases, parallel batches, and agent assignments. The user can visualize the execution order before approving.
|
|
898
908
|
|
|
909
|
+
Use the template-driven graph for the dependency view; if you add supporting summary content, use \`kv\` for approval metadata, \`list\` for task notes, and NEVER \`code\` blocks for structured data.
|
|
910
|
+
|
|
899
911
|
## Agents
|
|
900
912
|
|
|
901
913
|
| Agent | Role |
|
|
@@ -918,9 +930,11 @@ Load these skills BEFORE executing this step:
|
|
|
918
930
|
|
|
919
931
|
### Presentation Rules
|
|
920
932
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
921
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
933
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
934
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
922
935
|
- Tables, charts, progress tracking, code review findings → always present
|
|
923
|
-
-
|
|
936
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
937
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
924
938
|
- Only use plain text for brief confirmations and simple questions
|
|
925
939
|
|
|
926
940
|
## Completion Criteria
|
|
@@ -1063,9 +1077,11 @@ Load these skills BEFORE executing this step:
|
|
|
1063
1077
|
|
|
1064
1078
|
### Presentation Rules
|
|
1065
1079
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
1066
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
1080
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
1081
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
1067
1082
|
- Tables, charts, progress tracking, code review findings → always present
|
|
1068
|
-
-
|
|
1083
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
1084
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
1069
1085
|
- Only use plain text for brief confirmations and simple questions
|
|
1070
1086
|
|
|
1071
1087
|
### FORGE Quality Gate
|
|
@@ -1192,9 +1208,11 @@ Load these skills BEFORE executing this step:
|
|
|
1192
1208
|
|
|
1193
1209
|
### Presentation Rules
|
|
1194
1210
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
1195
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
1211
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
1212
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
1196
1213
|
- Tables, charts, progress tracking, code review findings → always present
|
|
1197
|
-
-
|
|
1214
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
1215
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
1198
1216
|
- Only use plain text for brief confirmations and simple questions
|
|
1199
1217
|
|
|
1200
1218
|
## Completion Criteria
|
|
@@ -1266,7 +1284,7 @@ For small features that need minimal design:
|
|
|
1266
1284
|
- **Phase 1**: Launch ALL 4 Researcher variants in parallel (Alpha/Beta/Gamma/Delta)
|
|
1267
1285
|
- **Phase 2**: Anonymize outputs as A/B/C/D, run peer review round (4 reviewers in parallel)
|
|
1268
1286
|
- **Phase 3**: Synthesize into structured verdict (Agrees / Clashes / Blind Spots / Recommendation / First Step)
|
|
1269
|
-
- Present verdict visually using \`present
|
|
1287
|
+
- Present verdict visually using \`present({ schemaVersion: 1, title: "Decision Verdict", blocks: [...] })\`; use \`table\` for multi-approach comparisons, \`list\` for recommendations and blind spots, and \`kv\` for verdict metadata. NEVER \`code\` blocks for structured data. Produce ADR for Standard+ tiers
|
|
1270
1288
|
4. **Write \`{{artifacts_path}}/design-decisions.md\`** to disk:
|
|
1271
1289
|
|
|
1272
1290
|
\`\`\`markdown
|
|
@@ -1321,9 +1339,11 @@ Load these skills BEFORE executing this step:
|
|
|
1321
1339
|
|
|
1322
1340
|
### Presentation Rules
|
|
1323
1341
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
1324
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
1342
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
1343
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
1325
1344
|
- Tables, charts, progress tracking, code review findings → always present
|
|
1326
|
-
-
|
|
1345
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
1346
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
1327
1347
|
- Only use plain text for brief confirmations and simple questions
|
|
1328
1348
|
|
|
1329
1349
|
## Completion Criteria
|
|
@@ -1443,9 +1463,11 @@ Load these skills BEFORE executing this step:
|
|
|
1443
1463
|
|
|
1444
1464
|
### Presentation Rules
|
|
1445
1465
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
1446
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
1466
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
1467
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
1447
1468
|
- Tables, charts, progress tracking, code review findings → always present
|
|
1448
|
-
-
|
|
1469
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
1470
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
1449
1471
|
- Only use plain text for brief confirmations and simple questions
|
|
1450
1472
|
|
|
1451
1473
|
### Orchestrator Dispatch Protocol
|
|
@@ -1578,9 +1600,11 @@ Load these skills BEFORE executing this step:
|
|
|
1578
1600
|
|
|
1579
1601
|
### Presentation Rules
|
|
1580
1602
|
- Use \`present\` for **any output** that benefits from rich rendering — not limited to dashboards
|
|
1581
|
-
- Assessments, reports, comparisons, reviews, status boards → \`present({
|
|
1603
|
+
- Assessments, reports, comparisons, reviews, status boards → \`present({ schemaVersion: 1, title: "Assessment", blocks: [...] })\`
|
|
1604
|
+
- Use \`table\` blocks for comparisons, \`kv\` for status/scores, \`list\` for findings, and \`metrics\` for numeric health indicators. NEVER \`code\` blocks for structured data.
|
|
1582
1605
|
- Tables, charts, progress tracking, code review findings → always present
|
|
1583
|
-
-
|
|
1606
|
+
- Use \`metrics\` for numeric indicators, \`checklist\` for task status, \`kv\` for summary, and \`table\` for review findings. NEVER \`code\` blocks for structured data.
|
|
1607
|
+
- Artifact content and summaries → present with structured layout; use \`markdown\` for prose sections.
|
|
1584
1608
|
- Only use plain text for brief confirmations and simple questions
|
|
1585
1609
|
|
|
1586
1610
|
### FORGE Quality Gate
|
|
@@ -801,7 +801,12 @@ The Orchestrator synthesizes BOTH layers (original research + peer reviews) into
|
|
|
801
801
|
\`\`\`
|
|
802
802
|
|
|
803
803
|
Then:
|
|
804
|
-
1. **Present** the verdict using \`present
|
|
804
|
+
1. **Present** the verdict using \`present\` with browser transport. MANDATORY block types:
|
|
805
|
+
- "Where They Agree" -> \`{ "type": "list", "value": ["point 1", "point 2"] }\` — NEVER code block with JSON array
|
|
806
|
+
- "Where They Clash" -> \`{ "type": "table", "value": { "headers": ["Dimension", "Alpha", "Delta"], "rows": [...] } }\`
|
|
807
|
+
- "Blind Spots" -> \`{ "type": "markdown", "value": "..." }\` with **bold** key insight
|
|
808
|
+
- "Recommendation" -> \`{ "type": "kv", "title": "Verdict", "value": { "Approach": "...", "Confidence": "...", "Rationale": "...", "First Step": "..." } }\` — NEVER code block with JSON object
|
|
809
|
+
- Always include \`actions\` with approve + alternative buttons
|
|
805
810
|
2. **Produce an ADR** via the \`adr-skill\`
|
|
806
811
|
3. **\`knowledge({ action: "remember", ... })\`** the decision for future recall
|
|
807
812
|
|
|
@@ -112,9 +112,9 @@ digraph brainstorming_simple {
|
|
|
112
112
|
|
|
113
113
|
1. **Explore project context** — check files, docs, recent commits
|
|
114
114
|
2. **Assess scope** — if multiple independent subsystems, decompose before detailing (see below)
|
|
115
|
-
3. **Offer visual presentation support** (if topic will involve visual questions) — this is its own message, not combined with a clarifying question. Use \`present({
|
|
115
|
+
3. **Offer visual presentation support** (if topic will involve visual questions) — this is its own message, not combined with a clarifying question. Use \`present({ schemaVersion: 1, title: "Brainstorming", blocks: [...] })\` to display brainstorming results. Use \`list\` for idea sets, \`table\` for evaluation matrices, \`kv\` for the selected approach, and \`metrics\` for requirement scores. NEVER \`code\` blocks for structured data.
|
|
116
116
|
4. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
|
|
117
|
-
5. **Propose 2-3 approaches via Decision Protocol** — run the full 3-phase multi-model decision protocol: Phase 1 (4 Researchers in parallel), Phase 2 (peer review with anonymized outputs), Phase 3 (structured verdict). Present the verdict visually using \`present
|
|
117
|
+
5. **Propose 2-3 approaches via Decision Protocol** — run the full 3-phase multi-model decision protocol: Phase 1 (4 Researchers in parallel), Phase 2 (peer review with anonymized outputs), Phase 3 (structured verdict). Present the verdict visually using \`present({ schemaVersion: 1, title: "Approach Verdict", blocks: [...] })\` with \`table\` for approach comparisons, \`list\` for recommendations, and \`kv\` for verdict metadata. NEVER \`code\` blocks for structured data. *(See "Decision Protocol Integration" below.)*
|
|
118
118
|
6. **Present design** — in sections scaled to their complexity, get user approval after each section
|
|
119
119
|
7. **Write design doc** — save to \`docs/plans/YYYY-MM-DD-<topic>-design.md\` and commit
|
|
120
120
|
8. **Spec review loop** — review the spec for completeness, consistency, clarity, scope, and YAGNI. Fix issues. Max 3 iterations, then surface to user.
|
|
@@ -144,7 +144,7 @@ When Advanced Mode reaches step 5 ("Propose approaches"), invoke the **full 3-ph
|
|
|
144
144
|
**Phase 3 — Structured Verdict:**
|
|
145
145
|
5. Synthesize BOTH layers into the structured verdict format:
|
|
146
146
|
- **Where Agrees** / **Where Clashes** / **Blind Spots Caught** / **Recommendation** (with confidence) / **First Step**
|
|
147
|
-
6. Present verdict visually using \`present({
|
|
147
|
+
6. Present verdict visually using \`present({ schemaVersion: 1, title: "Approach Verdict", blocks: [...] })\` with \`table\` for approach comparisons, \`list\` for recommendations, and \`kv\` for verdict metadata. NEVER \`code\` blocks for structured data.
|
|
148
148
|
7. If a decision produces an ADR, write it to \`docs/decisions/\`
|
|
149
149
|
|
|
150
150
|
**Floor-tier shortcut**: Skip Phase 2 (peer review), synthesize directly from Phase 1.
|
|
@@ -326,13 +326,13 @@ During the brainstorming session, when design decisions clarify existing ambigui
|
|
|
326
326
|
Use the \`present\` MCP tool for showing mockups, diagrams, and visual options during brainstorming. It is available as a tool, not a separate mode. Choosing this means you can present rich visual output when it helps; it does NOT mean every question should become visual.
|
|
327
327
|
|
|
328
328
|
**Offering visual presentation:** When you anticipate that upcoming questions will involve visual content (mockups, layouts, diagrams), offer it once for consent:
|
|
329
|
-
> "Some of what we're working on might be easier to explain visually. I can use \`present({
|
|
329
|
+
> "Some of what we're working on might be easier to explain visually. I can use \`present({ schemaVersion: 1, title: \\"Working Session Visuals\\", blocks: [...] })\` to show mockups, diagrams, comparisons, and other visuals as we go, using \`list\`, \`table\`, \`kv\`, and \`metrics\` blocks as appropriate. I never use \`code\` blocks for structured data. Want me to use that when helpful?"
|
|
330
330
|
|
|
331
331
|
**This offer MUST be its own message.** Do not combine it with clarifying questions, context summaries, or any other content. Wait for the user's response before continuing. If they decline, proceed with text-only brainstorming.
|
|
332
332
|
|
|
333
333
|
**Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use visual output or plain chat. The test: **would the user understand this better by seeing it than reading it?**
|
|
334
334
|
|
|
335
|
-
- **Use \`present({
|
|
335
|
+
- **Use \`present({ schemaVersion: 1, title: "Visual Option", blocks: [...] })\`** for visual content — mockups, wireframes, layout comparisons, architecture diagrams, side-by-side visual designs. Use \`list\` for idea options, \`table\` for side-by-side evaluations, \`kv\` for selected approach metadata, and \`metrics\` for numeric scoring. NEVER \`code\` blocks for structured data.
|
|
336
336
|
- **Use regular chat** for text content — requirements questions, conceptual choices, tradeoff lists, A/B/C/D text options, scope decisions
|
|
337
337
|
`},{file:`spec-document-reviewer-prompt.md`,content:`# Spec Document Reviewer Prompt Template
|
|
338
338
|
|