@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.
- package/CHANGELOG.md +29 -0
- package/README.md +49 -1
- package/assets/native.js +35 -29
- package/dist/board.d.ts.map +1 -1
- package/dist/board.js +20 -1
- package/dist/board.js.map +1 -1
- package/dist/browser/client.d.ts +2 -0
- package/dist/browser/client.d.ts.map +1 -1
- package/dist/browser/client.js +2 -1
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/entry.d.ts.map +1 -1
- package/dist/browser/entry.js +2 -0
- package/dist/browser/entry.js.map +1 -1
- package/dist/browser/handoffs/copy.d.ts +3 -0
- package/dist/browser/handoffs/copy.d.ts.map +1 -0
- package/dist/browser/handoffs/copy.js +47 -0
- package/dist/browser/handoffs/copy.js.map +1 -0
- package/dist/browser/handoffs/fields.d.ts +11 -0
- package/dist/browser/handoffs/fields.d.ts.map +1 -0
- package/dist/browser/handoffs/fields.js +45 -0
- package/dist/browser/handoffs/fields.js.map +1 -0
- package/dist/browser/handoffs/schema.d.ts +89 -0
- package/dist/browser/handoffs/schema.d.ts.map +1 -0
- package/dist/browser/handoffs/schema.js +38 -0
- package/dist/browser/handoffs/schema.js.map +1 -0
- package/dist/browser/handoffs/setup.d.ts +2 -0
- package/dist/browser/handoffs/setup.d.ts.map +1 -0
- package/dist/browser/handoffs/setup.js +108 -0
- package/dist/browser/handoffs/setup.js.map +1 -0
- package/dist/browser/responses/draftSession.d.ts +1 -1
- package/dist/browser/responses/draftSession.d.ts.map +1 -1
- package/dist/browser/responses/draftSession.js +4 -4
- package/dist/browser/responses/draftSession.js.map +1 -1
- package/dist/browser/responses/preview.js.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/files/list.d.ts.map +1 -1
- package/dist/handoffs/html.d.ts +37 -0
- package/dist/handoffs/html.d.ts.map +1 -0
- package/dist/handoffs/html.js +31 -0
- package/dist/handoffs/html.js.map +1 -0
- package/dist/handoffs/page.d.ts +7 -0
- package/dist/handoffs/page.d.ts.map +1 -0
- package/dist/handoffs/page.js +31 -0
- package/dist/handoffs/page.js.map +1 -0
- package/dist/handoffs/records.d.ts +7 -0
- package/dist/handoffs/records.d.ts.map +1 -0
- package/dist/handoffs/records.js +30 -0
- package/dist/handoffs/records.js.map +1 -0
- package/dist/handoffs/service.d.ts +55 -0
- package/dist/handoffs/service.d.ts.map +1 -0
- package/dist/handoffs/service.js +82 -0
- package/dist/handoffs/service.js.map +1 -0
- package/dist/handoffs/source.d.ts +11 -0
- package/dist/handoffs/source.d.ts.map +1 -0
- package/dist/handoffs/source.js +31 -0
- package/dist/handoffs/source.js.map +1 -0
- package/dist/http/assets.d.ts.map +1 -1
- package/dist/http/assets.js.map +1 -1
- package/dist/http/events.d.ts.map +1 -1
- package/dist/http/loopback.d.ts.map +1 -1
- package/dist/http/page.d.ts.map +1 -1
- package/dist/http/respond.d.ts.map +1 -1
- package/dist/metadata/backlinks.d.ts.map +1 -1
- package/dist/metadata/backlinks.js +1 -0
- package/dist/metadata/backlinks.js.map +1 -1
- package/dist/metadata/fields.d.ts +14 -1
- package/dist/metadata/fields.d.ts.map +1 -1
- package/dist/metadata/model.js.map +1 -1
- package/dist/metadata/problems.d.ts.map +1 -1
- package/dist/metadata/problems.js +1 -0
- package/dist/metadata/problems.js.map +1 -1
- package/dist/metadata/schema.d.ts +18 -1
- package/dist/metadata/schema.d.ts.map +1 -1
- package/dist/metadata/schema.js +3 -1
- package/dist/metadata/schema.js.map +1 -1
- package/dist/page/escape.d.ts.map +1 -1
- package/dist/page/metadata.d.ts.map +1 -1
- package/dist/page/metadata.js +12 -4
- package/dist/page/metadata.js.map +1 -1
- package/dist/page/metadataDetails.d.ts.map +1 -1
- package/dist/page/metadataDetails.js +3 -0
- package/dist/page/metadataDetails.js.map +1 -1
- package/dist/page/nav.d.ts.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/startTemplates.d.ts +109 -3
- package/dist/page/startTemplates.d.ts.map +1 -1
- package/dist/page/startTemplates.js +20 -0
- package/dist/page/startTemplates.js.map +1 -1
- package/dist/page/style.d.ts.map +1 -1
- package/dist/page/style.js +6 -5
- 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 +2 -2
- package/dist/page/updated.d.ts.map +1 -1
- package/dist/render/board.d.ts.map +1 -1
- package/dist/render/callouts.d.ts.map +1 -1
- package/dist/render/code.d.ts.map +1 -1
- package/dist/render/documentHeadings.d.ts.map +1 -1
- package/dist/render/documentLinks.d.ts.map +1 -1
- package/dist/render/footnotes.d.ts.map +1 -1
- package/dist/render/highlighter.d.ts.map +1 -1
- package/dist/render/highlighter.js.map +1 -1
- package/dist/render/markdown.js.map +1 -1
- package/dist/render/questionnaireDocuments.d.ts.map +1 -1
- package/dist/render/visualDocuments.d.ts.map +1 -1
- package/dist/responses/agent.d.ts +8 -8
- package/dist/responses/agent.js.map +1 -1
- package/dist/responses/flags.d.ts.map +1 -1
- package/dist/responses/outcome.d.ts.map +1 -1
- package/dist/responses/publish.d.ts +1 -1
- package/dist/responses/publish.d.ts.map +1 -1
- package/dist/responses/publish.js +7 -7
- package/dist/responses/publish.js.map +1 -1
- package/dist/responses/publishIn.d.ts +1 -1
- package/dist/responses/publishIn.d.ts.map +1 -1
- package/dist/responses/publishIn.js +3 -3
- package/dist/responses/publishIn.js.map +1 -1
- package/dist/responses/waitFor.d.ts.map +1 -1
- package/dist/results/criteria.d.ts +3 -0
- package/dist/results/criteria.d.ts.map +1 -0
- package/dist/results/criteria.js +34 -0
- package/dist/results/criteria.js.map +1 -0
- package/dist/results/feedback.d.ts +7 -0
- package/dist/results/feedback.d.ts.map +1 -0
- package/dist/results/feedback.js +32 -0
- package/dist/results/feedback.js.map +1 -0
- package/dist/results/page.d.ts +7 -0
- package/dist/results/page.d.ts.map +1 -0
- package/dist/results/page.js +40 -0
- package/dist/results/page.js.map +1 -0
- package/dist/rpc/contract.d.ts +67 -1
- 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/handoffContract.d.ts +142 -0
- package/dist/rpc/handoffContract.d.ts.map +1 -0
- package/dist/rpc/handoffContract.js +26 -0
- package/dist/rpc/handoffContract.js.map +1 -0
- package/dist/rpc/server.d.ts +2 -0
- package/dist/rpc/server.d.ts.map +1 -1
- package/dist/rpc/server.js +4 -1
- package/dist/rpc/server.js.map +1 -1
- package/dist/search/collector.d.ts.map +1 -1
- package/dist/search/entries.js.map +1 -1
- package/dist/search/linkCollector.d.ts.map +1 -1
- package/dist/serve-cli.js +2 -2
- package/dist/serve-cli.js.map +1 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/views/state.js.map +1 -1
- package/package.json +3 -3
- package/src/board.ts +20 -1
- package/src/browser/client.ts +3 -1
- package/src/browser/entry.ts +2 -0
- package/src/browser/handoffs/copy.ts +45 -0
- package/src/browser/handoffs/fields.ts +50 -0
- package/src/browser/handoffs/schema.ts +44 -0
- package/src/browser/handoffs/setup.ts +113 -0
- package/src/browser/responses/draftSession.ts +11 -4
- package/src/handoffs/html.ts +42 -0
- package/src/handoffs/page.ts +45 -0
- package/src/handoffs/records.ts +34 -0
- package/src/handoffs/service.ts +103 -0
- package/src/handoffs/source.ts +35 -0
- package/src/metadata/backlinks.ts +1 -0
- package/src/metadata/problems.ts +1 -0
- package/src/metadata/schema.ts +3 -1
- package/src/page/metadata.ts +14 -4
- package/src/page/metadataDetails.ts +3 -0
- package/src/page/navigationScript.ts +1 -1
- package/src/page/shell.ts +1 -1
- package/src/page/startTemplates.ts +20 -0
- package/src/page/style.ts +6 -5
- package/src/page/swap.ts +2 -2
- package/src/responses/publish.ts +7 -7
- package/src/responses/publishIn.ts +10 -3
- package/src/results/criteria.ts +37 -0
- package/src/results/feedback.ts +44 -0
- package/src/results/page.ts +58 -0
- package/src/rpc/contract.ts +5 -2
- package/src/rpc/handoffContract.ts +26 -0
- package/src/rpc/server.ts +6 -1
- package/src/serve-cli.ts +2 -2
|
@@ -6,14 +6,6 @@ export interface AgentOptions {
|
|
|
6
6
|
readonly url: string;
|
|
7
7
|
}
|
|
8
8
|
export declare function agentRequest(action: "question" | "response" | "wait", options: AgentOptions, diagnostic?: (text: string) => void): Effect.Effect<{
|
|
9
|
-
readonly context: string;
|
|
10
|
-
readonly id: string;
|
|
11
|
-
readonly item: string;
|
|
12
|
-
readonly reason: string;
|
|
13
|
-
readonly request: string;
|
|
14
|
-
readonly reviewedRevision: string;
|
|
15
|
-
readonly source: string;
|
|
16
|
-
} | {
|
|
17
9
|
readonly question: {
|
|
18
10
|
readonly context: string;
|
|
19
11
|
readonly id: string;
|
|
@@ -44,6 +36,14 @@ export declare function agentRequest(action: "question" | "response" | "wait", o
|
|
|
44
36
|
readonly type: "answer" | "clarify" | "not_now";
|
|
45
37
|
};
|
|
46
38
|
}[];
|
|
39
|
+
} | {
|
|
40
|
+
readonly context: string;
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly item: string;
|
|
43
|
+
readonly reason: string;
|
|
44
|
+
readonly request: string;
|
|
45
|
+
readonly reviewedRevision: string;
|
|
46
|
+
readonly source: string;
|
|
47
47
|
} | {
|
|
48
48
|
readonly kind: "response";
|
|
49
49
|
readonly question: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/responses/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,sCAAsC,CAAC;AACvE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,gBAAgB,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQ/C,SAAS,QAAQ,CAAC,GAAW;IAC5B,OAAO,SAAS,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpJ,CAAC;AACD,SAAS,QAAQ,CAAC,GAAW;IAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IACC,MAAM,CAAC,QAAQ,KAAK,OAAO;WACxB,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;WAC9D,MAAM,CAAC,QAAQ;WACf,MAAM,CAAC,QAAQ;WACf,MAAM,CAAC,QAAQ,KAAK,GAAG;WACvB,MAAM,CAAC,MAAM;WACb,MAAM,CAAC,IAAI,EACb,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACtB,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,MAAwC,EAAE,OAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/responses/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/responses/flags.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/responses/flags.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE;IAoBnC,KAAK;IAAyB,QAAQ;IAA4B,GAAG;EAC9E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../src/responses/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAE5D,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../src/responses/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAE5D,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM;mBAG/D,gBAAgB;;;;mBAIhB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAGd,YAAY;;;;;;;;;;;;;;;;mBACZ,SAAS;;;;;;;;;;;;;;EACrB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { ResponseFailed } from "#browser/responses/schema.ts";
|
|
3
|
-
export declare function publish(root: string, realRoot: string, id: string, content: string): Effect.Effect<void, ResponseFailed, never>;
|
|
3
|
+
export declare function publish(root: string, realRoot: string, id: string, content: string, namespace?: "responses" | "handoffs"): Effect.Effect<void, ResponseFailed, never>;
|
|
4
4
|
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/responses/publish.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAW9D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/responses/publish.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAW9D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,WAAW,GAAG,UAAwB,8CAsCrI"}
|
|
@@ -8,20 +8,20 @@ function failure(cause) {
|
|
|
8
8
|
? cause
|
|
9
9
|
: new ResponseFailed({
|
|
10
10
|
code: "Unavailable",
|
|
11
|
-
message: "The
|
|
11
|
+
message: "The local record could not be recorded. Keep the draft and retry after checking local filesystem access.",
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
-
export function publish(root, realRoot, id, content) {
|
|
14
|
+
export function publish(root, realRoot, id, content, namespace = "responses") {
|
|
15
15
|
return Effect.tryPromise({
|
|
16
16
|
catch: failure,
|
|
17
17
|
try: async () => {
|
|
18
18
|
if (/^[a-zA-Z\d][a-zA-Z\d._-]*$/u.exec(id) === null) {
|
|
19
|
-
throw new ResponseFailed({ code: "Conflict", message: "Invalid
|
|
19
|
+
throw new ResponseFailed({ code: "Conflict", message: "Invalid record identity." });
|
|
20
20
|
}
|
|
21
21
|
if (process.platform !== "linux") {
|
|
22
22
|
throw new ResponseFailed({
|
|
23
23
|
code: "Unsupported",
|
|
24
|
-
message: "
|
|
24
|
+
message: "Local record publication currently requires Linux directory descriptors. Reading remains available.",
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
const directory = await open(root, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
|
|
@@ -31,7 +31,7 @@ export function publish(root, realRoot, id, content) {
|
|
|
31
31
|
throw new ResponseFailed({ code: "Conflict", message: "The workspace root changed. Restart against the intended root." });
|
|
32
32
|
}
|
|
33
33
|
try {
|
|
34
|
-
await mkdir(`${base}
|
|
34
|
+
await mkdir(`${base}/${namespace}`);
|
|
35
35
|
}
|
|
36
36
|
catch (cause) {
|
|
37
37
|
if (!(cause instanceof Error && "code" in cause && cause.code === "EEXIST")) {
|
|
@@ -39,9 +39,9 @@ export function publish(root, realRoot, id, content) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
await directory.sync();
|
|
42
|
-
const target = await open(`${base}
|
|
42
|
+
const target = await open(`${base}/${namespace}`, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
|
|
43
43
|
try {
|
|
44
|
-
await publishIn(target, root, realRoot, id, content);
|
|
44
|
+
await publishIn(target, root, realRoot, id, content, namespace);
|
|
45
45
|
}
|
|
46
46
|
finally {
|
|
47
47
|
await target.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/responses/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,SAAS,OAAO,CAAC,KAAc;IAC9B,OAAO,KAAK,YAAY,cAAc;QACrC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,cAAc,CAAC;YACnB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/responses/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,SAAS,OAAO,CAAC,KAAc;IAC9B,OAAO,KAAK,YAAY,cAAc;QACrC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,cAAc,CAAC;YACnB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,0GAA0G;SACnH,CAAC,CAAC;AACN,CAAC;AACD,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,QAAgB,EAAE,EAAU,EAAE,OAAe,EAAE,SAAS,GAA6B,WAAW;IACrI,OAAO,MAAM,CAAC,UAAU,CAAC;QACxB,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,KAAK,IAAI,EAAE;YACf,IAAI,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrD,MAAM,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,IAAI,cAAc,CAAC;oBACxB,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,qGAAqG;iBAC9G,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACtG,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,iBAAiB,SAAS,CAAC,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChF,MAAM,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,gEAAgE,EAAE,CAAC,CAAC;gBAC3H,CAAC;gBACD,IAAI,CAAC;oBACJ,MAAM,KAAK,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;gBACrC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;wBAC7E,MAAM,KAAK,CAAC;oBACb,CAAC;gBACF,CAAC;gBACD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;gBACrH,IAAI,CAAC;oBACJ,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACjE,CAAC;wBAAS,CAAC;oBACV,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtB,CAAC;YACF,CAAC;oBAAS,CAAC;gBACV,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC;QACF,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type FileHandle } from "node:fs/promises";
|
|
2
|
-
export declare function publishIn(target: FileHandle, root: string, realRoot: string, id: string, content: string): Promise<void>;
|
|
2
|
+
export declare function publishIn(target: FileHandle, root: string, realRoot: string, id: string, content: string, namespace?: "responses" | "handoffs"): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=publishIn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishIn.d.ts","sourceRoot":"","sources":["../../src/responses/publishIn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAA0C,MAAM,kBAAkB,CAAC;AA4B3F,wBAAsB,SAAS,
|
|
1
|
+
{"version":3,"file":"publishIn.d.ts","sourceRoot":"","sources":["../../src/responses/publishIn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAA0C,MAAM,kBAAkB,CAAC;AA4B3F,wBAAsB,SAAS,CAC9B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,WAAW,GAAG,UAAwB,iBAkCjD"}
|
|
@@ -3,7 +3,7 @@ import { constants } from "node:fs";
|
|
|
3
3
|
import { link, open, readFile, realpath, unlink } from "node:fs/promises";
|
|
4
4
|
import { ResponseFailed } from "#browser/responses/schema.ts";
|
|
5
5
|
function uncertain(cause) {
|
|
6
|
-
return new ResponseFailed({ cause, code: "Uncertain", message: "Publication may have completed. Re-read the
|
|
6
|
+
return new ResponseFailed({ cause, code: "Uncertain", message: "Publication may have completed. Re-read the record identity before retrying." });
|
|
7
7
|
}
|
|
8
8
|
function exists(cause) {
|
|
9
9
|
return cause instanceof Error && "code" in cause && cause.code === "EEXIST";
|
|
@@ -29,9 +29,9 @@ async function linkOrReconcile(temporary, name, content) {
|
|
|
29
29
|
}
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
|
-
export async function publishIn(target, root, realRoot, id, content) {
|
|
32
|
+
export async function publishIn(target, root, realRoot, id, content, namespace = "responses") {
|
|
33
33
|
const folder = `/proc/self/fd/${target.fd}`;
|
|
34
|
-
const expected = `${realRoot}
|
|
34
|
+
const expected = `${realRoot}/${namespace}`;
|
|
35
35
|
async function validate() {
|
|
36
36
|
if ((await realpath(folder)) !== expected || (await realpath(root)) !== realRoot) {
|
|
37
37
|
throw new ResponseFailed({ code: "Conflict", message: "The write boundary changed." });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishIn.js","sourceRoot":"","sources":["../../src/responses/publishIn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAmB,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,SAAS,SAAS,CAAC,KAAc;IAChC,OAAO,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"publishIn.js","sourceRoot":"","sources":["../../src/responses/publishIn.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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
|
|
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;mBApBH,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAkDxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../src/results/criteria.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA4B1E,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAOrF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { referenceTarget } from "#metadata/links.ts";
|
|
2
|
+
import { escapeHtml } from "#page/escape.ts";
|
|
3
|
+
import { referenceHtml, sourceHtml, valueHtml } from "#page/metadataLinks.ts";
|
|
4
|
+
function criterionRow(reference, text, result, model) {
|
|
5
|
+
if (!referenceTarget(reference, model)) {
|
|
6
|
+
return `<li>${escapeHtml(text)} — criterion identity is ambiguous; evidence association unavailable.</li>`;
|
|
7
|
+
}
|
|
8
|
+
const claims = result.parsed.fields.evidence?.filter((claim) => claim.criterion === reference) ?? [];
|
|
9
|
+
const evidence = claims.length > 0
|
|
10
|
+
? `<p>${claims.length} recorded claim(s) in this result; not verified acceptance.</p><ul>${claims.map((claim) => `<li>${sourceHtml(claim.source, result.file, model)}<dl><dt>Checked Git revision (reported)</dt><dd>${valueHtml(claim.checkedRevision)}</dd><dt>Method</dt><dd>${valueHtml(claim.method)}</dd><dt>Outcome (reported)</dt><dd>${valueHtml(claim.outcome)}</dd><dt>Observed time</dt><dd>${valueHtml(claim.observedAt)}</dd></dl></li>`).join("")}</ul>`
|
|
11
|
+
: "<p>No recorded evidence in this result naming this criterion. Acceptance is not established.</p>";
|
|
12
|
+
return `<li>${referenceHtml(text, reference, model)}${evidence}</li>`;
|
|
13
|
+
}
|
|
14
|
+
function targetRow(target, result, model) {
|
|
15
|
+
const [id, criterion] = target.split("#");
|
|
16
|
+
const document = model.ids.get(id ?? "")?.[0];
|
|
17
|
+
if (!(document && referenceTarget(target, model))) {
|
|
18
|
+
return `<li>${referenceHtml(target, target, model)} — criteria unavailable.</li>`;
|
|
19
|
+
}
|
|
20
|
+
const criteria = (document.parsed.fields.criteria ?? []).filter((item) => !criterion || item.id === criterion);
|
|
21
|
+
const rows = criteria.length > 0
|
|
22
|
+
? `<ul>${criteria.map((item) => criterionRow(`${id}#${item.id}`, item.text, result, model)).join("")}</ul>`
|
|
23
|
+
: "<p>No criteria declared in this source.</p>";
|
|
24
|
+
return `<li>${referenceHtml(target, target, model)} · source status: ${valueHtml(document.parsed.fields.status)}${rows}</li>`;
|
|
25
|
+
}
|
|
26
|
+
export function resultCriteria(result, model) {
|
|
27
|
+
const targets = new Set(result.parsed.fields.relationships?.map((link) => link.target));
|
|
28
|
+
if (result.parsed.fields.id) {
|
|
29
|
+
targets.add(result.parsed.fields.id);
|
|
30
|
+
}
|
|
31
|
+
const rows = [...targets].map((target) => targetRow(target, result, model));
|
|
32
|
+
return `<section id="result-criteria"><h2>Criteria and this result’s claims</h2><p>Only explicit relationships and criterion references are associated. Missing provenance stays missing. Git revisions are authored records; Work Board does not compare them with the current checkout. Evidence freshness is unknown.</p>${rows.length > 0 ? `<ul>${rows.join("")}</ul>` : "<p>No explicitly linked work or criteria.</p>"}<p>${escapeHtml(result.file)} does not change the linked work’s status.</p></section>`;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=criteria.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"criteria.js","sourceRoot":"","sources":["../../src/results/criteria.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { MetadataDocument } from "#metadata/model.ts";
|
|
3
|
+
import type { RenderFailed } from "#render/failed.ts";
|
|
4
|
+
import type { Highlighter } from "#render/highlighter.ts";
|
|
5
|
+
import type { Snapshot } from "#search/snapshot.ts";
|
|
6
|
+
export declare const resultFeedback: (result: MetadataDocument, data: Snapshot) => Effect.Effect<string, RenderFailed, Highlighter>;
|
|
7
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/results/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,eAAO,MAAM,cAAc,gGAgCzB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { fileUrl } from "#files/url.ts";
|
|
3
|
+
import { escapeHtml } from "#page/escape.ts";
|
|
4
|
+
import { renderMarkdown } from "#render/markdown.ts";
|
|
5
|
+
import { readResponses } from "#responses/read.ts";
|
|
6
|
+
import { malformedResponse, questionFrom, revisionOf } from "#responses/records.ts";
|
|
7
|
+
export const resultFeedback = Effect.fn("WorkBoard.resultFeedback")(function* (result, data) {
|
|
8
|
+
const unknown = data.unavailable.length > 0
|
|
9
|
+
|| data.documents.some((document) => malformedResponse(document) || (document.parsed.fields.kind === "question" && !questionFrom(document)));
|
|
10
|
+
const questions = data.documents.flatMap((document) => {
|
|
11
|
+
const question = questionFrom(document);
|
|
12
|
+
return question && question.question.item === result.parsed.fields.id ? [question] : [];
|
|
13
|
+
});
|
|
14
|
+
const read = readResponses(Effect.succeed(data));
|
|
15
|
+
const readings = yield* Effect.forEach(questions, (question) => Effect.result(read(question.id)));
|
|
16
|
+
if (unknown || readings.some((reading) => reading._tag === "Failure")) {
|
|
17
|
+
return '<section id="result-feedback"><h2>Recorded human feedback</h2><p role="status">Response history is unknown or ambiguous. Unreadable records do not establish that no feedback exists. Read the source files before relying on it.</p></section>';
|
|
18
|
+
}
|
|
19
|
+
const current = revisionOf((result.parsed.raw ?? "") + result.parsed.body);
|
|
20
|
+
const records = readings.flatMap((reading) => reading._tag === "Success" ? reading.success.responses.map((response) => ({ question: reading.success.question, response })) : []);
|
|
21
|
+
records.sort((a, b) => b.response.response.recordedAt - a.response.response.recordedAt || a.response.id.localeCompare(b.response.id));
|
|
22
|
+
const bodies = yield* Effect.forEach(records, ({ question, response }) => Effect.gen(function* () {
|
|
23
|
+
const matching = question.question.reviewedRevision === current && question.question.source === result.file;
|
|
24
|
+
const responseFile = data.model.ids.get(response.id)?.[0]?.file ?? `responses/${response.id}.md`;
|
|
25
|
+
const questionFile = data.model.ids.get(question.id)?.[0]?.file ?? `responses/${question.id}.md`;
|
|
26
|
+
const body = yield* renderMarkdown(response.body, { file: responseFile, safe: true });
|
|
27
|
+
const selected = response.response.answers?.map((answer) => `${answer.prompt}: ${answer.selected.join(", ") || "text only"}`).join("; ");
|
|
28
|
+
return `<article id="${escapeHtml(response.id)}"><h3>${escapeHtml(response.response.author)} · ${escapeHtml(response.response.type)}</h3><p><b>${matching ? "Feedback on this exact result revision" : "Earlier or moved result context — does not apply automatically to this revision"}</b></p><p>Reviewed source: ${escapeHtml(question.question.source)} · SHA-256 <code>${question.question.reviewedRevision}</code></p>${selected ? `<p>Recorded option IDs: ${escapeHtml(selected)}. Labels and reasoning are recorded below.</p>` : ""}${response.response.supersedes ? `<p>Explicitly supersedes <a href="${fileUrl(data.model.ids.get(response.response.supersedes)?.[0]?.file ?? `responses/${response.response.supersedes}.md`)}">${escapeHtml(response.response.supersedes)}</a>.</p>` : ""}${body}<p><a href="${fileUrl(responseFile)}">Response source</a> · <a href="${fileUrl(questionFile)}">Registered reviewed context</a></p><details><summary>Exact reviewed result source</summary><pre>${escapeHtml(question.context)}</pre></details></article>`;
|
|
29
|
+
}));
|
|
30
|
+
return `<section id="result-feedback"><h2>Recorded human feedback</h2><p>Human direction is pinned to its reviewed report. Option IDs and authored acceptance text are not a computed verified-acceptance state. Completing a run or receiving feedback does not change work status.</p>${bodies.join("") || "<p>No readable response is recorded for this result.</p>"}</section>`;
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/results/feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Effect, type FileSystem, type Path, type PlatformError } from "effect";
|
|
2
|
+
import type { HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
|
|
3
|
+
import type { Changes } from "#files/changes.ts";
|
|
4
|
+
import type { Highlighter } from "#render/highlighter.ts";
|
|
5
|
+
import type { Snapshot } from "#search/snapshot.ts";
|
|
6
|
+
export declare function resultPage(index: Effect.Effect<Snapshot, unknown, FileSystem.FileSystem | Path.Path>, changes: Changes, home: string | undefined): (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<HttpServerResponse.HttpServerResponse, PlatformError.PlatformError, FileSystem.FileSystem | Highlighter | Path.Path>;
|
|
7
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/results/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAQjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAepD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,wLA2BhJ"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { fileUrl } from "#files/url.ts";
|
|
3
|
+
import { respond } from "#http/respond.ts";
|
|
4
|
+
import { escapeHtml } from "#page/escape.ts";
|
|
5
|
+
import { metadataHtml } from "#page/metadata.ts";
|
|
6
|
+
import { navHtml } from "#page/nav.ts";
|
|
7
|
+
import { shell } from "#page/shell.ts";
|
|
8
|
+
import { renderMarkdown } from "#render/markdown.ts";
|
|
9
|
+
import { revisionOf } from "#responses/records.ts";
|
|
10
|
+
import { resultCriteria } from "#results/criteria.ts";
|
|
11
|
+
import { resultFeedback } from "#results/feedback.ts";
|
|
12
|
+
function reviewActions(result) {
|
|
13
|
+
const requests = result.parsed.fields.attention ?? [];
|
|
14
|
+
const actions = requests
|
|
15
|
+
.filter((attention) => attention.kind === "review" && attention.state === "open" && requests.filter((other) => other.id === attention.id).length === 1)
|
|
16
|
+
.map((attention) => `<li><a href="/_board/respond?item=${encodeURIComponent(result.parsed.fields.id ?? "")}&request=${encodeURIComponent(attention.id)}">Review ${escapeHtml(attention.id)}</a> — ${escapeHtml(attention.reason)}</li>`);
|
|
17
|
+
return `<section id="result-actions"><h2>Respond to this report</h2>${actions.length > 0 ? `<ul>${actions.join("")}</ul>` : "<p>No unique open review request is declared. The agent can add an explicit attention review and Markdown question packet with ordinary file editing. Work Board does not infer one from status.</p>"}</section>`;
|
|
18
|
+
}
|
|
19
|
+
export function resultPage(index, changes, home) {
|
|
20
|
+
return Effect.fn("WorkBoard.resultPage")(function* (request) {
|
|
21
|
+
const item = new URL(request.url, "http://127.0.0.1").searchParams.get("item") ?? "";
|
|
22
|
+
const files = yield* changes.files;
|
|
23
|
+
function layout(body, status = 200) {
|
|
24
|
+
return respond(shell("Result review", navHtml(files, "", home), body, changes.realRoot, false, undefined, "result"), "text/html", status);
|
|
25
|
+
}
|
|
26
|
+
return yield* Effect.gen(function* () {
|
|
27
|
+
const data = yield* index;
|
|
28
|
+
const matches = data.model.ids.get(item);
|
|
29
|
+
const result = matches?.length === 1 ? matches[0] : undefined;
|
|
30
|
+
if (result?.parsed.fields.kind !== "result" || data.unavailable.length > 0) {
|
|
31
|
+
return layout('<h1>Result unavailable</h1><p role="status">Choose one uniquely identified, readable result. Missing or ambiguous work is not accepted.</p>', 409);
|
|
32
|
+
}
|
|
33
|
+
const report = yield* renderMarkdown(result.parsed.body, { file: result.file, safe: true });
|
|
34
|
+
const feedback = yield* resultFeedback(result, data);
|
|
35
|
+
const revision = revisionOf((result.parsed.raw ?? "") + result.parsed.body);
|
|
36
|
+
return layout(`<section class="response-panel"><h1>Review returned result · ${escapeHtml(item)}</h1><p>Result status (source): <b>${escapeHtml(result.parsed.fields.status ?? "Not recorded")}</b>. This is a supplied claim, not an execution receipt or work acceptance.</p><p>Current report SHA-256: <code>${revision}</code> · <a href="${fileUrl(result.file)}">Read source</a></p>${metadataHtml(result.parsed, result.file, data.model)}${reviewActions(result)}${resultCriteria(result, data.model)}<section id="result-report"><h2>Report, evidence and limitations</h2>${report}</section>${feedback}</section>`);
|
|
37
|
+
}).pipe(Effect.catch((error) => Effect.succeed(layout(`<h1>Result review unavailable</h1><p>${escapeHtml(String(error))}</p>`, 409))));
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/results/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkD,MAAM,QAAQ,CAAC;AAGhF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,SAAS,aAAa,CAAC,MAAwB;IAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,QAAQ;SACtB,MAAM,CACN,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAC9I;SACA,GAAG,CACH,CAAC,SAAS,EAAE,EAAE,CACb,qCAAqC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CACxN,CAAC;IACH,OAAO,+DAA+D,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,sMAAsM,YAAY,CAAC;AAChV,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAA0E,EAAE,OAAgB,EAAE,IAAwB;IAChJ,OAAO,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EACjD,OAA4C;QAE5C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrF,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACnC,SAAS,MAAM,CAAC,IAAY,EAAE,MAAM,GAAG,GAAG;YACzC,OAAO,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3I,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,IAAI,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5E,OAAO,MAAM,CACZ,6IAA6I,EAC7I,GAAG,CACH,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5E,OAAO,MAAM,CACZ,gEAAgE,UAAU,CAAC,IAAI,CAAC,sCAAsC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,oHAAoH,QAAQ,sBAAsB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,wEAAwE,MAAM,aAAa,QAAQ,YAAY,CAC7kB,CAAC;QACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,wCAAwC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxI,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/rpc/contract.d.ts
CHANGED
|
@@ -88,7 +88,38 @@ 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.prepareHandoff", Schema.Struct<{
|
|
92
|
+
readonly constraints: Schema.String;
|
|
93
|
+
readonly goal: Schema.String;
|
|
94
|
+
readonly id: Schema.String;
|
|
95
|
+
readonly item: Schema.String;
|
|
96
|
+
readonly nextAction: Schema.String;
|
|
97
|
+
readonly recipient: Schema.String;
|
|
98
|
+
readonly revision: Schema.String;
|
|
99
|
+
readonly source: Schema.String;
|
|
100
|
+
}>, Schema.Struct<{
|
|
101
|
+
readonly context: Schema.String;
|
|
102
|
+
readonly file: Schema.String;
|
|
103
|
+
readonly handoff: Schema.encodeKeys<Schema.Struct<{
|
|
104
|
+
readonly by: Schema.optional<Schema.String>;
|
|
105
|
+
readonly constraints: Schema.String;
|
|
106
|
+
readonly goal: Schema.String;
|
|
107
|
+
readonly item: Schema.String;
|
|
108
|
+
readonly nextAction: Schema.String;
|
|
109
|
+
readonly note: Schema.optional<Schema.String>;
|
|
110
|
+
readonly preparedAt: Schema.Number;
|
|
111
|
+
readonly recipient: Schema.String;
|
|
112
|
+
readonly reviewedRevision: Schema.String;
|
|
113
|
+
readonly source: Schema.String;
|
|
114
|
+
readonly state: Schema.Literals<readonly ["requested", "acknowledged", "rejected", "unavailable"]>;
|
|
115
|
+
}>, {
|
|
116
|
+
readonly nextAction: "next_action";
|
|
117
|
+
readonly preparedAt: "prepared_at";
|
|
118
|
+
readonly reviewedRevision: "reviewed_revision";
|
|
119
|
+
}>;
|
|
120
|
+
readonly id: Schema.String;
|
|
121
|
+
readonly prompt: Schema.String;
|
|
122
|
+
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.recordResponse", Schema.Struct<{
|
|
92
123
|
readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
93
124
|
readonly prompt: Schema.String;
|
|
94
125
|
readonly selected: Schema.$Array<Schema.String>;
|
|
@@ -167,6 +198,41 @@ export declare const workRpcs: import("effect/unstable/rpc/RpcGroup").RpcGroup<R
|
|
|
167
198
|
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
168
199
|
}>;
|
|
169
200
|
}>>;
|
|
201
|
+
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.handoffSource", Schema.Struct<{
|
|
202
|
+
item: Schema.String;
|
|
203
|
+
}>, Schema.Struct<{
|
|
204
|
+
readonly context: Schema.String;
|
|
205
|
+
readonly id: Schema.String;
|
|
206
|
+
readonly item: Schema.String;
|
|
207
|
+
readonly reviewedRevision: Schema.String;
|
|
208
|
+
readonly source: Schema.String;
|
|
209
|
+
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.handoffs", Schema.Struct<{
|
|
210
|
+
item: Schema.String;
|
|
211
|
+
}>, Schema.Struct<{
|
|
212
|
+
readonly records: Schema.$Array<Schema.Struct<{
|
|
213
|
+
readonly context: Schema.String;
|
|
214
|
+
readonly file: Schema.String;
|
|
215
|
+
readonly handoff: Schema.encodeKeys<Schema.Struct<{
|
|
216
|
+
readonly by: Schema.optional<Schema.String>;
|
|
217
|
+
readonly constraints: Schema.String;
|
|
218
|
+
readonly goal: Schema.String;
|
|
219
|
+
readonly item: Schema.String;
|
|
220
|
+
readonly nextAction: Schema.String;
|
|
221
|
+
readonly note: Schema.optional<Schema.String>;
|
|
222
|
+
readonly preparedAt: Schema.Number;
|
|
223
|
+
readonly recipient: Schema.String;
|
|
224
|
+
readonly reviewedRevision: Schema.String;
|
|
225
|
+
readonly source: Schema.String;
|
|
226
|
+
readonly state: Schema.Literals<readonly ["requested", "acknowledged", "rejected", "unavailable"]>;
|
|
227
|
+
}>, {
|
|
228
|
+
readonly nextAction: "next_action";
|
|
229
|
+
readonly preparedAt: "prepared_at";
|
|
230
|
+
readonly reviewedRevision: "reviewed_revision";
|
|
231
|
+
}>;
|
|
232
|
+
readonly id: Schema.String;
|
|
233
|
+
readonly prompt: Schema.String;
|
|
234
|
+
}>>;
|
|
235
|
+
readonly unknown: Schema.$Array<Schema.String>;
|
|
170
236
|
}>, Schema.Union<readonly typeof import("../browser/responses/schema.ts").ResponseFailed[]>, never, never> | Rpc.Rpc<"work-board.history", Schema.Struct<{
|
|
171
237
|
readonly action: Schema.Literals<readonly ["check", "compare", "observe"]>;
|
|
172
238
|
readonly baseline: Schema.NullOr<Schema.String>;
|
|
@@ -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;;;;;AAU1C,qBAAa,UAAW,SAAQ,eAAmG;CAAG;AAoDtI,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAAwG,CAAC;AAClI,eAAO,MAAM,SAAS;;;;;;;;;;;;qDAA2F,CAAC;AAClH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAA6E,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 { handoffContract } from "#rpc/handoffContract.ts";
|
|
7
8
|
import { responseContract } from "#rpc/responseContract.ts";
|
|
8
9
|
import { index, navigation, watcher, workspace } from "./keys.js";
|
|
9
10
|
import { pageKeys } from "./pageKeys.js";
|
|
@@ -16,7 +17,7 @@ const PageUrl = Schema.String.check(Schema.isMaxLength(8192), Schema.makeFilter(
|
|
|
16
17
|
try {
|
|
17
18
|
const path = new URL(value, "http://127.0.0.1").pathname;
|
|
18
19
|
return (path === "/"
|
|
19
|
-
|| ["/_board/work", "/_board/overview", "/_board/changes", "/_board/start", "/_board/respond"].includes(path)
|
|
20
|
+
|| ["/_board/work", "/_board/overview", "/_board/changes", "/_board/start", "/_board/respond", "/_board/handoff", "/_board/result"].includes(path)
|
|
20
21
|
|| /^\/_board\/item\/[^/]+\/$/u.exec(path) !== null
|
|
21
22
|
|| /\.md$/iu.exec(path) !== null
|
|
22
23
|
|| "Expected a local reading URL");
|
|
@@ -56,5 +57,5 @@ const ReadWatcher = query("watcher", {
|
|
|
56
57
|
});
|
|
57
58
|
export const workContract = contract("work-board", { queries: [ReadPage, ReadNavigation, ReadSearch, ReadHistory, ReadWatcher] });
|
|
58
59
|
export const Subscribe = Rpc.make("work-board.subscribe", { error: ReadFailed, stream: true, success: LiveHint });
|
|
59
|
-
export const workRpcs = workContract.add(Subscribe).merge(responseContract);
|
|
60
|
+
export const workRpcs = workContract.add(Subscribe).merge(responseContract).merge(handoffContract);
|
|
60
61
|
//# 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,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,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,EAAE,iBAAiB,CAAC,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/rpc/contract.ts"],"names":[],"mappings":"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"}
|