@exaudeus/workrail 3.82.0 → 3.83.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.
@@ -103,6 +103,7 @@ export interface StepRecord {
103
103
  readonly index: number;
104
104
  readonly status: 'completed' | 'terminal' | 'not_reached';
105
105
  readonly turns: number;
106
+ readonly stepId?: string;
106
107
  }
107
108
  export type ProcessState = 'STOPPED' | 'RUNNING' | 'UNKNOWN';
108
109
  export declare function parseDaemonEvents(sessionIdQuery: string, eventsDir: string, daysBack: number, readFile: (path: string) => string | null): DiagnosticResult;
@@ -112,21 +113,24 @@ export interface FormatOptions {
112
113
  }
113
114
  export declare function formatDiagnosticCard(result: DiagnosticResult, opts?: FormatOptions): string;
114
115
  export declare function formatDiagnosticJson(result: DiagnosticResult): string;
116
+ export type ResultCategory = 'success' | 'config_error' | 'workflow_stuck' | 'workflow_timeout' | 'infra_error' | 'orphaned' | 'default';
115
117
  export interface WorkflowStat {
116
118
  readonly workflowId: string;
117
119
  readonly total: number;
118
120
  readonly successCount: number;
119
121
  readonly avgDurationMs: number;
120
122
  readonly avgTurns: number;
121
- readonly categoryBreakdown: ReadonlyMap<string, number>;
123
+ readonly categoryBreakdown: ReadonlyArray<readonly [ResultCategory, number]>;
122
124
  }
123
125
  export interface FleetAnalysis {
126
+ readonly daysBack: number;
124
127
  readonly sessionCount: number;
125
- readonly categoryBreakdown: ReadonlyArray<readonly [string, number]>;
128
+ readonly categoryBreakdown: ReadonlyArray<readonly [ResultCategory, number]>;
126
129
  readonly workflowStats: ReadonlyArray<WorkflowStat>;
127
- readonly timeoutStepCounts: ReadonlyArray<readonly [string, number]>;
130
+ readonly timeoutReasonCounts: ReadonlyArray<readonly [string, number]>;
128
131
  readonly totalTokens: number;
129
132
  readonly timeoutTokens: number;
130
133
  }
131
- export declare function analyzeFleet(readDir: (dir: string) => readonly string[] | null, readFile: (path: string) => string | null, eventsDir: string, workflowFilter?: string): FleetAnalysis;
134
+ export declare function resultCategory(result: DiagnosticResult): ResultCategory;
135
+ export declare function analyzeFleet(readDir: (dir: string) => readonly string[] | null, readFile: (path: string) => string | null, eventsDir: string, workflowFilter?: string, daysBack?: number): FleetAnalysis;
132
136
  export declare function formatFleetSummary(analysis: FleetAnalysis, opts?: FormatOptions): string;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.parseDaemonEvents = parseDaemonEvents;
7
7
  exports.formatDiagnosticCard = formatDiagnosticCard;
8
8
  exports.formatDiagnosticJson = formatDiagnosticJson;
9
+ exports.resultCategory = resultCategory;
9
10
  exports.analyzeFleet = analyzeFleet;
10
11
  exports.formatFleetSummary = formatFleetSummary;
11
12
  const chalk_1 = __importDefault(require("chalk"));
@@ -232,6 +233,8 @@ function accumulateEvent(acc, obj, rawLine) {
232
233
  acc.stepTurnCounts.push(turnsForStep);
233
234
  acc.turnsAtLastStep = acc.llmTurns;
234
235
  acc.stepAdvances++;
236
+ const sid = typeof obj['stepId'] === 'string' ? obj['stepId'] : undefined;
237
+ acc.stepIds.push(sid);
235
238
  break;
236
239
  }
237
240
  case 'tool_call_started': {
@@ -287,6 +290,7 @@ function createAccumulator(sessionId) {
287
290
  lastEventKind: null,
288
291
  turnsAtLastStep: 0,
289
292
  stepTurnCounts: [],
293
+ stepIds: [],
290
294
  };
291
295
  }
292
296
  function buildMetrics(acc) {
@@ -302,7 +306,13 @@ function buildMetrics(acc) {
302
306
  function buildSteps(acc) {
303
307
  const steps = [];
304
308
  for (let i = 0; i < acc.stepTurnCounts.length; i++) {
305
- steps.push({ index: i + 1, status: 'completed', turns: acc.stepTurnCounts[i] ?? 0 });
309
+ const stepId = acc.stepIds[i];
310
+ steps.push({
311
+ index: i + 1,
312
+ status: 'completed',
313
+ turns: acc.stepTurnCounts[i] ?? 0,
314
+ ...(stepId !== undefined ? { stepId } : {}),
315
+ });
306
316
  }
307
317
  if (acc.stepAdvances > 0 || acc.llmTurns > 0) {
308
318
  const turnsOnTerminalStep = acc.llmTurns - acc.turnsAtLastStep;
@@ -628,15 +638,32 @@ function formatRelativeTime(ts) {
628
638
  function formatDiagnosticJson(result) {
629
639
  return JSON.stringify(result, null, 2);
630
640
  }
631
- function analyzeFleet(readDir, readFile, eventsDir, workflowFilter) {
632
- const sessionIds = new Set();
641
+ function resultCategory(result) {
642
+ switch (result.kind) {
643
+ case 'SUCCESS': return 'success';
644
+ case 'CONFIG_ERROR': return 'config_error';
645
+ case 'WORKFLOW_STUCK': return 'workflow_stuck';
646
+ case 'WORKFLOW_TIMEOUT': return 'workflow_timeout';
647
+ case 'INFRA_ERROR': return 'infra_error';
648
+ case 'ORPHANED': return 'orphaned';
649
+ case 'DEFAULT': return 'default';
650
+ case 'NOT_FOUND': return 'default';
651
+ case 'AMBIGUOUS': return 'default';
652
+ default: {
653
+ const _exhaustive = result;
654
+ return `default`;
655
+ void _exhaustive;
656
+ }
657
+ }
658
+ }
659
+ function analyzeFleet(readDir, readFile, eventsDir, workflowFilter, daysBack = 7) {
633
660
  const fileNames = readDir(eventsDir) ?? [];
634
- for (const fileName of fileNames) {
635
- if (!fileName.endsWith('.jsonl'))
636
- continue;
661
+ const sessionIds = fileNames
662
+ .filter(f => f.endsWith('.jsonl'))
663
+ .reduce((acc, fileName) => {
637
664
  const content = readFile(`${eventsDir}/${fileName}`);
638
665
  if (!content)
639
- continue;
666
+ return acc;
640
667
  for (const line of content.split('\n')) {
641
668
  const trimmed = line.trim();
642
669
  if (!trimmed)
@@ -646,123 +673,77 @@ function analyzeFleet(readDir, readFile, eventsDir, workflowFilter) {
646
673
  const sid = (typeof obj['sessionId'] === 'string' ? obj['sessionId'] : null)
647
674
  ?? (typeof obj['workrailSessionId'] === 'string' ? obj['workrailSessionId'] : null);
648
675
  if (sid)
649
- sessionIds.add(sid);
650
- }
651
- catch {
676
+ acc.add(sid);
652
677
  }
678
+ catch { }
653
679
  }
654
- }
655
- const results = [];
656
- for (const sid of sessionIds) {
657
- const result = parseDaemonEvents(sid, eventsDir, 14, readFile);
658
- if (result.kind === 'NOT_FOUND' || result.kind === 'AMBIGUOUS')
659
- continue;
660
- const turns = 'metrics' in result ? result.metrics.llmTurns : 0;
661
- if (turns < 3)
662
- continue;
663
- if (workflowFilter) {
664
- const wf = 'workflowId' in result ? result.workflowId : '';
665
- if (!wf.includes(workflowFilter))
666
- continue;
667
- }
668
- results.push({ result, turns });
669
- }
670
- const catCounts = new Map();
671
- for (const { result } of results) {
672
- const cat = _resultCategory(result);
673
- catCounts.set(cat, (catCounts.get(cat) ?? 0) + 1);
674
- }
675
- const categoryBreakdown = [...catCounts.entries()].sort((a, b) => b[1] - a[1]);
676
- const wfGroups = new Map();
677
- for (const { result } of results) {
678
- const wf = 'workflowId' in result ? result.workflowId : 'unknown';
679
- const group = wfGroups.get(wf) ?? [];
680
- group.push(result);
681
- wfGroups.set(wf, group);
682
- }
683
- const workflowStats = [];
684
- for (const [wfId, wfResults] of wfGroups) {
680
+ return acc;
681
+ }, new Set());
682
+ const analysed = [...sessionIds]
683
+ .map(sid => parseDaemonEvents(sid, eventsDir, daysBack, readFile))
684
+ .filter((r) => r.kind !== 'NOT_FOUND' && r.kind !== 'AMBIGUOUS')
685
+ .filter(r => ('metrics' in r ? r.metrics.llmTurns : 0) >= 3)
686
+ .filter(r => !workflowFilter || ('workflowId' in r && r.workflowId.includes(workflowFilter)));
687
+ const categoryBreakdown = [...analysed.reduce((acc, r) => {
688
+ const cat = resultCategory(r);
689
+ acc.set(cat, (acc.get(cat) ?? 0) + 1);
690
+ return acc;
691
+ }, new Map()).entries()]
692
+ .sort((a, b) => b[1] - a[1]);
693
+ const byWorkflow = analysed.reduce((acc, r) => {
694
+ const wf = 'workflowId' in r ? r.workflowId : 'unknown';
695
+ const group = acc.get(wf) ?? [];
696
+ acc.set(wf, [...group, r]);
697
+ return acc;
698
+ }, new Map());
699
+ const workflowStats = [...byWorkflow.entries()]
700
+ .map(([wfId, wfResults]) => {
685
701
  const total = wfResults.length;
686
- const successCount = wfResults.filter(r => r.kind === 'SUCCESS').length;
687
- const durs = wfResults.map(r => 'durationMs' in r ? r.durationMs : 0);
688
- const turnsArr = wfResults.map(r => 'metrics' in r ? r.metrics.llmTurns : 0);
689
- const catMap = new Map();
690
- for (const r of wfResults) {
691
- const c = _resultCategory(r);
692
- catMap.set(c, (catMap.get(c) ?? 0) + 1);
693
- }
694
- workflowStats.push({
702
+ const catBreakdown = [...wfResults.reduce((acc, r) => {
703
+ const cat = resultCategory(r);
704
+ acc.set(cat, (acc.get(cat) ?? 0) + 1);
705
+ return acc;
706
+ }, new Map()).entries()]
707
+ .sort((a, b) => b[1] - a[1]);
708
+ return {
695
709
  workflowId: wfId,
696
710
  total,
697
- successCount,
698
- avgDurationMs: durs.reduce((a, b) => a + b, 0) / Math.max(total, 1),
699
- avgTurns: turnsArr.reduce((a, b) => a + b, 0) / Math.max(total, 1),
700
- categoryBreakdown: catMap,
701
- });
702
- }
703
- workflowStats.sort((a, b) => b.total - a.total);
704
- const timeoutResults = results
705
- .filter(({ result }) => _resultCategory(result).startsWith('timeout'))
706
- .map(({ result }) => result);
707
- const timeoutOnStep = new Map();
708
- for (const result of timeoutResults) {
709
- const pending = _pendingStep(result);
710
- if (pending)
711
- timeoutOnStep.set(pending, (timeoutOnStep.get(pending) ?? 0) + 1);
712
- }
713
- const timeoutStepCounts = [...timeoutOnStep.entries()].sort((a, b) => b[1] - a[1]);
714
- let totalTokens = 0;
715
- let timeoutTokens = 0;
716
- for (const { result } of results) {
717
- const tok = 'metrics' in result
718
- ? result.metrics.inputTokens + result.metrics.outputTokens
719
- : 0;
720
- totalTokens += tok;
721
- if (_resultCategory(result).startsWith('timeout'))
722
- timeoutTokens += tok;
723
- }
711
+ successCount: wfResults.filter(r => r.kind === 'SUCCESS').length,
712
+ avgDurationMs: wfResults.reduce((a, r) => a + ('durationMs' in r ? r.durationMs : 0), 0) / total,
713
+ avgTurns: wfResults.reduce((a, r) => a + ('metrics' in r ? r.metrics.llmTurns : 0), 0) / total,
714
+ categoryBreakdown: catBreakdown,
715
+ };
716
+ })
717
+ .sort((a, b) => b.total - a.total);
718
+ const timeoutResults = analysed.filter(r => r.kind === 'WORKFLOW_TIMEOUT');
719
+ const timeoutReasonCounts = [...timeoutResults.reduce((acc, r) => {
720
+ acc.set(r.timeoutReason, (acc.get(r.timeoutReason) ?? 0) + 1);
721
+ return acc;
722
+ }, new Map()).entries()]
723
+ .sort((a, b) => b[1] - a[1]);
724
+ const totalTokens = analysed.reduce((a, r) => a + ('metrics' in r ? r.metrics.inputTokens + r.metrics.outputTokens : 0), 0);
725
+ const timeoutTokens = analysed
726
+ .filter(r => r.kind === 'WORKFLOW_TIMEOUT')
727
+ .reduce((a, r) => a + ('metrics' in r ? r.metrics.inputTokens + r.metrics.outputTokens : 0), 0);
724
728
  return {
725
- sessionCount: results.length,
729
+ daysBack,
730
+ sessionCount: analysed.length,
726
731
  categoryBreakdown,
727
732
  workflowStats,
728
- timeoutStepCounts,
733
+ timeoutReasonCounts,
729
734
  totalTokens,
730
735
  timeoutTokens,
731
736
  };
732
737
  }
733
- function _resultCategory(result) {
734
- switch (result.kind) {
735
- case 'SUCCESS': return 'success';
736
- case 'NOT_FOUND': return 'not_found';
737
- case 'AMBIGUOUS': return 'ambiguous';
738
- case 'CONFIG_ERROR': return 'config/bad_model';
739
- case 'WORKFLOW_STUCK': return `stuck/${result.stuckReason}/${result.toolName ?? '?'}`;
740
- case 'WORKFLOW_TIMEOUT': return `timeout/${result.timeoutReason}`;
741
- case 'INFRA_ERROR': return `infra/${result.infraReason}`;
742
- case 'ORPHANED': return 'orphaned';
743
- case 'DEFAULT': return `other/${result.outcome}`;
744
- default: {
745
- const _exhaustive = result;
746
- return `unknown/${_exhaustive.kind}`;
747
- }
748
- }
749
- }
750
- function _pendingStep(result) {
751
- if (result.kind === 'WORKFLOW_TIMEOUT')
752
- return result.timeoutReason ?? null;
753
- if (result.kind === 'WORKFLOW_STUCK')
754
- return result.stuckReason ?? null;
755
- return null;
756
- }
757
738
  function formatFleetSummary(analysis, opts = {}) {
758
- const lines = [];
759
- const { sessionCount, categoryBreakdown, workflowStats, timeoutStepCounts, totalTokens, timeoutTokens } = analysis;
739
+ const { daysBack, sessionCount, categoryBreakdown, workflowStats, timeoutReasonCounts, totalTokens, timeoutTokens } = analysis;
760
740
  if (sessionCount === 0) {
761
- return 'No sessions with 3+ LLM turns found in the last 14 days.';
741
+ return `No sessions with 3+ LLM turns found in the last ${daysBack} days.`;
762
742
  }
763
- lines.push(applyChalk(`Fleet summary (${sessionCount} sessions with 3+ turns)`, chalk_1.default.bold, opts));
743
+ const lines = [];
744
+ lines.push(applyChalk(`Fleet summary (${sessionCount} sessions, last ${daysBack} days)`, chalk_1.default.bold, opts));
764
745
  lines.push('');
765
- lines.push('Failure categories:');
746
+ lines.push('Outcome breakdown:');
766
747
  for (const [cat, count] of categoryBreakdown) {
767
748
  const pct = count / sessionCount * 100;
768
749
  const bar = _bar(pct, 25, opts);
@@ -772,32 +753,33 @@ function formatFleetSummary(analysis, opts = {}) {
772
753
  lines.push('');
773
754
  lines.push('Per-workflow:');
774
755
  for (const wf of workflowStats) {
775
- const successPct = Math.round(wf.successCount / wf.total * 100);
776
756
  lines.push('');
777
757
  lines.push(` ${applyChalk(wf.workflowId, chalk_1.default.bold, opts)} `
778
758
  + `(${wf.total} sessions, ${wf.successCount}/${wf.total} success, `
779
759
  + `avg ${_fmtDur(wf.avgDurationMs)}, avg ${Math.round(wf.avgTurns)} turns)`);
780
- for (const [cat, count] of [...wf.categoryBreakdown.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5)) {
760
+ for (const [cat, count] of wf.categoryBreakdown.slice(0, 5)) {
781
761
  lines.push(` ${String(count).padStart(3)} ${cat}`);
782
762
  }
783
763
  }
784
- if (timeoutStepCounts.length > 0) {
785
- const timeoutCount = categoryBreakdown.filter(([c]) => c.startsWith('timeout')).reduce((a, [, n]) => a + n, 0);
764
+ if (timeoutReasonCounts.length > 0) {
765
+ const timeoutCount = categoryBreakdown
766
+ .filter(([c]) => c === 'workflow_timeout')
767
+ .reduce((a, [, n]) => a + n, 0);
786
768
  lines.push('');
787
- lines.push(`Timeout breakdown (${timeoutCount} timeout sessions):`);
788
- lines.push('');
789
- lines.push(' Timeout reason:');
790
- for (const [reason, count] of timeoutStepCounts.slice(0, 10)) {
769
+ lines.push(`Timeout reasons (${timeoutCount} sessions):`);
770
+ for (const [reason, count] of timeoutReasonCounts) {
791
771
  lines.push(` ${String(count).padStart(3)} ${reason}`);
792
772
  }
773
+ lines.push('');
774
+ lines.push(' Note: use scripts/session-analysis.py for step-level breakdown.');
793
775
  }
794
776
  const wastePct = totalTokens > 0 ? Math.round(timeoutTokens / totalTokens * 100) : 0;
795
777
  const avgPerSession = sessionCount > 0 ? Math.round(totalTokens / sessionCount) : 0;
796
778
  lines.push('');
797
779
  lines.push('Token burn:');
798
- lines.push(` Total: ${_fmtTokens(totalTokens).padStart(18)}`);
799
- lines.push(` Burned on timeout: ${_fmtTokens(timeoutTokens).padStart(17)} (${wastePct}% waste)`);
800
- lines.push(` Avg per session: ${_fmtTokens(avgPerSession).padStart(17)}`);
780
+ lines.push(` Total: ${_fmtTokens(totalTokens).padStart(16)}`);
781
+ lines.push(` Burned on timeout: ${_fmtTokens(timeoutTokens).padStart(16)} (${wastePct}% waste)`);
782
+ lines.push(` Avg per session: ${_fmtTokens(avgPerSession).padStart(16)}`);
801
783
  return lines.join('\n');
802
784
  }
803
785
  function _bar(pct, width, opts) {
@@ -25,4 +25,4 @@ Error generating stack: `+e.message+`
25
25
  `});++r<e.length;)r&&n.push({type:`text`,value:`
26
26
  `}),n.push(e[r]);return t&&e.length>0&&n.push({type:`text`,value:`
27
27
  `}),n}function GT(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function KT(e,t){let n=BT(e,t),r=n.one(e,void 0),i=TT(n),a=Array.isArray(r)?{type:`root`,children:r}:r||{type:`root`,children:[]};return i&&(`children`in a,a.children.push({type:`text`,value:`
28
- `},i)),a}function qT(e,t){return e&&`run`in e?async function(n,r){let i=KT(n,{file:r,...t});await e.run(i,r)}:function(n,r){return KT(n,{file:r,...e||t})}}function JT(e){if(e)throw e}var YT=o(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=function(e){return typeof Array.isArray==`function`?Array.isArray(e):r.call(e)===`[object Array]`},s=function(e){if(!e||r.call(e)!==`[object Object]`)return!1;var t=n.call(e,`constructor`),i=e.constructor&&e.constructor.prototype&&n.call(e.constructor.prototype,`isPrototypeOf`);if(e.constructor&&!t&&!i)return!1;for(var a in e);return a===void 0||n.call(e,a)},c=function(e,t){i&&t.name===`__proto__`?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},l=function(e,t){if(t===`__proto__`){if(!n.call(e,t))return;if(a)return a(e,t).value}return e[t]};t.exports=function e(){var t,n,r,i,a,u,d=arguments[0],f=1,p=arguments.length,m=!1;for(typeof d==`boolean`&&(m=d,d=arguments[1]||{},f=2),(d==null||typeof d!=`object`&&typeof d!=`function`)&&(d={});f<p;++f)if(t=arguments[f],t!=null)for(n in t)r=l(d,n),i=l(t,n),d!==i&&(m&&i&&(s(i)||(a=o(i)))?(a?(a=!1,u=r&&o(r)?r:[]):u=r&&s(r)?r:{},c(d,{name:n,newValue:e(m,u,i)})):i!==void 0&&c(d,{name:n,newValue:i}));return d}}));function XT(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function ZT(){let e=[],t={run:n,use:r};return t;function n(...t){let n=-1,r=t.pop();if(typeof r!=`function`)throw TypeError(`Expected function as last argument, not `+r);i(null,...t);function i(a,...o){let s=e[++n],c=-1;if(a){r(a);return}for(;++c<t.length;)(o[c]===null||o[c]===void 0)&&(o[c]=t[c]);t=o,s?QT(s,i)(...o):r(null,...o)}}function r(n){if(typeof n!=`function`)throw TypeError("Expected `middelware` to be a function, not "+n);return e.push(n),t}}function QT(e,t){let n;return r;function r(...t){let r=e.length>t.length,o;r&&t.push(i);try{o=e.apply(this,t)}catch(e){let t=e;if(r&&n)throw t;return i(t)}r||(o&&o.then&&typeof o.then==`function`?o.then(a,i):o instanceof Error?i(o):a(o))}function i(e,...r){n||(n=!0,t(e,...r))}function a(e){i(null,e)}}var $T={basename:eE,dirname:tE,extname:nE,join:rE,sep:`/`};function eE(e,t){if(t!==void 0&&typeof t!=`string`)throw TypeError(`"ext" argument must be a string`);oE(e);let n=0,r=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else r<0&&(a=!0,r=i+1);return r<0?``:e.slice(n,r)}if(t===e)return``;let o=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else o<0&&(a=!0,o=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(r=i):(s=-1,r=o));return n===r?r=o:r<0&&(r=e.length),e.slice(n,r)}function tE(e){if(oE(e),e.length===0)return`.`;let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||=!0;return t<0?e.codePointAt(0)===47?`/`:`.`:t===1&&e.codePointAt(0)===47?`//`:e.slice(0,t)}function nE(e){oE(e);let t=e.length,n=-1,r=0,i=-1,a=0,o;for(;t--;){let s=e.codePointAt(t);if(s===47){if(o){r=t+1;break}continue}n<0&&(o=!0,n=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||n<0||a===0||a===1&&i===n-1&&i===r+1?``:e.slice(i,n)}function rE(...e){let t=-1,n;for(;++t<e.length;)oE(e[t]),e[t]&&(n=n===void 0?e[t]:n+`/`+e[t]);return n===void 0?`.`:iE(n)}function iE(e){oE(e);let t=e.codePointAt(0)===47,n=aE(e,!t);return n.length===0&&!t&&(n=`.`),n.length>0&&e.codePointAt(e.length-1)===47&&(n+=`/`),t?`/`+n:n}function aE(e,t){let n=``,r=0,i=-1,a=0,o=-1,s,c;for(;++o<=e.length;){if(o<e.length)s=e.codePointAt(o);else if(s===47)break;else s=47;if(s===47){if(!(i===o-1||a===1))if(i!==o-1&&a===2){if(n.length<2||r!==2||n.codePointAt(n.length-1)!==46||n.codePointAt(n.length-2)!==46){if(n.length>2){if(c=n.lastIndexOf(`/`),c!==n.length-1){c<0?(n=``,r=0):(n=n.slice(0,c),r=n.length-1-n.lastIndexOf(`/`)),i=o,a=0;continue}}else if(n.length>0){n=``,r=0,i=o,a=0;continue}}t&&(n=n.length>0?n+`/..`:`..`,r=2)}else n.length>0?n+=`/`+e.slice(i+1,o):n=e.slice(i+1,o),r=o-i-1;i=o,a=0}else s===46&&a>-1?a++:a=-1}return n}function oE(e){if(typeof e!=`string`)throw TypeError(`Path must be a string. Received `+JSON.stringify(e))}var sE={cwd:cE};function cE(){return`/`}function lE(e){return!!(typeof e==`object`&&e&&`href`in e&&e.href&&`protocol`in e&&e.protocol&&e.auth===void 0)}function uE(e){if(typeof e==`string`)e=new URL(e);else if(!lE(e)){let t=TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code=`ERR_INVALID_ARG_TYPE`,t}if(e.protocol!==`file:`){let e=TypeError(`The URL must be of scheme file`);throw e.code=`ERR_INVALID_URL_SCHEME`,e}return dE(e)}function dE(e){if(e.hostname!==``){let e=TypeError(`File URL host must be "localhost" or empty on darwin`);throw e.code=`ERR_INVALID_FILE_URL_HOST`,e}let t=e.pathname,n=-1;for(;++n<t.length;)if(t.codePointAt(n)===37&&t.codePointAt(n+1)===50){let e=t.codePointAt(n+2);if(e===70||e===102){let e=TypeError(`File URL path must not include encoded / characters`);throw e.code=`ERR_INVALID_FILE_URL_PATH`,e}}return decodeURIComponent(t)}var fE=[`history`,`path`,`basename`,`stem`,`extname`,`dirname`],pE=class{constructor(e){let t;t=e?lE(e)?{path:e}:typeof e==`string`||_E(e)?{value:e}:e:{},this.cwd=`cwd`in t?``:sE.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let n=-1;for(;++n<fE.length;){let e=fE[n];e in t&&t[e]!==void 0&&t[e]!==null&&(this[e]=e===`history`?[...t[e]]:t[e])}let r;for(r in t)fE.includes(r)||(this[r]=t[r])}get basename(){return typeof this.path==`string`?$T.basename(this.path):void 0}set basename(e){hE(e,`basename`),mE(e,`basename`),this.path=$T.join(this.dirname||``,e)}get dirname(){return typeof this.path==`string`?$T.dirname(this.path):void 0}set dirname(e){gE(this.basename,`dirname`),this.path=$T.join(e||``,this.basename)}get extname(){return typeof this.path==`string`?$T.extname(this.path):void 0}set extname(e){if(mE(e,`extname`),gE(this.dirname,`extname`),e){if(e.codePointAt(0)!==46)throw Error("`extname` must start with `.`");if(e.includes(`.`,1))throw Error("`extname` cannot contain multiple dots")}this.path=$T.join(this.dirname,this.stem+(e||``))}get path(){return this.history[this.history.length-1]}set path(e){lE(e)&&(e=uE(e)),hE(e,`path`),this.path!==e&&this.history.push(e)}get stem(){return typeof this.path==`string`?$T.basename(this.path,this.extname):void 0}set stem(e){hE(e,`stem`),mE(e,`stem`),this.path=$T.join(this.dirname||``,e+(this.extname||``))}fail(e,t,n){let r=this.message(e,t,n);throw r.fatal=!0,r}info(e,t,n){let r=this.message(e,t,n);return r.fatal=void 0,r}message(e,t,n){let r=new nx(e,t,n);return this.path&&(r.name=this.path+`:`+r.name,r.file=this.path),r.fatal=!1,this.messages.push(r),r}toString(e){return this.value===void 0?``:typeof this.value==`string`?this.value:new TextDecoder(e||void 0).decode(this.value)}};function mE(e,t){if(e&&e.includes($T.sep))throw Error("`"+t+"` cannot be a path: did not expect `"+$T.sep+"`")}function hE(e,t){if(!e)throw Error("`"+t+"` cannot be empty")}function gE(e,t){if(!e)throw Error("Setting `"+t+"` requires `path` to be set too")}function _E(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}var vE=(function(e){let t=this.constructor.prototype,n=t[e],r=function(){return n.apply(r,arguments)};return Object.setPrototypeOf(r,t),r}),yE=l(YT(),1),bE={}.hasOwnProperty,xE=new class e extends vE{constructor(){super(`copy`),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=ZT()}copy(){let t=new e,n=-1;for(;++n<this.attachers.length;){let e=this.attachers[n];t.use(...e)}return t.data((0,yE.default)(!0,{},this.namespace)),t}data(e,t){return typeof e==`string`?arguments.length===2?(wE(`data`,this.frozen),this.namespace[e]=t,this):bE.call(this.namespace,e)&&this.namespace[e]||void 0:e?(wE(`data`,this.frozen),this.namespace=e,this):this.namespace}freeze(){if(this.frozen)return this;let e=this;for(;++this.freezeIndex<this.attachers.length;){let[t,...n]=this.attachers[this.freezeIndex];if(n[0]===!1)continue;n[0]===!0&&(n[0]=void 0);let r=t.call(e,...n);typeof r==`function`&&this.transformers.use(r)}return this.frozen=!0,this.freezeIndex=1/0,this}parse(e){this.freeze();let t=DE(e),n=this.parser||this.Parser;return SE(`parse`,n),n(String(t),t)}process(e,t){let n=this;return this.freeze(),SE(`process`,this.parser||this.Parser),CE(`process`,this.compiler||this.Compiler),t?r(void 0,t):new Promise(r);function r(r,i){let a=DE(e),o=n.parse(a);n.run(o,a,function(e,t,r){if(e||!t||!r)return s(e);let i=t,a=n.stringify(i,r);kE(a)?r.value=a:r.result=a,s(e,r)});function s(e,n){e||!n?i(e):r?r(n):t(void 0,n)}}}processSync(e){let t=!1,n;return this.freeze(),SE(`processSync`,this.parser||this.Parser),CE(`processSync`,this.compiler||this.Compiler),this.process(e,r),EE(`processSync`,`process`,t),n;function r(e,r){t=!0,JT(e),n=r}}run(e,t,n){TE(e),this.freeze();let r=this.transformers;return!n&&typeof t==`function`&&(n=t,t=void 0),n?i(void 0,n):new Promise(i);function i(i,a){let o=DE(t);r.run(e,o,s);function s(t,r,o){let s=r||e;t?a(t):i?i(s):n(void 0,s,o)}}}runSync(e,t){let n=!1,r;return this.run(e,t,i),EE(`runSync`,`run`,n),r;function i(e,t){JT(e),r=t,n=!0}}stringify(e,t){this.freeze();let n=DE(t),r=this.compiler||this.Compiler;return CE(`stringify`,r),TE(e),r(e,n)}use(e,...t){let n=this.attachers,r=this.namespace;if(wE(`use`,this.frozen),e!=null)if(typeof e==`function`)s(e,t);else if(typeof e==`object`)Array.isArray(e)?o(e):a(e);else throw TypeError("Expected usable value, not `"+e+"`");return this;function i(e){if(typeof e==`function`)s(e,[]);else if(typeof e==`object`)if(Array.isArray(e)){let[t,...n]=e;s(t,n)}else a(e);else throw TypeError("Expected usable value, not `"+e+"`")}function a(e){if(!(`plugins`in e)&&!(`settings`in e))throw Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");o(e.plugins),e.settings&&(r.settings=(0,yE.default)(!0,r.settings,e.settings))}function o(e){let t=-1;if(e!=null)if(Array.isArray(e))for(;++t<e.length;){let n=e[t];i(n)}else throw TypeError("Expected a list of plugins, not `"+e+"`")}function s(e,t){let r=-1,i=-1;for(;++r<n.length;)if(n[r][0]===e){i=r;break}if(i===-1)n.push([e,...t]);else if(t.length>0){let[r,...a]=t,o=n[i][1];XT(o)&&XT(r)&&(r=(0,yE.default)(!0,o,r)),n[i]=[e,r,...a]}}}}().freeze();function SE(e,t){if(typeof t!=`function`)throw TypeError("Cannot `"+e+"` without `parser`")}function CE(e,t){if(typeof t!=`function`)throw TypeError("Cannot `"+e+"` without `compiler`")}function wE(e,t){if(t)throw Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function TE(e){if(!XT(e)||typeof e.type!=`string`)throw TypeError("Expected node, got `"+e+"`")}function EE(e,t,n){if(!n)throw Error("`"+e+"` finished async. Use `"+t+"` instead")}function DE(e){return OE(e)?e:new pE(e)}function OE(e){return!!(e&&typeof e==`object`&&`message`in e&&`messages`in e)}function kE(e){return typeof e==`string`||AE(e)}function AE(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}var jE=[],ME={allowDangerousHtml:!0},NE=/^(https?|ircs?|mailto|xmpp)$/i,PE=[{from:`astPlugins`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowDangerousHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowNode`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowElement`},{from:`allowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowedElements`},{from:`className`,id:`remove-classname`},{from:`disallowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`disallowedElements`},{from:`escapeHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`includeElementIndex`,id:`#remove-includeelementindex`},{from:`includeNodeIndex`,id:`change-includenodeindex-to-includeelementindex`},{from:`linkTarget`,id:`remove-linktarget`},{from:`plugins`,id:`change-plugins-to-remarkplugins`,to:`remarkPlugins`},{from:`rawSourcePos`,id:`#remove-rawsourcepos`},{from:`renderers`,id:`change-renderers-to-components`,to:`components`},{from:`source`,id:`change-source-to-children`,to:`children`},{from:`sourcePos`,id:`#remove-sourcepos`},{from:`transformImageUri`,id:`#add-urltransform`,to:`urlTransform`},{from:`transformLinkUri`,id:`#add-urltransform`,to:`urlTransform`}];function FE(e){let t=IE(e),n=LE(e);return RE(t.runSync(t.parse(n),n),e)}function IE(e){let t=e.rehypePlugins||jE,n=e.remarkPlugins||jE,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...ME}:ME;return xE().use(Nw).use(n).use(qT,r).use(t)}function LE(e){let t=e.children||``,n=new pE;return typeof t==`string`?n.value=t:``+t,n}function RE(e,t){let n=t.allowedElements,r=t.allowElement,i=t.components,a=t.disallowedElements,o=t.skipHtml,s=t.unwrapDisallowed,c=t.urlTransform||zE;for(let e of PE)Object.hasOwn(t,e.from)&&``+e.from+(e.to?"use `"+e.to+"` instead":`remove it`)+e.id;return LT(e,l),ux(e,{Fragment:V.Fragment,components:i,ignoreInvalidStyle:!0,jsx:V.jsx,jsxs:V.jsxs,passKeys:!0,passNode:!0});function l(e,t,i){if(e.type===`raw`&&i&&typeof t==`number`)return o?i.children.splice(t,1):i.children[t]={type:`text`,value:e.value},t;if(e.type===`element`){let t;for(t in Mx)if(Object.hasOwn(Mx,t)&&Object.hasOwn(e.properties,t)){let n=e.properties[t],r=Mx[t];(r===null||r.includes(e.tagName))&&(e.properties[t]=c(String(n||``),t,e))}}if(e.type===`element`){let o=n?!n.includes(e.tagName):a?a.includes(e.tagName):!1;if(!o&&r&&typeof t==`number`&&(o=!r(e,t,i)),o&&i&&typeof t==`number`)return s&&e.children?i.children.splice(t,1,...e.children):i.children.splice(t,1),t}}}function zE(e){let t=e.indexOf(`:`),n=e.indexOf(`?`),r=e.indexOf(`#`),i=e.indexOf(`/`);return t===-1||i!==-1&&t>i||n!==-1&&t>n||r!==-1&&t>r||NE.test(e.slice(0,t))?e:``}function BE({children:e,className:t}){return(0,V.jsx)(`div`,{className:`markdown-view ${t??``}`,children:(0,V.jsx)(FE,{children:e})})}function VE({sessionId:e,nodeId:t,runStatus:n=`complete`,currentNodeId:r=null,executionTraceSummary:i=null}){let{data:a,isLoading:o,error:s}=qy(e,t);return t?(0,V.jsxs)(`div`,{children:[(0,V.jsx)(HE,{stepLabel:a?.stepLabel??null,nodeId:t}),(0,V.jsxs)(`div`,{className:`p-4 space-y-4`,children:[o&&(0,V.jsx)(`div`,{className:`text-[var(--text-secondary)] text-sm`,children:`Loading...`}),s&&(0,V.jsx)(`div`,{className:`text-[var(--error)] text-sm bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3`,children:s.message}),a&&(0,V.jsx)(qE,{detail:a,runStatus:n,currentNodeId:r,executionTraceSummary:i})]})]}):(0,V.jsx)(`div`,{className:`px-5 py-8 text-sm text-[var(--text-secondary)]`,children:`Select a node in the lineage to inspect its recap, validations, gaps, and artifacts.`})}function HE({stepLabel:e,nodeId:t}){return(0,V.jsxs)(`div`,{className:`px-5 py-4 border-b border-[var(--border)] console-blueprint-grid`,children:[(0,V.jsx)(`div`,{className:`text-base font-semibold text-[var(--text-primary)] leading-tight`,children:e??`Untitled node`}),(0,V.jsx)(`div`,{className:`mt-1 font-mono text-[11px] text-[var(--text-muted)] truncate`,children:t})]})}function UE({item:e}){return(0,V.jsxs)(`div`,{className:`flex items-start gap-2 text-xs py-1`,children:[(0,V.jsx)(`span`,{className:`flex-1 text-[var(--text-secondary)] leading-relaxed`,children:e.summary}),(0,V.jsxs)(`span`,{className:`font-mono text-[10px] text-[var(--text-muted)] shrink-0`,children:[`#`,e.recordedAtEventIndex]})]})}function WE({nodeId:e,nodeKind:t,executionTraceSummary:n}){let{whySelected:r,conditions:i,loops:a,divergences:o,forks:s}=my(n,e);return n.items.some(t=>t.kind!==`context_fact`&&t.refs.some(t=>t.kind===`node_id`&&t.value===e))?(0,V.jsx)(cD,{title:`Routing context`,children:(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(r.length>0||t===`blocked_attempt`)&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5 flex items-center gap-2`,children:(0,V.jsx)(Fy,{label:`WHY SELECTED`,color:`var(--accent)`,bgColor:`rgba(244,196,48,0.10)`})}),r.length>0?(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:r.map((e,t)=>(0,V.jsx)(UE,{item:e},t))}):t===`blocked_attempt`?(0,V.jsx)(`div`,{className:`pl-2 border-l border-[var(--border)]`,children:(0,V.jsx)(`span`,{className:`text-xs text-[var(--text-muted)]`,children:`This step was attempted but not selected as the preferred path.`})}):null]}),i.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5`,children:(0,V.jsx)(Fy,{label:`CONDITIONS EVALUATED`,color:`var(--text-secondary)`,bgColor:`rgba(168,159,140,0.10)`})}),(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:[...i.filter(e=>!cy(e)),...i.filter(e=>cy(e))].map((e,t)=>{let n=cy(e);return(0,V.jsxs)(`div`,{className:`flex items-start gap-2 text-xs py-0.5`,children:[(0,V.jsx)(Fy,{label:n?`PASS`:`SKIP`,color:n?`var(--success)`:`var(--warning)`,bgColor:n?`rgba(34,197,94,0.10)`:`rgba(251,191,36,0.10)`}),(0,V.jsx)(`span`,{className:`flex-1 text-[var(--text-secondary)] leading-relaxed`,children:e.summary})]},t)})})]}),a.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5`,children:(0,V.jsx)(Fy,{label:`LOOP`,color:`var(--accent-strong)`,bgColor:`rgba(0,240,255,0.10)`})}),(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:a.map((e,t)=>(0,V.jsx)(UE,{item:e},t))})]}),o.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5`,children:(0,V.jsx)(Fy,{label:`DIVERGENCE`,color:`var(--error)`,bgColor:`rgba(255,107,107,0.10)`})}),(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:o.map((e,t)=>(0,V.jsx)(UE,{item:e},t))})]}),s.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5`,children:(0,V.jsx)(Fy,{label:`FORK`,color:`var(--warning)`,bgColor:`rgba(251,191,36,0.10)`})}),(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:s.map((e,t)=>(0,V.jsx)(UE,{item:e},t))})]})]})}):(0,V.jsx)(cD,{title:`Routing context`,children:t===`blocked_attempt`&&r.length===0?(0,V.jsxs)(`div`,{className:`flex items-start gap-2 py-1`,children:[(0,V.jsx)(Fy,{label:`WHY SELECTED`,color:`var(--text-muted)`,bgColor:`rgba(123,141,167,0.08)`}),(0,V.jsx)(`span`,{className:`text-xs text-[var(--text-muted)] leading-relaxed`,children:`This step was attempted but not selected as the preferred path.`})]}):(0,V.jsx)(`span`,{className:`font-mono text-xs text-[var(--text-muted)]`,children:`// no routing trace for this node`})})}function GE({items:e}){let[t,n]=(0,B.useState)(!1);return(0,V.jsx)(cD,{title:`Run routing`,children:(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(`button`,{type:`button`,"aria-expanded":t,onClick:()=>n(e=>!e),className:`flex items-center gap-2 font-mono text-[10px] uppercase tracking-[0.20em] text-[var(--text-muted)] hover:text-[var(--text-secondary)] transition-colors`,children:[(0,V.jsx)(Fy,{label:`RUN ROUTING`,color:`var(--text-muted)`,bgColor:`rgba(123,141,167,0.08)`}),(0,V.jsxs)(`span`,{className:`text-[var(--text-muted)]`,children:[`// `,e.length,` ambient items`]}),(0,V.jsx)(`span`,{children:t?`[-]`:`[+]`})]}),t&&(0,V.jsx)(`div`,{className:`mt-2 space-y-1 pl-2 border-l border-[var(--border)]`,children:e.map((e,t)=>(0,V.jsxs)(`div`,{className:`flex items-start gap-2 text-xs py-0.5`,children:[(0,V.jsx)(`span`,{className:`shrink-0 inline-flex items-center px-2 py-0.5 font-mono text-[10px] uppercase tracking-[0.16em]`,style:{color:`var(--text-muted)`,backgroundColor:`rgba(123,141,167,0.08)`,border:`1px solid rgba(123,141,167,0.20)`},children:e.kind.replace(/_/g,` `).toUpperCase()}),(0,V.jsx)(`span`,{className:`flex-1 text-[var(--text-secondary)] leading-relaxed`,children:e.summary}),(0,V.jsxs)(`span`,{className:`font-mono text-[10px] text-[var(--text-muted)] shrink-0`,children:[`#`,e.recordedAtEventIndex]})]},t))})]})})}var KE=[{id:`routing`,column:`primary`,render:({detail:e,executionTraceSummary:t})=>t===null?null:(0,V.jsx)(WE,{nodeId:e.nodeId,nodeKind:e.nodeKind,executionTraceSummary:t},`routing`)},{id:`run_routing`,column:`primary`,render:({executionTraceSummary:e})=>{if(e===null)return null;let t=e.items.filter(e=>!e.refs.some(e=>e.kind===`node_id`));return t.length===0?null:(0,V.jsx)(GE,{items:t},`run_routing`)}},{id:`recap`,column:`primary`,render:({detail:e,runStatus:t,currentNodeId:n})=>e.recapMarkdown?(0,V.jsx)($E,{markdown:e.recapMarkdown},`recap`):t===`in_progress`&&e.nodeId===n&&!e.recapMarkdown?(0,V.jsx)(JE,{detail:e},`recap-in-progress`):null},{id:`validations`,column:`primary`,render:({detail:e})=>e.validations.length>0?(0,V.jsx)(tD,{validations:e.validations},`validations`):null},{id:`gaps`,column:`primary`,render:({detail:e})=>e.gaps.length>0?(0,V.jsx)(rD,{gaps:e.gaps},`gaps`):null},{id:`advance-outcome`,column:`primary`,render:({detail:e})=>e.advanceOutcome?(0,V.jsx)(eD,{outcome:e.advanceOutcome},`advance-outcome`):null},{id:`artifacts`,column:`primary`,render:({detail:e})=>e.artifacts.length>0?(0,V.jsx)(sD,{artifacts:e.artifacts},`artifacts`):null},{id:`node-meta`,column:`primary`,render:({detail:e})=>(0,V.jsx)(QE,{detail:e},`node-meta`)}];function qE(e){return(0,V.jsx)(`div`,{className:`space-y-4`,children:KE.map(t=>t.render(e))})}function JE({detail:e}){return(0,V.jsx)(cD,{title:`Recap`,children:(0,V.jsxs)(`div`,{className:`space-y-4 text-sm text-[var(--text-secondary)]`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(YE,{children:`In progress`}),(0,V.jsxs)(`span`,{className:`font-mono text-xs text-[var(--text-muted)]`,children:[`event #`,e.createdAtEventIndex]})]}),(0,V.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-[minmax(0,1.15fr)_minmax(0,0.85fr)]`,children:[(0,V.jsx)(XE,{label:`Current focus`,value:e.stepLabel??`Current workflow step`,supportingText:`This step is still running, so the recap will appear once execution finishes.`}),(0,V.jsx)(XE,{label:`Current state`,value:`Waiting for step completion`,supportingText:`The node has been created and selected as the current workflow position.`,mono:!0})]}),(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] overflow-hidden`,children:[(0,V.jsx)(`div`,{className:`px-4 py-3 border-b border-[var(--border)]`,children:(0,V.jsx)(Ko,{children:`What lands here next`})}),(0,V.jsxs)(`div`,{className:`p-4 grid gap-3 md:grid-cols-3`,children:[(0,V.jsx)(ZE,{title:`Recap`,description:`A step summary is written when this node completes.`}),(0,V.jsx)(ZE,{title:`Validations`,description:`Validation results appear if this step records contract checks.`}),(0,V.jsx)(ZE,{title:`Artifacts`,description:`Generated outputs show up here after the step produces them.`})]})]})]})})}function YE({children:e}){return(0,V.jsx)(`span`,{className:`inline-flex items-center px-2 py-1 font-medium text-xs`,style:{backgroundColor:`rgba(0, 219, 233, 0.12)`,color:`var(--accent-strong)`},children:e})}function XE({label:e,value:t,supportingText:n,mono:r=!1}){return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3 space-y-2`,children:[(0,V.jsx)(Ko,{children:e}),(0,V.jsx)(`div`,{className:r?`font-mono text-sm text-[var(--text-primary)]`:`text-[var(--text-primary)]`,children:t}),(0,V.jsx)(`div`,{className:`text-xs text-[var(--text-muted)] leading-relaxed`,children:n})]})}function ZE({title:e,description:t}){return(0,V.jsxs)(`div`,{className:`border border-[var(--border)] bg-[rgba(255,255,255,0.02)] px-3 py-3 space-y-2`,children:[(0,V.jsx)(Ko,{color:`var(--text-secondary)`,children:e}),(0,V.jsx)(`div`,{className:`text-xs text-[var(--text-muted)] leading-relaxed`,children:t})]})}function QE({detail:e}){return(0,V.jsx)(cD,{title:`Node details`,children:(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(0,V.jsx)(lD,{label:`Kind`,value:(0,V.jsx)(dD,{kind:e.nodeKind})}),(0,V.jsx)(lD,{label:`Event index`,value:String(e.createdAtEventIndex),mono:!0}),(0,V.jsx)(lD,{label:`Parent`,value:e.parentNodeId??`Root`,mono:!0}),(0,V.jsx)(lD,{label:`Tip state`,value:e.isTip?e.isPreferredTip?`Preferred tip`:`Tip`:`Historical`})]})})}function $E({markdown:e}){return(0,V.jsx)(cD,{title:`Recap`,children:(0,V.jsx)(BE,{children:e})})}function eD({outcome:e}){let t=e.kind===`advanced`;return(0,V.jsx)(cD,{title:`Advance outcome`,children:(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 text-xs`,children:[(0,V.jsx)(`span`,{className:`inline-flex items-center px-2 py-1 font-medium`,style:{backgroundColor:t?`var(--success)20`:`var(--blocked)20`,color:t?`var(--success)`:`var(--blocked)`},children:t?`Advanced`:`Blocked`}),(0,V.jsxs)(`span`,{className:`text-[var(--text-muted)]`,children:[`attempt `,e.attemptId.slice(-8),` at event #`,e.recordedAtEventIndex]})]})})}function tD({validations:e}){return(0,V.jsx)(cD,{title:`Validations (${e.length})`,children:(0,V.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,V.jsx)(nD,{validation:e},e.validationId))})})}function nD({validation:e}){let t=e.outcome===`pass`;return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3 text-xs space-y-2`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`inline-flex items-center px-2 py-1 font-medium`,style:{backgroundColor:t?`var(--success)20`:`var(--error)20`,color:t?`var(--success)`:`var(--error)`},children:t?`Pass`:`Fail`}),(0,V.jsx)(`span`,{className:`text-[var(--text-muted)] font-mono`,children:e.contractRef})]}),e.issues.length>0&&(0,V.jsxs)(`div`,{className:`space-y-1`,children:[(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] mb-1`,children:`Issues`}),(0,V.jsx)(`ul`,{className:`list-disc list-inside text-[var(--error)] space-y-0.5`,children:e.issues.map((e,t)=>(0,V.jsx)(`li`,{children:e},t))})]}),e.suggestions.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] mb-1`,children:`Suggestions`}),(0,V.jsx)(`ul`,{className:`list-disc list-inside text-[var(--text-secondary)] space-y-0.5`,children:e.suggestions.map((e,t)=>(0,V.jsx)(`li`,{children:e},t))})]})]})}function rD({gaps:e}){return(0,V.jsx)(cD,{title:`Gaps (${e.length})`,children:(0,V.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,V.jsxs)(`div`,{className:`flex items-start gap-3 text-xs bg-[var(--bg-primary)] border border-[var(--border)] px-3 py-3`,children:[(0,V.jsx)(`span`,{className:`shrink-0 inline-flex items-center px-2 py-1 font-medium`,style:{backgroundColor:e.isResolved?`var(--success)20`:e.severity===`critical`?`var(--error)20`:`var(--warning)20`,color:e.isResolved?`var(--success)`:e.severity===`critical`?`var(--error)`:`var(--warning)`},children:e.isResolved?`Resolved`:e.severity===`critical`?`Critical`:`Non-critical`}),(0,V.jsx)(`span`,{className:`text-[var(--text-secondary)] leading-relaxed`,children:e.summary})]},e.gapId))})})}var iD=1e5,aD=[{prefix:`text/`,render:e=>(0,V.jsx)(`pre`,{className:`text-[var(--text-secondary)] whitespace-pre-wrap break-words font-mono max-h-40 overflow-y-auto`,children:typeof e==`string`?e:String(e)})},{prefix:`application/json`,render:e=>(0,V.jsx)(`pre`,{className:`text-[var(--text-secondary)] whitespace-pre-wrap break-words font-mono max-h-40 overflow-y-auto`,children:typeof e==`string`?e:JSON.stringify(e,null,2)})}];function oD(e){if(e.byteLength>iD)return(0,V.jsxs)(`div`,{className:`text-[var(--text-muted)] italic`,children:[`Content too large to display (`,fD(e.byteLength),` -- limit `,fD(iD),`)`]});let t=aD.find(t=>e.contentType.startsWith(t.prefix));return t?t.render(e.content):(0,V.jsx)(`pre`,{className:`text-[var(--text-secondary)] whitespace-pre-wrap break-words font-mono max-h-40 overflow-y-auto`,children:typeof e.content==`string`?e.content:JSON.stringify(e.content,null,2)})}function sD({artifacts:e}){return(0,V.jsx)(cD,{title:`Artifacts (${e.length})`,children:(0,V.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3 text-xs space-y-2`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-[var(--text-muted)]`,children:[(0,V.jsx)(`span`,{children:e.contentType}),(0,V.jsx)(`span`,{children:`//`}),(0,V.jsx)(`span`,{children:fD(e.byteLength)})]}),oD(e)]},e.sha256))})})}function cD({title:e,children:t}){return(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-2`,children:(0,V.jsx)(Ko,{children:e})}),t]})}function lD({label:e,value:t,mono:n=!1}){return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3`,children:[(0,V.jsx)(Ko,{children:e}),(0,V.jsx)(`div`,{className:n?`mt-2 font-mono text-sm text-[var(--text-secondary)] truncate`:`mt-2 text-sm text-[var(--text-primary)]`,children:t})]})}var uD={step:{label:`Step`,color:`var(--accent)`},checkpoint:{label:`Checkpoint`,color:`var(--success)`},blocked_attempt:{label:`Blocked`,color:`var(--error)`}};function dD({kind:e}){let t=uD[e];return(0,V.jsx)(`span`,{className:`inline-flex items-center px-2 py-1 font-medium`,style:{backgroundColor:`${t.color}20`,color:t.color},children:t.label})}function fD(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function pD(e){return e.length>16?`\u2026${e.slice(-16)}`:e}function mD({data:e}){let t=e.runs[0]??null,n=t?.workflowName??t?.workflowId??`--`,r=t?.workflowHash?.slice(0,12)??`--`;return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-card)] border border-[var(--border)] px-5 py-4 corner-brackets`,style:{backdropFilter:`blur(12px)`,WebkitBackdropFilter:`blur(12px)`},children:[e.sessionTitle&&(0,V.jsx)(`h2`,{className:`text-base font-medium text-[var(--text-primary)] mb-3`,children:e.sessionTitle}),(0,V.jsxs)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-8 gap-y-2`,children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Session`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:pD(e.sessionId)}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Workflow`}),(0,V.jsx)(`dd`,{className:`text-sm text-[var(--text-primary)] self-center`,children:n}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Hash`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:r}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Status`}),(0,V.jsxs)(`dd`,{className:`self-center flex items-center gap-2`,children:[(0,V.jsx)(ao,{health:e.health}),e.health===`healthy`&&(0,V.jsx)(`span`,{className:`text-sm text-[var(--text-primary)]`,children:`Healthy`})]}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Runs`}),(0,V.jsxs)(`dd`,{className:`text-sm text-[var(--text-primary)] self-center`,children:[e.runs.length,` run`,e.runs.length===1?``:`s`]})]})]})}function hD({summary:e}){let t=new TextEncoder().encode(e).length;return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-card)] border border-[var(--border)] px-5 py-4 corner-brackets`,style:{backdropFilter:`blur(12px)`,WebkitBackdropFilter:`blur(12px)`},children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)]`,children:`Injected Context`}),(0,V.jsxs)(`span`,{className:`font-mono text-[10px] text-[var(--text-muted)]`,children:[t.toLocaleString(),` bytes`]})]}),(0,V.jsx)(`pre`,{className:`font-mono text-xs text-[var(--text-secondary)] whitespace-pre-wrap break-words max-h-48 overflow-y-auto leading-relaxed`,children:e})]})}function gD(e){if(e<6e4)return`${Math.round(e/1e3)}s`;let t=Math.floor(e/6e4),n=Math.round(e%6e4/1e3);return n>0?`${t}m ${n}s`:`${t}m`}function _D({sessionId:e,metrics:t}){let[n,r]=(0,B.useState)({kind:`idle`}),i=Jy(e,!1),a=t.startGitSha!==null&&t.endGitSha!==null,o=async()=>{r({kind:`loading`});try{let e=await i.refetch();e.isSuccess&&e.data?r({kind:`loaded`,linesAdded:e.data.linesAdded,linesRemoved:e.data.linesRemoved,filesChanged:e.data.filesChanged}):r({kind:`error`,message:e.error instanceof Error?e.error.message:`Diff computation failed`})}catch(e){r({kind:`error`,message:e instanceof Error?e.message:`Diff computation failed`})}};return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-card)] border border-[var(--border)] px-5 py-4 corner-brackets space-y-4`,style:{backdropFilter:`blur(12px)`,WebkitBackdropFilter:`blur(12px)`},children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)]`,children:`Session Metrics`}),(0,V.jsx)(`span`,{className:`font-mono text-[10px] text-[var(--text-muted)]`,children:`Session-level totals across all runs.`})]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[t.outcome!==null&&(0,V.jsx)(`span`,{className:`px-2 py-1 text-xs font-mono border border-[var(--border)] text-[var(--text-secondary)] bg-[var(--bg-card)]`,children:t.outcome}),t.durationMs!==void 0&&(0,V.jsx)(`span`,{className:`px-2 py-1 text-xs font-mono border border-[var(--border)] text-[var(--text-secondary)] bg-[var(--bg-card)]`,children:gD(t.durationMs)}),t.filesChanged!==null&&(0,V.jsxs)(`span`,{className:`px-2 py-1 text-xs font-mono border border-[var(--border)] text-[var(--text-secondary)] bg-[var(--bg-card)]`,children:[t.filesChanged,` file`,t.filesChanged===1?``:`s`,` changed`]}),t.captureConfidence!==`none`&&(0,V.jsxs)(`span`,{className:`px-2 py-1 text-xs font-mono border border-[var(--border)] text-[var(--text-muted)] bg-[var(--bg-card)]`,children:[t.captureConfidence,` confidence`]})]}),(0,V.jsxs)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-8 gap-y-2`,children:[t.gitBranch!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Git Branch`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:t.gitBranch})]}),t.startGitSha!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Start SHA`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:t.startGitSha.slice(0,12)})]}),t.endGitSha!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`End SHA`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:t.endGitSha.slice(0,12)})]}),t.durationMs!==void 0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Duration`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:gD(t.durationMs)})]}),t.agentCommitShas.length>0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-start`,children:`Commits`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)]`,children:t.agentCommitShas.map(e=>(0,V.jsx)(`div`,{children:e.slice(0,12)},e))})]}),t.outcome!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Outcome`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.outcome,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),t.filesChanged!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Files Changed`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.filesChanged,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),t.linesAdded!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Lines Added`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.linesAdded,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),t.linesRemoved!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Lines Removed`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.linesRemoved,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),t.prNumbers.length>0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`PRs`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.prNumbers.join(`, `),` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),n.kind===`loaded`&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`LOC Added`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[n.linesAdded,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(git diff)`})]}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`LOC Removed`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[n.linesRemoved,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(git diff)`})]})]})]}),a&&n.kind!==`loaded`&&(0,V.jsxs)(`div`,{className:`flex items-center gap-3 pt-1`,children:[n.kind===`idle`&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>{o()},className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--text-primary)] border border-[var(--border)] px-3 py-1.5 transition-colors`,children:`Load diff`}),n.kind===`loading`&&(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)]`,children:`Computing...`}),n.kind===`error`&&(0,V.jsxs)(`span`,{className:`text-xs text-[var(--error)]`,children:[n.message,` `,(0,V.jsx)(`button`,{type:`button`,onClick:()=>{o()},className:`underline text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors`,children:`Retry`})]})]})]})}function vD({runs:e}){let t=e.some(e=>e.preferredTipNodeId!==null),n=e.some(e=>e.executionTraceSummary!==null);return(0,V.jsxs)(`div`,{className:`border border-[var(--border)] px-4 py-3 text-xs text-[var(--text-muted)] space-y-1`,children:[(0,V.jsx)(`p`,{children:t?`Nodes with a gold border are the current execution tips — click any node to inspect its execution detail.`:`Click any node in the DAG to inspect its execution detail.`}),n&&(0,V.jsxs)(`p`,{children:[`This run has execution trace data. Click`,` `,(0,V.jsx)(`span`,{className:`font-mono uppercase tracking-[0.16em]`,children:`[ TRACE ]`}),` `,`to see why certain steps ran, were skipped, or repeated.`]})]})}function yD({viewModel:e}){let{state:t,onSelectNode:n,onCloseNode:r}=e;if(t.kind===`loading`)return(0,V.jsx)(`div`,{className:`text-[var(--text-secondary)]`,children:`Loading session...`});if(t.kind===`error`)return(0,V.jsxs)(`div`,{className:`text-[var(--error)] bg-[var(--bg-card)] rounded-lg p-4`,children:[`Failed to load session: `,t.message]});let{sessionId:i,data:a,selectedNode:o,selectedRun:s}=t;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(mD,{data:a}),a.metrics!==null&&(0,V.jsx)(_D,{sessionId:i,metrics:a.metrics}),a.injectedContext!==void 0&&(0,V.jsx)(hD,{summary:a.injectedContext.assembledContextSummary}),a.runs.length===0?(0,V.jsx)(`div`,{className:`text-center py-16 text-[var(--text-secondary)]`,children:`No runs in this session`}):(0,V.jsxs)(V.Fragment,{children:[o===null&&(0,V.jsx)(vD,{runs:a.runs}),(0,V.jsx)(`div`,{className:`space-y-6`,children:a.runs.map(e=>(0,V.jsx)(bD,{run:e,selectedNodeId:o?.runId===e.runId?o.nodeId:null,onNodeClick:n},e.runId))})]})]}),(0,V.jsxs)(W,{cut:18,borderColor:`rgba(244, 196, 48, 0.35)`,background:`rgba(27, 31, 44, 0.78)`,dropShadow:`drop-shadow(0 16px 48px rgba(0,0,0,0.9)) drop-shadow(0 2px 12px rgba(244,196,48,0.15))`,backdropFilter:`blur(16px)`,className:`fixed top-3 right-3 bottom-3 w-[560px] max-w-[calc(92vw-12px)] transition-transform duration-200 ease-out`,style:{zIndex:40,transform:o?`translateX(0)`:`translateX(calc(100% + 12px))`},children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-[var(--border)] shrink-0 console-blueprint-grid`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)]`,children:`Node detail`}),(0,V.jsx)(`button`,{onClick:r,className:`text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors text-xl leading-none px-1`,"aria-label":`Close`,children:`×`})]}),(0,V.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,V.jsx)(VE,{sessionId:i,nodeId:o?.nodeId??null,runStatus:s?.status??`complete`,currentNodeId:s?.preferredTipNodeId??null,executionTraceSummary:s?.executionTraceSummary??null})})]})]})}function bD({run:e,selectedNodeId:t,onNodeClick:n}){let r=e.executionTraceSummary!==null,[i,a]=(0,B.useState)(`dag`);return(0,V.jsxs)(W,{cut:10,background:`rgba(27, 31, 44, 0.72)`,backdropFilter:`blur(8px)`,className:`relative`,style:{height:r?`542px`:`506px`},children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-[var(--border)] shrink-0`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(`span`,{className:`text-sm font-medium text-[var(--text-primary)]`,children:e.workflowName??e.workflowId??`Run`}),(0,V.jsx)(`span`,{className:`font-mono text-xs text-[var(--text-muted)]`,children:e.runId}),(0,V.jsxs)(`span`,{className:`font-mono text-xs text-[var(--text-muted)]`,children:[e.nodes.length,` nodes · `,e.tipNodeIds.length,` tip`,e.tipNodeIds.length===1?``:`s`]})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.hasUnresolvedCriticalGaps&&(0,V.jsx)(`span`,{className:`text-xs text-[var(--warning)]`,children:`Critical gaps`}),(0,V.jsx)(io,{status:e.status})]})]}),r&&(0,V.jsxs)(`div`,{role:`tablist`,"aria-label":`Run view mode`,className:`flex items-center border-b border-[var(--border)] shrink-0 h-9 px-2 gap-0.5`,onKeyDown:e=>{e.key===`ArrowRight`&&(e.preventDefault(),a(`trace`)),e.key===`ArrowLeft`&&(e.preventDefault(),a(`dag`))},children:[(0,V.jsxs)(`button`,{type:`button`,id:`tab-dag`,role:`tab`,tabIndex:i===`dag`?0:-1,"aria-selected":i===`dag`,onClick:()=>a(`dag`),className:[`tab-btn px-3 py-1.5 font-mono text-[10px] uppercase tracking-[0.25em] transition-colors duration-150`,i===`dag`?`tab-btn--active text-[var(--accent)]`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`].join(` `),style:i===`dag`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`DAG`]}),(0,V.jsxs)(`button`,{type:`button`,id:`tab-trace`,role:`tab`,tabIndex:i===`trace`?0:-1,"aria-selected":i===`trace`,onClick:()=>a(`trace`),className:[`tab-btn px-3 py-1.5 font-mono text-[10px] uppercase tracking-[0.25em] transition-colors duration-150`,i===`trace`?`tab-btn--active text-[var(--accent)]`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`].join(` `),style:i===`trace`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`TRACE`]})]}),(0,V.jsx)(`div`,{role:`tabpanel`,"aria-labelledby":i===`dag`?`tab-dag`:`tab-trace`,className:`flex-1`,children:i===`trace`&&e.executionTraceSummary!==null?(0,V.jsx)(Vy,{summary:e.executionTraceSummary,runStatus:e.status}):(0,V.jsx)(hy,{run:e,selectedNodeId:t,onNodeClick:t=>n(e.runId,t)})})]})}function xD(){let[e,t]=(0,B.useState)(0),[n,r]=(0,B.useState)(0),[i,a]=(0,B.useState)(38),[o,s]=(0,B.useState)(62),[c,l]=(0,B.useState)(3),[u,d]=(0,B.useState)(2),[f,p]=(0,B.useState)(``),[m,h]=(0,B.useState)(!1),g=(0,B.useRef)(!1),_=(0,B.useRef)(null),v=(0,B.useRef)(null),y=(0,B.useRef)(null),b=(e,n,i,o,c,u)=>{g.current=!0,h(!0),t(e=>e+1),r(Math.floor(Math.random()*4)),a(5+Math.floor(Math.random()*80)),s(5+Math.floor(Math.random()*80)),l(2+Math.floor(Math.random()*40)),d(2+Math.floor(Math.random()*25)),p(i===`horizontal`?n===`next`?`modal-content--exit-h-next`:`modal-content--exit-h-prev`:n===`next`?`modal-content--exit-v-next`:`modal-content--exit-v-prev`),c.current&&(c.current.scrollTop=0);let f=u[e].id;setTimeout(()=>{o(f),p(i===`horizontal`?n===`next`?`modal-content--enter-h-next`:`modal-content--enter-h-prev`:n===`next`?`modal-content--enter-v-next`:`modal-content--enter-v-prev`),h(!1)},80),setTimeout(()=>{if(p(``),g.current=!1,_.current!==null){let e=_.current;_.current=null;let t=e>u.findIndex(e=>e.id===v.current)?`next`:`prev`;y.current?.(e,t,`horizontal`,o,c,u)}},240)};return y.current=b,{state:{isAnimating:g.current,contentAnimClass:f,borderFlashing:m,scanline:e>0?{key:e,crtOffset:n,glitchY:i,glitchY2:o,glitchW:c,glitchW2:u}:null},startTransition:b,navigate:(e,t,n,r,i,a)=>{if(t.length<=1)return;let o=t.findIndex(t=>t.id===e);if(o===-1)return;let s=n===`next`?(o+1)%t.length:(o-1+t.length)%t.length;if(g.current){_.current=s;return}b(s,n,r,i,a,t)},selectedWorkflowIdRef:v}}var SD=[{id:`coding`,label:`Coding`},{id:`review_audit`,label:`Review & Audit`},{id:`investigation`,label:`Investigation`},{id:`design`,label:`Design`},{id:`documentation`,label:`Documentation`},{id:`tickets`,label:`Tickets`},{id:`learning`,label:`Learning`},{id:`authoring`,label:`Workflow Authoring`}],CD=Object.fromEntries(SD.map(e=>[e.id,e.label]));function wD({label:e,count:t,countLabel:n=`workflow`,showRule:r=!0,separator:i=`//`}){return(0,V.jsxs)(`div`,{className:`flex items-center gap-3 mb-3 mt-2`,children:[(0,V.jsxs)(`span`,{className:`font-mono text-[11px] uppercase tracking-[0.30em] text-[var(--text-secondary)] shrink-0`,children:[e,t==null?``:` ${i} ${t} ${n}${t===1?``:`s`}`]}),r&&(0,V.jsx)(`div`,{className:`flex-1 h-px bg-[var(--border)]`})]})}function TD({segments:e,className:t=``}){return(0,V.jsx)(`nav`,{"aria-label":`Breadcrumb`,className:`flex items-center gap-0 ${t}`,children:e.map((t,n)=>{let r=n===e.length-1,i=!!t.onClick;return(0,V.jsxs)(`span`,{className:`flex items-center`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] tracking-[0.25em] text-[var(--text-muted)] mx-1`,children:`//`}),i?(0,V.jsx)(`button`,{type:`button`,onClick:t.onClick,className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--accent)] transition-colors cursor-pointer`,children:t.label.toUpperCase()}):(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] ${r?`text-[var(--text-secondary)]`:`text-[var(--text-muted)]`}`,"aria-current":r?`page`:void 0,children:t.label.toUpperCase()})]},n)})})}function ED({viewModel:e}){let{state:t}=e;if(t.kind===`not_found`)return(0,V.jsx)(`div`,{className:`space-y-5 max-w-3xl`,children:(0,V.jsx)(MD,{message:``,is404:!0,onRetry:()=>void 0,onBack:t.onBack})});if(t.kind===`error`)return(0,V.jsx)(`div`,{className:`space-y-5 max-w-3xl`,children:(0,V.jsx)(MD,{message:t.message,is404:!1,onRetry:t.onRetry,onBack:t.onBack})});if(t.kind===`loading`){let{cached:e,activeTagLabel:n,onBack:r}=t;return(0,V.jsxs)(`div`,{className:`space-y-5 max-w-3xl`,children:[(0,V.jsx)(TD,{segments:n?[{label:`Workflows`,onClick:r},{label:n}]:[{label:`Workflows`,onClick:r}]}),e?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(DD,{name:e.name,description:e.description,tags:e.tags,source:e.source,stepCount:void 0}),(0,V.jsx)(`div`,{className:`space-y-4`,children:(0,V.jsx)(AD,{})})]}):(0,V.jsx)(jD,{})]})}let{workflow:n,name:r,description:i,tags:a,source:o,activeTagLabel:s,onPrev:c,onNext:l,onBack:u}=t;return(0,V.jsxs)(`div`,{className:`space-y-5 max-w-3xl`,children:[(0,V.jsx)(TD,{segments:s?[{label:`Workflows`,onClick:u},{label:s}]:[{label:`Workflows`,onClick:u}]}),(0,V.jsx)(DD,{name:r,description:i,tags:a,source:o,stepCount:n.stepCount}),(c??l)&&(0,V.jsxs)(`div`,{className:`flex items-center gap-4`,children:[c&&(0,V.jsxs)(`button`,{type:`button`,onClick:c,className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--accent)] transition-colors`,children:[`<`,` PREV`]}),l&&(0,V.jsxs)(`button`,{type:`button`,onClick:l,className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--accent)] transition-colors`,children:[`NEXT `,`>`]})]}),(0,V.jsx)(OD,{detail:n,name:r}),(0,V.jsx)(TD,{segments:[{label:`Workflows`,onClick:u}]})]})}function DD({name:e,description:t,tags:n,source:r,stepCount:i}){return(0,V.jsxs)(`div`,{className:`border border-[var(--border)] px-5 py-5 console-blueprint-grid`,children:[(0,V.jsx)(`p`,{className:`font-mono text-[10px] uppercase tracking-[0.35em] text-[var(--text-muted)] mb-2`,children:`// Workflow`}),(0,V.jsx)(`h2`,{className:`font-mono text-xl font-bold uppercase tracking-[0.08em] leading-tight mb-3`,style:{color:`var(--accent)`,textShadow:`0 0 24px rgba(244,196,48,0.45), 0 0 48px rgba(244,196,48,0.15)`},children:e}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[i!=null&&i>0&&(0,V.jsxs)(`span`,{className:`font-mono text-[10px] px-1.5 py-0.5 border border-[var(--border)] text-[var(--text-secondary)]`,children:[i,` step`,i===1?``:`s`]}),n.filter(e=>e!==`routines`).map(e=>(0,V.jsx)(`span`,{"aria-hidden":`true`,className:`font-mono text-[10px] px-1.5 py-0.5 bg-[var(--bg-secondary)] text-[var(--text-muted)]`,children:e},e)),r&&(0,V.jsxs)(`span`,{"aria-hidden":`true`,className:`font-mono text-[10px] px-1.5 py-0.5 border border-[var(--border)] text-[var(--text-muted)]`,children:[`src: `,r.displayName]})]}),t&&(0,V.jsx)(`p`,{className:`text-sm text-[var(--text-secondary)] leading-relaxed mt-3`,children:t})]})}function OD({detail:e,name:t}){let n=e.about!==void 0&&e.about.length>0,r=e.examples!==void 0&&e.examples.length>0,i=e.preconditions!==void 0&&e.preconditions.length>0;return n||r||i?(0,V.jsxs)(`div`,{className:`space-y-6`,children:[n&&(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`h3`,{className:`text-xs font-semibold text-[var(--text-muted)] uppercase tracking-wider mb-3`,children:`About`}),(0,V.jsx)(BE,{children:e.about})]}),r&&(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`h3`,{className:`text-xs font-semibold text-[var(--text-muted)] uppercase tracking-wider mb-3`,children:`Try it with:`}),(0,V.jsx)(`ul`,{className:`space-y-2`,children:e.examples.map(e=>(0,V.jsxs)(`li`,{className:`flex items-start gap-3 bg-[var(--bg-card)] border border-[var(--border)] rounded-none px-4 py-3`,children:[(0,V.jsx)(`div`,{"aria-hidden":`true`,className:`w-0.5 shrink-0 self-stretch rounded-full`,style:{backgroundColor:`var(--accent)`}}),(0,V.jsxs)(`span`,{className:`text-sm text-[var(--text-secondary)] leading-relaxed`,children:[`"`,e,`"`]})]},e))})]}),i&&(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`h3`,{className:`text-xs font-semibold text-[var(--text-muted)] uppercase tracking-wider mb-3`,children:`Before you start:`}),(0,V.jsx)(`ul`,{className:`space-y-1.5`,children:e.preconditions.map(e=>(0,V.jsxs)(`li`,{className:`flex items-start gap-2 text-sm text-[var(--text-secondary)]`,children:[(0,V.jsx)(`span`,{className:`shrink-0 text-[var(--text-muted)] mt-0.5`,children:`•`}),(0,V.jsx)(`span`,{children:e})]},e))})]}),(0,V.jsx)(kD,{name:t})]}):(0,V.jsx)(`p`,{className:`text-sm text-[var(--text-muted)] italic`,children:`No additional documentation available.`})}function kD({name:e}){let[t,n]=(0,B.useState)(!1),r=`Use the ${e} to [your goal]`;return(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`h3`,{className:`text-xs font-semibold text-[var(--text-muted)] uppercase tracking-wider mb-3`,children:`Start with this prompt`}),(0,V.jsxs)(`div`,{className:`flex items-center gap-3 border border-[var(--border)] px-4 py-3`,children:[(0,V.jsxs)(`span`,{className:`flex-1 text-sm text-[var(--text-secondary)] font-mono truncate`,children:[`"`,r,`"`]}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>{navigator.clipboard.writeText(r).then(()=>{n(!0),setTimeout(()=>n(!1),2e3)})},className:`shrink-0 text-xs font-mono text-[var(--accent)] hover:text-[var(--text-primary)] transition-colors`,children:t?`Copied!`:`Copy`})]})]})}function AD(){return(0,V.jsxs)(`div`,{className:`space-y-3 motion-safe:animate-pulse`,children:[(0,V.jsx)(`div`,{className:`h-3 w-16 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-4 w-full rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-4 w-5/6 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-4 w-4/6 rounded bg-[var(--bg-tertiary)]`})]})}function jD(){return(0,V.jsxs)(`div`,{className:`space-y-6 motion-safe:animate-pulse`,children:[(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`div`,{className:`h-6 w-1/2 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsx)(`div`,{className:`h-5 w-16 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-5 w-24 rounded bg-[var(--bg-tertiary)]`})]}),(0,V.jsx)(`div`,{className:`h-4 w-full rounded bg-[var(--bg-tertiary)]`})]}),(0,V.jsx)(AD,{})]})}function MD({message:e,is404:t,onRetry:n,onBack:r}){return(0,V.jsxs)(`div`,{className:`space-y-4 bg-[var(--bg-card)] border border-[var(--border)] p-4`,children:[(0,V.jsx)(`p`,{className:`text-sm text-[var(--error)]`,children:t?`Workflow not found.`:e}),(0,V.jsxs)(`div`,{className:`flex gap-3`,children:[!t&&(0,V.jsx)(`button`,{type:`button`,onClick:n,className:`text-sm text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors`,children:`Try again`}),(0,V.jsxs)(`button`,{type:`button`,onClick:r,"aria-label":`Back to workflows list`,className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--accent)] transition-colors`,children:[`<`,` WORKFLOWS`]})]})]})}function ND(e){if(e.size<2)return 1;let t=new Set;for(let n of e.values())t.add(Math.round(n.getBoundingClientRect().top));if(t.size<2){let t=Math.round(e.get(0)?.getBoundingClientRect().top??0),n=0;for(let r of e.values())Math.round(r.getBoundingClientRect().top)===t&&n++;return Math.max(1,n)}let n=Math.round(e.get(0)?.getBoundingClientRect().top??0),r=0;for(let t of e.values())Math.round(t.getBoundingClientRect().top)===n&&r++;return Math.max(1,r)}function PD(e,t,n,r){if(n===0)return 0;let i=(e??(t>0?-1:n))+t;return r?(i%n+n)%n:Math.max(0,Math.min(n-1,i))}function FD(e,t,n,r,i){if(n===0)return 0;let a=e??0,o=a%r,s=Math.floor(a/r),c=Math.ceil(n/r),l=s+t;l=i?(l%c+c)%c:Math.max(0,Math.min(c-1,l));let u=l*r+o;return Math.min(u,n-1)}function ID({count:e,cols:t=`auto`,onActivate:n,loop:r=!0}){let[i,a]=(0,B.useState)(null),o=(0,B.useRef)(new Map),s=(0,B.useCallback)(e=>{a(e),e!==null&&o.current.get(e)?.focus()},[]),c=(0,B.useCallback)(()=>t===`auto`?ND(o.current):Math.max(1,t),[t]);return{focusedIndex:i,setFocusedIndex:s,getItemProps:(0,B.useCallback)(t=>({tabIndex:i===null?t===0?0:-1:i===t?0:-1,onFocus:()=>{a(t)},onKeyDown:i=>{let a=c(),o=null;switch(i.key){case`ArrowRight`:case`d`:case`D`:o=PD(t,1,e,r);break;case`ArrowLeft`:case`a`:case`A`:o=PD(t,-1,e,r);break;case`ArrowDown`:case`s`:case`S`:o=FD(t,1,e,a,r);break;case`ArrowUp`:case`w`:case`W`:o=FD(t,-1,e,a,r);break;case`Home`:o=0;break;case`End`:o=e-1;break;case`Enter`:case` `:i.preventDefault(),n?.(t);return;default:return}o!==null&&(i.preventDefault(),s(o))},ref:e=>{e?o.current.set(t,e):o.current.delete(t)}}),[i,e,r,c,n,s]),containerProps:{role:`grid`}}}function LD(e){let t=Qy(e),n=()=>{t.refetch()};return t.isLoading?{kind:`loading`}:t.error?t.error instanceof Uy&&t.error.status===404?{kind:`not_found`}:{kind:`error`,message:t.error instanceof Error?t.error.message:`Could not load workflow details.`,refetch:n}:t.data?{kind:`ready`,detail:t.data,refetch:n}:{kind:`loading`}}function RD(){let e=Xy();return{workflows:e.data?.workflows.filter(e=>!e.tags.includes(`routines`)),isLoading:e.isLoading,error:e.error instanceof Error?e.error:null,refetch:e.refetch}}function zD(e,t){if(!e)return{prevWorkflow:null,nextWorkflow:null};let n=t.findIndex(t=>t.id===e);return n===-1?{prevWorkflow:null,nextWorkflow:null}:{prevWorkflow:n>0?t[n-1]??null:null,nextWorkflow:n<t.length-1?t[n+1]??null:null}}function BD({workflowId:e,activeTag:t,onBack:n,onNavigateToWorkflow:r}){let i=LD(e),a=RD().workflows,o=(0,B.useRef)(null),s=(0,B.useRef)(null),c=(0,B.useRef)(r);c.current=r;let l=a??[],{prevWorkflow:u,nextWorkflow:d}=(0,B.useMemo)(()=>zD(e,l),[e,l]),f=u?()=>c.current(u.id):null,p=d?()=>c.current(d.id):null;o.current=f,s.current=p;let m=i.kind===`ready`;return(0,B.useEffect)(()=>{if(!m)return;function e(e){e.metaKey||e.ctrlKey||e.altKey||(e.key===`ArrowLeft`?(e.preventDefault(),o.current?.()):e.key===`ArrowRight`&&(e.preventDefault(),s.current?.()))}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[m]),{state:(0,B.useMemo)(()=>{let r=a?.find(t=>t.id===e)??void 0,o=t?CD[t]??t:null;if(i.kind===`not_found`)return{kind:`not_found`,onBack:n};if(i.kind===`error`)return{kind:`error`,message:i.message,onBack:n,onRetry:i.refetch};if(i.kind===`ready`){let t=i.detail;return{kind:`ready`,workflow:t,name:t.name??r?.name??e??``,description:t.description??r?.description??null,tags:t.tags??r?.tags??[],source:t.source??r?.source??null,activeTagLabel:o,adjacentWorkflows:l,onPrev:f,onNext:p,onBack:n}}return{kind:`loading`,cached:r??null,activeTagLabel:o,onBack:n}},[i,a,e,t,l,f,p,n])}}function VD(e){let t=new Set(SD.map(e=>e.id)),n=new Map,r=[];for(let i of e){let e=i.tags.find(e=>e!==`routines`&&t.has(e));if(e){let t=n.get(e)??[];t.push(i),n.set(e,t)}else r.push(i)}let i=SD.filter(e=>n.has(e.id)).map(e=>({tagId:e.id,label:e.label,workflows:n.get(e.id)}));return r.length>0&&i.push({tagId:null,label:`Other`,workflows:r}),i}function HD({viewModel:e}){let{state:t,dispatch:n,triggerRef:r,onCardSelect:i}=e,a=(0,B.useRef)(null),o=(0,B.useRef)(null),s=xD(),c=t.kind===`ready`?t.selectedWorkflowId:null;if((0,B.useEffect)(()=>{if(c){let e=requestAnimationFrame(()=>a.current?.focus());return()=>cancelAnimationFrame(e)}},[c]),t.kind===`loading`)return(0,V.jsx)(KD,{});if(t.kind===`error`)return(0,V.jsx)(qD,{message:t.message,onRetry:t.onRetry});let{selectedTag:l,selectedSource:u,hintVisible:d,filteredWorkflows:f,flatWorkflows:p,availableSources:m,sourceFilteredWorkflows:h,tagFilteredWorkflows:g}=t,_=new Set(SD.map(e=>e.id)),v=new Set(h.flatMap(e=>e.tags)),y=new Map(SD.map(e=>[e.id,h.filter(t=>t.tags.includes(e.id)).length])),b=h.filter(e=>!e.tags.some(e=>e!==`routines`&&_.has(e))).length,x=h.length,S=g.length;return(0,V.jsx)(UD,{selectedWorkflowId:c,selectedTag:l,selectedSource:u,hintVisible:d,filteredWorkflows:f,flatWorkflows:p,availableSources:m,tagsWithWorkflows:v,countByTag:y,otherCount:b,allTagCount:x,allSourceCount:S,countBySource:new Map(m.map(e=>[e.displayName,g.filter(t=>t.source.displayName===e.displayName).length])),currentIndex:p.findIndex(e=>e.id===c),dispatch:n,onCardSelect:i,triggerRef:r,modalPanelRef:a,scrollRef:o,modalTransition:s})}function UD({selectedWorkflowId:e,selectedTag:t,selectedSource:n,hintVisible:r,filteredWorkflows:i,flatWorkflows:a,availableSources:o,tagsWithWorkflows:s,countByTag:c,otherCount:l,allTagCount:u,allSourceCount:d,countBySource:f,currentIndex:p,dispatch:m,onCardSelect:h,modalPanelRef:g,scrollRef:_,modalTransition:v}){let y=BD({workflowId:e,activeTag:t,onBack:()=>m({type:`modal_closed`}),onNavigateToWorkflow:e=>m({type:`workflow_selected`,id:e})}),b=(0,B.useCallback)((t,n)=>{v.navigate(e,a,t,n,e=>{m({type:`workflow_selected`,id:e}),v.selectedWorkflowIdRef.current=e},_)},[a,e,v,m,_]);(0,B.useEffect)(()=>{if(!e)return;let t=[`ArrowLeft`,`ArrowRight`,`a`,`A`,`d`,`D`],n=[`ArrowUp`,`ArrowDown`,`w`,`W`,`s`,`S`],r=e=>{if(n.includes(e.key)){e.preventDefault(),e.stopPropagation();return}t.includes(e.key)&&(e.preventDefault(),e.stopPropagation(),b([`ArrowLeft`,`a`,`A`].includes(e.key)?`prev`:`next`,`horizontal`))};return document.addEventListener(`keydown`,r,{capture:!0}),()=>{document.removeEventListener(`keydown`,r,{capture:!0})}},[e,b]);let{getItemProps:x,containerProps:S}=ID({count:a.length,cols:`auto`,onActivate:(0,B.useCallback)(e=>{let t=a[e];if(!t)return;let n=document.activeElement;n instanceof HTMLButtonElement&&h(t.id,n)},[a,h])});return(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h1`,{className:`font-mono text-2xl font-bold uppercase tracking-[0.12em] leading-none`,style:{color:`var(--accent)`,textShadow:`0 0 28px rgba(244,196,48,0.35)`},children:`Workflows`}),(0,V.jsxs)(`p`,{className:`font-mono text-[10px] tracking-[0.25em] text-[var(--text-muted)] mt-1.5`,children:[`// `,i.length,` available`]})]}),(0,V.jsxs)(`div`,{role:`group`,"aria-label":`Filter workflows by category`,className:`flex flex-wrap gap-1.5`,children:[(0,V.jsx)(WD,{label:`All`,count:u,isActive:t===null,disabled:!1,onClick:()=>m({type:`tag_changed`,tag:null})}),SD.filter(e=>s.has(e.id)).map(e=>(0,V.jsx)(WD,{label:e.label,count:c.get(e.id)??0,isActive:t===e.id,disabled:!1,onClick:()=>m({type:`tag_changed`,tag:t===e.id?null:e.id})},e.id)),l>0&&(0,V.jsx)(WD,{label:`Other`,count:l,isActive:t===`__other__`,disabled:!1,onClick:()=>m({type:`tag_changed`,tag:t===`__other__`?null:`__other__`})})]}),o.length>1&&(0,V.jsxs)(`div`,{role:`group`,"aria-label":`Filter workflows by source`,className:`flex flex-wrap gap-1.5`,children:[(0,V.jsx)(WD,{label:`All Sources`,count:d,isActive:n===null,disabled:!1,onClick:()=>m({type:`source_changed`,source:null})}),o.map(e=>(0,V.jsx)(WD,{label:e.displayName,count:f.get(e.displayName)??0,isActive:n===e.displayName,disabled:!1,onClick:()=>m({type:`source_changed`,source:n===e.displayName?null:e.displayName})},e.id))]}),i.length===0?(0,V.jsxs)(`div`,{className:`py-8 text-center space-y-3`,children:[(0,V.jsx)(`p`,{className:`text-sm text-[var(--text-muted)]`,children:`No workflows in this category.`}),t!==null&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>m({type:`tag_changed`,tag:null}),className:`text-sm text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors`,children:`Clear filter`})]}):t===null?(0,V.jsx)(`div`,{className:`space-y-6`,children:(()=>{let t=0;return VD(i).map(n=>(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(wD,{label:n.label,count:n.workflows.length,showRule:!0}),(0,V.jsx)(`div`,{...S,className:`grid grid-cols-2 lg:grid-cols-3 gap-3`,children:n.workflows.map(n=>(0,V.jsx)(GD,{workflow:n,onSelect:e=>h(n.id,e),navProps:x(t++),isActive:n.id===e},n.id))})]},n.tagId??`__other__`))})()}):(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(wD,{label:t===`__other__`?`Other`:CD[t]??t,count:i.length,showRule:!0}),(0,V.jsx)(`div`,{...S,className:`grid grid-cols-2 lg:grid-cols-3 gap-3`,children:i.map((t,n)=>(0,V.jsx)(GD,{workflow:t,onSelect:e=>h(t.id,e),navProps:x(n),isActive:t.id===e},t.id))})]}),(0,V.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end justify-center p-4 pointer-events-none`,"aria-hidden":!e,children:[e&&(0,V.jsx)(`div`,{className:`absolute inset-0 pointer-events-auto`,style:{background:`rgba(0,0,0,0.22)`,backdropFilter:`blur(2px)`},onClick:()=>m({type:`modal_closed`})}),(0,V.jsx)(`div`,{ref:g,tabIndex:-1,role:`dialog`,"aria-modal":`true`,"aria-label":`Workflow detail${e?`: ${a.find(t=>t.id===e)?.name??``}`:``}`,className:`relative w-full max-w-3xl ${e?`pointer-events-auto`:`pointer-events-none`}${v.state.borderFlashing?` modal-border-flashing`:``}`,style:{height:`85vh`,transform:e?`translateY(0) scale(1)`:`translateY(24px) scale(0.97)`,opacity:+!!e,transition:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?`opacity 150ms ease-out`:`transform 250ms ease-out, opacity 250ms ease-out`,backdropFilter:`blur(2px)`,WebkitBackdropFilter:`blur(2px)`},children:(0,V.jsxs)(W,{cut:20,borderColor:`rgba(244, 196, 48, 0.45)`,background:`rgba(15, 19, 31, 0.50)`,dropShadow:`drop-shadow(0 4px 24px rgba(244,196,48,0.15))`,className:`h-full flex flex-col`,children:[v.state.scanline!==null&&(0,V.jsx)(`div`,{className:`modal-scanline`,"aria-hidden":`true`,style:{"--crt-offset":`${v.state.scanline.crtOffset}px`,"--glitch-y":`${v.state.scanline.glitchY}%`,"--glitch-y2":`${v.state.scanline.glitchY2}%`,"--glitch-w":`${v.state.scanline.glitchW}px`,"--glitch-w2":`${v.state.scanline.glitchW2}px`,clipPath:co(20)}},v.state.scanline.key),(0,V.jsxs)(`div`,{className:`flex items-center justify-between px-6 py-4 border-b border-[var(--border)] shrink-0 console-blueprint-grid`,style:{background:`rgba(15, 19, 31, 0.55)`},children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-secondary)]`,children:`Workflow`}),p>=0&&(0,V.jsxs)(`span`,{className:`font-mono text-[10px] tracking-[0.20em] text-[var(--text-secondary)]`,children:[`[ `,p+1,` / `,a.length,` ]`]}),(0,V.jsx)(`span`,{className:`font-mono text-[9px] tracking-[0.15em] text-[var(--text-secondary)] transition-opacity duration-600`,style:{opacity:r?.5:0},"aria-hidden":`true`,children:`[ A / D ] NAV`})]}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>m({type:`modal_closed`}),className:`text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors text-xl leading-none`,"aria-label":`Close`,children:`×`})]}),(0,V.jsxs)(`div`,{ref:_,className:`flex-1 overflow-auto overscroll-contain px-6 py-5 ${v.state.contentAnimClass}`,style:{"--text-muted":`var(--text-secondary)`},children:[(0,V.jsx)(`div`,{"aria-live":`polite`,"aria-atomic":`true`,className:`sr-only`,children:a.find(t=>t.id===e)?.name??``}),e&&(0,V.jsx)(ED,{viewModel:y})]})]})})]})]})}function WD({label:e,count:t,isActive:n,disabled:r,onClick:i}){return(0,V.jsxs)(`button`,{type:`button`,onClick:i,disabled:r,"aria-pressed":n,className:[`px-3 py-2 min-w-[44px] min-h-[44px] rounded-none text-xs font-medium transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2`,`disabled:opacity-50 disabled:cursor-not-allowed`,n?`border border-[var(--accent)] text-[var(--accent)] bg-transparent`:`text-[var(--text-muted)] hover:text-[var(--text-secondary)] hover:bg-[var(--bg-card)]`].join(` `),children:[e,` · `,t,n&&(0,V.jsx)(`span`,{className:`sr-only`,children:`(selected)`})]})}function GD({workflow:e,onSelect:t,navProps:n,isActive:r}){let i=e.tags.filter(e=>e!==`routines`).map(e=>CD[e]??e);return(0,V.jsx)(lo,{variant:`grid`,onClick:e=>t(e.currentTarget),"aria-label":[e.name,e.description,i.length>0?`Tag: ${i.join(`, `)}`:null,`Source: ${e.source.displayName}`].filter(Boolean).join(`. `),style:r?{borderColor:`var(--accent)`,boxShadow:`0 0 0 1px rgba(244,196,48,0.4), 0 0 16px rgba(244,196,48,0.12)`}:void 0,...n,children:(0,V.jsxs)(`div`,{className:`flex flex-col flex-1 p-4 gap-2 min-w-0`,children:[(0,V.jsx)(`p`,{className:`text-sm font-medium text-[var(--text-primary)] group-hover:text-[var(--accent)] transition-colors leading-snug line-clamp-2`,children:e.name}),(0,V.jsx)(`p`,{className:`text-xs text-[var(--text-secondary)] line-clamp-3 leading-relaxed flex-1`,children:e.description}),(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mt-auto pt-2 border-t border-[var(--border)]`,children:[(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:i.slice(0,1).map(e=>(0,V.jsx)(`span`,{className:`font-mono text-[9px] px-1.5 py-0.5 bg-[var(--bg-secondary)] text-[var(--text-muted)]`,children:e},e))}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[e.stepCount!=null&&e.stepCount>0&&(0,V.jsxs)(`span`,{className:`font-mono text-[9px] text-[var(--text-muted)]`,children:[e.stepCount,`s`]}),(0,V.jsxs)(`span`,{className:`font-mono text-[9px] text-[var(--text-muted)] max-w-[80px] truncate`,children:[`src: `,e.source.displayName]})]})]})]})})}function KD(){return(0,V.jsx)(`div`,{className:`space-y-6 motion-safe:animate-pulse`,children:[0,1].map(e=>(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(`div`,{className:`h-3 w-24 bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`flex-1 h-px bg-[var(--bg-tertiary)]`})]}),(0,V.jsx)(`div`,{className:`grid grid-cols-2 lg:grid-cols-3 gap-3`,children:[0,1,2,3,4,5].map(e=>(0,V.jsxs)(`div`,{className:`min-h-[160px] bg-[var(--bg-card)] border border-[var(--border)] flex flex-col`,children:[(0,V.jsx)(`div`,{className:`h-[3px] bg-[var(--bg-tertiary)]`}),(0,V.jsxs)(`div`,{className:`p-4 flex flex-col gap-2 flex-1`,children:[(0,V.jsx)(`div`,{className:`h-4 w-3/4 bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-full bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-5/6 bg-[var(--bg-tertiary)]`}),(0,V.jsxs)(`div`,{className:`mt-auto pt-2 border-t border-[var(--border)] flex justify-between`,children:[(0,V.jsx)(`div`,{className:`h-3 w-12 bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-16 bg-[var(--bg-tertiary)]`})]})]})]},e))})]},e))})}function qD({message:e,onRetry:t}){return(0,V.jsxs)(`div`,{className:`space-y-3 py-8 text-center`,children:[(0,V.jsx)(`p`,{className:`text-sm text-[var(--error)]`,children:e}),(0,V.jsx)(`button`,{type:`button`,onClick:t,className:`text-sm text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors`,children:`Try again`})]})}var JD=[{value:`recent`,label:`Recent first`,compareFn:(e,t)=>t.startedAtMs-e.startedAtMs},{value:`slowest`,label:`Slowest first`,compareFn:(e,t)=>t.durationMs-e.durationMs}],YD={success:{color:`var(--success)`,label:`OK`,isError:!1},error:{color:`var(--error)`,label:`Error`,isError:!0},unknown_tool:{color:`var(--warning)`,label:`Unknown`,isError:!0}};function XD(e,t){let n=JD.find(e=>e.value===t);return[...e].sort(n.compareFn)}function ZD(e){return e.reduce((e,t)=>Math.max(e,t.durationMs),0)}function QD(e){return e.filter(e=>YD[e.outcome].isError).length}function $D(e){return e.length===0?null:Math.round(e.reduce((e,t)=>e+t.durationMs,0)/e.length)}function eO(e){return e.length===0?null:e.reduce((e,t)=>Math.max(e,t.startedAtMs),0)}function tO(e,t){return t>0?Math.round(e/t*120):0}function nO(e){return`${e} recorded`}var rO=[{key:`tool`,label:`Tool`,minWidth:`180px`},{key:`duration`,label:`Duration`,width:`220px`},{key:`started`,label:`Started`,width:`100px`},{key:`outcome`,label:`Outcome`}];function iO({viewModel:e}){let{state:t}=e;if(t.kind===`loading`)return(0,V.jsx)(cO,{});if(t.kind===`devModeOff`)return(0,V.jsx)(`div`,{className:`flex items-center justify-center py-16`,children:(0,V.jsx)(`p`,{className:`text-sm text-[var(--text-muted)] text-center`,children:`nothing to see here`})});if(t.kind===`error`)return(0,V.jsxs)(`div`,{className:`space-y-3 py-8 text-center`,children:[(0,V.jsx)(`p`,{className:`text-sm text-[var(--error)]`,children:t.message}),(0,V.jsx)(`button`,{type:`button`,onClick:t.retry,className:`text-sm text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors`,children:`Try again`})]});let{sorted:n,maxDuration:r,errorCount:i,avgMs:a,lastCallMs:o,countLabel:s,sortOrder:c,onSortChange:l}=t;return(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(0,V.jsxs)(`p`,{className:`text-sm text-[var(--text-secondary)]`,children:[s,` | `,(0,V.jsxs)(`span`,{style:{color:i>0?`var(--error)`:`var(--text-muted)`},children:[i,` errors`]}),` | `,`avg `,a===null?`--`:`${a}ms`,` | `,`last call `,o===null?`no calls yet`:fo(o)]}),(0,V.jsx)(`div`,{role:`radiogroup`,"aria-label":`Sort order`,className:`flex items-center gap-1`,children:JD.map(e=>(0,V.jsx)(sO,{label:e.label,isActive:c===e.value,onClick:()=>l(e.value)},e.value))}),(0,V.jsxs)(`table`,{className:`w-full text-sm border-collapse`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsx)(`tr`,{className:`text-xs text-[var(--text-muted)] border-b border-[var(--border)]`,children:rO.map(e=>(0,V.jsx)(`th`,{scope:`col`,className:`text-left py-2 pr-4 font-medium`,style:{width:e.width,minWidth:e.minWidth},children:e.label},e.key))})}),(0,V.jsx)(`tbody`,{children:n.length===0?(0,V.jsx)(`tr`,{children:(0,V.jsx)(`td`,{colSpan:rO.length,className:`py-8 text-center text-sm text-[var(--text-muted)]`,children:`No tool calls recorded yet. Run a workflow to see timing data.`})}):n.map((e,t)=>(0,V.jsx)(aO,{obs:e,maxDuration:r},`${e.startedAtMs}-${e.toolName}-${t}`))})]})]})}function aO({obs:e,maxDuration:t}){let n=YD[e.outcome].isError,r=tO(e.durationMs,t);return(0,V.jsxs)(`tr`,{className:`border-b border-[var(--border)] hover:bg-[var(--bg-card)] transition-colors`,style:{borderLeft:n?`2px solid var(--error)`:`2px solid transparent`},children:[(0,V.jsx)(`td`,{className:`py-2 pr-4 font-mono text-[var(--text-primary)] overflow-hidden text-ellipsis`,title:e.toolName,style:{minWidth:`180px`,maxWidth:`240px`},children:(0,V.jsx)(`span`,{className:`block truncate`,children:e.toolName})}),(0,V.jsxs)(`td`,{className:`py-2 pr-4`,style:{width:`220px`},children:[(0,V.jsxs)(`span`,{className:`font-mono text-[var(--text-primary)]`,children:[e.durationMs,`ms`]}),(0,V.jsx)(`div`,{"aria-hidden":`true`,className:`h-1 rounded mt-1`,style:{backgroundColor:`var(--accent)`,width:`${r}px`,maxWidth:`120px`}})]}),(0,V.jsx)(`td`,{className:`py-2 pr-4 text-[var(--text-secondary)]`,style:{width:`100px`},children:fo(e.startedAtMs)}),(0,V.jsx)(`td`,{className:`py-2`,children:(0,V.jsx)(oO,{outcome:e.outcome})})]})}function oO({outcome:e}){let t=YD[e];return(0,V.jsx)(`span`,{className:`inline-block px-2 py-0.5 rounded text-xs font-medium`,style:{color:t.color,backgroundColor:`color-mix(in srgb, ${t.color} 12%, transparent)`},children:t.label})}function sO({label:e,isActive:t,onClick:n}){return(0,V.jsx)(`button`,{type:`button`,role:`radio`,onClick:n,"aria-checked":t,className:[`px-3 py-2 rounded text-xs font-medium min-w-[44px] transition-colors`,t?`text-[var(--text-primary)]`:`text-[var(--text-muted)] hover:text-[var(--text-secondary)]`].join(` `),children:e})}function cO(){return(0,V.jsxs)(`div`,{className:`space-y-3 animate-pulse`,"aria-busy":`true`,"aria-label":`Loading performance data`,children:[(0,V.jsx)(`div`,{className:`h-4 w-64 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsxs)(`div`,{className:`flex gap-1`,children:[(0,V.jsx)(`div`,{className:`h-8 w-24 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-8 w-24 rounded bg-[var(--bg-tertiary)]`})]}),(0,V.jsxs)(`div`,{className:`flex gap-4 border-b border-[var(--border)] pb-2`,children:[(0,V.jsx)(`div`,{className:`h-3 w-20 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-16 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-14 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-14 rounded bg-[var(--bg-tertiary)]`})]}),Array.from({length:8}).map((e,t)=>(0,V.jsxs)(`div`,{className:`flex gap-4 py-2`,children:[(0,V.jsx)(`div`,{className:`h-4 rounded bg-[var(--bg-tertiary)]`,style:{minWidth:`180px`,width:`180px`}}),(0,V.jsxs)(`div`,{className:`space-y-1`,style:{width:`220px`},children:[(0,V.jsx)(`div`,{className:`h-4 w-16 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-1 w-20 rounded bg-[var(--bg-tertiary)]`})]}),(0,V.jsx)(`div`,{className:`h-4 w-16 rounded bg-[var(--bg-tertiary)]`,style:{width:`100px`}}),(0,V.jsx)(`div`,{className:`h-5 w-12 rounded bg-[var(--bg-tertiary)]`})]},t))]})}var lO=`workrail:auto:mru-workflow`;function uO(){try{return localStorage.getItem(lO)}catch{return null}}function dO(e){try{localStorage.setItem(lO,e)}catch{}}function fO(){let e=Xy(),t=$y(),n=e.data?.workflows??[],r=t.data?.triggers??[],[i,a]=(0,B.useState)(()=>uO()??``),[o,s]=(0,B.useState)(``),[c,l]=(0,B.useState)(``),[u,d]=(0,B.useState)(!1),[f,p]=(0,B.useState)(null),[m,h]=(0,B.useState)(!1),[g,_]=(0,B.useState)(!0),v=(0,B.useRef)(null);(0,B.useEffect)(()=>{!i&&n.length>0&&a(n[0]?.id??``)},[i,n]);let y=e=>{a(e),dO(e)},b=async()=>{if(!(!i||!c.trim()||!o.trim())){d(!0),p(null),h(!1);try{await eb({workflowId:i,goal:c.trim(),workspacePath:o.trim()}),h(!0),l(``),setTimeout(()=>v.current?.focus(),100)}catch(e){p(e instanceof Error?e.message:`Dispatch failed`)}finally{d(!1)}}},x=!!i&&!!c.trim()&&!!o.trim()&&!u;return(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,V.jsx)(Ko,{color:`var(--accent)`,children:`Dispatch`})}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(Ko,{children:`Workflow`}),e.isLoading?(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] text-xs`,children:`Loading workflows...`}):n.length===0?(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] text-xs`,children:`No workflows available`}):(0,V.jsx)(`select`,{value:i,onChange:e=>y(e.target.value),className:`w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-md px-3 py-2 text-sm text-[var(--text-primary)] focus:outline-none focus:border-[var(--accent)] cursor-pointer`,children:n.map(e=>(0,V.jsx)(`option`,{value:e.id,children:e.name??e.id},e.id))})]}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(Ko,{children:`Workspace path`}),(0,V.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`/path/to/repo`,className:`w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-md px-3 py-2 text-sm font-mono text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none focus:border-[var(--accent)]`})]}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(Ko,{children:`Goal`}),(0,V.jsx)(`textarea`,{ref:v,value:c,onChange:e=>l(e.target.value),placeholder:`// describe the task...`,rows:4,className:`w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-md px-3 py-2 text-sm font-mono text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none focus:border-[var(--accent)] resize-y`,onKeyDown:e=>{(e.ctrlKey||e.metaKey)&&e.key===`Enter`&&x&&(e.preventDefault(),b())}})]}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,V.jsx)(`button`,{onClick:()=>void b(),disabled:!x,className:`self-start disabled:opacity-40 disabled:cursor-not-allowed cursor-pointer`,children:(0,V.jsx)(no,{label:u?`RUNNING...`:`RUN`,color:x?`var(--accent)`:void 0,pulse:u})}),m&&(0,V.jsx)(`div`,{className:`text-[var(--success)] font-mono text-[10px] uppercase tracking-[0.20em]`,children:`Dispatched -- check Queue pane`}),f&&(0,V.jsx)(`div`,{className:`text-[var(--error)] text-xs font-mono`,children:f})]}),(0,V.jsxs)(`div`,{className:`border-t border-[var(--border)] pt-4`,children:[(0,V.jsxs)(`button`,{onClick:()=>_(!g),className:`flex items-center gap-2 mb-2 cursor-pointer group`,children:[(0,V.jsx)(`span`,{className:`text-[var(--text-muted)] text-xs transition-transform duration-150`,style:{transform:g?`rotate(-90deg)`:`rotate(0deg)`},children:`▼`}),(0,V.jsx)(no,{label:`TRIGGERS`,color:`var(--text-secondary)`}),r.length>0&&(0,V.jsxs)(`span`,{className:`text-xs text-[var(--text-muted)]`,children:[`(`,r.length,`)`]})]}),!g&&(0,V.jsx)(`div`,{className:`space-y-2`,children:t.isLoading?(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] text-xs pl-4`,children:`Loading triggers...`}):r.length===0?(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] text-xs pl-4`,children:`No triggers configured. Set WORKRAIL_TRIGGERS_ENABLED=true and create triggers.yml.`}):r.map(e=>(0,V.jsxs)(`div`,{className:`pl-4 border-l-2 border-[var(--border)] text-xs space-y-0.5`,children:[(0,V.jsx)(`div`,{className:`font-mono text-[var(--text-primary)] text-[11px]`,children:e.id}),(0,V.jsx)(`div`,{className:`text-[var(--text-muted)]`,children:e.workflowId}),(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] truncate`,children:e.goal})]},e.id))})]})]})}function pO(e){let t=0,n=0,r=0;for(let i of e)i.status===`in_progress`?t++:i.status===`blocked`?n++:(i.status===`complete`||i.status===`complete_with_gaps`)&&r++;return{running:t,blocked:n,completed:r}}function mO(){let{data:e,isLoading:t,isError:n}=Gy(),r=(e?.sessions??[]).filter(e=>e.isAutonomous),{running:i,blocked:a,completed:o}=pO(r);return t?(0,V.jsx)(`div`,{className:`flex items-center justify-center py-20`,children:(0,V.jsx)(`div`,{className:`text-[var(--text-secondary)] text-sm`,children:`Loading sessions...`})}):n?(0,V.jsx)(`div`,{className:`text-[var(--error)] bg-[var(--bg-card)] rounded-lg p-4 text-sm`,children:`Failed to load sessions`}):(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,V.jsx)(Ko,{color:`var(--accent)`,children:`Queue`})}),(0,V.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,V.jsx)(hO,{count:i,label:`RUNNING`,color:`var(--accent)`,pulse:!0}),(0,V.jsx)(hO,{count:a,label:`BLOCKED`,color:`var(--blocked)`}),(0,V.jsx)(hO,{count:o,label:`COMPLETED`,color:`var(--success)`})]}),r.length===0?(0,V.jsxs)(`div`,{className:`text-center py-16`,children:[(0,V.jsx)(`p`,{className:`text-[var(--text-secondary)] text-sm`,children:`No autonomous sessions yet`}),(0,V.jsx)(`p`,{className:`text-[var(--text-muted)] text-xs mt-1`,children:`Dispatch a workflow from the left pane to start.`})]}):(0,V.jsx)(`div`,{className:`space-y-2`,children:r.map(e=>(0,V.jsx)(gO,{session:e},e.sessionId))})]})}function hO({count:e,label:t,color:n,pulse:r}){return(0,V.jsx)(no,{label:`${e} ${t}`,color:e>0?n:`var(--text-muted)`,pulse:r&&e>0})}function gO({session:e}){let[t,n]=(0,B.useState)(!1),r=wi(),i=e.sessionTitle??e.workflowName??e.workflowId??`Unnamed session`,a=fo(e.lastModifiedMs);return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-card)] border border-[var(--border)] rounded-lg overflow-hidden`,children:[(0,V.jsxs)(`button`,{onClick:()=>n(!t),className:`w-full px-4 py-3 flex items-center gap-3 text-left cursor-pointer hover:bg-[var(--bg-secondary)] transition-colors group`,children:[(0,V.jsx)(`span`,{className:`text-[var(--text-muted)] text-xs transition-transform duration-150 shrink-0`,style:{transform:t?`rotate(90deg)`:`rotate(0deg)`},children:`▶`}),(0,V.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,V.jsx)(`div`,{className:`text-sm font-medium text-[var(--text-primary)] truncate group-hover:text-[var(--accent)] transition-colors`,children:i}),(0,V.jsx)(`div`,{className:`font-mono text-[10px] text-[var(--text-muted)] opacity-60 truncate`,children:e.sessionId})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,V.jsx)(`span`,{className:`text-[10px] text-[var(--text-muted)] tabular-nums`,children:a}),e.isLive&&(0,V.jsx)(no,{label:`LIVE`,pulse:!0,color:`var(--accent)`,"aria-label":`Actively running`}),(0,V.jsx)(io,{status:e.status})]})]}),t&&(0,V.jsxs)(`div`,{className:`px-4 pb-4 border-t border-[var(--border)] pt-3 space-y-3`,children:[e.recapSnippet?(0,V.jsx)(`div`,{className:`text-xs text-[var(--text-secondary)] font-mono whitespace-pre-wrap leading-relaxed`,children:e.recapSnippet}):(0,V.jsx)(`div`,{className:`text-xs text-[var(--text-muted)]`,children:`No recap available yet.`}),(0,V.jsx)(`button`,{onClick:()=>void r({to:`/session/$sessionId`,params:{sessionId:e.sessionId}}),className:`cursor-pointer`,children:(0,V.jsx)(no,{label:`OPEN IN DAG`,color:`var(--accent)`})})]})]})}function _O(){return(0,V.jsxs)(`div`,{className:`flex flex-col md:flex-row gap-6`,children:[(0,V.jsx)(`div`,{className:`w-full md:w-2/5 shrink-0`,children:(0,V.jsx)(fO,{})}),(0,V.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,V.jsx)(mO,{})})]})}function vO(){let e=Gy(),t=Yy();tb();let n=e.data?.sessions;return{sessions:n,worktreeRepos:t.data?.repos??[],isLoading:e.isLoading,error:e.error instanceof Error?e.error:null,refetch:e.refetch,worktreesFetching:t.isFetching,liveCount:n?.filter(e=>e.status===`in_progress`).length??0,blockedCount:n?.filter(e=>e.status===`blocked`).length??0}}var yO={scope:`active`,focusedIndex:-1,archive:null};function bO(e){throw Error(`Unhandled WorkspaceEvent type: ${String(e.type)}`)}function xO(e,t){switch(t.type){case`scope_changed`:return{...e,scope:t.scope,focusedIndex:-1};case`focus_moved`:return{...e,focusedIndex:t.index};case`archive_opened`:return{...e,archive:{repoName:t.repoName}};case`archive_closed`:return{...e,archive:null};default:return bO(t)}}var SO=720*60*60*1e3,CO={in_progress:0,dormant:0,blocked:1,complete_with_gaps:2,complete:3};function wO(e){if(e.length!==0)return[...e].sort((e,t)=>{let n=CO[e.status]-CO[t.status];return n===0?t.lastModifiedMs-e.lastModifiedMs:n})[0]}function TO(e,t,n){let r=e.primarySession?.status;if(r===`in_progress`||r===`blocked`)return`visible`;let i=(e.worktree?.changedCount??0)>0,a=(e.worktree?.aheadCount??0)>0;return i||a?`visible`:r===`dormant`?t===`all`?`visible`:`hidden`:n-e.activityMs<SO||t===`all`?`visible`:`hidden`}function EO(e){switch(e.primarySession?.status){case`in_progress`:return 0;case`blocked`:return 1;case`dormant`:return 2;default:return(e.worktree?.changedCount??0)>0||(e.worktree?.aheadCount??0)>0?3:4}}function DO(e,t,n){return[...e].filter(e=>TO(e,t,n)===`visible`).sort((e,t)=>{let n=EO(e)-EO(t);return n===0?t.activityMs-e.activityMs:n})}function OO(e,t){let n=new Map;for(let e of t)for(let t of e.worktrees)t.branch!==null&&n.set(`${t.branch}\0${e.repoRoot}`,{wt:t,repoName:e.repoName,repoRoot:e.repoRoot});let r=new Map;for(let[e,t]of n){let[n]=e.split(`\0`),i=r.get(n)??[];i.push(t),r.set(n,i)}let i=new Map;for(let t of e){if(t.gitBranch===null)continue;let e=r.get(t.gitBranch)??[];if(e.length===0){if(!t.repoRoot)continue;let e=`${t.gitBranch}\0${t.repoRoot}`,r=i.get(e);if(r?r.push(t):i.set(e,[t]),!n.has(e)){let r=t.repoRoot.split(`/`).at(-1)??t.repoRoot;n.set(e,{wt:void 0,repoName:r,repoRoot:t.repoRoot})}continue}let a=e;if(t.repoRoot!==null){let n=e.filter(e=>e.repoRoot===t.repoRoot);n.length>0&&(a=n)}for(let e of a){let n=`${t.gitBranch}\0${e.repoRoot}`,r=i.get(n);r?r.push(t):i.set(n,[t])}}let a=[],o=new Set;for(let[e,t]of i){let[r,i]=e.split(`\0`),s=n.get(e),c=wO(t),l=Math.max(c?.lastModifiedMs??0,s?.wt?.headTimestampMs??0),u=s?.repoName??i.split(`/`).at(-1)??i;a.push({branch:r,repoRoot:i,repoName:u,worktree:s?.wt,primarySession:c,allSessions:t,activityMs:l}),o.add(e)}for(let[e,{wt:t,repoName:r,repoRoot:i}]of n){if(o.has(e))continue;let[n]=e.split(`\0`);a.push({branch:n,repoRoot:i,repoName:r,worktree:t,primarySession:void 0,allSessions:[],activityMs:t?.headTimestampMs??0})}return a}function kO(e,t,n,r){let i=OO(e,t),a=new Map;for(let e of i)a.has(e.repoRoot)||a.set(e.repoRoot,e.repoName);let o=new Map;for(let e of i){let t=o.get(e.repoRoot)??[];t.push(e),o.set(e.repoRoot,t)}let s=[...o.entries()].map(([e,t])=>({repoRoot:e,repoName:t[0].repoName,sortedItems:DO(t,n,r)})).filter(e=>e.sortedItems.length>0).sort((e,t)=>{let n=+!e.sortedItems.some(e=>e.primarySession?.status===`in_progress`||e.primarySession?.status===`blocked`),r=+!t.sortedItems.some(e=>e.primarySession?.status===`in_progress`||e.primarySession?.status===`blocked`);return n===r?e.repoName.localeCompare(t.repoName):n-r}),c=s.flatMap(e=>e.sortedItems),l=n===`active`?i.filter(e=>e.primarySession?.status===`dormant`&&(e.worktree?.changedCount??0)===0&&(e.worktree?.aheadCount??0)===0).length:0;return{repoGroups:s,orderedItems:c,archiveRepos:[...a.entries()].map(([e,t])=>[e,t]),dormantHiddenCount:l}}function AO({items:e,focusedIndex:t,scope:n,archive:r,dispatch:i,onSelectSession:a,onRefetch:o,disabled:s}){let c=(0,B.useRef)(e);c.current=e;let l=(0,B.useRef)(t);l.current=t;let u=(0,B.useRef)(n);u.current=n;let d=(0,B.useRef)(r);d.current=r;let f=(0,B.useRef)(s);f.current=s;let p=(0,B.useRef)(i);p.current=i;let m=(0,B.useRef)(a);m.current=a;let h=(0,B.useRef)(o);h.current=o,(0,B.useEffect)(()=>{function e(e){if(f.current||e.metaKey||e.ctrlKey||e.altKey)return;let t=document.activeElement;if(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)return;let n=c.current,r=l.current;switch(e.key){case`j`:case`ArrowDown`:e.preventDefault(),p.current({type:`focus_moved`,index:Math.min(r+1,n.length-1)});break;case`k`:case`ArrowUp`:e.preventDefault(),p.current({type:`focus_moved`,index:Math.max(r-1,0)});break;case`Enter`:case` `:if(e.preventDefault(),r>=0&&r<n.length){let e=n[r]?.primarySession?.sessionId;e&&m.current(e)}break;case`Escape`:d.current!==null&&p.current({type:`archive_closed`});break;case`/`:e.preventDefault(),p.current({type:`archive_opened`,repoName:void 0});break;case`r`:e.preventDefault(),h.current();break;case`a`:e.preventDefault(),p.current({type:`scope_changed`,scope:u.current===`active`?`all`:`active`});break}}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[])}function jO(e=!1){let t=wi(),n=vO(),[r,i]=(0,B.useReducer)(xO,yO),a=(0,B.useRef)(0),o=(0,B.useCallback)(e=>{a.current=window.scrollY,t({to:`/session/$sessionId`,params:{sessionId:e}})},[t]),s=i,c=(0,B.useMemo)(()=>n.sessions?kO(n.sessions,n.worktreeRepos,r.scope,Date.now()):null,[n.sessions,n.worktreeRepos,r.scope]);AO({items:c?.orderedItems??[],focusedIndex:r.focusedIndex,scope:r.scope,archive:r.archive,dispatch:s,onSelectSession:o,onRefetch:n.refetch,disabled:e});let{isLoading:l,error:u,worktreesFetching:d,sessions:f,liveCount:p,blockedCount:m}=n;return{state:(0,B.useMemo)(()=>l?{kind:`loading`}:u?{kind:`error`,message:u.message}:c?{kind:`ready`,scope:r.scope,focusedIndex:r.focusedIndex,archive:r.archive,repoGroups:c.repoGroups,orderedItems:c.orderedItems,archiveRepos:c.archiveRepos,dormantHiddenCount:c.dormantHiddenCount,worktreesFetching:d,hasAnySessions:(f?.length??0)>0,liveCount:p,blockedCount:m}:{kind:`loading`},[l,u,d,f,c,r,p,m]),dispatch:s,scrollYRef:a,onSelectSession:o}}function MO(){let e=Gy();return{sessions:e.data?.sessions,isLoading:e.isLoading,error:e.error instanceof Error?e.error:null}}function NO(e=``){return{rawSearch:e,sort:`recent`,groupBy:`none`,statusFilter:`all`,page:0,viewMode:`flat`}}function PO(e){throw Error(`Unhandled SessionListEvent type: ${String(e.type)}`)}function FO(e,t){switch(t.type){case`search_changed`:return{...e,rawSearch:t.value,page:0};case`sort_changed`:return{...e,sort:t.sort,page:0};case`group_changed`:return{...e,groupBy:t.groupBy,page:0};case`status_changed`:return{...e,statusFilter:t.statusFilter,page:0};case`page_changed`:return{...e,page:t.page};case`view_mode_changed`:return t.viewMode===`tree`?{...e,viewMode:`tree`,rawSearch:``,statusFilter:`all`,page:0}:{...e,viewMode:`flat`,page:0};default:return PO(t)}}var IO={in_progress:0,blocked:1,dormant:2,complete_with_gaps:3,complete:4},LO=[{value:`recent`,label:`Recent`,compareFn:(e,t)=>t.lastModifiedMs-e.lastModifiedMs},{value:`status`,label:`Status`,compareFn:(e,t)=>IO[e.status]-IO[t.status]||t.lastModifiedMs-e.lastModifiedMs},{value:`workflow`,label:`Workflow`,compareFn:(e,t)=>(e.workflowName??e.workflowId??``).localeCompare(t.workflowName??t.workflowId??``)||t.lastModifiedMs-e.lastModifiedMs},{value:`nodes`,label:`Node count`,compareFn:(e,t)=>t.nodeCount-e.nodeCount||t.lastModifiedMs-e.lastModifiedMs}],RO=[{value:`none`,label:`No grouping`,keyFn:null},{value:`workflow`,label:`Workflow`,keyFn:e=>e.workflowName??e.workflowId??`Unknown workflow`},{value:`status`,label:`Status`,keyFn:e=>e.status,groupCompareFn:(e,t)=>(IO[e]??99)-(IO[t]??99)},{value:`branch`,label:`Branch`,keyFn:e=>e.gitBranch??`No branch`}],zO=[{value:`all`,label:`All`},{value:`in_progress`,label:`In Progress`},{value:`dormant`,label:`Dormant`},{value:`complete`,label:`Complete`},{value:`complete_with_gaps`,label:`Gaps`},{value:`blocked`,label:`Blocked`}];function BO(e,t,n){let r=e;if(n!==`all`&&(r=r.filter(e=>e.status===n)),t.trim()){let e=t.toLowerCase();r=r.filter(t=>(t.sessionTitle??``).toLowerCase().includes(e)||(t.workflowName??``).toLowerCase().includes(e)||(t.workflowId??``).toLowerCase().includes(e)||t.sessionId.toLowerCase().includes(e)||(t.gitBranch??``).toLowerCase().includes(e))}return r}function VO(e,t){let n=LO.find(e=>e.value===t)??LO[0];return[...e].sort(n.compareFn)}function HO(e,t){let n=RO.find(e=>e.value===t)??RO[0];if(!n.keyFn)return[{label:``,sessions:e}];let r=new Map;for(let t of e){let e=n.keyFn(t),i=r.get(e)??[];i.push(t),r.set(e,i)}let i=n.groupCompareFn??((e,t)=>e.localeCompare(t));return Array.from(r.entries()).sort(([e],[t])=>i(e,t)).map(([e,t])=>({label:e,sessions:t}))}function UO(e){let t={all:e.length};for(let n of e)t[n.status]=(t[n.status]??0)+1;return t}function WO(e){let t=new Set(e.map(e=>e.sessionId)),n=new Map,r=new Set,i=new Set;for(let a of e){let e=a.parentSessionId;if(!e||e===a.sessionId)continue;if(!t.has(e)){r.add(a.sessionId);continue}i.add(a.sessionId);let o=n.get(e)??[];o.push(a),n.set(e,o)}let a=[];for(let t of e)i.has(t.sessionId)||a.push({session:t,children:n.get(t.sessionId)??[]});return{roots:a,orphanChildIds:r}}function GO(e,t){let[n,r]=(0,B.useState)(e),i=(0,B.useRef)(null);return(0,B.useEffect)(()=>(i.current!==null&&clearTimeout(i.current),i.current=setTimeout(()=>r(e),t),()=>{i.current!==null&&clearTimeout(i.current)}),[e,t]),n}function KO({onSelectSession:e,initialSearch:t=``}){let n=MO(),[r,i]=(0,B.useReducer)(FO,void 0,()=>NO(t)),a=GO(r.rawSearch,200),o=(0,B.useRef)([]),s=(0,B.useCallback)(t=>{let n=o.current[t];n&&e(n.sessionId)},[e]),{sessions:c,isLoading:l,error:u}=n,d=(0,B.useMemo)(()=>c?UO(c):{},[c]),f=(0,B.useMemo)(()=>{if(!c)return null;let e=BO(c,a,r.statusFilter);return{groups:HO(VO(e,r.sort),r.groupBy),total:c.length,filtered:e.length}},[c,a,r.statusFilter,r.sort,r.groupBy]),p=(0,B.useMemo)(()=>WO(c||[]),[c]),m=r.groupBy!==`none`,h=f?Math.ceil(f.filtered/25):0,g=r.page*25,_=g+25,v=(0,B.useMemo)(()=>!f||m?[]:f.groups[0]?.sessions.slice(g,_)??[],[f,m,g,_]);o.current=v;let{getItemProps:y,containerProps:b}=ID({count:v.length,cols:1,onActivate:s});return{state:(0,B.useMemo)(()=>l?{kind:`loading`}:u?{kind:`error`,message:u.message}:f?{kind:`ready`,rawSearch:r.rawSearch,sort:r.sort,groupBy:r.groupBy,statusFilter:r.statusFilter,page:r.page,totalPages:h,isGrouped:m,processed:f,statusCounts:d,flatPageSessions:v,getSessionNavProps:y,sessionContainerProps:b,sortAxes:LO,groupAxes:RO,statusFilterOptions:zO,viewMode:r.viewMode,sessionTree:p}:{kind:`loading`},[l,u,f,r,h,m,d,v,y,b,p]),dispatch:i,onSelectSession:e}}var qO={selectedWorkflowId:null,selectedTag:null,selectedSource:null,hintVisible:!1};function JO(e){throw Error(`Unhandled WorkflowsEvent type: ${String(e.type)}`)}function YO(e,t){switch(t.type){case`workflow_selected`:return{...e,selectedWorkflowId:t.id,hintVisible:t.id!==null};case`tag_changed`:return{...e,selectedTag:t.tag,selectedWorkflowId:null,hintVisible:!1};case`source_changed`:return{...e,selectedSource:t.source,selectedWorkflowId:null,hintVisible:!1};case`modal_closed`:return{...e,selectedWorkflowId:null,hintVisible:!1};case`hint_dismissed`:return{...e,hintVisible:!1};default:return JO(t)}}function XO(e){let t=new Set;for(let n of e)for(let e of n.tags)e!==`routines`&&t.add(e);let n=SD.map(e=>e.id).filter(e=>t.has(e)),r=[...t].filter(e=>!SD.some(t=>t.id===e)).sort();return[...n,...r]}function ZO(e){let t=new Map;for(let n of e)t.has(n.source.kind)||t.set(n.source.kind,{id:n.source.kind,displayName:n.source.displayName});return[...t.values()]}function QO(e,t,n){let r=new Set(SD.map(e=>e.id)),i=e;return t!==null&&(i=t===`__other__`?i.filter(e=>!e.tags.some(e=>e!==`routines`&&r.has(e))):i.filter(e=>e.tags.includes(t))),n!==null&&(i=i.filter(e=>e.source.displayName===n)),i}function $O(e,t){if(t!==null)return e;let n=new Set(SD.map(e=>e.id)),r=new Map,i=[];for(let t of e){let e=t.tags.find(e=>e!==`routines`&&n.has(e));if(e){let n=r.get(e)??[];n.push(t),r.set(e,n)}else i.push(t)}let a=[];for(let{id:e}of SD){let t=r.get(e);t&&a.push(...t)}return a.push(...i),a}function ek({initialTag:e,onSelectTag:t}){let n=RD(),[r,i]=(0,B.useReducer)(YO,{...qO,selectedTag:e});(0,B.useEffect)(()=>{e!==r.selectedTag&&i({type:`tag_changed`,tag:e})},[e]);let a=(0,B.useRef)(null),o=(0,B.useCallback)((e,t)=>{a.current=t,t.blur(),i({type:`workflow_selected`,id:e})},[]);(0,B.useEffect)(()=>{if(!r.selectedWorkflowId&&a.current){let e=a.current;a.current=null,e.focus()}},[r.selectedWorkflowId]),(0,B.useEffect)(()=>{if(!r.selectedWorkflowId)return;let e=window.scrollY;return document.body.style.overflow=`hidden`,document.body.style.position=`fixed`,document.body.style.top=`-${e}px`,document.body.style.width=`100%`,()=>{document.body.style.overflow=``,document.body.style.position=``,document.body.style.top=``,document.body.style.width=``,window.scrollTo(0,e)}},[r.selectedWorkflowId]),(0,B.useEffect)(()=>{if(!r.selectedWorkflowId)return;let e=e=>{e.key===`Escape`&&i({type:`modal_closed`})};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[r.selectedWorkflowId]);let{isLoading:s,error:c,workflows:l}=n,u=(0,B.useMemo)(()=>{if(s)return{kind:`loading`};if(c)return{kind:`error`,message:c.message,onRetry:n.refetch};if(!l)return{kind:`loading`};let e=XO(l),t=ZO(l),i=QO(l,r.selectedTag,r.selectedSource),a=$O(i,r.selectedTag),o=QO(l,null,r.selectedSource),u=QO(l,r.selectedTag,null);return{kind:`ready`,selectedWorkflowId:r.selectedWorkflowId,selectedTag:r.selectedTag,selectedSource:r.selectedSource,hintVisible:r.hintVisible,availableTags:e,availableSources:t,filteredWorkflows:i,flatWorkflows:a,sourceFilteredWorkflows:o,tagFilteredWorkflows:u}},[s,c,l,r,n.refetch]),d=u.kind===`ready`?u.flatWorkflows.length:0;return(0,B.useEffect)(()=>{if(!r.selectedWorkflowId||d<=1)return;let e=setTimeout(()=>i({type:`hint_dismissed`}),3e3);return()=>clearTimeout(e)},[r.selectedWorkflowId,d]),{state:u,dispatch:(0,B.useCallback)(e=>{e.type===`tag_changed`&&t(e.tag),i(e)},[t]),triggerRef:a,onCardSelect:o}}function tk(){let e=Zy();switch(e.state){case`loading`:return{kind:`loading`};case`devModeOff`:return{kind:`devModeOff`};case`error`:return{kind:`error`,message:e.message,retry:e.retry};case`data`:return{kind:`ready`,observations:e.data.observations}}}function nk(){let e=tk(),[t,n]=(0,B.useState)(`recent`);return{state:(0,B.useMemo)(()=>{if(e.kind===`loading`)return{kind:`loading`};if(e.kind===`devModeOff`)return{kind:`devModeOff`};if(e.kind===`error`)return{kind:`error`,message:e.message,retry:e.retry};let{observations:r}=e,i=XD(r,t);return{kind:`ready`,sorted:i,maxDuration:ZD(i),errorCount:QD(r),avgMs:$D(r),lastCallMs:eO(r),countLabel:nO(r.length),sortOrder:t,onSortChange:n}},[e,t])}}function rk(e){let t=Ky(e);return{data:t.data,isLoading:t.isLoading,error:t.error instanceof Error?t.error:null}}function ik(e){let t=rk(e),[n,r]=(0,B.useState)(null),i=(0,B.useCallback)((e,t)=>{r(n=>n?.runId===e&&n?.nodeId===t?null:{runId:e,nodeId:t})},[]),a=(0,B.useCallback)(()=>{r(null)},[]),{isLoading:o,error:s,data:c}=t,l=(0,B.useMemo)(()=>!c||!n?null:c.runs.find(e=>e.runId===n.runId)??null,[c,n]);return{state:(0,B.useMemo)(()=>o?{kind:`loading`}:s?{kind:`error`,message:s.message}:c?{kind:`ready`,sessionId:e,data:c,selectedNode:n,selectedRun:l}:{kind:`loading`},[o,s,c,e,n,l]),onSelectNode:i,onCloseNode:a}}var ak=[{id:`workspace`,path:`/`},{id:`workflows`,path:`/workflows`},{id:`auto`,path:`/auto`},{id:`perf`,path:`/perf`}];function ok(){let e=wi(),t=ta(),{location:n}=sa(),r=t({to:`/session/$sessionId`}),i=t({to:`/workflows`}),a=t({to:`/workflows/$workflowId`}),o=t({to:`/perf`}),s=t({to:`/auto`}),c=i!==!1||a!==!1?`workflows`:o===!1?s===!1?`workspace`:`auto`:`perf`,l=r!==!1,u=a!==!1,d=l?r.sessionId:null,f=u?a.workflowId:null,p=new URLSearchParams(n.search).get(`tag`),m=jO(l),h=KO({onSelectSession:m.onSelectSession}),g=m.state.kind===`ready`?m.state.liveCount:0,_=m.state.kind===`ready`?m.state.blockedCount:0,v=(0,B.useCallback)(()=>{e({to:`/`})},[e]),y=(0,B.useCallback)(t=>{e({to:`/workflows`,search:{tag:t??void 0}})},[e]),b=(0,B.useCallback)(()=>{e({to:`/workflows`,search:{tag:p??void 0}})},[e,p]),x=(0,B.useCallback)(t=>{e({to:`/workflows/$workflowId`,params:{workflowId:t},search:{tag:p??void 0}})},[e,p]),S=ek({initialTag:p,onSelectTag:y}),C=BD({workflowId:f,activeTag:p,onBack:b,onNavigateToWorkflow:x}),w=ik(d??``),T=nk(),[E,D]=(0,B.useState)(null),O=(0,B.useCallback)((e,t)=>{t(),D(e),setTimeout(()=>D(null),200)},[]),k=(0,B.useRef)(null);return(0,B.useEffect)(()=>{let t=k.current;if(!t)return;function n(t){if(t.key===`ArrowLeft`||t.key===`ArrowRight`){t.preventDefault();let n=ak.findIndex(e=>e.id===c),r=ak[t.key===`ArrowRight`?(n+1)%ak.length:(n-1+ak.length)%ak.length];e({to:r.path,...r.path===`/workflows`?{search:{tag:void 0}}:{}})}}return t.addEventListener(`keydown`,n),()=>t.removeEventListener(`keydown`,n)},[c,e]),(0,V.jsxs)(`div`,{className:`min-h-screen`,style:{"--app-header-height":`56px`},children:[(0,V.jsxs)(`header`,{style:{background:`rgba(23, 27, 40, 0.92)`,backdropFilter:`blur(24px)`,WebkitBackdropFilter:`blur(24px)`,borderBottom:`1px solid rgba(244, 196, 48, 0.25)`,boxShadow:`0 4px 24px rgba(0,0,0,0.4)`},className:`fixed top-0 w-full z-50 flex items-center h-14 px-4 gap-6`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3 shrink-0`,children:[(0,V.jsx)(W,{cut:8,borderColor:`rgba(244, 196, 48, 0.5)`,background:`rgba(27, 31, 44, 0.8)`,className:`relative w-10 h-10`,children:(0,V.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:(0,V.jsx)(`span`,{className:`font-mono text-[11px] font-bold text-[var(--accent)] tracking-widest`,children:`WR`})})}),(0,V.jsxs)(`div`,{className:`hidden sm:flex flex-col leading-none`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[11px] font-bold text-[var(--text-primary)] tracking-[0.25em] uppercase`,children:`WR_CONSOLE`}),(0,V.jsxs)(`span`,{className:`font-mono text-[9px] text-[var(--text-muted)] tracking-[0.15em]`,children:[`// V`,`3.81.0`]})]})]}),l&&d?(0,V.jsx)(`nav`,{className:`flex items-center flex-1 justify-center`,children:(0,V.jsx)(TD,{segments:[{label:`Workspace`,onClick:v},{label:d?.slice(-12)??``}]})}):(0,V.jsxs)(`div`,{role:`tablist`,"aria-label":`Console sections`,ref:k,className:`flex items-center gap-1 flex-1 justify-center`,children:[(0,V.jsxs)(`button`,{role:`tab`,id:`tab-workspace`,"aria-selected":c===`workspace`,"aria-controls":`panel-workspace`,tabIndex:c===`workspace`?0:-1,onClick:()=>O(`workspace`,()=>void e({to:`/`})),className:[`tab-btn px-4 py-2.5 font-mono text-[10px] uppercase tracking-[0.30em] transition-colors duration-150`,`focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:outline-none`,c===`workspace`?`tab-btn--active text-[var(--accent)] text-glow-amber`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`,E===`workspace`?`tab-activating`:``].join(` `),style:c===`workspace`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`Workspace`]}),(0,V.jsxs)(`button`,{role:`tab`,id:`tab-workflows`,"aria-selected":c===`workflows`,"aria-controls":`panel-workflows`,tabIndex:c===`workflows`?0:-1,onClick:()=>O(`workflows`,()=>void e({to:`/workflows`,search:{tag:void 0}})),className:[`tab-btn px-4 py-2.5 font-mono text-[10px] uppercase tracking-[0.30em] transition-colors duration-150`,`focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:outline-none`,c===`workflows`?`tab-btn--active text-[var(--accent)] text-glow-amber`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`,E===`workflows`?`tab-activating`:``].join(` `),style:c===`workflows`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`Workflows`]}),(0,V.jsxs)(`button`,{role:`tab`,id:`tab-auto`,"aria-selected":c===`auto`,"aria-controls":`panel-auto`,tabIndex:c===`auto`?0:-1,onClick:()=>O(`auto`,()=>void e({to:`/auto`})),className:[`tab-btn px-4 py-2.5 font-mono text-[10px] uppercase tracking-[0.30em] transition-colors duration-150`,`focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:outline-none`,c===`auto`?`tab-btn--active text-[var(--accent)] text-glow-amber`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`,E===`auto`?`tab-activating`:``].join(` `),style:c===`auto`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`Auto`]}),(0,V.jsxs)(`button`,{role:`tab`,id:`tab-perf`,"aria-selected":c===`perf`,"aria-controls":`panel-perf`,tabIndex:c===`perf`?0:-1,onClick:()=>O(`perf`,()=>void e({to:`/perf`})),className:[`tab-btn px-4 py-2.5 font-mono text-[10px] uppercase tracking-[0.30em] transition-colors duration-150`,`focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:outline-none`,c===`perf`?`tab-btn--active text-[var(--accent)] text-glow-amber`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`,E===`perf`?`tab-activating`:``].join(` `),style:c===`perf`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`Performance`]})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[g>0&&(0,V.jsx)(no,{label:`${Math.min(g,9)}${g>9?`+`:``} LIVE`,color:`var(--accent-strong)`,pulse:!0,role:`status`,"aria-label":`${g} live session${g===1?``:`s`}`}),_>0&&(0,V.jsx)(no,{label:`${Math.min(_,9)}${_>9?`+`:``} BLOCKED`,color:`var(--blocked)`,role:`status`,"aria-label":`${_} blocked session${_===1?``:`s`}`})]})]}),(0,V.jsxs)(`main`,{className:`p-6`,style:{paddingTop:`calc(56px + 1.5rem)`},children:[(0,V.jsxs)(`div`,{id:`panel-workspace`,role:`tabpanel`,"aria-labelledby":`tab-workspace`,hidden:c===`workflows`||c===`perf`||c===`auto`,children:[(0,V.jsx)(Do,{viewModel:m,sessionListViewModel:h,hidden:l}),l&&d&&(0,V.jsx)(yD,{viewModel:w})]}),c===`workflows`&&(0,V.jsx)(`div`,{id:`panel-workflows`,role:`tabpanel`,"aria-labelledby":`tab-workflows`,children:u&&f?(0,V.jsx)(ED,{viewModel:C}):(0,V.jsx)(HD,{viewModel:S})}),c===`auto`&&(0,V.jsx)(`div`,{id:`panel-auto`,role:`tabpanel`,"aria-labelledby":`tab-auto`,children:(0,V.jsx)(_O,{})}),c===`perf`&&(0,V.jsx)(`div`,{id:`panel-perf`,role:`tabpanel`,"aria-labelledby":`tab-perf`,children:(0,V.jsx)(iO,{viewModel:T})})]})]})}var sk=Hi({component:ok}),ck=Bi({getParentRoute:()=>sk,path:`/`,component:()=>null}),lk=Bi({getParentRoute:()=>sk,path:`/session/$sessionId`,component:()=>null}),uk=Bi({getParentRoute:()=>sk,path:`/workflows`,validateSearch:e=>({tag:typeof e.tag==`string`?e.tag:void 0}),component:()=>null}),dk=Bi({getParentRoute:()=>sk,path:`/workflows/$workflowId`,validateSearch:e=>({tag:typeof e.tag==`string`?e.tag:void 0}),component:()=>null}),fk=Bi({getParentRoute:()=>sk,path:`/perf`,component:()=>null}),pk=Bi({getParentRoute:()=>sk,path:`/auto`,component:()=>null}),mk=ra({routeTree:sk.addChildren([ck,lk,uk,dk,fk,pk]),history:yr()}),hk=new ze({defaultOptions:{queries:{refetchInterval:5e3,staleTime:2e3}}});(0,ca.createRoot)(document.getElementById(`root`)).render((0,V.jsx)(B.StrictMode,{children:(0,V.jsx)(We,{client:hk,children:(0,V.jsx)(oa,{router:mk})})}));
28
+ `},i)),a}function qT(e,t){return e&&`run`in e?async function(n,r){let i=KT(n,{file:r,...t});await e.run(i,r)}:function(n,r){return KT(n,{file:r,...e||t})}}function JT(e){if(e)throw e}var YT=o(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=function(e){return typeof Array.isArray==`function`?Array.isArray(e):r.call(e)===`[object Array]`},s=function(e){if(!e||r.call(e)!==`[object Object]`)return!1;var t=n.call(e,`constructor`),i=e.constructor&&e.constructor.prototype&&n.call(e.constructor.prototype,`isPrototypeOf`);if(e.constructor&&!t&&!i)return!1;for(var a in e);return a===void 0||n.call(e,a)},c=function(e,t){i&&t.name===`__proto__`?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},l=function(e,t){if(t===`__proto__`){if(!n.call(e,t))return;if(a)return a(e,t).value}return e[t]};t.exports=function e(){var t,n,r,i,a,u,d=arguments[0],f=1,p=arguments.length,m=!1;for(typeof d==`boolean`&&(m=d,d=arguments[1]||{},f=2),(d==null||typeof d!=`object`&&typeof d!=`function`)&&(d={});f<p;++f)if(t=arguments[f],t!=null)for(n in t)r=l(d,n),i=l(t,n),d!==i&&(m&&i&&(s(i)||(a=o(i)))?(a?(a=!1,u=r&&o(r)?r:[]):u=r&&s(r)?r:{},c(d,{name:n,newValue:e(m,u,i)})):i!==void 0&&c(d,{name:n,newValue:i}));return d}}));function XT(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function ZT(){let e=[],t={run:n,use:r};return t;function n(...t){let n=-1,r=t.pop();if(typeof r!=`function`)throw TypeError(`Expected function as last argument, not `+r);i(null,...t);function i(a,...o){let s=e[++n],c=-1;if(a){r(a);return}for(;++c<t.length;)(o[c]===null||o[c]===void 0)&&(o[c]=t[c]);t=o,s?QT(s,i)(...o):r(null,...o)}}function r(n){if(typeof n!=`function`)throw TypeError("Expected `middelware` to be a function, not "+n);return e.push(n),t}}function QT(e,t){let n;return r;function r(...t){let r=e.length>t.length,o;r&&t.push(i);try{o=e.apply(this,t)}catch(e){let t=e;if(r&&n)throw t;return i(t)}r||(o&&o.then&&typeof o.then==`function`?o.then(a,i):o instanceof Error?i(o):a(o))}function i(e,...r){n||(n=!0,t(e,...r))}function a(e){i(null,e)}}var $T={basename:eE,dirname:tE,extname:nE,join:rE,sep:`/`};function eE(e,t){if(t!==void 0&&typeof t!=`string`)throw TypeError(`"ext" argument must be a string`);oE(e);let n=0,r=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else r<0&&(a=!0,r=i+1);return r<0?``:e.slice(n,r)}if(t===e)return``;let o=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else o<0&&(a=!0,o=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(r=i):(s=-1,r=o));return n===r?r=o:r<0&&(r=e.length),e.slice(n,r)}function tE(e){if(oE(e),e.length===0)return`.`;let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||=!0;return t<0?e.codePointAt(0)===47?`/`:`.`:t===1&&e.codePointAt(0)===47?`//`:e.slice(0,t)}function nE(e){oE(e);let t=e.length,n=-1,r=0,i=-1,a=0,o;for(;t--;){let s=e.codePointAt(t);if(s===47){if(o){r=t+1;break}continue}n<0&&(o=!0,n=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||n<0||a===0||a===1&&i===n-1&&i===r+1?``:e.slice(i,n)}function rE(...e){let t=-1,n;for(;++t<e.length;)oE(e[t]),e[t]&&(n=n===void 0?e[t]:n+`/`+e[t]);return n===void 0?`.`:iE(n)}function iE(e){oE(e);let t=e.codePointAt(0)===47,n=aE(e,!t);return n.length===0&&!t&&(n=`.`),n.length>0&&e.codePointAt(e.length-1)===47&&(n+=`/`),t?`/`+n:n}function aE(e,t){let n=``,r=0,i=-1,a=0,o=-1,s,c;for(;++o<=e.length;){if(o<e.length)s=e.codePointAt(o);else if(s===47)break;else s=47;if(s===47){if(!(i===o-1||a===1))if(i!==o-1&&a===2){if(n.length<2||r!==2||n.codePointAt(n.length-1)!==46||n.codePointAt(n.length-2)!==46){if(n.length>2){if(c=n.lastIndexOf(`/`),c!==n.length-1){c<0?(n=``,r=0):(n=n.slice(0,c),r=n.length-1-n.lastIndexOf(`/`)),i=o,a=0;continue}}else if(n.length>0){n=``,r=0,i=o,a=0;continue}}t&&(n=n.length>0?n+`/..`:`..`,r=2)}else n.length>0?n+=`/`+e.slice(i+1,o):n=e.slice(i+1,o),r=o-i-1;i=o,a=0}else s===46&&a>-1?a++:a=-1}return n}function oE(e){if(typeof e!=`string`)throw TypeError(`Path must be a string. Received `+JSON.stringify(e))}var sE={cwd:cE};function cE(){return`/`}function lE(e){return!!(typeof e==`object`&&e&&`href`in e&&e.href&&`protocol`in e&&e.protocol&&e.auth===void 0)}function uE(e){if(typeof e==`string`)e=new URL(e);else if(!lE(e)){let t=TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code=`ERR_INVALID_ARG_TYPE`,t}if(e.protocol!==`file:`){let e=TypeError(`The URL must be of scheme file`);throw e.code=`ERR_INVALID_URL_SCHEME`,e}return dE(e)}function dE(e){if(e.hostname!==``){let e=TypeError(`File URL host must be "localhost" or empty on darwin`);throw e.code=`ERR_INVALID_FILE_URL_HOST`,e}let t=e.pathname,n=-1;for(;++n<t.length;)if(t.codePointAt(n)===37&&t.codePointAt(n+1)===50){let e=t.codePointAt(n+2);if(e===70||e===102){let e=TypeError(`File URL path must not include encoded / characters`);throw e.code=`ERR_INVALID_FILE_URL_PATH`,e}}return decodeURIComponent(t)}var fE=[`history`,`path`,`basename`,`stem`,`extname`,`dirname`],pE=class{constructor(e){let t;t=e?lE(e)?{path:e}:typeof e==`string`||_E(e)?{value:e}:e:{},this.cwd=`cwd`in t?``:sE.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let n=-1;for(;++n<fE.length;){let e=fE[n];e in t&&t[e]!==void 0&&t[e]!==null&&(this[e]=e===`history`?[...t[e]]:t[e])}let r;for(r in t)fE.includes(r)||(this[r]=t[r])}get basename(){return typeof this.path==`string`?$T.basename(this.path):void 0}set basename(e){hE(e,`basename`),mE(e,`basename`),this.path=$T.join(this.dirname||``,e)}get dirname(){return typeof this.path==`string`?$T.dirname(this.path):void 0}set dirname(e){gE(this.basename,`dirname`),this.path=$T.join(e||``,this.basename)}get extname(){return typeof this.path==`string`?$T.extname(this.path):void 0}set extname(e){if(mE(e,`extname`),gE(this.dirname,`extname`),e){if(e.codePointAt(0)!==46)throw Error("`extname` must start with `.`");if(e.includes(`.`,1))throw Error("`extname` cannot contain multiple dots")}this.path=$T.join(this.dirname,this.stem+(e||``))}get path(){return this.history[this.history.length-1]}set path(e){lE(e)&&(e=uE(e)),hE(e,`path`),this.path!==e&&this.history.push(e)}get stem(){return typeof this.path==`string`?$T.basename(this.path,this.extname):void 0}set stem(e){hE(e,`stem`),mE(e,`stem`),this.path=$T.join(this.dirname||``,e+(this.extname||``))}fail(e,t,n){let r=this.message(e,t,n);throw r.fatal=!0,r}info(e,t,n){let r=this.message(e,t,n);return r.fatal=void 0,r}message(e,t,n){let r=new nx(e,t,n);return this.path&&(r.name=this.path+`:`+r.name,r.file=this.path),r.fatal=!1,this.messages.push(r),r}toString(e){return this.value===void 0?``:typeof this.value==`string`?this.value:new TextDecoder(e||void 0).decode(this.value)}};function mE(e,t){if(e&&e.includes($T.sep))throw Error("`"+t+"` cannot be a path: did not expect `"+$T.sep+"`")}function hE(e,t){if(!e)throw Error("`"+t+"` cannot be empty")}function gE(e,t){if(!e)throw Error("Setting `"+t+"` requires `path` to be set too")}function _E(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}var vE=(function(e){let t=this.constructor.prototype,n=t[e],r=function(){return n.apply(r,arguments)};return Object.setPrototypeOf(r,t),r}),yE=l(YT(),1),bE={}.hasOwnProperty,xE=new class e extends vE{constructor(){super(`copy`),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=ZT()}copy(){let t=new e,n=-1;for(;++n<this.attachers.length;){let e=this.attachers[n];t.use(...e)}return t.data((0,yE.default)(!0,{},this.namespace)),t}data(e,t){return typeof e==`string`?arguments.length===2?(wE(`data`,this.frozen),this.namespace[e]=t,this):bE.call(this.namespace,e)&&this.namespace[e]||void 0:e?(wE(`data`,this.frozen),this.namespace=e,this):this.namespace}freeze(){if(this.frozen)return this;let e=this;for(;++this.freezeIndex<this.attachers.length;){let[t,...n]=this.attachers[this.freezeIndex];if(n[0]===!1)continue;n[0]===!0&&(n[0]=void 0);let r=t.call(e,...n);typeof r==`function`&&this.transformers.use(r)}return this.frozen=!0,this.freezeIndex=1/0,this}parse(e){this.freeze();let t=DE(e),n=this.parser||this.Parser;return SE(`parse`,n),n(String(t),t)}process(e,t){let n=this;return this.freeze(),SE(`process`,this.parser||this.Parser),CE(`process`,this.compiler||this.Compiler),t?r(void 0,t):new Promise(r);function r(r,i){let a=DE(e),o=n.parse(a);n.run(o,a,function(e,t,r){if(e||!t||!r)return s(e);let i=t,a=n.stringify(i,r);kE(a)?r.value=a:r.result=a,s(e,r)});function s(e,n){e||!n?i(e):r?r(n):t(void 0,n)}}}processSync(e){let t=!1,n;return this.freeze(),SE(`processSync`,this.parser||this.Parser),CE(`processSync`,this.compiler||this.Compiler),this.process(e,r),EE(`processSync`,`process`,t),n;function r(e,r){t=!0,JT(e),n=r}}run(e,t,n){TE(e),this.freeze();let r=this.transformers;return!n&&typeof t==`function`&&(n=t,t=void 0),n?i(void 0,n):new Promise(i);function i(i,a){let o=DE(t);r.run(e,o,s);function s(t,r,o){let s=r||e;t?a(t):i?i(s):n(void 0,s,o)}}}runSync(e,t){let n=!1,r;return this.run(e,t,i),EE(`runSync`,`run`,n),r;function i(e,t){JT(e),r=t,n=!0}}stringify(e,t){this.freeze();let n=DE(t),r=this.compiler||this.Compiler;return CE(`stringify`,r),TE(e),r(e,n)}use(e,...t){let n=this.attachers,r=this.namespace;if(wE(`use`,this.frozen),e!=null)if(typeof e==`function`)s(e,t);else if(typeof e==`object`)Array.isArray(e)?o(e):a(e);else throw TypeError("Expected usable value, not `"+e+"`");return this;function i(e){if(typeof e==`function`)s(e,[]);else if(typeof e==`object`)if(Array.isArray(e)){let[t,...n]=e;s(t,n)}else a(e);else throw TypeError("Expected usable value, not `"+e+"`")}function a(e){if(!(`plugins`in e)&&!(`settings`in e))throw Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");o(e.plugins),e.settings&&(r.settings=(0,yE.default)(!0,r.settings,e.settings))}function o(e){let t=-1;if(e!=null)if(Array.isArray(e))for(;++t<e.length;){let n=e[t];i(n)}else throw TypeError("Expected a list of plugins, not `"+e+"`")}function s(e,t){let r=-1,i=-1;for(;++r<n.length;)if(n[r][0]===e){i=r;break}if(i===-1)n.push([e,...t]);else if(t.length>0){let[r,...a]=t,o=n[i][1];XT(o)&&XT(r)&&(r=(0,yE.default)(!0,o,r)),n[i]=[e,r,...a]}}}}().freeze();function SE(e,t){if(typeof t!=`function`)throw TypeError("Cannot `"+e+"` without `parser`")}function CE(e,t){if(typeof t!=`function`)throw TypeError("Cannot `"+e+"` without `compiler`")}function wE(e,t){if(t)throw Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function TE(e){if(!XT(e)||typeof e.type!=`string`)throw TypeError("Expected node, got `"+e+"`")}function EE(e,t,n){if(!n)throw Error("`"+e+"` finished async. Use `"+t+"` instead")}function DE(e){return OE(e)?e:new pE(e)}function OE(e){return!!(e&&typeof e==`object`&&`message`in e&&`messages`in e)}function kE(e){return typeof e==`string`||AE(e)}function AE(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}var jE=[],ME={allowDangerousHtml:!0},NE=/^(https?|ircs?|mailto|xmpp)$/i,PE=[{from:`astPlugins`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowDangerousHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowNode`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowElement`},{from:`allowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowedElements`},{from:`className`,id:`remove-classname`},{from:`disallowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`disallowedElements`},{from:`escapeHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`includeElementIndex`,id:`#remove-includeelementindex`},{from:`includeNodeIndex`,id:`change-includenodeindex-to-includeelementindex`},{from:`linkTarget`,id:`remove-linktarget`},{from:`plugins`,id:`change-plugins-to-remarkplugins`,to:`remarkPlugins`},{from:`rawSourcePos`,id:`#remove-rawsourcepos`},{from:`renderers`,id:`change-renderers-to-components`,to:`components`},{from:`source`,id:`change-source-to-children`,to:`children`},{from:`sourcePos`,id:`#remove-sourcepos`},{from:`transformImageUri`,id:`#add-urltransform`,to:`urlTransform`},{from:`transformLinkUri`,id:`#add-urltransform`,to:`urlTransform`}];function FE(e){let t=IE(e),n=LE(e);return RE(t.runSync(t.parse(n),n),e)}function IE(e){let t=e.rehypePlugins||jE,n=e.remarkPlugins||jE,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...ME}:ME;return xE().use(Nw).use(n).use(qT,r).use(t)}function LE(e){let t=e.children||``,n=new pE;return typeof t==`string`?n.value=t:``+t,n}function RE(e,t){let n=t.allowedElements,r=t.allowElement,i=t.components,a=t.disallowedElements,o=t.skipHtml,s=t.unwrapDisallowed,c=t.urlTransform||zE;for(let e of PE)Object.hasOwn(t,e.from)&&``+e.from+(e.to?"use `"+e.to+"` instead":`remove it`)+e.id;return LT(e,l),ux(e,{Fragment:V.Fragment,components:i,ignoreInvalidStyle:!0,jsx:V.jsx,jsxs:V.jsxs,passKeys:!0,passNode:!0});function l(e,t,i){if(e.type===`raw`&&i&&typeof t==`number`)return o?i.children.splice(t,1):i.children[t]={type:`text`,value:e.value},t;if(e.type===`element`){let t;for(t in Mx)if(Object.hasOwn(Mx,t)&&Object.hasOwn(e.properties,t)){let n=e.properties[t],r=Mx[t];(r===null||r.includes(e.tagName))&&(e.properties[t]=c(String(n||``),t,e))}}if(e.type===`element`){let o=n?!n.includes(e.tagName):a?a.includes(e.tagName):!1;if(!o&&r&&typeof t==`number`&&(o=!r(e,t,i)),o&&i&&typeof t==`number`)return s&&e.children?i.children.splice(t,1,...e.children):i.children.splice(t,1),t}}}function zE(e){let t=e.indexOf(`:`),n=e.indexOf(`?`),r=e.indexOf(`#`),i=e.indexOf(`/`);return t===-1||i!==-1&&t>i||n!==-1&&t>n||r!==-1&&t>r||NE.test(e.slice(0,t))?e:``}function BE({children:e,className:t}){return(0,V.jsx)(`div`,{className:`markdown-view ${t??``}`,children:(0,V.jsx)(FE,{children:e})})}function VE({sessionId:e,nodeId:t,runStatus:n=`complete`,currentNodeId:r=null,executionTraceSummary:i=null}){let{data:a,isLoading:o,error:s}=qy(e,t);return t?(0,V.jsxs)(`div`,{children:[(0,V.jsx)(HE,{stepLabel:a?.stepLabel??null,nodeId:t}),(0,V.jsxs)(`div`,{className:`p-4 space-y-4`,children:[o&&(0,V.jsx)(`div`,{className:`text-[var(--text-secondary)] text-sm`,children:`Loading...`}),s&&(0,V.jsx)(`div`,{className:`text-[var(--error)] text-sm bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3`,children:s.message}),a&&(0,V.jsx)(qE,{detail:a,runStatus:n,currentNodeId:r,executionTraceSummary:i})]})]}):(0,V.jsx)(`div`,{className:`px-5 py-8 text-sm text-[var(--text-secondary)]`,children:`Select a node in the lineage to inspect its recap, validations, gaps, and artifacts.`})}function HE({stepLabel:e,nodeId:t}){return(0,V.jsxs)(`div`,{className:`px-5 py-4 border-b border-[var(--border)] console-blueprint-grid`,children:[(0,V.jsx)(`div`,{className:`text-base font-semibold text-[var(--text-primary)] leading-tight`,children:e??`Untitled node`}),(0,V.jsx)(`div`,{className:`mt-1 font-mono text-[11px] text-[var(--text-muted)] truncate`,children:t})]})}function UE({item:e}){return(0,V.jsxs)(`div`,{className:`flex items-start gap-2 text-xs py-1`,children:[(0,V.jsx)(`span`,{className:`flex-1 text-[var(--text-secondary)] leading-relaxed`,children:e.summary}),(0,V.jsxs)(`span`,{className:`font-mono text-[10px] text-[var(--text-muted)] shrink-0`,children:[`#`,e.recordedAtEventIndex]})]})}function WE({nodeId:e,nodeKind:t,executionTraceSummary:n}){let{whySelected:r,conditions:i,loops:a,divergences:o,forks:s}=my(n,e);return n.items.some(t=>t.kind!==`context_fact`&&t.refs.some(t=>t.kind===`node_id`&&t.value===e))?(0,V.jsx)(cD,{title:`Routing context`,children:(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(r.length>0||t===`blocked_attempt`)&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5 flex items-center gap-2`,children:(0,V.jsx)(Fy,{label:`WHY SELECTED`,color:`var(--accent)`,bgColor:`rgba(244,196,48,0.10)`})}),r.length>0?(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:r.map((e,t)=>(0,V.jsx)(UE,{item:e},t))}):t===`blocked_attempt`?(0,V.jsx)(`div`,{className:`pl-2 border-l border-[var(--border)]`,children:(0,V.jsx)(`span`,{className:`text-xs text-[var(--text-muted)]`,children:`This step was attempted but not selected as the preferred path.`})}):null]}),i.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5`,children:(0,V.jsx)(Fy,{label:`CONDITIONS EVALUATED`,color:`var(--text-secondary)`,bgColor:`rgba(168,159,140,0.10)`})}),(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:[...i.filter(e=>!cy(e)),...i.filter(e=>cy(e))].map((e,t)=>{let n=cy(e);return(0,V.jsxs)(`div`,{className:`flex items-start gap-2 text-xs py-0.5`,children:[(0,V.jsx)(Fy,{label:n?`PASS`:`SKIP`,color:n?`var(--success)`:`var(--warning)`,bgColor:n?`rgba(34,197,94,0.10)`:`rgba(251,191,36,0.10)`}),(0,V.jsx)(`span`,{className:`flex-1 text-[var(--text-secondary)] leading-relaxed`,children:e.summary})]},t)})})]}),a.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5`,children:(0,V.jsx)(Fy,{label:`LOOP`,color:`var(--accent-strong)`,bgColor:`rgba(0,240,255,0.10)`})}),(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:a.map((e,t)=>(0,V.jsx)(UE,{item:e},t))})]}),o.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5`,children:(0,V.jsx)(Fy,{label:`DIVERGENCE`,color:`var(--error)`,bgColor:`rgba(255,107,107,0.10)`})}),(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:o.map((e,t)=>(0,V.jsx)(UE,{item:e},t))})]}),s.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-1.5`,children:(0,V.jsx)(Fy,{label:`FORK`,color:`var(--warning)`,bgColor:`rgba(251,191,36,0.10)`})}),(0,V.jsx)(`div`,{className:`space-y-1 pl-2 border-l border-[var(--border)]`,children:s.map((e,t)=>(0,V.jsx)(UE,{item:e},t))})]})]})}):(0,V.jsx)(cD,{title:`Routing context`,children:t===`blocked_attempt`&&r.length===0?(0,V.jsxs)(`div`,{className:`flex items-start gap-2 py-1`,children:[(0,V.jsx)(Fy,{label:`WHY SELECTED`,color:`var(--text-muted)`,bgColor:`rgba(123,141,167,0.08)`}),(0,V.jsx)(`span`,{className:`text-xs text-[var(--text-muted)] leading-relaxed`,children:`This step was attempted but not selected as the preferred path.`})]}):(0,V.jsx)(`span`,{className:`font-mono text-xs text-[var(--text-muted)]`,children:`// no routing trace for this node`})})}function GE({items:e}){let[t,n]=(0,B.useState)(!1);return(0,V.jsx)(cD,{title:`Run routing`,children:(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(`button`,{type:`button`,"aria-expanded":t,onClick:()=>n(e=>!e),className:`flex items-center gap-2 font-mono text-[10px] uppercase tracking-[0.20em] text-[var(--text-muted)] hover:text-[var(--text-secondary)] transition-colors`,children:[(0,V.jsx)(Fy,{label:`RUN ROUTING`,color:`var(--text-muted)`,bgColor:`rgba(123,141,167,0.08)`}),(0,V.jsxs)(`span`,{className:`text-[var(--text-muted)]`,children:[`// `,e.length,` ambient items`]}),(0,V.jsx)(`span`,{children:t?`[-]`:`[+]`})]}),t&&(0,V.jsx)(`div`,{className:`mt-2 space-y-1 pl-2 border-l border-[var(--border)]`,children:e.map((e,t)=>(0,V.jsxs)(`div`,{className:`flex items-start gap-2 text-xs py-0.5`,children:[(0,V.jsx)(`span`,{className:`shrink-0 inline-flex items-center px-2 py-0.5 font-mono text-[10px] uppercase tracking-[0.16em]`,style:{color:`var(--text-muted)`,backgroundColor:`rgba(123,141,167,0.08)`,border:`1px solid rgba(123,141,167,0.20)`},children:e.kind.replace(/_/g,` `).toUpperCase()}),(0,V.jsx)(`span`,{className:`flex-1 text-[var(--text-secondary)] leading-relaxed`,children:e.summary}),(0,V.jsxs)(`span`,{className:`font-mono text-[10px] text-[var(--text-muted)] shrink-0`,children:[`#`,e.recordedAtEventIndex]})]},t))})]})})}var KE=[{id:`routing`,column:`primary`,render:({detail:e,executionTraceSummary:t})=>t===null?null:(0,V.jsx)(WE,{nodeId:e.nodeId,nodeKind:e.nodeKind,executionTraceSummary:t},`routing`)},{id:`run_routing`,column:`primary`,render:({executionTraceSummary:e})=>{if(e===null)return null;let t=e.items.filter(e=>!e.refs.some(e=>e.kind===`node_id`));return t.length===0?null:(0,V.jsx)(GE,{items:t},`run_routing`)}},{id:`recap`,column:`primary`,render:({detail:e,runStatus:t,currentNodeId:n})=>e.recapMarkdown?(0,V.jsx)($E,{markdown:e.recapMarkdown},`recap`):t===`in_progress`&&e.nodeId===n&&!e.recapMarkdown?(0,V.jsx)(JE,{detail:e},`recap-in-progress`):null},{id:`validations`,column:`primary`,render:({detail:e})=>e.validations.length>0?(0,V.jsx)(tD,{validations:e.validations},`validations`):null},{id:`gaps`,column:`primary`,render:({detail:e})=>e.gaps.length>0?(0,V.jsx)(rD,{gaps:e.gaps},`gaps`):null},{id:`advance-outcome`,column:`primary`,render:({detail:e})=>e.advanceOutcome?(0,V.jsx)(eD,{outcome:e.advanceOutcome},`advance-outcome`):null},{id:`artifacts`,column:`primary`,render:({detail:e})=>e.artifacts.length>0?(0,V.jsx)(sD,{artifacts:e.artifacts},`artifacts`):null},{id:`node-meta`,column:`primary`,render:({detail:e})=>(0,V.jsx)(QE,{detail:e},`node-meta`)}];function qE(e){return(0,V.jsx)(`div`,{className:`space-y-4`,children:KE.map(t=>t.render(e))})}function JE({detail:e}){return(0,V.jsx)(cD,{title:`Recap`,children:(0,V.jsxs)(`div`,{className:`space-y-4 text-sm text-[var(--text-secondary)]`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(YE,{children:`In progress`}),(0,V.jsxs)(`span`,{className:`font-mono text-xs text-[var(--text-muted)]`,children:[`event #`,e.createdAtEventIndex]})]}),(0,V.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-[minmax(0,1.15fr)_minmax(0,0.85fr)]`,children:[(0,V.jsx)(XE,{label:`Current focus`,value:e.stepLabel??`Current workflow step`,supportingText:`This step is still running, so the recap will appear once execution finishes.`}),(0,V.jsx)(XE,{label:`Current state`,value:`Waiting for step completion`,supportingText:`The node has been created and selected as the current workflow position.`,mono:!0})]}),(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] overflow-hidden`,children:[(0,V.jsx)(`div`,{className:`px-4 py-3 border-b border-[var(--border)]`,children:(0,V.jsx)(Ko,{children:`What lands here next`})}),(0,V.jsxs)(`div`,{className:`p-4 grid gap-3 md:grid-cols-3`,children:[(0,V.jsx)(ZE,{title:`Recap`,description:`A step summary is written when this node completes.`}),(0,V.jsx)(ZE,{title:`Validations`,description:`Validation results appear if this step records contract checks.`}),(0,V.jsx)(ZE,{title:`Artifacts`,description:`Generated outputs show up here after the step produces them.`})]})]})]})})}function YE({children:e}){return(0,V.jsx)(`span`,{className:`inline-flex items-center px-2 py-1 font-medium text-xs`,style:{backgroundColor:`rgba(0, 219, 233, 0.12)`,color:`var(--accent-strong)`},children:e})}function XE({label:e,value:t,supportingText:n,mono:r=!1}){return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3 space-y-2`,children:[(0,V.jsx)(Ko,{children:e}),(0,V.jsx)(`div`,{className:r?`font-mono text-sm text-[var(--text-primary)]`:`text-[var(--text-primary)]`,children:t}),(0,V.jsx)(`div`,{className:`text-xs text-[var(--text-muted)] leading-relaxed`,children:n})]})}function ZE({title:e,description:t}){return(0,V.jsxs)(`div`,{className:`border border-[var(--border)] bg-[rgba(255,255,255,0.02)] px-3 py-3 space-y-2`,children:[(0,V.jsx)(Ko,{color:`var(--text-secondary)`,children:e}),(0,V.jsx)(`div`,{className:`text-xs text-[var(--text-muted)] leading-relaxed`,children:t})]})}function QE({detail:e}){return(0,V.jsx)(cD,{title:`Node details`,children:(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(0,V.jsx)(lD,{label:`Kind`,value:(0,V.jsx)(dD,{kind:e.nodeKind})}),(0,V.jsx)(lD,{label:`Event index`,value:String(e.createdAtEventIndex),mono:!0}),(0,V.jsx)(lD,{label:`Parent`,value:e.parentNodeId??`Root`,mono:!0}),(0,V.jsx)(lD,{label:`Tip state`,value:e.isTip?e.isPreferredTip?`Preferred tip`:`Tip`:`Historical`})]})})}function $E({markdown:e}){return(0,V.jsx)(cD,{title:`Recap`,children:(0,V.jsx)(BE,{children:e})})}function eD({outcome:e}){let t=e.kind===`advanced`;return(0,V.jsx)(cD,{title:`Advance outcome`,children:(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 text-xs`,children:[(0,V.jsx)(`span`,{className:`inline-flex items-center px-2 py-1 font-medium`,style:{backgroundColor:t?`var(--success)20`:`var(--blocked)20`,color:t?`var(--success)`:`var(--blocked)`},children:t?`Advanced`:`Blocked`}),(0,V.jsxs)(`span`,{className:`text-[var(--text-muted)]`,children:[`attempt `,e.attemptId.slice(-8),` at event #`,e.recordedAtEventIndex]})]})})}function tD({validations:e}){return(0,V.jsx)(cD,{title:`Validations (${e.length})`,children:(0,V.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,V.jsx)(nD,{validation:e},e.validationId))})})}function nD({validation:e}){let t=e.outcome===`pass`;return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3 text-xs space-y-2`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`inline-flex items-center px-2 py-1 font-medium`,style:{backgroundColor:t?`var(--success)20`:`var(--error)20`,color:t?`var(--success)`:`var(--error)`},children:t?`Pass`:`Fail`}),(0,V.jsx)(`span`,{className:`text-[var(--text-muted)] font-mono`,children:e.contractRef})]}),e.issues.length>0&&(0,V.jsxs)(`div`,{className:`space-y-1`,children:[(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] mb-1`,children:`Issues`}),(0,V.jsx)(`ul`,{className:`list-disc list-inside text-[var(--error)] space-y-0.5`,children:e.issues.map((e,t)=>(0,V.jsx)(`li`,{children:e},t))})]}),e.suggestions.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] mb-1`,children:`Suggestions`}),(0,V.jsx)(`ul`,{className:`list-disc list-inside text-[var(--text-secondary)] space-y-0.5`,children:e.suggestions.map((e,t)=>(0,V.jsx)(`li`,{children:e},t))})]})]})}function rD({gaps:e}){return(0,V.jsx)(cD,{title:`Gaps (${e.length})`,children:(0,V.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,V.jsxs)(`div`,{className:`flex items-start gap-3 text-xs bg-[var(--bg-primary)] border border-[var(--border)] px-3 py-3`,children:[(0,V.jsx)(`span`,{className:`shrink-0 inline-flex items-center px-2 py-1 font-medium`,style:{backgroundColor:e.isResolved?`var(--success)20`:e.severity===`critical`?`var(--error)20`:`var(--warning)20`,color:e.isResolved?`var(--success)`:e.severity===`critical`?`var(--error)`:`var(--warning)`},children:e.isResolved?`Resolved`:e.severity===`critical`?`Critical`:`Non-critical`}),(0,V.jsx)(`span`,{className:`text-[var(--text-secondary)] leading-relaxed`,children:e.summary})]},e.gapId))})})}var iD=1e5,aD=[{prefix:`text/`,render:e=>(0,V.jsx)(`pre`,{className:`text-[var(--text-secondary)] whitespace-pre-wrap break-words font-mono max-h-40 overflow-y-auto`,children:typeof e==`string`?e:String(e)})},{prefix:`application/json`,render:e=>(0,V.jsx)(`pre`,{className:`text-[var(--text-secondary)] whitespace-pre-wrap break-words font-mono max-h-40 overflow-y-auto`,children:typeof e==`string`?e:JSON.stringify(e,null,2)})}];function oD(e){if(e.byteLength>iD)return(0,V.jsxs)(`div`,{className:`text-[var(--text-muted)] italic`,children:[`Content too large to display (`,fD(e.byteLength),` -- limit `,fD(iD),`)`]});let t=aD.find(t=>e.contentType.startsWith(t.prefix));return t?t.render(e.content):(0,V.jsx)(`pre`,{className:`text-[var(--text-secondary)] whitespace-pre-wrap break-words font-mono max-h-40 overflow-y-auto`,children:typeof e.content==`string`?e.content:JSON.stringify(e.content,null,2)})}function sD({artifacts:e}){return(0,V.jsx)(cD,{title:`Artifacts (${e.length})`,children:(0,V.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3 text-xs space-y-2`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-[var(--text-muted)]`,children:[(0,V.jsx)(`span`,{children:e.contentType}),(0,V.jsx)(`span`,{children:`//`}),(0,V.jsx)(`span`,{children:fD(e.byteLength)})]}),oD(e)]},e.sha256))})})}function cD({title:e,children:t}){return(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`mb-2`,children:(0,V.jsx)(Ko,{children:e})}),t]})}function lD({label:e,value:t,mono:n=!1}){return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-primary)] border border-[var(--border)] px-4 py-3`,children:[(0,V.jsx)(Ko,{children:e}),(0,V.jsx)(`div`,{className:n?`mt-2 font-mono text-sm text-[var(--text-secondary)] truncate`:`mt-2 text-sm text-[var(--text-primary)]`,children:t})]})}var uD={step:{label:`Step`,color:`var(--accent)`},checkpoint:{label:`Checkpoint`,color:`var(--success)`},blocked_attempt:{label:`Blocked`,color:`var(--error)`}};function dD({kind:e}){let t=uD[e];return(0,V.jsx)(`span`,{className:`inline-flex items-center px-2 py-1 font-medium`,style:{backgroundColor:`${t.color}20`,color:t.color},children:t.label})}function fD(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function pD(e){return e.length>16?`\u2026${e.slice(-16)}`:e}function mD({data:e}){let t=e.runs[0]??null,n=t?.workflowName??t?.workflowId??`--`,r=t?.workflowHash?.slice(0,12)??`--`;return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-card)] border border-[var(--border)] px-5 py-4 corner-brackets`,style:{backdropFilter:`blur(12px)`,WebkitBackdropFilter:`blur(12px)`},children:[e.sessionTitle&&(0,V.jsx)(`h2`,{className:`text-base font-medium text-[var(--text-primary)] mb-3`,children:e.sessionTitle}),(0,V.jsxs)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-8 gap-y-2`,children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Session`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:pD(e.sessionId)}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Workflow`}),(0,V.jsx)(`dd`,{className:`text-sm text-[var(--text-primary)] self-center`,children:n}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Hash`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:r}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Status`}),(0,V.jsxs)(`dd`,{className:`self-center flex items-center gap-2`,children:[(0,V.jsx)(ao,{health:e.health}),e.health===`healthy`&&(0,V.jsx)(`span`,{className:`text-sm text-[var(--text-primary)]`,children:`Healthy`})]}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)] self-center`,children:`Runs`}),(0,V.jsxs)(`dd`,{className:`text-sm text-[var(--text-primary)] self-center`,children:[e.runs.length,` run`,e.runs.length===1?``:`s`]})]})]})}function hD({summary:e}){let t=new TextEncoder().encode(e).length;return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-card)] border border-[var(--border)] px-5 py-4 corner-brackets`,style:{backdropFilter:`blur(12px)`,WebkitBackdropFilter:`blur(12px)`},children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)]`,children:`Injected Context`}),(0,V.jsxs)(`span`,{className:`font-mono text-[10px] text-[var(--text-muted)]`,children:[t.toLocaleString(),` bytes`]})]}),(0,V.jsx)(`pre`,{className:`font-mono text-xs text-[var(--text-secondary)] whitespace-pre-wrap break-words max-h-48 overflow-y-auto leading-relaxed`,children:e})]})}function gD(e){if(e<6e4)return`${Math.round(e/1e3)}s`;let t=Math.floor(e/6e4),n=Math.round(e%6e4/1e3);return n>0?`${t}m ${n}s`:`${t}m`}function _D({sessionId:e,metrics:t}){let[n,r]=(0,B.useState)({kind:`idle`}),i=Jy(e,!1),a=t.startGitSha!==null&&t.endGitSha!==null,o=async()=>{r({kind:`loading`});try{let e=await i.refetch();e.isSuccess&&e.data?r({kind:`loaded`,linesAdded:e.data.linesAdded,linesRemoved:e.data.linesRemoved,filesChanged:e.data.filesChanged}):r({kind:`error`,message:e.error instanceof Error?e.error.message:`Diff computation failed`})}catch(e){r({kind:`error`,message:e instanceof Error?e.message:`Diff computation failed`})}};return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-card)] border border-[var(--border)] px-5 py-4 corner-brackets space-y-4`,style:{backdropFilter:`blur(12px)`,WebkitBackdropFilter:`blur(12px)`},children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)]`,children:`Session Metrics`}),(0,V.jsx)(`span`,{className:`font-mono text-[10px] text-[var(--text-muted)]`,children:`Session-level totals across all runs.`})]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[t.outcome!==null&&(0,V.jsx)(`span`,{className:`px-2 py-1 text-xs font-mono border border-[var(--border)] text-[var(--text-secondary)] bg-[var(--bg-card)]`,children:t.outcome}),t.durationMs!==void 0&&(0,V.jsx)(`span`,{className:`px-2 py-1 text-xs font-mono border border-[var(--border)] text-[var(--text-secondary)] bg-[var(--bg-card)]`,children:gD(t.durationMs)}),t.filesChanged!==null&&(0,V.jsxs)(`span`,{className:`px-2 py-1 text-xs font-mono border border-[var(--border)] text-[var(--text-secondary)] bg-[var(--bg-card)]`,children:[t.filesChanged,` file`,t.filesChanged===1?``:`s`,` changed`]}),t.captureConfidence!==`none`&&(0,V.jsxs)(`span`,{className:`px-2 py-1 text-xs font-mono border border-[var(--border)] text-[var(--text-muted)] bg-[var(--bg-card)]`,children:[t.captureConfidence,` confidence`]})]}),(0,V.jsxs)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-8 gap-y-2`,children:[t.gitBranch!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Git Branch`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:t.gitBranch})]}),t.startGitSha!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Start SHA`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:t.startGitSha.slice(0,12)})]}),t.endGitSha!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`End SHA`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:t.endGitSha.slice(0,12)})]}),t.durationMs!==void 0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Duration`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)] self-center`,children:gD(t.durationMs)})]}),t.agentCommitShas.length>0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-start`,children:`Commits`}),(0,V.jsx)(`dd`,{className:`font-mono text-xs text-[var(--text-secondary)]`,children:t.agentCommitShas.map(e=>(0,V.jsx)(`div`,{children:e.slice(0,12)},e))})]}),t.outcome!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Outcome`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.outcome,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),t.filesChanged!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Files Changed`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.filesChanged,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),t.linesAdded!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Lines Added`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.linesAdded,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),t.linesRemoved!==null&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`Lines Removed`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.linesRemoved,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),t.prNumbers.length>0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`PRs`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[t.prNumbers.join(`, `),` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(agent-reported)`})]})]}),n.kind===`loaded`&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`LOC Added`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[n.linesAdded,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(git diff)`})]}),(0,V.jsx)(`dt`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] self-center`,children:`LOC Removed`}),(0,V.jsxs)(`dd`,{className:`text-xs text-[var(--text-secondary)] self-center`,children:[n.linesRemoved,` `,(0,V.jsx)(`span`,{className:`text-[var(--text-muted)]`,children:`(git diff)`})]})]})]}),a&&n.kind!==`loaded`&&(0,V.jsxs)(`div`,{className:`flex items-center gap-3 pt-1`,children:[n.kind===`idle`&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>{o()},className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--text-primary)] border border-[var(--border)] px-3 py-1.5 transition-colors`,children:`Load diff`}),n.kind===`loading`&&(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)]`,children:`Computing...`}),n.kind===`error`&&(0,V.jsxs)(`span`,{className:`text-xs text-[var(--error)]`,children:[n.message,` `,(0,V.jsx)(`button`,{type:`button`,onClick:()=>{o()},className:`underline text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors`,children:`Retry`})]})]})]})}function vD({runs:e}){let t=e.some(e=>e.preferredTipNodeId!==null),n=e.some(e=>e.executionTraceSummary!==null);return(0,V.jsxs)(`div`,{className:`border border-[var(--border)] px-4 py-3 text-xs text-[var(--text-muted)] space-y-1`,children:[(0,V.jsx)(`p`,{children:t?`Nodes with a gold border are the current execution tips — click any node to inspect its execution detail.`:`Click any node in the DAG to inspect its execution detail.`}),n&&(0,V.jsxs)(`p`,{children:[`This run has execution trace data. Click`,` `,(0,V.jsx)(`span`,{className:`font-mono uppercase tracking-[0.16em]`,children:`[ TRACE ]`}),` `,`to see why certain steps ran, were skipped, or repeated.`]})]})}function yD({viewModel:e}){let{state:t,onSelectNode:n,onCloseNode:r}=e;if(t.kind===`loading`)return(0,V.jsx)(`div`,{className:`text-[var(--text-secondary)]`,children:`Loading session...`});if(t.kind===`error`)return(0,V.jsxs)(`div`,{className:`text-[var(--error)] bg-[var(--bg-card)] rounded-lg p-4`,children:[`Failed to load session: `,t.message]});let{sessionId:i,data:a,selectedNode:o,selectedRun:s}=t;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(mD,{data:a}),a.metrics!==null&&(0,V.jsx)(_D,{sessionId:i,metrics:a.metrics}),a.injectedContext!==void 0&&(0,V.jsx)(hD,{summary:a.injectedContext.assembledContextSummary}),a.runs.length===0?(0,V.jsx)(`div`,{className:`text-center py-16 text-[var(--text-secondary)]`,children:`No runs in this session`}):(0,V.jsxs)(V.Fragment,{children:[o===null&&(0,V.jsx)(vD,{runs:a.runs}),(0,V.jsx)(`div`,{className:`space-y-6`,children:a.runs.map(e=>(0,V.jsx)(bD,{run:e,selectedNodeId:o?.runId===e.runId?o.nodeId:null,onNodeClick:n},e.runId))})]})]}),(0,V.jsxs)(W,{cut:18,borderColor:`rgba(244, 196, 48, 0.35)`,background:`rgba(27, 31, 44, 0.78)`,dropShadow:`drop-shadow(0 16px 48px rgba(0,0,0,0.9)) drop-shadow(0 2px 12px rgba(244,196,48,0.15))`,backdropFilter:`blur(16px)`,className:`fixed top-3 right-3 bottom-3 w-[560px] max-w-[calc(92vw-12px)] transition-transform duration-200 ease-out`,style:{zIndex:40,transform:o?`translateX(0)`:`translateX(calc(100% + 12px))`},children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-[var(--border)] shrink-0 console-blueprint-grid`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-muted)]`,children:`Node detail`}),(0,V.jsx)(`button`,{onClick:r,className:`text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors text-xl leading-none px-1`,"aria-label":`Close`,children:`×`})]}),(0,V.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,V.jsx)(VE,{sessionId:i,nodeId:o?.nodeId??null,runStatus:s?.status??`complete`,currentNodeId:s?.preferredTipNodeId??null,executionTraceSummary:s?.executionTraceSummary??null})})]})]})}function bD({run:e,selectedNodeId:t,onNodeClick:n}){let r=e.executionTraceSummary!==null,[i,a]=(0,B.useState)(`dag`);return(0,V.jsxs)(W,{cut:10,background:`rgba(27, 31, 44, 0.72)`,backdropFilter:`blur(8px)`,className:`relative`,style:{height:r?`542px`:`506px`},children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-[var(--border)] shrink-0`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(`span`,{className:`text-sm font-medium text-[var(--text-primary)]`,children:e.workflowName??e.workflowId??`Run`}),(0,V.jsx)(`span`,{className:`font-mono text-xs text-[var(--text-muted)]`,children:e.runId}),(0,V.jsxs)(`span`,{className:`font-mono text-xs text-[var(--text-muted)]`,children:[e.nodes.length,` nodes · `,e.tipNodeIds.length,` tip`,e.tipNodeIds.length===1?``:`s`]})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.hasUnresolvedCriticalGaps&&(0,V.jsx)(`span`,{className:`text-xs text-[var(--warning)]`,children:`Critical gaps`}),(0,V.jsx)(io,{status:e.status})]})]}),r&&(0,V.jsxs)(`div`,{role:`tablist`,"aria-label":`Run view mode`,className:`flex items-center border-b border-[var(--border)] shrink-0 h-9 px-2 gap-0.5`,onKeyDown:e=>{e.key===`ArrowRight`&&(e.preventDefault(),a(`trace`)),e.key===`ArrowLeft`&&(e.preventDefault(),a(`dag`))},children:[(0,V.jsxs)(`button`,{type:`button`,id:`tab-dag`,role:`tab`,tabIndex:i===`dag`?0:-1,"aria-selected":i===`dag`,onClick:()=>a(`dag`),className:[`tab-btn px-3 py-1.5 font-mono text-[10px] uppercase tracking-[0.25em] transition-colors duration-150`,i===`dag`?`tab-btn--active text-[var(--accent)]`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`].join(` `),style:i===`dag`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`DAG`]}),(0,V.jsxs)(`button`,{type:`button`,id:`tab-trace`,role:`tab`,tabIndex:i===`trace`?0:-1,"aria-selected":i===`trace`,onClick:()=>a(`trace`),className:[`tab-btn px-3 py-1.5 font-mono text-[10px] uppercase tracking-[0.25em] transition-colors duration-150`,i===`trace`?`tab-btn--active text-[var(--accent)]`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`].join(` `),style:i===`trace`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`TRACE`]})]}),(0,V.jsx)(`div`,{role:`tabpanel`,"aria-labelledby":i===`dag`?`tab-dag`:`tab-trace`,className:`flex-1`,children:i===`trace`&&e.executionTraceSummary!==null?(0,V.jsx)(Vy,{summary:e.executionTraceSummary,runStatus:e.status}):(0,V.jsx)(hy,{run:e,selectedNodeId:t,onNodeClick:t=>n(e.runId,t)})})]})}function xD(){let[e,t]=(0,B.useState)(0),[n,r]=(0,B.useState)(0),[i,a]=(0,B.useState)(38),[o,s]=(0,B.useState)(62),[c,l]=(0,B.useState)(3),[u,d]=(0,B.useState)(2),[f,p]=(0,B.useState)(``),[m,h]=(0,B.useState)(!1),g=(0,B.useRef)(!1),_=(0,B.useRef)(null),v=(0,B.useRef)(null),y=(0,B.useRef)(null),b=(e,n,i,o,c,u)=>{g.current=!0,h(!0),t(e=>e+1),r(Math.floor(Math.random()*4)),a(5+Math.floor(Math.random()*80)),s(5+Math.floor(Math.random()*80)),l(2+Math.floor(Math.random()*40)),d(2+Math.floor(Math.random()*25)),p(i===`horizontal`?n===`next`?`modal-content--exit-h-next`:`modal-content--exit-h-prev`:n===`next`?`modal-content--exit-v-next`:`modal-content--exit-v-prev`),c.current&&(c.current.scrollTop=0);let f=u[e].id;setTimeout(()=>{o(f),p(i===`horizontal`?n===`next`?`modal-content--enter-h-next`:`modal-content--enter-h-prev`:n===`next`?`modal-content--enter-v-next`:`modal-content--enter-v-prev`),h(!1)},80),setTimeout(()=>{if(p(``),g.current=!1,_.current!==null){let e=_.current;_.current=null;let t=e>u.findIndex(e=>e.id===v.current)?`next`:`prev`;y.current?.(e,t,`horizontal`,o,c,u)}},240)};return y.current=b,{state:{isAnimating:g.current,contentAnimClass:f,borderFlashing:m,scanline:e>0?{key:e,crtOffset:n,glitchY:i,glitchY2:o,glitchW:c,glitchW2:u}:null},startTransition:b,navigate:(e,t,n,r,i,a)=>{if(t.length<=1)return;let o=t.findIndex(t=>t.id===e);if(o===-1)return;let s=n===`next`?(o+1)%t.length:(o-1+t.length)%t.length;if(g.current){_.current=s;return}b(s,n,r,i,a,t)},selectedWorkflowIdRef:v}}var SD=[{id:`coding`,label:`Coding`},{id:`review_audit`,label:`Review & Audit`},{id:`investigation`,label:`Investigation`},{id:`design`,label:`Design`},{id:`documentation`,label:`Documentation`},{id:`tickets`,label:`Tickets`},{id:`learning`,label:`Learning`},{id:`authoring`,label:`Workflow Authoring`}],CD=Object.fromEntries(SD.map(e=>[e.id,e.label]));function wD({label:e,count:t,countLabel:n=`workflow`,showRule:r=!0,separator:i=`//`}){return(0,V.jsxs)(`div`,{className:`flex items-center gap-3 mb-3 mt-2`,children:[(0,V.jsxs)(`span`,{className:`font-mono text-[11px] uppercase tracking-[0.30em] text-[var(--text-secondary)] shrink-0`,children:[e,t==null?``:` ${i} ${t} ${n}${t===1?``:`s`}`]}),r&&(0,V.jsx)(`div`,{className:`flex-1 h-px bg-[var(--border)]`})]})}function TD({segments:e,className:t=``}){return(0,V.jsx)(`nav`,{"aria-label":`Breadcrumb`,className:`flex items-center gap-0 ${t}`,children:e.map((t,n)=>{let r=n===e.length-1,i=!!t.onClick;return(0,V.jsxs)(`span`,{className:`flex items-center`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] tracking-[0.25em] text-[var(--text-muted)] mx-1`,children:`//`}),i?(0,V.jsx)(`button`,{type:`button`,onClick:t.onClick,className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--accent)] transition-colors cursor-pointer`,children:t.label.toUpperCase()}):(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.25em] ${r?`text-[var(--text-secondary)]`:`text-[var(--text-muted)]`}`,"aria-current":r?`page`:void 0,children:t.label.toUpperCase()})]},n)})})}function ED({viewModel:e}){let{state:t}=e;if(t.kind===`not_found`)return(0,V.jsx)(`div`,{className:`space-y-5 max-w-3xl`,children:(0,V.jsx)(MD,{message:``,is404:!0,onRetry:()=>void 0,onBack:t.onBack})});if(t.kind===`error`)return(0,V.jsx)(`div`,{className:`space-y-5 max-w-3xl`,children:(0,V.jsx)(MD,{message:t.message,is404:!1,onRetry:t.onRetry,onBack:t.onBack})});if(t.kind===`loading`){let{cached:e,activeTagLabel:n,onBack:r}=t;return(0,V.jsxs)(`div`,{className:`space-y-5 max-w-3xl`,children:[(0,V.jsx)(TD,{segments:n?[{label:`Workflows`,onClick:r},{label:n}]:[{label:`Workflows`,onClick:r}]}),e?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(DD,{name:e.name,description:e.description,tags:e.tags,source:e.source,stepCount:void 0}),(0,V.jsx)(`div`,{className:`space-y-4`,children:(0,V.jsx)(AD,{})})]}):(0,V.jsx)(jD,{})]})}let{workflow:n,name:r,description:i,tags:a,source:o,activeTagLabel:s,onPrev:c,onNext:l,onBack:u}=t;return(0,V.jsxs)(`div`,{className:`space-y-5 max-w-3xl`,children:[(0,V.jsx)(TD,{segments:s?[{label:`Workflows`,onClick:u},{label:s}]:[{label:`Workflows`,onClick:u}]}),(0,V.jsx)(DD,{name:r,description:i,tags:a,source:o,stepCount:n.stepCount}),(c??l)&&(0,V.jsxs)(`div`,{className:`flex items-center gap-4`,children:[c&&(0,V.jsxs)(`button`,{type:`button`,onClick:c,className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--accent)] transition-colors`,children:[`<`,` PREV`]}),l&&(0,V.jsxs)(`button`,{type:`button`,onClick:l,className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--accent)] transition-colors`,children:[`NEXT `,`>`]})]}),(0,V.jsx)(OD,{detail:n,name:r}),(0,V.jsx)(TD,{segments:[{label:`Workflows`,onClick:u}]})]})}function DD({name:e,description:t,tags:n,source:r,stepCount:i}){return(0,V.jsxs)(`div`,{className:`border border-[var(--border)] px-5 py-5 console-blueprint-grid`,children:[(0,V.jsx)(`p`,{className:`font-mono text-[10px] uppercase tracking-[0.35em] text-[var(--text-muted)] mb-2`,children:`// Workflow`}),(0,V.jsx)(`h2`,{className:`font-mono text-xl font-bold uppercase tracking-[0.08em] leading-tight mb-3`,style:{color:`var(--accent)`,textShadow:`0 0 24px rgba(244,196,48,0.45), 0 0 48px rgba(244,196,48,0.15)`},children:e}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[i!=null&&i>0&&(0,V.jsxs)(`span`,{className:`font-mono text-[10px] px-1.5 py-0.5 border border-[var(--border)] text-[var(--text-secondary)]`,children:[i,` step`,i===1?``:`s`]}),n.filter(e=>e!==`routines`).map(e=>(0,V.jsx)(`span`,{"aria-hidden":`true`,className:`font-mono text-[10px] px-1.5 py-0.5 bg-[var(--bg-secondary)] text-[var(--text-muted)]`,children:e},e)),r&&(0,V.jsxs)(`span`,{"aria-hidden":`true`,className:`font-mono text-[10px] px-1.5 py-0.5 border border-[var(--border)] text-[var(--text-muted)]`,children:[`src: `,r.displayName]})]}),t&&(0,V.jsx)(`p`,{className:`text-sm text-[var(--text-secondary)] leading-relaxed mt-3`,children:t})]})}function OD({detail:e,name:t}){let n=e.about!==void 0&&e.about.length>0,r=e.examples!==void 0&&e.examples.length>0,i=e.preconditions!==void 0&&e.preconditions.length>0;return n||r||i?(0,V.jsxs)(`div`,{className:`space-y-6`,children:[n&&(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`h3`,{className:`text-xs font-semibold text-[var(--text-muted)] uppercase tracking-wider mb-3`,children:`About`}),(0,V.jsx)(BE,{children:e.about})]}),r&&(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`h3`,{className:`text-xs font-semibold text-[var(--text-muted)] uppercase tracking-wider mb-3`,children:`Try it with:`}),(0,V.jsx)(`ul`,{className:`space-y-2`,children:e.examples.map(e=>(0,V.jsxs)(`li`,{className:`flex items-start gap-3 bg-[var(--bg-card)] border border-[var(--border)] rounded-none px-4 py-3`,children:[(0,V.jsx)(`div`,{"aria-hidden":`true`,className:`w-0.5 shrink-0 self-stretch rounded-full`,style:{backgroundColor:`var(--accent)`}}),(0,V.jsxs)(`span`,{className:`text-sm text-[var(--text-secondary)] leading-relaxed`,children:[`"`,e,`"`]})]},e))})]}),i&&(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`h3`,{className:`text-xs font-semibold text-[var(--text-muted)] uppercase tracking-wider mb-3`,children:`Before you start:`}),(0,V.jsx)(`ul`,{className:`space-y-1.5`,children:e.preconditions.map(e=>(0,V.jsxs)(`li`,{className:`flex items-start gap-2 text-sm text-[var(--text-secondary)]`,children:[(0,V.jsx)(`span`,{className:`shrink-0 text-[var(--text-muted)] mt-0.5`,children:`•`}),(0,V.jsx)(`span`,{children:e})]},e))})]}),(0,V.jsx)(kD,{name:t})]}):(0,V.jsx)(`p`,{className:`text-sm text-[var(--text-muted)] italic`,children:`No additional documentation available.`})}function kD({name:e}){let[t,n]=(0,B.useState)(!1),r=`Use the ${e} to [your goal]`;return(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`h3`,{className:`text-xs font-semibold text-[var(--text-muted)] uppercase tracking-wider mb-3`,children:`Start with this prompt`}),(0,V.jsxs)(`div`,{className:`flex items-center gap-3 border border-[var(--border)] px-4 py-3`,children:[(0,V.jsxs)(`span`,{className:`flex-1 text-sm text-[var(--text-secondary)] font-mono truncate`,children:[`"`,r,`"`]}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>{navigator.clipboard.writeText(r).then(()=>{n(!0),setTimeout(()=>n(!1),2e3)})},className:`shrink-0 text-xs font-mono text-[var(--accent)] hover:text-[var(--text-primary)] transition-colors`,children:t?`Copied!`:`Copy`})]})]})}function AD(){return(0,V.jsxs)(`div`,{className:`space-y-3 motion-safe:animate-pulse`,children:[(0,V.jsx)(`div`,{className:`h-3 w-16 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-4 w-full rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-4 w-5/6 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-4 w-4/6 rounded bg-[var(--bg-tertiary)]`})]})}function jD(){return(0,V.jsxs)(`div`,{className:`space-y-6 motion-safe:animate-pulse`,children:[(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`div`,{className:`h-6 w-1/2 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsx)(`div`,{className:`h-5 w-16 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-5 w-24 rounded bg-[var(--bg-tertiary)]`})]}),(0,V.jsx)(`div`,{className:`h-4 w-full rounded bg-[var(--bg-tertiary)]`})]}),(0,V.jsx)(AD,{})]})}function MD({message:e,is404:t,onRetry:n,onBack:r}){return(0,V.jsxs)(`div`,{className:`space-y-4 bg-[var(--bg-card)] border border-[var(--border)] p-4`,children:[(0,V.jsx)(`p`,{className:`text-sm text-[var(--error)]`,children:t?`Workflow not found.`:e}),(0,V.jsxs)(`div`,{className:`flex gap-3`,children:[!t&&(0,V.jsx)(`button`,{type:`button`,onClick:n,className:`text-sm text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors`,children:`Try again`}),(0,V.jsxs)(`button`,{type:`button`,onClick:r,"aria-label":`Back to workflows list`,className:`font-mono text-[10px] uppercase tracking-[0.25em] text-[var(--text-muted)] hover:text-[var(--accent)] transition-colors`,children:[`<`,` WORKFLOWS`]})]})]})}function ND(e){if(e.size<2)return 1;let t=new Set;for(let n of e.values())t.add(Math.round(n.getBoundingClientRect().top));if(t.size<2){let t=Math.round(e.get(0)?.getBoundingClientRect().top??0),n=0;for(let r of e.values())Math.round(r.getBoundingClientRect().top)===t&&n++;return Math.max(1,n)}let n=Math.round(e.get(0)?.getBoundingClientRect().top??0),r=0;for(let t of e.values())Math.round(t.getBoundingClientRect().top)===n&&r++;return Math.max(1,r)}function PD(e,t,n,r){if(n===0)return 0;let i=(e??(t>0?-1:n))+t;return r?(i%n+n)%n:Math.max(0,Math.min(n-1,i))}function FD(e,t,n,r,i){if(n===0)return 0;let a=e??0,o=a%r,s=Math.floor(a/r),c=Math.ceil(n/r),l=s+t;l=i?(l%c+c)%c:Math.max(0,Math.min(c-1,l));let u=l*r+o;return Math.min(u,n-1)}function ID({count:e,cols:t=`auto`,onActivate:n,loop:r=!0}){let[i,a]=(0,B.useState)(null),o=(0,B.useRef)(new Map),s=(0,B.useCallback)(e=>{a(e),e!==null&&o.current.get(e)?.focus()},[]),c=(0,B.useCallback)(()=>t===`auto`?ND(o.current):Math.max(1,t),[t]);return{focusedIndex:i,setFocusedIndex:s,getItemProps:(0,B.useCallback)(t=>({tabIndex:i===null?t===0?0:-1:i===t?0:-1,onFocus:()=>{a(t)},onKeyDown:i=>{let a=c(),o=null;switch(i.key){case`ArrowRight`:case`d`:case`D`:o=PD(t,1,e,r);break;case`ArrowLeft`:case`a`:case`A`:o=PD(t,-1,e,r);break;case`ArrowDown`:case`s`:case`S`:o=FD(t,1,e,a,r);break;case`ArrowUp`:case`w`:case`W`:o=FD(t,-1,e,a,r);break;case`Home`:o=0;break;case`End`:o=e-1;break;case`Enter`:case` `:i.preventDefault(),n?.(t);return;default:return}o!==null&&(i.preventDefault(),s(o))},ref:e=>{e?o.current.set(t,e):o.current.delete(t)}}),[i,e,r,c,n,s]),containerProps:{role:`grid`}}}function LD(e){let t=Qy(e),n=()=>{t.refetch()};return t.isLoading?{kind:`loading`}:t.error?t.error instanceof Uy&&t.error.status===404?{kind:`not_found`}:{kind:`error`,message:t.error instanceof Error?t.error.message:`Could not load workflow details.`,refetch:n}:t.data?{kind:`ready`,detail:t.data,refetch:n}:{kind:`loading`}}function RD(){let e=Xy();return{workflows:e.data?.workflows.filter(e=>!e.tags.includes(`routines`)),isLoading:e.isLoading,error:e.error instanceof Error?e.error:null,refetch:e.refetch}}function zD(e,t){if(!e)return{prevWorkflow:null,nextWorkflow:null};let n=t.findIndex(t=>t.id===e);return n===-1?{prevWorkflow:null,nextWorkflow:null}:{prevWorkflow:n>0?t[n-1]??null:null,nextWorkflow:n<t.length-1?t[n+1]??null:null}}function BD({workflowId:e,activeTag:t,onBack:n,onNavigateToWorkflow:r}){let i=LD(e),a=RD().workflows,o=(0,B.useRef)(null),s=(0,B.useRef)(null),c=(0,B.useRef)(r);c.current=r;let l=a??[],{prevWorkflow:u,nextWorkflow:d}=(0,B.useMemo)(()=>zD(e,l),[e,l]),f=u?()=>c.current(u.id):null,p=d?()=>c.current(d.id):null;o.current=f,s.current=p;let m=i.kind===`ready`;return(0,B.useEffect)(()=>{if(!m)return;function e(e){e.metaKey||e.ctrlKey||e.altKey||(e.key===`ArrowLeft`?(e.preventDefault(),o.current?.()):e.key===`ArrowRight`&&(e.preventDefault(),s.current?.()))}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[m]),{state:(0,B.useMemo)(()=>{let r=a?.find(t=>t.id===e)??void 0,o=t?CD[t]??t:null;if(i.kind===`not_found`)return{kind:`not_found`,onBack:n};if(i.kind===`error`)return{kind:`error`,message:i.message,onBack:n,onRetry:i.refetch};if(i.kind===`ready`){let t=i.detail;return{kind:`ready`,workflow:t,name:t.name??r?.name??e??``,description:t.description??r?.description??null,tags:t.tags??r?.tags??[],source:t.source??r?.source??null,activeTagLabel:o,adjacentWorkflows:l,onPrev:f,onNext:p,onBack:n}}return{kind:`loading`,cached:r??null,activeTagLabel:o,onBack:n}},[i,a,e,t,l,f,p,n])}}function VD(e){let t=new Set(SD.map(e=>e.id)),n=new Map,r=[];for(let i of e){let e=i.tags.find(e=>e!==`routines`&&t.has(e));if(e){let t=n.get(e)??[];t.push(i),n.set(e,t)}else r.push(i)}let i=SD.filter(e=>n.has(e.id)).map(e=>({tagId:e.id,label:e.label,workflows:n.get(e.id)}));return r.length>0&&i.push({tagId:null,label:`Other`,workflows:r}),i}function HD({viewModel:e}){let{state:t,dispatch:n,triggerRef:r,onCardSelect:i}=e,a=(0,B.useRef)(null),o=(0,B.useRef)(null),s=xD(),c=t.kind===`ready`?t.selectedWorkflowId:null;if((0,B.useEffect)(()=>{if(c){let e=requestAnimationFrame(()=>a.current?.focus());return()=>cancelAnimationFrame(e)}},[c]),t.kind===`loading`)return(0,V.jsx)(KD,{});if(t.kind===`error`)return(0,V.jsx)(qD,{message:t.message,onRetry:t.onRetry});let{selectedTag:l,selectedSource:u,hintVisible:d,filteredWorkflows:f,flatWorkflows:p,availableSources:m,sourceFilteredWorkflows:h,tagFilteredWorkflows:g}=t,_=new Set(SD.map(e=>e.id)),v=new Set(h.flatMap(e=>e.tags)),y=new Map(SD.map(e=>[e.id,h.filter(t=>t.tags.includes(e.id)).length])),b=h.filter(e=>!e.tags.some(e=>e!==`routines`&&_.has(e))).length,x=h.length,S=g.length;return(0,V.jsx)(UD,{selectedWorkflowId:c,selectedTag:l,selectedSource:u,hintVisible:d,filteredWorkflows:f,flatWorkflows:p,availableSources:m,tagsWithWorkflows:v,countByTag:y,otherCount:b,allTagCount:x,allSourceCount:S,countBySource:new Map(m.map(e=>[e.displayName,g.filter(t=>t.source.displayName===e.displayName).length])),currentIndex:p.findIndex(e=>e.id===c),dispatch:n,onCardSelect:i,triggerRef:r,modalPanelRef:a,scrollRef:o,modalTransition:s})}function UD({selectedWorkflowId:e,selectedTag:t,selectedSource:n,hintVisible:r,filteredWorkflows:i,flatWorkflows:a,availableSources:o,tagsWithWorkflows:s,countByTag:c,otherCount:l,allTagCount:u,allSourceCount:d,countBySource:f,currentIndex:p,dispatch:m,onCardSelect:h,modalPanelRef:g,scrollRef:_,modalTransition:v}){let y=BD({workflowId:e,activeTag:t,onBack:()=>m({type:`modal_closed`}),onNavigateToWorkflow:e=>m({type:`workflow_selected`,id:e})}),b=(0,B.useCallback)((t,n)=>{v.navigate(e,a,t,n,e=>{m({type:`workflow_selected`,id:e}),v.selectedWorkflowIdRef.current=e},_)},[a,e,v,m,_]);(0,B.useEffect)(()=>{if(!e)return;let t=[`ArrowLeft`,`ArrowRight`,`a`,`A`,`d`,`D`],n=[`ArrowUp`,`ArrowDown`,`w`,`W`,`s`,`S`],r=e=>{if(n.includes(e.key)){e.preventDefault(),e.stopPropagation();return}t.includes(e.key)&&(e.preventDefault(),e.stopPropagation(),b([`ArrowLeft`,`a`,`A`].includes(e.key)?`prev`:`next`,`horizontal`))};return document.addEventListener(`keydown`,r,{capture:!0}),()=>{document.removeEventListener(`keydown`,r,{capture:!0})}},[e,b]);let{getItemProps:x,containerProps:S}=ID({count:a.length,cols:`auto`,onActivate:(0,B.useCallback)(e=>{let t=a[e];if(!t)return;let n=document.activeElement;n instanceof HTMLButtonElement&&h(t.id,n)},[a,h])});return(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h1`,{className:`font-mono text-2xl font-bold uppercase tracking-[0.12em] leading-none`,style:{color:`var(--accent)`,textShadow:`0 0 28px rgba(244,196,48,0.35)`},children:`Workflows`}),(0,V.jsxs)(`p`,{className:`font-mono text-[10px] tracking-[0.25em] text-[var(--text-muted)] mt-1.5`,children:[`// `,i.length,` available`]})]}),(0,V.jsxs)(`div`,{role:`group`,"aria-label":`Filter workflows by category`,className:`flex flex-wrap gap-1.5`,children:[(0,V.jsx)(WD,{label:`All`,count:u,isActive:t===null,disabled:!1,onClick:()=>m({type:`tag_changed`,tag:null})}),SD.filter(e=>s.has(e.id)).map(e=>(0,V.jsx)(WD,{label:e.label,count:c.get(e.id)??0,isActive:t===e.id,disabled:!1,onClick:()=>m({type:`tag_changed`,tag:t===e.id?null:e.id})},e.id)),l>0&&(0,V.jsx)(WD,{label:`Other`,count:l,isActive:t===`__other__`,disabled:!1,onClick:()=>m({type:`tag_changed`,tag:t===`__other__`?null:`__other__`})})]}),o.length>1&&(0,V.jsxs)(`div`,{role:`group`,"aria-label":`Filter workflows by source`,className:`flex flex-wrap gap-1.5`,children:[(0,V.jsx)(WD,{label:`All Sources`,count:d,isActive:n===null,disabled:!1,onClick:()=>m({type:`source_changed`,source:null})}),o.map(e=>(0,V.jsx)(WD,{label:e.displayName,count:f.get(e.displayName)??0,isActive:n===e.displayName,disabled:!1,onClick:()=>m({type:`source_changed`,source:n===e.displayName?null:e.displayName})},e.id))]}),i.length===0?(0,V.jsxs)(`div`,{className:`py-8 text-center space-y-3`,children:[(0,V.jsx)(`p`,{className:`text-sm text-[var(--text-muted)]`,children:`No workflows in this category.`}),t!==null&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>m({type:`tag_changed`,tag:null}),className:`text-sm text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors`,children:`Clear filter`})]}):t===null?(0,V.jsx)(`div`,{className:`space-y-6`,children:(()=>{let t=0;return VD(i).map(n=>(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(wD,{label:n.label,count:n.workflows.length,showRule:!0}),(0,V.jsx)(`div`,{...S,className:`grid grid-cols-2 lg:grid-cols-3 gap-3`,children:n.workflows.map(n=>(0,V.jsx)(GD,{workflow:n,onSelect:e=>h(n.id,e),navProps:x(t++),isActive:n.id===e},n.id))})]},n.tagId??`__other__`))})()}):(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(wD,{label:t===`__other__`?`Other`:CD[t]??t,count:i.length,showRule:!0}),(0,V.jsx)(`div`,{...S,className:`grid grid-cols-2 lg:grid-cols-3 gap-3`,children:i.map((t,n)=>(0,V.jsx)(GD,{workflow:t,onSelect:e=>h(t.id,e),navProps:x(n),isActive:t.id===e},t.id))})]}),(0,V.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end justify-center p-4 pointer-events-none`,"aria-hidden":!e,children:[e&&(0,V.jsx)(`div`,{className:`absolute inset-0 pointer-events-auto`,style:{background:`rgba(0,0,0,0.22)`,backdropFilter:`blur(2px)`},onClick:()=>m({type:`modal_closed`})}),(0,V.jsx)(`div`,{ref:g,tabIndex:-1,role:`dialog`,"aria-modal":`true`,"aria-label":`Workflow detail${e?`: ${a.find(t=>t.id===e)?.name??``}`:``}`,className:`relative w-full max-w-3xl ${e?`pointer-events-auto`:`pointer-events-none`}${v.state.borderFlashing?` modal-border-flashing`:``}`,style:{height:`85vh`,transform:e?`translateY(0) scale(1)`:`translateY(24px) scale(0.97)`,opacity:+!!e,transition:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?`opacity 150ms ease-out`:`transform 250ms ease-out, opacity 250ms ease-out`,backdropFilter:`blur(2px)`,WebkitBackdropFilter:`blur(2px)`},children:(0,V.jsxs)(W,{cut:20,borderColor:`rgba(244, 196, 48, 0.45)`,background:`rgba(15, 19, 31, 0.50)`,dropShadow:`drop-shadow(0 4px 24px rgba(244,196,48,0.15))`,className:`h-full flex flex-col`,children:[v.state.scanline!==null&&(0,V.jsx)(`div`,{className:`modal-scanline`,"aria-hidden":`true`,style:{"--crt-offset":`${v.state.scanline.crtOffset}px`,"--glitch-y":`${v.state.scanline.glitchY}%`,"--glitch-y2":`${v.state.scanline.glitchY2}%`,"--glitch-w":`${v.state.scanline.glitchW}px`,"--glitch-w2":`${v.state.scanline.glitchW2}px`,clipPath:co(20)}},v.state.scanline.key),(0,V.jsxs)(`div`,{className:`flex items-center justify-between px-6 py-4 border-b border-[var(--border)] shrink-0 console-blueprint-grid`,style:{background:`rgba(15, 19, 31, 0.55)`},children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-[0.30em] text-[var(--text-secondary)]`,children:`Workflow`}),p>=0&&(0,V.jsxs)(`span`,{className:`font-mono text-[10px] tracking-[0.20em] text-[var(--text-secondary)]`,children:[`[ `,p+1,` / `,a.length,` ]`]}),(0,V.jsx)(`span`,{className:`font-mono text-[9px] tracking-[0.15em] text-[var(--text-secondary)] transition-opacity duration-600`,style:{opacity:r?.5:0},"aria-hidden":`true`,children:`[ A / D ] NAV`})]}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>m({type:`modal_closed`}),className:`text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors text-xl leading-none`,"aria-label":`Close`,children:`×`})]}),(0,V.jsxs)(`div`,{ref:_,className:`flex-1 overflow-auto overscroll-contain px-6 py-5 ${v.state.contentAnimClass}`,style:{"--text-muted":`var(--text-secondary)`},children:[(0,V.jsx)(`div`,{"aria-live":`polite`,"aria-atomic":`true`,className:`sr-only`,children:a.find(t=>t.id===e)?.name??``}),e&&(0,V.jsx)(ED,{viewModel:y})]})]})})]})]})}function WD({label:e,count:t,isActive:n,disabled:r,onClick:i}){return(0,V.jsxs)(`button`,{type:`button`,onClick:i,disabled:r,"aria-pressed":n,className:[`px-3 py-2 min-w-[44px] min-h-[44px] rounded-none text-xs font-medium transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2`,`disabled:opacity-50 disabled:cursor-not-allowed`,n?`border border-[var(--accent)] text-[var(--accent)] bg-transparent`:`text-[var(--text-muted)] hover:text-[var(--text-secondary)] hover:bg-[var(--bg-card)]`].join(` `),children:[e,` · `,t,n&&(0,V.jsx)(`span`,{className:`sr-only`,children:`(selected)`})]})}function GD({workflow:e,onSelect:t,navProps:n,isActive:r}){let i=e.tags.filter(e=>e!==`routines`).map(e=>CD[e]??e);return(0,V.jsx)(lo,{variant:`grid`,onClick:e=>t(e.currentTarget),"aria-label":[e.name,e.description,i.length>0?`Tag: ${i.join(`, `)}`:null,`Source: ${e.source.displayName}`].filter(Boolean).join(`. `),style:r?{borderColor:`var(--accent)`,boxShadow:`0 0 0 1px rgba(244,196,48,0.4), 0 0 16px rgba(244,196,48,0.12)`}:void 0,...n,children:(0,V.jsxs)(`div`,{className:`flex flex-col flex-1 p-4 gap-2 min-w-0`,children:[(0,V.jsx)(`p`,{className:`text-sm font-medium text-[var(--text-primary)] group-hover:text-[var(--accent)] transition-colors leading-snug line-clamp-2`,children:e.name}),(0,V.jsx)(`p`,{className:`text-xs text-[var(--text-secondary)] line-clamp-3 leading-relaxed flex-1`,children:e.description}),(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mt-auto pt-2 border-t border-[var(--border)]`,children:[(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:i.slice(0,1).map(e=>(0,V.jsx)(`span`,{className:`font-mono text-[9px] px-1.5 py-0.5 bg-[var(--bg-secondary)] text-[var(--text-muted)]`,children:e},e))}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[e.stepCount!=null&&e.stepCount>0&&(0,V.jsxs)(`span`,{className:`font-mono text-[9px] text-[var(--text-muted)]`,children:[e.stepCount,`s`]}),(0,V.jsxs)(`span`,{className:`font-mono text-[9px] text-[var(--text-muted)] max-w-[80px] truncate`,children:[`src: `,e.source.displayName]})]})]})]})})}function KD(){return(0,V.jsx)(`div`,{className:`space-y-6 motion-safe:animate-pulse`,children:[0,1].map(e=>(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(`div`,{className:`h-3 w-24 bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`flex-1 h-px bg-[var(--bg-tertiary)]`})]}),(0,V.jsx)(`div`,{className:`grid grid-cols-2 lg:grid-cols-3 gap-3`,children:[0,1,2,3,4,5].map(e=>(0,V.jsxs)(`div`,{className:`min-h-[160px] bg-[var(--bg-card)] border border-[var(--border)] flex flex-col`,children:[(0,V.jsx)(`div`,{className:`h-[3px] bg-[var(--bg-tertiary)]`}),(0,V.jsxs)(`div`,{className:`p-4 flex flex-col gap-2 flex-1`,children:[(0,V.jsx)(`div`,{className:`h-4 w-3/4 bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-full bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-5/6 bg-[var(--bg-tertiary)]`}),(0,V.jsxs)(`div`,{className:`mt-auto pt-2 border-t border-[var(--border)] flex justify-between`,children:[(0,V.jsx)(`div`,{className:`h-3 w-12 bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-16 bg-[var(--bg-tertiary)]`})]})]})]},e))})]},e))})}function qD({message:e,onRetry:t}){return(0,V.jsxs)(`div`,{className:`space-y-3 py-8 text-center`,children:[(0,V.jsx)(`p`,{className:`text-sm text-[var(--error)]`,children:e}),(0,V.jsx)(`button`,{type:`button`,onClick:t,className:`text-sm text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors`,children:`Try again`})]})}var JD=[{value:`recent`,label:`Recent first`,compareFn:(e,t)=>t.startedAtMs-e.startedAtMs},{value:`slowest`,label:`Slowest first`,compareFn:(e,t)=>t.durationMs-e.durationMs}],YD={success:{color:`var(--success)`,label:`OK`,isError:!1},error:{color:`var(--error)`,label:`Error`,isError:!0},unknown_tool:{color:`var(--warning)`,label:`Unknown`,isError:!0}};function XD(e,t){let n=JD.find(e=>e.value===t);return[...e].sort(n.compareFn)}function ZD(e){return e.reduce((e,t)=>Math.max(e,t.durationMs),0)}function QD(e){return e.filter(e=>YD[e.outcome].isError).length}function $D(e){return e.length===0?null:Math.round(e.reduce((e,t)=>e+t.durationMs,0)/e.length)}function eO(e){return e.length===0?null:e.reduce((e,t)=>Math.max(e,t.startedAtMs),0)}function tO(e,t){return t>0?Math.round(e/t*120):0}function nO(e){return`${e} recorded`}var rO=[{key:`tool`,label:`Tool`,minWidth:`180px`},{key:`duration`,label:`Duration`,width:`220px`},{key:`started`,label:`Started`,width:`100px`},{key:`outcome`,label:`Outcome`}];function iO({viewModel:e}){let{state:t}=e;if(t.kind===`loading`)return(0,V.jsx)(cO,{});if(t.kind===`devModeOff`)return(0,V.jsx)(`div`,{className:`flex items-center justify-center py-16`,children:(0,V.jsx)(`p`,{className:`text-sm text-[var(--text-muted)] text-center`,children:`nothing to see here`})});if(t.kind===`error`)return(0,V.jsxs)(`div`,{className:`space-y-3 py-8 text-center`,children:[(0,V.jsx)(`p`,{className:`text-sm text-[var(--error)]`,children:t.message}),(0,V.jsx)(`button`,{type:`button`,onClick:t.retry,className:`text-sm text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors`,children:`Try again`})]});let{sorted:n,maxDuration:r,errorCount:i,avgMs:a,lastCallMs:o,countLabel:s,sortOrder:c,onSortChange:l}=t;return(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(0,V.jsxs)(`p`,{className:`text-sm text-[var(--text-secondary)]`,children:[s,` | `,(0,V.jsxs)(`span`,{style:{color:i>0?`var(--error)`:`var(--text-muted)`},children:[i,` errors`]}),` | `,`avg `,a===null?`--`:`${a}ms`,` | `,`last call `,o===null?`no calls yet`:fo(o)]}),(0,V.jsx)(`div`,{role:`radiogroup`,"aria-label":`Sort order`,className:`flex items-center gap-1`,children:JD.map(e=>(0,V.jsx)(sO,{label:e.label,isActive:c===e.value,onClick:()=>l(e.value)},e.value))}),(0,V.jsxs)(`table`,{className:`w-full text-sm border-collapse`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsx)(`tr`,{className:`text-xs text-[var(--text-muted)] border-b border-[var(--border)]`,children:rO.map(e=>(0,V.jsx)(`th`,{scope:`col`,className:`text-left py-2 pr-4 font-medium`,style:{width:e.width,minWidth:e.minWidth},children:e.label},e.key))})}),(0,V.jsx)(`tbody`,{children:n.length===0?(0,V.jsx)(`tr`,{children:(0,V.jsx)(`td`,{colSpan:rO.length,className:`py-8 text-center text-sm text-[var(--text-muted)]`,children:`No tool calls recorded yet. Run a workflow to see timing data.`})}):n.map((e,t)=>(0,V.jsx)(aO,{obs:e,maxDuration:r},`${e.startedAtMs}-${e.toolName}-${t}`))})]})]})}function aO({obs:e,maxDuration:t}){let n=YD[e.outcome].isError,r=tO(e.durationMs,t);return(0,V.jsxs)(`tr`,{className:`border-b border-[var(--border)] hover:bg-[var(--bg-card)] transition-colors`,style:{borderLeft:n?`2px solid var(--error)`:`2px solid transparent`},children:[(0,V.jsx)(`td`,{className:`py-2 pr-4 font-mono text-[var(--text-primary)] overflow-hidden text-ellipsis`,title:e.toolName,style:{minWidth:`180px`,maxWidth:`240px`},children:(0,V.jsx)(`span`,{className:`block truncate`,children:e.toolName})}),(0,V.jsxs)(`td`,{className:`py-2 pr-4`,style:{width:`220px`},children:[(0,V.jsxs)(`span`,{className:`font-mono text-[var(--text-primary)]`,children:[e.durationMs,`ms`]}),(0,V.jsx)(`div`,{"aria-hidden":`true`,className:`h-1 rounded mt-1`,style:{backgroundColor:`var(--accent)`,width:`${r}px`,maxWidth:`120px`}})]}),(0,V.jsx)(`td`,{className:`py-2 pr-4 text-[var(--text-secondary)]`,style:{width:`100px`},children:fo(e.startedAtMs)}),(0,V.jsx)(`td`,{className:`py-2`,children:(0,V.jsx)(oO,{outcome:e.outcome})})]})}function oO({outcome:e}){let t=YD[e];return(0,V.jsx)(`span`,{className:`inline-block px-2 py-0.5 rounded text-xs font-medium`,style:{color:t.color,backgroundColor:`color-mix(in srgb, ${t.color} 12%, transparent)`},children:t.label})}function sO({label:e,isActive:t,onClick:n}){return(0,V.jsx)(`button`,{type:`button`,role:`radio`,onClick:n,"aria-checked":t,className:[`px-3 py-2 rounded text-xs font-medium min-w-[44px] transition-colors`,t?`text-[var(--text-primary)]`:`text-[var(--text-muted)] hover:text-[var(--text-secondary)]`].join(` `),children:e})}function cO(){return(0,V.jsxs)(`div`,{className:`space-y-3 animate-pulse`,"aria-busy":`true`,"aria-label":`Loading performance data`,children:[(0,V.jsx)(`div`,{className:`h-4 w-64 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsxs)(`div`,{className:`flex gap-1`,children:[(0,V.jsx)(`div`,{className:`h-8 w-24 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-8 w-24 rounded bg-[var(--bg-tertiary)]`})]}),(0,V.jsxs)(`div`,{className:`flex gap-4 border-b border-[var(--border)] pb-2`,children:[(0,V.jsx)(`div`,{className:`h-3 w-20 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-16 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-14 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-3 w-14 rounded bg-[var(--bg-tertiary)]`})]}),Array.from({length:8}).map((e,t)=>(0,V.jsxs)(`div`,{className:`flex gap-4 py-2`,children:[(0,V.jsx)(`div`,{className:`h-4 rounded bg-[var(--bg-tertiary)]`,style:{minWidth:`180px`,width:`180px`}}),(0,V.jsxs)(`div`,{className:`space-y-1`,style:{width:`220px`},children:[(0,V.jsx)(`div`,{className:`h-4 w-16 rounded bg-[var(--bg-tertiary)]`}),(0,V.jsx)(`div`,{className:`h-1 w-20 rounded bg-[var(--bg-tertiary)]`})]}),(0,V.jsx)(`div`,{className:`h-4 w-16 rounded bg-[var(--bg-tertiary)]`,style:{width:`100px`}}),(0,V.jsx)(`div`,{className:`h-5 w-12 rounded bg-[var(--bg-tertiary)]`})]},t))]})}var lO=`workrail:auto:mru-workflow`;function uO(){try{return localStorage.getItem(lO)}catch{return null}}function dO(e){try{localStorage.setItem(lO,e)}catch{}}function fO(){let e=Xy(),t=$y(),n=e.data?.workflows??[],r=t.data?.triggers??[],[i,a]=(0,B.useState)(()=>uO()??``),[o,s]=(0,B.useState)(``),[c,l]=(0,B.useState)(``),[u,d]=(0,B.useState)(!1),[f,p]=(0,B.useState)(null),[m,h]=(0,B.useState)(!1),[g,_]=(0,B.useState)(!0),v=(0,B.useRef)(null);(0,B.useEffect)(()=>{!i&&n.length>0&&a(n[0]?.id??``)},[i,n]);let y=e=>{a(e),dO(e)},b=async()=>{if(!(!i||!c.trim()||!o.trim())){d(!0),p(null),h(!1);try{await eb({workflowId:i,goal:c.trim(),workspacePath:o.trim()}),h(!0),l(``),setTimeout(()=>v.current?.focus(),100)}catch(e){p(e instanceof Error?e.message:`Dispatch failed`)}finally{d(!1)}}},x=!!i&&!!c.trim()&&!!o.trim()&&!u;return(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,V.jsx)(Ko,{color:`var(--accent)`,children:`Dispatch`})}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(Ko,{children:`Workflow`}),e.isLoading?(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] text-xs`,children:`Loading workflows...`}):n.length===0?(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] text-xs`,children:`No workflows available`}):(0,V.jsx)(`select`,{value:i,onChange:e=>y(e.target.value),className:`w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-md px-3 py-2 text-sm text-[var(--text-primary)] focus:outline-none focus:border-[var(--accent)] cursor-pointer`,children:n.map(e=>(0,V.jsx)(`option`,{value:e.id,children:e.name??e.id},e.id))})]}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(Ko,{children:`Workspace path`}),(0,V.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`/path/to/repo`,className:`w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-md px-3 py-2 text-sm font-mono text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none focus:border-[var(--accent)]`})]}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(Ko,{children:`Goal`}),(0,V.jsx)(`textarea`,{ref:v,value:c,onChange:e=>l(e.target.value),placeholder:`// describe the task...`,rows:4,className:`w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-md px-3 py-2 text-sm font-mono text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none focus:border-[var(--accent)] resize-y`,onKeyDown:e=>{(e.ctrlKey||e.metaKey)&&e.key===`Enter`&&x&&(e.preventDefault(),b())}})]}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,V.jsx)(`button`,{onClick:()=>void b(),disabled:!x,className:`self-start disabled:opacity-40 disabled:cursor-not-allowed cursor-pointer`,children:(0,V.jsx)(no,{label:u?`RUNNING...`:`RUN`,color:x?`var(--accent)`:void 0,pulse:u})}),m&&(0,V.jsx)(`div`,{className:`text-[var(--success)] font-mono text-[10px] uppercase tracking-[0.20em]`,children:`Dispatched -- check Queue pane`}),f&&(0,V.jsx)(`div`,{className:`text-[var(--error)] text-xs font-mono`,children:f})]}),(0,V.jsxs)(`div`,{className:`border-t border-[var(--border)] pt-4`,children:[(0,V.jsxs)(`button`,{onClick:()=>_(!g),className:`flex items-center gap-2 mb-2 cursor-pointer group`,children:[(0,V.jsx)(`span`,{className:`text-[var(--text-muted)] text-xs transition-transform duration-150`,style:{transform:g?`rotate(-90deg)`:`rotate(0deg)`},children:`▼`}),(0,V.jsx)(no,{label:`TRIGGERS`,color:`var(--text-secondary)`}),r.length>0&&(0,V.jsxs)(`span`,{className:`text-xs text-[var(--text-muted)]`,children:[`(`,r.length,`)`]})]}),!g&&(0,V.jsx)(`div`,{className:`space-y-2`,children:t.isLoading?(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] text-xs pl-4`,children:`Loading triggers...`}):r.length===0?(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] text-xs pl-4`,children:`No triggers configured. Set WORKRAIL_TRIGGERS_ENABLED=true and create triggers.yml.`}):r.map(e=>(0,V.jsxs)(`div`,{className:`pl-4 border-l-2 border-[var(--border)] text-xs space-y-0.5`,children:[(0,V.jsx)(`div`,{className:`font-mono text-[var(--text-primary)] text-[11px]`,children:e.id}),(0,V.jsx)(`div`,{className:`text-[var(--text-muted)]`,children:e.workflowId}),(0,V.jsx)(`div`,{className:`text-[var(--text-muted)] truncate`,children:e.goal})]},e.id))})]})]})}function pO(e){let t=0,n=0,r=0;for(let i of e)i.status===`in_progress`?t++:i.status===`blocked`?n++:(i.status===`complete`||i.status===`complete_with_gaps`)&&r++;return{running:t,blocked:n,completed:r}}function mO(){let{data:e,isLoading:t,isError:n}=Gy(),r=(e?.sessions??[]).filter(e=>e.isAutonomous),{running:i,blocked:a,completed:o}=pO(r);return t?(0,V.jsx)(`div`,{className:`flex items-center justify-center py-20`,children:(0,V.jsx)(`div`,{className:`text-[var(--text-secondary)] text-sm`,children:`Loading sessions...`})}):n?(0,V.jsx)(`div`,{className:`text-[var(--error)] bg-[var(--bg-card)] rounded-lg p-4 text-sm`,children:`Failed to load sessions`}):(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,V.jsx)(Ko,{color:`var(--accent)`,children:`Queue`})}),(0,V.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,V.jsx)(hO,{count:i,label:`RUNNING`,color:`var(--accent)`,pulse:!0}),(0,V.jsx)(hO,{count:a,label:`BLOCKED`,color:`var(--blocked)`}),(0,V.jsx)(hO,{count:o,label:`COMPLETED`,color:`var(--success)`})]}),r.length===0?(0,V.jsxs)(`div`,{className:`text-center py-16`,children:[(0,V.jsx)(`p`,{className:`text-[var(--text-secondary)] text-sm`,children:`No autonomous sessions yet`}),(0,V.jsx)(`p`,{className:`text-[var(--text-muted)] text-xs mt-1`,children:`Dispatch a workflow from the left pane to start.`})]}):(0,V.jsx)(`div`,{className:`space-y-2`,children:r.map(e=>(0,V.jsx)(gO,{session:e},e.sessionId))})]})}function hO({count:e,label:t,color:n,pulse:r}){return(0,V.jsx)(no,{label:`${e} ${t}`,color:e>0?n:`var(--text-muted)`,pulse:r&&e>0})}function gO({session:e}){let[t,n]=(0,B.useState)(!1),r=wi(),i=e.sessionTitle??e.workflowName??e.workflowId??`Unnamed session`,a=fo(e.lastModifiedMs);return(0,V.jsxs)(`div`,{className:`bg-[var(--bg-card)] border border-[var(--border)] rounded-lg overflow-hidden`,children:[(0,V.jsxs)(`button`,{onClick:()=>n(!t),className:`w-full px-4 py-3 flex items-center gap-3 text-left cursor-pointer hover:bg-[var(--bg-secondary)] transition-colors group`,children:[(0,V.jsx)(`span`,{className:`text-[var(--text-muted)] text-xs transition-transform duration-150 shrink-0`,style:{transform:t?`rotate(90deg)`:`rotate(0deg)`},children:`▶`}),(0,V.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,V.jsx)(`div`,{className:`text-sm font-medium text-[var(--text-primary)] truncate group-hover:text-[var(--accent)] transition-colors`,children:i}),(0,V.jsx)(`div`,{className:`font-mono text-[10px] text-[var(--text-muted)] opacity-60 truncate`,children:e.sessionId})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,V.jsx)(`span`,{className:`text-[10px] text-[var(--text-muted)] tabular-nums`,children:a}),e.isLive&&(0,V.jsx)(no,{label:`LIVE`,pulse:!0,color:`var(--accent)`,"aria-label":`Actively running`}),(0,V.jsx)(io,{status:e.status})]})]}),t&&(0,V.jsxs)(`div`,{className:`px-4 pb-4 border-t border-[var(--border)] pt-3 space-y-3`,children:[e.recapSnippet?(0,V.jsx)(`div`,{className:`text-xs text-[var(--text-secondary)] font-mono whitespace-pre-wrap leading-relaxed`,children:e.recapSnippet}):(0,V.jsx)(`div`,{className:`text-xs text-[var(--text-muted)]`,children:`No recap available yet.`}),(0,V.jsx)(`button`,{onClick:()=>void r({to:`/session/$sessionId`,params:{sessionId:e.sessionId}}),className:`cursor-pointer`,children:(0,V.jsx)(no,{label:`OPEN IN DAG`,color:`var(--accent)`})})]})]})}function _O(){return(0,V.jsxs)(`div`,{className:`flex flex-col md:flex-row gap-6`,children:[(0,V.jsx)(`div`,{className:`w-full md:w-2/5 shrink-0`,children:(0,V.jsx)(fO,{})}),(0,V.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,V.jsx)(mO,{})})]})}function vO(){let e=Gy(),t=Yy();tb();let n=e.data?.sessions;return{sessions:n,worktreeRepos:t.data?.repos??[],isLoading:e.isLoading,error:e.error instanceof Error?e.error:null,refetch:e.refetch,worktreesFetching:t.isFetching,liveCount:n?.filter(e=>e.status===`in_progress`).length??0,blockedCount:n?.filter(e=>e.status===`blocked`).length??0}}var yO={scope:`active`,focusedIndex:-1,archive:null};function bO(e){throw Error(`Unhandled WorkspaceEvent type: ${String(e.type)}`)}function xO(e,t){switch(t.type){case`scope_changed`:return{...e,scope:t.scope,focusedIndex:-1};case`focus_moved`:return{...e,focusedIndex:t.index};case`archive_opened`:return{...e,archive:{repoName:t.repoName}};case`archive_closed`:return{...e,archive:null};default:return bO(t)}}var SO=720*60*60*1e3,CO={in_progress:0,dormant:0,blocked:1,complete_with_gaps:2,complete:3};function wO(e){if(e.length!==0)return[...e].sort((e,t)=>{let n=CO[e.status]-CO[t.status];return n===0?t.lastModifiedMs-e.lastModifiedMs:n})[0]}function TO(e,t,n){let r=e.primarySession?.status;if(r===`in_progress`||r===`blocked`)return`visible`;let i=(e.worktree?.changedCount??0)>0,a=(e.worktree?.aheadCount??0)>0;return i||a?`visible`:r===`dormant`?t===`all`?`visible`:`hidden`:n-e.activityMs<SO||t===`all`?`visible`:`hidden`}function EO(e){switch(e.primarySession?.status){case`in_progress`:return 0;case`blocked`:return 1;case`dormant`:return 2;default:return(e.worktree?.changedCount??0)>0||(e.worktree?.aheadCount??0)>0?3:4}}function DO(e,t,n){return[...e].filter(e=>TO(e,t,n)===`visible`).sort((e,t)=>{let n=EO(e)-EO(t);return n===0?t.activityMs-e.activityMs:n})}function OO(e,t){let n=new Map;for(let e of t)for(let t of e.worktrees)t.branch!==null&&n.set(`${t.branch}\0${e.repoRoot}`,{wt:t,repoName:e.repoName,repoRoot:e.repoRoot});let r=new Map;for(let[e,t]of n){let[n]=e.split(`\0`),i=r.get(n)??[];i.push(t),r.set(n,i)}let i=new Map;for(let t of e){if(t.gitBranch===null)continue;let e=r.get(t.gitBranch)??[];if(e.length===0){if(!t.repoRoot)continue;let e=`${t.gitBranch}\0${t.repoRoot}`,r=i.get(e);if(r?r.push(t):i.set(e,[t]),!n.has(e)){let r=t.repoRoot.split(`/`).at(-1)??t.repoRoot;n.set(e,{wt:void 0,repoName:r,repoRoot:t.repoRoot})}continue}let a=e;if(t.repoRoot!==null){let n=e.filter(e=>e.repoRoot===t.repoRoot);n.length>0&&(a=n)}for(let e of a){let n=`${t.gitBranch}\0${e.repoRoot}`,r=i.get(n);r?r.push(t):i.set(n,[t])}}let a=[],o=new Set;for(let[e,t]of i){let[r,i]=e.split(`\0`),s=n.get(e),c=wO(t),l=Math.max(c?.lastModifiedMs??0,s?.wt?.headTimestampMs??0),u=s?.repoName??i.split(`/`).at(-1)??i;a.push({branch:r,repoRoot:i,repoName:u,worktree:s?.wt,primarySession:c,allSessions:t,activityMs:l}),o.add(e)}for(let[e,{wt:t,repoName:r,repoRoot:i}]of n){if(o.has(e))continue;let[n]=e.split(`\0`);a.push({branch:n,repoRoot:i,repoName:r,worktree:t,primarySession:void 0,allSessions:[],activityMs:t?.headTimestampMs??0})}return a}function kO(e,t,n,r){let i=OO(e,t),a=new Map;for(let e of i)a.has(e.repoRoot)||a.set(e.repoRoot,e.repoName);let o=new Map;for(let e of i){let t=o.get(e.repoRoot)??[];t.push(e),o.set(e.repoRoot,t)}let s=[...o.entries()].map(([e,t])=>({repoRoot:e,repoName:t[0].repoName,sortedItems:DO(t,n,r)})).filter(e=>e.sortedItems.length>0).sort((e,t)=>{let n=+!e.sortedItems.some(e=>e.primarySession?.status===`in_progress`||e.primarySession?.status===`blocked`),r=+!t.sortedItems.some(e=>e.primarySession?.status===`in_progress`||e.primarySession?.status===`blocked`);return n===r?e.repoName.localeCompare(t.repoName):n-r}),c=s.flatMap(e=>e.sortedItems),l=n===`active`?i.filter(e=>e.primarySession?.status===`dormant`&&(e.worktree?.changedCount??0)===0&&(e.worktree?.aheadCount??0)===0).length:0;return{repoGroups:s,orderedItems:c,archiveRepos:[...a.entries()].map(([e,t])=>[e,t]),dormantHiddenCount:l}}function AO({items:e,focusedIndex:t,scope:n,archive:r,dispatch:i,onSelectSession:a,onRefetch:o,disabled:s}){let c=(0,B.useRef)(e);c.current=e;let l=(0,B.useRef)(t);l.current=t;let u=(0,B.useRef)(n);u.current=n;let d=(0,B.useRef)(r);d.current=r;let f=(0,B.useRef)(s);f.current=s;let p=(0,B.useRef)(i);p.current=i;let m=(0,B.useRef)(a);m.current=a;let h=(0,B.useRef)(o);h.current=o,(0,B.useEffect)(()=>{function e(e){if(f.current||e.metaKey||e.ctrlKey||e.altKey)return;let t=document.activeElement;if(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)return;let n=c.current,r=l.current;switch(e.key){case`j`:case`ArrowDown`:e.preventDefault(),p.current({type:`focus_moved`,index:Math.min(r+1,n.length-1)});break;case`k`:case`ArrowUp`:e.preventDefault(),p.current({type:`focus_moved`,index:Math.max(r-1,0)});break;case`Enter`:case` `:if(e.preventDefault(),r>=0&&r<n.length){let e=n[r]?.primarySession?.sessionId;e&&m.current(e)}break;case`Escape`:d.current!==null&&p.current({type:`archive_closed`});break;case`/`:e.preventDefault(),p.current({type:`archive_opened`,repoName:void 0});break;case`r`:e.preventDefault(),h.current();break;case`a`:e.preventDefault(),p.current({type:`scope_changed`,scope:u.current===`active`?`all`:`active`});break}}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[])}function jO(e=!1){let t=wi(),n=vO(),[r,i]=(0,B.useReducer)(xO,yO),a=(0,B.useRef)(0),o=(0,B.useCallback)(e=>{a.current=window.scrollY,t({to:`/session/$sessionId`,params:{sessionId:e}})},[t]),s=i,c=(0,B.useMemo)(()=>n.sessions?kO(n.sessions,n.worktreeRepos,r.scope,Date.now()):null,[n.sessions,n.worktreeRepos,r.scope]);AO({items:c?.orderedItems??[],focusedIndex:r.focusedIndex,scope:r.scope,archive:r.archive,dispatch:s,onSelectSession:o,onRefetch:n.refetch,disabled:e});let{isLoading:l,error:u,worktreesFetching:d,sessions:f,liveCount:p,blockedCount:m}=n;return{state:(0,B.useMemo)(()=>l?{kind:`loading`}:u?{kind:`error`,message:u.message}:c?{kind:`ready`,scope:r.scope,focusedIndex:r.focusedIndex,archive:r.archive,repoGroups:c.repoGroups,orderedItems:c.orderedItems,archiveRepos:c.archiveRepos,dormantHiddenCount:c.dormantHiddenCount,worktreesFetching:d,hasAnySessions:(f?.length??0)>0,liveCount:p,blockedCount:m}:{kind:`loading`},[l,u,d,f,c,r,p,m]),dispatch:s,scrollYRef:a,onSelectSession:o}}function MO(){let e=Gy();return{sessions:e.data?.sessions,isLoading:e.isLoading,error:e.error instanceof Error?e.error:null}}function NO(e=``){return{rawSearch:e,sort:`recent`,groupBy:`none`,statusFilter:`all`,page:0,viewMode:`flat`}}function PO(e){throw Error(`Unhandled SessionListEvent type: ${String(e.type)}`)}function FO(e,t){switch(t.type){case`search_changed`:return{...e,rawSearch:t.value,page:0};case`sort_changed`:return{...e,sort:t.sort,page:0};case`group_changed`:return{...e,groupBy:t.groupBy,page:0};case`status_changed`:return{...e,statusFilter:t.statusFilter,page:0};case`page_changed`:return{...e,page:t.page};case`view_mode_changed`:return t.viewMode===`tree`?{...e,viewMode:`tree`,rawSearch:``,statusFilter:`all`,page:0}:{...e,viewMode:`flat`,page:0};default:return PO(t)}}var IO={in_progress:0,blocked:1,dormant:2,complete_with_gaps:3,complete:4},LO=[{value:`recent`,label:`Recent`,compareFn:(e,t)=>t.lastModifiedMs-e.lastModifiedMs},{value:`status`,label:`Status`,compareFn:(e,t)=>IO[e.status]-IO[t.status]||t.lastModifiedMs-e.lastModifiedMs},{value:`workflow`,label:`Workflow`,compareFn:(e,t)=>(e.workflowName??e.workflowId??``).localeCompare(t.workflowName??t.workflowId??``)||t.lastModifiedMs-e.lastModifiedMs},{value:`nodes`,label:`Node count`,compareFn:(e,t)=>t.nodeCount-e.nodeCount||t.lastModifiedMs-e.lastModifiedMs}],RO=[{value:`none`,label:`No grouping`,keyFn:null},{value:`workflow`,label:`Workflow`,keyFn:e=>e.workflowName??e.workflowId??`Unknown workflow`},{value:`status`,label:`Status`,keyFn:e=>e.status,groupCompareFn:(e,t)=>(IO[e]??99)-(IO[t]??99)},{value:`branch`,label:`Branch`,keyFn:e=>e.gitBranch??`No branch`}],zO=[{value:`all`,label:`All`},{value:`in_progress`,label:`In Progress`},{value:`dormant`,label:`Dormant`},{value:`complete`,label:`Complete`},{value:`complete_with_gaps`,label:`Gaps`},{value:`blocked`,label:`Blocked`}];function BO(e,t,n){let r=e;if(n!==`all`&&(r=r.filter(e=>e.status===n)),t.trim()){let e=t.toLowerCase();r=r.filter(t=>(t.sessionTitle??``).toLowerCase().includes(e)||(t.workflowName??``).toLowerCase().includes(e)||(t.workflowId??``).toLowerCase().includes(e)||t.sessionId.toLowerCase().includes(e)||(t.gitBranch??``).toLowerCase().includes(e))}return r}function VO(e,t){let n=LO.find(e=>e.value===t)??LO[0];return[...e].sort(n.compareFn)}function HO(e,t){let n=RO.find(e=>e.value===t)??RO[0];if(!n.keyFn)return[{label:``,sessions:e}];let r=new Map;for(let t of e){let e=n.keyFn(t),i=r.get(e)??[];i.push(t),r.set(e,i)}let i=n.groupCompareFn??((e,t)=>e.localeCompare(t));return Array.from(r.entries()).sort(([e],[t])=>i(e,t)).map(([e,t])=>({label:e,sessions:t}))}function UO(e){let t={all:e.length};for(let n of e)t[n.status]=(t[n.status]??0)+1;return t}function WO(e){let t=new Set(e.map(e=>e.sessionId)),n=new Map,r=new Set,i=new Set;for(let a of e){let e=a.parentSessionId;if(!e||e===a.sessionId)continue;if(!t.has(e)){r.add(a.sessionId);continue}i.add(a.sessionId);let o=n.get(e)??[];o.push(a),n.set(e,o)}let a=[];for(let t of e)i.has(t.sessionId)||a.push({session:t,children:n.get(t.sessionId)??[]});return{roots:a,orphanChildIds:r}}function GO(e,t){let[n,r]=(0,B.useState)(e),i=(0,B.useRef)(null);return(0,B.useEffect)(()=>(i.current!==null&&clearTimeout(i.current),i.current=setTimeout(()=>r(e),t),()=>{i.current!==null&&clearTimeout(i.current)}),[e,t]),n}function KO({onSelectSession:e,initialSearch:t=``}){let n=MO(),[r,i]=(0,B.useReducer)(FO,void 0,()=>NO(t)),a=GO(r.rawSearch,200),o=(0,B.useRef)([]),s=(0,B.useCallback)(t=>{let n=o.current[t];n&&e(n.sessionId)},[e]),{sessions:c,isLoading:l,error:u}=n,d=(0,B.useMemo)(()=>c?UO(c):{},[c]),f=(0,B.useMemo)(()=>{if(!c)return null;let e=BO(c,a,r.statusFilter);return{groups:HO(VO(e,r.sort),r.groupBy),total:c.length,filtered:e.length}},[c,a,r.statusFilter,r.sort,r.groupBy]),p=(0,B.useMemo)(()=>WO(c||[]),[c]),m=r.groupBy!==`none`,h=f?Math.ceil(f.filtered/25):0,g=r.page*25,_=g+25,v=(0,B.useMemo)(()=>!f||m?[]:f.groups[0]?.sessions.slice(g,_)??[],[f,m,g,_]);o.current=v;let{getItemProps:y,containerProps:b}=ID({count:v.length,cols:1,onActivate:s});return{state:(0,B.useMemo)(()=>l?{kind:`loading`}:u?{kind:`error`,message:u.message}:f?{kind:`ready`,rawSearch:r.rawSearch,sort:r.sort,groupBy:r.groupBy,statusFilter:r.statusFilter,page:r.page,totalPages:h,isGrouped:m,processed:f,statusCounts:d,flatPageSessions:v,getSessionNavProps:y,sessionContainerProps:b,sortAxes:LO,groupAxes:RO,statusFilterOptions:zO,viewMode:r.viewMode,sessionTree:p}:{kind:`loading`},[l,u,f,r,h,m,d,v,y,b,p]),dispatch:i,onSelectSession:e}}var qO={selectedWorkflowId:null,selectedTag:null,selectedSource:null,hintVisible:!1};function JO(e){throw Error(`Unhandled WorkflowsEvent type: ${String(e.type)}`)}function YO(e,t){switch(t.type){case`workflow_selected`:return{...e,selectedWorkflowId:t.id,hintVisible:t.id!==null};case`tag_changed`:return{...e,selectedTag:t.tag,selectedWorkflowId:null,hintVisible:!1};case`source_changed`:return{...e,selectedSource:t.source,selectedWorkflowId:null,hintVisible:!1};case`modal_closed`:return{...e,selectedWorkflowId:null,hintVisible:!1};case`hint_dismissed`:return{...e,hintVisible:!1};default:return JO(t)}}function XO(e){let t=new Set;for(let n of e)for(let e of n.tags)e!==`routines`&&t.add(e);let n=SD.map(e=>e.id).filter(e=>t.has(e)),r=[...t].filter(e=>!SD.some(t=>t.id===e)).sort();return[...n,...r]}function ZO(e){let t=new Map;for(let n of e)t.has(n.source.kind)||t.set(n.source.kind,{id:n.source.kind,displayName:n.source.displayName});return[...t.values()]}function QO(e,t,n){let r=new Set(SD.map(e=>e.id)),i=e;return t!==null&&(i=t===`__other__`?i.filter(e=>!e.tags.some(e=>e!==`routines`&&r.has(e))):i.filter(e=>e.tags.includes(t))),n!==null&&(i=i.filter(e=>e.source.displayName===n)),i}function $O(e,t){if(t!==null)return e;let n=new Set(SD.map(e=>e.id)),r=new Map,i=[];for(let t of e){let e=t.tags.find(e=>e!==`routines`&&n.has(e));if(e){let n=r.get(e)??[];n.push(t),r.set(e,n)}else i.push(t)}let a=[];for(let{id:e}of SD){let t=r.get(e);t&&a.push(...t)}return a.push(...i),a}function ek({initialTag:e,onSelectTag:t}){let n=RD(),[r,i]=(0,B.useReducer)(YO,{...qO,selectedTag:e});(0,B.useEffect)(()=>{e!==r.selectedTag&&i({type:`tag_changed`,tag:e})},[e]);let a=(0,B.useRef)(null),o=(0,B.useCallback)((e,t)=>{a.current=t,t.blur(),i({type:`workflow_selected`,id:e})},[]);(0,B.useEffect)(()=>{if(!r.selectedWorkflowId&&a.current){let e=a.current;a.current=null,e.focus()}},[r.selectedWorkflowId]),(0,B.useEffect)(()=>{if(!r.selectedWorkflowId)return;let e=window.scrollY;return document.body.style.overflow=`hidden`,document.body.style.position=`fixed`,document.body.style.top=`-${e}px`,document.body.style.width=`100%`,()=>{document.body.style.overflow=``,document.body.style.position=``,document.body.style.top=``,document.body.style.width=``,window.scrollTo(0,e)}},[r.selectedWorkflowId]),(0,B.useEffect)(()=>{if(!r.selectedWorkflowId)return;let e=e=>{e.key===`Escape`&&i({type:`modal_closed`})};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[r.selectedWorkflowId]);let{isLoading:s,error:c,workflows:l}=n,u=(0,B.useMemo)(()=>{if(s)return{kind:`loading`};if(c)return{kind:`error`,message:c.message,onRetry:n.refetch};if(!l)return{kind:`loading`};let e=XO(l),t=ZO(l),i=QO(l,r.selectedTag,r.selectedSource),a=$O(i,r.selectedTag),o=QO(l,null,r.selectedSource),u=QO(l,r.selectedTag,null);return{kind:`ready`,selectedWorkflowId:r.selectedWorkflowId,selectedTag:r.selectedTag,selectedSource:r.selectedSource,hintVisible:r.hintVisible,availableTags:e,availableSources:t,filteredWorkflows:i,flatWorkflows:a,sourceFilteredWorkflows:o,tagFilteredWorkflows:u}},[s,c,l,r,n.refetch]),d=u.kind===`ready`?u.flatWorkflows.length:0;return(0,B.useEffect)(()=>{if(!r.selectedWorkflowId||d<=1)return;let e=setTimeout(()=>i({type:`hint_dismissed`}),3e3);return()=>clearTimeout(e)},[r.selectedWorkflowId,d]),{state:u,dispatch:(0,B.useCallback)(e=>{e.type===`tag_changed`&&t(e.tag),i(e)},[t]),triggerRef:a,onCardSelect:o}}function tk(){let e=Zy();switch(e.state){case`loading`:return{kind:`loading`};case`devModeOff`:return{kind:`devModeOff`};case`error`:return{kind:`error`,message:e.message,retry:e.retry};case`data`:return{kind:`ready`,observations:e.data.observations}}}function nk(){let e=tk(),[t,n]=(0,B.useState)(`recent`);return{state:(0,B.useMemo)(()=>{if(e.kind===`loading`)return{kind:`loading`};if(e.kind===`devModeOff`)return{kind:`devModeOff`};if(e.kind===`error`)return{kind:`error`,message:e.message,retry:e.retry};let{observations:r}=e,i=XD(r,t);return{kind:`ready`,sorted:i,maxDuration:ZD(i),errorCount:QD(r),avgMs:$D(r),lastCallMs:eO(r),countLabel:nO(r.length),sortOrder:t,onSortChange:n}},[e,t])}}function rk(e){let t=Ky(e);return{data:t.data,isLoading:t.isLoading,error:t.error instanceof Error?t.error:null}}function ik(e){let t=rk(e),[n,r]=(0,B.useState)(null),i=(0,B.useCallback)((e,t)=>{r(n=>n?.runId===e&&n?.nodeId===t?null:{runId:e,nodeId:t})},[]),a=(0,B.useCallback)(()=>{r(null)},[]),{isLoading:o,error:s,data:c}=t,l=(0,B.useMemo)(()=>!c||!n?null:c.runs.find(e=>e.runId===n.runId)??null,[c,n]);return{state:(0,B.useMemo)(()=>o?{kind:`loading`}:s?{kind:`error`,message:s.message}:c?{kind:`ready`,sessionId:e,data:c,selectedNode:n,selectedRun:l}:{kind:`loading`},[o,s,c,e,n,l]),onSelectNode:i,onCloseNode:a}}var ak=[{id:`workspace`,path:`/`},{id:`workflows`,path:`/workflows`},{id:`auto`,path:`/auto`},{id:`perf`,path:`/perf`}];function ok(){let e=wi(),t=ta(),{location:n}=sa(),r=t({to:`/session/$sessionId`}),i=t({to:`/workflows`}),a=t({to:`/workflows/$workflowId`}),o=t({to:`/perf`}),s=t({to:`/auto`}),c=i!==!1||a!==!1?`workflows`:o===!1?s===!1?`workspace`:`auto`:`perf`,l=r!==!1,u=a!==!1,d=l?r.sessionId:null,f=u?a.workflowId:null,p=new URLSearchParams(n.search).get(`tag`),m=jO(l),h=KO({onSelectSession:m.onSelectSession}),g=m.state.kind===`ready`?m.state.liveCount:0,_=m.state.kind===`ready`?m.state.blockedCount:0,v=(0,B.useCallback)(()=>{e({to:`/`})},[e]),y=(0,B.useCallback)(t=>{e({to:`/workflows`,search:{tag:t??void 0}})},[e]),b=(0,B.useCallback)(()=>{e({to:`/workflows`,search:{tag:p??void 0}})},[e,p]),x=(0,B.useCallback)(t=>{e({to:`/workflows/$workflowId`,params:{workflowId:t},search:{tag:p??void 0}})},[e,p]),S=ek({initialTag:p,onSelectTag:y}),C=BD({workflowId:f,activeTag:p,onBack:b,onNavigateToWorkflow:x}),w=ik(d??``),T=nk(),[E,D]=(0,B.useState)(null),O=(0,B.useCallback)((e,t)=>{t(),D(e),setTimeout(()=>D(null),200)},[]),k=(0,B.useRef)(null);return(0,B.useEffect)(()=>{let t=k.current;if(!t)return;function n(t){if(t.key===`ArrowLeft`||t.key===`ArrowRight`){t.preventDefault();let n=ak.findIndex(e=>e.id===c),r=ak[t.key===`ArrowRight`?(n+1)%ak.length:(n-1+ak.length)%ak.length];e({to:r.path,...r.path===`/workflows`?{search:{tag:void 0}}:{}})}}return t.addEventListener(`keydown`,n),()=>t.removeEventListener(`keydown`,n)},[c,e]),(0,V.jsxs)(`div`,{className:`min-h-screen`,style:{"--app-header-height":`56px`},children:[(0,V.jsxs)(`header`,{style:{background:`rgba(23, 27, 40, 0.92)`,backdropFilter:`blur(24px)`,WebkitBackdropFilter:`blur(24px)`,borderBottom:`1px solid rgba(244, 196, 48, 0.25)`,boxShadow:`0 4px 24px rgba(0,0,0,0.4)`},className:`fixed top-0 w-full z-50 flex items-center h-14 px-4 gap-6`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3 shrink-0`,children:[(0,V.jsx)(W,{cut:8,borderColor:`rgba(244, 196, 48, 0.5)`,background:`rgba(27, 31, 44, 0.8)`,className:`relative w-10 h-10`,children:(0,V.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:(0,V.jsx)(`span`,{className:`font-mono text-[11px] font-bold text-[var(--accent)] tracking-widest`,children:`WR`})})}),(0,V.jsxs)(`div`,{className:`hidden sm:flex flex-col leading-none`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[11px] font-bold text-[var(--text-primary)] tracking-[0.25em] uppercase`,children:`WR_CONSOLE`}),(0,V.jsxs)(`span`,{className:`font-mono text-[9px] text-[var(--text-muted)] tracking-[0.15em]`,children:[`// V`,`3.82.1`]})]})]}),l&&d?(0,V.jsx)(`nav`,{className:`flex items-center flex-1 justify-center`,children:(0,V.jsx)(TD,{segments:[{label:`Workspace`,onClick:v},{label:d?.slice(-12)??``}]})}):(0,V.jsxs)(`div`,{role:`tablist`,"aria-label":`Console sections`,ref:k,className:`flex items-center gap-1 flex-1 justify-center`,children:[(0,V.jsxs)(`button`,{role:`tab`,id:`tab-workspace`,"aria-selected":c===`workspace`,"aria-controls":`panel-workspace`,tabIndex:c===`workspace`?0:-1,onClick:()=>O(`workspace`,()=>void e({to:`/`})),className:[`tab-btn px-4 py-2.5 font-mono text-[10px] uppercase tracking-[0.30em] transition-colors duration-150`,`focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:outline-none`,c===`workspace`?`tab-btn--active text-[var(--accent)] text-glow-amber`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`,E===`workspace`?`tab-activating`:``].join(` `),style:c===`workspace`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`Workspace`]}),(0,V.jsxs)(`button`,{role:`tab`,id:`tab-workflows`,"aria-selected":c===`workflows`,"aria-controls":`panel-workflows`,tabIndex:c===`workflows`?0:-1,onClick:()=>O(`workflows`,()=>void e({to:`/workflows`,search:{tag:void 0}})),className:[`tab-btn px-4 py-2.5 font-mono text-[10px] uppercase tracking-[0.30em] transition-colors duration-150`,`focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:outline-none`,c===`workflows`?`tab-btn--active text-[var(--accent)] text-glow-amber`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`,E===`workflows`?`tab-activating`:``].join(` `),style:c===`workflows`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`Workflows`]}),(0,V.jsxs)(`button`,{role:`tab`,id:`tab-auto`,"aria-selected":c===`auto`,"aria-controls":`panel-auto`,tabIndex:c===`auto`?0:-1,onClick:()=>O(`auto`,()=>void e({to:`/auto`})),className:[`tab-btn px-4 py-2.5 font-mono text-[10px] uppercase tracking-[0.30em] transition-colors duration-150`,`focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:outline-none`,c===`auto`?`tab-btn--active text-[var(--accent)] text-glow-amber`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`,E===`auto`?`tab-activating`:``].join(` `),style:c===`auto`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`Auto`]}),(0,V.jsxs)(`button`,{role:`tab`,id:`tab-perf`,"aria-selected":c===`perf`,"aria-controls":`panel-perf`,tabIndex:c===`perf`?0:-1,onClick:()=>O(`perf`,()=>void e({to:`/perf`})),className:[`tab-btn px-4 py-2.5 font-mono text-[10px] uppercase tracking-[0.30em] transition-colors duration-150`,`focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:outline-none`,c===`perf`?`tab-btn--active text-[var(--accent)] text-glow-amber`:`text-[var(--text-secondary)] hover:text-[var(--text-primary)]`,E===`perf`?`tab-activating`:``].join(` `),style:c===`perf`?{backgroundColor:`rgba(244, 196, 48, 0.06)`}:void 0,children:[(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--tr`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--bl`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tab-corner tab-corner--br`,"aria-hidden":`true`}),`Performance`]})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[g>0&&(0,V.jsx)(no,{label:`${Math.min(g,9)}${g>9?`+`:``} LIVE`,color:`var(--accent-strong)`,pulse:!0,role:`status`,"aria-label":`${g} live session${g===1?``:`s`}`}),_>0&&(0,V.jsx)(no,{label:`${Math.min(_,9)}${_>9?`+`:``} BLOCKED`,color:`var(--blocked)`,role:`status`,"aria-label":`${_} blocked session${_===1?``:`s`}`})]})]}),(0,V.jsxs)(`main`,{className:`p-6`,style:{paddingTop:`calc(56px + 1.5rem)`},children:[(0,V.jsxs)(`div`,{id:`panel-workspace`,role:`tabpanel`,"aria-labelledby":`tab-workspace`,hidden:c===`workflows`||c===`perf`||c===`auto`,children:[(0,V.jsx)(Do,{viewModel:m,sessionListViewModel:h,hidden:l}),l&&d&&(0,V.jsx)(yD,{viewModel:w})]}),c===`workflows`&&(0,V.jsx)(`div`,{id:`panel-workflows`,role:`tabpanel`,"aria-labelledby":`tab-workflows`,children:u&&f?(0,V.jsx)(ED,{viewModel:C}):(0,V.jsx)(HD,{viewModel:S})}),c===`auto`&&(0,V.jsx)(`div`,{id:`panel-auto`,role:`tabpanel`,"aria-labelledby":`tab-auto`,children:(0,V.jsx)(_O,{})}),c===`perf`&&(0,V.jsx)(`div`,{id:`panel-perf`,role:`tabpanel`,"aria-labelledby":`tab-perf`,children:(0,V.jsx)(iO,{viewModel:T})})]})]})}var sk=Hi({component:ok}),ck=Bi({getParentRoute:()=>sk,path:`/`,component:()=>null}),lk=Bi({getParentRoute:()=>sk,path:`/session/$sessionId`,component:()=>null}),uk=Bi({getParentRoute:()=>sk,path:`/workflows`,validateSearch:e=>({tag:typeof e.tag==`string`?e.tag:void 0}),component:()=>null}),dk=Bi({getParentRoute:()=>sk,path:`/workflows/$workflowId`,validateSearch:e=>({tag:typeof e.tag==`string`?e.tag:void 0}),component:()=>null}),fk=Bi({getParentRoute:()=>sk,path:`/perf`,component:()=>null}),pk=Bi({getParentRoute:()=>sk,path:`/auto`,component:()=>null}),mk=ra({routeTree:sk.addChildren([ck,lk,uk,dk,fk,pk]),history:yr()}),hk=new ze({defaultOptions:{queries:{refetchInterval:5e3,staleTime:2e3}}});(0,ca.createRoot)(document.getElementById(`root`)).render((0,V.jsx)(B.StrictMode,{children:(0,V.jsx)(We,{client:hk,children:(0,V.jsx)(oa,{router:mk})})}));
@@ -4,7 +4,7 @@
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-DE4aB2eN.js"></script>
7
+ <script type="module" crossorigin src="/console/assets/index-BE2lalLu.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/console/assets/index-DHrKiMCf.css">
9
9
  </head>
10
10
  <body>
@@ -42,6 +42,7 @@ export interface StepAdvancedEvent {
42
42
  readonly kind: 'step_advanced';
43
43
  readonly sessionId: RunId;
44
44
  readonly workrailSessionId?: string;
45
+ readonly stepId?: string;
45
46
  }
46
47
  export interface SessionCompletedEvent {
47
48
  readonly kind: 'session_completed';
@@ -113,11 +113,16 @@ async function buildAgentReadySession(preAgentSession, trigger, ctx, apiKey, ses
113
113
  const handle = preAgentSession.handle;
114
114
  const MAX_ISSUE_SUMMARIES = 10;
115
115
  const STUCK_REPEAT_THRESHOLD = 3;
116
- const onAdvance = (stepText, continueToken) => {
117
- (0, index_js_1.advanceStep)(state, stepText, continueToken);
116
+ const onAdvance = (stepText, continueToken, stepId) => {
117
+ (0, index_js_1.advanceStep)(state, stepText, continueToken, stepId);
118
118
  if (state.workrailSessionId !== null)
119
119
  daemonRegistry?.heartbeat(state.workrailSessionId);
120
- emitter?.emit({ kind: 'step_advanced', sessionId, ...(0, _shared_js_1.withWorkrailSession)(state.workrailSessionId) });
120
+ emitter?.emit({
121
+ kind: 'step_advanced',
122
+ sessionId,
123
+ ...(0, _shared_js_1.withWorkrailSession)(state.workrailSessionId),
124
+ ...(state.lastCompletedStepId !== null ? { stepId: state.lastCompletedStepId } : {}),
125
+ });
121
126
  };
122
127
  const onComplete = (notes, artifacts) => {
123
128
  (0, index_js_1.recordCompletion)(state, notes, artifacts);
@@ -17,7 +17,7 @@ export declare class DefaultFileStateTracker implements FileStateTracker {
17
17
  }
18
18
  export interface SessionScope {
19
19
  readonly fileTracker: FileStateTracker;
20
- readonly onAdvance: (stepText: string, continueToken: string) => void;
20
+ readonly onAdvance: (stepText: string, continueToken: string, stepId?: string) => void;
21
21
  readonly onComplete: (notes: string | undefined, artifacts?: readonly unknown[]) => void;
22
22
  readonly onTokenUpdate: (continueToken: string) => void;
23
23
  readonly onIssueReported: (summary: string) => void;
@@ -14,9 +14,10 @@ export interface SessionState {
14
14
  pendingSteerParts: string[];
15
15
  terminalSignal: TerminalSignal | null;
16
16
  turnCount: number;
17
+ lastCompletedStepId: string | null;
17
18
  }
18
19
  export declare function createSessionState(initialToken: string): SessionState;
19
- export declare function advanceStep(state: SessionState, stepText: string, continueToken: string): void;
20
+ export declare function advanceStep(state: SessionState, stepText: string, continueToken: string, stepId?: string): void;
20
21
  export declare function recordCompletion(state: SessionState, notes: string | undefined, artifacts?: readonly unknown[]): void;
21
22
  export declare function updateToken(state: SessionState, token: string): void;
22
23
  export declare function setSessionId(state: SessionState, id: string): void;
@@ -19,12 +19,14 @@ function createSessionState(initialToken) {
19
19
  pendingSteerParts: [],
20
20
  terminalSignal: null,
21
21
  turnCount: 0,
22
+ lastCompletedStepId: null,
22
23
  };
23
24
  }
24
- function advanceStep(state, stepText, continueToken) {
25
+ function advanceStep(state, stepText, continueToken, stepId) {
25
26
  state.pendingSteerParts.push(stepText);
26
27
  state.stepAdvanceCount++;
27
28
  state.currentContinueToken = continueToken;
29
+ state.lastCompletedStepId = stepId ?? null;
28
30
  }
29
31
  function recordCompletion(state, notes, artifacts) {
30
32
  state.isComplete = true;
@@ -2,5 +2,5 @@ import type { AgentTool } from '../agent-loop.js';
2
2
  import type { V2ToolContext } from '../../mcp/types.js';
3
3
  import type { DaemonEventEmitter, RunId } from '../daemon-events.js';
4
4
  import { executeContinueWorkflow } from '../../mcp/handlers/v2-execution/index.js';
5
- export declare function makeContinueWorkflowTool(sessionId: RunId, ctx: V2ToolContext, onAdvance: (nextStepText: string, continueToken: string) => void, onComplete: (notes: string | undefined, artifacts?: readonly unknown[]) => void, schemas: Record<string, any>, _executeContinueWorkflowFn?: typeof executeContinueWorkflow, emitter?: DaemonEventEmitter, workrailSessionId?: string | null): AgentTool;
6
- export declare function makeCompleteStepTool(sessionId: RunId, ctx: V2ToolContext, getCurrentToken: () => string, onAdvance: (nextStepText: string, continueToken: string) => void, onComplete: (notes: string | undefined, artifacts?: readonly unknown[]) => void, onTokenUpdate: (t: string) => void, schemas: Record<string, any>, _executeContinueWorkflowFn?: typeof executeContinueWorkflow, emitter?: DaemonEventEmitter, workrailSessionId?: string | null): AgentTool;
5
+ export declare function makeContinueWorkflowTool(sessionId: RunId, ctx: V2ToolContext, onAdvance: (nextStepText: string, continueToken: string, stepId?: string) => void, onComplete: (notes: string | undefined, artifacts?: readonly unknown[]) => void, schemas: Record<string, any>, _executeContinueWorkflowFn?: typeof executeContinueWorkflow, emitter?: DaemonEventEmitter, workrailSessionId?: string | null): AgentTool;
6
+ export declare function makeCompleteStepTool(sessionId: RunId, ctx: V2ToolContext, getCurrentToken: () => string, onAdvance: (nextStepText: string, continueToken: string, stepId?: string) => void, onComplete: (notes: string | undefined, artifacts?: readonly unknown[]) => void, onTokenUpdate: (t: string) => void, schemas: Record<string, any>, _executeContinueWorkflowFn?: typeof executeContinueWorkflow, emitter?: DaemonEventEmitter, workrailSessionId?: string | null): AgentTool;
@@ -92,7 +92,7 @@ function makeContinueWorkflowTool(sessionId, ctx, onAdvance, onComplete, schemas
92
92
  const stepText = pending
93
93
  ? `## Next step: ${pending.title}\n\n${pending.prompt}\n\ncontinueToken: ${continueToken}`
94
94
  : `Step advanced. continueToken: ${continueToken}`;
95
- onAdvance(stepText, continueToken);
95
+ onAdvance(stepText, continueToken, pending?.stepId);
96
96
  return {
97
97
  content: [{ type: 'text', text: stepText }],
98
98
  details: out,
@@ -198,7 +198,7 @@ function makeCompleteStepTool(sessionId, ctx, getCurrentToken, onAdvance, onComp
198
198
  const stepText = pending
199
199
  ? `${JSON.stringify({ status: 'advanced', nextStep: pending.title })}\n\n## ${pending.title}\n\n${pending.prompt}`
200
200
  : JSON.stringify({ status: 'advanced', nextStep: nextStepTitle });
201
- onAdvance(stepText, newContinueToken);
201
+ onAdvance(stepText, newContinueToken, pending?.stepId);
202
202
  return {
203
203
  content: [{ type: 'text', text: stepText }],
204
204
  details: out,
@@ -346,12 +346,12 @@
346
346
  "bytes": 15446
347
347
  },
348
348
  "cli/commands/worktrain-diagnose.d.ts": {
349
- "sha256": "631bed937feb483832e72efa45649c20f7d54beb4fb52df854f2b69cf81bf1df",
350
- "bytes": 5197
349
+ "sha256": "a2a44bdcf9fa3cae2255e19bf2ad7e536361e5c5fb46447dae9ae25c7e3a753f",
350
+ "bytes": 5528
351
351
  },
352
352
  "cli/commands/worktrain-diagnose.js": {
353
- "sha256": "90efa63337a5651b801b47cd0d5c76f8ee5e38026cf40df9b4b1773b54a0ec28",
354
- "bytes": 31921
353
+ "sha256": "2e64079c35dd005d2c89129364367c6d99f53ff3c27cd18374100d70abc6e0ab",
354
+ "bytes": 31455
355
355
  },
356
356
  "cli/commands/worktrain-inbox.d.ts": {
357
357
  "sha256": "097d7c58f2e75da833504cf62122a281197c2008f8b70c8a9391d30fdf5a829d",
@@ -481,8 +481,8 @@
481
481
  "sha256": "5fe866e54f796975dec5d8ba9983aefd86074db212d3fccd64eed04bc9f0b3da",
482
482
  "bytes": 8011
483
483
  },
484
- "console-ui/assets/index-DE4aB2eN.js": {
485
- "sha256": "b5add8ee8497c5ba9ff8f7642d03db14bb4f7e7850bd5e5a1e62079a7b04193f",
484
+ "console-ui/assets/index-BE2lalLu.js": {
485
+ "sha256": "7ef62f54ca788d7582894caef718123906f7ae51bc349e52bc787ed8f6fb610b",
486
486
  "bytes": 768377
487
487
  },
488
488
  "console-ui/assets/index-DHrKiMCf.css": {
@@ -490,7 +490,7 @@
490
490
  "bytes": 60673
491
491
  },
492
492
  "console-ui/index.html": {
493
- "sha256": "6a3964cf647c107d7d65520ff97a712be2d69e89b363a5b46e18e1ab31360218",
493
+ "sha256": "72fc909173d2e09becc8be18169f726e8081eb3379c274c23bd5081183f73437",
494
494
  "bytes": 417
495
495
  },
496
496
  "console/standalone-console.d.ts": {
@@ -702,8 +702,8 @@
702
702
  "bytes": 1216
703
703
  },
704
704
  "daemon/daemon-events.d.ts": {
705
- "sha256": "b2a44640954cb8bffecd2cbb7fd38f8369ac7aa397cc8cd31d746a50ea1a1388",
706
- "bytes": 5504
705
+ "sha256": "51e526e506563f3894ea3b2627a44515491599573b404f611068f0bedbcad0bd",
706
+ "bytes": 5534
707
707
  },
708
708
  "daemon/daemon-events.js": {
709
709
  "sha256": "035c81d2cb3801ebd06d2672c854fbfbe4857121d0624da387c3858efad2d64e",
@@ -770,8 +770,8 @@
770
770
  "bytes": 2025
771
771
  },
772
772
  "daemon/runner/agent-loop-runner.js": {
773
- "sha256": "95ba3bad184189519c228b50b6c6dbd03c8daf2d6d43c2cf4ee8205bda3ff67b",
774
- "bytes": 13466
773
+ "sha256": "39387782858e7d11954a641819a2fe77e58b70331e1be2e1c591dcc178b9fc07",
774
+ "bytes": 13625
775
775
  },
776
776
  "daemon/runner/construct-tools.d.ts": {
777
777
  "sha256": "6386bc54bcb95bb7ea414c05e5b993314a50339989476bc6d4927b12c5931679",
@@ -830,8 +830,8 @@
830
830
  "bytes": 247
831
831
  },
832
832
  "daemon/session-scope.d.ts": {
833
- "sha256": "28cd109c919d139937e43705e8b64a5beb26cd0e0e2471009ff238a3a8495cb8",
834
- "bytes": 1677
833
+ "sha256": "9bfa4ff78b56702c394406ac37db498d2d3037ebc60166735f87f1fb290a632c",
834
+ "bytes": 1694
835
835
  },
836
836
  "daemon/session-scope.js": {
837
837
  "sha256": "2f5295aa36b8d46b162a2b1f4d6f13af00517796aa468956563a8de46e2ecd56",
@@ -862,12 +862,12 @@
862
862
  "bytes": 1574
863
863
  },
864
864
  "daemon/state/session-state.d.ts": {
865
- "sha256": "7dc9b8c53447da67d0e1c5ff98792c57dc4e19b23858e8afc0e51a103256713b",
866
- "bytes": 1129
865
+ "sha256": "a7e4d21a525458bcd2d2bd0894c61977bc4889572aa51ecb33f594c6e301f225",
866
+ "bytes": 1186
867
867
  },
868
868
  "daemon/state/session-state.js": {
869
- "sha256": "6f01bde9558bd3c985011195b175297c5bbe471df7de803d0db7af960cd5b8fb",
870
- "bytes": 1430
869
+ "sha256": "e74aa1182b65c7b8ba0ae11e72b4a9920b0f799d10f3b0dec3ffd72f3f894c3a",
870
+ "bytes": 1521
871
871
  },
872
872
  "daemon/state/stuck-detection.d.ts": {
873
873
  "sha256": "772ed526fb71302f4a1e760b016ba9c733f9dc6691f18e907b5a85dde3790c8a",
@@ -910,12 +910,12 @@
910
910
  "bytes": 2991
911
911
  },
912
912
  "daemon/tools/continue-workflow.d.ts": {
913
- "sha256": "a51338292c48d060be44ca40c71ea3f9200b24ba3193c2a2e160aaad8b8bd9a3",
914
- "bytes": 1129
913
+ "sha256": "7154ae2f539c3f6467afe790b71b6532bbb6b92c07c0e572b28b5d69792a84ec",
914
+ "bytes": 1163
915
915
  },
916
916
  "daemon/tools/continue-workflow.js": {
917
- "sha256": "17389b3356a17d8e82acb6a86260cc82586ff9cdcbb52b93248b42f83ccdc3bd",
918
- "bytes": 11395
917
+ "sha256": "33a0826c274c18bcc1bdb626bb15ce72087f8c602bf29449d7812f3cf0aa4491",
918
+ "bytes": 11429
919
919
  },
920
920
  "daemon/tools/file-tools.d.ts": {
921
921
  "sha256": "f8ddbd23bfe87eac2d2b48c91d1c494d418b2ee18be04d8118f7ce5c6cff2b38",
@@ -4845,8 +4845,10 @@ worktrain logs --format json # machine-readable output
4845
4845
 
4846
4846
  **Delivered (May 9, 2026, PR #979):** `worktrain diagnose <sessionId>` -- scans last 7 days of daemon event logs, classifies sessions into CONFIG / WORKFLOW_STUCK / WORKFLOW_TIMEOUT / INFRA / ORPHANED / SUCCESS / DEFAULT, prints a failure card with evidence and suggested fix. `worktrain health <id>` now delegates to diagnose for prior-day sessions (previously returned "No events today"). `--json` and `--ascii` flags. Pure `parseDaemonEvents()` function with injected deps, 22 unit tests.
4847
4847
 
4848
+ **Delivered (May 9, 2026, PR #982, #984):** `worktrain diagnose` (no args) shows fleet summary -- outcome breakdown, per-workflow stats, timeout reason counts, token burn. `--workflow` filter. `analyzeFleet()` is a pure typed function with injected deps; `ResultCategory` discriminated union enforces exhaustiveness. 34 unit tests total.
4849
+
4848
4850
  **Still deferred:**
4849
- - `worktrain failures` aggregate fleet view (which workflow/trigger fails most often)
4851
+ - Step-level duration analysis in fleet view: which workflow steps consume the most time, and where do sessions time out. Requires cross-referencing the WorkRail session store snapshots (`~/.workrail/data/snapshots/`) alongside daemon event logs. The daemon event log only has step advance counts, not step names or per-step durations. Partially addressed by `scripts/session-analysis.py` (dev tool, not integrated into the CLI). The full fix requires either: (a) emitting step names in `step_advanced` daemon events, or (b) a `analyzeSessionDeep()` function that reads both the daemon event log and the session store snapshots.
4850
4852
  - `--since N` flag to widen the scan window beyond 7 days
4851
4853
  - `--verbose` flag for full step timeline (currently capped at 8 steps)
4852
4854
  - Conversation log `--deep` mode (full LLM turn text for stuck cases where argsSummary is truncated)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exaudeus/workrail",
3
- "version": "3.82.0",
3
+ "version": "3.83.0",
4
4
  "description": "Step-by-step workflow enforcement for AI agents via MCP",
5
5
  "license": "MIT",
6
6
  "repository": {