@shivaedev/work-board 0.7.2 → 0.9.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 (277) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +110 -2
  3. package/assets/agent.js +37 -0
  4. package/assets/native.js +54 -25
  5. package/dist/board.d.ts +1 -0
  6. package/dist/board.d.ts.map +1 -1
  7. package/dist/board.js +15 -2
  8. package/dist/board.js.map +1 -1
  9. package/dist/browser/client.d.ts +19 -79
  10. package/dist/browser/client.d.ts.map +1 -1
  11. package/dist/browser/client.js +12 -1
  12. package/dist/browser/client.js.map +1 -1
  13. package/dist/browser/entry.d.ts +3 -0
  14. package/dist/browser/entry.d.ts.map +1 -0
  15. package/dist/browser/entry.js +7 -0
  16. package/dist/browser/entry.js.map +1 -0
  17. package/dist/browser/responses/Prompt.d.ts +10 -0
  18. package/dist/browser/responses/Prompt.d.ts.map +1 -0
  19. package/dist/browser/responses/Prompt.js +2 -0
  20. package/dist/browser/responses/Prompt.js.map +1 -0
  21. package/dist/browser/responses/answerBody.d.ts +4 -0
  22. package/dist/browser/responses/answerBody.d.ts.map +1 -0
  23. package/dist/browser/responses/answerBody.js +9 -0
  24. package/dist/browser/responses/answerBody.js.map +1 -0
  25. package/dist/browser/responses/draftSession.d.ts +8 -0
  26. package/dist/browser/responses/draftSession.d.ts.map +1 -0
  27. package/dist/browser/responses/draftSession.js +105 -0
  28. package/dist/browser/responses/draftSession.js.map +1 -0
  29. package/dist/browser/responses/drafts.d.ts +21 -0
  30. package/dist/browser/responses/drafts.d.ts.map +1 -0
  31. package/dist/browser/responses/drafts.js +68 -0
  32. package/dist/browser/responses/drafts.js.map +1 -0
  33. package/dist/browser/responses/preview.d.ts +4 -0
  34. package/dist/browser/responses/preview.d.ts.map +1 -0
  35. package/dist/browser/responses/preview.js +5 -0
  36. package/dist/browser/responses/preview.js.map +1 -0
  37. package/dist/browser/responses/questionnaireControls.d.ts +10 -0
  38. package/dist/browser/responses/questionnaireControls.d.ts.map +1 -0
  39. package/dist/browser/responses/questionnaireControls.js +68 -0
  40. package/dist/browser/responses/questionnaireControls.js.map +1 -0
  41. package/dist/browser/responses/schema.d.ts +168 -0
  42. package/dist/browser/responses/schema.d.ts.map +1 -0
  43. package/dist/browser/responses/schema.js +57 -0
  44. package/dist/browser/responses/schema.js.map +1 -0
  45. package/dist/browser/responses/setup.d.ts +2 -0
  46. package/dist/browser/responses/setup.d.ts.map +1 -0
  47. package/dist/browser/responses/setup.js +129 -0
  48. package/dist/browser/responses/setup.js.map +1 -0
  49. package/dist/browser/responses/submissionFields.d.ts +15 -0
  50. package/dist/browser/responses/submissionFields.d.ts.map +1 -0
  51. package/dist/browser/responses/submissionFields.js +14 -0
  52. package/dist/browser/responses/submissionFields.js.map +1 -0
  53. package/dist/browser/responses/submit.d.ts +4 -0
  54. package/dist/browser/responses/submit.d.ts.map +1 -0
  55. package/dist/browser/responses/submit.js +30 -0
  56. package/dist/browser/responses/submit.js.map +1 -0
  57. package/dist/browser/session.d.ts +1 -79
  58. package/dist/browser/session.d.ts.map +1 -1
  59. package/dist/cli.d.ts.map +1 -1
  60. package/dist/cli.js +24 -15
  61. package/dist/cli.js.map +1 -1
  62. package/dist/files/changes.d.ts +1 -0
  63. package/dist/files/changes.d.ts.map +1 -1
  64. package/dist/files/changes.js +1 -1
  65. package/dist/files/changes.js.map +1 -1
  66. package/dist/http/respond.d.ts.map +1 -1
  67. package/dist/http/respond.js +2 -0
  68. package/dist/http/respond.js.map +1 -1
  69. package/dist/metadata/backlinks.d.ts.map +1 -1
  70. package/dist/metadata/backlinks.js +5 -0
  71. package/dist/metadata/backlinks.js.map +1 -1
  72. package/dist/metadata/fields.d.ts +23 -1
  73. package/dist/metadata/fields.d.ts.map +1 -1
  74. package/dist/metadata/problems.d.ts.map +1 -1
  75. package/dist/metadata/problems.js +3 -0
  76. package/dist/metadata/problems.js.map +1 -1
  77. package/dist/metadata/schema.d.ts +23 -1
  78. package/dist/metadata/schema.d.ts.map +1 -1
  79. package/dist/metadata/schema.js +6 -2
  80. package/dist/metadata/schema.js.map +1 -1
  81. package/dist/page/attentionDetails.d.ts.map +1 -1
  82. package/dist/page/attentionDetails.js +2 -1
  83. package/dist/page/attentionDetails.js.map +1 -1
  84. package/dist/page/metadataDetails.d.ts.map +1 -1
  85. package/dist/page/metadataDetails.js +6 -0
  86. package/dist/page/metadataDetails.js.map +1 -1
  87. package/dist/page/navigationScript.js +1 -1
  88. package/dist/page/shell.d.ts +1 -1
  89. package/dist/page/shell.d.ts.map +1 -1
  90. package/dist/page/shell.js.map +1 -1
  91. package/dist/page/style.d.ts.map +1 -1
  92. package/dist/page/style.js +3 -1
  93. package/dist/page/style.js.map +1 -1
  94. package/dist/page/swap.d.ts +1 -1
  95. package/dist/page/swap.d.ts.map +1 -1
  96. package/dist/page/swap.js +3 -0
  97. package/dist/page/swap.js.map +1 -1
  98. package/dist/path/Identity.d.ts +3 -0
  99. package/dist/path/Identity.d.ts.map +1 -0
  100. package/dist/path/Identity.js +3 -0
  101. package/dist/path/Identity.js.map +1 -0
  102. package/dist/render/markdown.d.ts +1 -0
  103. package/dist/render/markdown.d.ts.map +1 -1
  104. package/dist/render/markdown.js +4 -2
  105. package/dist/render/markdown.js.map +1 -1
  106. package/dist/render/questionnaireDocuments.d.ts +3 -0
  107. package/dist/render/questionnaireDocuments.d.ts.map +1 -0
  108. package/dist/render/questionnaireDocuments.js +11 -0
  109. package/dist/render/questionnaireDocuments.js.map +1 -0
  110. package/dist/render/visualDocuments.d.ts.map +1 -1
  111. package/dist/render/visualDocuments.js +3 -0
  112. package/dist/render/visualDocuments.js.map +1 -1
  113. package/dist/responses/agent-cli.d.ts +2 -0
  114. package/dist/responses/agent-cli.d.ts.map +1 -0
  115. package/dist/responses/agent-cli.js +31 -0
  116. package/dist/responses/agent-cli.js.map +1 -0
  117. package/dist/responses/agent.d.ts +80 -0
  118. package/dist/responses/agent.d.ts.map +1 -0
  119. package/dist/responses/agent.js +49 -0
  120. package/dist/responses/agent.js.map +1 -0
  121. package/dist/responses/await.d.ts +39 -0
  122. package/dist/responses/await.d.ts.map +1 -0
  123. package/dist/responses/await.js +21 -0
  124. package/dist/responses/await.js.map +1 -0
  125. package/dist/responses/composerHtml.d.ts +27 -0
  126. package/dist/responses/composerHtml.d.ts.map +1 -0
  127. package/dist/responses/composerHtml.js +14 -0
  128. package/dist/responses/composerHtml.js.map +1 -0
  129. package/dist/responses/flags.d.ts +6 -0
  130. package/dist/responses/flags.d.ts.map +1 -0
  131. package/dist/responses/flags.js +23 -0
  132. package/dist/responses/flags.js.map +1 -0
  133. package/dist/responses/history.d.ts +20 -0
  134. package/dist/responses/history.d.ts.map +1 -0
  135. package/dist/responses/history.js +16 -0
  136. package/dist/responses/history.js.map +1 -0
  137. package/dist/responses/locate.d.ts +13 -0
  138. package/dist/responses/locate.d.ts.map +1 -0
  139. package/dist/responses/locate.js +55 -0
  140. package/dist/responses/locate.js.map +1 -0
  141. package/dist/responses/make.d.ts +3 -0
  142. package/dist/responses/make.d.ts.map +1 -0
  143. package/dist/responses/make.js +16 -0
  144. package/dist/responses/make.js.map +1 -0
  145. package/dist/responses/outcome.d.ts +71 -0
  146. package/dist/responses/outcome.d.ts.map +1 -0
  147. package/dist/responses/outcome.js +14 -0
  148. package/dist/responses/outcome.js.map +1 -0
  149. package/dist/responses/page.d.ts +6 -0
  150. package/dist/responses/page.d.ts.map +1 -0
  151. package/dist/responses/page.js +22 -0
  152. package/dist/responses/page.js.map +1 -0
  153. package/dist/responses/publish.d.ts +4 -0
  154. package/dist/responses/publish.d.ts.map +1 -0
  155. package/dist/responses/publish.js +56 -0
  156. package/dist/responses/publish.js.map +1 -0
  157. package/dist/responses/publishIn.d.ts +3 -0
  158. package/dist/responses/publishIn.d.ts.map +1 -0
  159. package/dist/responses/publishIn.js +69 -0
  160. package/dist/responses/publishIn.js.map +1 -0
  161. package/dist/responses/read.d.ts +36 -0
  162. package/dist/responses/read.d.ts.map +1 -0
  163. package/dist/responses/read.js +43 -0
  164. package/dist/responses/read.js.map +1 -0
  165. package/dist/responses/records.d.ts +12 -0
  166. package/dist/responses/records.d.ts.map +1 -0
  167. package/dist/responses/records.js +49 -0
  168. package/dist/responses/records.js.map +1 -0
  169. package/dist/responses/retry.d.ts +34 -0
  170. package/dist/responses/retry.d.ts.map +1 -0
  171. package/dist/responses/retry.js +14 -0
  172. package/dist/responses/retry.js.map +1 -0
  173. package/dist/responses/service.d.ts +142 -0
  174. package/dist/responses/service.d.ts.map +1 -0
  175. package/dist/responses/service.js +95 -0
  176. package/dist/responses/service.js.map +1 -0
  177. package/dist/responses/template.d.ts +7 -0
  178. package/dist/responses/template.d.ts.map +1 -0
  179. package/dist/responses/template.js +58 -0
  180. package/dist/responses/template.js.map +1 -0
  181. package/dist/responses/templateHtml.d.ts +7 -0
  182. package/dist/responses/templateHtml.d.ts.map +1 -0
  183. package/dist/responses/templateHtml.js +18 -0
  184. package/dist/responses/templateHtml.js.map +1 -0
  185. package/dist/responses/templateLinks.d.ts +3 -0
  186. package/dist/responses/templateLinks.d.ts.map +1 -0
  187. package/dist/responses/templateLinks.js +45 -0
  188. package/dist/responses/templateLinks.js.map +1 -0
  189. package/dist/responses/templateNodes.d.ts +17 -0
  190. package/dist/responses/templateNodes.d.ts.map +1 -0
  191. package/dist/responses/templateNodes.js +47 -0
  192. package/dist/responses/templateNodes.js.map +1 -0
  193. package/dist/responses/validateSupersedes.d.ts +5 -0
  194. package/dist/responses/validateSupersedes.d.ts.map +1 -0
  195. package/dist/responses/validateSupersedes.js +21 -0
  196. package/dist/responses/validateSupersedes.js.map +1 -0
  197. package/dist/responses/validatedInput.d.ts +3 -0
  198. package/dist/responses/validatedInput.d.ts.map +1 -0
  199. package/dist/responses/validatedInput.js +43 -0
  200. package/dist/responses/validatedInput.js.map +1 -0
  201. package/dist/responses/waitFor.d.ts +37 -0
  202. package/dist/responses/waitFor.d.ts.map +1 -0
  203. package/dist/responses/waitFor.js +47 -0
  204. package/dist/responses/waitFor.js.map +1 -0
  205. package/dist/rpc/contract.d.ts +125 -2
  206. package/dist/rpc/contract.d.ts.map +1 -1
  207. package/dist/rpc/contract.js +3 -2
  208. package/dist/rpc/contract.js.map +1 -1
  209. package/dist/rpc/responseContract.d.ts +260 -0
  210. package/dist/rpc/responseContract.d.ts.map +1 -0
  211. package/dist/rpc/responseContract.js +37 -0
  212. package/dist/rpc/responseContract.js.map +1 -0
  213. package/dist/rpc/server.d.ts +3 -1
  214. package/dist/rpc/server.d.ts.map +1 -1
  215. package/dist/rpc/server.js +6 -1
  216. package/dist/rpc/server.js.map +1 -1
  217. package/dist/serve-cli.d.ts +3 -0
  218. package/dist/serve-cli.d.ts.map +1 -0
  219. package/dist/serve-cli.js +20 -0
  220. package/dist/serve-cli.js.map +1 -0
  221. package/package.json +3 -3
  222. package/src/board.ts +16 -2
  223. package/src/browser/client.ts +30 -4
  224. package/src/browser/entry.ts +9 -0
  225. package/src/browser/responses/Prompt.ts +6 -0
  226. package/src/browser/responses/answerBody.ts +11 -0
  227. package/src/browser/responses/draftSession.ts +101 -0
  228. package/src/browser/responses/drafts.ts +82 -0
  229. package/src/browser/responses/preview.ts +7 -0
  230. package/src/browser/responses/questionnaireControls.ts +74 -0
  231. package/src/browser/responses/schema.ts +63 -0
  232. package/src/browser/responses/setup.ts +132 -0
  233. package/src/browser/responses/submissionFields.ts +15 -0
  234. package/src/browser/responses/submit.ts +33 -0
  235. package/src/cli.ts +14 -22
  236. package/src/files/changes.ts +2 -1
  237. package/src/http/respond.ts +2 -0
  238. package/src/metadata/backlinks.ts +5 -0
  239. package/src/metadata/problems.ts +3 -0
  240. package/src/metadata/schema.ts +6 -2
  241. package/src/page/attentionDetails.ts +2 -1
  242. package/src/page/metadataDetails.ts +6 -0
  243. package/src/page/navigationScript.ts +1 -1
  244. package/src/page/shell.ts +1 -1
  245. package/src/page/style.ts +3 -1
  246. package/src/page/swap.ts +3 -0
  247. package/src/path/Identity.ts +3 -0
  248. package/src/render/markdown.ts +5 -2
  249. package/src/render/questionnaireDocuments.ts +12 -0
  250. package/src/render/visualDocuments.ts +3 -0
  251. package/src/responses/agent-cli.ts +35 -0
  252. package/src/responses/agent.ts +59 -0
  253. package/src/responses/await.ts +21 -0
  254. package/src/responses/composerHtml.ts +28 -0
  255. package/src/responses/flags.ts +22 -0
  256. package/src/responses/history.ts +18 -0
  257. package/src/responses/locate.ts +60 -0
  258. package/src/responses/make.ts +17 -0
  259. package/src/responses/outcome.ts +15 -0
  260. package/src/responses/page.ts +30 -0
  261. package/src/responses/publish.ts +53 -0
  262. package/src/responses/publishIn.ts +64 -0
  263. package/src/responses/read.ts +45 -0
  264. package/src/responses/records.ts +55 -0
  265. package/src/responses/retry.ts +23 -0
  266. package/src/responses/service.ts +117 -0
  267. package/src/responses/template.ts +72 -0
  268. package/src/responses/templateHtml.ts +26 -0
  269. package/src/responses/templateLinks.ts +43 -0
  270. package/src/responses/templateNodes.ts +55 -0
  271. package/src/responses/validateSupersedes.ts +24 -0
  272. package/src/responses/validatedInput.ts +45 -0
  273. package/src/responses/waitFor.ts +58 -0
  274. package/src/rpc/contract.ts +3 -2
  275. package/src/rpc/responseContract.ts +46 -0
  276. package/src/rpc/server.ts +8 -1
  277. package/src/serve-cli.ts +37 -0
@@ -0,0 +1,37 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type { RpcClientError } from "effect/unstable/rpc/RpcClientError";
3
+ import { ResponseFailed, type WaitReading } from "#browser/responses/schema.ts";
4
+ export declare const waitForResponse: (read: () => Effect.Effect<WaitReading, ResponseFailed | RpcClientError>, diagnostic: (text: string) => void) => Effect.Effect<{
5
+ readonly kind: "response";
6
+ readonly question: {
7
+ readonly context: string;
8
+ readonly id: string;
9
+ readonly question: {
10
+ readonly deadline: number;
11
+ readonly item: string;
12
+ readonly reason: string;
13
+ readonly registeredAt: number;
14
+ readonly request: string;
15
+ readonly reviewedRevision: string;
16
+ readonly source: string;
17
+ };
18
+ };
19
+ readonly response: {
20
+ readonly body: string;
21
+ readonly id: string;
22
+ readonly response: {
23
+ readonly answers?: readonly {
24
+ readonly prompt: string;
25
+ readonly selected: readonly string[];
26
+ readonly text: string;
27
+ }[] | undefined;
28
+ readonly author: string;
29
+ readonly question: string;
30
+ readonly recordedAt: number;
31
+ readonly reviewedRevision: string;
32
+ readonly supersedes?: string | undefined;
33
+ readonly type: "answer" | "clarify" | "not_now";
34
+ };
35
+ };
36
+ }, Error | RpcClientError, never>;
37
+ //# sourceMappingURL=waitFor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitFor.d.ts","sourceRoot":"","sources":["../../src/responses/waitFor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAsBhF,eAAO,MAAM,eAAe,eACf,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,GAAG,cAAc,CAAC,qBACpD,MAAM,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA8BjC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import * as Clock from "effect/Clock";
2
+ import * as Effect from "effect/Effect";
3
+ import { ResponseFailed } from "#browser/responses/schema.ts";
4
+ function resultFor(reading) {
5
+ if (reading.response) {
6
+ return Effect.succeed({ kind: "response", question: reading.question, response: reading.response });
7
+ }
8
+ if (reading.expired) {
9
+ return Effect.fail(new ResponseFailed({
10
+ code: "Unanswered",
11
+ message: "The human left this unanswered for 48 hours. Check in with them; they may have forgotten or want to postpone. The request and late replies remain available.",
12
+ }));
13
+ }
14
+ return Effect.succeed(undefined);
15
+ }
16
+ function retryable(error) {
17
+ return error._tag !== "ResponseFailed" || error.code === "Unavailable";
18
+ }
19
+ export const waitForResponse = Effect.fn("WorkBoard.waitForResponse")(function* (read, diagnostic) {
20
+ let known;
21
+ const leaseEnd = (yield* Clock.currentTimeMillis) + 48 * 60 * 60 * 1000;
22
+ let unavailable = false;
23
+ while (true) {
24
+ const result = yield* read().pipe(Effect.result);
25
+ if (result._tag === "Failure") {
26
+ if (!retryable(result.failure)) {
27
+ return yield* Effect.fail(result.failure);
28
+ }
29
+ if ((yield* Clock.currentTimeMillis) >= (known?.question.question.deadline ?? leaseEnd)) {
30
+ return yield* Effect.fail(new Error("The service is unavailable at the deadline; unanswered status could not be verified. Re-read this question when it returns."));
31
+ }
32
+ if (!unavailable) {
33
+ diagnostic("Local service unavailable; reconnecting to the same question.");
34
+ }
35
+ unavailable = true;
36
+ yield* Effect.sleep("2 seconds");
37
+ continue;
38
+ }
39
+ known = result.success;
40
+ unavailable = false;
41
+ const complete = yield* resultFor(known);
42
+ if (complete) {
43
+ return complete;
44
+ }
45
+ }
46
+ });
47
+ //# sourceMappingURL=waitFor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitFor.js","sourceRoot":"","sources":["../../src/responses/waitFor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,cAAc,EAAoB,MAAM,8BAA8B,CAAC;AAEhF,SAAS,SAAS,CAAC,OAAoB;IACtC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAW,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,IAAI,CACjB,IAAI,cAAc,CAAC;YAClB,IAAI,EAAE,YAAY;YAClB,OAAO,EACN,8JAA8J;SAC/J,CAAC,CACF,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,KAAsC;IACxD,OAAO,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAC9E,IAAuE,EACvE,UAAkC;IAElC,IAAI,KAA8B,CAAC;IACnC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACxE,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC;gBACzF,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACxB,IAAI,KAAK,CAAC,6HAA6H,CAAC,CACxI,CAAC;YACH,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,UAAU,CAAC,+DAA+D,CAAC,CAAC;YAC7E,CAAC;YACD,WAAW,GAAG,IAAI,CAAC;YACnB,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACjC,SAAS;QACV,CAAC;QACD,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QACvB,WAAW,GAAG,KAAK,CAAC;QACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC;QACjB,CAAC;IACF,CAAC;AACF,CAAC,CAAC,CAAC"}
@@ -88,7 +88,86 @@ export declare const Subscribe: Rpc.Rpc<"work-board.subscribe", Schema.Void, imp
88
88
  }>, Schema.Struct<{
89
89
  readonly _tag: Schema.Literal<"Resync">;
90
90
  }>]>, typeof ReadFailed>, Schema.Never, never, never>;
91
- export declare const workRpcs: import("effect/unstable/rpc/RpcGroup").RpcGroup<Rpc.Rpc<"work-board.history", Schema.Struct<{
91
+ export declare const workRpcs: import("effect/unstable/rpc/RpcGroup").RpcGroup<Rpc.Rpc<"work-board.recordResponse", Schema.Struct<{
92
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
93
+ readonly prompt: Schema.String;
94
+ readonly selected: Schema.$Array<Schema.String>;
95
+ readonly text: Schema.String;
96
+ }>>>;
97
+ readonly author: Schema.String;
98
+ readonly body: Schema.String;
99
+ readonly id: Schema.String;
100
+ readonly question: Schema.String;
101
+ readonly supersedes: Schema.optional<Schema.String>;
102
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
103
+ }>, Schema.Struct<{
104
+ readonly body: Schema.String;
105
+ readonly id: Schema.String;
106
+ readonly response: Schema.Struct<{
107
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
108
+ readonly prompt: Schema.String;
109
+ readonly selected: Schema.$Array<Schema.String>;
110
+ readonly text: Schema.String;
111
+ }>>>;
112
+ readonly author: Schema.String;
113
+ readonly question: Schema.String;
114
+ readonly recordedAt: Schema.Number;
115
+ readonly reviewedRevision: Schema.String;
116
+ readonly supersedes: Schema.optional<Schema.String>;
117
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
118
+ }>;
119
+ }>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.registerQuestion", Schema.Struct<{
120
+ item: Schema.String;
121
+ request: Schema.String;
122
+ revision: Schema.String;
123
+ }>, Schema.Struct<{
124
+ readonly context: Schema.String;
125
+ readonly id: Schema.String;
126
+ readonly question: Schema.Struct<{
127
+ readonly deadline: Schema.Number;
128
+ readonly item: Schema.String;
129
+ readonly reason: Schema.String;
130
+ readonly registeredAt: Schema.Number;
131
+ readonly request: Schema.String;
132
+ readonly reviewedRevision: Schema.String;
133
+ readonly source: Schema.String;
134
+ }>;
135
+ }>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.awaitResponse", Schema.Struct<{
136
+ after: Schema.optional<Schema.String>;
137
+ question: Schema.String;
138
+ }>, Schema.Struct<{
139
+ readonly expired: Schema.Boolean;
140
+ readonly question: Schema.Struct<{
141
+ readonly context: Schema.String;
142
+ readonly id: Schema.String;
143
+ readonly question: Schema.Struct<{
144
+ readonly deadline: Schema.Number;
145
+ readonly item: Schema.String;
146
+ readonly reason: Schema.String;
147
+ readonly registeredAt: Schema.Number;
148
+ readonly request: Schema.String;
149
+ readonly reviewedRevision: Schema.String;
150
+ readonly source: Schema.String;
151
+ }>;
152
+ }>;
153
+ readonly response: Schema.optional<Schema.Struct<{
154
+ readonly body: Schema.String;
155
+ readonly id: Schema.String;
156
+ readonly response: Schema.Struct<{
157
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
158
+ readonly prompt: Schema.String;
159
+ readonly selected: Schema.$Array<Schema.String>;
160
+ readonly text: Schema.String;
161
+ }>>>;
162
+ readonly author: Schema.String;
163
+ readonly question: Schema.String;
164
+ readonly recordedAt: Schema.Number;
165
+ readonly reviewedRevision: Schema.String;
166
+ readonly supersedes: Schema.optional<Schema.String>;
167
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
168
+ }>;
169
+ }>>;
170
+ }>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.history", Schema.Struct<{
92
171
  readonly action: Schema.Literals<readonly ["check", "compare", "observe"]>;
93
172
  readonly baseline: Schema.NullOr<Schema.String>;
94
173
  }>, Schema.Struct<{
@@ -101,7 +180,51 @@ export declare const workRpcs: import("effect/unstable/rpc/RpcGroup").RpcGroup<R
101
180
  }>, Schema.Struct<{
102
181
  readonly html: Schema.String;
103
182
  readonly status: Schema.Number;
104
- }>, Schema.Union<readonly (typeof ReadFailed)[]>, never, never> | Rpc.Rpc<"work-board.search", Schema.Struct<{
183
+ }>, Schema.Union<readonly (typeof ReadFailed)[]>, never, never> | Rpc.Rpc<"work-board.question", Schema.Struct<{
184
+ item: Schema.String;
185
+ request: Schema.String;
186
+ }>, Schema.Struct<{
187
+ readonly context: Schema.String;
188
+ readonly id: Schema.String;
189
+ readonly item: Schema.String;
190
+ readonly reason: Schema.String;
191
+ readonly request: Schema.String;
192
+ readonly reviewedRevision: Schema.String;
193
+ readonly source: Schema.String;
194
+ }>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.responses", Schema.Struct<{
195
+ question: Schema.String;
196
+ }>, Schema.Struct<{
197
+ readonly question: Schema.Struct<{
198
+ readonly context: Schema.String;
199
+ readonly id: Schema.String;
200
+ readonly question: Schema.Struct<{
201
+ readonly deadline: Schema.Number;
202
+ readonly item: Schema.String;
203
+ readonly reason: Schema.String;
204
+ readonly registeredAt: Schema.Number;
205
+ readonly request: Schema.String;
206
+ readonly reviewedRevision: Schema.String;
207
+ readonly source: Schema.String;
208
+ }>;
209
+ }>;
210
+ readonly responses: Schema.$Array<Schema.Struct<{
211
+ readonly body: Schema.String;
212
+ readonly id: Schema.String;
213
+ readonly response: Schema.Struct<{
214
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
215
+ readonly prompt: Schema.String;
216
+ readonly selected: Schema.$Array<Schema.String>;
217
+ readonly text: Schema.String;
218
+ }>>>;
219
+ readonly author: Schema.String;
220
+ readonly question: Schema.String;
221
+ readonly recordedAt: Schema.Number;
222
+ readonly reviewedRevision: Schema.String;
223
+ readonly supersedes: Schema.optional<Schema.String>;
224
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
225
+ }>;
226
+ }>>;
227
+ }>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.search", Schema.Struct<{
105
228
  query: Schema.String;
106
229
  }>, Schema.Struct<{
107
230
  readonly results: Schema.$Array<Schema.Struct<{
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/rpc/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;;;;;AAQ1C,qBAAa,UAAW,SAAQ,eAAmG;CAAG;AAkDtI,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAAwG,CAAC;AAClI,eAAO,MAAM,SAAS;;;;;;;;;;;;qDAA2F,CAAC;AAClH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAA8B,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/rpc/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;;;;;AAS1C,qBAAa,UAAW,SAAQ,eAAmG;CAAG;AAkDtI,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAAwG,CAAC;AAClI,eAAO,MAAM,SAAS;;;;;;;;;;;;qDAA2F,CAAC;AAClH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAAsD,CAAC"}
@@ -4,6 +4,7 @@ import { contract } from "@shivaedev/effect-contract/contract.ts";
4
4
  import { LiveHint } from "@shivaedev/effect-contract/live.ts";
5
5
  import { query } from "@shivaedev/effect-contract/operation.ts";
6
6
  import { HistoryInput, HistoryOutput } from "#history/schema.ts";
7
+ import { responseContract } from "#rpc/responseContract.ts";
7
8
  import { index, navigation, watcher, workspace } from "./keys.js";
8
9
  import { pageKeys } from "./pageKeys.js";
9
10
  export class ReadFailed extends Schema.TaggedError()("ReadFailed", { operation: Schema.String, status: Schema.Number }) {
@@ -15,7 +16,7 @@ const PageUrl = Schema.String.check(Schema.isMaxLength(8192), Schema.makeFilter(
15
16
  try {
16
17
  const path = new URL(value, "http://127.0.0.1").pathname;
17
18
  return (path === "/"
18
- || ["/_board/work", "/_board/overview", "/_board/changes", "/_board/start"].includes(path)
19
+ || ["/_board/work", "/_board/overview", "/_board/changes", "/_board/start", "/_board/respond"].includes(path)
19
20
  || /^\/_board\/item\/[^/]+\/$/u.exec(path) !== null
20
21
  || /\.md$/iu.exec(path) !== null
21
22
  || "Expected a local reading URL");
@@ -55,5 +56,5 @@ const ReadWatcher = query("watcher", {
55
56
  });
56
57
  export const workContract = contract("work-board", { queries: [ReadPage, ReadNavigation, ReadSearch, ReadHistory, ReadWatcher] });
57
58
  export const Subscribe = Rpc.make("work-board.subscribe", { error: ReadFailed, stream: true, success: LiveHint });
58
- export const workRpcs = workContract.add(Subscribe);
59
+ export const workRpcs = workContract.add(Subscribe).merge(responseContract);
59
60
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/rpc/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/rpc/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,260 @@
1
+ import { Schema } from "effect";
2
+ import { ResponseFailed } from "#browser/responses/schema.ts";
3
+ export declare const responseContract: import("@shivaedev/effect-contract/contract.ts").Contract<"work-board", readonly [import("@shivaedev/effect-contract/operation.ts").Query<"question", Schema.Struct<{
4
+ item: Schema.String;
5
+ request: Schema.String;
6
+ }>, Schema.Struct<{
7
+ readonly context: Schema.String;
8
+ readonly id: Schema.String;
9
+ readonly item: Schema.String;
10
+ readonly reason: Schema.String;
11
+ readonly request: Schema.String;
12
+ readonly reviewedRevision: Schema.String;
13
+ readonly source: Schema.String;
14
+ }>, {
15
+ readonly ResponseFailed: typeof ResponseFailed;
16
+ }>, import("@shivaedev/effect-contract/operation.ts").Query<"responses", Schema.Struct<{
17
+ question: Schema.String;
18
+ }>, Schema.Struct<{
19
+ readonly question: Schema.Struct<{
20
+ readonly context: Schema.String;
21
+ readonly id: Schema.String;
22
+ readonly question: Schema.Struct<{
23
+ readonly deadline: Schema.Number;
24
+ readonly item: Schema.String;
25
+ readonly reason: Schema.String;
26
+ readonly registeredAt: Schema.Number;
27
+ readonly request: Schema.String;
28
+ readonly reviewedRevision: Schema.String;
29
+ readonly source: Schema.String;
30
+ }>;
31
+ }>;
32
+ readonly responses: Schema.$Array<Schema.Struct<{
33
+ readonly body: Schema.String;
34
+ readonly id: Schema.String;
35
+ readonly response: Schema.Struct<{
36
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
37
+ readonly prompt: Schema.String;
38
+ readonly selected: Schema.$Array<Schema.String>;
39
+ readonly text: Schema.String;
40
+ }>>>;
41
+ readonly author: Schema.String;
42
+ readonly question: Schema.String;
43
+ readonly recordedAt: Schema.Number;
44
+ readonly reviewedRevision: Schema.String;
45
+ readonly supersedes: Schema.optional<Schema.String>;
46
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
47
+ }>;
48
+ }>>;
49
+ }>, {
50
+ readonly ResponseFailed: typeof ResponseFailed;
51
+ }>, import("@shivaedev/effect-contract/operation.ts").Query<"awaitResponse", Schema.Struct<{
52
+ after: Schema.optional<Schema.String>;
53
+ question: Schema.String;
54
+ }>, Schema.Struct<{
55
+ readonly expired: Schema.Boolean;
56
+ readonly question: Schema.Struct<{
57
+ readonly context: Schema.String;
58
+ readonly id: Schema.String;
59
+ readonly question: Schema.Struct<{
60
+ readonly deadline: Schema.Number;
61
+ readonly item: Schema.String;
62
+ readonly reason: Schema.String;
63
+ readonly registeredAt: Schema.Number;
64
+ readonly request: Schema.String;
65
+ readonly reviewedRevision: Schema.String;
66
+ readonly source: Schema.String;
67
+ }>;
68
+ }>;
69
+ readonly response: Schema.optional<Schema.Struct<{
70
+ readonly body: Schema.String;
71
+ readonly id: Schema.String;
72
+ readonly response: Schema.Struct<{
73
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
74
+ readonly prompt: Schema.String;
75
+ readonly selected: Schema.$Array<Schema.String>;
76
+ readonly text: Schema.String;
77
+ }>>>;
78
+ readonly author: Schema.String;
79
+ readonly question: Schema.String;
80
+ readonly recordedAt: Schema.Number;
81
+ readonly reviewedRevision: Schema.String;
82
+ readonly supersedes: Schema.optional<Schema.String>;
83
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
84
+ }>;
85
+ }>>;
86
+ }>, {
87
+ readonly ResponseFailed: typeof ResponseFailed;
88
+ }>], readonly [import("@shivaedev/effect-contract/operation.ts").Command<"registerQuestion", Schema.Struct<{
89
+ item: Schema.String;
90
+ request: Schema.String;
91
+ revision: Schema.String;
92
+ }>, Schema.Struct<{
93
+ readonly context: Schema.String;
94
+ readonly id: Schema.String;
95
+ readonly question: Schema.Struct<{
96
+ readonly deadline: Schema.Number;
97
+ readonly item: Schema.String;
98
+ readonly reason: Schema.String;
99
+ readonly registeredAt: Schema.Number;
100
+ readonly request: Schema.String;
101
+ readonly reviewedRevision: Schema.String;
102
+ readonly source: Schema.String;
103
+ }>;
104
+ }>, {
105
+ readonly ResponseFailed: typeof ResponseFailed;
106
+ }>, import("@shivaedev/effect-contract/operation.ts").Command<"recordResponse", Schema.Struct<{
107
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
108
+ readonly prompt: Schema.String;
109
+ readonly selected: Schema.$Array<Schema.String>;
110
+ readonly text: Schema.String;
111
+ }>>>;
112
+ readonly author: Schema.String;
113
+ readonly body: Schema.String;
114
+ readonly id: Schema.String;
115
+ readonly question: Schema.String;
116
+ readonly supersedes: Schema.optional<Schema.String>;
117
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
118
+ }>, Schema.Struct<{
119
+ readonly body: Schema.String;
120
+ readonly id: Schema.String;
121
+ readonly response: Schema.Struct<{
122
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
123
+ readonly prompt: Schema.String;
124
+ readonly selected: Schema.$Array<Schema.String>;
125
+ readonly text: Schema.String;
126
+ }>>>;
127
+ readonly author: Schema.String;
128
+ readonly question: Schema.String;
129
+ readonly recordedAt: Schema.Number;
130
+ readonly reviewedRevision: Schema.String;
131
+ readonly supersedes: Schema.optional<Schema.String>;
132
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
133
+ }>;
134
+ }>, {
135
+ readonly ResponseFailed: typeof ResponseFailed;
136
+ }>], import("effect/unstable/rpc/Rpc").Rpc<"work-board.recordResponse", Schema.Struct<{
137
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
138
+ readonly prompt: Schema.String;
139
+ readonly selected: Schema.$Array<Schema.String>;
140
+ readonly text: Schema.String;
141
+ }>>>;
142
+ readonly author: Schema.String;
143
+ readonly body: Schema.String;
144
+ readonly id: Schema.String;
145
+ readonly question: Schema.String;
146
+ readonly supersedes: Schema.optional<Schema.String>;
147
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
148
+ }>, Schema.Struct<{
149
+ readonly body: Schema.String;
150
+ readonly id: Schema.String;
151
+ readonly response: Schema.Struct<{
152
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
153
+ readonly prompt: Schema.String;
154
+ readonly selected: Schema.$Array<Schema.String>;
155
+ readonly text: Schema.String;
156
+ }>>>;
157
+ readonly author: Schema.String;
158
+ readonly question: Schema.String;
159
+ readonly recordedAt: Schema.Number;
160
+ readonly reviewedRevision: Schema.String;
161
+ readonly supersedes: Schema.optional<Schema.String>;
162
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
163
+ }>;
164
+ }>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.registerQuestion", Schema.Struct<{
165
+ item: Schema.String;
166
+ request: Schema.String;
167
+ revision: Schema.String;
168
+ }>, Schema.Struct<{
169
+ readonly context: Schema.String;
170
+ readonly id: Schema.String;
171
+ readonly question: Schema.Struct<{
172
+ readonly deadline: Schema.Number;
173
+ readonly item: Schema.String;
174
+ readonly reason: Schema.String;
175
+ readonly registeredAt: Schema.Number;
176
+ readonly request: Schema.String;
177
+ readonly reviewedRevision: Schema.String;
178
+ readonly source: Schema.String;
179
+ }>;
180
+ }>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.awaitResponse", Schema.Struct<{
181
+ after: Schema.optional<Schema.String>;
182
+ question: Schema.String;
183
+ }>, Schema.Struct<{
184
+ readonly expired: Schema.Boolean;
185
+ readonly question: Schema.Struct<{
186
+ readonly context: Schema.String;
187
+ readonly id: Schema.String;
188
+ readonly question: Schema.Struct<{
189
+ readonly deadline: Schema.Number;
190
+ readonly item: Schema.String;
191
+ readonly reason: Schema.String;
192
+ readonly registeredAt: Schema.Number;
193
+ readonly request: Schema.String;
194
+ readonly reviewedRevision: Schema.String;
195
+ readonly source: Schema.String;
196
+ }>;
197
+ }>;
198
+ readonly response: Schema.optional<Schema.Struct<{
199
+ readonly body: Schema.String;
200
+ readonly id: Schema.String;
201
+ readonly response: Schema.Struct<{
202
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
203
+ readonly prompt: Schema.String;
204
+ readonly selected: Schema.$Array<Schema.String>;
205
+ readonly text: Schema.String;
206
+ }>>>;
207
+ readonly author: Schema.String;
208
+ readonly question: Schema.String;
209
+ readonly recordedAt: Schema.Number;
210
+ readonly reviewedRevision: Schema.String;
211
+ readonly supersedes: Schema.optional<Schema.String>;
212
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
213
+ }>;
214
+ }>>;
215
+ }>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.question", Schema.Struct<{
216
+ item: Schema.String;
217
+ request: Schema.String;
218
+ }>, Schema.Struct<{
219
+ readonly context: Schema.String;
220
+ readonly id: Schema.String;
221
+ readonly item: Schema.String;
222
+ readonly reason: Schema.String;
223
+ readonly request: Schema.String;
224
+ readonly reviewedRevision: Schema.String;
225
+ readonly source: Schema.String;
226
+ }>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.responses", Schema.Struct<{
227
+ question: Schema.String;
228
+ }>, Schema.Struct<{
229
+ readonly question: Schema.Struct<{
230
+ readonly context: Schema.String;
231
+ readonly id: Schema.String;
232
+ readonly question: Schema.Struct<{
233
+ readonly deadline: Schema.Number;
234
+ readonly item: Schema.String;
235
+ readonly reason: Schema.String;
236
+ readonly registeredAt: Schema.Number;
237
+ readonly request: Schema.String;
238
+ readonly reviewedRevision: Schema.String;
239
+ readonly source: Schema.String;
240
+ }>;
241
+ }>;
242
+ readonly responses: Schema.$Array<Schema.Struct<{
243
+ readonly body: Schema.String;
244
+ readonly id: Schema.String;
245
+ readonly response: Schema.Struct<{
246
+ readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
247
+ readonly prompt: Schema.String;
248
+ readonly selected: Schema.$Array<Schema.String>;
249
+ readonly text: Schema.String;
250
+ }>>>;
251
+ readonly author: Schema.String;
252
+ readonly question: Schema.String;
253
+ readonly recordedAt: Schema.Number;
254
+ readonly reviewedRevision: Schema.String;
255
+ readonly supersedes: Schema.optional<Schema.String>;
256
+ readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
257
+ }>;
258
+ }>>;
259
+ }>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never>>;
260
+ //# sourceMappingURL=responseContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseContract.d.ts","sourceRoot":"","sources":["../../src/rpc/responseContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAMN,cAAc,EAGd,MAAM,8BAA8B,CAAC;AAiCtC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAAoG,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { Schema } from "effect";
2
+ import { contract } from "@shivaedev/effect-contract/contract.ts";
3
+ import { command, query } from "@shivaedev/effect-contract/operation.ts";
4
+ import { DraftInput, Question, QuestionPreview, Reading, RecordedResponse, ResponseFailed, Revision, WaitReading, } from "#browser/responses/schema.ts";
5
+ import { index, workspace } from "#rpc/keys.ts";
6
+ const locate = query("question", {
7
+ payload: { item: Schema.String, request: Schema.String },
8
+ reads: () => [workspace.list, index.list],
9
+ rejections: { ResponseFailed },
10
+ success: QuestionPreview,
11
+ });
12
+ const awaitResponse = query("awaitResponse", {
13
+ payload: { after: Schema.optional(Schema.String), question: Schema.String },
14
+ reads: () => [workspace.list, index.list],
15
+ rejections: { ResponseFailed },
16
+ success: WaitReading,
17
+ });
18
+ const read = query("responses", {
19
+ payload: { question: Schema.String },
20
+ reads: () => [workspace.list, index.list],
21
+ rejections: { ResponseFailed },
22
+ success: Reading,
23
+ });
24
+ const register = command("registerQuestion", {
25
+ invalidates: () => [workspace.list, index.list],
26
+ payload: { item: Schema.String, request: Schema.String, revision: Revision },
27
+ rejections: { ResponseFailed },
28
+ success: Question,
29
+ });
30
+ const respond = command("recordResponse", {
31
+ invalidates: () => [workspace.list, index.list],
32
+ payload: DraftInput,
33
+ rejections: { ResponseFailed },
34
+ success: RecordedResponse,
35
+ });
36
+ export const responseContract = contract("work-board", { commands: [register, respond], queries: [locate, read, awaitResponse] });
37
+ //# sourceMappingURL=responseContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseContract.js","sourceRoot":"","sources":["../../src/rpc/responseContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EACN,UAAU,EACV,QAAQ,EACR,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,WAAW,GACX,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE;IAChC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IACxD,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IACzC,UAAU,EAAE,EAAE,cAAc,EAAE;IAC9B,OAAO,EAAE,eAAe;CACxB,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,EAAE;IAC5C,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IAC3E,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IACzC,UAAU,EAAE,EAAE,cAAc,EAAE;IAC9B,OAAO,EAAE,WAAW;CACpB,CAAC,CAAC;AACH,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE;IAC/B,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IACpC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IACzC,UAAU,EAAE,EAAE,cAAc,EAAE;IAC9B,OAAO,EAAE,OAAO;CAChB,CAAC,CAAC;AACH,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAC5C,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IAC/C,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC5E,UAAU,EAAE,EAAE,cAAc,EAAE;IAC9B,OAAO,EAAE,QAAQ;CACjB,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE;IACzC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IAC/C,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,EAAE,cAAc,EAAE;IAC9B,OAAO,EAAE,gBAAgB;CACzB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC"}
@@ -1,12 +1,14 @@
1
1
  import { Effect } from "effect";
2
2
  import { HttpServerResponse } from "effect/unstable/http";
3
3
  import type { Changes } from "#files/changes.ts";
4
+ import type { responseService } from "#responses/service.ts";
4
5
  import type { Snapshot } from "#search/snapshot.ts";
5
6
  export interface ServerOptions {
6
7
  readonly changes: Changes;
7
8
  readonly home: string | undefined;
8
9
  readonly index: Effect.Effect<Snapshot, unknown>;
9
10
  readonly page: (url: string) => Effect.Effect<HttpServerResponse.HttpServerResponse, unknown>;
11
+ readonly responses: Effect.Success<ReturnType<typeof responseService>>;
10
12
  }
11
- export declare const server: (args_0: ServerOptions) => Effect.Effect<Effect.Effect<HttpServerResponse.HttpServerResponse, never, import("effect/unstable/http/HttpServerRequest").HttpServerRequest | import("effect/Scope").Scope>, never, import("effect/Scope").Scope>;
13
+ export declare const server: (args_0: ServerOptions) => Effect.Effect<Effect.Effect<HttpServerResponse.HttpServerResponse, never, import("effect/unstable/http/HttpServerRequest").HttpServerRequest | import("effect/Scope").Scope>, never, import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/Scope").Scope>;
12
14
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rpc/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAc,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAuB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAMjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;CAC9F;AAED,eAAO,MAAM,MAAM,+OAkCjB,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rpc/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAc,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAuB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC9F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC;CACvE;AAED,eAAO,MAAM,MAAM,qTAuCjB,CAAC"}
@@ -8,8 +8,9 @@ import { navHtml } from "#page/nav.ts";
8
8
  import { searchMatch } from "#search/match.ts";
9
9
  import { ReadFailed, workRpcs } from "./contract.js";
10
10
  import { hints } from "./hints.js";
11
- export const server = Effect.fn("WorkBoard.server")(function* ({ changes, home, index, page }) {
11
+ export const server = Effect.fn("WorkBoard.server")(function* ({ changes, home, index, page, responses }) {
12
12
  const handlers = workRpcs.toLayer({
13
+ "work-board.awaitResponse": responses.awaitResponse,
13
14
  "work-board.history": ({ action, baseline }) => Effect.gen(function* () {
14
15
  const now = yield* Clock.currentTimeMillis;
15
16
  const snapshot = action === "check" ? undefined : yield* index;
@@ -22,6 +23,10 @@ export const server = Effect.fn("WorkBoard.server")(function* ({ changes, home,
22
23
  }
23
24
  return Effect.succeed({ html: new TextDecoder().decode(response.body.body), status: response.status });
24
25
  }), Effect.catch((error) => Effect.fail(error instanceof ReadFailed ? error : new ReadFailed({ operation: "page", status: 500 })))),
26
+ "work-board.question": ({ item, request }) => responses.locate(item, request),
27
+ "work-board.recordResponse": responses.record,
28
+ "work-board.registerQuestion": responses.register,
29
+ "work-board.responses": ({ question }) => responses.read(question),
25
30
  "work-board.search": ({ query }) => Effect.map(index, (snapshot) => ({ ...searchMatch(snapshot.entries, query), unavailable: snapshot.unavailable })).pipe(Effect.catch(() => Effect.fail(new ReadFailed({ operation: "search", status: 500 })))),
26
31
  "work-board.subscribe": () => hints(changes, index),
27
32
  "work-board.watcher": () => Effect.map(Ref.get(changes.watching), (watching) => ({ watching })),