@shivaedev/work-board 0.2.1 → 0.4.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.
- package/CHANGELOG.md +93 -0
- package/README.md +208 -11
- package/dist/attention/overviewHtml.d.ts +3 -0
- package/dist/attention/overviewHtml.d.ts.map +1 -0
- package/dist/attention/overviewHtml.js +41 -0
- package/dist/attention/overviewHtml.js.map +1 -0
- package/dist/attention/requests.d.ts +24 -0
- package/dist/attention/requests.d.ts.map +1 -0
- package/dist/attention/requests.js +40 -0
- package/dist/attention/requests.js.map +1 -0
- package/dist/attention/style.d.ts +2 -0
- package/dist/attention/style.d.ts.map +1 -0
- package/dist/attention/style.js +10 -0
- package/dist/attention/style.js.map +1 -0
- package/dist/board.d.ts.map +1 -1
- package/dist/board.js +15 -2
- package/dist/board.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/files/changes.d.ts +1 -0
- package/dist/files/changes.d.ts.map +1 -1
- package/dist/files/changes.js +5 -10
- package/dist/files/changes.js.map +1 -1
- package/dist/files/home.d.ts.map +1 -1
- package/dist/files/home.js +4 -0
- package/dist/files/home.js.map +1 -1
- package/dist/files/list.d.ts +7 -0
- package/dist/files/list.d.ts.map +1 -1
- package/dist/files/list.js +23 -13
- package/dist/files/list.js.map +1 -1
- package/dist/files/markdownPath.d.ts +3 -0
- package/dist/files/markdownPath.d.ts.map +1 -0
- package/dist/files/markdownPath.js +31 -0
- package/dist/files/markdownPath.js.map +1 -0
- package/dist/files/url.d.ts +2 -0
- package/dist/files/url.d.ts.map +1 -0
- package/dist/files/url.js +4 -0
- package/dist/files/url.js.map +1 -0
- package/dist/files/watchDirectories.d.ts +9 -0
- package/dist/files/watchDirectories.d.ts.map +1 -0
- package/dist/files/watchDirectories.js +33 -0
- package/dist/files/watchDirectories.js.map +1 -0
- package/dist/history/baseline.d.ts +19 -0
- package/dist/history/baseline.d.ts.map +1 -0
- package/dist/history/baseline.js +40 -0
- package/dist/history/baseline.js.map +1 -0
- package/dist/history/compare.d.ts +14 -0
- package/dist/history/compare.d.ts.map +1 -0
- package/dist/history/compare.js +47 -0
- package/dist/history/compare.js.map +1 -0
- package/dist/history/documents.d.ts +10 -0
- package/dist/history/documents.d.ts.map +1 -0
- package/dist/history/documents.js +15 -0
- package/dist/history/documents.js.map +1 -0
- package/dist/history/fields.d.ts +3 -0
- package/dist/history/fields.d.ts.map +1 -0
- package/dist/history/fields.js +27 -0
- package/dist/history/fields.js.map +1 -0
- package/dist/history/html.d.ts +4 -0
- package/dist/history/html.d.ts.map +1 -0
- package/dist/history/html.js +22 -0
- package/dist/history/html.js.map +1 -0
- package/dist/history/limits.d.ts +3 -0
- package/dist/history/limits.d.ts.map +1 -0
- package/dist/history/limits.js +3 -0
- package/dist/history/limits.js.map +1 -0
- package/dist/history/response.d.ts +4 -0
- package/dist/history/response.d.ts.map +1 -0
- package/dist/history/response.js +20 -0
- package/dist/history/response.js.map +1 -0
- package/dist/history/schema.d.ts +24 -0
- package/dist/history/schema.d.ts.map +1 -0
- package/dist/history/schema.js +19 -0
- package/dist/history/schema.js.map +1 -0
- package/dist/history/script.d.ts +2 -0
- package/dist/history/script.d.ts.map +1 -0
- package/dist/history/script.js +113 -0
- package/dist/history/script.js.map +1 -0
- package/dist/http/assets.d.ts.map +1 -1
- package/dist/http/assets.js +18 -1
- package/dist/http/assets.js.map +1 -1
- package/dist/http/history.d.ts +7 -0
- package/dist/http/history.d.ts.map +1 -0
- package/dist/http/history.js +45 -0
- package/dist/http/history.js.map +1 -0
- package/dist/http/identity.d.ts +7 -0
- package/dist/http/identity.d.ts.map +1 -0
- package/dist/http/identity.js +38 -0
- package/dist/http/identity.js.map +1 -0
- package/dist/http/overview.d.ts +5 -0
- package/dist/http/overview.d.ts.map +1 -0
- package/dist/http/overview.js +13 -0
- package/dist/http/overview.js.map +1 -0
- package/dist/http/page.d.ts +3 -2
- package/dist/http/page.d.ts.map +1 -1
- package/dist/http/page.js +34 -13
- package/dist/http/page.js.map +1 -1
- package/dist/http/search.d.ts +5 -0
- package/dist/http/search.d.ts.map +1 -0
- package/dist/http/search.js +11 -0
- package/dist/http/search.js.map +1 -0
- package/dist/http/work.d.ts +6 -0
- package/dist/http/work.d.ts.map +1 -0
- package/dist/http/work.js +22 -0
- package/dist/http/work.js.map +1 -0
- package/dist/metadata/attentionProblems.d.ts +4 -0
- package/dist/metadata/attentionProblems.d.ts.map +1 -0
- package/dist/metadata/attentionProblems.js +16 -0
- package/dist/metadata/attentionProblems.js.map +1 -0
- package/dist/metadata/backlinks.d.ts +8 -0
- package/dist/metadata/backlinks.d.ts.map +1 -0
- package/dist/metadata/backlinks.js +34 -0
- package/dist/metadata/backlinks.js.map +1 -0
- package/dist/metadata/fields.d.ts +37 -0
- package/dist/metadata/fields.d.ts.map +1 -0
- package/dist/metadata/fields.js +25 -0
- package/dist/metadata/fields.js.map +1 -0
- package/dist/metadata/links.d.ts +4 -0
- package/dist/metadata/links.d.ts.map +1 -0
- package/dist/metadata/links.js +18 -0
- package/dist/metadata/links.js.map +1 -0
- package/dist/metadata/locations.d.ts +3 -0
- package/dist/metadata/locations.d.ts.map +1 -0
- package/dist/metadata/locations.js +35 -0
- package/dist/metadata/locations.js.map +1 -0
- package/dist/metadata/model.d.ts +15 -0
- package/dist/metadata/model.d.ts.map +1 -0
- package/dist/metadata/model.js +13 -0
- package/dist/metadata/model.js.map +1 -0
- package/dist/metadata/parse.d.ts +16 -0
- package/dist/metadata/parse.d.ts.map +1 -0
- package/dist/metadata/parse.js +48 -0
- package/dist/metadata/parse.js.map +1 -0
- package/dist/metadata/problems.d.ts +4 -0
- package/dist/metadata/problems.d.ts.map +1 -0
- package/dist/metadata/problems.js +59 -0
- package/dist/metadata/problems.js.map +1 -0
- package/dist/metadata/relationshipLabel.d.ts +2 -0
- package/dist/metadata/relationshipLabel.d.ts.map +1 -0
- package/dist/metadata/relationshipLabel.js +14 -0
- package/dist/metadata/relationshipLabel.js.map +1 -0
- package/dist/metadata/schema.d.ts +44 -0
- package/dist/metadata/schema.d.ts.map +1 -0
- package/dist/metadata/schema.js +36 -0
- package/dist/metadata/schema.js.map +1 -0
- package/dist/metadata/sourceLinks.d.ts +5 -0
- package/dist/metadata/sourceLinks.d.ts.map +1 -0
- package/dist/metadata/sourceLinks.js +44 -0
- package/dist/metadata/sourceLinks.js.map +1 -0
- package/dist/page/attentionDetails.d.ts +4 -0
- package/dist/page/attentionDetails.d.ts.map +1 -0
- package/dist/page/attentionDetails.js +13 -0
- package/dist/page/attentionDetails.js.map +1 -0
- package/dist/page/backlinksHtml.d.ts +3 -0
- package/dist/page/backlinksHtml.d.ts.map +1 -0
- package/dist/page/backlinksHtml.js +16 -0
- package/dist/page/backlinksHtml.js.map +1 -0
- package/dist/page/board.d.ts +1 -1
- package/dist/page/board.d.ts.map +1 -1
- package/dist/page/board.js +14 -4
- package/dist/page/board.js.map +1 -1
- package/dist/page/client.d.ts +2 -1
- package/dist/page/client.d.ts.map +1 -1
- package/dist/page/client.js +66 -7
- package/dist/page/client.js.map +1 -1
- package/dist/page/criteriaEvidence.d.ts +4 -0
- package/dist/page/criteriaEvidence.d.ts.map +1 -0
- package/dist/page/criteriaEvidence.js +27 -0
- package/dist/page/criteriaEvidence.js.map +1 -0
- package/dist/page/diagrams.d.ts +1 -1
- package/dist/page/diagrams.d.ts.map +1 -1
- package/dist/page/diagrams.js +12 -4
- package/dist/page/diagrams.js.map +1 -1
- package/dist/page/document.d.ts +1 -1
- package/dist/page/document.d.ts.map +1 -1
- package/dist/page/document.js +6 -3
- package/dist/page/document.js.map +1 -1
- package/dist/page/libraryScript.d.ts +2 -0
- package/dist/page/libraryScript.d.ts.map +1 -0
- package/dist/page/libraryScript.js +73 -0
- package/dist/page/libraryScript.js.map +1 -0
- package/dist/page/metadata.d.ts +5 -0
- package/dist/page/metadata.d.ts.map +1 -0
- package/dist/page/metadata.js +34 -0
- package/dist/page/metadata.js.map +1 -0
- package/dist/page/metadataDetails.d.ts +4 -0
- package/dist/page/metadataDetails.d.ts.map +1 -0
- package/dist/page/metadataDetails.js +23 -0
- package/dist/page/metadataDetails.js.map +1 -0
- package/dist/page/metadataLinks.d.ts +6 -0
- package/dist/page/metadataLinks.d.ts.map +1 -0
- package/dist/page/metadataLinks.js +31 -0
- package/dist/page/metadataLinks.js.map +1 -0
- package/dist/page/nav.d.ts.map +1 -1
- package/dist/page/nav.js +3 -3
- package/dist/page/nav.js.map +1 -1
- package/dist/page/navigationScript.d.ts +2 -0
- package/dist/page/navigationScript.d.ts.map +1 -0
- package/dist/page/navigationScript.js +104 -0
- package/dist/page/navigationScript.js.map +1 -0
- package/dist/page/readingStateScript.d.ts +2 -0
- package/dist/page/readingStateScript.d.ts.map +1 -0
- package/dist/page/readingStateScript.js +62 -0
- package/dist/page/readingStateScript.js.map +1 -0
- package/dist/page/readingStyles.d.ts +2 -0
- package/dist/page/readingStyles.d.ts.map +1 -0
- package/dist/page/readingStyles.js +29 -0
- package/dist/page/readingStyles.js.map +1 -0
- package/dist/page/readingTools.d.ts +3 -0
- package/dist/page/readingTools.d.ts.map +1 -0
- package/dist/page/readingTools.js +10 -0
- package/dist/page/readingTools.js.map +1 -0
- package/dist/page/recordedEvidence.d.ts +4 -0
- package/dist/page/recordedEvidence.d.ts.map +1 -0
- package/dist/page/recordedEvidence.js +10 -0
- package/dist/page/recordedEvidence.js.map +1 -0
- package/dist/page/searchDialog.d.ts +3 -0
- package/dist/page/searchDialog.d.ts.map +1 -0
- package/dist/page/searchDialog.js +16 -0
- package/dist/page/searchDialog.js.map +1 -0
- package/dist/page/searchResultsScript.d.ts +2 -0
- package/dist/page/searchResultsScript.d.ts.map +1 -0
- package/dist/page/searchResultsScript.js +64 -0
- package/dist/page/searchResultsScript.js.map +1 -0
- package/dist/page/searchScript.d.ts +2 -0
- package/dist/page/searchScript.d.ts.map +1 -0
- package/dist/page/searchScript.js +73 -0
- package/dist/page/searchScript.js.map +1 -0
- package/dist/page/shell.d.ts +1 -1
- package/dist/page/shell.d.ts.map +1 -1
- package/dist/page/shell.js +23 -5
- package/dist/page/shell.js.map +1 -1
- package/dist/page/stateScript.d.ts +2 -0
- package/dist/page/stateScript.d.ts.map +1 -0
- package/dist/page/stateScript.js +55 -0
- package/dist/page/stateScript.js.map +1 -0
- package/dist/page/style.d.ts.map +1 -1
- package/dist/page/style.js +15 -34
- package/dist/page/style.js.map +1 -1
- package/dist/page/swap.d.ts +1 -1
- package/dist/page/swap.d.ts.map +1 -1
- package/dist/page/swap.js +4 -1
- package/dist/page/swap.js.map +1 -1
- package/dist/page/workspaceStyles.d.ts +3 -0
- package/dist/page/workspaceStyles.d.ts.map +1 -0
- package/dist/page/workspaceStyles.js +79 -0
- package/dist/page/workspaceStyles.js.map +1 -0
- package/dist/render/documentHeadings.d.ts +667 -0
- package/dist/render/documentHeadings.d.ts.map +1 -0
- package/dist/render/documentHeadings.js +45 -0
- package/dist/render/documentHeadings.js.map +1 -0
- package/dist/render/documentLinks.d.ts +659 -0
- package/dist/render/documentLinks.d.ts.map +1 -0
- package/dist/render/documentLinks.js +19 -0
- package/dist/render/documentLinks.js.map +1 -0
- package/dist/render/markdown.d.ts +7 -1
- package/dist/render/markdown.d.ts.map +1 -1
- package/dist/render/markdown.js +13 -2
- package/dist/render/markdown.js.map +1 -1
- package/dist/search/attentionEntries.d.ts +4 -0
- package/dist/search/attentionEntries.d.ts.map +1 -0
- package/dist/search/attentionEntries.js +20 -0
- package/dist/search/attentionEntries.js.map +1 -0
- package/dist/search/collector.d.ts +13 -0
- package/dist/search/collector.d.ts.map +1 -0
- package/dist/search/collector.js +40 -0
- package/dist/search/collector.js.map +1 -0
- package/dist/search/entries.d.ts +10 -0
- package/dist/search/entries.d.ts.map +1 -0
- package/dist/search/entries.js +37 -0
- package/dist/search/entries.js.map +1 -0
- package/dist/search/linkCollector.d.ts +8 -0
- package/dist/search/linkCollector.d.ts.map +1 -0
- package/dist/search/linkCollector.js +16 -0
- package/dist/search/linkCollector.js.map +1 -0
- package/dist/search/match.d.ts +14 -0
- package/dist/search/match.d.ts.map +1 -0
- package/dist/search/match.js +26 -0
- package/dist/search/match.js.map +1 -0
- package/dist/search/metadataEntries.d.ts +4 -0
- package/dist/search/metadataEntries.d.ts.map +1 -0
- package/dist/search/metadataEntries.js +42 -0
- package/dist/search/metadataEntries.js.map +1 -0
- package/dist/search/snapshot.d.ts +13 -0
- package/dist/search/snapshot.d.ts.map +1 -0
- package/dist/search/snapshot.js +49 -0
- package/dist/search/snapshot.js.map +1 -0
- package/dist/views/items.d.ts +11 -0
- package/dist/views/items.d.ts.map +1 -0
- package/dist/views/items.js +48 -0
- package/dist/views/items.js.map +1 -0
- package/dist/views/projection.d.ts +15 -0
- package/dist/views/projection.d.ts.map +1 -0
- package/dist/views/projection.js +47 -0
- package/dist/views/projection.js.map +1 -0
- package/dist/views/savedScript.d.ts +2 -0
- package/dist/views/savedScript.d.ts.map +1 -0
- package/dist/views/savedScript.js +89 -0
- package/dist/views/savedScript.js.map +1 -0
- package/dist/views/state.d.ts +15 -0
- package/dist/views/state.d.ts.map +1 -0
- package/dist/views/state.js +45 -0
- package/dist/views/state.js.map +1 -0
- package/dist/views/tools.d.ts +3 -0
- package/dist/views/tools.d.ts.map +1 -0
- package/dist/views/tools.js +11 -0
- package/dist/views/tools.js.map +1 -0
- package/dist/views/workCards.d.ts +4 -0
- package/dist/views/workCards.d.ts.map +1 -0
- package/dist/views/workCards.js +23 -0
- package/dist/views/workCards.js.map +1 -0
- package/dist/views/workControls.d.ts +4 -0
- package/dist/views/workControls.d.ts.map +1 -0
- package/dist/views/workControls.js +32 -0
- package/dist/views/workControls.js.map +1 -0
- package/dist/views/workDetail.d.ts +13 -0
- package/dist/views/workDetail.d.ts.map +1 -0
- package/dist/views/workDetail.js +26 -0
- package/dist/views/workDetail.js.map +1 -0
- package/dist/views/workHtml.d.ts +15 -0
- package/dist/views/workHtml.d.ts.map +1 -0
- package/dist/views/workHtml.js +35 -0
- package/dist/views/workHtml.js.map +1 -0
- package/dist/views/workStyle.d.ts +2 -0
- package/dist/views/workStyle.d.ts.map +1 -0
- package/dist/views/workStyle.js +18 -0
- package/dist/views/workStyle.js.map +1 -0
- package/dist/views/workTable.d.ts +4 -0
- package/dist/views/workTable.d.ts.map +1 -0
- package/dist/views/workTable.js +19 -0
- package/dist/views/workTable.js.map +1 -0
- package/package.json +14 -10
- package/src/attention/overviewHtml.ts +44 -0
- package/src/attention/requests.ts +64 -0
- package/src/attention/style.ts +9 -0
- package/src/board.ts +16 -3
- package/src/cli.ts +1 -1
- package/src/files/changes.ts +6 -17
- package/src/files/home.ts +4 -0
- package/src/files/list.ts +25 -14
- package/src/files/markdownPath.ts +31 -0
- package/src/files/url.ts +3 -0
- package/src/files/watchDirectories.ts +60 -0
- package/src/history/baseline.ts +43 -0
- package/src/history/compare.ts +54 -0
- package/src/history/documents.ts +21 -0
- package/src/history/fields.ts +32 -0
- package/src/history/html.ts +23 -0
- package/src/history/limits.ts +2 -0
- package/src/history/response.ts +23 -0
- package/src/history/schema.ts +36 -0
- package/src/history/script.ts +112 -0
- package/src/http/assets.ts +18 -1
- package/src/http/history.ts +50 -0
- package/src/http/identity.ts +62 -0
- package/src/http/overview.ts +19 -0
- package/src/http/page.ts +52 -15
- package/src/http/search.ts +13 -0
- package/src/http/work.ts +41 -0
- package/src/metadata/attentionProblems.ts +18 -0
- package/src/metadata/backlinks.ts +46 -0
- package/src/metadata/fields.ts +26 -0
- package/src/metadata/links.ts +19 -0
- package/src/metadata/locations.ts +34 -0
- package/src/metadata/model.ts +27 -0
- package/src/metadata/parse.ts +62 -0
- package/src/metadata/problems.ts +66 -0
- package/src/metadata/relationshipLabel.ts +14 -0
- package/src/metadata/schema.ts +45 -0
- package/src/metadata/sourceLinks.ts +46 -0
- package/src/page/attentionDetails.ts +18 -0
- package/src/page/backlinksHtml.ts +18 -0
- package/src/page/board.ts +14 -4
- package/src/page/client.ts +66 -7
- package/src/page/criteriaEvidence.ts +36 -0
- package/src/page/diagrams.ts +12 -4
- package/src/page/document.ts +6 -3
- package/src/page/libraryScript.ts +72 -0
- package/src/page/metadata.ts +40 -0
- package/src/page/metadataDetails.ts +26 -0
- package/src/page/metadataLinks.ts +35 -0
- package/src/page/nav.ts +5 -4
- package/src/page/navigationScript.ts +103 -0
- package/src/page/readingStateScript.ts +61 -0
- package/src/page/readingStyles.ts +28 -0
- package/src/page/readingTools.ts +12 -0
- package/src/page/recordedEvidence.ts +12 -0
- package/src/page/searchDialog.ts +16 -0
- package/src/page/searchResultsScript.ts +63 -0
- package/src/page/searchScript.ts +72 -0
- package/src/page/shell.ts +32 -5
- package/src/page/stateScript.ts +54 -0
- package/src/page/style.ts +15 -35
- package/src/page/swap.ts +4 -1
- package/src/page/workspaceStyles.ts +79 -0
- package/src/render/documentHeadings.ts +52 -0
- package/src/render/documentLinks.ts +19 -0
- package/src/render/markdown.ts +21 -4
- package/src/search/attentionEntries.ts +22 -0
- package/src/search/collector.ts +44 -0
- package/src/search/entries.ts +51 -0
- package/src/search/linkCollector.ts +16 -0
- package/src/search/match.ts +28 -0
- package/src/search/metadataEntries.ts +44 -0
- package/src/search/snapshot.ts +59 -0
- package/src/views/items.ts +55 -0
- package/src/views/projection.ts +59 -0
- package/src/views/savedScript.ts +88 -0
- package/src/views/state.ts +47 -0
- package/src/views/tools.ts +11 -0
- package/src/views/workCards.ts +26 -0
- package/src/views/workControls.ts +38 -0
- package/src/views/workDetail.ts +28 -0
- package/src/views/workHtml.ts +39 -0
- package/src/views/workStyle.ts +17 -0
- package/src/views/workTable.ts +21 -0
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/src/index.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,98 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.0 - 2026-10-05
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Add explicit Changes since seen comparisons with one browser-local baseline
|
|
8
|
+
per workspace, 30-day expiry, a 2 MiB serialized limit and clearing. Compare
|
|
9
|
+
source additions/removals, unique-ID moves and recorded field/content changes
|
|
10
|
+
with escaped old/current source. Keep incomplete, corrupt, expired and oversized
|
|
11
|
+
history explicit; live updates never silently acknowledge changes. No source
|
|
12
|
+
writes, server history, cloud sync, inferred authorship or verified acceptance.
|
|
13
|
+
|
|
14
|
+
- Read explicit per-item attention request lists and expose a local overview for
|
|
15
|
+
decisions, reviews and blockers with reason, response labels, target links and
|
|
16
|
+
source provenance. Preserve exact request navigation, search/backlink context,
|
|
17
|
+
native links and live updates. Keep invalid/ambiguous requests unclassified and
|
|
18
|
+
incomplete indexes uncounted; closed requests do not imply acceptance. Existing
|
|
19
|
+
Markdown and arbitrary status/owner fields remain unchanged.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Include symlinked reference directories outside the workspace in document
|
|
24
|
+
reading, logical relative links, home selection and search. Watch linked
|
|
25
|
+
directory edits and rediscover added/retargeted links. Skip broken links,
|
|
26
|
+
ancestor/cycle traversal, hidden entries and dependencies; standalone file
|
|
27
|
+
symlinks still cannot escape their containing workspace/reference directory.
|
|
28
|
+
Reference files are read only.
|
|
29
|
+
|
|
30
|
+
## 0.3.0 - 2026-10-04
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- Breaking: no root entry and no module that re-exports another. `exports` maps one `"./*.ts"` pattern to every module (`src` under the `source` condition, `dist` otherwise), so you import the module that defines a name, and a bundler sees only the modules you use. Where each name now lives:
|
|
35
|
+
- `@shivaedev/work-board`: `@shivaedev/work-board/board.ts` (`BoardOptions`, `boardLayer`)
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- Add source backlinks for explicit relationships, board membership, criterion
|
|
40
|
+
evidence, local evidence sources, and Markdown hyperlinks, including plain
|
|
41
|
+
files. Reuse the existing parse/index and disclose incomplete references.
|
|
42
|
+
Associate criterion claims across files and link directly to their records;
|
|
43
|
+
show missing claims, origin lines, retained old revisions, and missing local
|
|
44
|
+
Markdown sources without implying verified acceptance. Decision options and
|
|
45
|
+
rationale stay ordinary Markdown; source files remain unchanged.
|
|
46
|
+
|
|
47
|
+
- Add a table layout sharing board projections, filters, sorting, and selected
|
|
48
|
+
source detail. Switch layouts without losing URL context and read/filter tables
|
|
49
|
+
without JavaScript. Save, update, reopen, remove, or clear up to 10 local named
|
|
50
|
+
views per workspace; reject unsafe destinations and disclose unavailable
|
|
51
|
+
storage. Keep saved filters separate from URL item selection and never silently
|
|
52
|
+
evict a saved view at capacity. Source Markdown stays unchanged.
|
|
53
|
+
|
|
54
|
+
- Add Work board selection and explicit shared-item projections, exact status/
|
|
55
|
+
owner filters, text matching, and sorting. URL state restores board/filter/
|
|
56
|
+
selected detail context; source Markdown stays readable in a side pane.
|
|
57
|
+
Disclose missing/ambiguous memberships and selections, retain filters and
|
|
58
|
+
focused unsent search through live updates, and keep native links/GET filters
|
|
59
|
+
usable without JavaScript. Existing heading boards remain unchanged.
|
|
60
|
+
|
|
61
|
+
- Read optional YAML frontmatter for stable item identity, explicit work fields,
|
|
62
|
+
relationships, board membership, criteria, and recorded evidence provenance.
|
|
63
|
+
Keep ordinary Markdown/heading boards valid, retain unknown source metadata,
|
|
64
|
+
and disclose malformed fields, duplicate IDs, and unresolved references.
|
|
65
|
+
Rebuild identities from the existing local index; identity links survive file
|
|
66
|
+
and heading renames, and criterion search opens its source context. Recorded
|
|
67
|
+
outcomes remain distinct from independently verified acceptance.
|
|
68
|
+
- Show source lines in search results and preserve reading state when an item
|
|
69
|
+
moves. Keep passage focus when a search result targets the active document.
|
|
70
|
+
|
|
71
|
+
- Add local workspace search with document, heading, and passage results, snippets,
|
|
72
|
+
keyboard navigation, and a command dialog for existing view controls. Rebuild
|
|
73
|
+
the in-memory index after file changes, disclose unreadable files, and prevent
|
|
74
|
+
older search responses from replacing newer queries.
|
|
75
|
+
|
|
76
|
+
- Add heading passage links and an outline, in-place document navigation with
|
|
77
|
+
back/forward reading-state restoration, workspace-scoped favorites and recents,
|
|
78
|
+
active document titles, and readable missing-document/passage states.
|
|
79
|
+
- Resolve Markdown links relative to the source file, including nested home
|
|
80
|
+
files served at `/`. Ignore stale page responses after navigation and render
|
|
81
|
+
cached diagrams using the current theme.
|
|
82
|
+
- Add the first workspace shell: a collapsible file sidebar, file location,
|
|
83
|
+
responsive board columns, readable documents, and keyboard skip navigation.
|
|
84
|
+
Remember theme, density, and sidebar choices per folder and server origin;
|
|
85
|
+
code highlighting and diagrams follow the selected theme. Controls remain
|
|
86
|
+
usable when browser storage is unavailable.
|
|
87
|
+
|
|
88
|
+
- Add a step-by-step delivery plan for the vision, with 26 bounded implementation
|
|
89
|
+
steps, dependencies, acceptance evidence, and explicit design gates before
|
|
90
|
+
richer source formats, mutations, agent handoffs, and external integrations.
|
|
91
|
+
|
|
92
|
+
- Document the local Work Board north star, three-wave roadmap, experience design,
|
|
93
|
+
and interactive vision mockups with desktop and mobile captures. The package
|
|
94
|
+
README links to the proposed direction separately from its current behavior.
|
|
95
|
+
|
|
3
96
|
## 0.2.1 - 2026-10-04
|
|
4
97
|
|
|
5
98
|
### Changed
|
package/README.md
CHANGED
|
@@ -9,21 +9,45 @@ pnpm add --global @shivaedev/work-board
|
|
|
9
9
|
work-board ./project-notes --port 4747 --home plan.md
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
It listens on `127.0.0.1` only and answers only requests addressed to a
|
|
13
|
-
|
|
14
|
-
long ago it changed. Below the folder, files and folders starting with a dot
|
|
15
|
-
`node_modules` are never entered, and anything that is not
|
|
16
|
-
the folder itself may be a dot folder such as `.notes`.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
It listens on `127.0.0.1` only and answers only requests addressed to a loopback
|
|
13
|
+
host. Every `.md` file under the folder appears in the collapsible sidebar with
|
|
14
|
+
how long ago it changed. Below the folder, files and folders starting with a dot
|
|
15
|
+
and `node_modules` are never entered, and anything that is not Markdown is
|
|
16
|
+
skipped; the folder itself may be a dot folder such as `.notes`.
|
|
17
|
+
|
|
18
|
+
Directory symlinks explicitly include reference folders, including ones outside
|
|
19
|
+
the workspace. Their Markdown keeps the link's workspace-relative URLs. Broken
|
|
20
|
+
links, ancestor links and directory cycles are skipped. File symlinks stay inside
|
|
21
|
+
the workspace or the reference directory containing them. Unlisted paths and URL
|
|
22
|
+
traversal are never served. One long-lived process picks up new files and edits
|
|
23
|
+
without a restart.
|
|
24
|
+
|
|
25
|
+
For example, include the main checkout's documentation without copying it:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
ln -s /path/to/platform/docs ./project-notes/reference
|
|
29
|
+
work-board ./project-notes --home plan.md
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Read `/reference/framework/README.md` and follow its relative Markdown links.
|
|
33
|
+
Only link directories you intend to expose locally. Multiple aliases remain
|
|
34
|
+
separate source paths; if they repeat an explicit item ID, existing ambiguity
|
|
35
|
+
rules apply rather than choosing an identity winner.
|
|
20
36
|
|
|
21
37
|
Pages render GitHub Flavored Markdown on the server: tables, task lists,
|
|
22
38
|
footnotes, raw HTML (including `<details>` with markdown inside) and fenced code,
|
|
23
39
|
highlighted with Shiki's GitHub light and dark themes. Raw HTML is not
|
|
24
40
|
sanitized, so serve only folders you trust. Pages send a content security
|
|
25
41
|
policy that allows only the board's own scripts, and `Cache-Control: no-store`.
|
|
26
|
-
The page uses system fonts
|
|
42
|
+
The page uses system fonts. Theme can follow the system or stay light or dark.
|
|
43
|
+
Theme, compact/comfortable density, and sidebar visibility are remembered in
|
|
44
|
+
browser storage for this folder and server origin. When storage is unavailable,
|
|
45
|
+
controls still work for the current page and show a notice.
|
|
46
|
+
|
|
47
|
+
The file location appears above the content. Documents use a readable line
|
|
48
|
+
length; boards use a wider grid that stacks on narrow screens. The sidebar has
|
|
49
|
+
its own scroll area and starts collapsed on narrow screens unless a saved
|
|
50
|
+
preference says otherwise. A keyboard skip link moves directly to the content.
|
|
27
51
|
|
|
28
52
|
| Option | Default | Meaning |
|
|
29
53
|
| --- | --- | --- |
|
|
@@ -31,6 +55,164 @@ The page uses system fonts and follows the light or dark colour scheme.
|
|
|
31
55
|
| `--port` | `4747` | The port on `127.0.0.1`. `0` picks a free one. |
|
|
32
56
|
| `--home` | none | The file shown at `/` as a board, relative to the folder. The command stops with an error unless it leads to one of the markdown files listed from the folder. Without it, `/` shows the first file as a document. |
|
|
33
57
|
|
|
58
|
+
## Document navigation
|
|
59
|
+
|
|
60
|
+
Markdown headings have passage links and an **On this page** outline, including separate
|
|
61
|
+
anchors for duplicate headings. Use the heading's `#` link to copy a passage URL.
|
|
62
|
+
Generated anchors use the heading text and duplicate order; changing either can
|
|
63
|
+
change the anchor. Renaming a file changes its document URL. Authored HTML IDs
|
|
64
|
+
and footnote links remain intact. Richer files can declare stable work-item IDs.
|
|
65
|
+
|
|
66
|
+
Markdown links resolve from their source file, including a nested `--home` file
|
|
67
|
+
served at `/`. Links within the workspace open in place; modified clicks and
|
|
68
|
+
links targeting another window keep their normal browser behavior. The browser
|
|
69
|
+
title and active file tooltip follow the document's main heading.
|
|
70
|
+
|
|
71
|
+
Back and forward restore the previous scroll, selected text, and open details.
|
|
72
|
+
The client keeps up to 30 page snapshots and tab-scoped reading records; it
|
|
73
|
+
fetches the current file again on return so changes and deletions are visible.
|
|
74
|
+
A missing document explains what happened, and a missing passage shows a notice.
|
|
75
|
+
|
|
76
|
+
**Save favorite** pins a document to the sidebar. Recent documents are deduplicated
|
|
77
|
+
and limited to the last ten. Favorites and recents use browser storage scoped to
|
|
78
|
+
the folder and server origin. Deleted favorites remain visible with a missing
|
|
79
|
+
label. If storage is unavailable, favorites and recents work on the current page;
|
|
80
|
+
reading navigation still works in the open tab. Content and the outline remain
|
|
81
|
+
readable with JavaScript disabled.
|
|
82
|
+
|
|
83
|
+
## Workspace search
|
|
84
|
+
|
|
85
|
+
Use **Search** or Ctrl/Cmd+K to find document titles/paths, Markdown headings, and
|
|
86
|
+
passage text. Results identify their type and source file/line where known, include text snippets,
|
|
87
|
+
and open the corresponding heading when available. Matching is case-insensitive
|
|
88
|
+
with Unicode normalization; all query terms must occur in a block. Titles rank
|
|
89
|
+
before headings, then passages, with stable source order within each group.
|
|
90
|
+
Results are limited to 40 and report the full match count. This is deterministic
|
|
91
|
+
text search, without fuzzy matching or semantic inference.
|
|
92
|
+
|
|
93
|
+
Arrow keys choose a result while the search field is focused; Enter opens it.
|
|
94
|
+
Escape closes the dialog and restores focus. With an empty query, commands open
|
|
95
|
+
the workspace or change the existing sidebar, density, and theme controls.
|
|
96
|
+
|
|
97
|
+
The server keeps a rebuildable index in memory and invalidates it when the file
|
|
98
|
+
watcher changes. An open dialog refreshes on edits and reconnects; older requests
|
|
99
|
+
cannot replace a newer query. Hidden entries, `node_modules`, and escaping standalone file
|
|
100
|
+
symlinks are excluded; linked reference directories are included. Unreadable
|
|
101
|
+
files produce an incomplete-results notice.
|
|
102
|
+
All indexing and requests stay local. Search needs JavaScript; document reading
|
|
103
|
+
does not. Source-in-editor links await an agreed local editor mechanism.
|
|
104
|
+
|
|
105
|
+
## Optional work identity
|
|
106
|
+
|
|
107
|
+
A Markdown file can begin with YAML frontmatter declaring an explicit `id`,
|
|
108
|
+
`kind`, `status`, `owner`, `next_action`, relationships, criteria, board membership,
|
|
109
|
+
and evidence. Every field is optional; ordinary Markdown and heading boards need
|
|
110
|
+
no migration. [Source examples and shapes](./docs/vision/delivery/source-examples.md)
|
|
111
|
+
describe the convention. No section name becomes a status or workflow rule.
|
|
112
|
+
|
|
113
|
+
Work details show recorded fields, source locations, and the original header.
|
|
114
|
+
Malformed/unknown fields, duplicate IDs, and unresolved references remain visible
|
|
115
|
+
with diagnostics while prose stays readable. A unique ID has a shareable
|
|
116
|
+
`/_board/item/<id>/` link that survives file/heading renames; criterion links open
|
|
117
|
+
and focus their context. Search also finds explicit work fields and criteria.
|
|
118
|
+
An incomplete index cannot assert unique identity. The index rebuilds from files
|
|
119
|
+
without persistent storage; the UI never writes project content.
|
|
120
|
+
|
|
121
|
+
Evidence records show their source, criterion, checked revision, observed time,
|
|
122
|
+
method, and recorded outcome when provided. They are source claims, not
|
|
123
|
+
independently verified acceptance; missing provenance stays **Not recorded**.
|
|
124
|
+
|
|
125
|
+
## Work views
|
|
126
|
+
|
|
127
|
+
Open **Work** to read identified items as a board or table. A `kind: board` file with a
|
|
128
|
+
unique ID and an explicit `items` list defines a selectable view; the same item
|
|
129
|
+
can appear in several boards. Board definitions are excluded from All work.
|
|
130
|
+
Missing/ambiguous members and repeated membership are disclosed without choosing
|
|
131
|
+
a duplicate source or counting repeated items twice. Legacy heading cards remain
|
|
132
|
+
on their original pages and do not become inferred identified work.
|
|
133
|
+
|
|
134
|
+
Columns use the exact recorded status, including a **Status not recorded** column.
|
|
135
|
+
Filter by status, owner, or work text and sort by title, owner, or status. Missing
|
|
136
|
+
values differ from literal text and sort last. Cards open a source detail pane;
|
|
137
|
+
its Markdown links resolve relative to its file. The URL records the board,
|
|
138
|
+
filters, sort, and selected ID, so reload and Back/Forward restore that context.
|
|
139
|
+
A selected item outside the filters stays visible with a notice; deletion or
|
|
140
|
+
ambiguous identity is explained. Live changes retain applied filters, including
|
|
141
|
+
filters with no current matches. Compact density applies to these cards too.
|
|
142
|
+
Board and table use the same projection and selection; switching layouts keeps
|
|
143
|
+
that URL context. Table rows show kind, status, owner, and next action, with
|
|
144
|
+
missing fields disclosed and the same source detail pane. Narrow tables scroll
|
|
145
|
+
inside their own container; compact density reduces row/card spacing.
|
|
146
|
+
Native links and GET filters remain usable without JavaScript.
|
|
147
|
+
|
|
148
|
+
Save up to 10 named views in browser storage scoped to the workspace and server
|
|
149
|
+
origin. A view retains the applied board, filters, sort, and layout; item selection
|
|
150
|
+
stays in its shareable URL. Saving the same name updates it. At capacity, remove
|
|
151
|
+
one or update a name; views are never silently evicted. Remove one or clear all
|
|
152
|
+
from the view picker. Unsafe stored destinations are ignored. If storage is
|
|
153
|
+
unavailable, named views work for the current page only; source files are unchanged.
|
|
154
|
+
Saving requires JavaScript; board/table reading does not.
|
|
155
|
+
|
|
156
|
+
## Attention overview
|
|
157
|
+
|
|
158
|
+
Open **Overview** to read explicit decision, review and blocker requests grouped
|
|
159
|
+
by kind and ordered by source title, item ID and request ID. Each entry shows the
|
|
160
|
+
recorded reason, response labels, target links and origin file/line. Opening it
|
|
161
|
+
focuses its source request, beside ordinary Markdown reasoning and evidence.
|
|
162
|
+
Source edits refresh the queues; native links also work without JavaScript.
|
|
163
|
+
|
|
164
|
+
Add optional [attention records](./docs/vision/delivery/attention-examples.md) to
|
|
165
|
+
item frontmatter. Status, owner, next action, file activity and finished runs do
|
|
166
|
+
not imply requests. Closed requests remain readable/searchable without implying
|
|
167
|
+
an answer or acceptance. Duplicate IDs, invalid records and unresolved targets
|
|
168
|
+
stay outside the queues with source diagnostics. An incomplete index withholds
|
|
169
|
+
counts rather than presenting a quiet workspace. The viewer never writes source
|
|
170
|
+
files or interrupts/starts agents; recipients are authored local labels.
|
|
171
|
+
|
|
172
|
+
## Changes since seen
|
|
173
|
+
|
|
174
|
+
Open **Changes**, then **Start remembering changes** to record one explicit
|
|
175
|
+
browser-local workspace baseline. Live updates and opening the view never mark
|
|
176
|
+
changes seen. After review, **Mark current workspace seen** replaces it;
|
|
177
|
+
**Clear remembered history** removes it and stays off until you start again.
|
|
178
|
+
|
|
179
|
+
Compare additions, removals, explicit field changes, decision Markdown and
|
|
180
|
+
recorded evidence with current source links and escaped before/after source text.
|
|
181
|
+
Unique explicit item IDs can match moved files; ordinary renames show removed
|
|
182
|
+
and added paths. Duplicate IDs have no winner. Content comparison ignores mtime
|
|
183
|
+
and does not establish authorship, decision acceptance or verified evidence.
|
|
184
|
+
|
|
185
|
+
Each origin/workspace retains at most one 2 MiB serialized snapshot for 30 days.
|
|
186
|
+
Old/deleted source may remain until replacement, clearing or expiry; expired data
|
|
187
|
+
is removed on the next workspace visit or an open-page check. Invalid/unsupported
|
|
188
|
+
history, incomplete reads and oversized workspaces are explained without invented
|
|
189
|
+
removals or truncated history. Blocked storage allows a disclosed page-only
|
|
190
|
+
baseline. The local server validates and compares observations without retaining
|
|
191
|
+
history, modifying Markdown or contacting a cloud service. Without JavaScript,
|
|
192
|
+
Changes explains the limitation while source reading, Overview and Work remain usable.
|
|
193
|
+
|
|
194
|
+
## Reasoning and evidence context
|
|
195
|
+
|
|
196
|
+
Follow explicit relationships from a result to its plan and decision. Decisions
|
|
197
|
+
keep options, comparisons, and rationale in ordinary Markdown; no new decision
|
|
198
|
+
fields are required. **Referenced by** lists incoming relationships, board
|
|
199
|
+
membership, criterion claims, evidence-source links, and local Markdown hyperlinks,
|
|
200
|
+
including plain files without frontmatter. Relative/encoded paths and root home
|
|
201
|
+
links use the source file's location. Repeated prose links from one file count
|
|
202
|
+
once; code examples do not become links. External URLs are not local backlinks.
|
|
203
|
+
Incomplete workspaces disclose partial references and do not select ambiguous IDs.
|
|
204
|
+
|
|
205
|
+
Each uniquely identified criterion lists claims recorded across the readable
|
|
206
|
+
workspace, with links to their source records. Missing claims say that acceptance
|
|
207
|
+
is not established. A record shows origin file/line, checked revision, observed
|
|
208
|
+
time, method, and outcome; missing provenance stays **Not recorded**. Old recorded
|
|
209
|
+
revisions remain visible, and Work Board does not compare them to a current Git
|
|
210
|
+
revision or infer human acceptance. Missing local Markdown evidence sources remain
|
|
211
|
+
linked with a notice. Generated `recorded-evidence-<index>` anchors follow source
|
|
212
|
+
array order and may change after insertion/reordering; item and criterion IDs are
|
|
213
|
+
the explicit stable references. Backlinks/claim associations rebuild on file
|
|
214
|
+
changes and after restart, without writing an event history.
|
|
215
|
+
|
|
34
216
|
## Diagrams
|
|
35
217
|
|
|
36
218
|
A ` ```mermaid ` block is drawn in the browser. Mermaid loads from the installed
|
|
@@ -100,7 +282,11 @@ Finished work moves to the changelog.
|
|
|
100
282
|
|
|
101
283
|
## Live updates
|
|
102
284
|
|
|
103
|
-
The server watches the
|
|
285
|
+
The server watches the workspace and linked reference directories recursively.
|
|
286
|
+
Adding or retargeting a directory link rebuilds the watch and triggers catch-up.
|
|
287
|
+
Broken links are ignored; after restoring a target that was missing when the
|
|
288
|
+
watch was built, restart the server to include it. No reference file is written.
|
|
289
|
+
Changes settle for 100 ms, then
|
|
104
290
|
`/events` sends one server-sent event naming the markdown files that changed:
|
|
105
291
|
|
|
106
292
|
```text
|
|
@@ -139,7 +325,7 @@ non-loopback address when the server knows the address.
|
|
|
139
325
|
import { NodeServices } from "@effect/platform-node"
|
|
140
326
|
import { Layer } from "effect"
|
|
141
327
|
import { HttpRouter } from "effect/unstable/http"
|
|
142
|
-
import { boardLayer } from "@shivaedev/work-board"
|
|
328
|
+
import { boardLayer } from "@shivaedev/work-board/board.ts"
|
|
143
329
|
|
|
144
330
|
const board = HttpRouter.toWebHandler(
|
|
145
331
|
Layer.provide(boardLayer({ root: "./project-notes", home: "plan.md" }), NodeServices.layer),
|
|
@@ -156,3 +342,14 @@ skips the build. `pnpm dlx` and `pnpm add --global` need no setting.
|
|
|
156
342
|
allowBuilds:
|
|
157
343
|
msgpackr-extract: false
|
|
158
344
|
```
|
|
345
|
+
|
|
346
|
+
## Product vision
|
|
347
|
+
|
|
348
|
+
The [north star and visual direction](https://github.com/ShivaeDev/platform/tree/main/packages/work-board/docs/vision#readme)
|
|
349
|
+
describe the proposed local workspace for a person and their agents: stay
|
|
350
|
+
informed, give direction and coordinate, then collaborate. The
|
|
351
|
+
[roadmap](https://github.com/ShivaeDev/platform/blob/main/packages/work-board/docs/vision/roadmap.md)
|
|
352
|
+
sets the waves, acceptance criteria, and open design decisions.
|
|
353
|
+
[Experience designs and mockups](https://github.com/ShivaeDev/platform/blob/main/packages/work-board/docs/vision/experience.md)
|
|
354
|
+
illustrate the target with fictional data. These are future plans; the sections
|
|
355
|
+
above describe the package's current behavior.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overviewHtml.d.ts","sourceRoot":"","sources":["../../src/attention/overviewHtml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAYpD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA4BvD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { fileUrl } from "#files/url.ts";
|
|
2
|
+
import { escapeHtml } from "#page/escape.ts";
|
|
3
|
+
import { referenceHtml } from "#page/metadataLinks.ts";
|
|
4
|
+
import { attentionRequests } from "./requests.js";
|
|
5
|
+
function card(entry, snapshot) {
|
|
6
|
+
const { request } = entry;
|
|
7
|
+
return `<article class="attention-card" data-key="attention:${escapeHtml(entry.itemId)}:${escapeHtml(request.id)}" data-attention-item="${escapeHtml(entry.itemId)}" data-request="${escapeHtml(request.id)}">
|
|
8
|
+
<p class="work-kind">${escapeHtml(request.kind)} request</p><h3><a href="${escapeHtml(entry.href)}">${escapeHtml(entry.title)}</a></h3>
|
|
9
|
+
<p class="work-id">${escapeHtml(entry.itemId)} / ${escapeHtml(request.id)}</p><p class="attention-reason">${escapeHtml(request.reason)}</p>
|
|
10
|
+
<dl><dt>Response needed from</dt><dd>${request.responseFrom.map(escapeHtml).join(", ")}</dd><dt>Recorded to unblock</dt><dd>${request.unblocks.map((target) => referenceHtml(target, target, snapshot.model)).join(", ")}</dd></dl>
|
|
11
|
+
<a class="attention-source" href="${escapeHtml(fileUrl(entry.document.file))}#attention-request-${encodeURIComponent(request.id)}">Source: ${escapeHtml(entry.document.file)}:${entry.line}</a></article>`;
|
|
12
|
+
}
|
|
13
|
+
export function overviewHtml(snapshot) {
|
|
14
|
+
const projection = attentionRequests(snapshot);
|
|
15
|
+
const header = '<header class="work-head"><p class="work-eyebrow">WORKSPACE · OVERVIEW</p><h1>What needs a response?</h1><p>Choose a recorded request to read its context, reasoning and evidence.</p><a href="/_board/work?view=board">Browse all work</a></header>';
|
|
16
|
+
const issues = projection.issues.length > 0
|
|
17
|
+
? `<details class="view-issues" data-key="attention-issues"><summary>Unclassified requests and source issues (${projection.issues.length})</summary><p>Ambiguous or invalid requests stay outside the queues. Read their original sources.</p><ul>${projection.issues.map((issue) => `<li><a href="${escapeHtml(fileUrl(issue.file))}">${escapeHtml(issue.file)}:${issue.line}</a> — ${escapeHtml(issue.message)}</li>`).join("")}</ul></details>`
|
|
18
|
+
: "";
|
|
19
|
+
if (!projection.complete) {
|
|
20
|
+
return `${header}<p class="attention-incomplete" role="status">Workspace incomplete. Could not read ${snapshot.unavailable.map(escapeHtml).join(", ")}. Requests are not counted or classified until the index is complete.</p>${issues}`;
|
|
21
|
+
}
|
|
22
|
+
let summary = "All quiet — no explicit open requests recorded.";
|
|
23
|
+
if (projection.entries.length > 0) {
|
|
24
|
+
summary = `${projection.entries.length} validated open request${projection.entries.length === 1 ? "" : "s"}`;
|
|
25
|
+
}
|
|
26
|
+
else if (projection.issues.length > 0) {
|
|
27
|
+
summary = "No validated open requests. Check unresolved source issues before treating this workspace as quiet.";
|
|
28
|
+
}
|
|
29
|
+
const groups = [
|
|
30
|
+
{ empty: "No open decision requests.", kind: "decision", title: "Decisions" },
|
|
31
|
+
{ empty: "No open review requests.", kind: "review", title: "Reviews" },
|
|
32
|
+
{ empty: "No open blocker requests.", kind: "blocker", title: "Blockers" },
|
|
33
|
+
]
|
|
34
|
+
.map((group) => {
|
|
35
|
+
const entries = projection.entries.filter((entry) => entry.request.kind === group.kind);
|
|
36
|
+
return `<section class="attention-group" aria-labelledby="attention-${group.kind}"><h2 id="attention-${group.kind}" tabindex="-1">${group.title}<span>${entries.length}</span></h2>${entries.length > 0 ? entries.map((entry) => card(entry, snapshot)).join("") : `<p class="empty">${group.empty}</p>`}</section>`;
|
|
37
|
+
})
|
|
38
|
+
.join("");
|
|
39
|
+
return `${header}<p class="attention-total" role="status">${summary}</p><p class="attention-order">Decisions, reviews, then blockers. Within each group: source title, item ID, request ID. Recipients are recorded labels.</p>${issues}<div class="attention-groups">${groups}</div><p class="attention-footnote">These are authored requests. Closing one does not verify evidence or record an answer. Status, owner, file activity and finished runs do not create requests.</p>`;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=overviewHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overviewHtml.js","sourceRoot":"","sources":["../../src/attention/overviewHtml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MetadataDocument } from "#metadata/model.ts";
|
|
2
|
+
import type { Metadata } from "#metadata/schema.ts";
|
|
3
|
+
import type { Snapshot } from "#search/snapshot.ts";
|
|
4
|
+
export type Request = NonNullable<Metadata["attention"]>[number];
|
|
5
|
+
export interface AttentionEntry {
|
|
6
|
+
readonly document: MetadataDocument;
|
|
7
|
+
readonly href: string;
|
|
8
|
+
readonly itemId: string;
|
|
9
|
+
readonly line: number;
|
|
10
|
+
readonly request: Request;
|
|
11
|
+
readonly title: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SourceIssue {
|
|
14
|
+
readonly file: string;
|
|
15
|
+
readonly line: number;
|
|
16
|
+
readonly message: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function attentionRequests(snapshot: Snapshot): {
|
|
19
|
+
complete: boolean;
|
|
20
|
+
entries: AttentionEntry[];
|
|
21
|
+
issues: SourceIssue[];
|
|
22
|
+
};
|
|
23
|
+
export declare function attentionSource(document: MetadataDocument, index: number): string;
|
|
24
|
+
//# sourceMappingURL=requests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../src/attention/requests.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AACD,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AA8BD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;;;;EASnD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { identityUrl, referenceTarget } from "#metadata/links.ts";
|
|
2
|
+
function requestsFor(document, snapshot, title) {
|
|
3
|
+
const { fields, lines } = document.parsed;
|
|
4
|
+
const itemId = fields.id;
|
|
5
|
+
if (!itemId || snapshot.unavailable.length > 0 || snapshot.model.ids.get(itemId)?.length !== 1) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
const requests = fields.attention ?? [];
|
|
9
|
+
return requests.flatMap((request, index) => {
|
|
10
|
+
if (request.state !== "open"
|
|
11
|
+
|| requests.filter((other) => other.id === request.id).length !== 1
|
|
12
|
+
|| request.unblocks.some((target) => !referenceTarget(target, snapshot.model))) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
document,
|
|
18
|
+
href: `${identityUrl(itemId)}#attention-request-${encodeURIComponent(request.id)}`,
|
|
19
|
+
itemId,
|
|
20
|
+
line: lines[`attention.${index}`] ?? lines.attention ?? 2,
|
|
21
|
+
request,
|
|
22
|
+
title,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export function attentionRequests(snapshot) {
|
|
28
|
+
const titles = new Map(snapshot.entries.filter((entry) => entry.kind === "document").map((entry) => [entry.file, entry.title]));
|
|
29
|
+
const issues = snapshot.documents.flatMap((source) => (snapshot.model.diagnostics.get(source.file) ?? source.parsed.diagnostics).map((problem) => ({ ...problem, file: source.file })));
|
|
30
|
+
const entries = snapshot.documents.flatMap((source) => requestsFor(source, snapshot, titles.get(source.file) ?? source.file));
|
|
31
|
+
const collator = new Intl.Collator("en", { numeric: true, sensitivity: "base" });
|
|
32
|
+
entries.sort((a, b) => collator.compare(a.title, b.title) || a.itemId.localeCompare(b.itemId) || a.request.id.localeCompare(b.request.id));
|
|
33
|
+
return { complete: snapshot.unavailable.length === 0, entries, issues };
|
|
34
|
+
}
|
|
35
|
+
export function attentionSource(document, index) {
|
|
36
|
+
const requests = document.parsed.fields.attention ?? [];
|
|
37
|
+
const id = requests[index]?.id;
|
|
38
|
+
return id && requests.filter((request) => request.id === id).length === 1 ? `attention-request-${id}` : `attention-record-${index}`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=requests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/attention/requests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/attention/style.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,IAAI,MAAM,CAQvC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function attentionStyle() {
|
|
2
|
+
return `
|
|
3
|
+
.attention-total{margin:24px 0 8px;font-weight:600}.attention-order,.attention-footnote{font-size:13px;color:var(--muted);margin:0 0 24px;overflow-wrap:anywhere}
|
|
4
|
+
.attention-groups{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;align-items:start}.attention-group{min-width:0}.attention-group>h2{display:flex;justify-content:space-between;gap:12px;font-size:16px;margin:0 0 16px}.attention-group>h2>span{font:12px var(--mono);color:var(--muted)}
|
|
5
|
+
.attention-card{border:1px solid var(--border);border-radius:10px;padding:var(--card-space);background:var(--card);margin:0 0 16px;overflow-wrap:anywhere}.attention-card h3{font-size:1rem;margin:6px 0}.attention-card h3 a{text-decoration:none}.attention-card dl{font-size:13px;margin:16px 0}.attention-card dt{color:var(--muted);margin-top:12px}.attention-card dd{margin:4px 0}.attention-source{font-size:12px}.attention-reason{font-size:14px;margin:0}.attention-footnote{margin-top:24px}.attention-incomplete{padding:16px;border:1px solid var(--danger);border-radius:8px;margin:24px 0;overflow-wrap:anywhere}
|
|
6
|
+
[id^="attention-request-"],[id^="attention-record-"]{scroll-margin-top:20px}
|
|
7
|
+
@media(max-width:1100px){.attention-groups{grid-template-columns:minmax(0,1fr)}}
|
|
8
|
+
`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/attention/style.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc;IAC7B,OAAO;;;;;;CAMP,CAAC;AACF,CAAC"}
|
package/dist/board.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvF,OAAO,EAAE,UAAU,EAAmD,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAyB,KAAK,cAAc,EAA4B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvF,OAAO,EAAE,UAAU,EAAmD,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAyB,KAAK,cAAc,EAA4B,MAAM,iBAAiB,CAAC;AAUvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAoCD,KAAK,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,CAAC,aAAa,GAAG,YAAY,CAAC;AAC5F,KAAK,aAAa,GAAG,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;AAE1I,eAAO,MAAM,UAAU,GAAI,SAAS,YAAY,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CACxC,CAAC"}
|
package/dist/board.js
CHANGED
|
@@ -4,22 +4,35 @@ import { watchChanges } from "#files/changes.ts";
|
|
|
4
4
|
import { homeIn } from "#files/home.ts";
|
|
5
5
|
import { ASSETS, MERMAID_ROUTE, mermaidFile, mermaidRoot } from "#http/assets.ts";
|
|
6
6
|
import { events } from "#http/events.ts";
|
|
7
|
+
import { changesPage, history } from "#http/history.ts";
|
|
8
|
+
import { identity } from "#http/identity.ts";
|
|
7
9
|
import { loopbackOnly } from "#http/loopback.ts";
|
|
10
|
+
import { overview } from "#http/overview.ts";
|
|
8
11
|
import { page } from "#http/page.ts";
|
|
9
12
|
import { respond } from "#http/respond.ts";
|
|
13
|
+
import { search } from "#http/search.ts";
|
|
14
|
+
import { work } from "#http/work.ts";
|
|
10
15
|
import { Highlighter } from "#render/highlighter.ts";
|
|
16
|
+
import { searchSnapshot } from "#search/snapshot.ts";
|
|
11
17
|
const routes = (options) => HttpRouter.use((router) => Effect.gen(function* () {
|
|
12
18
|
const home = yield* homeIn(options.root, options.home);
|
|
13
19
|
const mermaid = yield* mermaidRoot();
|
|
14
20
|
const changes = yield* watchChanges(options.root);
|
|
15
21
|
const context = yield* Effect.context();
|
|
16
|
-
const serve = (route, handler) => router.add(
|
|
22
|
+
const serve = (route, handler, method = "GET") => router.add(method, route, loopbackOnly((request) => Effect.provideContext(handler(request), context)));
|
|
17
23
|
yield* serve("/events", events(changes));
|
|
24
|
+
const index = yield* searchSnapshot(options.root, home, changes);
|
|
25
|
+
yield* serve("/_board/search", search(index));
|
|
26
|
+
yield* serve("/_board/work", work(index, changes, home));
|
|
27
|
+
yield* serve("/_board/overview", overview(index, changes, home));
|
|
28
|
+
yield* serve("/_board/changes", changesPage(changes, home));
|
|
29
|
+
yield* serve("/_board/history", history(index), "POST");
|
|
18
30
|
for (const [route, body, contentType] of ASSETS) {
|
|
19
31
|
yield* serve(route, () => Effect.succeed(respond(body, contentType)));
|
|
20
32
|
}
|
|
21
33
|
yield* serve(MERMAID_ROUTE, mermaidFile(mermaid));
|
|
22
|
-
const pages = page({ home, root: options.root }, changes);
|
|
34
|
+
const pages = page({ home, root: options.root }, changes, index);
|
|
35
|
+
yield* serve("/_board/item/*", identity(index, pages, changes, home));
|
|
23
36
|
yield* serve("/", pages);
|
|
24
37
|
yield* serve("/*", pages);
|
|
25
38
|
}));
|
package/dist/board.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmB,KAAK,EAAiC,MAAM,QAAQ,CAAC;AACvF,OAAO,EAAE,UAAU,EAAmD,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAoB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAuB,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import { NodeRuntime, NodeServices } from "@effect/platform-node";
|
|
|
3
3
|
import { Effect, Layer, Option, Path } from "effect";
|
|
4
4
|
import { Argument, Command, Flag } from "effect/unstable/cli";
|
|
5
5
|
import { HOST, serveBoard } from "./serve.js";
|
|
6
|
-
const VERSION = "0.
|
|
6
|
+
const VERSION = "0.4.0";
|
|
7
7
|
const serve = Effect.fn("WorkBoard.serve")(function* (input) {
|
|
8
8
|
const path = yield* Path.Path;
|
|
9
9
|
return yield* Layer.launch(serveBoard({ home: Option.getOrUndefined(input.home), port: input.port, root: path.resolve(input.dir) }));
|
package/dist/files/changes.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface Changes {
|
|
|
11
11
|
readonly events: PubSub.PubSub<Change>;
|
|
12
12
|
readonly files: Effect.Effect<readonly MarkdownFile[], PlatformError.PlatformError>;
|
|
13
13
|
readonly realRoot: string;
|
|
14
|
+
readonly revision: Effect.Effect<number>;
|
|
14
15
|
readonly watching: Ref.Ref<boolean>;
|
|
15
16
|
}
|
|
16
17
|
export declare const watchChanges: (root: string) => Effect.Effect<Changes, PlatformError.PlatformError, FileSystem.FileSystem | Path.Path | import("effect/Scope").Scope>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/files/changes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/files/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,UAAU,EAAU,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,GAAG,EAAY,MAAM,QAAQ,CAAC;AAC/G,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAG5D,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjJ,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACpF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;CACpC;AAUD,eAAO,MAAM,YAAY,yIAqCvB,CAAC"}
|