@shivaedev/work-board 0.9.1 → 0.11.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 (186) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +49 -1
  3. package/assets/native.js +35 -29
  4. package/dist/board.d.ts.map +1 -1
  5. package/dist/board.js +20 -1
  6. package/dist/board.js.map +1 -1
  7. package/dist/browser/client.d.ts +2 -0
  8. package/dist/browser/client.d.ts.map +1 -1
  9. package/dist/browser/client.js +2 -1
  10. package/dist/browser/client.js.map +1 -1
  11. package/dist/browser/entry.d.ts.map +1 -1
  12. package/dist/browser/entry.js +2 -0
  13. package/dist/browser/entry.js.map +1 -1
  14. package/dist/browser/handoffs/copy.d.ts +3 -0
  15. package/dist/browser/handoffs/copy.d.ts.map +1 -0
  16. package/dist/browser/handoffs/copy.js +47 -0
  17. package/dist/browser/handoffs/copy.js.map +1 -0
  18. package/dist/browser/handoffs/fields.d.ts +11 -0
  19. package/dist/browser/handoffs/fields.d.ts.map +1 -0
  20. package/dist/browser/handoffs/fields.js +45 -0
  21. package/dist/browser/handoffs/fields.js.map +1 -0
  22. package/dist/browser/handoffs/schema.d.ts +89 -0
  23. package/dist/browser/handoffs/schema.d.ts.map +1 -0
  24. package/dist/browser/handoffs/schema.js +38 -0
  25. package/dist/browser/handoffs/schema.js.map +1 -0
  26. package/dist/browser/handoffs/setup.d.ts +2 -0
  27. package/dist/browser/handoffs/setup.d.ts.map +1 -0
  28. package/dist/browser/handoffs/setup.js +108 -0
  29. package/dist/browser/handoffs/setup.js.map +1 -0
  30. package/dist/browser/responses/draftSession.d.ts +1 -1
  31. package/dist/browser/responses/draftSession.d.ts.map +1 -1
  32. package/dist/browser/responses/draftSession.js +4 -4
  33. package/dist/browser/responses/draftSession.js.map +1 -1
  34. package/dist/browser/responses/preview.js.map +1 -1
  35. package/dist/cli.js.map +1 -1
  36. package/dist/files/list.d.ts.map +1 -1
  37. package/dist/handoffs/html.d.ts +37 -0
  38. package/dist/handoffs/html.d.ts.map +1 -0
  39. package/dist/handoffs/html.js +31 -0
  40. package/dist/handoffs/html.js.map +1 -0
  41. package/dist/handoffs/page.d.ts +7 -0
  42. package/dist/handoffs/page.d.ts.map +1 -0
  43. package/dist/handoffs/page.js +31 -0
  44. package/dist/handoffs/page.js.map +1 -0
  45. package/dist/handoffs/records.d.ts +7 -0
  46. package/dist/handoffs/records.d.ts.map +1 -0
  47. package/dist/handoffs/records.js +30 -0
  48. package/dist/handoffs/records.js.map +1 -0
  49. package/dist/handoffs/service.d.ts +55 -0
  50. package/dist/handoffs/service.d.ts.map +1 -0
  51. package/dist/handoffs/service.js +82 -0
  52. package/dist/handoffs/service.js.map +1 -0
  53. package/dist/handoffs/source.d.ts +11 -0
  54. package/dist/handoffs/source.d.ts.map +1 -0
  55. package/dist/handoffs/source.js +31 -0
  56. package/dist/handoffs/source.js.map +1 -0
  57. package/dist/http/assets.d.ts.map +1 -1
  58. package/dist/http/assets.js.map +1 -1
  59. package/dist/http/events.d.ts.map +1 -1
  60. package/dist/http/loopback.d.ts.map +1 -1
  61. package/dist/http/page.d.ts.map +1 -1
  62. package/dist/http/respond.d.ts.map +1 -1
  63. package/dist/metadata/backlinks.d.ts.map +1 -1
  64. package/dist/metadata/backlinks.js +1 -0
  65. package/dist/metadata/backlinks.js.map +1 -1
  66. package/dist/metadata/fields.d.ts +14 -1
  67. package/dist/metadata/fields.d.ts.map +1 -1
  68. package/dist/metadata/model.js.map +1 -1
  69. package/dist/metadata/problems.d.ts.map +1 -1
  70. package/dist/metadata/problems.js +1 -0
  71. package/dist/metadata/problems.js.map +1 -1
  72. package/dist/metadata/schema.d.ts +18 -1
  73. package/dist/metadata/schema.d.ts.map +1 -1
  74. package/dist/metadata/schema.js +3 -1
  75. package/dist/metadata/schema.js.map +1 -1
  76. package/dist/page/escape.d.ts.map +1 -1
  77. package/dist/page/metadata.d.ts.map +1 -1
  78. package/dist/page/metadata.js +12 -4
  79. package/dist/page/metadata.js.map +1 -1
  80. package/dist/page/metadataDetails.d.ts.map +1 -1
  81. package/dist/page/metadataDetails.js +3 -0
  82. package/dist/page/metadataDetails.js.map +1 -1
  83. package/dist/page/nav.d.ts.map +1 -1
  84. package/dist/page/navigationScript.js +1 -1
  85. package/dist/page/shell.d.ts +1 -1
  86. package/dist/page/shell.d.ts.map +1 -1
  87. package/dist/page/shell.js.map +1 -1
  88. package/dist/page/startTemplates.d.ts +109 -3
  89. package/dist/page/startTemplates.d.ts.map +1 -1
  90. package/dist/page/startTemplates.js +20 -0
  91. package/dist/page/startTemplates.js.map +1 -1
  92. package/dist/page/style.d.ts.map +1 -1
  93. package/dist/page/style.js +6 -5
  94. package/dist/page/style.js.map +1 -1
  95. package/dist/page/swap.d.ts +1 -1
  96. package/dist/page/swap.d.ts.map +1 -1
  97. package/dist/page/swap.js +2 -2
  98. package/dist/page/updated.d.ts.map +1 -1
  99. package/dist/render/board.d.ts.map +1 -1
  100. package/dist/render/callouts.d.ts.map +1 -1
  101. package/dist/render/code.d.ts.map +1 -1
  102. package/dist/render/documentHeadings.d.ts.map +1 -1
  103. package/dist/render/documentLinks.d.ts.map +1 -1
  104. package/dist/render/footnotes.d.ts.map +1 -1
  105. package/dist/render/highlighter.d.ts.map +1 -1
  106. package/dist/render/highlighter.js.map +1 -1
  107. package/dist/render/markdown.js.map +1 -1
  108. package/dist/render/questionnaireDocuments.d.ts.map +1 -1
  109. package/dist/render/visualDocuments.d.ts.map +1 -1
  110. package/dist/responses/agent.d.ts +8 -8
  111. package/dist/responses/agent.js.map +1 -1
  112. package/dist/responses/flags.d.ts.map +1 -1
  113. package/dist/responses/outcome.d.ts.map +1 -1
  114. package/dist/responses/publish.d.ts +1 -1
  115. package/dist/responses/publish.d.ts.map +1 -1
  116. package/dist/responses/publish.js +7 -7
  117. package/dist/responses/publish.js.map +1 -1
  118. package/dist/responses/publishIn.d.ts +1 -1
  119. package/dist/responses/publishIn.d.ts.map +1 -1
  120. package/dist/responses/publishIn.js +3 -3
  121. package/dist/responses/publishIn.js.map +1 -1
  122. package/dist/responses/waitFor.d.ts.map +1 -1
  123. package/dist/results/criteria.d.ts +3 -0
  124. package/dist/results/criteria.d.ts.map +1 -0
  125. package/dist/results/criteria.js +34 -0
  126. package/dist/results/criteria.js.map +1 -0
  127. package/dist/results/feedback.d.ts +7 -0
  128. package/dist/results/feedback.d.ts.map +1 -0
  129. package/dist/results/feedback.js +32 -0
  130. package/dist/results/feedback.js.map +1 -0
  131. package/dist/results/page.d.ts +7 -0
  132. package/dist/results/page.d.ts.map +1 -0
  133. package/dist/results/page.js +40 -0
  134. package/dist/results/page.js.map +1 -0
  135. package/dist/rpc/contract.d.ts +67 -1
  136. package/dist/rpc/contract.d.ts.map +1 -1
  137. package/dist/rpc/contract.js +3 -2
  138. package/dist/rpc/contract.js.map +1 -1
  139. package/dist/rpc/handoffContract.d.ts +142 -0
  140. package/dist/rpc/handoffContract.d.ts.map +1 -0
  141. package/dist/rpc/handoffContract.js +26 -0
  142. package/dist/rpc/handoffContract.js.map +1 -0
  143. package/dist/rpc/server.d.ts +2 -0
  144. package/dist/rpc/server.d.ts.map +1 -1
  145. package/dist/rpc/server.js +4 -1
  146. package/dist/rpc/server.js.map +1 -1
  147. package/dist/search/collector.d.ts.map +1 -1
  148. package/dist/search/entries.js.map +1 -1
  149. package/dist/search/linkCollector.d.ts.map +1 -1
  150. package/dist/serve-cli.js +2 -2
  151. package/dist/serve-cli.js.map +1 -1
  152. package/dist/serve.d.ts.map +1 -1
  153. package/dist/views/state.js.map +1 -1
  154. package/package.json +3 -3
  155. package/src/board.ts +20 -1
  156. package/src/browser/client.ts +3 -1
  157. package/src/browser/entry.ts +2 -0
  158. package/src/browser/handoffs/copy.ts +45 -0
  159. package/src/browser/handoffs/fields.ts +50 -0
  160. package/src/browser/handoffs/schema.ts +44 -0
  161. package/src/browser/handoffs/setup.ts +113 -0
  162. package/src/browser/responses/draftSession.ts +11 -4
  163. package/src/handoffs/html.ts +42 -0
  164. package/src/handoffs/page.ts +45 -0
  165. package/src/handoffs/records.ts +34 -0
  166. package/src/handoffs/service.ts +103 -0
  167. package/src/handoffs/source.ts +35 -0
  168. package/src/metadata/backlinks.ts +1 -0
  169. package/src/metadata/problems.ts +1 -0
  170. package/src/metadata/schema.ts +3 -1
  171. package/src/page/metadata.ts +14 -4
  172. package/src/page/metadataDetails.ts +3 -0
  173. package/src/page/navigationScript.ts +1 -1
  174. package/src/page/shell.ts +1 -1
  175. package/src/page/startTemplates.ts +20 -0
  176. package/src/page/style.ts +6 -5
  177. package/src/page/swap.ts +2 -2
  178. package/src/responses/publish.ts +7 -7
  179. package/src/responses/publishIn.ts +10 -3
  180. package/src/results/criteria.ts +37 -0
  181. package/src/results/feedback.ts +44 -0
  182. package/src/results/page.ts +58 -0
  183. package/src/rpc/contract.ts +5 -2
  184. package/src/rpc/handoffContract.ts +26 -0
  185. package/src/rpc/server.ts +6 -1
  186. package/src/serve-cli.ts +2 -2
@@ -0,0 +1,142 @@
1
+ import { Schema } from "effect";
2
+ import { ResponseFailed } from "#browser/responses/schema.ts";
3
+ export declare const handoffContract: import("@shivaedev/effect-contract/contract.ts").Contract<"work-board", readonly [import("@shivaedev/effect-contract/operation.ts").Query<"handoffSource", Schema.Struct<{
4
+ item: Schema.String;
5
+ }>, Schema.Struct<{
6
+ readonly context: Schema.String;
7
+ readonly id: Schema.String;
8
+ readonly item: Schema.String;
9
+ readonly reviewedRevision: Schema.String;
10
+ readonly source: Schema.String;
11
+ }>, {
12
+ readonly ResponseFailed: typeof ResponseFailed;
13
+ }>, import("@shivaedev/effect-contract/operation.ts").Query<"handoffs", Schema.Struct<{
14
+ item: Schema.String;
15
+ }>, Schema.Struct<{
16
+ readonly records: Schema.$Array<Schema.Struct<{
17
+ readonly context: Schema.String;
18
+ readonly file: Schema.String;
19
+ readonly handoff: Schema.encodeKeys<Schema.Struct<{
20
+ readonly by: Schema.optional<Schema.String>;
21
+ readonly constraints: Schema.String;
22
+ readonly goal: Schema.String;
23
+ readonly item: Schema.String;
24
+ readonly nextAction: Schema.String;
25
+ readonly note: Schema.optional<Schema.String>;
26
+ readonly preparedAt: Schema.Number;
27
+ readonly recipient: Schema.String;
28
+ readonly reviewedRevision: Schema.String;
29
+ readonly source: Schema.String;
30
+ readonly state: Schema.Literals<readonly ["requested", "acknowledged", "rejected", "unavailable"]>;
31
+ }>, {
32
+ readonly nextAction: "next_action";
33
+ readonly preparedAt: "prepared_at";
34
+ readonly reviewedRevision: "reviewed_revision";
35
+ }>;
36
+ readonly id: Schema.String;
37
+ readonly prompt: Schema.String;
38
+ }>>;
39
+ readonly unknown: Schema.$Array<Schema.String>;
40
+ }>, {
41
+ readonly ResponseFailed: typeof ResponseFailed;
42
+ }>], readonly [import("@shivaedev/effect-contract/operation.ts").Command<"prepareHandoff", Schema.Struct<{
43
+ readonly constraints: Schema.String;
44
+ readonly goal: Schema.String;
45
+ readonly id: Schema.String;
46
+ readonly item: Schema.String;
47
+ readonly nextAction: Schema.String;
48
+ readonly recipient: Schema.String;
49
+ readonly revision: Schema.String;
50
+ readonly source: Schema.String;
51
+ }>, Schema.Struct<{
52
+ readonly context: Schema.String;
53
+ readonly file: Schema.String;
54
+ readonly handoff: Schema.encodeKeys<Schema.Struct<{
55
+ readonly by: Schema.optional<Schema.String>;
56
+ readonly constraints: Schema.String;
57
+ readonly goal: Schema.String;
58
+ readonly item: Schema.String;
59
+ readonly nextAction: Schema.String;
60
+ readonly note: Schema.optional<Schema.String>;
61
+ readonly preparedAt: Schema.Number;
62
+ readonly recipient: Schema.String;
63
+ readonly reviewedRevision: Schema.String;
64
+ readonly source: Schema.String;
65
+ readonly state: Schema.Literals<readonly ["requested", "acknowledged", "rejected", "unavailable"]>;
66
+ }>, {
67
+ readonly nextAction: "next_action";
68
+ readonly preparedAt: "prepared_at";
69
+ readonly reviewedRevision: "reviewed_revision";
70
+ }>;
71
+ readonly id: Schema.String;
72
+ readonly prompt: Schema.String;
73
+ }>, {
74
+ readonly ResponseFailed: typeof ResponseFailed;
75
+ }>], import("effect/unstable/rpc/Rpc").Rpc<"work-board.prepareHandoff", Schema.Struct<{
76
+ readonly constraints: Schema.String;
77
+ readonly goal: Schema.String;
78
+ readonly id: Schema.String;
79
+ readonly item: Schema.String;
80
+ readonly nextAction: Schema.String;
81
+ readonly recipient: Schema.String;
82
+ readonly revision: Schema.String;
83
+ readonly source: Schema.String;
84
+ }>, Schema.Struct<{
85
+ readonly context: Schema.String;
86
+ readonly file: Schema.String;
87
+ readonly handoff: Schema.encodeKeys<Schema.Struct<{
88
+ readonly by: Schema.optional<Schema.String>;
89
+ readonly constraints: Schema.String;
90
+ readonly goal: Schema.String;
91
+ readonly item: Schema.String;
92
+ readonly nextAction: Schema.String;
93
+ readonly note: Schema.optional<Schema.String>;
94
+ readonly preparedAt: Schema.Number;
95
+ readonly recipient: Schema.String;
96
+ readonly reviewedRevision: Schema.String;
97
+ readonly source: Schema.String;
98
+ readonly state: Schema.Literals<readonly ["requested", "acknowledged", "rejected", "unavailable"]>;
99
+ }>, {
100
+ readonly nextAction: "next_action";
101
+ readonly preparedAt: "prepared_at";
102
+ readonly reviewedRevision: "reviewed_revision";
103
+ }>;
104
+ readonly id: Schema.String;
105
+ readonly prompt: Schema.String;
106
+ }>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.handoffSource", Schema.Struct<{
107
+ item: Schema.String;
108
+ }>, Schema.Struct<{
109
+ readonly context: Schema.String;
110
+ readonly id: Schema.String;
111
+ readonly item: Schema.String;
112
+ readonly reviewedRevision: Schema.String;
113
+ readonly source: Schema.String;
114
+ }>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.handoffs", Schema.Struct<{
115
+ item: Schema.String;
116
+ }>, Schema.Struct<{
117
+ readonly records: Schema.$Array<Schema.Struct<{
118
+ readonly context: Schema.String;
119
+ readonly file: Schema.String;
120
+ readonly handoff: Schema.encodeKeys<Schema.Struct<{
121
+ readonly by: Schema.optional<Schema.String>;
122
+ readonly constraints: Schema.String;
123
+ readonly goal: Schema.String;
124
+ readonly item: Schema.String;
125
+ readonly nextAction: Schema.String;
126
+ readonly note: Schema.optional<Schema.String>;
127
+ readonly preparedAt: Schema.Number;
128
+ readonly recipient: Schema.String;
129
+ readonly reviewedRevision: Schema.String;
130
+ readonly source: Schema.String;
131
+ readonly state: Schema.Literals<readonly ["requested", "acknowledged", "rejected", "unavailable"]>;
132
+ }>, {
133
+ readonly nextAction: "next_action";
134
+ readonly preparedAt: "prepared_at";
135
+ readonly reviewedRevision: "reviewed_revision";
136
+ }>;
137
+ readonly id: Schema.String;
138
+ readonly prompt: Schema.String;
139
+ }>>;
140
+ readonly unknown: Schema.$Array<Schema.String>;
141
+ }>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never>>;
142
+ //# sourceMappingURL=handoffContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoffContract.d.ts","sourceRoot":"","sources":["../../src/rpc/handoffContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAqB9D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAA2E,CAAC"}
@@ -0,0 +1,26 @@
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 { Handoff, HandoffInput, HandoffPreview, HandoffReading } from "#browser/handoffs/schema.ts";
5
+ import { ResponseFailed } from "#browser/responses/schema.ts";
6
+ import { index, workspace } from "#rpc/keys.ts";
7
+ const locate = query("handoffSource", {
8
+ payload: { item: Schema.String },
9
+ reads: () => [workspace.list, index.list],
10
+ rejections: { ResponseFailed },
11
+ success: HandoffPreview,
12
+ });
13
+ const read = query("handoffs", {
14
+ payload: { item: Schema.String },
15
+ reads: () => [workspace.list, index.list],
16
+ rejections: { ResponseFailed },
17
+ success: HandoffReading,
18
+ });
19
+ const prepare = command("prepareHandoff", {
20
+ invalidates: () => [workspace.list, index.list],
21
+ payload: HandoffInput,
22
+ rejections: { ResponseFailed },
23
+ success: Handoff,
24
+ });
25
+ export const handoffContract = contract("work-board", { commands: [prepare], queries: [locate, read] });
26
+ //# sourceMappingURL=handoffContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoffContract.js","sourceRoot":"","sources":["../../src/rpc/handoffContract.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,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,EAAE;IACrC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;IAChC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IACzC,UAAU,EAAE,EAAE,cAAc,EAAE;IAC9B,OAAO,EAAE,cAAc;CACvB,CAAC,CAAC;AACH,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;IAC9B,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;IAChC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IACzC,UAAU,EAAE,EAAE,cAAc,EAAE;IAC9B,OAAO,EAAE,cAAc;CACvB,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,YAAY;IACrB,UAAU,EAAE,EAAE,cAAc,EAAE;IAC9B,OAAO,EAAE,OAAO;CAChB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC"}
@@ -1,10 +1,12 @@
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 { handoffService } from "#handoffs/service.ts";
4
5
  import type { responseService } from "#responses/service.ts";
5
6
  import type { Snapshot } from "#search/snapshot.ts";
6
7
  export interface ServerOptions {
7
8
  readonly changes: Changes;
9
+ readonly handoffs: Effect.Success<ReturnType<typeof handoffService>>;
8
10
  readonly home: string | undefined;
9
11
  readonly index: Effect.Effect<Snapshot, unknown>;
10
12
  readonly page: (url: string) => Effect.Effect<HttpServerResponse.HttpServerResponse, unknown>;
@@ -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;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"}
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;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,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,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;IACrE,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,qTA0CjB,CAAC"}
@@ -8,9 +8,11 @@ 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, responses }) {
11
+ export const server = Effect.fn("WorkBoard.server")(function* ({ changes, handoffs, home, index, page, responses }) {
12
12
  const handlers = workRpcs.toLayer({
13
13
  "work-board.awaitResponse": responses.awaitResponse,
14
+ "work-board.handoffSource": ({ item }) => handoffs.locate(item),
15
+ "work-board.handoffs": ({ item }) => handoffs.read(item),
14
16
  "work-board.history": ({ action, baseline }) => Effect.gen(function* () {
15
17
  const now = yield* Clock.currentTimeMillis;
16
18
  const snapshot = action === "check" ? undefined : yield* index;
@@ -23,6 +25,7 @@ export const server = Effect.fn("WorkBoard.server")(function* ({ changes, home,
23
25
  }
24
26
  return Effect.succeed({ html: new TextDecoder().decode(response.body.body), status: response.status });
25
27
  }), Effect.catch((error) => Effect.fail(error instanceof ReadFailed ? error : new ReadFailed({ operation: "page", status: 500 })))),
28
+ "work-board.prepareHandoff": handoffs.prepare,
26
29
  "work-board.question": ({ item, request }) => responses.locate(item, request),
27
30
  "work-board.recordResponse": responses.record,
28
31
  "work-board.registerQuestion": responses.register,
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rpc/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAUnC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAiB;IACtH,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,0BAA0B,EAAE,SAAS,CAAC,aAAa;QACnD,oBAAoB,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;YAC/D,OAAO,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChG,uBAAuB,EAAE,GAAG,EAAE,CAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAClE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CACzF;QACF,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACb,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC3B,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACnE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,CAAC,CAAC,EACF,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAC9H;QACF,qBAAqB,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QAC7E,2BAA2B,EAAE,SAAS,CAAC,MAAM;QAC7C,6BAA6B,EAAE,SAAS,CAAC,QAAQ;QACjD,sBAAsB,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClE,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CACrH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CACrF;QACF,sBAAsB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;QACnD,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC/F,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAClI,OAAO,OAAO,CAAC,IAAI,CAClB,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,EACpF,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAC1E,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rpc/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/search/collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AAI1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAS1C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM;;mBAwB3E,MAAM,IAAI;EASrC"}
1
+ {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/search/collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AAI1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAS1C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM;;yBAwBrE,IAAI;EASrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/search/entries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/search/entries.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"linkCollector.d.ts","sourceRoot":"","sources":["../../src/search/linkCollector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,UACjC,MAAM,IAAI,UAWxB"}
1
+ {"version":3,"file":"linkCollector.d.ts","sourceRoot":"","sources":["../../src/search/linkCollector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,gBAC3B,IAAI,UAWxB"}
package/dist/serve-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.9.1";
6
+ const VERSION = "0.11.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, responses: input.responses, root: path.resolve(input.dir) }));
@@ -12,7 +12,7 @@ const workBoard = Command.make("work-board", {
12
12
  dir: Argument.directory("dir", { mustExist: true }).pipe(Argument.withDescription("The folder of markdown files to serve")),
13
13
  home: Flag.string("home").pipe(Flag.optional, Flag.withDescription("The file shown as a board at /, relative to the folder")),
14
14
  port: Flag.integer("port").pipe(Flag.withDefault(4747), Flag.withDescription(`The port to listen on at ${HOST}`)),
15
- responses: Flag.boolean("responses").pipe(Flag.withDefault(false), Flag.withDescription("Explicitly enable local durable question and response writes (Linux)")),
15
+ responses: Flag.boolean("responses").pipe(Flag.withDefault(false), Flag.withDescription("Explicitly enable local durable question, response and handoff writes (Linux)")),
16
16
  }, serve).pipe(Command.withDescription("Serve a folder of markdown files as a live page that updates in place when a file changes."));
17
17
  export function runServe() {
18
18
  Command.run(workBoard, { version: VERSION }).pipe(Effect.provide(NodeServices.layer), NodeRuntime.runMain);
@@ -1 +1 @@
1
- {"version":3,"file":"serve-cli.js","sourceRoot":"","sources":["../src/serve-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAKrD;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CACzB,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CACpI,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC7B,YAAY,EACZ;IACC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,uCAAuC,CAAC,CAAC;IAC3H,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,wDAAwD,CAAC,CAAC;IAC7H,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACjH,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EACvB,IAAI,CAAC,eAAe,CAAC,sEAAsE,CAAC,CAC5F;CACD,EACD,KAAK,CACL,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,4FAA4F,CAAC,CAAC,CAAC;AAE9H,MAAM,UAAU,QAAQ;IACvB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5G,CAAC"}
1
+ {"version":3,"file":"serve-cli.js","sourceRoot":"","sources":["../src/serve-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEzB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAKrD;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CACzB,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CACpI,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC7B,YAAY,EACZ;IACC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,uCAAuC,CAAC,CAAC;IAC3H,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,wDAAwD,CAAC,CAAC;IAC7H,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACjH,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EACvB,IAAI,CAAC,eAAe,CAAC,+EAA+E,CAAC,CACrG;CACD,EACD,KAAK,CACL,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,4FAA4F,CAAC,CAAC,CAAC;AAE9H,MAAM,UAAU,QAAQ;IACvB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5G,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,YAAY,CAAC;AAE3D,eAAO,MAAM,IAAI,cAAc,CAAC;AAEhC,MAAM,WAAW,YAAa,SAAQ,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,+SAA8F,CAAC;AAEpI,eAAO,MAAM,UAAU,GAAI,SAAS,YAAY,geACgE,CAAC"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,YAAY,CAAC;AAE3D,eAAO,MAAM,IAAI,cAAc,CAAC;AAEhC,MAAM,WAAW,YAAa,SAAQ,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,SAAU,MAAM,+SAA8F,CAAC;AAEpI,eAAO,MAAM,UAAU,YAAa,YAAY,geACgE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/views/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/views/state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/work-board",
3
- "version": "0.9.1",
3
+ "version": "0.11.0",
4
4
  "description": "Serve a folder of markdown files as a live local page that updates in place when a file changes",
5
5
  "homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/work-board#readme",
6
6
  "bugs": {
@@ -63,7 +63,7 @@
63
63
  "devDependencies": {
64
64
  "@effect/platform-node": "4.0.0-rc.112",
65
65
  "@effect/platform-node-shared": "4.0.0-rc.112",
66
- "@shivaedev/quality": "0.17.0",
66
+ "@shivaedev/quality": "0.18.0",
67
67
  "@types/hast": "3.0.5",
68
68
  "@types/mdast": "4.0.4",
69
69
  "@types/node": "24.10.1",
@@ -89,7 +89,7 @@
89
89
  "provenance": true
90
90
  },
91
91
  "scripts": {
92
- "build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" && tsc6 --project tsconfig.build.json && pnpm build:browser",
92
+ "build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" && tsc --project tsconfig.build.json && pnpm build:browser",
93
93
  "build:browser": "esbuild src/browser/entry.ts --bundle --platform=browser --format=esm --conditions=source --minify --outfile=assets/native.js && esbuild src/responses/agent-cli.ts --bundle --platform=node --format=esm --conditions=source --minify --outfile=assets/agent.js",
94
94
  "ready": "pnpm typecheck && pnpm test && pnpm build",
95
95
  "test": "pnpm test:prepare && vitest run",
package/src/board.ts CHANGED
@@ -2,6 +2,8 @@ import { Context, Effect, FileSystem, Layer, Path, type PlatformError, type Scop
2
2
  import { HttpRouter, HttpServerRequest, type HttpServerResponse } from "effect/unstable/http";
3
3
  import { watchChanges } from "#files/changes.ts";
4
4
  import { type HomeMissing, homeIn } from "#files/home.ts";
5
+ import { handoffPage } from "#handoffs/page.ts";
6
+ import { handoffService } from "#handoffs/service.ts";
5
7
  import { ASSETS, MERMAID_ROUTE, type MermaidMissing, mermaidFile, mermaidRoot, NATIVE_ROUTE, nativeAsset } from "#http/assets.ts";
6
8
  import { attachment } from "#http/attachment.ts";
7
9
  import { events } from "#http/events.ts";
@@ -19,6 +21,7 @@ import type { RenderFailed } from "#render/failed.ts";
19
21
  import { Highlighter } from "#render/highlighter.ts";
20
22
  import { responsePage } from "#responses/page.ts";
21
23
  import { responseService } from "#responses/service.ts";
24
+ import { resultPage } from "#results/page.ts";
22
25
  import { server } from "#rpc/server.ts";
23
26
  import { searchSnapshot } from "#search/snapshot.ts";
24
27
 
@@ -51,6 +54,8 @@ const routes = (options: BoardOptions) =>
51
54
  const startPage = start(changes, home);
52
55
  yield* serve("/_board/start", startPage);
53
56
  const workPage = work(index, changes, home);
57
+ const result = resultPage(index, changes, home);
58
+ yield* serve("/_board/result", result);
54
59
  const overviewPage = overview(index, changes, home);
55
60
  const historyPage = changesPage(changes, home);
56
61
  yield* serve("/_board/work", workPage);
@@ -70,6 +75,14 @@ const routes = (options: BoardOptions) =>
70
75
  });
71
76
  const replyPage = responsePage(responses, changes, home, options.responses === true);
72
77
  yield* serve("/_board/respond", replyPage);
78
+ const handoffs = yield* handoffService({
79
+ changes,
80
+ enabled: options.responses === true,
81
+ index: Effect.provideContext(index, context),
82
+ root: options.root,
83
+ });
84
+ const handoff = handoffPage(handoffs, changes, home, options.responses === true);
85
+ yield* serve("/_board/handoff", handoff);
73
86
  const pages = page({ home, root: options.root }, changes, index);
74
87
  const items = identity(index, pages, changes, home);
75
88
  yield* serve("/_board/item/*", items);
@@ -78,6 +91,12 @@ const routes = (options: BoardOptions) =>
78
91
  const pathname = new URL(url, "http://127.0.0.1").pathname;
79
92
  let selected: ReturnType<typeof pages>;
80
93
  switch (pathname) {
94
+ case "/_board/result":
95
+ selected = result(request);
96
+ break;
97
+ case "/_board/handoff":
98
+ selected = handoff(request);
99
+ break;
81
100
  case "/_board/respond":
82
101
  selected = replyPage(request);
83
102
  break;
@@ -98,7 +117,7 @@ const routes = (options: BoardOptions) =>
98
117
  }
99
118
  return Effect.provideContext(selected, context);
100
119
  }
101
- const rpc = yield* server({ changes, home, index: Effect.provideContext(index, context), page: readPage, responses });
120
+ const rpc = yield* server({ changes, handoffs, home, index: Effect.provideContext(index, context), page: readPage, responses });
102
121
  yield* serve(
103
122
  "/_board/rpc",
104
123
  (request) =>
@@ -12,6 +12,7 @@ import type { Contract } from "@shivaedev/effect-contract/contract.ts";
12
12
  import { live } from "@shivaedev/effect-contract/live.ts";
13
13
  import { type ResumeOptions, resumeSignal } from "@shivaedev/effect-contract/resume.ts";
14
14
  import { type ReadFailed, workContract, workRpcs } from "#rpc/contract.ts";
15
+ import { handoffContract } from "#rpc/handoffContract.ts";
15
16
  import { workspace } from "#rpc/keys.ts";
16
17
  import { responseContract } from "#rpc/responseContract.ts";
17
18
 
@@ -23,6 +24,7 @@ type BoundContract<TContract> =
23
24
  TContract extends Contract<infer TName, infer TQueries, infer TCommands, infer TRpcs> ? Bound<TName, TQueries, TCommands, TRpcs, Reader> : never;
24
25
  export interface BrowserClient {
25
26
  readonly api: BoundContract<typeof workContract>;
27
+ readonly handoffs: BoundContract<typeof handoffContract>;
26
28
  readonly mutate: <A, E>(effect: Effect.Effect<A, E, Reader | Reactivity.Reactivity>, signal?: AbortSignal) => Promise<A>;
27
29
  readonly read: <A, E>(atom: Atom.Atom<AsyncResult.AsyncResult<A, E>>, signal?: AbortSignal) => Promise<A>;
28
30
  readonly registry: AtomRegistry.AtomRegistry;
@@ -81,5 +83,5 @@ export function browserClient(url: string, options: ResumeOptions = {}): Browser
81
83
  return result.success;
82
84
  }
83
85
  const responses = bind(responseContract, Client);
84
- return { api, mutate, read, registry, responses, run, updates };
86
+ return { api, handoffs: bind(handoffContract, Client), mutate, read, registry, responses, run, updates };
85
87
  }
@@ -1,7 +1,9 @@
1
+ import { setupHandoffs } from "#browser/handoffs/setup.ts";
1
2
  import { setupResponses } from "#browser/responses/setup.ts";
2
3
 
3
4
  if (typeof window !== "undefined" && typeof document !== "undefined") {
4
5
  setupResponses();
6
+ setupHandoffs();
5
7
  }
6
8
 
7
9
  import { session as ownedSession } from "./session.ts";
@@ -0,0 +1,45 @@
1
+ const bound = new WeakSet<HTMLButtonElement>();
2
+ export function copyPrompts(root: ParentNode) {
3
+ for (const button of root.querySelectorAll<HTMLButtonElement>("[data-handoff-copy]")) {
4
+ if (bound.has(button)) {
5
+ continue;
6
+ }
7
+ bound.add(button);
8
+ button.addEventListener("click", async () => {
9
+ const field = document.getElementById(button.dataset.handoffCopy ?? "");
10
+ const status = button.parentElement?.querySelector("[data-copy-status]");
11
+ if (!(field instanceof HTMLTextAreaElement && status)) {
12
+ return;
13
+ }
14
+ try {
15
+ await navigator.clipboard.writeText(field.value);
16
+ status.textContent = "Prompt copied. Paste it into your existing agent session.";
17
+ } catch {
18
+ field.focus();
19
+ field.select();
20
+ status.textContent = "Clipboard unavailable. The prompt is selected; copy it manually.";
21
+ }
22
+ });
23
+ }
24
+ }
25
+ export function preparedPrompt(container: HTMLElement, id: string, prompt: string) {
26
+ const label = document.createElement("label");
27
+ label.textContent = "Prompt for your existing agent session";
28
+ const field = document.createElement("textarea");
29
+ field.id = `handoff-prompt-${id}`;
30
+ field.readOnly = true;
31
+ field.rows = 3;
32
+ field.value = prompt;
33
+ label.append(field);
34
+ const button = document.createElement("button");
35
+ button.type = "button";
36
+ button.dataset.handoffCopy = field.id;
37
+ button.textContent = "Copy tiny prompt";
38
+ const status = document.createElement("p");
39
+ status.dataset.copyStatus = "";
40
+ status.setAttribute("role", "status");
41
+ status.textContent = "Prepared; receipt not confirmed. Copy the prompt to your agent.";
42
+ container.replaceChildren(label, button, status);
43
+ container.hidden = false;
44
+ copyPrompts(container);
45
+ }
@@ -0,0 +1,50 @@
1
+ import { Option, Schema } from "effect";
2
+ import type { HandoffInput } from "#browser/handoffs/schema.ts";
3
+ import type { Draft } from "#browser/responses/drafts.ts";
4
+
5
+ const TextFields = Schema.Struct({ constraints: Schema.String, goal: Schema.String, nextAction: Schema.String });
6
+ export function handoffFields(form: HTMLFormElement) {
7
+ const recipient = form.elements.namedItem("recipient");
8
+ const goal = form.elements.namedItem("goal");
9
+ const constraints = form.elements.namedItem("constraints");
10
+ const nextAction = form.elements.namedItem("nextAction");
11
+ if (
12
+ !(
13
+ recipient instanceof HTMLInputElement
14
+ && goal instanceof HTMLTextAreaElement
15
+ && constraints instanceof HTMLTextAreaElement
16
+ && nextAction instanceof HTMLTextAreaElement
17
+ )
18
+ ) {
19
+ return undefined;
20
+ }
21
+ return { constraints, goal, nextAction, recipient };
22
+ }
23
+ export function restoreFields(fields: NonNullable<ReturnType<typeof handoffFields>>, draft: Draft) {
24
+ if (!draft.body) {
25
+ return;
26
+ }
27
+ try {
28
+ const saved = Schema.decodeUnknownOption(TextFields)(JSON.parse(draft.body));
29
+ if (Option.isSome(saved)) {
30
+ fields.constraints.value = saved.value.constraints;
31
+ fields.goal.value = saved.value.goal;
32
+ fields.nextAction.value = saved.value.nextAction;
33
+ fields.recipient.value = draft.author;
34
+ }
35
+ } catch {
36
+ fields.goal.value = draft.body;
37
+ fields.recipient.value = draft.author;
38
+ }
39
+ }
40
+ export function inputFrom(form: HTMLFormElement, draft: Draft): HandoffInput {
41
+ const fields = Schema.decodeUnknownSync(TextFields)(JSON.parse(draft.body));
42
+ return {
43
+ ...fields,
44
+ id: draft.id,
45
+ item: form.dataset.item ?? "",
46
+ recipient: draft.author,
47
+ revision: draft.revision,
48
+ source: form.dataset.source ?? "",
49
+ };
50
+ }
@@ -0,0 +1,44 @@
1
+ import { Schema } from "effect";
2
+ import { Revision } from "#browser/responses/schema.ts";
3
+ import { Identity } from "#path/Identity.ts";
4
+
5
+ const Text = Schema.String.check(Schema.isPattern(/\S/u), Schema.isMaxLength(8192));
6
+ const HandoffFields = Schema.Struct({
7
+ by: Schema.optional(Text),
8
+ constraints: Schema.String.check(Schema.isMaxLength(8192)),
9
+ goal: Text,
10
+ item: Identity,
11
+ nextAction: Text,
12
+ note: Schema.optional(Text),
13
+ preparedAt: Schema.Number.check(Schema.isFinite(), Schema.isGreaterThanOrEqualTo(0), Schema.isLessThanOrEqualTo(8_640_000_000_000_000)),
14
+ recipient: Text.check(Schema.isMaxLength(200)),
15
+ reviewedRevision: Revision,
16
+ source: Schema.String,
17
+ state: Schema.Literals(["requested", "acknowledged", "rejected", "unavailable"]),
18
+ });
19
+ export const HandoffRecord = HandoffFields.pipe(
20
+ Schema.encodeKeys({ nextAction: "next_action", preparedAt: "prepared_at", reviewedRevision: "reviewed_revision" }),
21
+ );
22
+ export type HandoffRecord = typeof HandoffRecord.Type;
23
+ export const HandoffInput = Schema.Struct({
24
+ constraints: HandoffFields.fields.constraints,
25
+ goal: HandoffFields.fields.goal,
26
+ id: Identity,
27
+ item: Identity,
28
+ nextAction: HandoffFields.fields.nextAction,
29
+ recipient: HandoffFields.fields.recipient,
30
+ revision: Revision,
31
+ source: Schema.String,
32
+ });
33
+ export type HandoffInput = typeof HandoffInput.Type;
34
+ export const Handoff = Schema.Struct({ context: Schema.String, file: Schema.String, handoff: HandoffRecord, id: Identity, prompt: Schema.String });
35
+ export type Handoff = typeof Handoff.Type;
36
+ export const HandoffReading = Schema.Struct({ records: Schema.Array(Handoff), unknown: Schema.Array(Schema.String) });
37
+ export const HandoffPreview = Schema.Struct({
38
+ context: Schema.String,
39
+ id: Identity,
40
+ item: Identity,
41
+ reviewedRevision: Revision,
42
+ source: Schema.String,
43
+ });
44
+ export type HandoffPreview = typeof HandoffPreview.Type;