@nestos/kanban 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +73 -29
  3. package/dist/{activity-C6xDM-cg.d.cts → activity-BbC4sgKL.d.cts} +28 -2
  4. package/dist/{activity-Dw8DOw0L.d.ts → activity-Czlan5xW.d.ts} +28 -2
  5. package/dist/activity-module-DaO1Rry0.d.cts +22 -0
  6. package/dist/activity-module-T22wliZu.d.ts +22 -0
  7. package/dist/activity-ports-Dqxa86zT.d.cts +12 -0
  8. package/dist/activity-ports-cxfrelaL.d.ts +12 -0
  9. package/dist/activity.cjs +10 -282
  10. package/dist/activity.cjs.map +1 -1
  11. package/dist/activity.d.cts +8 -30
  12. package/dist/activity.d.ts +8 -30
  13. package/dist/activity.js +9 -281
  14. package/dist/activity.js.map +1 -1
  15. package/dist/{chunk-O4OGAAV4.js → chunk-3JYLJPE5.js} +29 -5
  16. package/dist/chunk-3JYLJPE5.js.map +1 -0
  17. package/dist/{chunk-ATUFFNLV.js → chunk-3LEIHB7Y.js} +5 -5
  18. package/dist/chunk-4XF6LQSU.cjs.map +1 -1
  19. package/dist/chunk-5Q7WB63A.cjs +282 -0
  20. package/dist/chunk-5Q7WB63A.cjs.map +1 -0
  21. package/dist/{chunk-PSKQAFDF.cjs → chunk-7KDOTBRX.cjs} +1 -1
  22. package/dist/chunk-7KDOTBRX.cjs.map +1 -0
  23. package/dist/{chunk-5DLZWW5Y.js → chunk-AHHEGTUA.js} +3 -3
  24. package/dist/chunk-AOHQCX7K.cjs +95 -0
  25. package/dist/chunk-AOHQCX7K.cjs.map +1 -0
  26. package/dist/{chunk-IUI5CI2S.cjs → chunk-DINLR6E6.cjs} +96 -92
  27. package/dist/chunk-DINLR6E6.cjs.map +1 -0
  28. package/dist/{chunk-L44TM4EE.cjs → chunk-EYTVC2H5.cjs} +568 -454
  29. package/dist/chunk-EYTVC2H5.cjs.map +1 -0
  30. package/dist/chunk-FEE2YBZ7.js +1972 -0
  31. package/dist/chunk-FEE2YBZ7.js.map +1 -0
  32. package/dist/chunk-FNO5K3A7.js +282 -0
  33. package/dist/chunk-FNO5K3A7.js.map +1 -0
  34. package/dist/chunk-IHHDXZPZ.js +382 -0
  35. package/dist/chunk-IHHDXZPZ.js.map +1 -0
  36. package/dist/chunk-J3EAIVA3.js +280 -0
  37. package/dist/chunk-J3EAIVA3.js.map +1 -0
  38. package/dist/{chunk-DFTOTBGF.js → chunk-KH3WF3K4.js} +20 -16
  39. package/dist/chunk-KH3WF3K4.js.map +1 -0
  40. package/dist/{chunk-TB2RZGDV.js → chunk-M35X5PHO.js} +14 -1
  41. package/dist/chunk-M35X5PHO.js.map +1 -0
  42. package/dist/chunk-QRGZD2JU.cjs +1972 -0
  43. package/dist/chunk-QRGZD2JU.cjs.map +1 -0
  44. package/dist/{chunk-4KF7KUAI.cjs → chunk-RBOER6EW.cjs} +6 -6
  45. package/dist/chunk-RBOER6EW.cjs.map +1 -0
  46. package/dist/{chunk-6MN3H3YF.cjs → chunk-RSH6QSEC.cjs} +16 -3
  47. package/dist/chunk-RSH6QSEC.cjs.map +1 -0
  48. package/dist/{chunk-T7P5EIC4.cjs → chunk-VMRDXOLX.cjs} +33 -33
  49. package/dist/chunk-VMRDXOLX.cjs.map +1 -0
  50. package/dist/{chunk-5XKOCKY2.js → chunk-X4UHZX6F.js} +1 -1
  51. package/dist/chunk-XBSGUVCY.cjs +382 -0
  52. package/dist/chunk-XBSGUVCY.cjs.map +1 -0
  53. package/dist/{chunk-OHQTKGQN.js → chunk-XKDZHAUE.js} +242 -128
  54. package/dist/chunk-XKDZHAUE.js.map +1 -0
  55. package/dist/chunk-ZUZGAO6G.cjs +280 -0
  56. package/dist/chunk-ZUZGAO6G.cjs.map +1 -0
  57. package/dist/{content-CAIp1njn.d.cts → content-C5aJZFlw.d.cts} +1 -1
  58. package/dist/{content-CGMJdyH_.d.ts → content-hLH5BNud.d.ts} +1 -1
  59. package/dist/contracts/index.cjs +13 -3
  60. package/dist/contracts/index.cjs.map +1 -1
  61. package/dist/contracts/index.d.cts +5 -4
  62. package/dist/contracts/index.d.ts +5 -4
  63. package/dist/contracts/index.js +14 -4
  64. package/dist/{discovery-DxpirOz3.d.cts → discovery-9E-LfwIw.d.cts} +1 -1
  65. package/dist/{discovery-gSqWpuRm.d.ts → discovery-D60yrjej.d.ts} +1 -1
  66. package/dist/discovery.cjs +63 -65
  67. package/dist/discovery.cjs.map +1 -1
  68. package/dist/discovery.d.cts +4 -4
  69. package/dist/discovery.d.ts +4 -4
  70. package/dist/discovery.js +5 -7
  71. package/dist/discovery.js.map +1 -1
  72. package/dist/execution-bridge-fpCnH6z5.d.cts +52 -0
  73. package/dist/execution-bridge-rk0uVy_n.d.ts +52 -0
  74. package/dist/execution.cjs +6 -356
  75. package/dist/execution.cjs.map +1 -1
  76. package/dist/execution.d.cts +4 -51
  77. package/dist/execution.d.ts +4 -51
  78. package/dist/execution.js +9 -359
  79. package/dist/execution.js.map +1 -1
  80. package/dist/index.cjs +10 -12
  81. package/dist/index.cjs.map +1 -1
  82. package/dist/index.d.cts +9 -16
  83. package/dist/index.d.ts +9 -16
  84. package/dist/index.js +10 -12
  85. package/dist/index.js.map +1 -1
  86. package/dist/{module-CWNK2BMj.d.ts → module-CYfE7YhM.d.ts} +2 -2
  87. package/dist/{module-BbvwdCDF.d.cts → module-Ca9L3qCn.d.cts} +2 -2
  88. package/dist/{planning-CcFZYdIL.d.cts → planning-CHrOqQ6b.d.cts} +45 -10
  89. package/dist/{planning-CcFZYdIL.d.ts → planning-CHrOqQ6b.d.ts} +45 -10
  90. package/dist/{ports-Bn6ro2FB.d.ts → ports-B0McVg7B.d.ts} +4 -3
  91. package/dist/ports-BeGO1VRI.d.cts +49 -0
  92. package/dist/{ports-CaL6geqR.d.cts → ports-GQy0x-RI.d.cts} +4 -3
  93. package/dist/ports-ykGiNUSx.d.ts +49 -0
  94. package/dist/runtime/index.cjs +205 -0
  95. package/dist/runtime/index.cjs.map +1 -0
  96. package/dist/runtime/index.d.cts +75 -0
  97. package/dist/runtime/index.d.ts +75 -0
  98. package/dist/runtime/index.js +205 -0
  99. package/dist/runtime/index.js.map +1 -0
  100. package/dist/runtime/integration.cjs +423 -0
  101. package/dist/runtime/integration.cjs.map +1 -0
  102. package/dist/runtime/integration.d.cts +658 -0
  103. package/dist/runtime/integration.d.ts +658 -0
  104. package/dist/runtime/integration.js +423 -0
  105. package/dist/runtime/integration.js.map +1 -0
  106. package/dist/storage.cjs +9 -277
  107. package/dist/storage.cjs.map +1 -1
  108. package/dist/storage.d.cts +6 -6
  109. package/dist/storage.d.ts +6 -6
  110. package/dist/storage.js +11 -279
  111. package/dist/storage.js.map +1 -1
  112. package/dist/{store-q63eSMoT.d.cts → store-DPwHzGiz.d.cts} +2 -2
  113. package/dist/{store-Ct0gOAAg.d.ts → store-DgdrPCV9.d.ts} +2 -2
  114. package/dist/task-projection-CSorlMws.d.ts +11 -0
  115. package/dist/task-projection-DKKB_ueb.d.cts +11 -0
  116. package/examples/standalone.ts +22 -0
  117. package/package.json +117 -87
  118. package/dist/chunk-2YFPV5GF.cjs +0 -16
  119. package/dist/chunk-2YFPV5GF.cjs.map +0 -1
  120. package/dist/chunk-4KF7KUAI.cjs.map +0 -1
  121. package/dist/chunk-6MN3H3YF.cjs.map +0 -1
  122. package/dist/chunk-DFTOTBGF.js.map +0 -1
  123. package/dist/chunk-G6FCDLDF.js +0 -16
  124. package/dist/chunk-G6FCDLDF.js.map +0 -1
  125. package/dist/chunk-IUI5CI2S.cjs.map +0 -1
  126. package/dist/chunk-KYNYPKKH.cjs +0 -71
  127. package/dist/chunk-KYNYPKKH.cjs.map +0 -1
  128. package/dist/chunk-L44TM4EE.cjs.map +0 -1
  129. package/dist/chunk-LSE6JG5I.cjs +0 -20
  130. package/dist/chunk-LSE6JG5I.cjs.map +0 -1
  131. package/dist/chunk-O4OGAAV4.js.map +0 -1
  132. package/dist/chunk-OHQTKGQN.js.map +0 -1
  133. package/dist/chunk-PSKQAFDF.cjs.map +0 -1
  134. package/dist/chunk-QTMTBEBA.js +0 -20
  135. package/dist/chunk-QTMTBEBA.js.map +0 -1
  136. package/dist/chunk-T7P5EIC4.cjs.map +0 -1
  137. package/dist/chunk-TB2RZGDV.js.map +0 -1
  138. package/dist/ui/index.cjs +0 -1961
  139. package/dist/ui/index.cjs.map +0 -1
  140. package/dist/ui/index.d.cts +0 -209
  141. package/dist/ui/index.d.ts +0 -209
  142. package/dist/ui/index.js +0 -1961
  143. package/dist/ui/index.js.map +0 -1
  144. package/dist/ui/kanban.css +0 -194
  145. /package/dist/{chunk-ATUFFNLV.js.map → chunk-3LEIHB7Y.js.map} +0 -0
  146. /package/dist/{chunk-5DLZWW5Y.js.map → chunk-AHHEGTUA.js.map} +0 -0
  147. /package/dist/{chunk-5XKOCKY2.js.map → chunk-X4UHZX6F.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ui/html.ts","../../src/ui/task-state.ts","../../src/ui/session-links.ts","../../src/ui/references.ts","../../src/ui/suggestion-field.ts","../../src/ui/session-view.ts","../../src/ui/view.ts","../../src/ui/children.ts","../../src/ui/panel-header.ts","../../src/ui/context-view.ts","../../src/ui/event-history.ts","../../src/ui/forms.ts","../../src/ui/automation.ts","../../src/ui/suggestion-picker.ts","../../src/ui/suggestions.ts","../../src/ui/index.ts","../../src/ui/drawer.ts","../../src/ui/diagnostics.ts","../../src/ui/operations.ts","../../src/ui/work-resources.ts","../../src/ui/renderer.ts","../../src/ui/commands.ts"],"sourcesContent":["export function escapeHTML(value: unknown): string {\n return String(value ?? '').replace(/[&<>\"']/g, character => ({'&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'}[character]!));\n}\nexport const escapeAttr = escapeHTML;\n","import type {KanbanTaskProjection} from '../contracts';\nimport type {KanbanPresentation} from './ports';\nimport {escapeHTML, escapeAttr} from './html';\n\nexport function taskStatus(ui: KanbanPresentation, task?: KanbanTaskProjection): string {\n if (!task) return '';\n return `<span class=\"kanban__task-state\" data-task-phase=\"${escapeAttr(task.phase)}\">${escapeHTML(ui.text('taskPhase.' + task.phase))}${task.reason ? `<small>${escapeHTML(taskReason(ui, task.reason))}</small>` : ''}${task.phase === 'waiting-start' && task.reason !== 'MANUAL_START_REQUIRED' && task.startAt !== undefined ? `<time data-task-start-at=\"${task.startAt}\" datetime=\"${new Date(task.startAt).toISOString()}\">${escapeHTML(startTimeText(ui,task.startAt))}</time>` : ''}</span>`;\n}\nexport function taskControls(ui: KanbanPresentation, task: KanbanTaskProjection, fixAvailable = false): string {\n return task.actions.filter(action => ['run', 'pause', 'resume', 'edit', 'cancel'].includes(action) || action === 'fix' && fixAvailable).map(action => {\n const label = ui.text('taskAction.' + action), icon = action==='cancel'?ui.icons.close:ui.icons[action as 'run' | 'pause' | 'resume' | 'fix' | 'edit'];\n return `<button type=\"button\" data-action=\"task-${action}\" title=\"${escapeAttr(label)}\" aria-label=\"${escapeAttr(label)}\">${icon ?? escapeHTML(label)}</button>`;\n }).join('');\n}\nexport function phaseFilter(ui: KanbanPresentation, selected?: string): string {\n const phases = ['waiting-start','analyzing','queued','waiting-dependency','preparing','running','pausing','paused','resuming','waiting-input','error','review','completed','cancelled','unknown'];\n return `<label>${escapeHTML(ui.text('taskState'))}<select name=\"phase\"><option value=\"\">${escapeHTML(ui.text('all'))}</option>${phases.map(phase => `<option value=\"${phase}\" ${phase === selected ? 'selected' : ''}>${escapeHTML(ui.text('taskPhase.'+phase))}</option>`).join('')}</select></label>`;\n}\n\nfunction startTimeText(ui:KanbanPresentation,startAt:number):string {\n return ui.text('taskStartAt')+' '+new Date(startAt).toLocaleString()+' · '+Math.max(0,Math.ceil((startAt-Date.now())/1000))+'s';\n}\nexport function updateTaskCountdowns(editor:HTMLElement,ui:KanbanPresentation):void {\n for(const node of editor.querySelectorAll<HTMLElement>('[data-task-start-at]')) {\n const at=Number(node.dataset.taskStartAt);if(Number.isFinite(at))node.textContent=startTimeText(ui,at);\n }\n}\n\nfunction taskReason(ui: KanbanPresentation, reason: string): string {\n const key = 'taskReason.' + reason, value = ui.text(key);\n return value === key || value === 'kanban.' + key ? reason : value;\n}\n","import type {KanbanPresentation} from './ports';\nimport {escapeHTML, escapeAttr} from './html';\n\nexport function sessionLink(ui: KanbanPresentation, id: string, label = id, url?: string): string {\n if (!url) return `<button type=\"button\" data-session=\"${escapeAttr(id)}\">${escapeHTML(label)}</button>`;\n return linkPair(ui, url, label, id);\n}\nexport function linkPair(ui: KanbanPresentation, href: string, label: string, sessionId?: string): string {\n return `<span class=\"kanban__session-links\"><a href=\"${escapeAttr(href)}\"${sessionId ? ` data-session=\"${escapeAttr(sessionId)}\" title=\"${escapeAttr(ui.text('openSessionInTab'))}\"` : ''}>${escapeHTML(label)}</a></span>`;\n}\n","import type {KanbanPresentation} from './ports';\nimport {escapeHTML, escapeAttr} from './html';\nimport {kanbanReference, type KanbanBoardSummary} from '../contracts';\n\nexport function referenceView(ui: KanbanPresentation, board: KanbanBoardSummary, entity?: {id: string; number?: number; kind?: 'log' | 'decision'}): string {\n return `<div class=\"kanban__reference\"><code>${escapeHTML(kanbanReference(board, entity))}</code>${referenceMenu(ui, board, entity)}</div>`;\n}\nexport function referenceMenu(ui: KanbanPresentation, board: KanbanBoardSummary, entity?: {id: string; number?: number; kind?: 'log' | 'decision'}, actions = ''): string {\n const reference = kanbanReference(board, entity);\n const path = `/board/${encodeURIComponent(board.id)}${entity ? entity.kind ? '/@record/' + encodeURIComponent(entity.id) : '/' + encodeURIComponent(entity.id) : ''}`;\n return `<details class=\"kanban__menu\" data-popover><summary aria-label=\"${escapeAttr(ui.text('referenceActions'))}\" title=\"${escapeAttr(ui.text('referenceActions'))}\">${ui.icons.more}</summary>\n <div class=\"kanban__menu-content\"><code class=\"kanban__menu-reference\">${escapeHTML(reference)}</code>${actions}<button type=\"button\" data-action=\"copy-reference\" data-copy=\"${escapeAttr(reference)}\">${escapeHTML(ui.text('copyReference'))}</button>\n <button type=\"button\" data-action=\"copy-link\" data-copy=\"${escapeAttr(path)}\">${escapeHTML(ui.text('copyLink'))}</button></div></details>`;\n}\nexport async function copyReference(ui: KanbanPresentation, button: HTMLElement): Promise<void> {\n const value = button.dataset.copy ?? '';\n const text = button.dataset.action === 'copy-link' ? ui.referenceUrl?.(value) ?? value : value;\n try {\n await navigator.clipboard.writeText(text);\n if (button.dataset.action === 'copy-resource') {button.title = ui.text('copied'); button.setAttribute('aria-label', ui.text('copied'));}\n else button.textContent = ui.text('copied');\n }\n catch {throw Object.assign(new Error(ui.text('copyFailed')), {code:'COPY_FAILED'});}\n}\n","import {escapeAttr} from './html';\nimport type {KanbanBoardSummary, KanbanSuggestion, KanbanSuggestionKind} from '../contracts';\nexport interface SuggestionField {\n name: string; label: string; kind: KanbanSuggestionKind; selected?: KanbanSuggestion[];\n multiple?: boolean; free?: boolean; manual?: boolean; required?: boolean; excludeItemId?: string;\n}\nexport function suggestionField(options: SuggestionField): string {\n return `<div class=\"kanban__suggest\" data-kanban-suggest=\"${escapeAttr(JSON.stringify(options))}\"></div>`;\n}\nexport function selectedItems(board: KanbanBoardSummary, ids: string[]): KanbanSuggestion[] {\n return ids.map(id => ({id, label: board.items.find(item => item.id === id)?.title ?? id}));\n}\n","import type {KanbanPresentation} from './ports';\nimport {escapeHTML, escapeAttr} from './html';\nimport type {KanbanExecutionSession,KanbanExecutionSessionDetail, KanbanRelatedSession, KanbanSessionExecution} from '../contracts';\nimport {sessionLink} from './session-links';\nimport {suggestionField} from './suggestion-field';\nexport function executionBadge(ui: KanbanPresentation, session?:KanbanExecutionSession,sessionUrl?: (id:string)=>string):string {\n if(!session) return '';\n const resource=session.resourceId??session.sessionId;\n return `<span class=\"kanban__execution\" data-execution-state=\"${escapeAttr(session.state)}\" data-stale=\"${session.stale}\"><span>${sessionUrl?sessionLink(ui,resource,ui.text('executionSession'),sessionUrl(resource)):escapeHTML(ui.text('executionSession'))} · ${escapeHTML(ui.text('sessionState.'+session.state))}${session.stale?' · '+escapeHTML(ui.text('activityStale')):''}</span><small>${escapeHTML(activityTime(ui, session))}</small></span>`;\n}\nfunction activityTime(ui: KanbanPresentation, session:KanbanExecutionSession):string {\n if(session.lastActivityAt===undefined) return ui.text('activityUnknown');\n const minutes=Math.max(0,Math.floor((Date.now()-session.lastActivityAt)/60000));\n return ui.text('lastActivity')+' · '+(minutes<1?ui.text('justNow'):minutes<60?ui.text('minutesAgo').replace('{count}',String(minutes)):new Date(session.lastActivityAt).toLocaleString());\n}\nexport function executionSessionView(ui: KanbanPresentation, detail:KanbanExecutionSessionDetail,editable:boolean, sessionUrl?: (id: string) => string):string {\n const session=detail.current,resource=session?.resourceId??session?.sessionId;\n return `<section class=\"kanban__execution-detail\"><h4>${escapeHTML(ui.text('executionSession'))}</h4><p>${escapeHTML(ui.text('executionSessionHelp'))}</p>\n ${detail.continuation ? `<button type=\"button\" data-action=\"continue-execution\" data-dispatch=\"${escapeAttr(detail.continuation.previousDispatchId)}\">${escapeHTML(ui.text('continueExecution'))}</button>` : ''}\n ${session?`${executionBadge(ui, session)}${sessionLink(ui, resource!, session.title ?? session.sessionId, sessionUrl?.(resource!))}<small>${escapeHTML(session.sessionId)}</small>${session.observedAt?`<small>${escapeHTML(ui.text('observedAt'))} · ${escapeHTML(new Date(session.observedAt).toLocaleString())}</small>`:''}${session.code?`<p>${escapeHTML(ui.text('activityReadFailed'))} (${escapeHTML(session.code)})</p>`:''}`:`<p>${escapeHTML(ui.text('noExecutionSession'))}</p>`}\n ${editable?`<details><summary>${escapeHTML(ui.text(session?'changeExecutionSession':'bindExecutionSession'))}</summary><form data-form=\"execution-session\">${suggestionField({name:'executionSession',label:'executionSession',kind:'session',manual:true,required:true})}<button>${escapeHTML(ui.text('bindExecutionSession'))}</button><p data-execution-error role=\"alert\" hidden></p></form></details>`:''}\n </section>`;\n}\nexport function relatedSessionsView(ui: KanbanPresentation, detail: KanbanExecutionSessionDetail, sessionUrl?: (id: string) => string): string {\n const sessions = detail.sessions ?? legacySessions(detail);\n return `${detail.sessionsCode ? `<p role=\"alert\">${escapeHTML(ui.text('sessionRelationsIncomplete'))} (${escapeHTML(detail.sessionsCode)})</p>` : ''}\n ${sessions.length ? `<ul class=\"kanban__session-list\">${sessions.map(session => relatedSession(ui, session, sessionUrl)).join('')}</ul>` : `<p>${escapeHTML(ui.text('noRelatedSessions'))}</p>`}`;\n}\nfunction relatedSession(ui: KanbanPresentation, session: KanbanRelatedSession, sessionUrl?: (id: string) => string): string {\n const resource = session.resourceId ?? session.sessionId, title = session.title ?? session.sessionId;\n return `<li class=\"kanban__related-session\" data-related-session=\"${escapeAttr(session.sessionId)}\"><div class=\"kanban__session-heading\" title=\"${escapeAttr(title)}\">${sessionLink(ui, resource, title, sessionUrl?.(resource))}</div>\n <small>${escapeHTML(session.sessionId)}</small>${session.createdAt !== undefined ? `<small>${escapeHTML(ui.text('sessionCreatedAt'))} · ${escapeHTML(date(session.createdAt))}</small>` : ''}<p>${session.current ? `<strong>${escapeHTML(ui.text('currentExecution'))}</strong> · ` : ''}${session.purposes.map(purpose => escapeHTML(ui.text('sessionPurpose.' + purpose))).join(' · ')} · ${escapeHTML(ui.text('sessionState.' + session.state))}${session.stale ? ' · ' + escapeHTML(ui.text('activityStale')) : ''}</p>\n ${session.code ? `<p role=\"alert\">${escapeHTML(ui.text('activityReadFailed'))} (${escapeHTML(session.code)})</p>` : ''}\n ${session.executions.length ? `<details><summary>${escapeHTML(ui.text('sessionExecutions'))} (${session.executions.length})</summary><ol>${session.executions.map(run => executionView(ui, run)).join('')}</ol></details>` : ''}</li>`;\n}\nfunction executionView(ui: KanbanPresentation, run: KanbanSessionExecution): string {\n const label = run.previousDispatchId ? ui.text('sessionContinuation') : ui.text('sessionPurpose.' + run.purpose);\n const showState = run.state && run.state !== run.outcome && !(run.state === 'completed' && ['succeeded', 'accepted', 'rejected'].includes(run.outcome ?? ''));\n const fields: Array<[string, string | undefined]> = [[ui.text('sessionExecutionId'), run.id], [ui.text('sessionRoundId'), run.roundId], [ui.text('sessionTurnId'), run.turnId],\n [ui.text('sessionPreviousExecution'), run.previousDispatchId], [ui.text(run.roundId ? 'sessionExecutionStarted' : 'sessionExecutionPrepared'), date(run.createdAt)], [ui.text('sessionExecutionEnded'), date(run.completedAt)],\n ...run.resources?.map(resource => [resource.label, resource.value] as [string, string]) ?? []];\n return `<li class=\"kanban__session-run\"><p>${escapeHTML(label)}${run.attempt ? ' · #' + run.attempt : ''}${run.outcome ? ' · ' + escapeHTML(ui.text('sessionRunOutcome.' + run.outcome)) : ''}${showState ? ' · ' + escapeHTML(ui.text('sessionState.' + run.state)) : ''}</p>\n <dl>${fields.filter((field): field is [string, string] => field[1] !== undefined).map(([key, value]) => `<dt>${escapeHTML(key)}</dt><dd>${escapeHTML(value)}</dd>`).join('')}</dl>${run.code ? `<p role=\"alert\">${escapeHTML(run.code)}</p>` : ''}</li>`;\n}\nfunction date(value?: number): string | undefined {return value === undefined ? undefined : new Date(value).toLocaleString();}\nfunction legacySessions(detail: KanbanExecutionSessionDetail): KanbanRelatedSession[] {\n return [...new Map(detail.history.map(row => [row.sessionId, row])).values()].map(row => ({\n ...(detail.current?.sessionId === row.sessionId ? detail.current : {sessionId: row.sessionId, state: 'unknown' as const, stale: true, recent: false}),\n current: detail.current?.sessionId === row.sessionId, purposes: ['execution'], executions: [],\n }));\n}\nexport function executionFilter(ui: KanbanPresentation, value='all'):string {\n return `<select name=\"execution\" aria-label=\"${escapeAttr(ui.text('executionFilter'))}\">${['all','running','recent','active'].map(filter=>`<option value=\"${filter}\" ${filter===value?'selected':''}>${escapeHTML(ui.text('executionFilter.'+filter))}</option>`).join('')}</select>`;\n}\n","import {taskStatus, phaseFilter} from './task-state';\nimport type {KanbanPresentation} from './ports';\nimport {referenceMenu} from './references';\nimport {kanbanReference} from '../contracts';\nimport {suggestionField} from './suggestion-field';\nimport {escapeHTML, escapeAttr} from './html';\nimport type {KanbanBoardSummary, KanbanItem, KanbanSessionItemPage, KanbanSessionActivityQuery, KanbanPrincipal} from '../contracts';\nimport {executionBadge,executionFilter} from './session-view';\n\nexport const states: KanbanItem['status'][] = ['proposed', 'backlog', 'open', 'claimed', 'review', 'completed', 'cancelled'];\nexport const button = (ui: KanbanPresentation, action: string, key: string, primary = false) => `<button type=\"button\"${primary ? ' class=\"kanban__primary\"' : ''} data-action=\"${escapeAttr(action)}\">${escapeHTML(ui.text(key))}</button>`;\nexport function contextTabs(ui: KanbanPresentation, active = 'board'): string {\n return `<nav class=\"kanban__context-tabs\" aria-label=\"${escapeAttr(ui.text('recordContext'))}\">${[['board', 'tabBoard'], ['log', 'tabLog'], ['decision', 'tabDecision']].map(([value, key]) =>\n `<button type=\"button\" data-context=\"${value}\" ${active === value ? 'aria-current=\"page\"' : ''}>${escapeHTML(ui.text(key))}</button>`).join('')}</nav>`;\n}\nexport function field(ui: KanbanPresentation, name: string, key: string, value = '', required = true, type = 'text'): string {\n return `<label>${escapeHTML(ui.text(key))}<input name=\"${name}\" type=\"${type}\" value=\"${escapeAttr(value)}\" ${required ? 'required' : ''}></label>`;\n}\nexport function textarea(ui: KanbanPresentation, name: string, key: string, value = ''): string {\n return `<label>${escapeHTML(ui.text(key))}<textarea name=\"${name}\" required>${escapeHTML(value)}</textarea></label>`;\n}\nexport function owns(item: KanbanItem, actor?: KanbanPrincipal): boolean {\n return !!actor && !!item.owner && (item.owner.kind ?? 'agent') === actor.kind && (item.owner.id ?? item.owner.agentId) === actor.id;\n}\nexport function navigation(ui: KanbanPresentation, boards: KanbanBoardSummary[], selected: string): string {\n return `<header class=\"kanban__sidebar-header\"><h2>${escapeHTML(ui.text('title'))}</h2>${button(ui, 'new-board', 'createShort')}</header>\n <section class=\"kanban__board-list\"><p class=\"kanban__caption\">${escapeHTML(ui.text('scope'))}</p><nav aria-label=\"${escapeAttr(ui.text('title'))}\">${boards.map(board =>\n `<button type=\"button\" data-board=\"${escapeAttr(board.id)}\" ${board.id === selected ? 'aria-current=\"page\"' : ''}><small>${escapeHTML(kanbanReference(board))}</small><span>${escapeHTML(board.title)}</span></button>`).join('')}</nav></section>\n <footer class=\"kanban__sidebar-tools\"><details class=\"kanban__reference-lookup\"><summary>${escapeHTML(ui.text('openReference'))}</summary>${referenceLookup(ui)}</details>\n <details class=\"kanban__scope-note\"><summary>${escapeHTML(ui.text('scopeInfo'))}</summary><p>${escapeHTML(ui.text('scopeHelp'))}</p></details></footer>`;\n}\nexport function referenceLookup(ui: KanbanPresentation): string {\n return `<form data-form=\"reference\"><input name=\"reference\" aria-label=\"${escapeAttr(ui.text('reference'))}\" placeholder=\"${escapeAttr(ui.text('referencePlaceholder'))}\" required><button>${escapeHTML(ui.text('openShort'))}</button></form>`;\n}\nexport function boardHeader(ui: KanbanPresentation, board: KanbanBoardSummary, active = 'board', automation = false): string {\n const [action, key] = active === 'log' ? ['new-log', 'newLog'] : active === 'decision' ? ['new-decision', 'newDecision'] : ['new-item', 'newItem'];\n const actions = `<div class=\"kanban__mobile-create\">${button(ui, action, key)}</div>${button(ui, 'refresh', 'refresh')}${automation ? button(ui, 'automation', 'automationTitle') : ''}`;\n return `<header class=\"kanban__page-header\" data-titlebar><span class=\"kanban__navigation\" data-navigation></span><div class=\"kanban__board-heading\"><h2 data-titlebar-title title=\"${escapeAttr(board.title)}\">${escapeHTML(board.title)}</h2></div>\n <div class=\"kanban__header-actions\"><span class=\"kanban__desktop-create\">${button(ui, action, key, true)}</span><span class=\"kanban__window-navigation\" data-window-navigation></span>${referenceMenu(ui, board, undefined, actions)}</div></header>`;\n}\nexport function catalogView(ui: KanbanPresentation, boards: KanbanBoardSummary[]): string {\n return `<header class=\"kanban__page-header\" data-titlebar><span class=\"kanban__navigation\" data-navigation></span><div class=\"kanban__board-heading\"><h2 data-titlebar-title>${escapeHTML(ui.text('title'))}</h2></div><span class=\"kanban__window-navigation\" data-window-navigation></span>${button(ui, 'new-board', 'createShort')}</header>\n <div class=\"kanban__record-list\">${boards.map(board => `<button type=\"button\" class=\"kanban__card\" data-board=\"${escapeAttr(board.id)}\"><strong>${escapeHTML(board.title)}</strong><small>${escapeHTML(kanbanReference(board))}</small></button>`).join('') || `<p>${escapeHTML(ui.text('emptyBoards'))}</p>`}</div>`;\n}\nexport function boardView(ui: KanbanPresentation, board: KanbanBoardSummary, page: KanbanSessionItemPage, query: KanbanSessionActivityQuery, activity = false, automation = false, sessionUrl?: (id:string)=>string): string {\n const columns = query.view === 'archive' ? [{id: 'archive', label: ui.text('archive'), states}] : board.columns ?? states.map(state => ({id: state, label: ui.text(state), states: [state]}));\n return `${boardHeader(ui, board, 'board', automation)}${contextTabs(ui)}<form data-form=\"filter\" class=\"kanban__filters\"><input name=\"search\" aria-label=\"${escapeAttr(ui.text('search'))}\" placeholder=\"${escapeAttr(ui.text('search'))}\" value=\"${escapeAttr(query.search ?? '')}\">\n <details class=\"kanban__filter-more\" data-popover><summary>${escapeHTML(ui.text('moreFilters'))}${query.area || query.milestone || query.view !== 'all' || query.execution && query.execution !== 'all' ? '<span class=\"kanban__filter-dot\" aria-hidden=\"true\"></span>' : ''}</summary><div class=\"kanban__filter-fields\"><label>${escapeHTML(ui.text('filter'))}<select name=\"view\" aria-label=\"${escapeAttr(ui.text('filter'))}\">${['all', 'backlog', 'ready', 'in-progress', 'review', 'closed', 'proposed', 'archive'].map(view => `<option value=\"${view}\" ${view === query.view ? 'selected' : ''}>${escapeHTML(ui.text(view === 'ready' ? 'open' : view === 'in-progress' ? 'claimed' : view === 'closed' ? 'completed' : view))}</option>`).join('')}</select></label>${phaseFilter(ui,query.phase)}${activity ? executionFilter(ui, query.execution) : ''}${suggestionField({name: 'area', label: 'area', kind: 'area', free: true, selected: query.area ? [{id: query.area, label: query.area}] : []})}\n ${suggestionField({name: 'milestone', label: 'milestone', kind: 'milestone', free: true, selected: query.milestone ? [{id: query.milestone, label: query.milestone}] : []})}</div></details><button>${escapeHTML(ui.text('filter'))}</button></form>\n <p class=\"kanban__count\" role=\"status\">${escapeHTML(ui.text('total', {count: page.total}))}</p><div class=\"kanban__columns\" data-has-items=\"${page.items.length > 0}\">${columns.map(column => {\n const items = page.items.filter(item => column.states.includes(item.status));\n return `<section class=\"kanban__column\" data-empty=\"${items.length === 0}\"><h3>${escapeHTML(column.label)} <small>${items.length}</small></h3><div class=\"kanban__column-items\" data-column=\"${escapeAttr(column.id)}\" tabindex=\"0\" aria-label=\"${escapeAttr(column.label + ' · ' + ui.text('columnItems'))}\">${items.map(item=>itemCard(ui,board,item,sessionUrl)).join('') || `<p>${escapeHTML(ui.text('emptyItems'))}</p>`}</div></section>`;\n }).join('')}</div><footer class=\"kanban__toolbar\"><small>${escapeHTML(ui.text('scrollHint'))}</small>${button(ui, 'scroll-left', 'previousColumns')}${button(ui, 'scroll-right', 'nextColumns')}${query.cursor ? button(ui, 'first', 'first') : ''}${page.nextCursor ? button(ui, 'next', 'next') : ''}</footer>`;\n}\n\nfunction itemCard(ui:KanbanPresentation,board:KanbanBoardSummary,item:KanbanSessionItemPage['items'][number],sessionUrl?: (id:string)=>string):string {\n const content=`<strong>${escapeHTML(item.title)}</strong><small>${escapeHTML(kanbanReference(board, item))}</small><small>P${item.planning.priority} · ${escapeHTML(item.planning.area ?? '')} · ${escapeHTML(item.planning.milestone ?? '')}</small>${taskStatus(ui,item.task)}${item.pendingAmendments ? `<small class=\"kanban__badge\">${escapeHTML(ui.text('pendingAmendments'))} (${item.pendingAmendments})</small>` : ''}${item.progress ? `<small>${item.progress.completed}/${item.progress.total}</small>` : ''}`;\n const identity=item.task?.sessionId?`data-session=\"${escapeAttr(item.task.sessionId)}\"`:`data-item=\"${escapeAttr(item.id)}\"`;\n return `<article class=\"kanban__card\"><button type=\"button\" class=\"kanban__item-open\" ${identity}>${content}</button>${item.task?.sessionId?`<button type=\"button\" data-item=\"${escapeAttr(item.id)}\" title=\"${escapeAttr(ui.text('details'))}\" aria-label=\"${escapeAttr(ui.text('details'))}\">${escapeHTML(ui.text('details'))}</button>`:''}<span data-item-execution=\"${escapeAttr(item.id)}\">${executionBadge(ui,item.execution,sessionUrl)}</span></article>`;\n}\n","import {taskStatus} from './task-state';\nimport {DEFAULT_KANBAN_WORK_TYPES, type KanbanBoardSummary, type KanbanItem, type KanbanSessionItemPage} from '../contracts';\nimport type {KanbanPresentation} from './ports';\nimport {escapeAttr, escapeHTML} from './html';\nimport {sessionLink} from './session-links';\nimport {button} from './view';\n\nexport function childType(board: KanbanBoardSummary, parent: KanbanItem): string | undefined {\n const types = board.workTypes ?? DEFAULT_KANBAN_WORK_TYPES;\n const rank = types.find(type => type.id === (parent.planning?.kind ?? board.defaultWorkType ?? 'task'))?.rank;\n const candidates = types.filter(type => rank !== undefined && type.rank > rank);\n return (candidates.find(type => type.id === (board.defaultWorkType ?? 'task')) ?? candidates.sort((a, b) => a.rank - b.rank)[0])?.id;\n}\nexport function childrenView(ui: KanbanPresentation, page: KanbanSessionItemPage, cursor: string | undefined, canCreate: boolean, sessionUrl?: (id: string) => string): string {\n return `<h4>${escapeHTML(ui.text('children'))} (${page.total})</h4><div class=\"kanban__actions\">${canCreate ? button(ui, 'new-child', 'newChild') : ''}</div>\n <div class=\"kanban__record-list\">${page.items.map(item => `<article class=\"kanban__card\"><button type=\"button\" data-item=\"${escapeAttr(item.id)}\"><strong>${escapeHTML(item.title)}</strong></button>${taskStatus(ui,item.task)}${item.task?.sessionId?sessionLink(ui,item.task.sessionId,ui.text('executionSession'),sessionUrl?.(item.task.sessionId)):''}${item.execution ? sessionLink(ui, item.execution.resourceId??item.execution.sessionId, ui.text('executionSession'), sessionUrl?.(item.execution.resourceId??item.execution.sessionId)) : ''}</article>`).join('')}</div>\n <div class=\"kanban__actions\">${cursor ? button(ui, 'children-first', 'first') : ''}${page.nextCursor ? `<button type=\"button\" data-action=\"children-next\" data-cursor=\"${escapeAttr(page.nextCursor)}\">${escapeHTML(ui.text('next'))}</button>` : ''}</div>`;\n}\n","import type {KanbanPresentation} from './ports';\nimport type {KanbanBoardSummary} from '../contracts';\nimport {referenceMenu} from './references';\nimport {escapeHTML, escapeAttr} from './html';\n\n/** Detail and creation panels use the same compact navigation row. */\nexport function panelHeader(ui: KanbanPresentation, title: string, board?: KanbanBoardSummary,\n entity?: {id: string; number?: number; kind?: 'log' | 'decision'}): string {\n const label = escapeAttr(ui.text('close'));\n return `<header class=\"kanban__panel-header\" data-titlebar><button type=\"button\" class=\"kanban__panel-back\" data-titlebar-back data-action=\"close-panel\" aria-label=\"${label}\" title=\"${label}\">${ui.icons.back ?? ui.icons.close}</button>\n <h3 data-titlebar-title title=\"${escapeAttr(title)}\">${escapeHTML(title)}</h3><span class=\"kanban__window-navigation\" data-window-navigation></span>${board ? referenceMenu(ui, board, entity, `<p class=\"kanban__menu-title\">${escapeHTML(title)}</p>`) : ''}</header>`;\n}\n","import type {KanbanPresentation} from './ports';\nimport {panelHeader} from './panel-header';\nimport {kanbanReference} from '../contracts';\nimport {suggestionField, selectedItems} from './suggestion-field';\nimport {escapeHTML, escapeAttr} from './html';\nimport type {KanbanBoardSummary, KanbanItem, KanbanProjectRecord, KanbanRecordPage, KanbanSourceRef} from '../contracts';\nimport {button, field, textarea, contextTabs, boardHeader} from './view';\nexport function recordsView(ui: KanbanPresentation, page: KanbanRecordPage, kind: KanbanProjectRecord['kind'], hasPrevious: boolean, board?: KanbanBoardSummary): string {\n return `${board ? boardHeader(ui, board, kind) : `<header class=\"kanban__toolbar\"><h2>${escapeHTML(ui.text(kind))}</h2></header>`}\n ${contextTabs(ui, kind)}<p>${escapeHTML(ui.text('recordHelp'))}</p><div class=\"kanban__record-list\" tabindex=\"0\" aria-label=\"${escapeAttr(ui.text(kind))}\">${recordLinks(ui, page, board)}${!page.total ? `<p>${escapeHTML(ui.text('emptyRecords'))}</p>` : ''}</div>\n <footer class=\"kanban__toolbar\">${hasPrevious ? button(ui, 'records-first', 'first') : ''}${page.nextCursor ? button(ui, 'records-next', 'next') : ''}</footer>`;\n}\nexport function recordLinks(ui: KanbanPresentation, page: KanbanRecordPage, board?: KanbanBoardSummary): string {\n return page.items.map(record => `<button type=\"button\" class=\"kanban__card\" data-record=\"${escapeAttr(record.id)}\"><strong>${escapeHTML(record.title)}</strong>${board && !record.activity ? `<small>${escapeHTML(kanbanReference(board, record))}</small>` : ''}<small>${escapeHTML(ui.text(record.activity ? 'automaticLog' : record.kind))} · ${escapeHTML(ui.text(record.status))} · ${escapeHTML(new Date(record.createdAt).toLocaleString())}</small></button>`).join('');\n}\nexport function sourcesView(ui: KanbanPresentation, sources: KanbanSourceRef[]): string {\n return sources.length ? `<ul>${sources.map(source => `<li><button type=\"button\" data-session=\"${escapeAttr(source.sessionId)}\">${escapeHTML(source.sessionId)}</button><small>${escapeHTML(source.messageId)} · ${escapeHTML(source.revision)} · ${escapeHTML(source.role)}</small></li>`).join('')}</ul>` : `<p>${escapeHTML(ui.text('noSources'))}</p>`;\n}\nexport function recordForm(ui: KanbanPresentation, kind: KanbanProjectRecord['kind'], board: KanbanBoardSummary, itemId = '', resources: import('../contracts').KanbanRecordResource[] = []): string {\n return `${panelHeader(ui, ui.text(kind === 'log' ? 'newLog' : 'newDecision'))}<form data-form=\"record\">\n <input type=\"hidden\" name=\"kind\" value=\"${kind}\">${field(ui, 'title', 'name')}${textarea(ui, 'content', 'content')}${kind === 'decision' ? textarea(ui, 'rationale', 'rationale') + suggestionField({name: 'supersedes', label: 'supersedes', kind: 'decision'}) : ''}\n ${kind === 'decision' && resources.length ? `<label>${escapeHTML(ui.text('recordResources'))}<select name=\"recordResources\" multiple>${resources.map(resource => `<option value=\"${escapeAttr(JSON.stringify(resource.reference))}\">${escapeHTML(resource.label)}</option>`).join('')}</select></label>` : ''}\n ${itemChoices(board, itemId)}<details><summary>${escapeHTML(ui.text('sources'))}</summary>${suggestionField({name: 'sourceSession', label: 'sourceSession', kind: 'session', manual: true})}${field(ui, 'sourceMessage', 'sourceMessage', '', false)}${field(ui, 'sourceRevision', 'sourceRevision', '', false)}</details><button>${escapeHTML(ui.text('save'))}</button></form>`;\n}\nexport function recordDetail(ui: KanbanPresentation, record: KanbanProjectRecord, board: KanbanBoardSummary, executions?: import('../contracts').KanbanRecordExecution[]): string {\n return `${panelHeader(ui, record.title, board, record)}\n <p>${escapeHTML(ui.text(record.kind))} · ${escapeHTML(ui.text(record.status))} · ${escapeHTML(ui.text(record.origin))}</p>${record.activity ? '' : `<small>${escapeHTML(ui.text('recordId'))}: ${escapeHTML(record.id)}</small>`}<p>${escapeHTML(ui.text('author'))}: ${escapeHTML(record.author.id)} · ${escapeHTML(new Date(record.createdAt).toLocaleString())}</p>\n <section data-reference-links></section><section class=\"kanban__prose\"><h4>${escapeHTML(ui.text('content'))}</h4><p>${escapeHTML(record.content)}</p>${record.rationale ? `<h4>${escapeHTML(ui.text('rationale'))}</h4><p>${escapeHTML(record.rationale)}</p>` : ''}</section>\n ${record.status === 'draft' ? `<div class=\"kanban__actions\">${button(ui, 'confirm-record', 'confirmRecord')}${button(ui, 'reject-record', 'rejectRecord')}</div>` : ''}\n ${record.kind === 'decision' && record.status === 'confirmed' && executions ? recordExecutionView(ui, board, executions) : ''}\n ${(record.externalRefs ?? []).map(ref => `<p>${escapeHTML(ref.system)}: ${escapeHTML(ref.id)}</p>`).join('')}\n ${record.supersedes ? recordLink(ui, record.supersedes, 'supersedes') : ''}${record.supersededBy ? recordLink(ui, record.supersededBy, 'superseded') : ''}\n <h4>${escapeHTML(ui.text('itemIds'))}</h4>${record.itemIds.map(id => `<button type=\"button\" data-item=\"${escapeAttr(id)}\">${escapeHTML(board.items.find(item => item.id === id)?.title ?? id)}</button>`).join('')}\n ${record.activity ? '' : `<form data-form=\"record-link\">${suggestionField({name: 'itemId', label: 'itemIds', kind: 'item', required: true})}<button>${escapeHTML(ui.text('linkRecord'))}</button></form>`}<h4>${escapeHTML(ui.text('sources'))}</h4>${sourcesView(ui, record.sources)}`;\n}\nfunction recordExecutionView(ui: KanbanPresentation, board: KanbanBoardSummary, executions: import('../contracts').KanbanRecordExecution[]): string {\n const completed = executions.some(run => run.state === 'completed');\n const actions = completed ? `<p>${escapeHTML(ui.text('completedFollowup'))}</p>`\n : `${button(ui, 'run-record', 'runRecord')}<details><summary>${escapeHTML(ui.text('referenceActions'))}</summary>${button(ui, 'run-record-separate', 'runRecordSeparate')}</details>`;\n return `<div class=\"kanban__actions\">${actions}</div>${completed ? '' : `<p>${escapeHTML(ui.text('runRecordHelp'))}</p>`}\n ${executions.map(run => `<p><button type=\"button\" ${run.rootItemId && run.boardId === board.id ? `data-item=\"${escapeAttr(run.rootItemId)}\"` : `data-board=\"${escapeAttr(run.boardId)}\"`}>${escapeHTML(ui.text(run.rootItemId && run.boardId === board.id ? 'executionWork' : 'executionBoard'))}</button> · ${escapeHTML(ui.text(run.state))}${run.code ? ` · ${escapeHTML(run.code)}` : ''}</p>`).join('')}`;\n}\nfunction recordLink(ui: KanbanPresentation, id: string, key: string): string {return `<p>${escapeHTML(ui.text(key))}: <button type=\"button\" data-record=\"${escapeAttr(id)}\">${escapeHTML(id)}</button></p>`;}\nexport function amendmentsView(ui: KanbanPresentation, item: KanbanItem): string {\n const pending = item.amendments?.filter(proposal => proposal.status === 'pending') ?? [];\n if (!pending.length) return '';\n return `<section class=\"kanban__amendments\"><h4>${escapeHTML(ui.text('amendments'))}</h4><p>${escapeHTML(ui.text('amendmentHint'))}</p>${pending.map(proposal => `<article><strong>${escapeHTML(proposal.proposedBy.id)}</strong><small> v${proposal.baseRevision}</small>\n <details><summary>${escapeHTML(ui.text('currentText'))}</summary><p>${escapeHTML(item.title)}</p><p>${escapeHTML(item.responsibility)}</p><p>${escapeHTML(item.acceptance)}</p></details>\n <h5>${escapeHTML(ui.text('proposedText'))}</h5><p>${escapeHTML(proposal.proposed.title)}</p><p>${escapeHTML(proposal.proposed.responsibility)}</p><p>${escapeHTML(proposal.proposed.acceptance)}</p>\n ${sourcesView(ui, proposal.sources)}<form data-form=\"amendment\" data-amendment=\"${escapeAttr(proposal.id)}\"><select name=\"decision\" aria-label=\"${escapeAttr(ui.text('amendments'))}\"><option value=\"accept\">${escapeHTML(ui.text('applyAmendment'))}</option><option value=\"reject\">${escapeHTML(ui.text('rejectAmendment'))}</option></select>${field(ui, 'reason', 'reason', '', false)}<button>${escapeHTML(ui.text('save'))}</button></form></article>`).join('')}</section>`;\n}\n\nfunction itemChoices( board: KanbanBoardSummary, itemId: string): string {\n return suggestionField({name: 'itemIds', label: 'itemIds', kind: 'item', multiple: true, selected: selectedItems(board, itemId ? [itemId] : [])});\n}\n","import type {KanbanEvent} from '../contracts';\n\n/** Old persisted heartbeat events remain available to audit readers, without cluttering task history. */\nexport function meaningfulItemEvents(events: KanbanEvent[]): KanbanEvent[] {\n const last = new Map<string, string>(), hidden = new Set<KanbanEvent>();\n for (const event of [...events].sort((a, b) => a.sequence - b.sequence)) {\n if (event.kind === 'renew') {hidden.add(event); continue;}\n if (event.kind !== 'observe-execution' || !event.data.dispatchId || !event.data.reason) continue;\n const key = JSON.stringify([event.boardId, event.itemId, event.data.dispatchId]);\n const state = JSON.stringify([event.data.reason, event.data.code, event.data.status]);\n if (last.get(key) === state) hidden.add(event);\n last.set(key, state);\n }\n return events.filter(event => !hidden.has(event));\n}\n","import {projectKanbanTask} from '../contracts/task-projection';\nimport {taskControls, taskStatus} from './task-state';\nimport {executableWorkItem, DEFAULT_KANBAN_WORK_TYPES} from '../contracts';\nimport type {KanbanPresentation, KanbanReviewGuidance} from './ports';\nimport {childType} from './children';\nimport {panelHeader} from './panel-header';\nimport {suggestionField, selectedItems} from './suggestion-field';\nimport {amendmentsView, sourcesView} from './context-view';\nimport {escapeHTML, escapeAttr} from './html';\nimport type {KanbanBoardSummary, KanbanEvent, KanbanItem, KanbanPrincipal, KanbanPlanning, KanbanItemResourceCatalog} from '../contracts';\nimport {button, field, textarea, owns} from './view';\nimport {meaningfulItemEvents} from './event-history';\n\nexport function newBoardForm(ui: KanbanPresentation): string {\n return `${panelHeader(ui, ui.text('newBoard'))}<form data-form=\"board\">${field(ui, 'title', 'boardName')}\n <label><input name=\"requireEstimate\" type=\"checkbox\">${escapeHTML(ui.text('requireEstimate'))}</label>\n ${save(ui)}</form>`;\n}\nexport function newItemForm(ui: KanbanPresentation, board: KanbanBoardSummary, parent?: KanbanItem, resources?:KanbanItemResourceCatalog): string {\n const preset: KanbanPlanning | undefined = parent ? {kind: childType(board, parent)!, parentId: parent.id, priority: parent.planning?.priority ?? 2, dependencies: [], references: []} : undefined;\n return `${panelHeader(ui, ui.text('newItem'))}<form data-form=\"item\">${field(ui, 'title', 'name')}\n ${textarea(ui, 'responsibility', 'responsibility')}${textarea(ui, 'acceptance', 'acceptance')}${launchModeField(ui)}${planningFields(ui, board, undefined, preset)}${itemResourceField(ui,resources,(board.workTypes??DEFAULT_KANBAN_WORK_TYPES).some(type=>type.id===(preset?.kind??board.defaultWorkType??'task')&&type.executable))}${save(ui)}</form>`;\n}\nexport function planningFields(ui: KanbanPresentation, board: KanbanBoardSummary, item?: KanbanItem, preset?: KanbanPlanning): string {\n const plan = preset ?? item?.planning, types = board.workTypes ?? DEFAULT_KANBAN_WORK_TYPES;\n return `<label>${escapeHTML(ui.text('type'))}<select name=\"kind\">${types.map(type => `<option data-executable=\"${type.executable}\" value=\"${escapeAttr(type.id)}\" ${type.id === (plan?.kind ?? board.defaultWorkType ?? 'task') ? 'selected' : ''}>${escapeHTML(type.label)}</option>`).join('')}</select></label>\n ${field(ui, 'priority', 'priority', String(plan?.priority ?? 2), true, 'number')}\n ${suggestionField({name: 'area', label: 'area', kind: 'area', free: true, selected: plan?.area ? [{id: plan.area, label: plan.area}] : []})}${suggestionField({name: 'milestone', label: 'milestone', kind: 'milestone', free: true, selected: plan?.milestone ? [{id: plan.milestone, label: plan.milestone}] : []})}\n ${suggestionField({name: 'parentId', label: 'parent', kind: 'parent', excludeItemId: item?.id, selected: selectedItems(board, plan?.parentId ? [plan.parentId] : [])})}${suggestionField({name: 'dependencies', label: 'dependencies', kind: 'dependency', multiple: true, excludeItemId: item?.id, selected: selectedItems(board, plan?.dependencies ?? [])})}\n ${field(ui, 'dueAt', 'dueAt', dateInput(plan?.dueAt), false, 'datetime-local')}`;\n}\nfunction dateInput(at?: number): string {\n if (at === undefined) return '';\n const date = new Date(at); return new Date(at - date.getTimezoneOffset() * 60000).toISOString().slice(0, 16);\n}\nconst save = (ui: KanbanPresentation) => `<div class=\"kanban__actions\"><button>${escapeHTML(ui.text('save'))}</button>${button(ui, 'close-panel', 'close')}</div>`;\nexport function detailView(ui: KanbanPresentation, board: KanbanBoardSummary, item: KanbanItem, actor: KanbanPrincipal | undefined, archived: boolean, events: KanbanEvent[], relatedSessions = false, guidance?: KanbanReviewGuidance, interactive = false, task = projectKanbanTask(item), fixAvailable = false): string {\n return `${panelHeader(ui, item.title, board, item)}${taskStatus(ui, task)}${archived ? '' : `<div class=\"kanban__actions\">${taskControls(ui,task,fixAvailable)}</div>`}\n <p>${escapeHTML(ui.text('origin'))}: ${escapeHTML(item.origin ? ui.text(item.origin.kind === 'discovery' ? 'flow' : 'manual') + ' · ' + item.origin.principal.id : ui.text('unknownOrigin'))}</p>\n <dl><dt>${escapeHTML(ui.text('itemId'))}</dt><dd>${escapeHTML(item.id)}</dd><dt>${escapeHTML(ui.text('responsibility'))}</dt><dd>${escapeHTML(item.responsibility)}</dd>\n <dt>${escapeHTML(ui.text('acceptance'))}</dt><dd>${escapeHTML(item.acceptance)}</dd><dt>${escapeHTML(ui.text('owner'))}</dt><dd>${escapeHTML(item.owner?.id ?? item.owner?.agentId ?? ui.text('none'))}</dd></dl>\n <p>${escapeHTML(ui.text(item.status))}${item.blocked ? ' · ' + escapeHTML(ui.text('blocked') + ': ' + item.blocked.reason) : ''}</p>\n ${interactive ? '<section data-item-operations></section>' : ''}\n ${item.status === 'review' ? interactive ? `<details><summary>${escapeHTML(ui.text('reviewFlow'))}</summary>${reviewGuidance(ui, guidance)}</details>` : reviewGuidance(ui, guidance) : ''}\n <div class=\"kanban__actions\">${controls(ui, board, item, actor, archived, interactive)}</div>\n ${item.issues?.filter(issue=>!issue.resolvedBy).map(issue=>`<form data-form=\"task-reply\"><input type=\"hidden\" name=\"attemptId\" value=\"${escapeAttr(issue.attemptId)}\"><input type=\"hidden\" name=\"replyTo\" value=\"${escapeAttr(issue.id)}\">${textarea(ui,'content','message')}<button>${escapeHTML(ui.text('send'))}</button></form>`).join('') ?? ''}\n ${amendmentsView(ui, item)}\n ${archived ? '' : detailForms(ui, board, item, actor)}\n ${(item.planning?.dependencies ?? []).length ? `<p>${escapeHTML(ui.text('dependencies'))}: ${(item.planning?.dependencies ?? []).map(id => `<button type=\"button\" data-item=\"${escapeAttr(id)}\">${escapeHTML(board.items.find(i => i.id === id)?.title ?? id)}</button>`).join(' ')}</p>` : ''}\n ${item.planning?.parentId ? `<p>${escapeHTML(ui.text('parent'))}: <button type=\"button\" data-item=\"${escapeAttr(item.planning.parentId)}\">${escapeHTML(board.items.find(parent => parent.id === item.planning?.parentId)?.title ?? item.planning.parentId)}</button></p>` : ''}\n <section data-children></section><section data-related-records></section><h4>${escapeHTML(ui.text('sources'))}</h4>${sourcesView(ui, item.sources ?? [])}\n <div data-analysis></div><div data-execution-session></div><section data-related-sessions-section></section><section data-reference-links></section><section data-work-resource-section></section>\n ${relatedSessions ? '' : `<h4>${escapeHTML(ui.text('sessions'))}</h4>${item.participants.map(p => `<button type=\"button\" data-session=\"${escapeAttr(p.sessionId)}\">${escapeHTML(p.sessionId)} · ${escapeHTML(p.roles.join(', '))}</button>`).join('') || `<p>${escapeHTML(ui.text('none'))}</p>`}`}\n ${archived ? '' : `<details><summary>${escapeHTML(ui.text('registerSession'))}</summary><p>${escapeHTML(ui.text('registerSessionHelp'))}</p><form data-form=\"session\">${suggestionField({name: 'sessionId', label: 'session', kind: 'session', manual: true, required: true})}<button>${escapeHTML(ui.text('registerSession'))}</button></form></details>`}\n <section data-item-events>${itemEventsView(ui, events)}</section>`;\n}\nfunction reviewGuidance(ui: KanbanPresentation, guidance?: KanbanReviewGuidance): string {\n const [summary, ...steps] = guidance?.paragraphs ?? [ui.text('reviewHelp')];\n return `<section class=\"kanban__review-guide\"><strong>${escapeHTML(guidance?.title ?? ui.text('reviewHelpTitle'))}</strong><p>${escapeHTML(summary)}</p>\n ${steps.length ? `<details><summary>${escapeHTML(ui.text('reviewFlow'))}</summary><ol>${steps.map(text => `<li>${escapeHTML(text)}</li>`).join('')}</ol></details>` : ''}</section>`;\n}\nexport function itemEventsView(ui: KanbanPresentation, events: KanbanEvent[]): string {\n return `<details><summary>${escapeHTML(ui.text('eventsHelp'))}</summary><ol>${meaningfulItemEvents(events).map(event => `<li>${escapeHTML(event.kind)} · ${escapeHTML(event.actor.id ?? event.actor.agentId ?? '')} · ${escapeHTML(new Date(event.at).toLocaleString())}${event.data.message ? `<p>${escapeHTML(event.data.message)}</p>` : ''}</li>`).join('')}</ol></details>`;\n}\nfunction controls(ui: KanbanPresentation, board: KanbanBoardSummary, item: KanbanItem, actor: KanbanPrincipal | undefined, archived: boolean, interactive = false): string {\n if (archived) return button(ui, 'restore', 'restore');\n if (['completed', 'cancelled'].includes(item.status)) return button(ui, 'archive', 'archiveItem');\n const executable = executableWorkItem(board,item);\n let result = item.status === 'proposed' ? button(ui, 'publish', 'publish') : item.status === 'backlog' && executable ? button(ui, 'ready', 'ready') : item.status === 'open' ? button(ui, 'defer', 'defer') : '';\n if (owns(item, actor) && item.status === 'claimed') result += button(ui, 'renew', 'renew');\n if (item.status === 'review' && !owns(item, actor)) result += interactive ? '' : button(ui, 'accept', 'accept') + button(ui, 'reject', 'reject');\n if (item.blocked) result += button(ui, 'unblock', 'unblock');\n if (item.status === 'review' && owns(item, actor) && board.policy.review !== 'assignee') result += `<p>${escapeHTML(ui.text('noReview'))}</p>`;\n return result;\n}\nfunction detailForms(ui: KanbanPresentation, board: KanbanBoardSummary, item: KanbanItem, actor?: KanbanPrincipal): string {\n if (['completed', 'cancelled'].includes(item.status)) return '';\n let forms = '';\n const executable = executableWorkItem(board,item);\n if (!executable && ['backlog', 'proposed', 'open'].includes(item.status)) forms += `<form data-form=\"close-plan\">${field(ui, 'resultRef', 'result')}<button>${escapeHTML(ui.text('closePlan'))}</button></form>`;\n if (!board.automation && executable && item.status === 'open' && !item.blocked) forms += `<form data-form=\"claim\">${board.policy.requireEstimate !== false ? estimates(ui) : ''}<button>${escapeHTML(ui.text('claim'))}</button></form>`;\n if (item.status === 'claimed' && owns(item, actor)) forms += `<form data-form=\"submit\">${field(ui, 'resultRef', 'result')}<button>${escapeHTML(ui.text('submit'))}</button></form>`;\n const automatic = item.eligiblePrincipals?.some(principal => principal.kind === board.automation?.worker.kind && principal.id === board.automation.worker.id);\n let secondary = '';\n if (['proposed', 'backlog', 'open'].includes(item.status) && !automatic && !board.automation) secondary += `<details><summary>${escapeHTML(ui.text('editItem'))}</summary><form data-form=\"edit-item\">${field(ui, 'title', 'name', item.title)}${textarea(ui, 'responsibility', 'responsibility', item.responsibility)}${textarea(ui, 'acceptance', 'acceptance', item.acceptance)}<button>${escapeHTML(ui.text('save'))}</button></form></details>`;\n if (!board.automation && item.launch?.admittedAt === undefined && ['proposed', 'backlog', 'open'].includes(item.status)) secondary += `<details><summary>${escapeHTML(ui.text('plan'))}</summary><form data-form=\"plan\">${planningFields(ui, board, item)}<button>${escapeHTML(ui.text('save'))}</button></form></details><form data-form=\"cancel\">${field(ui, 'reason', 'reason')}<button>${escapeHTML(ui.text('cancel'))}</button></form>`;\n if (owns(item, actor)) secondary += `<form data-form=\"release\">${field(ui, 'reason', 'reason')}<button>${escapeHTML(ui.text('release'))}</button></form>`;\n if (!item.blocked && (!item.owner || owns(item, actor))) secondary += `<form data-form=\"block\">${field(ui, 'reason', 'reason')}<button>${escapeHTML(ui.text('block'))}</button></form>`;\n return forms + `<details><summary>${escapeHTML(ui.text('moreActions'))}</summary>` + secondary + `<form data-form=\"message\">${textarea(ui, 'message', 'message')}<button>${escapeHTML(ui.text('send'))}</button></form></details>`;\n}\nfunction estimates(ui: KanbanPresentation): string {\n return `${field(ui, 'complexity', 'complexity', '1', true, 'number')}${field(ui, 'workUnits', 'workUnits', '1', true, 'number')}\n ${field(ui, 'duration', 'duration', '30', true, 'number')}<label>${escapeHTML(ui.text('confidence'))}<select name=\"confidence\">${['low', 'medium', 'high'].map(value => `<option value=\"${value}\">${escapeHTML(ui.text(value))}</option>`).join('')}</select></label>`;\n}\n\nexport function itemResourceField(ui:KanbanPresentation,catalog:KanbanItemResourceCatalog|undefined,executable:boolean):string {\n if(!catalog||!catalog.resources.length&&!catalog.selected)return '';\n const options=[...catalog.resources],selected=catalog.selected?JSON.stringify(catalog.selected):'';\n if(catalog.selected&&!options.some(option=>option.reference.system===catalog.selected!.system&&option.reference.id===catalog.selected!.id))options.push({reference:catalog.selected,label:catalog.selected.id});\n return `<label>${escapeHTML(ui.text('itemResource'))}<select name=\"itemResource\" data-resource-required=\"${catalog.required===true}\" ${catalog.required&&executable?'required':''} ${catalog.readonly?'disabled':''}>\n <option value=\"\">${escapeHTML(ui.text('none'))}</option>${options.map(option=>`<option value=\"${escapeAttr(JSON.stringify(option.reference))}\" ${JSON.stringify(option.reference)===selected?'selected':''}>${escapeHTML(option.label)}</option>`).join('')}</select>\n ${catalog.readonly?`<input type=\"hidden\" name=\"itemResource\" value=\"${escapeAttr(selected)}\">`:''}</label>`;\n}\n\nexport function editTaskForm(ui: KanbanPresentation, board: KanbanBoardSummary, item: KanbanItem, editId: string, resources?: KanbanItemResourceCatalog): string {\n return `${panelHeader(ui, item.title, board, item)}<p>${escapeHTML(ui.text('editLeaseHelp'))}</p><form data-form=\"save-edit\"><input type=\"hidden\" name=\"editId\" value=\"${escapeAttr(editId)}\">${field(ui,'title','name',item.title)}${textarea(ui,'responsibility','responsibility',item.responsibility)}${textarea(ui,'acceptance','acceptance',item.acceptance)}${launchModeField(ui,item.launch?.mode)}${planningFields(ui,board,item)}${itemResourceField(ui,resources,true)}${save(ui)}</form>`;\n}\n\nfunction launchModeField(ui: KanbanPresentation, mode = 'automatic'): string {\n return `<label>${escapeHTML(ui.text('taskStartMode'))}<select name=\"launchMode\">${['automatic', 'manual'].map(value => `<option value=\"${value}\" ${mode === value ? 'selected' : ''}>${escapeHTML(ui.text('taskMode.' + value))}</option>`).join('')}</select></label>`;\n}\n","import type {KanbanAutomationCatalog, KanbanBoardSummary, KanbanAnalysisStatus} from '../contracts';\nimport type {KanbanPresentation} from './ports';\nimport {panelHeader} from './panel-header';\nimport {escapeHTML, escapeAttr} from './html';\nimport {button} from './view';\n\nexport function automationForm(ui: KanbanPresentation, board: KanbanBoardSummary, catalog: KanbanAutomationCatalog): string {\n const settings = board.automation;\n const select = (name: 'planner' | 'executor' | 'preparation', label: string) => {\n const selected = settings?.[name], targets = [...(name === 'preparation' ? catalog.preparations ?? [] : catalog.targets)];\n if (settings?.[name] && !targets.some(entry => sameReference(entry.reference, selected)))\n targets.push({reference: settings[name], label: ui.text('automationTargetUnavailable')});\n return `<label>${escapeHTML(ui.text(label))}<select name=\"${name}\" ${name === 'preparation' ? '' : 'required'}><option value=\"\">${escapeHTML(ui.text('automationChoose'))}</option>${targets.map(entry => {\n const value = JSON.stringify(entry.reference);\n return `<option value=\"${escapeAttr(value)}\" ${sameReference(entry.reference, selected) ? 'selected' : ''}>${escapeHTML(entry.label)}</option>`;\n }).join('')}</select></label>`;\n };\n return `${panelHeader(ui, ui.text('automationTitle'))}<form data-form=\"automation\">\n <p>${escapeHTML(ui.text('automationHelp'))}</p>\n <label><input type=\"checkbox\" name=\"enabled\" ${settings?.enabled ? 'checked' : ''}>${escapeHTML(ui.text('automationEnabled'))}</label>\n ${select('planner', 'automationPlanner')}${select('executor', 'automationExecutor')}${select('preparation', 'automationPreparation')}<div data-preparation-options>${preparationFields(board, catalog)}</div>\n <label><input type=\"checkbox\" name=\"autoAccept\" ${settings?.autoAccept ? 'checked' : ''}>${escapeHTML(ui.text('automationAutoAccept'))}</label>\n <p>${escapeHTML(ui.text('automationReviewHelp'))}</p>\n <div class=\"kanban__actions\"><button>${escapeHTML(ui.text('save'))}</button>${button(ui, 'close-panel', 'close')}</div></form>`;\n}\nexport function analysisView(ui: KanbanPresentation, status: KanbanAnalysisStatus | null): string {\n if (!status) return `<p>${escapeHTML(ui.text('automationPending'))}</p>`;\n return `<section><h4>${escapeHTML(ui.text('automationAnalysis'))}</h4><p>${escapeHTML(ui.text('automationState.' + status.state))}</p>\n ${status.reason ? `<p>${escapeHTML(status.reason)}</p>` : ''}${status.code ? `<p>${escapeHTML(ui.text('errors.' + status.code))}</p>` : ''}\n ${['failed', 'clarification'].includes(status.state) ? button(ui, 'reanalyze', 'automationReanalyze') : ''}</section>`;\n}\n\nexport function preparationFields(board: KanbanBoardSummary, catalog: KanbanAutomationCatalog, reference: unknown = board.automation?.preparation): string {\n const selected = reference;\n const entries = catalog.preparations?.filter(entry => sameReference(entry.reference, selected)) ?? [];\n return entries.flatMap(entry => (entry.options ?? []).map(option => {\n const value = board.automation?.preparationOptions?.[option.name] ?? option.defaultValue ?? '';\n const name = 'preparation-option-' + option.name;\n const control = option.choices ? `<select name=\"${escapeAttr(name)}\">${option.choices.map(choice =>\n `<option value=\"${escapeAttr(choice.value)}\" ${choice.value === value ? 'selected' : ''}>${escapeHTML(choice.label)}</option>`).join('')}</select>`\n : `<input name=\"${escapeAttr(name)}\" value=\"${escapeAttr(value)}\" maxlength=\"4096\">`;\n return `<label>${escapeHTML(option.label)}${control}</label>`;\n })).join('');\n}\n\nfunction sameReference(left: unknown, right: unknown): boolean {\n const a = left as {system?: string; id?: string; revision?: string} | null;\n const b = right as typeof a;\n return !!a && !!b && a.system === b.system && a.id === b.id && a.revision === b.revision;\n}\n","import {randomUUID} from '../utils';\nimport type {KanbanPresentation} from './ports';\nimport type {KanbanSuggestion, KanbanSuggestionPage, KanbanSuggestionQuery} from '../contracts';\nimport type {SuggestionField} from './suggestion-field';\nexport class KanbanSuggestionPicker {\n private input = document.createElement('input');\n private list = document.createElement('div');\n private chips = document.createElement('div');\n private values = document.createElement('div');\n private hint = document.createElement('small');\n private selected: KanbanSuggestion[];\n private rows: KanbanSuggestion[] = [];\n private active = -1;\n private loading = false;\n private generation = 0;\n private timer?: ReturnType<typeof setTimeout>;\n private abort = new AbortController();\n constructor(readonly root: HTMLElement, private readonly config: SuggestionField,\n private readonly fetch: (query: KanbanSuggestionQuery) => Promise<KanbanSuggestionPage>, private readonly presentation: KanbanPresentation) {\n this.selected = [...(config.selected ?? [])]; this.mount(); this.bind(); this.renderValues(); this.close();\n }\n private mount(): void {\n const caption = document.createElement('label'), id = 'kanban-suggest-' + randomUUID();\n caption.textContent = this.presentation.text(this.config.label); caption.htmlFor = this.input.id = id;\n this.input.type = 'text'; this.input.autocomplete = 'off'; this.input.maxLength = 256; this.input.required = !!this.config.required;\n this.input.setAttribute('role', 'combobox'); this.input.setAttribute('aria-autocomplete', 'list'); this.input.setAttribute('aria-controls', this.list.id = id + '-list');\n this.input.setAttribute('aria-describedby', this.hint.id = id + '-hint');\n this.input.placeholder = this.config.free ? this.presentation.text(this.config.label) + ' · ' + this.presentation.text('suggestFreePlaceholder') : this.presentation.text('suggestPlaceholder');\n if (this.config.free) this.input.name = this.config.name;\n this.input.value = this.config.multiple ? '' : this.selected[0]?.label ?? '';\n this.list.className = 'kanban__suggest-list'; this.list.setAttribute('role', 'listbox'); this.list.setAttribute('aria-label', caption.textContent);\n this.chips.className = 'kanban__suggest-chips'; this.hint.setAttribute('aria-live', 'polite');\n this.hint.textContent = this.presentation.text(this.config.free ? 'suggestFreeHint' : 'suggestHint');\n this.root.replaceChildren(caption, this.chips, this.input, this.values, this.list, this.hint);\n }\n private bind(): void {\n const signal = this.abort.signal;\n this.input.addEventListener('focus', () => {if (!this.config.multiple && this.selected.length) this.input.select(); if (!this.loading) void this.search();}, {signal});\n this.input.addEventListener('click', () => {if (this.list.hidden && !this.loading) void this.search();}, {signal});\n this.input.addEventListener('input', () => {\n if (!this.config.multiple && !this.config.free) {this.selected = []; this.renderValues();}\n this.validate(); clearTimeout(this.timer); this.generation++;\n this.rows = []; this.active = -1; this.list.replaceChildren(); this.hint.textContent = this.presentation.text('loading'); this.open();\n this.timer = setTimeout(() => {void this.search();}, 150);\n }, {signal});\n this.input.addEventListener('keydown', event => this.keydown(event), {signal});\n this.list.addEventListener('pointerdown', event => event.preventDefault(), {signal});\n this.root.addEventListener('click', event => this.click(event), {signal});\n document.addEventListener('scroll', () => this.position(), {signal, capture: true});\n window.addEventListener('resize', () => this.position(), {signal});\n this.root.addEventListener('focusout', event => {if (!this.root.contains(event.relatedTarget as Node | null)) this.close();}, {signal});\n }\n private async search(): Promise<void> {\n const generation = ++this.generation, operationId = randomUUID(), started = Date.now();\n const search = !this.config.multiple && this.selected[0]?.label === this.input.value ? '' : this.input.value.trim();\n const kind = this.root.closest('form')?.querySelector<HTMLSelectElement>('[name=kind]')?.value;\n this.revealInput(); this.loading = true; this.hint.textContent = this.presentation.text('loading');\n try {\n const page = await this.fetch({kind: this.config.kind, search, limit: 12, ...(this.config.multiple ? {excludeIds: this.selected.map(row => row.id)} : {}), ...(this.config.excludeItemId ? {excludeItemId: this.config.excludeItemId} : {}),\n ...(this.config.kind === 'parent' && kind ? {childKind: kind} : {})});\n if (generation !== this.generation || this.abort.signal.aborted || !this.root.isConnected) return;\n this.rows = page.items.filter(row => !this.config.multiple || !this.selected.some(value => value.id === row.id));\n if (this.config.manual && search && !this.rows.some(row => row.id === search)) this.rows.push({id: search, label: search, detail: this.presentation.text('suggestManualId')});\n this.active = this.rows.length ? 0 : -1; this.renderOptions();\n this.hint.textContent = this.presentation.text(page.hasMore ? 'suggestRefine' : this.rows.length ? this.config.free ? 'suggestFreeHint' : 'suggestHint' : 'suggestEmpty');\n this.log( {operationId, stage: this.config.kind, result: 'success', count: page.items.length, durationMs: Date.now() - started});\n } catch (error) {\n if (generation !== this.generation || this.abort.signal.aborted) return;\n this.rows = []; this.list.replaceChildren(); this.hint.textContent = this.presentation.text('suggestFailed');\n const retry = document.createElement('button'); retry.type = 'button'; retry.textContent = this.presentation.text('retry'); retry.dataset.suggestRetry = '';\n this.list.append(retry); this.open();\n const raw = (error as {code?: unknown})?.code, code = typeof raw === 'string' && /^[A-Z_0-9]{1,80}$/.test(raw) ? raw : 'KANBAN_SUGGEST_FAILED';\n this.log( {operationId, stage: this.config.kind, result: 'failure', code, durationMs: Date.now() - started});\n } finally {if (generation === this.generation) this.loading = false;}\n }\n private log(event: Parameters<NonNullable<KanbanPresentation['log']>>[0]): void {\n try {this.presentation.log?.(event);} catch { /* Diagnostics cannot change selection state. */ }\n }\n private renderOptions(): void {\n this.list.replaceChildren();\n this.rows.forEach((row, index) => {\n const button = document.createElement('button'); button.type = 'button'; button.tabIndex = -1; button.dataset.suggestIndex = String(index);\n button.id = this.list.id + '-' + index; button.setAttribute('role', 'option');\n const title = document.createElement('strong'), detail = document.createElement('small'); title.textContent = row.label;\n detail.textContent = [row.status ? this.presentation.text(row.status) : '', row.archived ? this.presentation.text('archive') : '', row.detail, this.config.free ? '' : row.id].filter(Boolean).join(' · ');\n button.append(title, detail); this.list.append(button);\n });\n this.open(); this.markActive();\n }\n private click(event: Event): void {\n const button = (event.target as HTMLElement).closest<HTMLButtonElement>('button'); if (!button) return;\n if (button.dataset.suggestIndex !== undefined) this.choose(this.rows[Number(button.dataset.suggestIndex)]);\n else if (button.dataset.suggestRemove !== undefined) {this.selected = this.selected.filter(row => row.id !== button.dataset.suggestRemove); this.renderValues(); this.changed(); this.input.focus();}\n else if (button.hasAttribute('data-suggest-retry')) {void this.search(); this.input.focus();}\n }\n private choose(row: KanbanSuggestion | undefined): void {\n if (!row) return;\n this.selected = this.config.multiple ? [...this.selected, row] : [row]; this.input.value = this.config.multiple ? '' : row.label;\n this.renderValues(); this.input.setCustomValidity(''); this.hint.textContent = this.presentation.text(this.config.free ? 'suggestFreeHint' : 'suggestHint'); this.changed(); this.close(); this.input.focus();\n }\n private renderValues(): void {\n this.values.replaceChildren(); this.chips.replaceChildren();\n if (!this.config.free) for (const row of this.selected.length ? this.selected : this.config.multiple ? [] : [{id: '', label: ''}]) {\n const input = document.createElement('input'); input.type = 'hidden'; input.name = this.config.name; input.value = row.id; this.values.append(input);\n }\n if (this.config.multiple) for (const row of this.selected) {\n const chip = document.createElement('button'); chip.type = 'button'; chip.dataset.suggestRemove = row.id;\n const name = document.createElement('span'), remove = document.createElement('span'); name.textContent = row.label; remove.innerHTML = this.presentation.icons.close; remove.setAttribute('aria-hidden', 'true'); chip.append(name, remove); chip.setAttribute('aria-label', this.presentation.text('suggestRemove') + ': ' + row.label); this.chips.append(chip);\n }\n }\n private validate(): void {\n const unselected = !this.config.free && !!this.input.value.trim() && (this.config.multiple || !this.selected.length);\n this.input.setCustomValidity(unselected ? this.presentation.text('suggestPickRequired') : '');\n }\n private changed(): void {this.validate(); this.root.dispatchEvent(new Event('input', {bubbles: true}));}\n private keydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && !this.list.hidden) {event.preventDefault(); event.stopPropagation(); this.close(); return;}\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault(); event.stopPropagation();\n if (this.list.hidden) {void this.search(); return;}\n this.active = this.rows.length ? (this.active + (event.key === 'ArrowDown' ? 1 : -1) + this.rows.length) % this.rows.length : -1; this.markActive();\n } else if (event.key === 'Enter' && !this.list.hidden) {event.preventDefault(); event.stopPropagation(); this.choose(this.rows[this.active]);}\n else if (event.key === 'Tab' && !this.list.querySelector('[data-suggest-retry]')) this.close();\n else if (event.key === 'Backspace' && this.config.multiple && !this.input.value && this.selected.length) {this.selected.pop(); this.renderValues(); this.changed();}\n }\n private markActive(): void {\n [...this.list.children].forEach((node, index) => node.setAttribute('aria-selected', String(index === this.active)));\n if (this.active >= 0) {this.input.setAttribute('aria-activedescendant', this.list.id + '-' + this.active); const row = this.list.children[this.active] as HTMLElement | undefined;\n if (row && row.offsetTop < this.list.scrollTop) this.list.scrollTop = row.offsetTop;\n else if (row && row.offsetTop + row.offsetHeight > this.list.scrollTop + this.list.clientHeight) this.list.scrollTop = row.offsetTop + row.offsetHeight - this.list.clientHeight;}\n else this.input.removeAttribute('aria-activedescendant');\n }\n private open(): void {this.list.hidden = false; this.input.setAttribute('aria-expanded', 'true'); this.position();}\n private revealInput(): void {\n const panel = this.root.closest<HTMLElement>('[data-panel]'); if (!panel) return;\n const input = this.input.getBoundingClientRect(), bounds = panel.getBoundingClientRect();\n const top = (panel.querySelector('.kanban__panel-header')?.getBoundingClientRect().bottom ?? bounds.top) + 8, bottom = bounds.bottom - 12;\n if (input.bottom > bottom) panel.scrollTop += input.bottom - bottom;\n else if (input.top < top) panel.scrollTop -= top - input.top;\n }\n private position(): void {\n if (this.list.hidden || !this.root.isConnected) return;\n const input = this.input.getBoundingClientRect(), scope = (this.root.closest('[data-panel]') ?? this.root.closest('.kanban') ?? document.documentElement).getBoundingClientRect();\n const below = Math.max(0, scope.bottom - input.bottom - 8), above = Math.max(0, input.top - scope.top - 8), up = above > below && below < 160;\n const height = Math.min(210, up ? above : below), width = Math.min(Math.max(input.width, 220), Math.max(0, scope.width - 16));\n const left = Math.max(scope.left + 8, Math.min(input.left, scope.right - width - 8));\n Object.assign(this.list.style, {position: 'fixed', zIndex: '30', left: `${left}px`, width: `${width}px`, maxHeight: `${height}px`,\n top: up ? 'auto' : `${input.bottom + 4}px`, bottom: up ? `${innerHeight - input.top + 4}px` : 'auto'});\n }\n private close(): void {this.loading = false; if (this.hint.textContent === this.presentation.text('loading')) this.hint.textContent = this.presentation.text(this.config.free ? 'suggestFreeHint' : 'suggestHint'); clearTimeout(this.timer); this.generation++; this.list.hidden = true; this.input.setAttribute('aria-expanded', 'false'); this.input.removeAttribute('aria-activedescendant');}\n destroy(): void {clearTimeout(this.timer); this.generation++; this.abort.abort();}\n}\n","import type {KanbanPresentation} from './ports';\nimport type {KanbanService, KanbanSuggestionQuery} from '../contracts';\nimport {KanbanSuggestionPicker} from './suggestion-picker';\nimport type {SuggestionField} from './suggestion-field';\n\n/** Pickers follow rendered forms; replaced views cannot receive stale query results. */\nexport class KanbanSuggestions {\n private observer: MutationObserver;\n private fields = new Map<HTMLElement, KanbanSuggestionPicker>();\n constructor(private readonly root: HTMLElement, private readonly service: KanbanService | undefined, private readonly boardId: () => string, private readonly presentation: KanbanPresentation) {\n this.observer = new MutationObserver(() => this.sync());\n this.observer.observe(root, {childList: true, subtree: true}); this.sync();\n }\n private sync(): void {\n for (const [node, field] of this.fields) if (!this.root.contains(node)) {field.destroy(); this.fields.delete(node);}\n if (!this.service) return;\n for (const node of this.root.querySelectorAll<HTMLElement>('[data-kanban-suggest]')) {\n if (this.fields.has(node)) continue;\n const options = JSON.parse(node.dataset.kanbanSuggest!) as SuggestionField;\n const picker = new KanbanSuggestionPicker(node, options, (query: KanbanSuggestionQuery) => this.service!.suggest(this.boardId(), query), this.presentation);\n this.fields.set(node, picker);\n }\n }\n destroy(): void {this.observer.disconnect(); for (const field of this.fields.values()) field.destroy(); this.fields.clear();}\n}\n","import {updateTaskCountdowns} from './task-state';\nimport {projectKanbanTask} from '../contracts/task-projection';\nimport {editTaskForm} from './forms';\nimport {automationForm, analysisView, preparationFields} from './automation';\nimport {KanbanSuggestions} from './suggestions';\nimport {mountTitleBar as mountSharedTitleBar} from '@nestos/ui-common';\nimport {KanbanDrawer, drawerMarkup, preserveBoardScroll} from './drawer';\nimport {escapeHTML} from './html';\nimport {childrenView, childType} from './children';\nimport {linkPair} from './session-links';\nimport {failureDetails} from './diagnostics';\nimport {itemOperationsView} from './operations';\nimport type {KanbanItemOperations} from '../contracts';\nimport {workResourcesView} from './work-resources';\nimport {relatedSessionsView} from './session-view';\nimport {randomUUID} from '../utils';\nimport type {KanbanUIOptions} from './ports';\nimport {createRenderer} from './renderer';\nimport type {KanbanBoardSummary, KanbanCommand, KanbanItem, KanbanSessionItemPage, KanbanSessionActivityQuery, KanbanPrincipal, KanbanRequest} from '../contracts';\nimport {actionCommand, boardInput, formCommand, value} from './commands';\n\nexport class KanbanWorkbench {\n private board?: KanbanBoardSummary;\n private page?: KanbanSessionItemPage;\n private actor?: KanbanPrincipal;\n private automationCatalog?: import('../contracts').KanbanAutomationCatalog;\n private item?: KanbanItem;\n private editing?: {itemId:string; editId:string};\n private itemArchived = false;\n private operations?: KanbanItemOperations;\n private boardId = '';\n private recordKind?: 'log' | 'decision';\n private recordId = '';\n private recordPage?: import('../contracts').KanbanRecordPage;\n private recordCursor?: string;\n private suggestions!: KanbanSuggestions;\n private drawer!: KanbanDrawer;\n private itemId = '';\n private query: KanbanSessionActivityQuery = {view: 'all', limit: 50};\n private activityTimer?: ReturnType<typeof setInterval>;\n private generation = 0;\n private eventGeneration = 0;\n private abort = new AbortController();\n private busy = false;\n private background?: Promise<void>;\n private operationStage = 'ui.operation';\n private dirty = false;\n private visible = true;\n private invalid = false;\n private pending?: {boardId: string; fingerprint: string; request: KanbanRequest};\n private readonly ui;\n private releaseNavigation?: () => void;\n private readonly windowMounts = new Map<HTMLElement, () => void>();\n constructor(private readonly options: KanbanUIOptions, private readonly container?: HTMLElement) {this.ui = createRenderer(options.presentation);}\n async start(): Promise<void> {\n const {sidebar, editor} = this.options, signal = this.abort.signal;\n sidebar?.classList.add('kanban__sidebar'); editor.classList.add('kanban');\n editor.innerHTML = `<p data-status role=\"status\"></p><p data-error role=\"alert\"></p><div data-retry hidden>${this.ui.button('refresh', 'retry')}</div><div data-content class=\"kanban__content\"></div>${drawerMarkup(this.options.presentation)}`;\n this.drawer = new KanbanDrawer(editor, sidebar);\n this.suggestions = new KanbanSuggestions(editor, this.options.service, () => this.boardId, this.options.presentation);\n document.addEventListener('pointerdown', event => {\n for (const menu of editor.querySelectorAll<HTMLDetailsElement>('[data-popover][open]')) if (!menu.contains(event.target as Node)) menu.open = false;\n }, {signal});\n editor.addEventListener('toggle', event => {\n const opened = event.target;\n if (opened instanceof HTMLDetailsElement && opened.open && opened.hasAttribute('data-related-sessions')) {void this.loadRelatedSessions(); return;}\n if (opened instanceof HTMLDetailsElement && opened.open && opened.hasAttribute('data-work-resources')) {void this.loadWorkResources(); return;}\n if (!(opened instanceof HTMLDetailsElement) || !opened.open || !opened.hasAttribute('data-popover')) return;\n for (const menu of editor.querySelectorAll<HTMLDetailsElement>('[data-popover][open]')) if (menu !== opened) menu.open = false;\n }, {capture: true, signal});\n editor.addEventListener('change',event=>{\n const target=event.target;if(!(target instanceof HTMLSelectElement)||target.name!=='kind')return;\n const resource=target.closest('form')?.querySelector<HTMLSelectElement>('select[name=\"itemResource\"]');\n if(resource)resource.required=resource.dataset.resourceRequired==='true'&&target.selectedOptions[0]?.dataset.executable==='true';\n },{signal});\n editor.addEventListener('keydown', event => {\n const menu = editor.querySelector<HTMLDetailsElement>('[data-popover][open]');\n if (event.key === 'Escape' && menu) {event.preventDefault(); event.stopPropagation(); menu.open = false; menu.querySelector<HTMLElement>('summary')?.focus(); return;}\n\n this.drawer.keydown(event);\n if (event.key === 'Escape' && this.drawer.open) {event.preventDefault(); void this.run(() => this.requestClose(false));}\n }, {signal});\n for (const element of sidebar ? [sidebar, editor] : [editor]) element.addEventListener('click', event => {\n if (event instanceof MouseEvent && (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey || event.button !== 0)) return;\n if (!(event.target as HTMLElement).closest('[data-action], [data-board], [data-item], [data-session], [data-record], [data-context]')) return;\n void this.run(async () => {\n await this.click(event);\n if (element === sidebar) this.options.activated?.();\n });\n }, {signal});\n sidebar?.addEventListener('submit', event => {event.preventDefault(); void this.run(() => this.submit(event));}, {signal});\n editor.addEventListener('submit', event => {event.preventDefault(); void this.run(() => this.submit(event));}, {signal});\n editor.addEventListener('change', event => {\n const target = event.target as HTMLSelectElement;\n if (target.name === 'preparation' && this.board && this.automationCatalog) {\n const container = editor.querySelector('[data-preparation-options]');\n if (container) container.innerHTML = preparationFields(this.board, this.automationCatalog, target.value ? JSON.parse(target.value) : null);\n }\n }, {signal});\n editor.addEventListener('input', event => {\n const target = event.target as HTMLElement;\n if (target.closest('[data-form=reference]')) return;\n if (target.closest('form')) this.generation++;\n if (target.closest('[data-panel]')) {this.dirty = true; this.options.changed?.();}\n }, {signal});\n this.activityTimer = setInterval(() => {\n if (!this.visible || document.hidden) return;\n updateTaskCountdowns(this.options.editor, this.options.presentation);\n if (this.options.service?.queryActivity && (this.board?.automation?.enabled || this.page?.items.some(item => item.execution)\n || this.query.execution && this.query.execution !== 'all')) this.refreshInBackground(true);\n }, 15000);\n if (this.options.initialResource !== undefined) await this.openResource(this.options.initialResource);\n else await this.run(() => this.refresh());\n }\n open(target: {boardId?: string; itemId?: string; recordId?: string}): Promise<void> {\n const path = target.boardId ? `/board/${encodeURIComponent(target.boardId)}${target.recordId ? '/@record/' + encodeURIComponent(target.recordId) : target.itemId ? '/' + encodeURIComponent(target.itemId) : ''}` : '/';\n return this.openResource(path);\n }\n dispose(): Promise<void> {return this.destroy();}\n async openResource(path: string): Promise<void> {\n if (this.busy || this.dirty) throw new Error(this.ui.label('unsaved'));\n this.closePanel();\n const parts = path.split('/'); this.boardId = decodeURIComponent(parts[2] ?? ''); this.itemId = decodeURIComponent(parts[3] ?? '');\n this.recordId = parts[3] === '@record' ? decodeURIComponent(parts[4] ?? '') : '';\n if (this.recordId) this.itemId = '';\n this.recordKind = ['@log', '@decision'].includes(parts[3] ?? '') ? parts[3].slice(1) as 'log' | 'decision' : undefined;\n if (this.recordKind) this.itemId = '';\n this.recordCursor = undefined;\n this.query = {view: 'all', limit: 50}; await this.run(() => this.refresh());\n }\n createBoard(): Promise<void> {return this.run(async () => {\n if (this.dirty) throw new Error(this.ui.label('unsaved'));\n this.showBoardForm();\n });}\n private showBoardForm(): void {this.itemId = ''; this.drawer.show(this.ui.newBoardForm(), 'new-board'); this.dirty = true;}\n getActiveResourceId(): string {return this.boardId ? `/board/${encodeURIComponent(this.boardId)}${this.recordId ? '/@record/' + encodeURIComponent(this.recordId) : this.itemId ? '/' + encodeURIComponent(this.itemId) : this.recordKind ? '/@' + this.recordKind : ''}` : '/';}\n getViewState() {\n return {title: this.drawer?.open ? this.panel().querySelector('h3')?.textContent ?? this.board?.title : this.board?.title ?? this.ui.label('title'),\n context: this.board?.title, dirty: this.dirty, busy: this.busy};\n }\n captureRecovery(): unknown {if (this.busy || this.dirty) throw new Error(this.ui.label('unsaved')); return null;}\n restoreRecovery(): void {}\n suspendForRecovery(): void {this.generation++; this.abort.abort(); this.suggestions?.destroy();if(this.activityTimer) clearInterval(this.activityTimer);}\n async destroy(): Promise<void> {\n for (const release of this.windowMounts.values()) release(); this.windowMounts.clear();\n this.suspendForRecovery(); this.releaseNavigation?.(); this.releaseNavigation = undefined; this.suggestions?.destroy(); this.drawer?.destroy(); this.options.sidebar?.replaceChildren(); this.options.editor.replaceChildren(); this.options.editor.inert = false;\n this.options.editor.classList.remove('kanban'); this.options.sidebar?.classList.remove('kanban__sidebar');\n this.container?.replaceChildren(); this.container?.classList.remove('kanban-layout');\n }\n invalidateFromEvents(): void {\n this.invalid = true; this.eventGeneration++;\n this.refreshInBackground();\n }\n setVisible(visible: boolean): void {this.visible = visible; if (visible && this.invalid) this.invalidateFromEvents();}\n private refreshInBackground(activityOnly = false): void {\n if (this.background || this.busy || this.dirty || !this.visible || this.abort.signal.aborted) return;\n if (document.activeElement?.closest('form') && this.options.editor.contains(document.activeElement)) return;\n const started = Date.now(), operationId = randomUUID();\n const reading = activityOnly ? this.refreshActivity(this.generation) : this.refresh(), generation = this.generation;\n this.background = reading.catch(error => {\n if (!this.alive(generation)) return;\n this.invalid = false;\n if (!this.abort.signal.aborted) {this.reportRead('ui.background', error, operationId, started); this.error(errorText(error, this.ui.label, 'ui.background'));}\n }).finally(() => {\n this.background = undefined;\n if (this.invalid && !this.busy && !this.dirty && this.visible && !this.abort.signal.aborted) this.refreshInBackground();\n });\n }\n private queryPage(): Promise<KanbanSessionItemPage> {\n const service = this.options.service!;\n return this.query.execution && this.query.execution !== 'all' && service.queryActivity\n ? service.queryActivity(this.boardId, this.query) : service.query(this.boardId, this.query);\n }\n private async refreshActivity(generation: number): Promise<void> {\n if (this.item && this.itemId) {await Promise.all([this.loadExecutionSections(generation, this.item, this.itemArchived), this.operations?.operations.some(operation => [\"running\", \"unknown\"].includes(operation.state)) ? this.loadOperations(generation) : undefined]); return;}\n if (!this.board || this.recordId || this.recordKind || !this.options.service?.queryActivity) return;\n await this.supplement('ui.activity', generation, () => this.options.service!.queryActivity!(this.boardId, this.query), page => {\n if (page.revision !== this.page?.revision) {this.invalid = true; this.refreshInBackground(); return;}\n if (JSON.stringify(page) === JSON.stringify(this.page)) return;\n const sameItems = page.total === this.page.total && page.nextCursor === this.page.nextCursor\n && JSON.stringify(page.items.map(item => item.id)) === JSON.stringify(this.page.items.map(item => item.id));\n this.page = page;\n if (sameItems) {\n const sessions = new Map(page.items.map(item => [item.id, item.execution]));\n for (const slot of this.content().querySelectorAll<HTMLElement>('[data-item-execution]')) {\n const html = this.ui.executionBadge(sessions.get(slot.dataset.itemExecution!), this.options.sessionUrl);\n if (slot.innerHTML !== html) slot.innerHTML = html;\n }\n return;\n }\n preserveBoardScroll(this.content(), () => {this.content().innerHTML = this.ui.boardView(this.board!, page, this.query, true, !!this.options.service?.automationCatalog, this.options.sessionUrl);});\n this.mountHeaderActions();\n });\n }\n private async refresh(): Promise<void> {\n const service = this.options.service, generation = ++this.generation, events = this.eventGeneration;\n if (!service) {this.content().innerHTML = `<p>${escapeHTML(this.ui.label('unavailable'))}</p>`; return;}\n this.operationStage = 'ui.snapshot';\n const pageRequest = this.boardId ? this.queryPage() : undefined;\n const itemRequest = this.boardId && this.itemId ? service.item(this.boardId, this.itemId) : undefined;\n const [boards, actor, initialPage, initialItem] = await Promise.all([service.catalog?.() ?? service.list(), service.currentPrincipal(), pageRequest, itemRequest]);\n if (!this.alive(generation)) return;\n this.actor = actor;\n if (!this.boardId && this.options.initialResource === undefined) this.boardId = boards[0]?.id ?? '';\n this.board = boards.find(board => board.id === this.boardId);\n if (this.boardId && !this.board) throw Object.assign(new Error('Board unavailable'), {code: 'BOARD_NOT_FOUND'});\n if(this.query.execution&&this.query.execution!=='all'&&!service.queryActivity) throw Object.assign(new Error('Execution Session projection unavailable'),{code:'EXECUTION_SESSION_UNAVAILABLE'});\n const page = this.board ? initialPage ?? await this.queryPage() : undefined;\n if (!this.alive(generation)) return;\n this.page = page; this.invalid = events !== this.eventGeneration;\n if (this.options.sidebar) this.options.sidebar.innerHTML = this.ui.navigation(boards, this.boardId);\n this.operationStage = 'ui.render';\n preserveBoardScroll(this.content(), () => {this.content().innerHTML = this.board && page ? this.ui.boardView(this.board, page, this.query, !!service.queryActivity, !!service.automationCatalog, this.options.sessionUrl) : this.ui.catalogView(boards);});\n if (this.recordKind) await this.showRecords(generation);\n if (!this.alive(generation)) return;\n this.releaseNavigation?.(); this.releaseNavigation = undefined;\n const navigation = this.content().querySelector<HTMLElement>('[data-navigation]');\n if (navigation && !this.options.mountTitleBar) this.releaseNavigation = this.options.mountNavigation?.(navigation);\n if (this.recordId) await this.showRecord(this.recordId, generation);\n else if (this.itemId) await this.showItem(generation, initialItem);\n else if (!this.recordKind) void this.refreshActivity(generation);\n this.mountHeaderActions();\n this.operationStage = 'ui.selection'; this.options.selected(this.getActiveResourceId());\n }\n private async showItem(generation = this.generation, loaded?: Awaited<ReturnType<NonNullable<KanbanUIOptions['service']>['item']>>): Promise<void> {\n const service = this.options.service;\n if (!service || !this.board || !this.itemId) return;\n this.operationStage='ui.item.load';\n const {item, archive, task} = loaded ?? await service.item(this.boardId, this.itemId);\n if (!this.alive(generation)) return;\n this.operationStage='ui.item.render';\n const referencesChanged = this.item?.id === item.id && JSON.stringify(this.item.externalRefs) !== JSON.stringify(item.externalRefs);\n if (!this.drawer.open || this.itemArchived !== !!archive || JSON.stringify(this.item) !== JSON.stringify(item)) this.drawer.show(this.ui.detailView(this.board, item, this.actor, !!archive, [], !!service.executionSession, this.options.reviewGuidance?.(this.board, item), !!service.itemOperations && !archive && (this.options.itemOperationsAvailable?.(this.board, item) ?? true), task ?? projectKanbanTask(item), !!service.fixTask), 'item:' + item.id);\n this.item = item; this.itemArchived = !!archive;\n this.loadItemSections(generation, item, !!archive);\n const resources = this.panel().querySelector<HTMLDetailsElement>('[data-work-resources]');\n if (referencesChanged && resources) {\n resources.dataset.associationRevision = String(Number(resources.dataset.associationRevision ?? 0) + 1);\n delete resources.dataset.loaded; if (resources.open) void this.loadWorkResources(false, true);\n }\n this.options.selected(this.getActiveResourceId());\n }\n private loadItemSections(generation: number, item: KanbanItem, archived: boolean): void {\n const service = this.options.service!, boardId = this.boardId;\n if (service.executionSession && !this.panel().querySelector('[data-related-sessions]'))\n this.setSection('[data-related-sessions-section]', `<details data-related-sessions><summary>${escapeHTML(this.ui.label('relatedSessions'))}</summary><button type=\"button\" data-action=\"refresh-related-sessions\">${escapeHTML(this.ui.label('refresh'))}</button><div data-related-sessions-body></div></details>`);\n if (service.workResources) {\n const resources = this.panel().querySelector<HTMLDetailsElement>('[data-work-resources]');\n if (!resources) this.setSection('[data-work-resource-section]', `<details data-work-resources><summary>${escapeHTML(this.ui.label('workResourceTitle'))}</summary><p>${escapeHTML(this.ui.label('workResourceHelp'))}</p><div class=\"kanban__actions\"><button type=\"button\" data-action=\"refresh-work-resources\">${escapeHTML(this.ui.label('refresh'))}</button><button type=\"button\" data-action=\"inspect-work-resources\">${escapeHTML(this.ui.label('inspectWorkResources'))}</button></div><div data-work-resource-body></div></details>`);\n }\n void this.supplement('ui.item.events', generation, () => service.events(boardId, 0, 200), events => {\n this.setSection('[data-item-events]', this.ui.itemEventsView(events.filter(event => event.itemId === item.id).reverse()));\n }, '[data-item-events]');\n void this.supplement('ui.item.records', generation, () => service.records(boardId, {itemId: item.id, limit: 10}), records => {\n this.setSection('[data-related-records]', `<h4>${escapeHTML(this.ui.label('relatedRecords'))} (${records.total})</h4>${this.ui.recordLinks(records, this.board!)}<div class=\"kanban__actions\">${this.ui.button('new-log', 'newLog')}${this.ui.button('new-decision', 'newDecision')}</div>`);\n }, '[data-related-records]');\n void this.loadOperations(generation);\n void this.loadExecutionSections(generation, item, archived, true);\n if (!service.executionSession) this.loadReferenceSection(generation, item);\n void this.supplement('ui.item.children', generation, () => this.showChildren(generation), () => {}, '[data-children]');\n }\n private async loadExecutionSections(generation: number, item: KanbanItem, archived: boolean, references = false): Promise<void> {\n const service = this.options.service!, boardId = this.boardId, reads: Promise<void>[] = [];\n if (service.executionSession) reads.push(this.supplement('ui.item.session', generation, () => service.executionSession!(boardId, item.id), execution => {\n this.setSection('[data-execution-session]', this.ui.executionSessionView(execution, !!this.options.executionReference && !archived && !['completed', 'cancelled'].includes(item.status) && item.launch?.admittedAt === undefined, this.options.sessionUrl));\n if (references) this.loadReferenceSection(generation, item, new Set(execution.history.map(binding => binding.sessionId)));\n }, '[data-execution-session]'));\n if (this.board?.automation && service.analysisStatus) reads.push(this.supplement('ui.item.analysis', generation, () => service.analysisStatus!(boardId, item.id), analysis => {\n this.setSection('[data-analysis]', analysisView(this.options.presentation, analysis ?? null));\n }, '[data-analysis]'));\n await Promise.all(reads);\n }\n private async loadOperations(generation: number): Promise<void> {\n const service = this.options.service, item = this.item;\n if (!service?.itemOperations || !item || !this.panel().querySelector('[data-item-operations]')) return;\n await this.supplement('ui.item.operations', generation, () => service.itemOperations!(this.boardId, item.id), view => {\n this.operations = view;\n this.setSection('[data-item-operations]', itemOperationsView(this.options.presentation, view, this.options.sessionUrl));\n }, '[data-item-operations]');\n }\n private async submitOperation(form: HTMLFormElement, data: FormData, binding: boolean): Promise<void> {\n const service = this.options.service!, action = form.dataset.operation!, itemId = this.item!.id;\n const request = {operationId: form.dataset.resourceId!, itemId, action, expectedRevision: form.dataset.revision!};\n const entry = this.operations?.operations.find(operation => operation.id === action);\n this.operationStage = binding ? 'ui.operation.bind' : 'ui.operation.start';\n const view = binding ? await service.bindItemOperation!(this.boardId, {...request, target: JSON.parse(value(data, 'target'))})\n : await service.runItemOperation!(this.boardId, {...request, confirmed: data.has('confirmed'),\n selections: Object.fromEntries((entry?.fields ?? []).map(field => [field.id, value(data, 'choice-' + field.id)]))});\n this.dirty = false; this.operations = view; this.options.committed?.();\n this.setSection('[data-item-operations]', itemOperationsView(this.options.presentation, view, this.options.sessionUrl));\n this.options.changed?.();\n const result = view.operations.find(operation => operation.id === action);\n if (!binding && result?.state === 'succeeded') await this.refresh();\n if (!binding && entry?.openSessionOnRun && result?.sessionId) await this.options.openSession(result.sessionId);\n }\n private loadReferenceSection(generation: number, item: KanbanItem, skip?: Set<string>): void {\n void this.supplement('ui.item.references', generation, () => this.showReferenceLinks(item.externalRefs ?? [], generation, skip), () => {}, '[data-reference-links]');\n }\n private async supplement<T>(stage: string, generation: number, read: () => Promise<T>, apply: (value: T) => void, selector?: string): Promise<void> {\n const started = Date.now(), operationId = randomUUID();\n try {\n const value = await read();\n if (!this.alive(generation) || this.dirty) return;\n apply(value);\n try {this.options.presentation.log?.({operationId, stage, result: 'success', durationMs: Date.now() - started});} catch { /* Diagnostics cannot change a read result. */ }\n } catch (error) {\n if (!this.alive(generation)) return;\n this.reportRead(stage, error, operationId, started);\n const slot = selector ? this.panel().querySelector(selector) : undefined;\n if (slot) {\n const notice = slot.querySelector('[data-read-error]') ?? document.createElement('p'); notice.setAttribute('role', 'alert'); notice.setAttribute('data-read-error', '');\n notice.textContent = errorText(error, this.ui.label, stage); if (!notice.parentElement) slot.append(notice);\n }\n else this.error(errorText(error, this.ui.label, stage));\n }\n }\n private setSection(selector: string, html: string): void {\n const slot = this.panel().querySelector(selector);\n if (slot && slot.innerHTML !== html) slot.innerHTML = html;\n }\n private reportRead(stage: string, error: unknown, operationId = randomUUID(), started = Date.now()): void {\n const raw = (error as {code?: unknown})?.code;\n try {this.options.presentation.log?.({operationId, stage, result: 'failure', ...failureDetails(error), code: typeof raw === 'string' && /^[A-Z][A-Z0-9_]{0,79}$/.test(raw) ? raw : 'KANBAN_OPERATION_FAILED', durationMs: Date.now() - started});} catch { /* Diagnostics cannot change a read result. */ }\n }\n private async showChildren(generation: number, cursor?: string): Promise<void> {\n const {service} = this.options, item = this.item, board = this.board;\n if (!service || !item || !board || !childType(board, item)) return;\n const query = {parentId: item.id, view: 'all' as const, limit: 50, ...(cursor ? {cursor} : {})};\n const page = await (service.queryActivity?.(board.id, query) ?? service.query(board.id, query));\n if (!this.alive(generation)) return;\n this.panel().querySelector('[data-children]')!.innerHTML = childrenView(this.options.presentation, page, cursor, !['completed', 'cancelled'].includes(item.status) && !item.closedAt, this.options.sessionUrl);\n }\n private async showRecords(generation: number): Promise<void> {\n if (!this.recordKind || !this.options.service) return;\n let page: import('../contracts').KanbanRecordPage;\n try {page = await this.options.service.records(this.boardId, {kind: this.recordKind, limit: 50, ...(this.recordCursor ? {cursor: this.recordCursor} : {})});}\n catch (error) {\n if ((error as {code?: string})?.code !== 'CURSOR_STALE' || !this.recordCursor) throw error;\n this.recordCursor = undefined;\n page = await this.options.service.records(this.boardId, {kind: this.recordKind, limit: 50});\n }\n if (!this.alive(generation)) return;\n this.recordPage = page; this.content().innerHTML = this.ui.recordsView(page, this.recordKind, !!this.recordCursor, this.board);\n }\n private async showRecord(id: string, generation = this.generation): Promise<void> {\n if (!this.options.service) return;\n const record = await this.options.service.record(this.boardId, id);\n const executions = record.kind === 'decision' ? await this.options.service.recordExecutions?.(this.boardId, id) : undefined;\n if (!this.alive(generation)) return;\n this.recordId = id; this.drawer.show(this.ui.recordDetail(record, this.board!, executions), 'record:' + id); await this.showReferenceLinks(record.externalRefs ?? [], generation); this.options.selected(this.getActiveResourceId());\n }\n private async showReferenceLinks(references: import('../contracts').KanbanExternalReference[], generation: number, skip = new Set<string>()): Promise<void> {\n if (!this.options.referenceLink) return;\n const started = Date.now();\n const results = await Promise.allSettled(references.filter(ref => !skip.has(ref.id)).map(ref => this.options.referenceLink!(ref)));\n if (!this.alive(generation)) return;\n const resolved = results.flatMap(result => result.status === 'fulfilled' && result.value ? [result.value] : []);\n const links = [...new Map(resolved.map(link => [link.href, link])).values()];\n const slot = this.panel().querySelector('[data-reference-links]');\n if (slot) slot.innerHTML = links.map(link => linkPair(this.options.presentation, link.href, link.label, link.sessionId)).join('');\n const errors = results.filter((result): result is PromiseRejectedResult => result.status === 'rejected');\n if (errors.length) {\n const raw = (errors[0].reason as {code?: unknown})?.code, code = typeof raw === 'string' && /^[A-Z][A-Z0-9_]{0,79}$/.test(raw) ? raw : 'SESSION_LINK_UNAVAILABLE';\n if (slot) {const error = document.createElement('p'); error.setAttribute('role', 'alert'); error.textContent = this.ui.label('sessionLinkUnavailable') + ' (' + code + ')'; slot.append(error);}\n this.options.presentation.log?.({operationId: randomUUID(), stage: 'ui.reference-links', result: 'failure', code, ...failureDetails(errors[0].reason), durationMs: Date.now() - started});\n }\n }\n private async loadWorkResources(inspect = false, refresh = false): Promise<void> {\n const service = this.options.service, boardId = this.boardId, itemId = this.item?.id;\n const section = this.panel().querySelector<HTMLDetailsElement>('[data-work-resources]');\n if (!service?.workResources || !itemId || !section || section.dataset.loading || !refresh && section.dataset.loaded) return;\n const operationId = randomUUID(), started = Date.now(), revision = section.dataset.associationRevision; section.dataset.loading = 'true';\n if (!section.dataset.loaded) this.setSection('[data-work-resource-body]', `<p role=\"status\">${escapeHTML(this.ui.label('loading'))}</p>`);\n try {\n const resources = await service.workResources(boardId, itemId, {inspect});\n if (this.abort.signal.aborted || !section.isConnected || this.item?.id !== itemId || this.boardId !== boardId || revision !== section.dataset.associationRevision) return;\n this.setSection('[data-work-resource-body]', workResourcesView(this.options.presentation, resources)); section.dataset.loaded = 'true';\n } catch (error) {\n if (!section.isConnected || this.abort.signal.aborted) return;\n this.reportRead('ui.item.work-resources', error, operationId, started);\n const body = section.querySelector('[data-work-resource-body]'), notice = document.createElement('p');\n notice.setAttribute('role', 'alert'); notice.textContent = errorText(error, this.ui.label, 'ui.item.work-resources'); body?.append(notice);\n } finally {\n delete section.dataset.loading;\n if (!this.abort.signal.aborted && section.isConnected && section.open && revision !== section.dataset.associationRevision) void this.loadWorkResources(false, true);\n }\n }\n private async loadRelatedSessions(refresh = false): Promise<void> {\n const service = this.options.service, boardId = this.boardId, itemId = this.item?.id;\n const details = this.panel().querySelector<HTMLDetailsElement>('[data-related-sessions]');\n if (!service?.executionSession || !itemId || !details || details.dataset.loading || !refresh && details.dataset.loaded) return;\n details.dataset.loading = 'true';\n this.setSection('[data-related-sessions-body]', `<p role=\"status\">${escapeHTML(this.ui.label('loading'))}</p>`);\n try {\n await this.supplement('ui.item.related-sessions', this.generation, () => service.executionSession!(boardId, itemId, {includeRelated: true}), detail => {\n if (this.item?.id !== itemId || this.boardId !== boardId) return;\n this.setSection('[data-related-sessions-body]', relatedSessionsView(this.options.presentation, detail, this.options.sessionUrl));\n details.dataset.loaded = 'true';\n }, '[data-related-sessions-body]');\n } finally {delete details.dataset.loading;}\n }\n private async click(event: Event): Promise<void> {\n const target = (event.target as HTMLElement).closest<HTMLElement>('button, a'); if (!target || target.matches(':disabled')) return;\n if (target.dataset.action === 'refresh-related-sessions') {await this.loadRelatedSessions(true); return;}\n for (const menu of this.options.editor.querySelectorAll<HTMLDetailsElement>('[data-popover][open]')) if (!menu.contains(target)) menu.open = false;\n if (target.dataset.session) {event.preventDefault(); await this.options.openSession(target.dataset.session); return;}\n if (this.dirty && !['close-panel', 'copy-reference', 'copy-link', 'copy-resource'].includes(target.dataset.action ?? '')) throw new Error(this.ui.label('unsaved'));\n const path = this.navigationTarget(target);\n if (path && this.options.navigate) {await this.options.navigate(path); return;}\n if (target.dataset.board) {await this.navigate(target.dataset.board); return;}\n if (target.dataset.context) {this.recordKind = target.dataset.context === 'board' ? undefined : target.dataset.context as 'log' | 'decision'; this.recordCursor = undefined; this.closePanel(); await this.refresh(); return;}\n if (target.dataset.record) {this.itemId = ''; this.item = undefined; await this.showRecord(target.dataset.record); return;}\n if (target.dataset.item) {this.recordId = ''; this.itemId = target.dataset.item; await this.showItem(); return;}\n const action = target.dataset.action;\n if (action === 'continue-execution' && this.item && target.dataset.dispatch) {\n await this.execute({type: 'continue-execution', previousDispatchId: target.dataset.dispatch, dispatchId: randomUUID()}); return;\n }\n if (action === 'refresh-work-resources' || action === 'inspect-work-resources') {await this.loadWorkResources(action === 'inspect-work-resources', true); return;}\n if (action === 'cleanup-work-resource' && this.item && this.options.service?.cleanupWorkResource) {\n if (!globalThis.confirm(this.ui.label('cleanupWorkResourceConfirm'))) return;\n try {await this.options.service.cleanupWorkResource(this.boardId, {operationId: randomUUID(), itemId: this.item.id, resourceId: target.dataset.resource!, version: target.dataset.version!});}\n finally {await this.loadWorkResources(false, true);} return;\n }\n if (action === 'close-panel' || action === 'dismiss-panel') {await this.requestClose(action === 'close-panel'); return;}\n if (action === 'copy-reference' || action === 'copy-link' || action === 'copy-resource') {await this.ui.copyReference(target.closest<HTMLElement>('[data-action]')!); return;}\n if (action === 'automation' && this.board && this.options.service?.automationCatalog) {\n this.automationCatalog = await this.options.service.automationCatalog();\n this.itemId = ''; this.drawer.show(automationForm(this.options.presentation, this.board, this.automationCatalog), 'automation'); this.dirty = true; return;\n }\n if (action === 'task-edit' && this.item && this.board) {\n const editId=randomUUID(),itemId=this.item.id;\n await this.execute({type:'begin-edit',itemId,editId,leaseMs:300000});\n this.editing={itemId,editId};\n const resources=await this.options.service?.itemResources?.(this.boardId);\n if(resources)resources.selected=this.item.externalRefs?.find(ref=>resources.resources.some(r=>r.reference.system===ref.system&&r.reference.id===ref.id));\n this.drawer.show(editTaskForm(this.options.presentation,this.board,this.item,editId,resources),'edit:'+itemId);this.dirty=true;return;\n }\n if (action === 'task-fix' && this.item && this.options.service?.fixTask) {\n target.dataset.operationId ??= randomUUID();\n const fix=await this.options.service.fixTask(this.boardId,{itemId:this.item.id,operationId:target.dataset.operationId});\n await this.options.openSession(fix.sessionId);return;\n }\n if (action?.startsWith('task-') && this.item) {\n if(action==='task-cancel')await this.execute({type:'cancel-item',itemId:this.item.id,reason:this.ui.label('taskAction.cancel')});\n else if(action==='task-run')await this.execute({type:'request-run',itemId:this.item.id});\n else if(action==='task-pause'||action==='task-resume')await this.execute({type:'request-control',itemId:this.item.id,controlId:randomUUID(),action:action==='task-pause'?'pause':'resume'});\n return;\n }\n if (action === 'reanalyze' && this.item?.planning) {await this.execute({type:'retry-analysis',itemId:this.item.id,retryId:randomUUID()}); return;}\n if (action === 'new-board') {this.showBoardForm(); return;}\n if (action === 'children-next' || action === 'children-first') {await this.showChildren(this.generation, action === 'children-next' ? target.dataset.cursor : undefined); return;}\n if (action === 'new-child' && this.board && this.item && childType(this.board, this.item)) {\n await this.showItemForm(this.item);return;\n }\n if (action === 'new-item' && this.board) {await this.showItemForm();return;}\n if (action === 'new-log' || action === 'new-decision') {\n const resources = action === 'new-decision' ? await this.options.service?.recordResources?.() : [];\n this.recordId = ''; this.drawer.show(this.ui.recordForm(action === 'new-log' ? 'log' : 'decision', this.board!, this.itemId, resources), action); this.dirty = true; return;\n }\n if ((action === 'run-record' || action === 'run-record-separate') && this.options.service?.runRecord) {\n const record = await this.options.service.record(this.boardId, this.recordId);\n target.dataset.operationId ??= randomUUID();\n await this.options.service.runRecord(this.boardId, {operationId: target.dataset.operationId, recordId: record.id, expectedRevision: record.revision, placement: action === 'run-record-separate' ? 'new-board' : 'current-board'});\n this.options.committed?.(); await this.refresh(); return;\n }\n if (action === 'scroll-left' || action === 'scroll-right') {const board = this.content().querySelector<HTMLElement>('.kanban__columns'); if (board) board.scrollLeft += board.clientWidth * (action === 'scroll-left' ? -0.8 : 0.8); return;}\n if (action === 'records-next' || action === 'records-first') {this.recordCursor = action === 'records-next' ? this.recordPage?.nextCursor : undefined; await this.refresh(); return;}\n if ((action === 'confirm-record' || action === 'reject-record') && this.recordId) {await this.execute({type: 'review-record', recordId: this.recordId, accept: action === 'confirm-record'}); return;}\n if (action === 'next' || action === 'first') {this.query.cursor = action === 'next' ? this.page?.nextCursor : undefined; await this.refresh(); return;}\n if (action === 'refresh-item-operations') {this.dirty = false; await this.loadOperations(this.generation); this.options.changed?.(); return;}\n if (action === 'refresh') {await this.refresh(); return;}\n if (action && this.item) await this.execute(actionCommand(action, this.item));\n }\n private async openReference(reference: string): Promise<void> {\n if (this.dirty) throw new Error(this.ui.label('unsaved'));\n const target = await this.options.service!.resolve(reference);\n if (this.options.navigate) {\n const leaf = target.recordId ? '/@record/' + encodeURIComponent(target.recordId) : target.itemId ? '/' + encodeURIComponent(target.itemId) : '';\n await this.options.navigate(`/board/${encodeURIComponent(target.boardId)}${leaf}`); return;\n }\n this.closePanel(); this.boardId = target.boardId; this.itemId = target.itemId ?? ''; this.recordId = target.recordId ?? '';\n this.recordKind = undefined; this.recordCursor = undefined; this.query = {view: 'all', limit: 50};\n await this.refresh();\n this.options.activated?.();\n }\n private async navigate(id: string): Promise<void> {\n this.boardId = id; this.itemId = ''; this.recordKind = undefined; this.recordCursor = undefined; this.query = {view: 'all', limit: 50}; this.closePanel(); await this.refresh();\n }\n private async submit(event: Event): Promise<void> {\n const form = event.target as HTMLFormElement, kind = form.dataset.form, data = new FormData(form);\n form.dataset.resourceId ??= randomUUID();\n if (!form.reportValidity()) return;\n if (kind === 'item-operation' || kind === 'operation-binding') {await this.submitOperation(form, data, kind === 'operation-binding'); return;}\n if (kind === 'reference') {await this.openReference(value(data, 'reference')); return;}\n if (kind === 'filter') {\n if (this.dirty) throw new Error(this.ui.label('unsaved'));\n this.query = {phase:(value(data,'phase')||undefined) as KanbanSessionActivityQuery['phase'], view: value(data, 'view') as KanbanSessionActivityQuery['view'],execution:(value(data,'execution')||'all') as KanbanSessionActivityQuery['execution'], search: value(data, 'search'), area: value(data, 'area') || undefined, milestone: value(data, 'milestone') || undefined, limit: 50};\n await this.refresh(); return;\n }\n if (kind === 'board' && this.actor && this.options.service) {\n const created = await this.options.service.create(boardInput(data, this.actor, form.dataset.resourceId));\n this.options.committed?.(); this.dirty = false; await this.navigate(created.id); return;\n }\n if (kind === 'automation' && this.automationCatalog) {\n await this.execute({type: 'configure-automation', settings: {enabled: data.has('enabled'), autoAccept: data.has('autoAccept'),\n ...(value(data, 'preparation') ? {preparation: JSON.parse(value(data, 'preparation')),\n preparationOptions: Object.fromEntries([...data.entries()].filter(([key]) => key.startsWith('preparation-option-'))\n .map(([key, value]) => [key.slice('preparation-option-'.length), String(value)]))} : {}),\n planner: JSON.parse(value(data, 'planner')), executor: JSON.parse(value(data, 'executor')),\n coordinator: this.automationCatalog.coordinator, worker: this.automationCatalog.worker}}); return;\n }\n if(kind==='task-reply'&&this.item&&this.options.service?.replyTask) {\n await this.options.service.replyTask(this.boardId,{itemId:this.item.id,attemptId:value(data,'attemptId'),replyTo:value(data,'replyTo'),operationId:form.dataset.resourceId,content:value(data,'content')});\n this.dirty=false;await this.refresh();return;\n }\n if(kind==='save-edit'&&this.item) {\n const planning=formCommand('plan',data,this.board!,this.item);\n if(planning.type!=='plan-item')return;\n await this.execute({type:'save-edit',launchMode:value(data,'launchMode') as 'automatic'|'manual',itemId:this.item.id,editId:value(data,'editId'),title:value(data,'title'),responsibility:value(data,'responsibility'),acceptance:value(data,'acceptance'),planning:planning.planning,externalRefs:[...(this.item.externalRefs??[]).filter(ref=>!value(data,'itemResource')||ref.system!==JSON.parse(value(data,'itemResource')).system),...(value(data,'itemResource')?[JSON.parse(value(data,'itemResource'))]:[])]});\n this.editing=undefined;return;\n }\n if (kind === 'amendment') data.set('amendmentId', form.dataset.amendment ?? '');\n if (kind === 'record-link' && this.recordId) {await this.execute({type: 'link-record', recordId: this.recordId, itemId: value(data, 'itemId')}); return;}\n if (kind && this.board) {\n if (kind === 'execution-session' && this.item && this.options.executionReference) {\n await this.execute({type: 'link-reference', itemId: this.item.id, reference: this.options.executionReference(value(data, 'executionSession'), form.dataset.resourceId)}); return;\n }\n await this.execute(formCommand(kind, data, this.board, this.item, form.dataset.resourceId));\n }\n }\n private async showItemForm(parent?:KanbanItem):Promise<void> {\n const board=this.board,generation=this.generation;if(!board)return;\n const resources=await this.options.service?.itemResources?.(board.id,parent?.id);\n if(this.abort.signal.aborted||generation!==this.generation)return;\n this.itemId='';this.drawer.show(this.ui.newItemForm(board,parent,resources),parent?'new-child':'new-item');this.dirty=true;\n }\n private async execute(command: KanbanCommand): Promise<void> {\n if (!this.board || !this.options.service) return;\n if (command.type === 'review') {\n const workflow = await this.options.service.workflow(this.board.id);\n const dispatch = Object.values(workflow.dispatches).find(dispatch => dispatch.itemId === ('itemId' in command ? command.itemId : '') && dispatch.outcome === 'succeeded');\n if (dispatch) command = {type: 'accept-execution', dispatchId: dispatch.id, accept: command.accept};\n }\n const fingerprint = JSON.stringify(command);\n if (this.pending && (this.pending.boardId !== this.board.id || this.pending.fingerprint !== fingerprint)) throw Object.assign(new Error('Pending write'), {code: 'WRITE_OUTCOME_UNKNOWN'});\n this.pending ??= {boardId: this.board.id, fingerprint, request: {operationId: randomUUID(), expectedRevision: this.board.revision, command}};\n try {await this.options.service.execute(this.board.id, this.pending.request);}\n catch (error) {\n if ((error as Error)?.name === 'KanbanError' || (error as {outcome?: string})?.outcome === 'not-committed') this.pending = undefined;\n throw error;\n }\n this.pending = undefined; this.options.committed?.();\n if (command.type === 'configure-automation') this.closePanel();\n this.dirty = false; this.query.cursor = undefined; this.recordCursor = undefined;\n if (command.type === 'create-item') this.itemId = command.item.id;\n if (command.type === 'append-record') {this.recordId = command.record.id; this.itemId = ''; this.item = undefined;}\n await this.refresh();\n }\n private async run(action: () => Promise<void>): Promise<void> {\n if (this.busy || this.abort.signal.aborted) return;\n const operationId = randomUUID(), started = Date.now();\n this.operationStage = 'ui.operation';\n this.generation++; this.busy = true; this.status(this.ui.label('loading')); this.error(''); this.options.editor.setAttribute('aria-busy', 'true');\n let succeeded = false;\n try {await action(); succeeded = true;}\n catch (error) {\n const raw = (error as {code?: unknown})?.code;\n try {this.options.presentation.log?.({operationId, stage: this.operationStage, result: 'failure', ...failureDetails(error), code: typeof raw === 'string' && /^[A-Z][A-Z0-9_]{0,79}$/.test(raw) ? raw : 'KANBAN_OPERATION_FAILED', durationMs: Date.now() - started});} catch { /* Reporting cannot alter drafts. */ }\n if (!this.abort.signal.aborted) this.error(errorText(error, this.ui.label, this.operationStage));\n }\n finally {\n this.busy = false;\n if (!this.abort.signal.aborted) {\n this.status(''); this.options.editor.removeAttribute('aria-busy'); this.options.editor.inert = false; this.mountHeaderActions(); this.drawer.flushFocus(); this.options.changed?.();\n if (succeeded && this.invalid && this.visible && !this.dirty) this.refreshInBackground();\n }\n }\n }\n private navigationTarget(target: HTMLElement): string | undefined {\n if (target.dataset.board) return `/board/${encodeURIComponent(target.dataset.board)}`;\n const board = `/board/${encodeURIComponent(this.boardId)}`;\n if (target.dataset.item) return `${board}/${encodeURIComponent(target.dataset.item)}`;\n if (target.dataset.record) return `${board}/@record/${encodeURIComponent(target.dataset.record)}`;\n if (target.dataset.context) return board + (target.dataset.context === 'board' ? '' : '/@' + target.dataset.context);\n }\n private mountHeaderActions(): void {\n for (const [slot, release] of this.windowMounts) if (!this.options.editor.contains(slot)) {release(); this.windowMounts.delete(slot);}\n if (this.options.mountTitleBar) {\n for (const header of this.options.editor.querySelectorAll<HTMLElement>('[data-titlebar]')) if (!this.windowMounts.has(header)) this.mountTitleBar(header);\n return;\n }\n for (const slot of this.options.editor.querySelectorAll<HTMLElement>('[data-window-navigation]')) {\n if (!this.windowMounts.has(slot) && this.options.mountWindowList) this.windowMounts.set(slot, this.options.mountWindowList(slot));\n }\n for (const header of this.options.editor.querySelectorAll<HTMLElement>('[data-titlebar]')) if (!this.windowMounts.has(header)) this.mountDefaultTitleBar(header);\n }\n private mountDefaultTitleBar(header: HTMLElement): void {\n const back = header.querySelector<HTMLElement>('[data-titlebar-back]') ?? undefined;\n const title = header.querySelector<HTMLElement>('[data-titlebar-title]') ?? undefined;\n back?.classList.add('ui-nav-button'); header.querySelector('.kanban__menu > summary')?.classList.add('ui-nav-button');\n const view = mountSharedTitleBar(header, {\n title, back,\n leading: [...header.querySelectorAll<HTMLElement>('[data-navigation] > button')],\n trailing: [...header.querySelectorAll<HTMLElement>('[data-window-navigation]')],\n actions: [...header.querySelectorAll<HTMLElement>('.kanban__desktop-create, :scope > [data-action=new-board]')],\n menu: header.querySelector<HTMLElement>('.kanban__menu') ?? undefined,\n });\n view.element.dataset.titlebarSlot = ''; header.dataset.titlebarHost = 'true';\n view.update({title: title?.textContent ?? ''});\n this.windowMounts.set(header, () => {view.destroy(); delete header.dataset.titlebarHost;});\n }\n private mountTitleBar(header: HTMLElement): void {\n const slot = document.createElement('div'); slot.dataset.titlebarSlot = ''; header.prepend(slot); header.dataset.titlebarHost = 'true';\n const release = this.options.mountTitleBar!(slot, {\n title: header.querySelector<HTMLElement>('[data-titlebar-title]') ?? undefined,\n back: header.querySelector<HTMLElement>('[data-titlebar-back]') ?? undefined,\n menu: header.querySelector<HTMLElement>('.kanban__menu') ?? undefined,\n actions: [...header.querySelectorAll<HTMLElement>('.kanban__desktop-create, :scope > [data-action=new-board]')],\n });\n this.windowMounts.set(header, () => {release(); slot.remove(); delete header.dataset.titlebarHost;});\n }\n private closePanel(): void {this.dirty = false; this.itemId = ''; this.recordId = ''; this.item = undefined; this.drawer.close();}\n private async requestClose(explicit: boolean): Promise<void> {\n if (this.editing && explicit) {await this.execute({type:'end-edit',...this.editing});this.editing=undefined;}\n if (this.dirty && !explicit) throw new Error(this.ui.label('unsaved'));\n if (this.options.navigate && this.boardId) {\n if (this.dirty) this.closePanel();\n await this.options.navigate(`/board/${encodeURIComponent(this.boardId)}`); return;\n }\n this.closePanel(); void this.refreshActivity(this.generation); this.options.selected(this.getActiveResourceId());\n }\n private alive(generation: number): boolean {return generation === this.generation && !this.abort.signal.aborted;}\n private content(): HTMLElement {return this.options.editor.querySelector('[data-content]')!;}\n private panel(): HTMLElement {return this.options.editor.querySelector('[data-panel]')!;}\n private status(message: string): void {this.options.editor.querySelector('[data-status]')!.textContent = message;}\n private error(message: string): void {\n const error = this.options.editor.querySelector<HTMLElement>('[data-error]')!; error.textContent = message; error.hidden = this.drawer?.open ?? false;\n const panelError = this.options.editor.querySelector('[data-panel-error]'); if (panelError) panelError.textContent = message;\n const executionError=this.options.editor.querySelector<HTMLElement>('[data-execution-error]');\n if(executionError) {\n executionError.textContent=message;executionError.hidden=!message;\n if(message) {const panel=this.panel(),bottom=executionError.getBoundingClientRect().bottom,edge=panel.getBoundingClientRect().bottom;if(bottom>edge) panel.scrollTop+=bottom-edge+12;}\n }\n this.options.editor.querySelector<HTMLElement>('[data-retry]')!.hidden = !message || (this.drawer?.open ?? false);\n }\n}\nfunction errorText(error: unknown, label: (key: string) => string, stage: string): string {\n const code = (error as {outcome?: string})?.outcome === 'unknown' ? 'WRITE_OUTCOME_UNKNOWN' : (error as {code?: unknown})?.code;\n if (code === 'REVISION_CONFLICT' || code === 'CURSOR_STALE') return label('conflict');\n if (error instanceof Error && error.message === label('unsaved')) return error.message;\n const safe = typeof code === 'string' && /^[A-Z_]{1,80}$/.test(code) ? code : 'KANBAN_OPERATION_FAILED';\n const translated = label('errors.' + safe);\n const details = safe === 'KANBAN_OPERATION_FAILED' ? failureDetails(error) : {};\n const diagnostic = details.errorName ? `\\n${label('diagnostic')}: ${stage} · ${details.errorName}${details.source ? ' · ' + details.source : ''}` : '';\n return (translated !== 'kanban.errors.' + safe && translated !== 'errors.' + safe ? `${translated} (${safe})` : `${label('failed')}: ${safe}`) + diagnostic;\n}\n\nexport async function mountKanban(container: HTMLElement, options: Omit<KanbanUIOptions, 'sidebar' | 'editor'>) {\n const sidebar = document.createElement('aside'), editor = document.createElement('main');\n container.classList.add('kanban-layout'); container.replaceChildren(sidebar, editor);\n const view = new KanbanWorkbench({...options, sidebar, editor}, container);\n await view.start();\n return view;\n}\nexport {KanbanSuggestionPicker} from './suggestion-picker';\nexport type {SuggestionField} from './suggestion-field';\nexport type {KanbanUIOptions, KanbanPresentation, KanbanReviewGuidance} from './ports';\n","import {escapeAttr} from './html';\nimport type {KanbanPresentation} from './ports';\n\n/** A bounded modal inspector preserves the board's independent scroll positions. */\nexport class KanbanDrawer {\n private key = '';\n private focusRequested = false;\n private restoreTarget?: HTMLElement;\n private restoreItem?: string;\n private restoreRecord?: string;\n private restoreRequested = false;\n constructor(private readonly editor: HTMLElement, private readonly sidebar?: HTMLElement) {}\n get element(): HTMLElement {return this.editor.querySelector('[data-panel]')!;}\n get open(): boolean {return !this.element.hidden;}\n show(html: string, key: string): void {\n const panel = this.element, same = this.open && this.key === key, top = same ? panel.scrollTop : 0;\n if (!this.open) {\n const active = document.activeElement as HTMLElement | null;\n this.restoreTarget = active ?? undefined; this.restoreItem = active?.dataset.item; this.restoreRecord = active?.dataset.record;\n }\n this.focusRequested ||= same && panel.contains(document.activeElement);\n const retained = same ? ['[data-work-resource-section]', '[data-related-sessions-section]'].map(selector => ({selector, node: panel.querySelector(selector)})) : [];\n panel.innerHTML = html;\n for (const {selector, node} of retained) if (node?.hasChildNodes()) panel.querySelector(selector)?.replaceWith(node);\n const error = document.createElement('p'); error.dataset.panelError = ''; error.setAttribute('role', 'alert');\n const header = panel.querySelector('.kanban__panel-header'); if (header) header.after(error); else panel.prepend(error);\n panel.hidden = false; panel.scrollTop = top;\n this.key = key; this.focusRequested ||= !same;\n this.editor.querySelector<HTMLElement>('[data-content]')!.inert = true; if (this.sidebar) this.sidebar.inert = true;\n this.editor.querySelector<HTMLElement>('[data-backdrop]')!.hidden = false;\n this.editor.classList.add('kanban--detail');\n }\n close(): void {\n this.element.hidden = true; this.element.replaceChildren(); this.key = ''; this.focusRequested = false; this.restoreRequested = true;\n this.editor.querySelector<HTMLElement>('[data-content]')!.inert = false; if (this.sidebar) this.sidebar.inert = false;\n this.editor.querySelector<HTMLElement>('[data-backdrop]')!.hidden = true; this.editor.classList.remove('kanban--detail');\n }\n flushFocus(): void {\n if (this.focusRequested && this.open) {this.focusRequested = false; this.element.focus({preventScroll: true});}\n else if (this.restoreRequested) {\n this.restoreRequested = false;\n const matches = [...this.editor.querySelectorAll<HTMLElement>('[data-item], [data-record]')];\n const target = this.restoreTarget?.isConnected ? this.restoreTarget : matches.find(node =>\n this.restoreItem ? node.dataset.item === this.restoreItem : this.restoreRecord ? node.dataset.record === this.restoreRecord : false);\n (target ?? this.editor.querySelector<HTMLElement>('button'))?.focus({preventScroll: true});\n }\n }\n keydown(event: KeyboardEvent): void {\n if (!this.open || event.key !== 'Tab') return;\n const nodes = [...this.element.querySelectorAll<HTMLElement>('button, input:not([type=hidden]), select, textarea, a[href], summary, [tabindex=\"0\"]')]\n .filter(node => !node.matches(':disabled') && node.tabIndex >= 0 && !node.closest('[hidden], [inert]') && !node.hidden && !node.closest('details:not([open]) :not(summary)'));\n const first = nodes[0], last = nodes[nodes.length - 1], active = document.activeElement;\n if (!first) {event.preventDefault(); this.element.focus(); return;}\n if (event.shiftKey && (active === first || active === this.element)) {event.preventDefault(); last.focus();}\n else if (!event.shiftKey && (active === last || !this.element.contains(active))) {event.preventDefault(); first.focus();}\n }\n destroy(): void {if (this.sidebar) this.sidebar.inert = false; this.editor.classList.remove('kanban--detail');}\n}\nexport function drawerMarkup(ui: KanbanPresentation): string {\n return `<button type=\"button\" class=\"kanban__backdrop\" data-backdrop data-action=\"dismiss-panel\" aria-label=\"${escapeAttr(ui.text('closeDetail'))}\" tabindex=\"-1\" hidden></button>\n <section data-panel class=\"kanban__panel\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${escapeAttr(ui.text('details'))}\" tabindex=\"-1\" hidden></section>`;\n}\nexport function preserveBoardScroll(container: HTMLElement, render: () => void): void {\n const columns = [...container.querySelectorAll<HTMLElement>('[data-column]')].map(node => ({id: node.dataset.column, top: node.scrollTop}));\n const left = container.querySelector<HTMLElement>('.kanban__columns')?.scrollLeft ?? 0;\n render();\n for (const node of container.querySelectorAll<HTMLElement>('[data-column]')) node.scrollTop = columns.find(column => column.id === node.dataset.column)?.top ?? 0;\n const board = container.querySelector<HTMLElement>('.kanban__columns'); if (board) board.scrollLeft = left;\n}\n","/** Keep browser failure diagnostics useful without logging messages or user content. */\nexport function failureDetails(error: unknown): {errorName?: string; source?: string} {\n if (!error || typeof error !== 'object') return {};\n const value = error as {name?: unknown; stack?: unknown};\n const known = /^(?:Error|TypeError|ReferenceError|SyntaxError|RangeError|SecurityError|QuotaExceededError|NotSupportedError|InvalidStateError|DataCloneError|AbortError|NetworkError)$/;\n const errorName = typeof value.name === 'string' && known.test(value.name) ? value.name : undefined;\n const frame = typeof value.stack === 'string' ? value.stack.match(/(?:^|\\/)([A-Za-z0-9_.-]+\\.m?js):(\\d+):(\\d+)/m) : null;\n return {...(errorName ? {errorName} : {}), ...(frame ? {source: `${frame[1]}:${frame[2]}:${frame[3]}`} : {})};\n}\n","import type {KanbanItemOperation, KanbanItemOperations} from '../contracts';\nimport type {KanbanPresentation} from './ports';\nimport {escapeAttr, escapeHTML} from './html';\nimport {sessionLink} from './session-links';\nexport function itemOperationsView(ui: KanbanPresentation, view: KanbanItemOperations, sessionUrl?: (id: string) => string): string {\n return `<button type=\"button\" data-action=\"refresh-item-operations\">${escapeHTML(ui.text('operationRefresh'))}</button><h4>${escapeHTML(ui.text('operationsTitle'))}</h4>\n <ol class=\"kanban__operations\">${view.operations.map(operation => operationCard(ui, view, operation, sessionUrl)).join('')}</ol>`;\n}\nfunction operationCard(ui: KanbanPresentation, view: KanbanItemOperations, operation: KanbanItemOperation, url?: (id: string) => string): string {\n const reason = operation.code ? ui.text('errors.' + operation.code) : '';\n return `<li data-operation-id=\"${escapeAttr(operation.id)}\"><strong>${escapeHTML(operation.label)}</strong> · ${escapeHTML(ui.text('operationState.' + operation.state))}\n ${operation.reason ? `<p>${escapeHTML(operation.reason)}</p>` : ''}${operation.code ? `<p role=\"alert\">${escapeHTML(reason.endsWith('errors.' + operation.code) ? operation.code : reason)}</p>` : ''}\n ${operation.summary ? `<pre class=\"kanban__operation-summary\">${escapeHTML(operation.summary)}</pre>` : ''}\n ${operation.sessionId ? sessionLink(ui, operation.sessionId, ui.text('operationSession'), url?.(operation.sessionId)) : ''}\n <form data-form=\"item-operation\" data-operation=\"${escapeAttr(operation.id)}\" data-revision=\"${escapeAttr(view.revision)}\">\n ${choices(ui, operation)}${operation.confirmation ? `<label><input type=\"checkbox\" name=\"confirmed\" required>${escapeHTML(operation.confirmation)}</label>` : ''}\n <button type=\"submit\"${operation.enabled ? '' : ' disabled'}>${escapeHTML(operation.label)}</button></form>${configuration(ui, view, operation)}</li>`;\n}\nfunction choices(ui: KanbanPresentation, operation: KanbanItemOperation): string {\n return (operation.fields ?? []).map(field => `<label>${escapeHTML(field.label)}<select name=\"choice-${escapeAttr(field.id)}\" required>\n <option value=\"\">${escapeHTML(ui.text('operationChoose'))}</option>${field.choices.map(choice => `<option value=\"${escapeAttr(choice.id)}\"${field.selected === choice.id ? ' selected' : ''}>${escapeHTML(choice.label + (choice.detail ? ' · ' + choice.detail : ''))}</option>`).join('')}</select></label>`).join('');\n}\nfunction configuration(ui: KanbanPresentation, view: KanbanItemOperations, operation: KanbanItemOperation): string {\n if (!operation.configurable) return '';\n return `<details><summary>${escapeHTML(ui.text('operationConfigure'))}</summary><form data-form=\"operation-binding\" data-operation=\"${escapeAttr(operation.id)}\" data-revision=\"${escapeAttr(view.revision)}\">\n <label>${escapeHTML(ui.text('operationFlow'))}<select name=\"target\" required><option value=\"\">${escapeHTML(ui.text('operationChoose'))}</option>\n ${(view.targets ?? []).map(target => `<option value=\"${escapeAttr(JSON.stringify(target.reference))}\"${JSON.stringify(target.reference) === JSON.stringify(operation.binding) ? ' selected' : ''}>${escapeHTML(target.label)}</option>`).join('')}</select></label>\n <button type=\"submit\">${escapeHTML(ui.text('save'))}</button>${view.targets?.length ? '' : `<p>${escapeHTML(ui.text('operationNoFlows'))}</p>`}</form></details>`;\n}\n","import type {KanbanWorkResource} from '../contracts';\nimport type {KanbanPresentation} from './ports';\nimport {escapeHTML, escapeAttr} from './html';\n\nexport function workResourcesView(ui: KanbanPresentation, resources: KanbanWorkResource[]): string {\n if (!resources.length) return `<p>${escapeHTML(ui.text('none'))}</p>`;\n return resources.map(resource => `<article class=\"kanban__work-resource\" data-work-resource=\"${escapeAttr(resource.id)}\">\n <strong>${escapeHTML(resource.title)}</strong>${copy(ui, resource.title, ui.text('copyWorkResourceName'))} · ${escapeHTML(ui.text('workResourceState.' + resource.state))}\n <p><code>${escapeHTML(resource.location)}</code>${copy(ui, resource.location, ui.text('copyWorkResourcePath'))}</p>\n <dl>${resource.properties.map(row => `<dt>${escapeHTML(row.label)}</dt><dd>${escapeHTML(row.value)}${copy(ui, row.value, ui.text('copyValue') + ' · ' + row.label)}</dd>`).join('')}</dl>\n ${resource.reasons.map(reason => `<p>${escapeHTML(reasonLabel(ui, reason))}</p>`).join('')}\n <button type=\"button\" data-action=\"cleanup-work-resource\" data-resource=\"${escapeAttr(resource.id)}\" data-version=\"${escapeAttr(resource.version)}\" ${resource.canCleanup ? '' : 'disabled'}>${escapeHTML(ui.text('cleanupWorkResource'))}</button>\n </article>`).join('');\n}\nfunction copy(ui: KanbanPresentation, value: string, label: string): string {\n return `<button type=\"button\" class=\"kanban__copy-button\" data-action=\"copy-resource\" data-copy=\"${escapeAttr(value)}\" title=\"${escapeAttr(label)}\" aria-label=\"${escapeAttr(label)}\">${ui.icons.copy ?? escapeHTML(ui.text('copyValue'))}</button>`;\n}\nfunction reasonLabel(ui: KanbanPresentation, reason: string): string {\n const key = 'workResourceReason.' + reason, label = ui.text(key); return label.includes(key) ? reason : label;\n}\n","import type {KanbanPresentation} from './ports';\nimport {boardView, catalogView, navigation, button} from './view';\nimport {detailView, itemEventsView, newBoardForm, newItemForm} from './forms';\nimport {recordLinks, recordsView, recordDetail, recordForm} from './context-view';\nimport {executionSessionView, executionBadge} from './session-view';\nimport {copyReference} from './references';\n\nexport function createRenderer(ui: KanbanPresentation) {\n const bind = <Args extends unknown[], Result>(fn: (ui: KanbanPresentation, ...args: Args) => Result) => (...args: Args): Result => fn(ui, ...args);\n return {label: ui.text.bind(ui),\n boardView: bind(boardView),\n catalogView: bind(catalogView),\n navigation: bind(navigation),\n button: bind(button),\n detailView: bind(detailView),\n itemEventsView: bind(itemEventsView),\n newBoardForm: bind(newBoardForm),\n newItemForm: bind(newItemForm),\n recordLinks: bind(recordLinks),\n recordsView: bind(recordsView),\n recordDetail: bind(recordDetail),\n recordForm: bind(recordForm),\n executionSessionView: bind(executionSessionView),\n executionBadge: bind(executionBadge),\n copyReference: bind(copyReference)\n };\n}\n","import type {KanbanBoardSummary, KanbanCommand, KanbanEstimate, KanbanItem, KanbanPlanning, KanbanPrincipal} from '../contracts';\nimport {randomUUID} from '../utils';\nexport const value = (data: FormData, key: string) => String(data.get(key) ?? '').trim();\nexport function readPlan(data: FormData, previous?: KanbanPlanning): KanbanPlanning {\n const area = value(data, 'area'), milestone = value(data, 'milestone'), parentId = value(data, 'parentId'), dueAt = value(data, 'dueAt');\n return {kind: value(data, 'kind'), ...(previous?.execution ? {execution:previous.execution} : {}), priority: Number(value(data, 'priority')), references: previous?.references ?? [],\n dependencies: [...new Set(data.getAll('dependencies').flatMap(value => String(value).split(',')).map(id => id.trim()).filter(Boolean))],\n ...(area ? {area} : {}), ...(milestone ? {milestone} : {}), ...(parentId ? {parentId} : {}), ...(dueAt ? {dueAt: new Date(dueAt).getTime()} : {})};\n}\nexport function boardInput(data: FormData, actor: KanbanPrincipal, id: string) {\n return {id, title: value(data, 'title'), scope: {kind: 'system' as const},\n members: [{...actor, responsibility: 'Manage personal work', roles: ['worker', 'reviewer', 'coordinator'] as Array<'worker' | 'reviewer' | 'coordinator'>}],\n policy: {requireEstimate: data.has('requireEstimate'), review: 'assignee' as const}};\n}\nexport function formCommand(kind: string, data: FormData, board: KanbanBoardSummary, item?: KanbanItem, id = randomUUID()): KanbanCommand {\n if (kind === 'item') return {type: 'create-item', ...(value(data, 'launchMode') ? {launch: {mode: value(data, 'launchMode') as 'automatic' | 'manual'}} : {}), item: {id, title: value(data, 'title'), responsibility: value(data, 'responsibility'), acceptance: value(data, 'acceptance'),...(value(data,'itemResource')?{externalRefs:[JSON.parse(value(data,'itemResource'))]}:{})}, planning: readPlan(data)};\n if (kind === 'record') {\n const sessionId = value(data, 'sourceSession'), messageId = value(data, 'sourceMessage'), revision = value(data, 'sourceRevision');\n if ([sessionId, messageId, revision].some(Boolean) && ![sessionId, messageId, revision].every(Boolean)) throw Object.assign(new Error('Missing source fields'), {code: 'SOURCE_FIELDS_REQUIRED'});\n return {type: 'append-record', record: {id, kind: value(data, 'kind') as 'log' | 'decision', title: value(data, 'title'), content: value(data, 'content'),\n externalRefs: data.getAll('recordResources').map(value => JSON.parse(String(value))),\n itemIds: [...new Set(data.getAll('itemIds').flatMap(value => String(value).split(',')).map(id => id.trim()).filter(Boolean))],\n sources: sessionId ? [{sessionId, messageId, revision, role: 'user'}] : [],\n ...(value(data, 'rationale') ? {rationale: value(data, 'rationale')} : {}), ...(value(data, 'supersedes') ? {supersedes: value(data, 'supersedes')} : {})}};\n }\n if (!item) throw new Error('ITEM_NOT_FOUND');\n const itemId = item.id, token = item.owner?.token ?? '';\n if (kind === 'edit-item') return {type: 'edit-item', itemId, title: value(data, 'title'), responsibility: value(data, 'responsibility'), acceptance: value(data, 'acceptance')};\n if (kind === 'amendment') return {type: 'review-amendment', itemId, amendmentId: value(data, 'amendmentId'), accept: value(data, 'decision') === 'accept', reason: value(data, 'reason') || undefined};\n if (kind === 'claim') return {type: 'claim', itemId, ...(board.policy.requireEstimate !== false ? {estimate: estimate(data)} : {})};\n if (kind === 'close-plan') return {type: 'close-plan', itemId, resultRef: value(data, 'resultRef')};\n if (kind === 'submit') return {type: 'submit', itemId, token, resultRef: value(data, 'resultRef')};\n if (kind === 'plan') return {type: 'plan-item', itemId, planning: readPlan(data, item.planning)};\n if (kind === 'cancel') return {type: 'cancel-item', itemId, reason: value(data, 'reason')};\n if (kind === 'release') return {type: 'release-item', itemId, token, next: 'backlog', reason: value(data, 'reason')};\n if (kind === 'block') return {type: 'block-item', itemId, token, reason: value(data, 'reason')};\n if (kind === 'session') return {type: 'register-session', itemId, sessionId: value(data, 'sessionId'), role: 'observer', subscribed: true};\n if (kind === 'message') return {type: 'message', itemId, message: value(data, 'message'), recipientSessionIds: item.participants.filter(p => p.subscribed).map(p => p.sessionId)};\n throw new Error('UNKNOWN_COMMAND');\n}\nfunction estimate(data: FormData): KanbanEstimate {\n return {complexity: Number(value(data, 'complexity')), workUnits: Number(value(data, 'workUnits')), durationMs: Number(value(data, 'duration')) * 60000, confidence: value(data, 'confidence') as KanbanEstimate['confidence']};\n}\nexport function actionCommand(action: string, item: KanbanItem): KanbanCommand {\n const itemId = item.id, token = item.owner?.token ?? '';\n if (action === 'ready' || action === 'defer') return {type: 'set-stage', itemId, stage: action === 'ready' ? 'open' : 'backlog'};\n if (action === 'publish') return {type: 'publish-proposal', itemId};\n if (action === 'renew') return {type: 'renew', itemId, token};\n if (action === 'accept' || action === 'reject') return {type: 'review', itemId, accept: action === 'accept'};\n if (action === 'archive') return {type: 'archive-items', itemIds: [itemId], reason: 'manual'};\n if (action === 'restore') return {type: 'restore-item', itemId};\n if (action === 'unblock') return {type: 'unblock-item', itemId, token};\n throw new Error('UNKNOWN_COMMAND');\n}\n"],"mappings":"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","names":["value","value","button","value","field","value","value","date","value","value","value","button","field","value","field","value","value","id","navigation","field","value","dispatch"]}