@shivaedev/work-board 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/README.md +93 -2
- package/assets/agent.js +37 -0
- package/assets/native.js +32 -25
- package/dist/board.d.ts +1 -0
- package/dist/board.d.ts.map +1 -1
- package/dist/board.js +15 -2
- package/dist/board.js.map +1 -1
- package/dist/browser/client.d.ts +19 -79
- package/dist/browser/client.d.ts.map +1 -1
- package/dist/browser/client.js +12 -1
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/entry.d.ts +3 -0
- package/dist/browser/entry.d.ts.map +1 -0
- package/dist/browser/entry.js +7 -0
- package/dist/browser/entry.js.map +1 -0
- package/dist/browser/responses/draftSession.d.ts +8 -0
- package/dist/browser/responses/draftSession.d.ts.map +1 -0
- package/dist/browser/responses/draftSession.js +92 -0
- package/dist/browser/responses/draftSession.js.map +1 -0
- package/dist/browser/responses/drafts.d.ts +16 -0
- package/dist/browser/responses/drafts.d.ts.map +1 -0
- package/dist/browser/responses/drafts.js +49 -0
- package/dist/browser/responses/drafts.js.map +1 -0
- package/dist/browser/responses/preview.d.ts +3 -0
- package/dist/browser/responses/preview.d.ts.map +1 -0
- package/dist/browser/responses/preview.js +4 -0
- package/dist/browser/responses/preview.js.map +1 -0
- package/dist/browser/responses/schema.d.ts +127 -0
- package/dist/browser/responses/schema.d.ts.map +1 -0
- package/dist/browser/responses/schema.js +47 -0
- package/dist/browser/responses/schema.js.map +1 -0
- package/dist/browser/responses/setup.d.ts +2 -0
- package/dist/browser/responses/setup.d.ts.map +1 -0
- package/dist/browser/responses/setup.js +99 -0
- package/dist/browser/responses/setup.js.map +1 -0
- package/dist/browser/responses/submit.d.ts +4 -0
- package/dist/browser/responses/submit.d.ts.map +1 -0
- package/dist/browser/responses/submit.js +36 -0
- package/dist/browser/responses/submit.js.map +1 -0
- package/dist/browser/session.d.ts +1 -79
- package/dist/browser/session.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +24 -15
- package/dist/cli.js.map +1 -1
- package/dist/files/changes.d.ts +1 -0
- package/dist/files/changes.d.ts.map +1 -1
- package/dist/files/changes.js +1 -1
- package/dist/files/changes.js.map +1 -1
- package/dist/http/respond.d.ts.map +1 -1
- package/dist/http/respond.js +2 -0
- package/dist/http/respond.js.map +1 -1
- package/dist/metadata/backlinks.d.ts.map +1 -1
- package/dist/metadata/backlinks.js +2 -0
- package/dist/metadata/backlinks.js.map +1 -1
- package/dist/metadata/fields.d.ts +17 -1
- package/dist/metadata/fields.d.ts.map +1 -1
- package/dist/metadata/problems.d.ts.map +1 -1
- package/dist/metadata/problems.js +2 -0
- package/dist/metadata/problems.js.map +1 -1
- package/dist/metadata/schema.d.ts +17 -1
- package/dist/metadata/schema.d.ts.map +1 -1
- package/dist/metadata/schema.js +6 -2
- package/dist/metadata/schema.js.map +1 -1
- package/dist/page/attentionDetails.d.ts.map +1 -1
- package/dist/page/attentionDetails.js +2 -1
- package/dist/page/attentionDetails.js.map +1 -1
- package/dist/page/metadataDetails.d.ts.map +1 -1
- package/dist/page/metadataDetails.js +6 -0
- package/dist/page/metadataDetails.js.map +1 -1
- package/dist/page/navigationScript.js +1 -1
- package/dist/page/shell.d.ts +1 -1
- package/dist/page/shell.d.ts.map +1 -1
- package/dist/page/shell.js.map +1 -1
- package/dist/page/style.d.ts.map +1 -1
- package/dist/page/style.js +2 -1
- package/dist/page/style.js.map +1 -1
- package/dist/page/swap.d.ts +1 -1
- package/dist/page/swap.d.ts.map +1 -1
- package/dist/page/swap.js +3 -0
- package/dist/page/swap.js.map +1 -1
- package/dist/path/Identity.d.ts +3 -0
- package/dist/path/Identity.d.ts.map +1 -0
- package/dist/path/Identity.js +3 -0
- package/dist/path/Identity.js.map +1 -0
- package/dist/responses/agent-cli.d.ts +2 -0
- package/dist/responses/agent-cli.d.ts.map +1 -0
- package/dist/responses/agent-cli.js +31 -0
- package/dist/responses/agent-cli.js.map +1 -0
- package/dist/responses/agent.d.ts +68 -0
- package/dist/responses/agent.d.ts.map +1 -0
- package/dist/responses/agent.js +49 -0
- package/dist/responses/agent.js.map +1 -0
- package/dist/responses/await.d.ts +33 -0
- package/dist/responses/await.d.ts.map +1 -0
- package/dist/responses/await.js +21 -0
- package/dist/responses/await.js.map +1 -0
- package/dist/responses/flags.d.ts +6 -0
- package/dist/responses/flags.d.ts.map +1 -0
- package/dist/responses/flags.js +23 -0
- package/dist/responses/flags.js.map +1 -0
- package/dist/responses/locate.d.ts +13 -0
- package/dist/responses/locate.d.ts.map +1 -0
- package/dist/responses/locate.js +50 -0
- package/dist/responses/locate.js.map +1 -0
- package/dist/responses/outcome.d.ts +65 -0
- package/dist/responses/outcome.d.ts.map +1 -0
- package/dist/responses/outcome.js +14 -0
- package/dist/responses/outcome.js.map +1 -0
- package/dist/responses/page.d.ts +6 -0
- package/dist/responses/page.d.ts.map +1 -0
- package/dist/responses/page.js +25 -0
- package/dist/responses/page.js.map +1 -0
- package/dist/responses/publish.d.ts +4 -0
- package/dist/responses/publish.d.ts.map +1 -0
- package/dist/responses/publish.js +56 -0
- package/dist/responses/publish.js.map +1 -0
- package/dist/responses/publishIn.d.ts +3 -0
- package/dist/responses/publishIn.d.ts.map +1 -0
- package/dist/responses/publishIn.js +69 -0
- package/dist/responses/publishIn.js.map +1 -0
- package/dist/responses/read.d.ts +30 -0
- package/dist/responses/read.d.ts.map +1 -0
- package/dist/responses/read.js +43 -0
- package/dist/responses/read.js.map +1 -0
- package/dist/responses/records.d.ts +12 -0
- package/dist/responses/records.d.ts.map +1 -0
- package/dist/responses/records.js +47 -0
- package/dist/responses/records.js.map +1 -0
- package/dist/responses/retry.d.ts +22 -0
- package/dist/responses/retry.d.ts.map +1 -0
- package/dist/responses/retry.js +14 -0
- package/dist/responses/retry.js.map +1 -0
- package/dist/responses/service.d.ts +106 -0
- package/dist/responses/service.d.ts.map +1 -0
- package/dist/responses/service.js +90 -0
- package/dist/responses/service.js.map +1 -0
- package/dist/responses/waitFor.d.ts +31 -0
- package/dist/responses/waitFor.d.ts.map +1 -0
- package/dist/responses/waitFor.js +47 -0
- package/dist/responses/waitFor.js.map +1 -0
- package/dist/rpc/contract.d.ts +101 -2
- package/dist/rpc/contract.d.ts.map +1 -1
- package/dist/rpc/contract.js +3 -2
- package/dist/rpc/contract.js.map +1 -1
- package/dist/rpc/responseContract.d.ts +212 -0
- package/dist/rpc/responseContract.d.ts.map +1 -0
- package/dist/rpc/responseContract.js +37 -0
- package/dist/rpc/responseContract.js.map +1 -0
- package/dist/rpc/server.d.ts +3 -1
- package/dist/rpc/server.d.ts.map +1 -1
- package/dist/rpc/server.js +6 -1
- package/dist/rpc/server.js.map +1 -1
- package/dist/serve-cli.d.ts +3 -0
- package/dist/serve-cli.d.ts.map +1 -0
- package/dist/serve-cli.js +20 -0
- package/dist/serve-cli.js.map +1 -0
- package/package.json +2 -2
- package/src/board.ts +16 -2
- package/src/browser/client.ts +30 -4
- package/src/browser/entry.ts +9 -0
- package/src/browser/responses/draftSession.ts +88 -0
- package/src/browser/responses/drafts.ts +58 -0
- package/src/browser/responses/preview.ts +5 -0
- package/src/browser/responses/schema.ts +52 -0
- package/src/browser/responses/setup.ts +102 -0
- package/src/browser/responses/submit.ts +41 -0
- package/src/cli.ts +14 -22
- package/src/files/changes.ts +2 -1
- package/src/http/respond.ts +2 -0
- package/src/metadata/backlinks.ts +2 -0
- package/src/metadata/problems.ts +2 -0
- package/src/metadata/schema.ts +6 -2
- package/src/page/attentionDetails.ts +2 -1
- package/src/page/metadataDetails.ts +6 -0
- package/src/page/navigationScript.ts +1 -1
- package/src/page/shell.ts +1 -1
- package/src/page/style.ts +2 -1
- package/src/page/swap.ts +3 -0
- package/src/path/Identity.ts +3 -0
- package/src/responses/agent-cli.ts +35 -0
- package/src/responses/agent.ts +59 -0
- package/src/responses/await.ts +21 -0
- package/src/responses/flags.ts +22 -0
- package/src/responses/locate.ts +55 -0
- package/src/responses/outcome.ts +15 -0
- package/src/responses/page.ts +41 -0
- package/src/responses/publish.ts +53 -0
- package/src/responses/publishIn.ts +64 -0
- package/src/responses/read.ts +45 -0
- package/src/responses/records.ts +53 -0
- package/src/responses/retry.ts +23 -0
- package/src/responses/service.ts +106 -0
- package/src/responses/waitFor.ts +58 -0
- package/src/rpc/contract.ts +3 -2
- package/src/rpc/responseContract.ts +46 -0
- package/src/rpc/server.ts +8 -1
- package/src/serve-cli.ts +37 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Clock, Effect, FileSystem, Semaphore } from "effect";
|
|
2
|
+
import { ResponseFailed } from "#browser/responses/schema.ts";
|
|
3
|
+
import { awaitResponse } from "./await.js";
|
|
4
|
+
import { locate as locateQuestion } from "./locate.js";
|
|
5
|
+
import { publish } from "./publish.js";
|
|
6
|
+
import { readResponses } from "./read.js";
|
|
7
|
+
import { questionMarkdown, responseMarkdown } from "./records.js";
|
|
8
|
+
import { retryResponse } from "./retry.js";
|
|
9
|
+
function reject(code, message) {
|
|
10
|
+
return Effect.fail(new ResponseFailed({ code, message }));
|
|
11
|
+
}
|
|
12
|
+
const HOURS_48 = 48 * 60 * 60 * 1000;
|
|
13
|
+
export const responseService = Effect.fn("WorkBoard.responseService")(function* (options) {
|
|
14
|
+
const fs = yield* FileSystem.FileSystem;
|
|
15
|
+
const lock = yield* Semaphore.make(1);
|
|
16
|
+
const snapshot = options.index.pipe(Effect.catch(() => reject("Unavailable", "The workspace could not be indexed.")));
|
|
17
|
+
const enabled = options.enabled ? Effect.void : reject("Disabled", "Start with --responses to explicitly enable local question/response writes.");
|
|
18
|
+
const locate = locateQuestion(options.root, options.changes.realRoot, snapshot, fs);
|
|
19
|
+
const read = readResponses(snapshot);
|
|
20
|
+
function register(input) {
|
|
21
|
+
return lock.withPermit(Effect.gen(function* () {
|
|
22
|
+
yield* enabled;
|
|
23
|
+
const preview = yield* locate(input.item, input.request);
|
|
24
|
+
if (preview.reviewedRevision !== input.revision) {
|
|
25
|
+
return yield* reject("Stale", "Source changed since review. Read it again before registering this question.");
|
|
26
|
+
}
|
|
27
|
+
const data = yield* snapshot;
|
|
28
|
+
const matches = data.model.ids.get(preview.id);
|
|
29
|
+
if (matches?.length) {
|
|
30
|
+
if (matches.length !== 1 || matches[0]?.file !== `responses/${preview.id}.md`) {
|
|
31
|
+
return yield* reject("Conflict", "The registered identity moved or is duplicated. Read the existing record instead of retrying a write.");
|
|
32
|
+
}
|
|
33
|
+
const saved = (yield* read(preview.id)).question;
|
|
34
|
+
yield* publish(options.root, options.changes.realRoot, saved.id, questionMarkdown(saved));
|
|
35
|
+
return saved;
|
|
36
|
+
}
|
|
37
|
+
const now = yield* Clock.currentTimeMillis;
|
|
38
|
+
const question = {
|
|
39
|
+
context: preview.context,
|
|
40
|
+
id: preview.id,
|
|
41
|
+
question: {
|
|
42
|
+
deadline: now + HOURS_48,
|
|
43
|
+
item: preview.item,
|
|
44
|
+
reason: preview.reason,
|
|
45
|
+
registeredAt: now,
|
|
46
|
+
request: preview.request,
|
|
47
|
+
reviewedRevision: preview.reviewedRevision,
|
|
48
|
+
source: preview.source,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
yield* publish(options.root, options.changes.realRoot, question.id, questionMarkdown(question)).pipe(Effect.ensuring(options.changes.refresh ?? Effect.void));
|
|
52
|
+
return question;
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
function record(input) {
|
|
56
|
+
return lock.withPermit(Effect.gen(function* () {
|
|
57
|
+
yield* enabled;
|
|
58
|
+
const result = yield* read(input.question);
|
|
59
|
+
const existing = result.responses.find((candidate) => candidate.id === input.id);
|
|
60
|
+
if (existing) {
|
|
61
|
+
yield* retryResponse(existing, input, snapshot, options);
|
|
62
|
+
return existing;
|
|
63
|
+
}
|
|
64
|
+
const { question } = result;
|
|
65
|
+
const current = yield* locate(question.question.item, question.question.request);
|
|
66
|
+
if (current.reviewedRevision !== question.question.reviewedRevision || current.source !== question.question.source) {
|
|
67
|
+
return yield* reject("Stale", "Source changed or moved. Keep the draft and review the new revision before responding.");
|
|
68
|
+
}
|
|
69
|
+
const data = yield* snapshot;
|
|
70
|
+
if (data.model.ids.has(input.id)) {
|
|
71
|
+
return yield* reject("Conflict", "This response identity is already used.");
|
|
72
|
+
}
|
|
73
|
+
const response = {
|
|
74
|
+
body: input.body,
|
|
75
|
+
id: input.id,
|
|
76
|
+
response: {
|
|
77
|
+
author: input.author,
|
|
78
|
+
question: input.question,
|
|
79
|
+
recordedAt: result.responses.reduce((time, saved) => Math.max(time, saved.response.recordedAt + 1), yield* Clock.currentTimeMillis),
|
|
80
|
+
reviewedRevision: question.question.reviewedRevision,
|
|
81
|
+
type: input.type,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
yield* publish(options.root, options.changes.realRoot, response.id, responseMarkdown(response)).pipe(Effect.ensuring(options.changes.refresh ?? Effect.void));
|
|
85
|
+
return response;
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
return { awaitResponse: awaitResponse(read), locate, read, record, register };
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/responses/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 author: string;
|
|
24
|
+
readonly question: string;
|
|
25
|
+
readonly recordedAt: number;
|
|
26
|
+
readonly reviewedRevision: string;
|
|
27
|
+
readonly type: "answer" | "clarify" | "not_now";
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
}, Error | RpcClientError, never>;
|
|
31
|
+
//# 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"}
|
package/dist/rpc/contract.d.ts
CHANGED
|
@@ -88,7 +88,68 @@ 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.
|
|
91
|
+
export declare const workRpcs: import("effect/unstable/rpc/RpcGroup").RpcGroup<Rpc.Rpc<"work-board.recordResponse", Schema.Struct<{
|
|
92
|
+
readonly author: Schema.String;
|
|
93
|
+
readonly body: Schema.String;
|
|
94
|
+
readonly id: Schema.String;
|
|
95
|
+
readonly question: Schema.String;
|
|
96
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
97
|
+
}>, Schema.Struct<{
|
|
98
|
+
readonly body: Schema.String;
|
|
99
|
+
readonly id: Schema.String;
|
|
100
|
+
readonly response: Schema.Struct<{
|
|
101
|
+
readonly author: Schema.String;
|
|
102
|
+
readonly question: Schema.String;
|
|
103
|
+
readonly recordedAt: Schema.Number;
|
|
104
|
+
readonly reviewedRevision: Schema.String;
|
|
105
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
106
|
+
}>;
|
|
107
|
+
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.registerQuestion", Schema.Struct<{
|
|
108
|
+
item: Schema.String;
|
|
109
|
+
request: Schema.String;
|
|
110
|
+
revision: Schema.String;
|
|
111
|
+
}>, Schema.Struct<{
|
|
112
|
+
readonly context: Schema.String;
|
|
113
|
+
readonly id: Schema.String;
|
|
114
|
+
readonly question: Schema.Struct<{
|
|
115
|
+
readonly deadline: Schema.Number;
|
|
116
|
+
readonly item: Schema.String;
|
|
117
|
+
readonly reason: Schema.String;
|
|
118
|
+
readonly registeredAt: Schema.Number;
|
|
119
|
+
readonly request: Schema.String;
|
|
120
|
+
readonly reviewedRevision: Schema.String;
|
|
121
|
+
readonly source: Schema.String;
|
|
122
|
+
}>;
|
|
123
|
+
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.awaitResponse", Schema.Struct<{
|
|
124
|
+
after: Schema.optional<Schema.String>;
|
|
125
|
+
question: Schema.String;
|
|
126
|
+
}>, Schema.Struct<{
|
|
127
|
+
readonly expired: Schema.Boolean;
|
|
128
|
+
readonly question: Schema.Struct<{
|
|
129
|
+
readonly context: Schema.String;
|
|
130
|
+
readonly id: Schema.String;
|
|
131
|
+
readonly question: Schema.Struct<{
|
|
132
|
+
readonly deadline: Schema.Number;
|
|
133
|
+
readonly item: Schema.String;
|
|
134
|
+
readonly reason: Schema.String;
|
|
135
|
+
readonly registeredAt: Schema.Number;
|
|
136
|
+
readonly request: Schema.String;
|
|
137
|
+
readonly reviewedRevision: Schema.String;
|
|
138
|
+
readonly source: Schema.String;
|
|
139
|
+
}>;
|
|
140
|
+
}>;
|
|
141
|
+
readonly response: Schema.optional<Schema.Struct<{
|
|
142
|
+
readonly body: Schema.String;
|
|
143
|
+
readonly id: Schema.String;
|
|
144
|
+
readonly response: Schema.Struct<{
|
|
145
|
+
readonly author: Schema.String;
|
|
146
|
+
readonly question: Schema.String;
|
|
147
|
+
readonly recordedAt: Schema.Number;
|
|
148
|
+
readonly reviewedRevision: Schema.String;
|
|
149
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
150
|
+
}>;
|
|
151
|
+
}>>;
|
|
152
|
+
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.history", Schema.Struct<{
|
|
92
153
|
readonly action: Schema.Literals<readonly ["check", "compare", "observe"]>;
|
|
93
154
|
readonly baseline: Schema.NullOr<Schema.String>;
|
|
94
155
|
}>, Schema.Struct<{
|
|
@@ -101,7 +162,45 @@ export declare const workRpcs: import("effect/unstable/rpc/RpcGroup").RpcGroup<R
|
|
|
101
162
|
}>, Schema.Struct<{
|
|
102
163
|
readonly html: Schema.String;
|
|
103
164
|
readonly status: Schema.Number;
|
|
104
|
-
}>, Schema.Union<readonly (typeof ReadFailed)[]>, never, never> | Rpc.Rpc<"work-board.
|
|
165
|
+
}>, Schema.Union<readonly (typeof ReadFailed)[]>, never, never> | Rpc.Rpc<"work-board.question", Schema.Struct<{
|
|
166
|
+
item: Schema.String;
|
|
167
|
+
request: Schema.String;
|
|
168
|
+
}>, Schema.Struct<{
|
|
169
|
+
readonly context: Schema.String;
|
|
170
|
+
readonly id: Schema.String;
|
|
171
|
+
readonly item: Schema.String;
|
|
172
|
+
readonly reason: Schema.String;
|
|
173
|
+
readonly request: Schema.String;
|
|
174
|
+
readonly reviewedRevision: Schema.String;
|
|
175
|
+
readonly source: Schema.String;
|
|
176
|
+
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.responses", Schema.Struct<{
|
|
177
|
+
question: Schema.String;
|
|
178
|
+
}>, Schema.Struct<{
|
|
179
|
+
readonly question: Schema.Struct<{
|
|
180
|
+
readonly context: Schema.String;
|
|
181
|
+
readonly id: Schema.String;
|
|
182
|
+
readonly question: Schema.Struct<{
|
|
183
|
+
readonly deadline: Schema.Number;
|
|
184
|
+
readonly item: Schema.String;
|
|
185
|
+
readonly reason: Schema.String;
|
|
186
|
+
readonly registeredAt: Schema.Number;
|
|
187
|
+
readonly request: Schema.String;
|
|
188
|
+
readonly reviewedRevision: Schema.String;
|
|
189
|
+
readonly source: Schema.String;
|
|
190
|
+
}>;
|
|
191
|
+
}>;
|
|
192
|
+
readonly responses: Schema.$Array<Schema.Struct<{
|
|
193
|
+
readonly body: Schema.String;
|
|
194
|
+
readonly id: Schema.String;
|
|
195
|
+
readonly response: Schema.Struct<{
|
|
196
|
+
readonly author: Schema.String;
|
|
197
|
+
readonly question: Schema.String;
|
|
198
|
+
readonly recordedAt: Schema.Number;
|
|
199
|
+
readonly reviewedRevision: Schema.String;
|
|
200
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
201
|
+
}>;
|
|
202
|
+
}>>;
|
|
203
|
+
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.search", Schema.Struct<{
|
|
105
204
|
query: Schema.String;
|
|
106
205
|
}>, Schema.Struct<{
|
|
107
206
|
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;;;;;
|
|
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"}
|
package/dist/rpc/contract.js
CHANGED
|
@@ -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
|
package/dist/rpc/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/rpc/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,yCAAyC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,WAAW,EAAc,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;CAAG;AACtI,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAClC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EACxB,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,8BAA8B,CAAC;IACvC,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC;QACzD,OAAO,CACN,IAAI,KAAK,GAAG;eACT,CAAC,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/rpc/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
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 author: Schema.String;
|
|
37
|
+
readonly question: Schema.String;
|
|
38
|
+
readonly recordedAt: Schema.Number;
|
|
39
|
+
readonly reviewedRevision: Schema.String;
|
|
40
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
41
|
+
}>;
|
|
42
|
+
}>>;
|
|
43
|
+
}>, {
|
|
44
|
+
readonly ResponseFailed: typeof ResponseFailed;
|
|
45
|
+
}>, import("@shivaedev/effect-contract/operation.ts").Query<"awaitResponse", Schema.Struct<{
|
|
46
|
+
after: Schema.optional<Schema.String>;
|
|
47
|
+
question: Schema.String;
|
|
48
|
+
}>, Schema.Struct<{
|
|
49
|
+
readonly expired: Schema.Boolean;
|
|
50
|
+
readonly question: Schema.Struct<{
|
|
51
|
+
readonly context: Schema.String;
|
|
52
|
+
readonly id: Schema.String;
|
|
53
|
+
readonly question: Schema.Struct<{
|
|
54
|
+
readonly deadline: Schema.Number;
|
|
55
|
+
readonly item: Schema.String;
|
|
56
|
+
readonly reason: Schema.String;
|
|
57
|
+
readonly registeredAt: Schema.Number;
|
|
58
|
+
readonly request: Schema.String;
|
|
59
|
+
readonly reviewedRevision: Schema.String;
|
|
60
|
+
readonly source: Schema.String;
|
|
61
|
+
}>;
|
|
62
|
+
}>;
|
|
63
|
+
readonly response: Schema.optional<Schema.Struct<{
|
|
64
|
+
readonly body: Schema.String;
|
|
65
|
+
readonly id: Schema.String;
|
|
66
|
+
readonly response: Schema.Struct<{
|
|
67
|
+
readonly author: Schema.String;
|
|
68
|
+
readonly question: Schema.String;
|
|
69
|
+
readonly recordedAt: Schema.Number;
|
|
70
|
+
readonly reviewedRevision: Schema.String;
|
|
71
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
72
|
+
}>;
|
|
73
|
+
}>>;
|
|
74
|
+
}>, {
|
|
75
|
+
readonly ResponseFailed: typeof ResponseFailed;
|
|
76
|
+
}>], readonly [import("@shivaedev/effect-contract/operation.ts").Command<"registerQuestion", Schema.Struct<{
|
|
77
|
+
item: Schema.String;
|
|
78
|
+
request: Schema.String;
|
|
79
|
+
revision: Schema.String;
|
|
80
|
+
}>, Schema.Struct<{
|
|
81
|
+
readonly context: Schema.String;
|
|
82
|
+
readonly id: Schema.String;
|
|
83
|
+
readonly question: Schema.Struct<{
|
|
84
|
+
readonly deadline: Schema.Number;
|
|
85
|
+
readonly item: Schema.String;
|
|
86
|
+
readonly reason: Schema.String;
|
|
87
|
+
readonly registeredAt: Schema.Number;
|
|
88
|
+
readonly request: Schema.String;
|
|
89
|
+
readonly reviewedRevision: Schema.String;
|
|
90
|
+
readonly source: Schema.String;
|
|
91
|
+
}>;
|
|
92
|
+
}>, {
|
|
93
|
+
readonly ResponseFailed: typeof ResponseFailed;
|
|
94
|
+
}>, import("@shivaedev/effect-contract/operation.ts").Command<"recordResponse", Schema.Struct<{
|
|
95
|
+
readonly author: Schema.String;
|
|
96
|
+
readonly body: Schema.String;
|
|
97
|
+
readonly id: Schema.String;
|
|
98
|
+
readonly question: Schema.String;
|
|
99
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
100
|
+
}>, Schema.Struct<{
|
|
101
|
+
readonly body: Schema.String;
|
|
102
|
+
readonly id: Schema.String;
|
|
103
|
+
readonly response: Schema.Struct<{
|
|
104
|
+
readonly author: Schema.String;
|
|
105
|
+
readonly question: Schema.String;
|
|
106
|
+
readonly recordedAt: Schema.Number;
|
|
107
|
+
readonly reviewedRevision: Schema.String;
|
|
108
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
109
|
+
}>;
|
|
110
|
+
}>, {
|
|
111
|
+
readonly ResponseFailed: typeof ResponseFailed;
|
|
112
|
+
}>], import("effect/unstable/rpc/Rpc").Rpc<"work-board.recordResponse", Schema.Struct<{
|
|
113
|
+
readonly author: Schema.String;
|
|
114
|
+
readonly body: Schema.String;
|
|
115
|
+
readonly id: Schema.String;
|
|
116
|
+
readonly question: 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 author: Schema.String;
|
|
123
|
+
readonly question: Schema.String;
|
|
124
|
+
readonly recordedAt: Schema.Number;
|
|
125
|
+
readonly reviewedRevision: Schema.String;
|
|
126
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
127
|
+
}>;
|
|
128
|
+
}>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.registerQuestion", Schema.Struct<{
|
|
129
|
+
item: Schema.String;
|
|
130
|
+
request: Schema.String;
|
|
131
|
+
revision: Schema.String;
|
|
132
|
+
}>, Schema.Struct<{
|
|
133
|
+
readonly context: Schema.String;
|
|
134
|
+
readonly id: Schema.String;
|
|
135
|
+
readonly question: Schema.Struct<{
|
|
136
|
+
readonly deadline: Schema.Number;
|
|
137
|
+
readonly item: Schema.String;
|
|
138
|
+
readonly reason: Schema.String;
|
|
139
|
+
readonly registeredAt: Schema.Number;
|
|
140
|
+
readonly request: Schema.String;
|
|
141
|
+
readonly reviewedRevision: Schema.String;
|
|
142
|
+
readonly source: Schema.String;
|
|
143
|
+
}>;
|
|
144
|
+
}>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.awaitResponse", Schema.Struct<{
|
|
145
|
+
after: Schema.optional<Schema.String>;
|
|
146
|
+
question: Schema.String;
|
|
147
|
+
}>, Schema.Struct<{
|
|
148
|
+
readonly expired: Schema.Boolean;
|
|
149
|
+
readonly question: Schema.Struct<{
|
|
150
|
+
readonly context: Schema.String;
|
|
151
|
+
readonly id: Schema.String;
|
|
152
|
+
readonly question: Schema.Struct<{
|
|
153
|
+
readonly deadline: Schema.Number;
|
|
154
|
+
readonly item: Schema.String;
|
|
155
|
+
readonly reason: Schema.String;
|
|
156
|
+
readonly registeredAt: Schema.Number;
|
|
157
|
+
readonly request: Schema.String;
|
|
158
|
+
readonly reviewedRevision: Schema.String;
|
|
159
|
+
readonly source: Schema.String;
|
|
160
|
+
}>;
|
|
161
|
+
}>;
|
|
162
|
+
readonly response: Schema.optional<Schema.Struct<{
|
|
163
|
+
readonly body: Schema.String;
|
|
164
|
+
readonly id: Schema.String;
|
|
165
|
+
readonly response: Schema.Struct<{
|
|
166
|
+
readonly author: Schema.String;
|
|
167
|
+
readonly question: Schema.String;
|
|
168
|
+
readonly recordedAt: Schema.Number;
|
|
169
|
+
readonly reviewedRevision: Schema.String;
|
|
170
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
171
|
+
}>;
|
|
172
|
+
}>>;
|
|
173
|
+
}>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.question", Schema.Struct<{
|
|
174
|
+
item: Schema.String;
|
|
175
|
+
request: Schema.String;
|
|
176
|
+
}>, Schema.Struct<{
|
|
177
|
+
readonly context: Schema.String;
|
|
178
|
+
readonly id: Schema.String;
|
|
179
|
+
readonly item: Schema.String;
|
|
180
|
+
readonly reason: Schema.String;
|
|
181
|
+
readonly request: Schema.String;
|
|
182
|
+
readonly reviewedRevision: Schema.String;
|
|
183
|
+
readonly source: Schema.String;
|
|
184
|
+
}>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never> | import("effect/unstable/rpc/Rpc").Rpc<"work-board.responses", Schema.Struct<{
|
|
185
|
+
question: Schema.String;
|
|
186
|
+
}>, Schema.Struct<{
|
|
187
|
+
readonly question: Schema.Struct<{
|
|
188
|
+
readonly context: Schema.String;
|
|
189
|
+
readonly id: Schema.String;
|
|
190
|
+
readonly question: Schema.Struct<{
|
|
191
|
+
readonly deadline: Schema.Number;
|
|
192
|
+
readonly item: Schema.String;
|
|
193
|
+
readonly reason: Schema.String;
|
|
194
|
+
readonly registeredAt: Schema.Number;
|
|
195
|
+
readonly request: Schema.String;
|
|
196
|
+
readonly reviewedRevision: Schema.String;
|
|
197
|
+
readonly source: Schema.String;
|
|
198
|
+
}>;
|
|
199
|
+
}>;
|
|
200
|
+
readonly responses: Schema.$Array<Schema.Struct<{
|
|
201
|
+
readonly body: Schema.String;
|
|
202
|
+
readonly id: Schema.String;
|
|
203
|
+
readonly response: Schema.Struct<{
|
|
204
|
+
readonly author: Schema.String;
|
|
205
|
+
readonly question: Schema.String;
|
|
206
|
+
readonly recordedAt: Schema.Number;
|
|
207
|
+
readonly reviewedRevision: Schema.String;
|
|
208
|
+
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
209
|
+
}>;
|
|
210
|
+
}>>;
|
|
211
|
+
}>, Schema.Union<readonly (typeof ResponseFailed)[]>, never, never>>;
|
|
212
|
+
//# 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"}
|
package/dist/rpc/server.d.ts
CHANGED
|
@@ -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
|
package/dist/rpc/server.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|