@openspecui/web 9.0.1 → 9.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/assets/App-CKmWaGbS.css +1 -0
  2. package/dist/assets/{App-CEbaO9p7.js → App-Cm5Z3aXu.js} +73 -73
  3. package/dist/assets/{main-MGKIORYy.js → main-DbOTQVqN.js} +2 -2
  4. package/dist/assets/{trpc-BVbs2EGH.js → trpc-DriEPW9x.js} +1 -1
  5. package/dist/index.html +1 -1
  6. package/dist-ssg/client/.vite/ssr-manifest.json +29 -29
  7. package/dist-ssg/client/assets/CanvasRenderer-BhcfZraw.js +1 -0
  8. package/dist-ssg/client/assets/WebGLRenderer-BMU-g2CE.js +1 -0
  9. package/dist-ssg/client/assets/WebGPURenderer-BAsbFOnm.js +1 -0
  10. package/dist-ssg/client/assets/browserAll-DzAH94Dz.js +1 -0
  11. package/dist-ssg/client/assets/{config-guide-presentation-C4Z-0SFk.js → config-guide-presentation-Cn3kSpXZ.js} +1 -1
  12. package/dist-ssg/client/assets/{dist-lYx3EWfZ.js → dist-BM1aVB3p.js} +1 -1
  13. package/dist-ssg/client/assets/{dist-BKobWYD3.js → dist-BVC-3Mz_.js} +1 -1
  14. package/dist-ssg/client/assets/dist-CdxtXLZp.js +1 -0
  15. package/dist-ssg/client/assets/{dist-ClUVC_84.js → dist-CfapX6Lr.js} +1 -1
  16. package/dist-ssg/client/assets/{dist-D1Kgfdnc.js → dist-DSbjfgtE.js} +1 -1
  17. package/dist-ssg/client/assets/{dist-k_96dSjT.js → dist-DTfE1AGY.js} +1 -1
  18. package/dist-ssg/client/assets/{dist-Bcjlb1bO.js → dist-D_8785UD.js} +1 -1
  19. package/dist-ssg/client/assets/{dist-B6W3pPHs.js → dist-Dq7tP1jy.js} +1 -1
  20. package/dist-ssg/client/assets/dist-Dw6bnxbK.js +1 -0
  21. package/dist-ssg/client/assets/{dist-D64HT2KR.js → dist-URgAfvaG.js} +1 -1
  22. package/dist-ssg/client/assets/{dist-PiPP3-Ah.js → dist-bIKkmeGM.js} +1 -1
  23. package/dist-ssg/client/assets/dist-nRw76b0P.js +1 -0
  24. package/dist-ssg/client/assets/{ghostty-web-BIYzTj9q.js → ghostty-web-CepiWfia.js} +1 -1
  25. package/dist-ssg/client/assets/index-CltZALZD.css +1 -0
  26. package/dist-ssg/client/assets/{index.ssg-BtuMbAm3.js → index.ssg-DAtF3E31.js} +24 -24
  27. package/dist-ssg/client/assets/{init-l-kQXEeR.js → init-BOhrbGmd.js} +1 -1
  28. package/dist-ssg/client/assets/{trpc-CHrTaCNa.js → trpc-CfpujRJ8.js} +1 -1
  29. package/dist-ssg/client/assets/webworkerAll-BPYJdLSv.js +1 -0
  30. package/dist-ssg/client/index.ssg.html +2 -2
  31. package/dist-ssg/server/assets/CanvasRenderer-k_tFIFoA.js +3 -0
  32. package/dist-ssg/server/assets/WebGLRenderer-cfN96M_D.js +3 -0
  33. package/dist-ssg/server/assets/WebGPURenderer-moX8CQUm.js +3 -0
  34. package/dist-ssg/server/assets/{browserAll-DmyvKJDK.js → browserAll-BJZwRDaI.js} +2 -2
  35. package/dist-ssg/server/assets/{config-guide-presentation-r59qmEkS.js → config-guide-presentation-CcpWbzbF.js} +1 -1
  36. package/dist-ssg/server/assets/{dist-DgvOnKuT.js → dist-BZbvCEXY.js} +1 -1
  37. package/dist-ssg/server/assets/{dist-DlZIJzsh.js → dist-BbKu_y6W.js} +1 -1
  38. package/dist-ssg/server/assets/dist-Bosp3yvI.js +3 -0
  39. package/dist-ssg/server/assets/{dist-jJpwOzat.js → dist-C0TNMvo3.js} +1 -1
  40. package/dist-ssg/server/assets/{dist-DRkFTPqz.js → dist-C7cu-Ohs.js} +1 -1
  41. package/dist-ssg/server/assets/{dist-BaqegCo3.js → dist-CTDTyhyq.js} +1 -1
  42. package/dist-ssg/server/assets/dist-CgFGYGuV.js +3 -0
  43. package/dist-ssg/server/assets/{dist-0Gp0z2-n.js → dist-CmkO24b2.js} +1 -1
  44. package/dist-ssg/server/assets/{dist-BSrtv0FL.js → dist-Cxmy4PRF.js} +1 -1
  45. package/dist-ssg/server/assets/dist-DaxZJMDX.js +3 -0
  46. package/dist-ssg/server/assets/{dist-DfJANrLX.js → dist-FpVzh8vE.js} +1 -1
  47. package/dist-ssg/server/assets/{dist-rENGOe6I.js → dist-glvfDQXi.js} +1 -1
  48. package/dist-ssg/server/assets/{entry-server-BzFP1YY0.js → entry-server-D-Z6rVrS.js} +127 -55
  49. package/dist-ssg/server/assets/{init-Bx_sRhIx.js → init-CCY3tsKc.js} +1 -1
  50. package/dist-ssg/server/assets/trpc-4dLqTVBm.js +3 -0
  51. package/dist-ssg/server/assets/webworkerAll-DVUDp5xO.js +4 -0
  52. package/dist-ssg/server/ssr-entry-manifest.json +24 -24
  53. package/package.json +3 -3
  54. package/dist/assets/App-Bxg8Uu8T.css +0 -1
  55. package/dist-ssg/client/assets/CanvasRenderer-DKZvKi_9.js +0 -1
  56. package/dist-ssg/client/assets/WebGLRenderer-Dct7rzs_.js +0 -1
  57. package/dist-ssg/client/assets/WebGPURenderer-DtpKkjmH.js +0 -1
  58. package/dist-ssg/client/assets/browserAll-CuNkItSE.js +0 -1
  59. package/dist-ssg/client/assets/dist-CWb-aAQf.js +0 -1
  60. package/dist-ssg/client/assets/dist-CYpiS1Zt.js +0 -1
  61. package/dist-ssg/client/assets/dist-H38juOFW.js +0 -1
  62. package/dist-ssg/client/assets/index-DqP4B4Rz.css +0 -1
  63. package/dist-ssg/client/assets/webworkerAll-BqQJxuyS.js +0 -1
  64. package/dist-ssg/server/assets/CanvasRenderer-D5UXmqkQ.js +0 -3
  65. package/dist-ssg/server/assets/WebGLRenderer-CA7hgj6q.js +0 -3
  66. package/dist-ssg/server/assets/WebGPURenderer-CfV-9erK.js +0 -3
  67. package/dist-ssg/server/assets/dist-Bhwr_0k7.js +0 -3
  68. package/dist-ssg/server/assets/dist-cgbXhCvj.js +0 -3
  69. package/dist-ssg/server/assets/dist-edAEd-k-.js +0 -3
  70. package/dist-ssg/server/assets/trpc-BbV9JZTO.js +0 -3
  71. package/dist-ssg/server/assets/webworkerAll-didcaEA_.js +0 -4
@@ -1 +1 @@
1
- import{it as e}from"./Geometry-B_ASJa8G.js";import{M as t,j as n}from"./index.ssg-BtuMbAm3.js";e.add(n),e.add(t);
1
+ import{it as e}from"./Geometry-B_ASJa8G.js";import{M as t,j as n}from"./index.ssg-DAtF3E31.js";e.add(n),e.add(t);
@@ -1 +1 @@
1
- import"./jsx-runtime-BLLrG8rB.js";import{Mt as e}from"./index.ssg-BtuMbAm3.js";export{e as trpcClient};
1
+ import"./jsx-runtime-BLLrG8rB.js";import{Mt as e}from"./index.ssg-DAtF3E31.js";export{e as trpcClient};
@@ -0,0 +1 @@
1
+ import"./Geometry-B_ASJa8G.js";import"./index.ssg-DAtF3E31.js";import"./init-BOhrbGmd.js";
@@ -8,7 +8,7 @@
8
8
  <script>
9
9
  window.__OPENSPEC_BASE_PATH__ = '/'
10
10
  </script>
11
- <script type="module" crossorigin src="/assets/index.ssg-BtuMbAm3.js"></script>
11
+ <script type="module" crossorigin src="/assets/index.ssg-DAtF3E31.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/assets/chunk-BEqpzyXh.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/dist-B1LJ4aUx.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/dist-xTC3A7_k.js">
@@ -19,7 +19,7 @@
19
19
  <link rel="modulepreload" crossorigin href="/assets/BufferResource-5e2UtsWs.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/ImageSource-DRiTQZHU.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BLLrG8rB.js">
22
- <link rel="stylesheet" crossorigin href="/assets/index-DqP4B4Rz.css">
22
+ <link rel="stylesheet" crossorigin href="/assets/index-CltZALZD.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"><!--app-html--></div>
@@ -0,0 +1,3 @@
1
+ import "./Geometry-jQ4l8GtP.js";
2
+ import { A as CanvasRenderer } from "./entry-server-D-Z6rVrS.js";
3
+ export { CanvasRenderer };
@@ -0,0 +1,3 @@
1
+ import "./Geometry-jQ4l8GtP.js";
2
+ import { k as WebGLRenderer } from "./entry-server-D-Z6rVrS.js";
3
+ export { WebGLRenderer };
@@ -0,0 +1,3 @@
1
+ import "./Geometry-jQ4l8GtP.js";
2
+ import { O as WebGPURenderer } from "./entry-server-D-Z6rVrS.js";
3
+ export { WebGPURenderer };
@@ -1,6 +1,6 @@
1
1
  import { it as extensions, x as Container } from "./Geometry-jQ4l8GtP.js";
2
- import { F as accessibilityTarget, I as AccessibilitySystem, N as FederatedContainer, P as EventSystem } from "./entry-server-BzFP1YY0.js";
3
- import "./init-Bx_sRhIx.js";
2
+ import { F as accessibilityTarget, I as AccessibilitySystem, N as FederatedContainer, P as EventSystem } from "./entry-server-D-Z6rVrS.js";
3
+ import "./init-CCY3tsKc.js";
4
4
  //#region ../../node_modules/.pnpm/pixi.js@8.16.0/node_modules/pixi.js/lib/accessibility/init.mjs
5
5
  extensions.add(AccessibilitySystem);
6
6
  extensions.mixin(Container, accessibilityTarget);
@@ -1,6 +1,6 @@
1
1
  import { o as __toESM } from "./chunk-CBcaU1I6.js";
2
2
  import { n as require_react, t as require_jsx_runtime } from "./jsx-runtime-CQL-l9BP.js";
3
- import { $ as useAnimationsFinished, B as useAnchorPositioning, Ct as Timeout, D as Button, Dt as useOnFirstRender, Et as useIsoLayoutEffect, G as useHoverFloatingInteraction, H as useBaseUiId, J as popupStoreSelectors, K as useSyncedFloatingRootContext, L as cn, Ot as useRefWithInit, Pt as require_react_dom, Q as useOpenChangeComplete, R as inertValue, St as isHTMLElement, Tt as formatErrorMessage, U as popupStateMapping, V as adaptiveOrigin, W as useInteractions, X as useImplicitActiveTrigger, Y as PopupTriggerMap, Z as useOpenStateTransitions, _t as triggerHover, a as useOpenInteractionType, at as FloatingNode, bt as EMPTY_OBJECT, ct as useFloatingParentNodeId, dt as useId$1, et as transitionStatusMapping, ft as useStableCallback, gt as imperativeAction, i as useScrollLock, it as FloatingFocusManager, kt as X, lt as FloatingPortal, n as useToolbarRootContext, nt as createSelector, ot as FloatingTree, pt as createChangeEventDetails, q as createInitialPopupStoreState, r as InternalBackdrop, rt as useDismiss, st as useFloatingNodeId, t as COMPOSITE_KEYS, tt as ReactStore, ut as useRenderElement, wt as useOnMount, xt as getFloatingFocusElement, yt as POPUP_COLLISION_AVOIDANCE, z as getDisabledMountTransitionStyles } from "./entry-server-BzFP1YY0.js";
3
+ import { $ as useAnimationsFinished, B as useAnchorPositioning, Ct as Timeout, D as Button, Dt as useOnFirstRender, Et as useIsoLayoutEffect, G as useHoverFloatingInteraction, H as useBaseUiId, J as popupStoreSelectors, K as useSyncedFloatingRootContext, L as cn, Ot as useRefWithInit, Pt as require_react_dom, Q as useOpenChangeComplete, R as inertValue, St as isHTMLElement, Tt as formatErrorMessage, U as popupStateMapping, V as adaptiveOrigin, W as useInteractions, X as useImplicitActiveTrigger, Y as PopupTriggerMap, Z as useOpenStateTransitions, _t as triggerHover, a as useOpenInteractionType, at as FloatingNode, bt as EMPTY_OBJECT, ct as useFloatingParentNodeId, dt as useId$1, et as transitionStatusMapping, ft as useStableCallback, gt as imperativeAction, i as useScrollLock, it as FloatingFocusManager, kt as X, lt as FloatingPortal, n as useToolbarRootContext, nt as createSelector, ot as FloatingTree, pt as createChangeEventDetails, q as createInitialPopupStoreState, r as InternalBackdrop, rt as useDismiss, st as useFloatingNodeId, t as COMPOSITE_KEYS, tt as ReactStore, ut as useRenderElement, wt as useOnMount, xt as getFloatingFocusElement, yt as POPUP_COLLISION_AVOIDANCE, z as getDisabledMountTransitionStyles } from "./entry-server-D-Z6rVrS.js";
4
4
  //#region ../../node_modules/.pnpm/@base-ui+react@1.3.0_@types+react@19.2.7_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useRole.js
5
5
  var import_react = /* @__PURE__ */ __toESM(require_react());
6
6
  var componentRoleToAriaRoleMap = new Map([
@@ -1,6 +1,6 @@
1
1
  import { L as styleTags, Lt as parseMixed, R as tags, i as LocalTokenGroup, r as LRParser, s as LRLanguage, u as LanguageSupport } from "./dist-5X8O7Rwc.js";
2
2
  import { r as javascriptLanguage } from "./dist-CCduGocE.js";
3
- import { _ as html } from "./entry-server-BzFP1YY0.js";
3
+ import { _ as html } from "./entry-server-D-Z6rVrS.js";
4
4
  //#region ../../node_modules/.pnpm/@codemirror+lang-vue@0.1.3/node_modules/@codemirror/lang-vue/dist/index.js
5
5
  var parser = /* @__PURE__ */ LRParser.deserialize({
6
6
  version: 14,
@@ -1,4 +1,4 @@
1
1
  import "./dist-5X8O7Rwc.js";
2
2
  import "./dist-CCduGocE.js";
3
- import { f as markdown } from "./entry-server-BzFP1YY0.js";
3
+ import { f as markdown } from "./entry-server-D-Z6rVrS.js";
4
4
  export { markdown };
@@ -0,0 +1,3 @@
1
+ import "./dist-5X8O7Rwc.js";
2
+ import { T as json } from "./entry-server-D-Z6rVrS.js";
3
+ export { json };
@@ -1,6 +1,6 @@
1
1
  import { L as styleTags, Lt as parseMixed, R as tags, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport } from "./dist-5X8O7Rwc.js";
2
2
  import { r as javascriptLanguage } from "./dist-CCduGocE.js";
3
- import { _ as html } from "./entry-server-BzFP1YY0.js";
3
+ import { _ as html } from "./entry-server-D-Z6rVrS.js";
4
4
  //#region ../../node_modules/.pnpm/@codemirror+lang-angular@0.1.4/node_modules/@codemirror/lang-angular/dist/index.js
5
5
  var Text = 1, attributeContentSingle = 33, attributeContentDouble = 34, scriptAttributeContentSingle = 35, scriptAttributeContentDouble = 36;
6
6
  var text = /* @__PURE__ */ new ExternalTokenizer((input) => {
@@ -1,4 +1,4 @@
1
1
  import "./dist-5X8O7Rwc.js";
2
2
  import "./dist-CCduGocE.js";
3
- import { _ as html } from "./entry-server-BzFP1YY0.js";
3
+ import { _ as html } from "./entry-server-D-Z6rVrS.js";
4
4
  export { html };
@@ -1,5 +1,5 @@
1
1
  import { C as foldNodeProp, D as indentNodeProp, L as styleTags, R as tags, h as continuedIndent, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport, x as foldInside } from "./dist-5X8O7Rwc.js";
2
- import { w as defineCSSCompletionSource } from "./entry-server-BzFP1YY0.js";
2
+ import { w as defineCSSCompletionSource } from "./entry-server-D-Z6rVrS.js";
3
3
  //#region ../../node_modules/.pnpm/@codemirror+lang-less@6.0.2/node_modules/@codemirror/lang-less/dist/index.js
4
4
  var descendantOp = 110, Unit = 1, openArgList = 2;
5
5
  var space = [
@@ -0,0 +1,3 @@
1
+ import "./dist-5X8O7Rwc.js";
2
+ import { x as css } from "./entry-server-D-Z6rVrS.js";
3
+ export { css };
@@ -1,6 +1,6 @@
1
1
  import { C as foldNodeProp, D as indentNodeProp, F as syntaxTree, L as styleTags, Lt as parseMixed, R as tags, V as EditorView, ft as EditorSelection, i as LocalTokenGroup, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport, v as delimitedIndent } from "./dist-5X8O7Rwc.js";
2
2
  import "./dist-CCduGocE.js";
3
- import { _ as html } from "./entry-server-BzFP1YY0.js";
3
+ import { _ as html } from "./entry-server-D-Z6rVrS.js";
4
4
  //#region ../../node_modules/.pnpm/@codemirror+lang-jinja@6.0.0/node_modules/@codemirror/lang-jinja/dist/index.js
5
5
  var interpolationStart = 1, commentTagStart = 2, tagStart = 3, text = 155, endrawTagStart = 4, rawText = 156;
6
6
  function wordChar(code) {
@@ -1,5 +1,5 @@
1
1
  import { C as foldNodeProp, D as indentNodeProp, L as styleTags, R as tags, h as continuedIndent, n as ExternalTokenizer, r as LRParser, s as LRLanguage, t as ContextTracker, u as LanguageSupport, x as foldInside } from "./dist-5X8O7Rwc.js";
2
- import { w as defineCSSCompletionSource } from "./entry-server-BzFP1YY0.js";
2
+ import { w as defineCSSCompletionSource } from "./entry-server-D-Z6rVrS.js";
3
3
  //#region ../../node_modules/.pnpm/@lezer+sass@1.1.0/node_modules/@lezer/sass/dist/index.js
4
4
  var indent = 168, dedent = 169, descendantOp = 170, InterpolationEnd = 1, InterpolationContinue = 2, Unit = 3, callee = 171, identifier = 172, VariableName = 4, queryIdentifier = 173, InterpolationStart = 5, newline = 174, blankLineStart = 175, eof = 176, whitespace = 177, LineComment = 6, Comment = 7, IndentedMixin = 8, IndentedInclude = 9, Dialect_indented = 0;
5
5
  var space = [
@@ -0,0 +1,3 @@
1
+ import "./dist-5X8O7Rwc.js";
2
+ import { o as yaml } from "./entry-server-D-Z6rVrS.js";
3
+ export { yaml };
@@ -1,6 +1,6 @@
1
1
  import { C as foldNodeProp, D as indentNodeProp, F as syntaxTree, L as styleTags, Lt as parseMixed, R as tags, V as EditorView, ft as EditorSelection, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport, v as delimitedIndent } from "./dist-5X8O7Rwc.js";
2
2
  import "./dist-CCduGocE.js";
3
- import { _ as html } from "./entry-server-BzFP1YY0.js";
3
+ import { _ as html } from "./entry-server-D-Z6rVrS.js";
4
4
  //#region ../../node_modules/.pnpm/@codemirror+lang-liquid@6.3.0/node_modules/@codemirror/lang-liquid/dist/index.js
5
5
  var interpolationStart = 1, tagStart = 2, endTagStart = 3, text = 179, endrawTagStart = 4, rawText = 180, endcommentTagStart = 5, commentText = 181, InlineComment = 6;
6
6
  function wordChar(code) {
@@ -1,6 +1,6 @@
1
1
  import { C as foldNodeProp, D as indentNodeProp, L as styleTags, Lt as parseMixed, R as tags, h as continuedIndent, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport, v as delimitedIndent, x as foldInside } from "./dist-5X8O7Rwc.js";
2
2
  import "./dist-CCduGocE.js";
3
- import { _ as html } from "./entry-server-BzFP1YY0.js";
3
+ import { _ as html } from "./entry-server-D-Z6rVrS.js";
4
4
  //#region ../../node_modules/.pnpm/@lezer+php@1.0.5/node_modules/@lezer/php/dist/index.js
5
5
  var castOpen = 1, HeredocString = 2, interpolatedStringContent = 275, EscapeSequence = 3, afterInterpolation = 276, automaticSemicolon = 277, eof = 278, abstract = 4, and = 5, array = 6, as = 7, Boolean = 8, _break = 9, _case = 10, _catch = 11, clone = 12, _const = 13, _continue = 14, _default = 15, declare = 16, _do = 17, echo = 18, _else = 19, elseif = 20, enddeclare = 21, endfor = 22, endforeach = 23, endif = 24, endswitch = 25, endwhile = 26, _enum = 27, _extends = 28, final = 29, _finally = 30, fn = 31, _for = 32, foreach = 33, from = 34, _function = 35, global = 36, goto = 37, _if = 38, _implements = 39, include = 40, include_once = 41, _instanceof = 42, insteadof = 43, _interface = 44, list = 45, match = 46, namespace = 47, _new = 48, _null = 49, or = 50, print = 51, readonly = 52, _require = 53, require_once = 54, _return = 55, _switch = 56, _throw = 57, trait = 58, _try = 59, unset = 60, use = 61, _var = 62, Visibility = 63;
6
6
  var keywordMap = {
@@ -30908,7 +30908,7 @@ var NavController = class {
30908
30908
  this.storageKey = scopedStorageKey;
30909
30909
  this.rebindProjectScopedLayout(scopedStorageKey);
30910
30910
  }
30911
- const { trpcClient } = await import("./trpc-BbV9JZTO.js");
30911
+ const { trpcClient } = await import("./trpc-4dLqTVBm.js");
30912
30912
  const remote = parsePersistedLayout(await trpcClient.kv.get.query({ key: this.storageKey }));
30913
30913
  if (remote) {
30914
30914
  if (remote.updatedAt > this.state.updatedAt) this.dispatch({
@@ -31051,7 +31051,7 @@ var NavController = class {
31051
31051
  this.cancelPersistTimer();
31052
31052
  this.persistTimer = setTimeout(() => {
31053
31053
  this.persistTimer = null;
31054
- import("./trpc-BbV9JZTO.js").then(({ trpcClient }) => trpcClient.kv.set.mutate({
31054
+ import("./trpc-4dLqTVBm.js").then(({ trpcClient }) => trpcClient.kv.set.mutate({
31055
31055
  key: this.storageKey,
31056
31056
  value: {
31057
31057
  mainTabs: this.state.mainTabs,
@@ -71099,7 +71099,7 @@ var browserExt = {
71099
71099
  },
71100
71100
  test: () => true,
71101
71101
  load: async () => {
71102
- await import("./browserAll-DmyvKJDK.js");
71102
+ await import("./browserAll-BJZwRDaI.js");
71103
71103
  }
71104
71104
  };
71105
71105
  //#endregion
@@ -71112,7 +71112,7 @@ var webworkerExt = {
71112
71112
  },
71113
71113
  test: () => typeof self !== "undefined" && self.WorkerGlobalScope !== void 0,
71114
71114
  load: async () => {
71115
- await import("./webworkerAll-didcaEA_.js");
71115
+ await import("./webworkerAll-DVUDp5xO.js");
71116
71116
  }
71117
71117
  };
71118
71118
  //#endregion
@@ -73706,7 +73706,7 @@ async function autoDetectRenderer(options) {
73706
73706
  for (let i = 0; i < preferredOrder.length; i++) {
73707
73707
  const rendererType = preferredOrder[i];
73708
73708
  if (rendererType === "webgpu" && await isWebGPUSupported()) {
73709
- const { WebGPURenderer } = await import("./WebGPURenderer-CfV-9erK.js");
73709
+ const { WebGPURenderer } = await import("./WebGPURenderer-moX8CQUm.js");
73710
73710
  RendererClass = WebGPURenderer;
73711
73711
  finalOptions = {
73712
73712
  ...options,
@@ -73714,7 +73714,7 @@ async function autoDetectRenderer(options) {
73714
73714
  };
73715
73715
  break;
73716
73716
  } else if (rendererType === "webgl" && isWebGLSupported(options.failIfMajorPerformanceCaveat ?? AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat)) {
73717
- const { WebGLRenderer } = await import("./WebGLRenderer-CA7hgj6q.js");
73717
+ const { WebGLRenderer } = await import("./WebGLRenderer-cfN96M_D.js");
73718
73718
  RendererClass = WebGLRenderer;
73719
73719
  finalOptions = {
73720
73720
  ...options,
@@ -73722,7 +73722,7 @@ async function autoDetectRenderer(options) {
73722
73722
  };
73723
73723
  break;
73724
73724
  } else if (rendererType === "canvas") {
73725
- const { CanvasRenderer } = await import("./CanvasRenderer-D5UXmqkQ.js");
73725
+ const { CanvasRenderer } = await import("./CanvasRenderer-k_tFIFoA.js");
73726
73726
  RendererClass = CanvasRenderer;
73727
73727
  finalOptions = {
73728
73728
  ...options,
@@ -97471,7 +97471,7 @@ var TerminalController = class {
97471
97471
  if (this.configPersistTimer) clearTimeout(this.configPersistTimer);
97472
97472
  this.configPersistTimer = setTimeout(() => {
97473
97473
  this.configPersistTimer = null;
97474
- import("./trpc-BbV9JZTO.js").then(({ trpcClient }) => {
97474
+ import("./trpc-4dLqTVBm.js").then(({ trpcClient }) => {
97475
97475
  trpcClient.config.update.mutate({ terminal: { fontSize: this.config.fontSize } });
97476
97476
  }).catch(() => {});
97477
97477
  }, CONFIG_PERSIST_DEBOUNCE);
@@ -108032,7 +108032,7 @@ var languages = [
108032
108032
  name: "CSS",
108033
108033
  extensions: ["css"],
108034
108034
  load() {
108035
- return import("./dist-edAEd-k-.js").then((m) => m.css());
108035
+ return import("./dist-CgFGYGuV.js").then((m) => m.css());
108036
108036
  }
108037
108037
  }),
108038
108038
  /* @__PURE__ */ LanguageDescription.of({
@@ -108052,7 +108052,7 @@ var languages = [
108052
108052
  "hbs"
108053
108053
  ],
108054
108054
  load() {
108055
- return import("./dist-DRkFTPqz.js").then((m) => m.html());
108055
+ return import("./dist-C7cu-Ohs.js").then((m) => m.html());
108056
108056
  }
108057
108057
  }),
108058
108058
  /* @__PURE__ */ LanguageDescription.of({
@@ -108086,7 +108086,7 @@ var languages = [
108086
108086
  "jinja2"
108087
108087
  ],
108088
108088
  load() {
108089
- return import("./dist-0Gp0z2-n.js").then((m) => m.jinja());
108089
+ return import("./dist-CmkO24b2.js").then((m) => m.jinja());
108090
108090
  }
108091
108091
  }),
108092
108092
  /* @__PURE__ */ LanguageDescription.of({
@@ -108094,7 +108094,7 @@ var languages = [
108094
108094
  alias: ["json5"],
108095
108095
  extensions: ["json", "map"],
108096
108096
  load() {
108097
- return import("./dist-Bhwr_0k7.js").then((m) => m.json());
108097
+ return import("./dist-Bosp3yvI.js").then((m) => m.json());
108098
108098
  }
108099
108099
  }),
108100
108100
  /* @__PURE__ */ LanguageDescription.of({
@@ -108108,14 +108108,14 @@ var languages = [
108108
108108
  name: "LESS",
108109
108109
  extensions: ["less"],
108110
108110
  load() {
108111
- return import("./dist-BaqegCo3.js").then((m) => m.less());
108111
+ return import("./dist-CTDTyhyq.js").then((m) => m.less());
108112
108112
  }
108113
108113
  }),
108114
108114
  /* @__PURE__ */ LanguageDescription.of({
108115
108115
  name: "Liquid",
108116
108116
  extensions: ["liquid"],
108117
108117
  load() {
108118
- return import("./dist-DfJANrLX.js").then((m) => m.liquid());
108118
+ return import("./dist-FpVzh8vE.js").then((m) => m.liquid());
108119
108119
  }
108120
108120
  }),
108121
108121
  /* @__PURE__ */ LanguageDescription.of({
@@ -108132,7 +108132,7 @@ var languages = [
108132
108132
  "mkd"
108133
108133
  ],
108134
108134
  load() {
108135
- return import("./dist-DlZIJzsh.js").then((m) => m.markdown());
108135
+ return import("./dist-BbKu_y6W.js").then((m) => m.markdown());
108136
108136
  }
108137
108137
  }),
108138
108138
  /* @__PURE__ */ LanguageDescription.of({
@@ -108158,7 +108158,7 @@ var languages = [
108158
108158
  "phtml"
108159
108159
  ],
108160
108160
  load() {
108161
- return import("./dist-rENGOe6I.js").then((m) => m.php());
108161
+ return import("./dist-glvfDQXi.js").then((m) => m.php());
108162
108162
  }
108163
108163
  }),
108164
108164
  /* @__PURE__ */ LanguageDescription.of({
@@ -108198,14 +108198,14 @@ var languages = [
108198
108198
  name: "Sass",
108199
108199
  extensions: ["sass"],
108200
108200
  load() {
108201
- return import("./dist-BSrtv0FL.js").then((m) => m.sass({ indented: true }));
108201
+ return import("./dist-Cxmy4PRF.js").then((m) => m.sass({ indented: true }));
108202
108202
  }
108203
108203
  }),
108204
108204
  /* @__PURE__ */ LanguageDescription.of({
108205
108205
  name: "SCSS",
108206
108206
  extensions: ["scss"],
108207
108207
  load() {
108208
- return import("./dist-BSrtv0FL.js").then((m) => m.sass());
108208
+ return import("./dist-Cxmy4PRF.js").then((m) => m.sass());
108209
108209
  }
108210
108210
  }),
108211
108211
  /* @__PURE__ */ LanguageDescription.of({
@@ -108272,7 +108272,7 @@ var languages = [
108272
108272
  alias: ["yml"],
108273
108273
  extensions: ["yaml", "yml"],
108274
108274
  load() {
108275
- return import("./dist-cgbXhCvj.js").then((m) => m.yaml());
108275
+ return import("./dist-DaxZJMDX.js").then((m) => m.yaml());
108276
108276
  }
108277
108277
  }),
108278
108278
  /* @__PURE__ */ LanguageDescription.of({
@@ -109159,13 +109159,13 @@ var languages = [
109159
109159
  name: "Vue",
109160
109160
  extensions: ["vue"],
109161
109161
  load() {
109162
- return import("./dist-DgvOnKuT.js").then((m) => m.vue());
109162
+ return import("./dist-BZbvCEXY.js").then((m) => m.vue());
109163
109163
  }
109164
109164
  }),
109165
109165
  /* @__PURE__ */ LanguageDescription.of({
109166
109166
  name: "Angular Template",
109167
109167
  load() {
109168
- return import("./dist-jJpwOzat.js").then((m) => m.angular());
109168
+ return import("./dist-C0TNMvo3.js").then((m) => m.angular());
109169
109169
  }
109170
109170
  })
109171
109171
  ];
@@ -169295,6 +169295,7 @@ function ProjectionEvidence({ activeError, archiveError, applyStatusError, rowEr
169295
169295
  * 2. Share one compact/full presentation while compact Pending geometry stays fixed.
169296
169296
  * 3. Own a 1/2/4-column container-responsive topology composed from layered lane viewports.
169297
169297
  * 4. Preserve list continuity through motion layout transitions and stable identities.
169298
+ * 5. Show task counts and progress only when supplied by the CLI row projection.
169298
169299
  *
169299
169300
  * Original request (2026-07-28): add ReadonlyKanban to Dashboard and keep static mode objective.
169300
169301
  * Owner correction (2026-07-28): use container queries for 4x1, 2x2, and 1x4 without horizontal scrolling.
@@ -169365,7 +169366,8 @@ function ReadonlyKanban({ activeItems, archivedItems, activeCounts, archivedCoun
169365
169366
  transition: { duration: .16 },
169366
169367
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReadonlyKanbanRow, {
169367
169368
  item,
169368
- laneId: lane.id
169369
+ laneId: lane.id,
169370
+ compact
169369
169371
  })
169370
169372
  }, `${lane.id}:${item.id}`))
169371
169373
  }), rows.length === 0 && count === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -169384,13 +169386,19 @@ function ReadonlyKanban({ activeItems, archivedItems, activeCounts, archivedCoun
169384
169386
  })
169385
169387
  });
169386
169388
  }
169387
- function ReadonlyKanbanRow({ item, laneId }) {
169389
+ function ReadonlyKanbanRow({ item, laneId, compact }) {
169388
169390
  const archived = laneId === "archived";
169389
169391
  const sharedDescriptor = {
169390
169392
  family: archived ? "archive" : "changes",
169391
169393
  entityId: item.id
169392
169394
  };
169393
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VTLink, {
169395
+ const cli = item.cliTaskSummary;
169396
+ const cliProgress = cli ? {
169397
+ completed: cli.completedTasks,
169398
+ total: cli.totalTasks
169399
+ } : null;
169400
+ const cliPercent = cliProgress && cliProgress.total > 0 ? Math.min(100, Math.max(0, cliProgress.completed / cliProgress.total * 100)) : 0;
169401
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(VTLink, {
169394
169402
  to: archived ? "/archive/$changeId" : "/changes/$changeId",
169395
169403
  params: { changeId: item.id },
169396
169404
  state: (previous) => ({
@@ -169404,20 +169412,38 @@ function ReadonlyKanbanRow({ item, laneId }) {
169404
169412
  vt: { sharedElements: sharedDescriptor },
169405
169413
  ...getSharedElementBinding(sharedDescriptor, "container"),
169406
169414
  className: "border-border/70 bg-card hover:bg-muted/50 block min-w-0 rounded-md border px-2.5 py-2",
169407
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
169415
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
169408
169416
  className: "flex min-w-0 items-start gap-2",
169409
- children: [archived ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Archive, { className: "text-muted-foreground mt-0.5 h-3.5 w-3.5 shrink-0" }) : null, /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
169410
- className: "min-w-0 flex-1",
169411
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
169412
- ...getSharedElementBinding(sharedDescriptor, "title"),
169413
- className: "truncate text-xs font-medium",
169414
- children: item.name
169415
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
169416
- className: "text-muted-foreground truncate text-[11px]",
169417
- children: archived ? formatDate(getKanbanArchiveTimestamp(item)) : item.updatedAt > 0 ? formatRelativeTime(item.updatedAt) : item.id
169418
- })]
169419
- })]
169420
- })
169417
+ children: [
169418
+ archived ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Archive, { className: "text-muted-foreground mt-0.5 h-3.5 w-3.5 shrink-0" }) : null,
169419
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
169420
+ className: "min-w-0 flex-1",
169421
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
169422
+ ...getSharedElementBinding(sharedDescriptor, "title"),
169423
+ className: "truncate text-xs font-medium",
169424
+ children: item.name
169425
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
169426
+ className: "text-muted-foreground truncate text-[11px]",
169427
+ children: archived ? formatDate(getKanbanArchiveTimestamp(item)) : item.updatedAt > 0 ? formatRelativeTime(item.updatedAt) : item.id
169428
+ })]
169429
+ }),
169430
+ !archived && cliProgress ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
169431
+ className: "text-muted-foreground shrink-0 font-mono text-[10px]",
169432
+ children: [
169433
+ cliProgress.completed,
169434
+ "/",
169435
+ cliProgress.total
169436
+ ]
169437
+ }) : null
169438
+ ]
169439
+ }), !archived && !compact && cliProgress ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
169440
+ className: "bg-muted mt-2 h-1 rounded-full",
169441
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(motion.div, {
169442
+ className: "bg-primary h-full rounded-full",
169443
+ initial: false,
169444
+ animate: { width: `${cliPercent}%` }
169445
+ })
169446
+ }) : null]
169421
169447
  });
169422
169448
  }
169423
169449
  //#endregion
@@ -169775,13 +169801,23 @@ function Board() {
169775
169801
  * 2. Keep the phase badge vertically centered while the time anchors the rail bottom.
169776
169802
  * 3. Share the exact row vocabulary between the Changes list and Dashboard.
169777
169803
  * 4. Preserve shared-element bindings for View Transition continuity.
169778
- * 5. Keep the phase badge a planning/artifact signal; Apply progress belongs to Change Detail.
169804
+ * 5. Render an optional CLI Apply ratio as an ambient fill without making local tracked data authoritative.
169779
169805
  *
169780
169806
  * Original request (2026-08-15): Owner walkthrough: grid layout, subtitle facts, badge
169781
169807
  * centered with time at the bottom, one atomic row component across pages.
169782
169808
  */
169809
+ /** Ambient fill behind a phase badge; the caller must derive this ratio from CLI evidence. */
169810
+ function PhaseBadgeProgressFill({ ratio }) {
169811
+ if (!Number.isFinite(ratio) || ratio <= 0) return null;
169812
+ const clamped = Math.min(100, Math.max(0, ratio * 100));
169813
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
169814
+ "aria-hidden": "true",
169815
+ className: "bg-primary/50 pointer-events-none absolute inset-y-0 left-0",
169816
+ style: { width: `${clamped}%` }
169817
+ });
169818
+ }
169783
169819
  /** Shared Change-row layout: icon | title+subtitle | badge(time) | chevron. */
169784
- function ChangeRow({ changeId, name, subtitle, phase, updatedAt, formatTime, sharedFamily = "changes", className = "", containerProps, titleProps, iconProps }) {
169820
+ function ChangeRow({ changeId, name, subtitle, phase, updatedAt, formatTime, sharedFamily = "changes", className = "", progressRatio = null, containerProps, titleProps, iconProps }) {
169785
169821
  const sharedDescriptor = {
169786
169822
  family: sharedFamily,
169787
169823
  entityId: changeId
@@ -169815,12 +169851,15 @@ function ChangeRow({ changeId, name, subtitle, phase, updatedAt, formatTime, sha
169815
169851
  className: "flex flex-col items-end justify-between gap-1 text-right",
169816
169852
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
169817
169853
  className: "flex flex-1 items-center",
169818
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
169854
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Badge, {
169819
169855
  tone: "custom",
169820
169856
  size: "sm",
169821
169857
  shape: "box",
169822
- className: `border ${phase.toneClass}`,
169823
- children: phase.label
169858
+ className: `relative overflow-hidden border ${phase.toneClass}`,
169859
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(PhaseBadgeProgressFill, { ratio: progressRatio ?? NaN }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
169860
+ className: "relative",
169861
+ children: phase.label
169862
+ })]
169824
169863
  })
169825
169864
  }), updatedAt > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
169826
169865
  className: "text-muted-foreground shrink-0 text-xs",
@@ -169840,14 +169879,18 @@ function ChangeRowChevron() {
169840
169879
  //#endregion
169841
169880
  //#region src/lib/change-workflow-phase.ts
169842
169881
  function classifyChangeWorkflowPhase(params) {
169882
+ if (params.hasStatus && params.trackedArtifactStatus === "blocked") return {
169883
+ label: "Draft",
169884
+ toneClass: "border-amber-500/40 text-amber-700 dark:text-amber-300"
169885
+ };
169886
+ if (typeof params.cliCompletedTasks === "number" && params.cliCompletedTasks > 0) return {
169887
+ label: "Applying",
169888
+ toneClass: "border-primary/40 text-primary"
169889
+ };
169843
169890
  if (!params.hasStatus) return {
169844
169891
  label: "Unknown",
169845
169892
  toneClass: "border-border text-muted-foreground"
169846
169893
  };
169847
- if (params.trackedArtifactStatus === "blocked") return {
169848
- label: "Draft",
169849
- toneClass: "border-amber-500/40 text-amber-700 dark:text-amber-300"
169850
- };
169851
169894
  if (params.isPlanningComplete) return {
169852
169895
  label: "Planning Complete",
169853
169896
  toneClass: "border-sky-500/40 text-sky-700 dark:text-sky-300"
@@ -169943,7 +169986,7 @@ function useChangeListContinuity(incomingChanges, containerRef) {
169943
169986
  /**
169944
169987
  * Orthogonal intents (updated 2026-08-15 Asia/Shanghai):
169945
169988
  * 1. List only active Changes from the current writable Planning root.
169946
- * 2. Derive planning/artifact state and terminal evidence from CLI Status only.
169989
+ * 2. Derive planning/artifact state from CLI Status and implementation progress from CLI task evidence.
169947
169990
  * 3. Preserve ChangeList row continuity and stale display together with collision-safe detail navigation.
169948
169991
  * 4. Keep the advanced New Change command reachable from the page header.
169949
169992
  * 5. Defer aggregate workflow Status until a primary Change row is renderable; preserve explicit failures.
@@ -170079,8 +170122,20 @@ function ChangeList() {
170079
170122
  const phase = classifyChangeWorkflowPhase({
170080
170123
  hasStatus: Boolean(status),
170081
170124
  isPlanningComplete: status?.isPlanningComplete ?? false,
170082
- trackedArtifactStatus: inferTrackedArtifactStatus(status?.artifacts.map((artifact) => artifact.status) ?? [])
170125
+ trackedArtifactStatus: inferTrackedArtifactStatus(status?.artifacts.map((artifact) => artifact.status) ?? []),
170126
+ cliCompletedTasks: change.cliTaskSummary?.completedTasks ?? null
170083
170127
  });
170128
+ const cliTaskSummary = change.cliTaskSummary;
170129
+ const cliProgressRatio = cliTaskSummary && cliTaskSummary.totalTasks > 0 ? cliTaskSummary.completedTasks / cliTaskSummary.totalTasks : null;
170130
+ const cliTaskEvidence = cliTaskSummary ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
170131
+ title: "Task counts reported by the OpenSpec CLI for this Change.",
170132
+ children: [
170133
+ "Tasks ",
170134
+ cliTaskSummary.completedTasks,
170135
+ "/",
170136
+ cliTaskSummary.totalTasks
170137
+ ]
170138
+ }) : null;
170084
170139
  const sharedDescriptor = {
170085
170140
  family: "changes",
170086
170141
  entityId: change.id
@@ -170108,15 +170163,19 @@ function ChangeList() {
170108
170163
  phase,
170109
170164
  updatedAt: change.updatedAt,
170110
170165
  formatTime: formatRelativeTime,
170166
+ progressRatio: cliProgressRatio,
170111
170167
  className: "min-w-0 flex-1",
170112
170168
  titleProps: { ...change.id !== change.name ? {} : null },
170113
- subtitle: !statusError && status ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
170169
+ subtitle: !statusError && status ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
170114
170170
  doneArtifacts,
170115
170171
  "/",
170116
170172
  totalArtifacts,
170117
170173
  " artifacts · ",
170118
170174
  status.schemaName
170119
- ] }) : !statusError && statuses === void 0 && isStatusLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RealtimeSkeletonLine, { className: "w-28" }) : "Workflow status unavailable"
170175
+ ] }), cliTaskEvidence ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [" · ", cliTaskEvidence] }) : null] }) : !statusError && statuses === void 0 && isStatusLoading ? cliTaskEvidence ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
170176
+ className: "inline-flex items-center gap-1.5",
170177
+ children: [cliTaskEvidence, /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RealtimeSkeletonLine, { className: "w-12" })]
170178
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RealtimeSkeletonLine, { className: "w-28" }) : cliTaskEvidence ?? "Workflow status unavailable"
170120
170179
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChangeRowChevron, {})]
170121
170180
  })
170122
170181
  }, change.id);
@@ -172341,7 +172400,7 @@ var CONFIG_GUIDE_STAGE_META = {
172341
172400
  //#region src/components/config/config-guide.tsx
172342
172401
  var ConfigGuideContext = (0, import_react.createContext)(null);
172343
172402
  (0, import_react.lazy)(async () => {
172344
- return { default: (await import("./config-guide-presentation-r59qmEkS.js")).ConfigGuidePresentationLayer };
172403
+ return { default: (await import("./config-guide-presentation-CcpWbzbF.js")).ConfigGuidePresentationLayer };
172345
172404
  });
172346
172405
  /** Access the root-owned adaptive Guide runtime. */
172347
172406
  function useConfigGuide() {
@@ -177366,7 +177425,7 @@ async function refreshDashboardGitSnapshot(reason, expectedBindingToken) {
177366
177425
  * 1. Render independent Dashboard projections inside stable region-owned Pending geometry.
177367
177426
  * 2. Keep Dashboard-owned readonly Code Git refresh bound to rendered provenance and separate from Planning-root mutation authority.
177368
177427
  * 3. Curate Code Git activity while preserving binding-token detail handoff provenance.
177369
- * 4. Show only objective planning and artifact facts, never tracked task completion.
177428
+ * 4. Show objective planning/artifact facts plus CLI task evidence, never tracked task completion.
177370
177429
  * 5. Retain stable regional snapshots beside their own loading, updating, and error evidence.
177371
177430
  *
177372
177431
  * Original request (2026-07-16): "接下来,你来接手后续工作"
@@ -177849,8 +177908,20 @@ function Dashboard() {
177849
177908
  const phase = classifyChangeWorkflowPhase({
177850
177909
  hasStatus: Boolean(status),
177851
177910
  isPlanningComplete: status?.isPlanningComplete ?? false,
177852
- trackedArtifactStatus
177911
+ trackedArtifactStatus,
177912
+ cliCompletedTasks: change.cliTaskSummary?.completedTasks ?? null
177853
177913
  });
177914
+ const cliTaskSummary = change.cliTaskSummary;
177915
+ const cliProgressRatio = cliTaskSummary && cliTaskSummary.totalTasks > 0 ? cliTaskSummary.completedTasks / cliTaskSummary.totalTasks : null;
177916
+ const cliTaskEvidence = cliTaskSummary ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
177917
+ title: "Task counts reported by the OpenSpec CLI for this Change.",
177918
+ children: [
177919
+ "Tasks ",
177920
+ cliTaskSummary.completedTasks,
177921
+ "/",
177922
+ cliTaskSummary.totalTasks
177923
+ ]
177924
+ }) : null;
177854
177925
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VTLink, {
177855
177926
  to: "/changes/$changeId",
177856
177927
  params: { changeId: change.id },
@@ -177880,14 +177951,15 @@ function Dashboard() {
177880
177951
  phase,
177881
177952
  updatedAt: change.updatedAt,
177882
177953
  formatTime: formatRelativeTime,
177954
+ progressRatio: cliProgressRatio,
177883
177955
  className: "min-w-0 flex-1",
177884
- subtitle: status ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
177956
+ subtitle: status ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
177885
177957
  doneArtifacts,
177886
177958
  "/",
177887
177959
  totalArtifacts,
177888
177960
  " artifacts · ",
177889
177961
  status.schemaName
177890
- ] }) : "Artifacts status unavailable"
177962
+ ] }), cliTaskEvidence ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [" · ", cliTaskEvidence] }) : null] }) : cliTaskEvidence ?? "Artifacts status unavailable"
177891
177963
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChangeRowChevron, {})]
177892
177964
  })
177893
177965
  }, change.id);
@@ -1,5 +1,5 @@
1
1
  import { it as extensions } from "./Geometry-jQ4l8GtP.js";
2
- import { M as FilterPipe, j as FilterSystem } from "./entry-server-BzFP1YY0.js";
2
+ import { M as FilterPipe, j as FilterSystem } from "./entry-server-D-Z6rVrS.js";
3
3
  //#region ../../node_modules/.pnpm/pixi.js@8.16.0/node_modules/pixi.js/lib/filters/init.mjs
4
4
  extensions.add(FilterSystem);
5
5
  extensions.add(FilterPipe);
@@ -0,0 +1,3 @@
1
+ import "./jsx-runtime-CQL-l9BP.js";
2
+ import { Nt as trpcClient } from "./entry-server-D-Z6rVrS.js";
3
+ export { trpcClient };
@@ -0,0 +1,4 @@
1
+ import "./Geometry-jQ4l8GtP.js";
2
+ import "./entry-server-D-Z6rVrS.js";
3
+ import "./init-CCY3tsKc.js";
4
+ export {};