@shivaedev/work-board 0.16.0 → 0.17.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 (197) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +4 -4
  3. package/assets/react.js +52 -39
  4. package/dist/browser/views/remaining.d.ts +0 -240
  5. package/dist/browser/views/remaining.d.ts.map +1 -1
  6. package/dist/browser/views/remaining.js +0 -2
  7. package/dist/browser/views/remaining.js.map +1 -1
  8. package/dist/client/react/DocumentAttention.d.ts.map +1 -1
  9. package/dist/client/react/DocumentAttention.js +2 -3
  10. package/dist/client/react/DocumentAttention.js.map +1 -1
  11. package/dist/client/react/ProjectionFrame.js +1 -1
  12. package/dist/client/react/ProjectionFrame.js.map +1 -1
  13. package/dist/client/react/RemainingMain.d.ts.map +1 -1
  14. package/dist/client/react/RemainingMain.js +0 -3
  15. package/dist/client/react/RemainingMain.js.map +1 -1
  16. package/dist/client/react/ResultPage.d.ts.map +1 -1
  17. package/dist/client/react/ResultPage.js +2 -1
  18. package/dist/client/react/ResultPage.js.map +1 -1
  19. package/dist/client/react/ShellApi.d.ts +0 -1
  20. package/dist/client/react/ShellApi.d.ts.map +1 -1
  21. package/dist/client/react/TodayOptions.d.ts.map +1 -1
  22. package/dist/client/react/TodayOptions.js +2 -2
  23. package/dist/client/react/TodayOptions.js.map +1 -1
  24. package/dist/client/react/entry.js +1 -1
  25. package/dist/client/react/entry.js.map +1 -1
  26. package/dist/client/react/loadBoardPage.d.ts.map +1 -1
  27. package/dist/client/react/loadBoardPage.js +5 -13
  28. package/dist/client/react/loadBoardPage.js.map +1 -1
  29. package/dist/client/react/loadRemaining.d.ts +109 -349
  30. package/dist/client/react/loadRemaining.d.ts.map +1 -1
  31. package/dist/client/react/loadRemaining.js +0 -2
  32. package/dist/client/react/loadRemaining.js.map +1 -1
  33. package/dist/client/react/pageQueries.d.ts.map +1 -1
  34. package/dist/client/react/pageQueries.js +0 -3
  35. package/dist/client/react/pageQueries.js.map +1 -1
  36. package/dist/client/react/readerLink.js +1 -1
  37. package/dist/client/react/readerLink.js.map +1 -1
  38. package/dist/client/react/remainingRoute.d.ts +1 -1
  39. package/dist/client/react/remainingRoute.d.ts.map +1 -1
  40. package/dist/client/react/remainingRoute.js +0 -2
  41. package/dist/client/react/remainingRoute.js.map +1 -1
  42. package/dist/responses/url.js +1 -1
  43. package/dist/responses/url.js.map +1 -1
  44. package/dist/rpc/PageUrl.d.ts.map +1 -1
  45. package/dist/rpc/PageUrl.js +0 -1
  46. package/dist/rpc/PageUrl.js.map +1 -1
  47. package/dist/rpc/contract.d.ts +2203 -2926
  48. package/dist/rpc/contract.d.ts.map +1 -1
  49. package/dist/rpc/contract.js +6 -9
  50. package/dist/rpc/contract.js.map +1 -1
  51. package/dist/rpc/responseContract.d.ts +56 -56
  52. package/dist/server/{responses/service.d.ts → Responses.d.ts} +9 -21
  53. package/dist/server/Responses.d.ts.map +1 -0
  54. package/dist/server/{responses/service.js → Responses.js} +22 -22
  55. package/dist/server/Responses.js.map +1 -0
  56. package/dist/server/attention/inbox.d.ts +2 -0
  57. package/dist/server/attention/inbox.d.ts.map +1 -1
  58. package/dist/server/attention/inbox.js +1 -0
  59. package/dist/server/attention/inbox.js.map +1 -1
  60. package/dist/server/attention/projection.js +1 -1
  61. package/dist/server/attention/projection.js.map +1 -1
  62. package/dist/server/attention/requestInbox.d.ts +3 -0
  63. package/dist/server/attention/requestInbox.d.ts.map +1 -1
  64. package/dist/server/attention/requestInbox.js +1 -0
  65. package/dist/server/attention/requestInbox.js.map +1 -1
  66. package/dist/server/boardRuntime.d.ts +2 -2
  67. package/dist/server/boardRuntime.d.ts.map +1 -1
  68. package/dist/server/boardRuntime.js +12 -16
  69. package/dist/server/boardRuntime.js.map +1 -1
  70. package/dist/server/boardServices.d.ts +3 -4
  71. package/dist/server/boardServices.d.ts.map +1 -1
  72. package/dist/server/boardServices.js +5 -4
  73. package/dist/server/boardServices.js.map +1 -1
  74. package/dist/server/boardSocket.d.ts +1 -1
  75. package/dist/server/boardSocket.d.ts.map +1 -1
  76. package/dist/server/document/read.d.ts +4 -10
  77. package/dist/server/document/read.d.ts.map +1 -1
  78. package/dist/server/document/read.js +5 -5
  79. package/dist/server/document/read.js.map +1 -1
  80. package/dist/server/document/requests.d.ts.map +1 -1
  81. package/dist/server/document/requests.js +1 -2
  82. package/dist/server/document/requests.js.map +1 -1
  83. package/dist/server/handoffs/Service.d.ts +1 -2
  84. package/dist/server/handoffs/Service.d.ts.map +1 -1
  85. package/dist/server/handoffs/Service.js +14 -13
  86. package/dist/server/handoffs/Service.js.map +1 -1
  87. package/dist/server/http/assets.d.ts +0 -3
  88. package/dist/server/http/assets.d.ts.map +1 -1
  89. package/dist/server/http/assets.js +1 -7
  90. package/dist/server/http/assets.js.map +1 -1
  91. package/dist/server/http/boardRoutes.d.ts.map +1 -1
  92. package/dist/server/http/boardRoutes.js +3 -3
  93. package/dist/server/http/boardRoutes.js.map +1 -1
  94. package/dist/server/integration/responses.d.ts +207 -4
  95. package/dist/server/integration/responses.d.ts.map +1 -1
  96. package/dist/server/integration/responses.js +4 -2
  97. package/dist/server/integration/responses.js.map +1 -1
  98. package/dist/server/mcp/client.d.ts +2 -242
  99. package/dist/server/mcp/client.d.ts.map +1 -1
  100. package/dist/server/mcp/queries.d.ts +24 -744
  101. package/dist/server/mcp/queries.d.ts.map +1 -1
  102. package/dist/server/mcp/queries.js +3 -3
  103. package/dist/server/mcp/queries.js.map +1 -1
  104. package/dist/server/packageInfo.d.ts +1 -1
  105. package/dist/server/packageInfo.js +1 -1
  106. package/dist/server/responses/readingActions.d.ts +10 -1
  107. package/dist/server/responses/readingActions.d.ts.map +1 -1
  108. package/dist/server/responses/readingActions.js +2 -4
  109. package/dist/server/responses/readingActions.js.map +1 -1
  110. package/dist/server/responses/registerQuestion.d.ts +2 -2
  111. package/dist/server/responses/registerQuestion.d.ts.map +1 -1
  112. package/dist/server/responses/registerQuestion.js +3 -3
  113. package/dist/server/responses/registerQuestion.js.map +1 -1
  114. package/dist/server/responses/retry.d.ts +2 -2
  115. package/dist/server/responses/retry.d.ts.map +1 -1
  116. package/dist/server/responses/retry.js +1 -1
  117. package/dist/server/responses/retry.js.map +1 -1
  118. package/dist/server/rpc/HandlerOptions.d.ts +0 -8
  119. package/dist/server/rpc/HandlerOptions.d.ts.map +1 -1
  120. package/dist/server/rpc/handlers.d.ts +1 -1
  121. package/dist/server/rpc/handlers.d.ts.map +1 -1
  122. package/dist/server/rpc/handlers.js +14 -13
  123. package/dist/server/rpc/handlers.js.map +1 -1
  124. package/dist/server/rpc/hints.d.ts +3 -5
  125. package/dist/server/rpc/hints.d.ts.map +1 -1
  126. package/dist/server/rpc/hints.js +5 -1
  127. package/dist/server/rpc/hints.js.map +1 -1
  128. package/dist/server/views/fleetItems.d.ts +2 -2
  129. package/dist/server/views/fleetItems.d.ts.map +1 -1
  130. package/dist/server/views/fleetItems.js +8 -3
  131. package/dist/server/views/fleetItems.js.map +1 -1
  132. package/dist/server/views/projectionQueries.d.ts +5 -9
  133. package/dist/server/views/projectionQueries.d.ts.map +1 -1
  134. package/dist/server/views/projectionQueries.js +6 -6
  135. package/dist/server/views/projectionQueries.js.map +1 -1
  136. package/dist/server/views/remainingQueries.d.ts +4 -252
  137. package/dist/server/views/remainingQueries.d.ts.map +1 -1
  138. package/dist/server/views/remainingQueries.js +11 -19
  139. package/dist/server/views/remainingQueries.js.map +1 -1
  140. package/dist/server/workspace.d.ts +222 -0
  141. package/dist/server/workspace.d.ts.map +1 -0
  142. package/dist/server/workspace.js +25 -0
  143. package/dist/server/workspace.js.map +1 -0
  144. package/package.json +3 -3
  145. package/src/browser/views/remaining.ts +0 -3
  146. package/src/client/react/DocumentAttention.tsx +2 -3
  147. package/src/client/react/ProjectionFrame.tsx +1 -1
  148. package/src/client/react/RemainingMain.tsx +0 -10
  149. package/src/client/react/ResultPage.tsx +2 -2
  150. package/src/client/react/ShellApi.ts +0 -1
  151. package/src/client/react/TodayOptions.tsx +2 -2
  152. package/src/client/react/entry.tsx +1 -1
  153. package/src/client/react/loadBoardPage.ts +5 -14
  154. package/src/client/react/loadRemaining.ts +0 -2
  155. package/src/client/react/pageQueries.ts +0 -3
  156. package/src/client/react/readerLink.ts +1 -1
  157. package/src/client/react/remainingRoute.ts +0 -2
  158. package/src/responses/url.ts +1 -1
  159. package/src/rpc/PageUrl.ts +0 -1
  160. package/src/rpc/contract.ts +6 -9
  161. package/src/server/{responses/service.ts → Responses.ts} +21 -29
  162. package/src/server/attention/inbox.ts +1 -0
  163. package/src/server/attention/projection.ts +1 -1
  164. package/src/server/attention/requestInbox.ts +1 -0
  165. package/src/server/boardRuntime.ts +20 -25
  166. package/src/server/boardServices.ts +7 -7
  167. package/src/server/document/read.ts +6 -14
  168. package/src/server/document/requests.ts +1 -2
  169. package/src/server/handoffs/Service.ts +16 -19
  170. package/src/server/http/assets.ts +1 -7
  171. package/src/server/http/boardRoutes.ts +3 -3
  172. package/src/server/integration/responses.ts +5 -3
  173. package/src/server/mcp/queries.ts +3 -3
  174. package/src/server/packageInfo.ts +1 -1
  175. package/src/server/responses/readingActions.ts +3 -3
  176. package/src/server/responses/registerQuestion.ts +5 -5
  177. package/src/server/responses/retry.ts +3 -3
  178. package/src/server/rpc/HandlerOptions.ts +0 -8
  179. package/src/server/rpc/handlers.ts +17 -15
  180. package/src/server/rpc/hints.ts +6 -3
  181. package/src/server/views/fleetItems.ts +8 -4
  182. package/src/server/views/projectionQueries.ts +6 -7
  183. package/src/server/views/remainingQueries.ts +11 -31
  184. package/src/server/workspace.ts +41 -0
  185. package/assets/native.js +0 -37
  186. package/dist/client/entry.d.ts +0 -3
  187. package/dist/client/entry.d.ts.map +0 -1
  188. package/dist/client/entry.js +0 -3
  189. package/dist/client/entry.js.map +0 -1
  190. package/dist/client/react/RespondPage.d.ts +0 -5
  191. package/dist/client/react/RespondPage.d.ts.map +0 -1
  192. package/dist/client/react/RespondPage.js +0 -5
  193. package/dist/client/react/RespondPage.js.map +0 -1
  194. package/dist/server/responses/service.d.ts.map +0 -1
  195. package/dist/server/responses/service.js.map +0 -1
  196. package/src/client/entry.ts +0 -3
  197. package/src/client/react/RespondPage.tsx +0 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.0 - 2026-10-18
4
+
5
+ ### Changed
6
+
7
+ - Work Board serves its browser client in `/_board/react.js`; `/_board/native.js` is no longer served.
8
+
9
+ ### Fixed
10
+
11
+ - Answer links open the item’s answer card directly. Existing `/_board/respond` links retain the server redirect.
12
+ - Fleet items declares `InternalServerError` for unexpected index defects instead of returning an unavailable projection. Typed index failures still report unavailable documents.
13
+
14
+ ### Breaking
15
+
16
+ - Remove the `work-board.respond` query from `workContract` / `workRpcs` and the browser client API, and remove `RespondProjection`. Read the item document or use the response `question` query instead.
17
+ - Remove the repository-only `NATIVE_ROUTE`, `nativeAsset` and `checkNativeAsset` exports from `http/assets.ts`.
18
+ - Replace `responses.ResponseConfig` and the `ResponseOptions` type in `integration/responses.ts` with `responses.Workspace`, `responses.WorkspaceConfig` and `WorkspaceOptions`. Provide `Workspace.layer` to `Responses.layer`, configured with the root, watcher, typed index, optional home and explicit `writable` choice.
19
+ - Workspace-backed server helpers now require the declared workspace service: `boardServices` composes services and handlers, `handlers` accepts only transport options, `projectionQueries` and `remainingQueries` are Effects that read the workspace, `hints()` reads it directly, and `fleetItems` accepts only the daemon port. `readDocument` takes workspace settings and a snapshot instead of `DocumentOptions`; `ResponseConfig` and `ResponseOptions` are removed; import `Responses` through `integration/responses.ts` instead of the removed `responses/service.ts` module. `readingActions` accepts the question locator directly.
20
+
3
21
  ## 0.16.0 - 2026-10-18
4
22
 
5
23
  ### Breaking
package/README.md CHANGED
@@ -476,7 +476,7 @@ RPC rejections use Platform taxonomy classes: `Forbidden` for disabled writes, `
476
476
 
477
477
  Read `client.api.document.run({ url: "/notes.md" })` to get Markdown body source, metadata and diagnostics, resolved links and references, file information, resolved question actions and request previews with response history. Identity URLs and `/` use the same document query. Missing and duplicate identities reject with `NotFound` and `Conflict`; incomplete history stays explicitly unavailable. The query sends no rendered HTML or syntax tree.
478
478
 
479
- Pass that data as the `document` prop of `DocumentView` from `@shivaedev/work-board/browser/document/View.ts`. The view uses the Board's GFM, directive, heading and footnote plugins with raw HTML, browser-side Shiki and a Mermaid code override. `idPrefix` scopes footnotes when a host displays several documents. The Board shell is a React app with TanStack Router. Its route loaders read document and projection contract queries through `effect-react` in the shell's native registry; preloading and navigation share those reads. Document and item pages mount `DocumentView` from the typed document query; Today, Goals, Now, Library and System render typed projection queries in React, as do Workspace notes, Start, Respond, Handoff and Result. Their direct URLs load the shell and require JavaScript. The HTML page RPC is removed. The optional `reading` data supplies source context, backlinks, criterion claims and managed receipts; request `prompts` supply answer controls. Hosts can mount `DocumentView` directly from source-query data, or pass `context` and `introduction` React nodes for its document layout.
479
+ Pass that data as the `document` prop of `DocumentView` from `@shivaedev/work-board/browser/document/View.ts`. The view uses the Board's GFM, directive, heading and footnote plugins with raw HTML, browser-side Shiki and a Mermaid code override. `idPrefix` scopes footnotes when a host displays several documents. The Board shell is a React app with TanStack Router. Its route loaders read document and projection contract queries through `effect-react` in the shell's native registry; preloading and navigation share those reads. Document and item pages mount `DocumentView` from the typed document query; Today, Goals, Now, Library and System render typed projection queries in React, as do Workspace notes, Start, Handoff and Result. Their direct URLs load the shell and require JavaScript. The HTML page RPC is removed. The optional `reading` data supplies source context, backlinks, criterion claims and managed receipts; request `prompts` supply answer controls. Hosts can mount `DocumentView` directly from source-query data, or pass `context` and `introduction` React nodes for its document layout.
480
480
 
481
481
  #### Headless addon API
482
482
 
@@ -486,7 +486,7 @@ Work Fleet uses five server entry points and one portable metadata type entry po
486
486
  | --- | --- |
487
487
  | `integration/board.ts` | `board`: `metadataParse`, `metadataModel`, `listMarkdown`, `markdownPath`, `watchChanges`, `searchSnapshot`; exported types `Diagnostic`, `ParsedMetadata`, `MetadataDocument`, `MetadataModel`, `MarkdownFile`, `Changes`, `Snapshot` |
488
488
  | `integration/metadata.ts` | Portable types `Diagnostic`, `ParsedMetadata`, `MetadataDocument`, `MetadataModel`, also available through `integration/board.ts` |
489
- | `integration/responses.ts` | `responses`: `Responses`, `ResponseConfig`, `readResponses`, `currentResponses`, `makeResponse`, `publish`, `revisionOf`, `questionId`, `questionFrom`, `questionMarkdown`, `responseMarkdown`, `DraftInput`, `Question`, `Reading`, `RecordedResponse`; exported types `DraftInput`, `Question`, `Reading`, `RecordedResponse`, `ResponseOptions` |
489
+ | `integration/responses.ts` | `responses`: `Responses`, `Workspace`, `WorkspaceConfig`, `readResponses`, `currentResponses`, `makeResponse`, `publish`, `revisionOf`, `questionId`, `questionFrom`, `questionMarkdown`, `responseMarkdown`, `DraftInput`, `Question`, `Reading`, `RecordedResponse`; exported types `DraftInput`, `Question`, `Reading`, `RecordedResponse`, `WorkspaceOptions` |
490
490
  | `integration/attention.ts` | `attention`: `RequestReceipt`, `managedRequestReceipt`, `projection(snapshot)`; exported types `RequestReceipt`, `AttentionProjection` |
491
491
  | `integration/diagnostics.ts` | `diagnostics`: `FleetHealth`, `CapacityRejection`, `FLEET_HEALTH_NAME`, `fleetHealth`, `DiagnosticsContract`, `DAEMON_PORT`, `DAEMON_RPC_PATH`, `DiagnosticsSources`, `SourceFailure`, `diagnostics`, `codexRateLimits`, `codexLimits`, `githubLimits`; exported types `FleetHealth`, `CapacityRejection`, `SourceFailure` |
492
492
  | `integration/publication.ts` | `publication`: `directoryPath`, `validateDirectory` for addons that publish their own records through open directory handles |
@@ -503,7 +503,7 @@ const read = Effect.scoped(Effect.gen(function* () {
503
503
  })).pipe(Effect.provide(NodeServices.layer));
504
504
  ```
505
505
 
506
- The snapshot retains parsed documents, identity diagnostics and unavailable paths. Compose `responses.Responses.layer` with `responses.ResponseConfig` containing that index, the same watcher, workspace root and explicit `enabled` write choice. Use the service to register reviewed questions and record answers; `responses.publish` writes an immutable record under `responses/` (or `handoffs/` when selected), and the record helpers preserve exact reviewed bytes and source path. Agent-owned items remain ordinary Markdown edits. `attention.projection(snapshot)` returns the typed attention projection: `you`, `agents`, `resolved`, `parked`, `issues` and `complete`, with `items` retaining the same rows as `you` for existing clients. `attention.managedRequestReceipt` qualifies an acknowledgement against those records; it does not confer execution or acceptance authority. The publication helpers retain the filesystem limits below.
506
+ The snapshot retains parsed documents, identity diagnostics and unavailable paths. Provide `responses.Workspace.layer` to `responses.Responses.layer`, then supply `responses.WorkspaceConfig` with that typed index, the same watcher, workspace `root`, optional `home` and explicit `writable` choice. The workspace service exposes `settings()` (root, real root, changes, home and write choice), `index()` (with `PlatformError` failures) and `document(url)`; the Board runtime and its in-memory harness compose the same service and RPC Layer. Use the service to register reviewed questions and record answers; `responses.publish` writes an immutable record under `responses/` (or `handoffs/` when selected), and the record helpers preserve exact reviewed bytes and source path. Agent-owned items remain ordinary Markdown edits. `attention.projection(snapshot)` returns the typed attention projection: `you`, `agents`, `resolved`, `parked`, `issues` and `complete`, with `items` retaining the same rows as `you` for existing clients. `attention.managedRequestReceipt` qualifies an acknowledgement against those records; it does not confer execution or acceptance authority. The publication helpers retain the filesystem limits below.
507
507
 
508
508
  Fleet's production imports are fenced to these six entry points by `pnpm lint`; its test fixtures may still use Board modules directly. The packed-package consumer exercises the headless read, response and receipt path through these exports.
509
509
 
@@ -545,7 +545,7 @@ Fleet unavailability stays explicit in results. These tools read state without c
545
545
  | `--port <number>` | Select the shared server's port; default `4747` |
546
546
  | `--url <origin>` | Select an HTTP loopback origin instead of `--port` |
547
547
 
548
- The browser uses local NDJSON RPC at `POST /_board/rpc`. Ordinary document GETs, `/_board/start`, `/_board/goals`, `/_board/work`, `/_board/library`, `/_board/system`, `/_board/respond`, `/_board/handoff`, `/_board/result`, and identity links load the React shell. Search and live subscriptions use the same RPC route. There is no automatic workspace discovery or server launch in agent commands.
548
+ The browser uses local NDJSON RPC at `POST /_board/rpc`. Ordinary document GETs, `/_board/start`, `/_board/goals`, `/_board/work`, `/_board/library`, `/_board/system`, `/_board/handoff`, `/_board/result`, and identity links load the React shell. `GET /_board/respond` redirects an open request to its item’s answer card with HTTP 302; an unavailable request returns an HTTP 409 page. Search and live subscriptions use the same RPC route. There is no automatic workspace discovery or server launch in agent commands.
549
549
 
550
550
  A running `work-board <dir>` also serves that NDJSON RPC at `POST /_board/rpc` over the Unix socket `<dir>/board.sock`, using the same handlers and services as TCP. Tools can read `work-board.inbox`, `work-board.fleetItems` and `work-board.goals` from the board directory without knowing its port. Each board directory has its own socket. For example:
551
551