@exaudeus/workrail 3.11.2 → 3.12.0

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 (36) hide show
  1. package/dist/console/assets/index-CRgjJiMS.js +28 -0
  2. package/dist/console/assets/index-DW78t31j.css +1 -0
  3. package/dist/console/index.html +2 -2
  4. package/dist/manifest.json +65 -57
  5. package/dist/mcp/handlers/shared/request-workflow-reader.d.ts +10 -2
  6. package/dist/mcp/handlers/shared/request-workflow-reader.js +27 -10
  7. package/dist/mcp/handlers/shared/workflow-source-visibility.d.ts +3 -1
  8. package/dist/mcp/handlers/shared/workflow-source-visibility.js +7 -3
  9. package/dist/mcp/handlers/v2-execution/replay.js +25 -1
  10. package/dist/mcp/handlers/v2-execution/start.js +23 -17
  11. package/dist/mcp/handlers/v2-workflow.js +123 -8
  12. package/dist/mcp/output-schemas.d.ts +393 -0
  13. package/dist/mcp/output-schemas.js +49 -1
  14. package/dist/mcp/v2/tools.d.ts +3 -0
  15. package/dist/mcp/v2/tools.js +1 -0
  16. package/dist/v2/durable-core/constants.d.ts +1 -0
  17. package/dist/v2/durable-core/constants.js +2 -1
  18. package/dist/v2/durable-core/domain/observation-builder.d.ts +4 -1
  19. package/dist/v2/durable-core/domain/observation-builder.js +9 -0
  20. package/dist/v2/durable-core/schemas/export-bundle/index.d.ts +76 -16
  21. package/dist/v2/durable-core/schemas/session/events.d.ts +26 -5
  22. package/dist/v2/durable-core/schemas/session/events.js +2 -1
  23. package/dist/v2/infra/local/session-summary-provider/index.js +2 -0
  24. package/dist/v2/infra/local/workspace-anchor/index.js +1 -0
  25. package/dist/v2/ports/workspace-anchor.port.d.ts +3 -0
  26. package/dist/v2/projections/resume-ranking.d.ts +1 -0
  27. package/dist/v2/usecases/console-routes.js +26 -0
  28. package/dist/v2/usecases/console-service.js +25 -6
  29. package/dist/v2/usecases/console-types.d.ts +22 -1
  30. package/dist/v2/usecases/worktree-service.d.ts +10 -0
  31. package/dist/v2/usecases/worktree-service.js +136 -0
  32. package/package.json +1 -1
  33. package/workflows/architecture-scalability-audit.json +317 -0
  34. package/workflows/routines/tension-driven-design.json +5 -5
  35. package/dist/console/assets/index-C5C4nDs4.css +0 -1
  36. package/dist/console/assets/index-CSUqsoQl.js +0 -28
@@ -0,0 +1 @@
1
+ .react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.z-50{z-index:50}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mr-\[420px\]{margin-right:420px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-\[500px\]{height:500px}.max-h-48{max-height:calc(var(--spacing) * 48)}.min-h-screen{min-height:100vh}.w-\[420px\]{width:420px}.w-full{width:100%}.max-w-\[200px\]{max-width:200px}.max-w-\[240px\]{max-width:240px}.max-w-\[360px\]{max-width:360px}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--status-in-progress\)\],.border-\[var\(--status-in-progress\)\]\/30{border-color:var(--status-in-progress)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--status-in-progress\)\]\/30{border-color:color-mix(in oklab,var(--status-in-progress) 30%,transparent)}}.border-blue-500\/20{border-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/20{border-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.border-green-500\/20{border-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.border-green-500\/20{border-color:color-mix(in oklab,var(--color-green-500) 20%,transparent)}}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/20{border-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.border-yellow-500\/40{border-color:#edb20066}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/40{border-color:color-mix(in oklab,var(--color-yellow-500) 40%,transparent)}}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--bg-card\)\]{background-color:var(--bg-card)}.bg-\[var\(--bg-primary\)\]{background-color:var(--bg-primary)}.bg-\[var\(--bg-secondary\)\]{background-color:var(--bg-secondary)}.bg-\[var\(--bg-tertiary\)\]{background-color:var(--bg-tertiary)}.bg-\[var\(--status-in-progress\)\]\/20{background-color:var(--status-in-progress)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--status-in-progress\)\]\/20{background-color:color-mix(in oklab,var(--status-in-progress) 20%,transparent)}}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,transparent)}}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--error\)\]{color:var(--error)}.text-\[var\(--status-in-progress\)\]{color:var(--status-in-progress)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-\[var\(--text-primary\)\]{color:var(--text-primary)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-\[var\(--warning\)\]{color:var(--warning)}.text-blue-400{color:var(--color-blue-400)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-red-400{color:var(--color-red-400)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.placeholder-\[var\(--text-muted\)\]::placeholder{color:var(--text-muted)}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[margin\]{transition-property:margin;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.group-hover\:text-\[var\(--accent\)\]:is(:where(.group):hover *){color:var(--accent)}.group-hover\:text-\[var\(--text-primary\)\]:is(:where(.group):hover *){color:var(--text-primary)}.group-hover\:text-\[var\(--text-secondary\)\]:is(:where(.group):hover *){color:var(--text-secondary)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:border-\[var\(--accent\)\]:hover{border-color:var(--accent)}.hover\:bg-\[var\(--bg-card\)\]:hover{background-color:var(--bg-card)}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:text-\[var\(--text-secondary\)\]:hover{color:var(--text-secondary)}}.focus\:border-\[var\(--accent\)\]:focus{border-color:var(--accent)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}:root{--bg-primary:#0a0a0a;--bg-secondary:#141414;--bg-card:#1a1a1a;--border:#2a2a2a;--text-primary:#fafafa;--text-secondary:#a0a0a0;--text-muted:#666;--accent:#3b82f6;--accent-hover:#2563eb;--success:#22c55e;--warning:#eab308;--error:#ef4444;--blocked:#f97316}body{background:var(--bg-primary);color:var(--text-primary);margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}.markdown-view{color:var(--text-secondary);word-break:break-word;font-size:.8125rem;line-height:1.6}.markdown-view h1,.markdown-view h2,.markdown-view h3,.markdown-view h4,.markdown-view h5,.markdown-view h6{color:var(--text-primary);margin:1em 0 .4em;font-weight:600;line-height:1.3}.markdown-view h1{font-size:1.1em}.markdown-view h2{font-size:1em}.markdown-view h3{font-size:.95em}.markdown-view h4,.markdown-view h5,.markdown-view h6{font-size:.9em}.markdown-view>:first-child{margin-top:0}.markdown-view p{margin:.5em 0}.markdown-view strong{color:var(--text-primary);font-weight:600}.markdown-view em{font-style:italic}.markdown-view a{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.markdown-view ul{margin:.4em 0;padding-left:1.4em;list-style-type:disc}.markdown-view ol{margin:.4em 0;padding-left:1.4em;list-style-type:decimal}.markdown-view li{color:var(--text-secondary);margin:.15em 0}.markdown-view li::marker{color:var(--text-muted)}.markdown-view li>ul,.markdown-view li>ol{margin:.1em 0}.markdown-view li>ul{list-style-type:circle}.markdown-view code{background:var(--bg-primary);color:var(--text-primary);border-radius:3px;padding:.15em .35em;font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:.88em}.markdown-view pre{background:var(--bg-primary);border-radius:6px;margin:.5em 0;padding:.75em;overflow-x:auto}.markdown-view pre code{background:0 0;padding:0;font-size:.85em;line-height:1.5}.markdown-view blockquote{border-left:3px solid var(--border);color:var(--text-muted);margin:.5em 0;padding:.25em .75em}.markdown-view hr{border:none;border-top:1px solid var(--border);margin:.75em 0}.markdown-view table{border-collapse:collapse;width:100%;margin:.5em 0;font-size:.9em}.markdown-view th,.markdown-view td{border:1px solid var(--border);text-align:left;padding:.35em .6em}.markdown-view th{background:var(--bg-primary);color:var(--text-primary);font-weight:600}.markdown-view img{border-radius:4px;max-width:100%}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>WorkRail Console</title>
7
- <script type="module" crossorigin src="/console/assets/index-CSUqsoQl.js"></script>
8
- <link rel="stylesheet" crossorigin href="/console/assets/index-C5C4nDs4.css">
7
+ <script type="module" crossorigin src="/console/assets/index-CRgjJiMS.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/console/assets/index-DW78t31j.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
@@ -361,16 +361,16 @@
361
361
  "sha256": "aabbaca7582a27fb7e2b47df88218e6e96d26b8fb8799cab6d25808685bd9196",
362
362
  "bytes": 7686
363
363
  },
364
- "console/assets/index-C5C4nDs4.css": {
365
- "sha256": "a3fdfc902967452fbad38abc323e3d164bd4359c3e89c00a6d44052a590fb2e3",
366
- "bytes": 34096
364
+ "console/assets/index-CRgjJiMS.js": {
365
+ "sha256": "3bfebdb0b5533a1732425549ee1f5d86a82164c4e9b2b93dcb630c5fe962ce08",
366
+ "bytes": 553514
367
367
  },
368
- "console/assets/index-CSUqsoQl.js": {
369
- "sha256": "70957146018d67bf1307ca71333f186dccf4348b55b43ef2e5f6701415c05b2e",
370
- "bytes": 545520
368
+ "console/assets/index-DW78t31j.css": {
369
+ "sha256": "cf0b93064dfb0ad9193a55abc50b7c81317bf50c0af6d510928504983a73cf8f",
370
+ "bytes": 37845
371
371
  },
372
372
  "console/index.html": {
373
- "sha256": "202664a02de7ea2820e872fe573dff19f0587b7e18031a7e8780b2ef5ff814e5",
373
+ "sha256": "7f5476f4f2b41a5040d0e50b4d07bc93fef7e7364889d3de19355d3949f60279",
374
374
  "bytes": 417
375
375
  },
376
376
  "core/error-handler.d.ts": {
@@ -702,12 +702,12 @@
702
702
  "bytes": 2785
703
703
  },
704
704
  "mcp/handlers/shared/request-workflow-reader.d.ts": {
705
- "sha256": "610456c2f26108e8903911a2d06083d7bc8cd4da0b0694d29b8b986998ba71d8",
706
- "bytes": 1213
705
+ "sha256": "c5d2004c403e04d8ce07ea816f5c3f0a5836d99b1f97776650c734054c5a01de",
706
+ "bytes": 1504
707
707
  },
708
708
  "mcp/handlers/shared/request-workflow-reader.js": {
709
- "sha256": "4f92edc5ba378d6a0c069b2a29046de08809adf309790d15a3a6db7ce580d599",
710
- "bytes": 5182
709
+ "sha256": "18da7a58ae36a28baf1b8e4711647bedb37b932f364ee2bb883533688f5124c9",
710
+ "bytes": 5732
711
711
  },
712
712
  "mcp/handlers/shared/with-timeout.d.ts": {
713
713
  "sha256": "31ca3db008cb5cd439e0d1132bc4b29be0900c403c452931e3a24a50e45beb54",
@@ -718,12 +718,12 @@
718
718
  "bytes": 405
719
719
  },
720
720
  "mcp/handlers/shared/workflow-source-visibility.d.ts": {
721
- "sha256": "5a72accff6d5fcddd3b8e908292a42eae4d8f3a86ecd65807fd586d33177ec79",
722
- "bytes": 1552
721
+ "sha256": "6931c576a9d078f041580a4ecf3a3ac2129d288712725f556018a899e5fc2060",
722
+ "bytes": 1772
723
723
  },
724
724
  "mcp/handlers/shared/workflow-source-visibility.js": {
725
- "sha256": "3b3f02879704d02235360570c6839afe0c5d3b1475ee9c6a614ac9ed75ffe5e9",
726
- "bytes": 4451
725
+ "sha256": "46a1df4b1effa2c16da9d4beaff8081765a04700a4defc23a8a45373f0f7091a",
726
+ "bytes": 4600
727
727
  },
728
728
  "mcp/handlers/v2-advance-core.d.ts": {
729
729
  "sha256": "0a07ea15caf7b0a3123d3b0b44c2b85392d090dd140bf82370fd0e84d1aa5b0e",
@@ -874,16 +874,16 @@
874
874
  "bytes": 2570
875
875
  },
876
876
  "mcp/handlers/v2-execution/replay.js": {
877
- "sha256": "b801c9e38ba09be14774295c3eee264a6b6d840afb03aa679500e5e050ce1bcb",
878
- "bytes": 9025
877
+ "sha256": "a7776128c4939458791424576073cba18d0081012e107caf36876c0bf023cf8a",
878
+ "bytes": 10121
879
879
  },
880
880
  "mcp/handlers/v2-execution/start.d.ts": {
881
881
  "sha256": "14e91fa5531c3bbc05fd96157633d7de7cb4ccb8b85dfaad9c077afbe440a145",
882
882
  "bytes": 3422
883
883
  },
884
884
  "mcp/handlers/v2-execution/start.js": {
885
- "sha256": "5287dda42c97dde95471ce52df74c2dc5aba9dc8485b01ebde00fef3a8e62e89",
886
- "bytes": 18573
885
+ "sha256": "2ed3b7b6245688aaf6f6011e00e8c42f8300134ba8fad179a04a6785553f6f4f",
886
+ "bytes": 18983
887
887
  },
888
888
  "mcp/handlers/v2-reference-resolver.d.ts": {
889
889
  "sha256": "0b1d2640306b6a0c1067ca66bb20e6ec35d291b33dc328a78d5bfa8006394234",
@@ -930,8 +930,8 @@
930
930
  "bytes": 396
931
931
  },
932
932
  "mcp/handlers/v2-workflow.js": {
933
- "sha256": "b682d6ae85795519ba09c7aa00b517e7f4c3c7263e4fccd98c8b32182c1c0729",
934
- "bytes": 9612
933
+ "sha256": "e496675cf8ae2259e0c5a53692732a231fb4c923440214df4e54f696bb7ab734",
934
+ "bytes": 16632
935
935
  },
936
936
  "mcp/handlers/v2-workspace-resolution.d.ts": {
937
937
  "sha256": "dd4de57b4918ebe749cf8c1df70c02bf1effc50932634bae60db53c9a157e872",
@@ -958,12 +958,12 @@
958
958
  "bytes": 7991
959
959
  },
960
960
  "mcp/output-schemas.d.ts": {
961
- "sha256": "f99509572620ccb0e45aea6ff1e4453d6197863854e46ac0f7b5f0bebb30f1c6",
962
- "bytes": 72272
961
+ "sha256": "77c29cf4cc1500fccd383b8a725b3a4b30c7d1913ec31419b607b3e9f358f652",
962
+ "bytes": 86643
963
963
  },
964
964
  "mcp/output-schemas.js": {
965
- "sha256": "507b37eff083cd0b79d87f99afcbeef23bf916e8b10b695660afd2fef5a0ab6b",
966
- "bytes": 16020
965
+ "sha256": "692e8b71740b8b3f89a541b8bc57992ce1b4149b117c5e19d77988777e0b215e",
966
+ "bytes": 19084
967
967
  },
968
968
  "mcp/render-envelope.d.ts": {
969
969
  "sha256": "22e83e1aba52968a7136cf289125a217b5f462a5a66a1eebe4669006e3326fdb",
@@ -1118,12 +1118,12 @@
1118
1118
  "bytes": 3276
1119
1119
  },
1120
1120
  "mcp/v2/tools.d.ts": {
1121
- "sha256": "0a1ffaec8cecdf042f78af53063f9f1288a1c410f59731f189532aa4101e71b9",
1122
- "bytes": 7206
1121
+ "sha256": "2247d8ef78cf2384fc666eda32dd486d7a1976c0b557189243cdcdfb350de891",
1122
+ "bytes": 7339
1123
1123
  },
1124
1124
  "mcp/v2/tools.js": {
1125
- "sha256": "d2de769feb5bb8c6ddcd415594f7cf49380f13bae5ddc422445381adcef038a3",
1126
- "bytes": 10771
1125
+ "sha256": "30d231352ba8feb64273338da62e382c7018fbe2c79b948130b9fbb004284772",
1126
+ "bytes": 11093
1127
1127
  },
1128
1128
  "mcp/validation/bounded-json.d.ts": {
1129
1129
  "sha256": "82203ac6123d5c6989606c3b5405aaea99ab829c8958835f9ae3ba45b8bc8fd5",
@@ -1462,12 +1462,12 @@
1462
1462
  "bytes": 447
1463
1463
  },
1464
1464
  "v2/durable-core/constants.d.ts": {
1465
- "sha256": "6cc04b9df73eab34040758bf14faff83038330971180452e3776fae15ff77076",
1466
- "bytes": 3890
1465
+ "sha256": "77c0ac6c15cb5cd8c73c43a58879ddba142b0447a1f69cc43010d86df1c34485",
1466
+ "bytes": 3946
1467
1467
  },
1468
1468
  "v2/durable-core/constants.js": {
1469
- "sha256": "f64d1ec078cea9acfb8feb3681ac1cb4d01a83063a85cabb8c518d26c807cb46",
1470
- "bytes": 3760
1469
+ "sha256": "e7d6e8f8631c4cd3a7ada7fde8f11e6772e8e2cd4ffce04edb67e21aca83e9d3",
1470
+ "bytes": 3841
1471
1471
  },
1472
1472
  "v2/durable-core/domain/ack-advance-append-plan.d.ts": {
1473
1473
  "sha256": "2e802606656a0c1938192e5533aa46c74bc42789b5c315c79f6de4850017b30e",
@@ -1614,12 +1614,12 @@
1614
1614
  "bytes": 1709
1615
1615
  },
1616
1616
  "v2/durable-core/domain/observation-builder.d.ts": {
1617
- "sha256": "3bbe295b49a759b2abff3eb3e754818caf0a6604914bdf70554f18430d1424ea",
1618
- "bytes": 605
1617
+ "sha256": "7053a137d41ee443cf878b95eb19d08c632f17fb304c9e0ea25efaad42689f64",
1618
+ "bytes": 692
1619
1619
  },
1620
1620
  "v2/durable-core/domain/observation-builder.js": {
1621
- "sha256": "b1576b4274a07d89a0535a27506fbd5cbe9daffc021a78a1d202ade918d75c19",
1622
- "bytes": 1569
1621
+ "sha256": "6ed532d8d3087c87fcb462c4ad5d792a1fea742c5f78b26c75c18adb23b78458",
1622
+ "bytes": 1935
1623
1623
  },
1624
1624
  "v2/durable-core/domain/outputs.d.ts": {
1625
1625
  "sha256": "adc32e4b86c8036eac61096fe83371140c7de140db414227041a8854435f8f54",
@@ -1886,8 +1886,8 @@
1886
1886
  "bytes": 3397
1887
1887
  },
1888
1888
  "v2/durable-core/schemas/export-bundle/index.d.ts": {
1889
- "sha256": "b6a2bd6cc52249f438f14b729c6312dcd88604e66d094627f2e2d40e35f314e4",
1890
- "bytes": 531598
1889
+ "sha256": "6f85ad7434e05c34ac467dc5af513b344aed9b78782835be73e2333248208cb9",
1890
+ "bytes": 533636
1891
1891
  },
1892
1892
  "v2/durable-core/schemas/export-bundle/index.js": {
1893
1893
  "sha256": "6e3566b2d05ea6302bbf4d311b8ec3e94725a8523834efe7670a79e7bd7dc40d",
@@ -1942,12 +1942,12 @@
1942
1942
  "bytes": 2138
1943
1943
  },
1944
1944
  "v2/durable-core/schemas/session/events.d.ts": {
1945
- "sha256": "f46d7b66a1fdaaf1a52b85a4a37d68b0ba9df0d00c2e83d5abfe023225089a6c",
1946
- "bytes": 79553
1945
+ "sha256": "5916d48653ad157e160062cc169ff2ecbf300f7d066fcd28cd9f11c9df916c4e",
1946
+ "bytes": 80143
1947
1947
  },
1948
1948
  "v2/durable-core/schemas/session/events.js": {
1949
- "sha256": "0be45be28e8498bdd390bbf4d8448158efa4ff8d1e92f1424256de59ed42bb4e",
1950
- "bytes": 12744
1949
+ "sha256": "cc9f2ae04c788e878533c0b807385bc48341df40c3e01aee22e5881ff5348364",
1950
+ "bytes": 12904
1951
1951
  },
1952
1952
  "v2/durable-core/schemas/session/gaps.d.ts": {
1953
1953
  "sha256": "67c69dfec8280158c543b72e1fb728559a0ff7e5e0670d3e5b0fe28e68812080",
@@ -2210,8 +2210,8 @@
2210
2210
  "bytes": 1136
2211
2211
  },
2212
2212
  "v2/infra/local/session-summary-provider/index.js": {
2213
- "sha256": "504d432a35b3ceb75697c00b5db1576570b38c1415304f903ba77d0dfed04ce7",
2214
- "bytes": 10452
2213
+ "sha256": "998ad282c77f638e0412f16f6e676da83e40002883242e6bb5349dd1529f5708",
2214
+ "bytes": 10551
2215
2215
  },
2216
2216
  "v2/infra/local/sha256/index.d.ts": {
2217
2217
  "sha256": "8a727b7e54a38275ca6f9f1b8730f97cfc0a212df035df1bdc58e716e6824230",
@@ -2258,8 +2258,8 @@
2258
2258
  "bytes": 537
2259
2259
  },
2260
2260
  "v2/infra/local/workspace-anchor/index.js": {
2261
- "sha256": "d76172ecbe3457760abc0b6f0032eb4089758fb3c9ed473ba0f134ac57d37c1a",
2262
- "bytes": 2993
2261
+ "sha256": "6fbf5acf7e53758bc5c6e0b4e5b1d7f25a62ec845f2c406b400d542700c27564",
2262
+ "bytes": 3054
2263
2263
  },
2264
2264
  "v2/ports/base32.port.d.ts": {
2265
2265
  "sha256": "64aa2f2003a552917cbf71474472fc5e4afffaa29577204bbcbe5ffa989ceb82",
@@ -2414,8 +2414,8 @@
2414
2414
  "bytes": 77
2415
2415
  },
2416
2416
  "v2/ports/workspace-anchor.port.d.ts": {
2417
- "sha256": "8614bc27a958291d53d6a24ffc30fdf5352d98f02b79470993d6c134e72d83eb",
2418
- "bytes": 751
2417
+ "sha256": "7be80c38e9287a2a34068036857d6984c35e6b954d84eca0b5af69859b6b4a88",
2418
+ "bytes": 816
2419
2419
  },
2420
2420
  "v2/ports/workspace-anchor.port.js": {
2421
2421
  "sha256": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
@@ -2502,8 +2502,8 @@
2502
2502
  "bytes": 732
2503
2503
  },
2504
2504
  "v2/projections/resume-ranking.d.ts": {
2505
- "sha256": "3ac0db8e9d154eff9fba21c40eedaf981ea844d3f536f2b69b3840af8653b8f1",
2506
- "bytes": 4033
2505
+ "sha256": "57035cac4de66e20d09fd8b781502e867073b6b40dc305d5471580434e0491bf",
2506
+ "bytes": 4071
2507
2507
  },
2508
2508
  "v2/projections/resume-ranking.js": {
2509
2509
  "sha256": "5f1ee9888446caa23653543fc8cae69ac4398e73232d71bac3d16722c9cd2158",
@@ -2554,20 +2554,20 @@
2554
2554
  "bytes": 204
2555
2555
  },
2556
2556
  "v2/usecases/console-routes.js": {
2557
- "sha256": "0a466d35a2b002e87e2ff38f5dd583a4d4d26e66d1732a8ac4f3e303ddad6356",
2558
- "bytes": 2935
2557
+ "sha256": "ee474d72e97cbce040a091849c743179b4c42afa93acf120e7a155d3af793763",
2558
+ "bytes": 4319
2559
2559
  },
2560
2560
  "v2/usecases/console-service.d.ts": {
2561
2561
  "sha256": "88bf7eb84bad74c048f76038b0d2631d49f2256587e42907fe2df14fc58f67e1",
2562
2562
  "bytes": 1506
2563
2563
  },
2564
2564
  "v2/usecases/console-service.js": {
2565
- "sha256": "21e129a7eb43523ef10eb941849ca5383ce7c1f4ecbdf2150a11166982c24845",
2566
- "bytes": 23404
2565
+ "sha256": "97680e821c421fa9cad349a0945e6657d0eb3dc2c0925350fe06b9d2679be19d",
2566
+ "bytes": 24124
2567
2567
  },
2568
2568
  "v2/usecases/console-types.d.ts": {
2569
- "sha256": "8c2a66a2c3f5c317c9988853a75f04d83358b7ff98ece0d7861528ea4e23402d",
2570
- "bytes": 3575
2569
+ "sha256": "ae9e33da0c0547c1ae66cced4ec42e54d58ed2ad7bccf4adc2e02a76fc0c0e4f",
2570
+ "bytes": 4293
2571
2571
  },
2572
2572
  "v2/usecases/console-types.js": {
2573
2573
  "sha256": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
@@ -2612,6 +2612,14 @@
2612
2612
  "v2/usecases/resume-session.js": {
2613
2613
  "sha256": "ca1c22ed85c50ee4f5699ba61878b98daf96e54fde2c94af57e73dae27ca97a5",
2614
2614
  "bytes": 462
2615
+ },
2616
+ "v2/usecases/worktree-service.d.ts": {
2617
+ "sha256": "81c0c1b0c0853779c0ae61ecda6ae8b35e574072a81675bfdb1f2bce3961b653",
2618
+ "bytes": 583
2619
+ },
2620
+ "v2/usecases/worktree-service.js": {
2621
+ "sha256": "baa141547cc07d4dcfdd61996d32703cc12575ef8d77ea3130053c3a68e7f5c2",
2622
+ "bytes": 5447
2615
2623
  }
2616
2624
  }
2617
2625
  }
@@ -18,5 +18,13 @@ export declare function resolveRequestWorkspaceDirectory(options: {
18
18
  readonly serverCwd?: string;
19
19
  }): string;
20
20
  export declare function toProjectWorkflowDirectory(workspaceDirectory: string): string;
21
- export declare function discoverRootedWorkflowDirectories(roots: readonly string[]): Promise<readonly string[]>;
22
- export declare function createWorkflowReaderForRequest(options: RequestWorkflowReaderOptions): Promise<IWorkflowReader>;
21
+ export interface WorkflowRootDiscoveryResult {
22
+ readonly discovered: readonly string[];
23
+ readonly stale: readonly string[];
24
+ }
25
+ export declare function discoverRootedWorkflowDirectories(roots: readonly string[]): Promise<WorkflowRootDiscoveryResult>;
26
+ export interface WorkflowReaderForRequestResult {
27
+ readonly reader: IWorkflowReader;
28
+ readonly stalePaths: readonly string[];
29
+ }
30
+ export declare function createWorkflowReaderForRequest(options: RequestWorkflowReaderOptions): Promise<WorkflowReaderForRequestResult>;
@@ -37,10 +37,15 @@ function toProjectWorkflowDirectory(workspaceDirectory) {
37
37
  async function discoverRootedWorkflowDirectories(roots) {
38
38
  const discoveredByPath = new Set();
39
39
  const discoveredPaths = [];
40
+ const stalePaths = [];
40
41
  for (const root of roots) {
41
42
  const rootPath = path_1.default.resolve(root);
42
- const nextPaths = await discoverWorkflowDirectoriesUnderRoot(rootPath);
43
- for (const nextPath of nextPaths) {
43
+ const result = await discoverWorkflowDirectoriesUnderRoot(rootPath);
44
+ if (result.stale) {
45
+ stalePaths.push(rootPath);
46
+ continue;
47
+ }
48
+ for (const nextPath of result.discovered) {
44
49
  const normalizedPath = path_1.default.resolve(nextPath);
45
50
  if (discoveredByPath.has(normalizedPath))
46
51
  continue;
@@ -48,19 +53,20 @@ async function discoverRootedWorkflowDirectories(roots) {
48
53
  discoveredPaths.push(normalizedPath);
49
54
  }
50
55
  }
51
- return discoveredPaths;
56
+ return { discovered: discoveredPaths, stale: stalePaths };
52
57
  }
53
58
  async function createWorkflowReaderForRequest(options) {
54
59
  const workspaceDirectory = resolveRequestWorkspaceDirectory(options);
55
60
  const projectWorkflowDirectory = toProjectWorkflowDirectory(workspaceDirectory);
56
61
  const rememberedRoots = await listRememberedRoots(options.rememberedRootsStore);
57
- const rootedWorkflowDirectories = await discoverRootedWorkflowDirectories(rememberedRoots);
62
+ const { discovered: rootedWorkflowDirectories, stale: stalePaths } = await discoverRootedWorkflowDirectories(rememberedRoots);
58
63
  const customPaths = rootedWorkflowDirectories.filter((directory) => directory !== projectWorkflowDirectory);
59
- const storage = new enhanced_multi_source_workflow_storage_js_1.EnhancedMultiSourceWorkflowStorage({
64
+ const storage = (0, enhanced_multi_source_workflow_storage_js_1.createEnhancedMultiSourceWorkflowStorage)({
60
65
  customPaths,
61
66
  projectPath: projectWorkflowDirectory,
62
- }, options.featureFlags);
63
- return new schema_validating_workflow_storage_js_1.SchemaValidatingCompositeWorkflowStorage(storage);
67
+ }, options.featureFlags ?? undefined);
68
+ const reader = new schema_validating_workflow_storage_js_1.SchemaValidatingCompositeWorkflowStorage(storage);
69
+ return { reader, stalePaths };
64
70
  }
65
71
  async function listRememberedRoots(rememberedRootsStore) {
66
72
  if (!rememberedRootsStore)
@@ -74,8 +80,16 @@ async function listRememberedRoots(rememberedRootsStore) {
74
80
  }
75
81
  async function discoverWorkflowDirectoriesUnderRoot(rootPath) {
76
82
  const discoveredPaths = [];
77
- await walkForRootedWorkflowDirectories(rootPath, discoveredPaths);
78
- return discoveredPaths;
83
+ try {
84
+ await walkForRootedWorkflowDirectories(rootPath, discoveredPaths);
85
+ }
86
+ catch (err) {
87
+ if (err.code === 'ENOENT') {
88
+ return { discovered: [], stale: true };
89
+ }
90
+ throw err;
91
+ }
92
+ return { discovered: discoveredPaths, stale: false };
79
93
  }
80
94
  async function walkForRootedWorkflowDirectories(currentDirectory, discoveredPaths) {
81
95
  const entries = await promises_1.default.readdir(currentDirectory, { withFileTypes: true });
@@ -93,7 +107,10 @@ async function walkForRootedWorkflowDirectories(currentDirectory, discoveredPath
93
107
  }
94
108
  continue;
95
109
  }
96
- await walkForRootedWorkflowDirectories(entryPath, discoveredPaths);
110
+ await walkForRootedWorkflowDirectories(entryPath, discoveredPaths).catch((err) => {
111
+ if (err.code !== 'ENOENT')
112
+ throw err;
113
+ });
97
114
  }
98
115
  }
99
116
  function shouldSkipDirectory(name) {
@@ -1,5 +1,5 @@
1
1
  import type { Workflow, WorkflowSourceInfo } from '../../../types/workflow.js';
2
- import type { IWorkflowReader } from '../../../types/storage.js';
2
+ import type { ICompositeWorkflowStorage, IWorkflowReader } from '../../../types/storage.js';
3
3
  import type { RememberedRootRecordV2 } from '../../../v2/ports/remembered-roots-store.port.js';
4
4
  export interface PublicWorkflowSource {
5
5
  readonly kind: WorkflowSourceInfo['kind'];
@@ -31,3 +31,5 @@ export declare function detectWorkflowMigrationGuidance(options: {
31
31
  readonly workflowReader: IWorkflowReader;
32
32
  readonly rememberedRoots: readonly RememberedRootRecordV2[];
33
33
  }): Promise<WorkflowMigrationGuidance | undefined>;
34
+ export declare function isCompositeWorkflowReader(reader: unknown): reader is ICompositeWorkflowStorage;
35
+ export declare function deriveGroupLabel(rootPath: string, sourcePath: string): string;
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.toWorkflowVisibility = toWorkflowVisibility;
7
7
  exports.detectWorkflowMigrationGuidance = detectWorkflowMigrationGuidance;
8
+ exports.isCompositeWorkflowReader = isCompositeWorkflowReader;
9
+ exports.deriveGroupLabel = deriveGroupLabel;
8
10
  const path_1 = __importDefault(require("path"));
9
11
  function toWorkflowVisibility(workflow, rememberedRoots, options = {}) {
10
12
  const source = {
@@ -56,9 +58,11 @@ async function detectWorkflowMigrationGuidance(options) {
56
58
  }
57
59
  return undefined;
58
60
  }
59
- function isCompositeWorkflowReader(workflowReader) {
60
- return (workflowReader.kind === 'composite' &&
61
- typeof workflowReader.getStorageInstances === 'function');
61
+ function isCompositeWorkflowReader(reader) {
62
+ return (typeof reader === 'object' &&
63
+ reader !== null &&
64
+ reader.kind === 'composite' &&
65
+ typeof reader.getStorageInstances === 'function');
62
66
  }
63
67
  function deriveRootedSharingContext(workflow, rememberedRoots) {
64
68
  if (workflow.source.kind !== 'custom')
@@ -14,8 +14,9 @@ const v2_token_ops_js_1 = require("../v2-token-ops.js");
14
14
  const v2_state_conversion_js_1 = require("../v2-state-conversion.js");
15
15
  const constants_js_1 = require("../../../v2/durable-core/constants.js");
16
16
  const index_js_2 = require("./index.js");
17
+ const assessments_js_1 = require("../../../v2/projections/assessments.js");
17
18
  function buildAdvancedReplayResponse(args) {
18
- const { sessionId, runId, toNodeId, attemptId, toSnapshot, workflow, truth, workflowHash, ports, sha256, aliasStore, entropy } = args;
19
+ const { sessionId, runId, fromNodeId, toNodeId, attemptId, toSnapshot, workflow, truth, workflowHash, ports, sha256, aliasStore, entropy } = args;
19
20
  const toNodeIdBranded = (0, index_js_1.asNodeId)(String(toNodeId));
20
21
  const pending = (0, snapshot_state_js_1.derivePendingStep)(toSnapshot.enginePayload.engineState);
21
22
  const isComplete = (0, snapshot_state_js_1.deriveIsComplete)(toSnapshot.enginePayload.engineState);
@@ -116,6 +117,7 @@ function buildAdvancedReplayResponse(args) {
116
117
  }
117
118
  const preferences = (0, v2_execution_helpers_js_1.derivePreferencesOrDefault)({ truth, runId, nodeId: toNodeIdBranded });
118
119
  const nextIntent = (0, v2_state_conversion_js_1.deriveNextIntent)({ rehydrateOnly: false, isComplete, pending: okMeta });
120
+ const stepContext = buildStepContext(truth.events, fromNodeId);
119
121
  return nextTokensMint.andThen((nextTokens) => (0, neverthrow_1.okAsync)(output_schemas_js_1.V2ContinueWorkflowOutputSchema.parse({
120
122
  kind: 'ok',
121
123
  continueToken: pending ? nextTokens.continueToken : undefined,
@@ -125,8 +127,30 @@ function buildAdvancedReplayResponse(args) {
125
127
  preferences,
126
128
  nextIntent,
127
129
  nextCall: (0, index_js_2.buildNextCall)({ continueToken: pending ? nextTokens.continueToken : undefined, isComplete, pending: okMeta }),
130
+ stepContext,
128
131
  })));
129
132
  }
133
+ function buildStepContext(events, completedNodeId) {
134
+ const projection = (0, assessments_js_1.projectAssessmentsV2)(events);
135
+ if (projection.isErr()) {
136
+ console.warn(`[workrail:replay] stepContext projection failed for node '${String(completedNodeId)}' — stepContext will be absent: ${projection.error.message}`);
137
+ return undefined;
138
+ }
139
+ const recorded = (0, assessments_js_1.getLatestAssessmentForNode)(projection.value, String(completedNodeId));
140
+ if (!recorded)
141
+ return undefined;
142
+ return {
143
+ assessments: {
144
+ assessmentId: recorded.assessmentId,
145
+ dimensions: recorded.dimensions.map((d) => ({
146
+ dimensionId: d.dimensionId,
147
+ level: d.level,
148
+ ...(d.rationale !== undefined ? { rationale: d.rationale } : {}),
149
+ })),
150
+ normalizationNotes: recorded.normalizationNotes,
151
+ },
152
+ };
153
+ }
130
154
  function replayFromRecordedAdvance(args) {
131
155
  const { recordedEvent, truth, sessionId, runId, nodeId, workflowHash, attemptId, pinnedWorkflow, snapshotStore, sha256, tokenCodecPorts, aliasStore, entropy, } = args;
132
156
  if (recordedEvent.data.outcome.kind === 'blocked') {
@@ -216,23 +216,28 @@ function executeStartWorkflow(input, ctx) {
216
216
  workspacePath: input.workspacePath,
217
217
  resolvedRootUris: ctx.v2.resolvedRootUris,
218
218
  });
219
- const workflowReader = shouldUseRequestReader
220
- ? {
221
- getWorkflowById: async (workflowId) => {
222
- const requestReader = await (0, request_workflow_reader_js_1.createWorkflowReaderForRequest)({
223
- featureFlags: ctx.featureFlags,
224
- workspacePath: input.workspacePath,
225
- resolvedRootUris: ctx.v2.resolvedRootUris,
226
- rememberedRootsStore: ctx.v2.rememberedRootsStore,
227
- });
228
- const requestResult = await requestReader.getWorkflowById(workflowId);
229
- if (requestResult != null)
230
- return requestResult;
231
- return ctx.workflowService.getWorkflowById(workflowId);
219
+ const readerRA = shouldUseRequestReader
220
+ ? neverthrow_1.ResultAsync.fromPromise((0, request_workflow_reader_js_1.createWorkflowReaderForRequest)({
221
+ featureFlags: ctx.featureFlags,
222
+ workspacePath: input.workspacePath,
223
+ resolvedRootUris: ctx.v2.resolvedRootUris,
224
+ rememberedRootsStore: ctx.v2.rememberedRootsStore,
225
+ }), (err) => ({
226
+ kind: 'precondition_failed',
227
+ message: `Failed to initialize workflow reader: ${String(err)}`,
228
+ })).map(({ reader, stalePaths }) => ({
229
+ workflowReader: {
230
+ getWorkflowById: async (workflowId) => {
231
+ const requestResult = await reader.getWorkflowById(workflowId);
232
+ if (requestResult != null)
233
+ return requestResult;
234
+ return ctx.workflowService.getWorkflowById(workflowId);
235
+ },
232
236
  },
233
- }
234
- : ctx.workflowService;
235
- return loadAndPinWorkflow({
237
+ stalePaths,
238
+ }))
239
+ : (0, neverthrow_1.okAsync)({ workflowReader: ctx.workflowService, stalePaths: [] });
240
+ return readerRA.andThen(({ workflowReader, stalePaths }) => loadAndPinWorkflow({
236
241
  workflowId: input.workflowId,
237
242
  workflowReader,
238
243
  crypto,
@@ -345,10 +350,11 @@ function executeStartWorkflow(input, ctx) {
345
350
  preferences,
346
351
  nextIntent,
347
352
  nextCall: (0, index_js_2.buildNextCall)({ continueToken: tokens.continueToken, isComplete: false, pending }),
353
+ ...(stalePaths.length > 0 ? { staleRoots: [...stalePaths] } : {}),
348
354
  });
349
355
  return (0, neverthrow_1.okAsync)({ response: parsed, contentEnvelope });
350
356
  });
351
- });
357
+ }));
352
358
  }
353
359
  function enrichPinnedSnapshotWithResolvedReferences(snapshot, references, workspacePath) {
354
360
  if (references.length === 0) {