@gavin-hu/my-pi-agent 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +17 -11
  2. package/README.zh-CN.md +13 -8
  3. package/docs/extensions/README.md +1 -1
  4. package/docs/extensions/board.md +286 -123
  5. package/docs/extensions/bytefly.md +381 -223
  6. package/docs/extensions/file-browse.md +14 -7
  7. package/docs/extensions/job.md +1 -2
  8. package/docs/extensions/plan.md +56 -11
  9. package/docs/extensions/session-bus.md +23 -10
  10. package/docs/extensions/team.md +45 -17
  11. package/docs/extensions/wechat.md +2 -1
  12. package/docs/extensions/worktree.md +30 -15
  13. package/extensions/board/commands.ts +23 -5
  14. package/extensions/board/format.ts +107 -9
  15. package/extensions/board/join.ts +1 -1
  16. package/extensions/board/page.ts +170 -94
  17. package/extensions/board/result.ts +9 -0
  18. package/extensions/board/schema.ts +22 -7
  19. package/extensions/board/seat.ts +9 -10
  20. package/extensions/board/snapshot.ts +1 -0
  21. package/extensions/board/tools.ts +186 -21
  22. package/extensions/board/transport/router.ts +27 -108
  23. package/extensions/board/transport/server.ts +18 -29
  24. package/extensions/board/types.ts +67 -0
  25. package/extensions/board/view/client.ts +23 -13
  26. package/extensions/board/view/dialog.ts +43 -0
  27. package/extensions/board/view/keys.ts +28 -24
  28. package/extensions/board/view/live.ts +5 -171
  29. package/extensions/board/view/names.ts +91 -0
  30. package/extensions/board/view/page.ts +48 -88
  31. package/extensions/board/view/render.ts +213 -190
  32. package/extensions/board/view/styles.ts +65 -48
  33. package/extensions/board/view/team.ts +63 -41
  34. package/extensions/bytefly/footer/budget.ts +6 -5
  35. package/extensions/bytefly/footer/collect/entries.ts +12 -4
  36. package/extensions/bytefly/footer/collect/snapshot.ts +8 -17
  37. package/extensions/bytefly/footer/config.ts +19 -8
  38. package/extensions/bytefly/footer/price/price.ts +30 -8
  39. package/extensions/bytefly/footer/register.ts +5 -5
  40. package/extensions/bytefly/footer/render/format.ts +18 -0
  41. package/extensions/bytefly/footer/render/lines.ts +23 -7
  42. package/extensions/bytefly/footer/render/segments.ts +117 -31
  43. package/extensions/bytefly/footer/types.ts +29 -5
  44. package/extensions/bytefly/footer/unpriced.ts +42 -17
  45. package/extensions/bytefly/panel/commands.ts +28 -1
  46. package/extensions/bytefly/panel/filter.ts +68 -0
  47. package/extensions/bytefly/panel/format.ts +16 -15
  48. package/extensions/bytefly/panel/join.ts +56 -13
  49. package/extensions/bytefly/panel/prices.ts +43 -0
  50. package/extensions/bytefly/panel/settings.ts +72 -23
  51. package/extensions/bytefly/panel/tui/entries.ts +26 -8
  52. package/extensions/bytefly/panel/tui/frame.ts +130 -93
  53. package/extensions/bytefly/panel/tui/keys.ts +352 -0
  54. package/extensions/bytefly/panel/tui/list-view.ts +25 -46
  55. package/extensions/bytefly/panel/tui/panes.ts +76 -0
  56. package/extensions/bytefly/panel/tui/section-view.ts +126 -0
  57. package/extensions/bytefly/panel/tui/settings-section.ts +54 -125
  58. package/extensions/bytefly/panel/tui/settings-view.ts +30 -131
  59. package/extensions/bytefly/panel/tui/side-pane.ts +224 -0
  60. package/extensions/bytefly/panel/tui.ts +306 -259
  61. package/extensions/check/commands.ts +2 -1
  62. package/extensions/file-browse/files/classify.ts +136 -0
  63. package/extensions/file-browse/files/files.ts +8 -547
  64. package/extensions/file-browse/files/index.ts +90 -0
  65. package/extensions/file-browse/files/list.ts +261 -0
  66. package/extensions/file-browse/files/tree.ts +101 -0
  67. package/extensions/file-browse/transport/router.ts +0 -2
  68. package/extensions/file-browse/view/emit.ts +51 -0
  69. package/extensions/file-browse/view/html.ts +6 -7
  70. package/extensions/file-browse/view/markdown.ts +11 -13
  71. package/extensions/file-browse/view/raw-html.ts +18 -13
  72. package/extensions/job/runtime.ts +4 -4
  73. package/extensions/plan/feedback.ts +40 -16
  74. package/extensions/plan/format.ts +10 -3
  75. package/extensions/plan/index.ts +17 -1
  76. package/extensions/plan/plan-files.ts +88 -0
  77. package/extensions/plan/plans.ts +19 -23
  78. package/extensions/plan/policy.ts +10 -5
  79. package/extensions/plan/runtime.ts +31 -2
  80. package/extensions/plan/todos.ts +51 -3
  81. package/extensions/plan/tools/exit.ts +10 -1
  82. package/extensions/plan/tools/todo-seed.ts +4 -2
  83. package/extensions/plan/tools/write.ts +12 -1
  84. package/extensions/plan/types.ts +15 -0
  85. package/extensions/plan/web-blocks.ts +89 -0
  86. package/extensions/plan/web-chrome.ts +3 -5
  87. package/extensions/plan/web-client.ts +179 -330
  88. package/extensions/plan/web-collab.ts +3 -3
  89. package/extensions/plan/web-comments.ts +18 -8
  90. package/extensions/plan/web-composer.ts +80 -0
  91. package/extensions/plan/web-draft.ts +40 -0
  92. package/extensions/plan/web-keys.ts +134 -0
  93. package/extensions/plan/web-outline.ts +192 -0
  94. package/extensions/plan/web-page.ts +4 -1
  95. package/extensions/plan/web-plan.ts +150 -0
  96. package/extensions/plan/web-router.ts +0 -1
  97. package/extensions/plan/web-settle.ts +194 -0
  98. package/extensions/rewind/commands/review.ts +2 -1
  99. package/extensions/session-bus/rows.ts +7 -3
  100. package/extensions/session-bus/runtime.ts +100 -38
  101. package/extensions/session-bus/store.ts +14 -2
  102. package/extensions/session-bus/tui.ts +1 -1
  103. package/extensions/session-bus/types.ts +10 -1
  104. package/extensions/subagent/commands.ts +2 -1
  105. package/extensions/team/commands.ts +41 -8
  106. package/extensions/team/format.ts +14 -0
  107. package/extensions/team/index.ts +2 -1
  108. package/extensions/team/tools.ts +30 -9
  109. package/extensions/team/types.ts +17 -0
  110. package/extensions/todo/index.ts +4 -1
  111. package/extensions/todo/nudge.ts +8 -2
  112. package/extensions/wechat/bridge.ts +43 -172
  113. package/extensions/wechat/intake.ts +245 -0
  114. package/extensions/worktree/commands.ts +24 -17
  115. package/extensions/worktree/exit.ts +12 -6
  116. package/extensions/worktree/git.ts +22 -14
  117. package/extensions/worktree/guard.ts +15 -285
  118. package/extensions/worktree/handoff.ts +10 -2
  119. package/extensions/worktree/index.ts +2 -1
  120. package/extensions/worktree/lifecycle.ts +2 -0
  121. package/extensions/worktree/registry.ts +20 -11
  122. package/extensions/worktree/root-tools.ts +13 -3
  123. package/extensions/worktree/runtime.ts +8 -2
  124. package/extensions/worktree/screen.ts +15 -8
  125. package/extensions/worktree/shell.ts +303 -0
  126. package/extensions/worktree/state.ts +1 -1
  127. package/extensions/worktree/status.ts +42 -9
  128. package/extensions/worktree/tools.ts +19 -13
  129. package/lib/README.md +6 -5
  130. package/lib/board/card.ts +192 -3
  131. package/lib/board/links.ts +26 -2
  132. package/lib/board/page-pointer.ts +86 -32
  133. package/lib/board/round-text.ts +11 -2
  134. package/lib/board/round.ts +25 -20
  135. package/lib/board/rules.ts +144 -11
  136. package/lib/board/store.ts +239 -52
  137. package/lib/board/view.ts +94 -10
  138. package/lib/format.ts +22 -0
  139. package/lib/http/serve.ts +3 -0
  140. package/lib/http/sink.ts +34 -9
  141. package/lib/plan-entry.ts +11 -0
  142. package/lib/policy.ts +14 -1
  143. package/lib/session-roster.ts +74 -3
  144. package/lib/spawn.ts +37 -3
  145. package/lib/stray-fields.ts +45 -0
  146. package/lib/tool-names.ts +13 -0
  147. package/lib/tui/glyphs.ts +2 -3
  148. package/lib/web/README.md +52 -2
  149. package/lib/web/client-runtime.ts +123 -0
  150. package/lib/web/index.ts +4 -2
  151. package/lib/web/markup.ts +88 -1
  152. package/lib/web/names.ts +42 -0
  153. package/package.json +1 -1
  154. package/extensions/board/view/actions.ts +0 -306
  155. package/extensions/board/writes.ts +0 -99
  156. package/extensions/bytefly/panel/tui/extensions-view.ts +0 -40
  157. package/extensions/bytefly/panel/tui/skills-view.ts +0 -50
  158. package/extensions/job/process.ts +0 -35
@@ -0,0 +1,91 @@
1
+ /**
2
+ * The board page's class vocabulary, as one table.
3
+ *
4
+ * The document (`page.ts`) and the client bundle cannot import from each other, so a
5
+ * class name used to be a string in each — and two of them were assembled at runtime
6
+ * (`"board-card__reason" + kind`), which is why nothing could compare what the page
7
+ * wears with what `styles.ts` draws. Reading both halves from this table makes those two
8
+ * sets enumerable, and `pages.test.ts` holds them equal.
9
+ *
10
+ * A name here is a **class**, not an id: ids are how the client finds an element
11
+ * (`getElementById`), they are not styled, and `pages.test.ts` pins their list.
12
+ */
13
+
14
+ /** Every `board-*` class the page wears. Keys are what the code reads; values are what CSS matches. */
15
+ export const BOARD_CLASS = {
16
+ // The shell, the toolbar, and the two panel wrappers.
17
+ toolbar: "board-toolbar",
18
+ controls: "board-controls",
19
+ main: "board-main",
20
+ panel: "board-panel",
21
+ filter: "board-filter",
22
+ picker: "board-picker",
23
+ progress: "board-progress",
24
+ status: "board-status",
25
+ noCards: "board-no-cards",
26
+ skeleton: "board-skeleton",
27
+
28
+ // One lane: a tray of cards with a head that sticks and folds.
29
+ lanes: "board-lanes",
30
+ lane: "board-lane",
31
+ laneHead: "board-lane__head",
32
+ laneDot: "board-lane__dot",
33
+ laneToggle: "board-lane__toggle",
34
+ laneCount: "board-lane__count",
35
+ laneList: "board-lane__list",
36
+ laneEmpty: "board-lane__empty",
37
+
38
+ // One card, and the two tones its reason line can take.
39
+ card: "board-card",
40
+ cardHead: "board-card__head",
41
+ cardId: "board-card__id",
42
+ cardTitle: "board-card__title",
43
+ cardMeta: "board-card__meta",
44
+ cardPaths: "board-card__paths",
45
+ cardReason: "board-card__reason",
46
+ cardReasonBlocked: "board-card__reason--blocked",
47
+ cardReasonUnplanned: "board-card__reason--unplanned",
48
+
49
+ // The card dialog: the record of one card, as a ladder of facts and its notes.
50
+ dialogPanel: "board-dialog__panel",
51
+ dialogHead: "board-dialog__head",
52
+ dialogId: "board-dialog__id",
53
+ dialogState: "board-dialog__state",
54
+ dialogBody: "board-dialog__body",
55
+ dialogSection: "board-dialog__section",
56
+ dialogHeading: "board-dialog__heading",
57
+ dialogCount: "board-dialog__count",
58
+ dialogFacts: "board-dialog__facts",
59
+ dialogPaths: "board-dialog__paths",
60
+ dialogPath: "board-dialog__path",
61
+ dialogValue: "board-dialog__value",
62
+ dialogPlan: "board-dialog__plan",
63
+ dialogNotes: "board-dialog__notes",
64
+ dialogNote: "board-dialog__note",
65
+ dialogNoteFoot: "board-dialog__note-foot",
66
+ dialogNoteBy: "board-dialog__note-by",
67
+ dialogNoteAt: "board-dialog__note-at",
68
+ dialogNoteText: "board-dialog__note-text",
69
+
70
+ // The Team tab: the queue of decisions, the roster, and the Done strip.
71
+ team: "board-team",
72
+ teamGrid: "board-team__grid",
73
+ teamGroup: "board-team__group",
74
+ teamCaption: "board-team__caption",
75
+ teamQueue: "board-team__queue",
76
+ teamDecision: "board-team__decision",
77
+ teamOpen: "board-team__open",
78
+ teamRef: "board-team__ref",
79
+ teamTitle: "board-team__title",
80
+ teamFoot: "board-team__foot",
81
+ teamWhy: "board-team__why",
82
+ teamWhyBlocked: "board-team__why--blocked",
83
+ teamRoster: "board-team__roster",
84
+ teamMate: "board-team__mate",
85
+ teamDot: "board-team__dot",
86
+ teamName: "board-team__name",
87
+ teamMets: "board-team__mets",
88
+ teamEmpty: "board-team__empty",
89
+ teamDone: "board-team__done",
90
+ teamId: "board-team__id",
91
+ } as const satisfies Readonly<Record<string, string>>;
@@ -13,8 +13,9 @@
13
13
  * contract test holds every class to the kit or to this page's stylesheet.
14
14
  */
15
15
 
16
- import { brandLockup, button, docHead, keysSheet, themeToggle } from "../../../lib/web/index.ts";
16
+ import { brandLockup, button, docHead, keysSheet, tabTitle, themeToggle } from "../../../lib/web/index.ts";
17
17
  import { BOARD_KEYS } from "./keys.ts";
18
+ import { BOARD_CLASS as N } from "./names.ts";
18
19
  import { BOARD_CSS } from "./styles.ts";
19
20
 
20
21
  /** The two views the page offers. */
@@ -23,129 +24,88 @@ export type PageView = "board" | "team";
23
24
  /**
24
25
  * Render the document for one initial view.
25
26
  *
26
- * Both panels are rendered and one is `hidden`, so switching tabs costs no request
27
- * and a shared link opens the tab it names. `writes` is the credential's authority:
28
- * a viewer's document says `data-writes="0"`, which is what makes the client draw a
29
- * page with no button the server would refuse.
27
+ * Both panels are rendered and one is `hidden`, so switching tabs costs no request and a
28
+ * shared link opens the tab it names. The document has no form and no write affordance:
29
+ * a page that cannot change a card cannot offer a button the server would refuse.
30
30
  */
31
- export function renderBoardPage(input: { view: PageView; writes?: boolean }): string {
31
+ export function renderBoardPage(input: { view: PageView }): string {
32
32
  const team = input.view === "team";
33
33
  return `<!doctype html>
34
- <html lang="en" data-view="${team ? "team" : "board"}" data-writes="${input.writes === false ? "0" : "1"}">
34
+ <html lang="en" data-view="${team ? "team" : "board"}">
35
35
  <head>
36
- ${docHead({ title: "board", css: BOARD_CSS })}
36
+ ${docHead({ title: tabTitle("board"), css: BOARD_CSS })}
37
37
  </head>
38
38
  <body class="bf-app">
39
39
  <h1 class="sr-only">board — the shared feature list for this repository</h1>
40
40
  <a class="skip" href="#main">Skip to the cards</a>
41
- <header class="bf-app__header"><div class="bf-toolbar board-toolbar">
41
+ <header class="bf-app__header"><div class="bf-toolbar ${N.toolbar}">
42
42
  ${brandLockup("board")}
43
- <span class="bf-chip bf-chip--accent" id="board-me" title="Writes from this page are made as this session">board</span>
44
- <p class="bf-status board-status" id="board-status" data-state="connecting" aria-live="polite">connecting…</p>
43
+ <span class="bf-chip bf-chip--accent" id="board-me" title="This page is served as this session, and it cannot change a card">board</span>
44
+ <p class="bf-status ${N.status}" id="board-status" data-state="connecting" aria-live="polite">connecting…</p>
45
45
  <span class="bf-spacer"></span>
46
- <div class="board-controls">
46
+ <div class="${N.controls}">
47
47
  <div class="bf-segmented" role="tablist" aria-label="View">
48
48
  <button type="button" class="bf-segmented__item" role="tab" id="tab-board" data-view="board" aria-controls="panel-board"${team ? "" : ' aria-current="page"'}>Board</button>
49
49
  <button type="button" class="bf-segmented__item" role="tab" id="tab-team" data-view="team" aria-controls="panel-team"${team ? ' aria-current="page"' : ""}>Team</button>
50
50
  </div>
51
- <p class="bf-progress board-progress" id="board-progress" hidden>
51
+ <p class="bf-progress ${N.progress}" id="board-progress" hidden>
52
52
  <span class="bf-progress__track"><span class="bf-progress__fill" id="board-progress-fill"></span></span>
53
53
  <span id="board-progress-text">0/0</span>
54
54
  </p>
55
- <label class="bf-field board-filter"><span class="sr-only">Filter cards</span>
55
+ <label class="bf-field ${N.filter}"><span class="sr-only">Filter cards</span>
56
56
  <input class="bf-input" id="board-filter" type="search" placeholder="filter cards" autocomplete="off">
57
57
  </label>
58
- ${button({ label: "+ New card", id: "board-new", title: "New card — n", attrs: { "aria-haspopup": "dialog" } })}
59
58
  ${button({ label: "?", variant: "icon", id: "keys-open", title: "Keyboard shortcuts", attrs: { "aria-haspopup": "dialog" } })}
60
59
  ${themeToggle()}
61
60
  </div>
62
61
  </div></header>
63
- <main class="bf-app__main board-main" id="main" tabindex="-1">
64
- <p class="bf-note board-banner" id="board-banner" role="status" hidden></p>
65
- <section class="board-panel" id="panel-board" role="tabpanel" aria-labelledby="tab-board"${team ? " hidden" : ""}>
66
- <div class="bf-segmented board-picker" id="board-picker" role="tablist" aria-label="Lane"></div>
67
- <div class="board-lanes" id="board-lanes"></div>
68
- <div class="bf-empty board-no-cards" id="board-no-cards" hidden>
62
+ <main class="bf-app__main ${N.main}" id="main" tabindex="-1">
63
+ <section class="${N.panel}" id="panel-board" role="tabpanel" aria-labelledby="tab-board"${team ? " hidden" : ""}>
64
+ <div class="bf-segmented ${N.picker}" id="board-picker" role="tablist" aria-label="Lane"></div>
65
+ <div class="${N.lanes}" id="board-lanes"></div>
66
+ <div class="bf-empty ${N.noCards}" id="board-no-cards" hidden>
69
67
  <p class="bf-empty__title">No cards yet</p>
70
68
  <p class="bf-empty__sub">One card per feature: what it delivers, who holds it, and where to start.</p>
71
- <button class="bf-btn bf-btn--primary" type="button" id="board-first-card">Add the first card</button>
69
+ <p class="bf-empty__sub"><code>board add</code> makes one — this page reads, and the tools write.</p>
72
70
  </div>
73
71
  </section>
74
- <section class="board-panel" id="panel-team" role="tabpanel" aria-labelledby="tab-team"${team ? "" : " hidden"}>
75
- <div class="board-team" id="board-team"></div>
72
+ <section class="${N.panel}" id="panel-team" role="tabpanel" aria-labelledby="tab-team"${team ? "" : " hidden"}>
73
+ <div class="${N.team}" id="board-team"></div>
76
74
  </section>
77
75
  </main>
78
76
  <footer class="bf-app__footer"><span id="board-where"></span></footer>
79
77
 
80
- <div class="bf-dialog" id="board-new-dialog" hidden>
81
- <div class="bf-dialog__panel" role="dialog" aria-modal="true" aria-labelledby="board-new-title">
82
- <div class="bf-dialog__head">
83
- <h2 id="board-new-title">New card</h2>
84
- </div>
85
- <form class="board-composer" id="board-composer" autocomplete="off">
86
- <div class="bf-dialog__body">
87
- <div class="board-composer__fields">
88
- <label class="board-composer__field board-composer__field--title">
89
- <span class="board-composer__label">Title<span class="board-composer__count" id="new-title-count" hidden></span></span>
90
- <span class="bf-field"><input class="bf-input" id="new-title" name="title" placeholder="what it delivers, in one line" maxlength="120" required></span>
91
- </label>
92
- <label class="board-composer__field">
93
- <span class="board-composer__label">Paths</span>
94
- <span class="bf-field"><input class="bf-input" id="new-paths" name="paths" placeholder="extensions/board lib/web" aria-describedby="composer-hint"></span>
95
- </label>
96
- <label class="board-composer__field">
97
- <span class="board-composer__label">Priority</span>
98
- <span class="bf-field"><select class="bf-input board-composer__select" id="new-priority" name="priority">
99
- <option value="high">high</option>
100
- <option value="normal" selected>normal</option>
101
- <option value="low">low</option>
102
- </select></span>
103
- </label>
104
- </div>
105
- <p class="bf-dialog__hint" id="composer-hint">one card per feature — its steps live in the owner's plan and todo</p>
106
- </div>
107
- <div class="bf-dialog__actions">
108
- <button class="bf-btn" type="button" id="board-cancel">Cancel</button>
109
- <button class="bf-btn bf-btn--primary" type="submit" id="new-submit">Add card</button>
110
- </div>
111
- </form>
112
- </div>
113
- </div>
114
-
115
78
  <div class="bf-dialog" id="board-card-dialog" hidden>
116
- <div class="bf-dialog__panel" role="dialog" aria-modal="true" aria-labelledby="card-dialog-title" tabindex="-1">
117
- <div class="bf-dialog__head">
79
+ <div class="bf-dialog__panel ${N.dialogPanel}" role="dialog" aria-modal="true" aria-labelledby="card-dialog-title" tabindex="-1">
80
+ <div class="bf-dialog__head ${N.dialogHead}">
81
+ <span class="${N.dialogId}" id="card-dialog-id"></span>
118
82
  <h2 id="card-dialog-title"></h2>
119
- <span class="board-dialog__state" id="card-dialog-state"></span>
120
83
  <span class="bf-spacer"></span>
84
+ <span class="${N.dialogState}" id="card-dialog-state"></span>
121
85
  <button type="button" class="bf-btn bf-btn--icon" id="card-dialog-close" aria-label="Close">×</button>
122
86
  </div>
123
- <div class="bf-dialog__body">
124
- <p class="board-dialog__meta" id="card-dialog-meta"></p>
125
- <p class="board-dialog__owner" id="card-dialog-owner"></p>
126
- <ul class="board-card__paths" id="card-dialog-paths"></ul>
127
- <p class="board-dialog__depends" id="card-dialog-depends" hidden></p>
128
- <p class="board-dialog__plan" id="card-dialog-plan" hidden></p>
129
- <ol class="board-dialog__notes" id="card-dialog-notes"></ol>
130
- <p class="bf-dialog__hint" id="card-dialog-earlier" hidden></p>
131
- <div class="bf-composer board-dialog__note-composer" id="card-dialog-note-composer">
132
- <label class="bf-field"><span class="sr-only">Add a note</span>
133
- <input class="bf-input" id="card-dialog-note" placeholder="add a note" maxlength="1000">
134
- </label>
135
- <div class="bf-composer__row"><button type="button" class="bf-btn" id="card-dialog-note-add">Note</button></div>
136
- </div>
137
- </div>
138
- <div class="bf-dialog__actions" id="card-dialog-actions"></div>
139
- </div>
140
- </div>
141
-
142
- <div class="bf-dialog board-confirm" id="board-confirm" hidden>
143
- <div class="bf-dialog__panel" role="dialog" aria-modal="true" aria-labelledby="confirm-title" tabindex="-1">
144
- <div class="bf-dialog__head"><h2 id="confirm-title"></h2></div>
145
- <div class="bf-dialog__body"><p class="board-confirm__body" id="confirm-body"></p></div>
146
- <div class="bf-dialog__actions">
147
- <button type="button" class="bf-btn" id="confirm-cancel">Cancel</button>
148
- <button type="button" class="bf-btn bf-btn--primary" id="confirm-ok">Confirm</button>
87
+ <div class="bf-dialog__body ${N.dialogBody}">
88
+ <p class="sr-only" id="card-dialog-where" aria-live="polite"></p>
89
+ <section class="${N.dialogSection}" aria-labelledby="card-dialog-card-head">
90
+ <h3 class="${N.dialogHeading}" id="card-dialog-card-head">the card</h3>
91
+ <dl class="${N.dialogFacts}">
92
+ <dt id="card-dialog-owner-label">owner</dt><dd class="${N.dialogValue}" id="card-dialog-owner"></dd>
93
+ <dt id="card-dialog-priority-label" hidden>priority</dt><dd class="${N.dialogValue}" id="card-dialog-priority" hidden></dd>
94
+ <dt id="card-dialog-updated-label">updated</dt><dd class="${N.dialogValue}" id="card-dialog-updated"></dd>
95
+ <dt id="card-dialog-lane-label" hidden>in lane</dt><dd class="${N.dialogValue}" id="card-dialog-lane" hidden></dd>
96
+ <dt id="card-dialog-by-label">last edited</dt><dd class="${N.dialogValue}" id="card-dialog-by"></dd>
97
+ <dt id="card-dialog-landed-label" hidden>landed</dt><dd class="${N.dialogValue}" id="card-dialog-landed" hidden></dd>
98
+ <dt id="card-dialog-depends-label" hidden>waits on</dt><dd class="${N.dialogValue}" id="card-dialog-depends" hidden></dd>
99
+ <dt id="card-dialog-dependents-label" hidden>waited on by</dt><dd class="${N.dialogValue}" id="card-dialog-dependents" hidden></dd>
100
+ <dt id="card-dialog-plan-label" hidden>plan</dt><dd class="${N.dialogValue} ${N.dialogPlan}" id="card-dialog-plan" hidden></dd>
101
+ <dt id="card-dialog-paths-label" hidden>paths</dt><dd id="card-dialog-paths" hidden><ul class="${N.dialogPaths}" id="card-dialog-path-list"></ul></dd>
102
+ </dl>
103
+ </section>
104
+ <section class="${N.dialogSection}" aria-labelledby="card-dialog-notes-head">
105
+ <h3 class="${N.dialogHeading}" id="card-dialog-notes-head">notes<span class="${N.dialogCount}" id="card-dialog-note-count"></span></h3>
106
+ <ol class="${N.dialogNotes}" id="card-dialog-notes"></ol>
107
+ <p class="bf-dialog__hint" id="card-dialog-earlier" hidden></p>
108
+ </section>
149
109
  </div>
150
110
  </div>
151
111
  </div>