@shiyuphan/follow-me 0.7.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/dist/src/cli.js +181 -42
- package/dist/src/comments.js +215 -9
- package/dist/src/coverage.js +163 -25
- package/dist/src/host.js +23 -0
- package/dist/src/plan.js +128 -6
- package/dist/src/prompt.js +55 -2
- package/dist/src/refs.js +239 -0
- package/dist/src/server.js +65 -3
- package/dist/src/session.js +1 -0
- package/dist/ui/dist/assets/{abnfDiagram-WEYOIA3C-cHEJvcBn.js → abnfDiagram-WEYOIA3C-DztIEwNE.js} +1 -1
- package/dist/ui/dist/assets/{arc-xolFyc0v.js → arc-DUYh-EqZ.js} +1 -1
- package/dist/ui/dist/assets/{architecture-WOLXFQ4H-B3hvvNV2.js → architecture-WOLXFQ4H-BQYTB92_.js} +1 -1
- package/dist/ui/dist/assets/{architectureDiagram-ZHVYKT53-BNTMbPJW.js → architectureDiagram-ZHVYKT53-Dl7095A5.js} +1 -1
- package/dist/ui/dist/assets/{blockDiagram-RJAE7QA3-NYY6qeuY.js → blockDiagram-RJAE7QA3-QDZ5kE1J.js} +1 -1
- package/dist/ui/dist/assets/{c4Diagram-XDPPPE54-B_bNpXHQ.js → c4Diagram-XDPPPE54-CKJZ1xOw.js} +1 -1
- package/dist/ui/dist/assets/channel-DF08Hd8f.js +1 -0
- package/dist/ui/dist/assets/{chunk-2E7WHVMD-BTet9STn.js → chunk-2E7WHVMD-BXBjaqd1.js} +1 -1
- package/dist/ui/dist/assets/{chunk-4EMNKR2T-qoQt4Fpx.js → chunk-4EMNKR2T-DPzfVuke.js} +1 -1
- package/dist/ui/dist/assets/{chunk-55XCU76K-C3I6EB-H.js → chunk-55XCU76K-B33Sj3w8.js} +1 -1
- package/dist/ui/dist/assets/{chunk-7S6XSTFO-CL-9s_8p.js → chunk-7S6XSTFO-B_u7dS03.js} +1 -1
- package/dist/ui/dist/assets/{chunk-AQDTSKZB-DHoGnGyP.js → chunk-AQDTSKZB-B4EzH5gx.js} +1 -1
- package/dist/ui/dist/assets/{chunk-DSNLSHJZ-Bk8WO5JF.js → chunk-DSNLSHJZ-CfWeHABr.js} +1 -1
- package/dist/ui/dist/assets/{chunk-HAGFOTED-CwAC85lg.js → chunk-HAGFOTED-B8G8PjLZ.js} +1 -1
- package/dist/ui/dist/assets/{chunk-HNE4Q36P-CIllywWr.js → chunk-HNE4Q36P-BA-PqoTF.js} +1 -1
- package/dist/ui/dist/assets/{chunk-NQOKRVIF-DDlpyYiH.js → chunk-NQOKRVIF-JvhuFcnR.js} +1 -1
- package/dist/ui/dist/assets/{chunk-UHW7PFBP-Cxdndcon.js → chunk-UHW7PFBP-BrfL5CGY.js} +1 -1
- package/dist/ui/dist/assets/{chunk-VQ5W62QI-CL9d9_iJ.js → chunk-VQ5W62QI-dBJqgdDy.js} +1 -1
- package/dist/ui/dist/assets/{chunk-WQQL4CDK-C4kzN8QU.js → chunk-WQQL4CDK-dfqd3k_P.js} +1 -1
- package/dist/ui/dist/assets/{chunk-XXDRQBXY-Cv_2FSiY.js → chunk-XXDRQBXY-kViWdB9M.js} +1 -1
- package/dist/ui/dist/assets/{chunk-YZO67HFG-oHiuYaCJ.js → chunk-YZO67HFG-ukfs4wT3.js} +1 -1
- package/dist/ui/dist/assets/{chunk-ZAUX2LTX-Cy_8d0XT.js → chunk-ZAUX2LTX-BxZHki81.js} +1 -1
- package/dist/ui/dist/assets/{chunk-ZCHMQSOR-piIpIcQi.js → chunk-ZCHMQSOR-PjluhR_E.js} +1 -1
- package/dist/ui/dist/assets/{classDiagram-v2-4MYWR3UA-DNKRIujO.js → classDiagram-v2-4MYWR3UA-Ct89LJec.js} +1 -1
- package/dist/ui/dist/assets/{cose-bilkent-JH36ORCC-BWKTGCHY.js → cose-bilkent-JH36ORCC-BnQceGmB.js} +1 -1
- package/dist/ui/dist/assets/{cynefin-EF2NZ3EQ-yx7KKkAk.js → cynefin-EF2NZ3EQ-D6WkCVE8.js} +1 -1
- package/dist/ui/dist/assets/{cynefinDiagram-WF24UDRP-BTnZ7QVL.js → cynefinDiagram-WF24UDRP-dn6DUPAb.js} +1 -1
- package/dist/ui/dist/assets/{dagre-NK4GIZVX-CPh5Zn5I.js → dagre-NK4GIZVX-BtZSlLk7.js} +1 -1
- package/dist/ui/dist/assets/{diagram-CBK3MWTC-pI6NFdrD.js → diagram-CBK3MWTC-Ds4_tv6X.js} +1 -1
- package/dist/ui/dist/assets/{diagram-I5XIIV2D-DUIfARoS.js → diagram-I5XIIV2D-DcoVkg45.js} +1 -1
- package/dist/ui/dist/assets/{diagram-ODIL2UCW-lafSPvAw.js → diagram-ODIL2UCW-T47FAA3k.js} +1 -1
- package/dist/ui/dist/assets/{diagram-PFBEJUXE-u1lZas3a.js → diagram-PFBEJUXE-CRZcaVKP.js} +1 -1
- package/dist/ui/dist/assets/{diagram-RJA3I4VV-mc0GLMHo.js → diagram-RJA3I4VV-D6KXeUPg.js} +1 -1
- package/dist/ui/dist/assets/{diagram-TYUNFSNR-1NRbBrZW.js → diagram-TYUNFSNR-BHEIVyNN.js} +1 -1
- package/dist/ui/dist/assets/{dist-CHZ9mrl_.js → dist-DLlKIWBp.js} +1 -1
- package/dist/ui/dist/assets/{ebnfDiagram-V4P3TTPT-DdStjTDc.js → ebnfDiagram-V4P3TTPT-nUDvYRBV.js} +1 -1
- package/dist/ui/dist/assets/{elk-QONTBCTQ-BzRoFO45.js → elk-QONTBCTQ-D21BcRzc.js} +1 -1
- package/dist/ui/dist/assets/{erDiagram-KYQIGQAA-DlMkgQxj.js → erDiagram-KYQIGQAA-CTpHuftU.js} +1 -1
- package/dist/ui/dist/assets/{eventmodeling-K75KTNOO-BRYIOrod.js → eventmodeling-K75KTNOO-B6JaKuDY.js} +1 -1
- package/dist/ui/dist/assets/flowDiagram-IUGLLWBU-BTeOUR-p.js +1 -0
- package/dist/ui/dist/assets/{ganttDiagram-R7GPNTJY-D8fQZ7Ah.js → ganttDiagram-R7GPNTJY-D2-pMcnC.js} +1 -1
- package/dist/ui/dist/assets/{gitGraph-VSP46ZUC-C7ZydyWX.js → gitGraph-VSP46ZUC-B2yxwhEo.js} +1 -1
- package/dist/ui/dist/assets/{gitGraphDiagram-PDYL7XHY-DCItam0v.js → gitGraphDiagram-PDYL7XHY-DnrhBMH1.js} +1 -1
- package/dist/ui/dist/assets/index-D74Skifa.css +1 -0
- package/dist/ui/dist/assets/index-Dnte9tPd.js +136 -0
- package/dist/ui/dist/assets/{info-OHQRW6UA-C3KneBKT.js → info-OHQRW6UA-D8oh6gvs.js} +1 -1
- package/dist/ui/dist/assets/{infoDiagram-MVDRKAX5-6wK09D32.js → infoDiagram-MVDRKAX5-BLSZjjgB.js} +1 -1
- package/dist/ui/dist/assets/{ishikawaDiagram-HPEHV2GE-DTP5C8VX.js → ishikawaDiagram-HPEHV2GE-BXiznLSn.js} +1 -1
- package/dist/ui/dist/assets/{journeyDiagram-BOSHW7O7-B--UIMtq.js → journeyDiagram-BOSHW7O7-BSYmVcO_.js} +1 -1
- package/dist/ui/dist/assets/{kanban-definition-FNSA4HC5-Ku4N9QGt.js → kanban-definition-FNSA4HC5-COthkkzK.js} +1 -1
- package/dist/ui/dist/assets/{line-C4-H5h1-.js → line-6ND8OaOL.js} +1 -1
- package/dist/ui/dist/assets/{linear-DhAID3hm.js → linear-DbWEPFJX.js} +1 -1
- package/dist/ui/dist/assets/{mermaid-parser.core-CMPNc-u6.js → mermaid-parser.core-Btsk294z.js} +3 -3
- package/dist/ui/dist/assets/{mermaid.core-Nd_xOg2y.js → mermaid.core-B4llDSFO.js} +4 -4
- package/dist/ui/dist/assets/{mindmap-definition-6OY57UG3-BlVsym5h.js → mindmap-definition-6OY57UG3-hv2PfX-x.js} +1 -1
- package/dist/ui/dist/assets/{packet-JDAUHWVQ-rsk7SM7S.js → packet-JDAUHWVQ-Dr4vBgjt.js} +1 -1
- package/dist/ui/dist/assets/{pegDiagram-ECIUJNBX-C0L20M8z.js → pegDiagram-ECIUJNBX-DvlFov3N.js} +1 -1
- package/dist/ui/dist/assets/{pie-XZMESJXO-B23-iZSN.js → pie-XZMESJXO-C9QsqC4n.js} +1 -1
- package/dist/ui/dist/assets/{pieDiagram-GNMPY74T-BqFhe4Oh.js → pieDiagram-GNMPY74T-CrrHOj67.js} +1 -1
- package/dist/ui/dist/assets/{prism-core-DYsiqJeR.js → prism-core-Cc8H7LPG.js} +1 -1
- package/dist/ui/dist/assets/{quadrantDiagram-D57K4MC3-BKP75B-m.js → quadrantDiagram-D57K4MC3-DQ7J6-ti.js} +1 -1
- package/dist/ui/dist/assets/{radar-ABXABTNO-BrEk2mQ7.js → radar-ABXABTNO-BBBPaujh.js} +1 -1
- package/dist/ui/dist/assets/{railroad-I3PHUGI6-wWO4Eapc.js → railroad-I3PHUGI6-C-P6Igaz.js} +1 -1
- package/dist/ui/dist/assets/{railroad-abnf-LNEFI6M7-DfY-IPvE.js → railroad-abnf-LNEFI6M7-CAkorRLs.js} +1 -1
- package/dist/ui/dist/assets/{railroad-ebnf-DWYD2UWJ-19wedWGk.js → railroad-ebnf-DWYD2UWJ-D8Hz6gCf.js} +1 -1
- package/dist/ui/dist/assets/{railroad-peg-JR7BVNR7-9vIslnoJ.js → railroad-peg-JR7BVNR7-D-XNMkOs.js} +1 -1
- package/dist/ui/dist/assets/{railroadDiagram-Y72NRBL7-DVnmXs8w.js → railroadDiagram-Y72NRBL7-DE9LwxJQ.js} +1 -1
- package/dist/ui/dist/assets/{requirementDiagram-EQYSW5RA-BEoMdlzR.js → requirementDiagram-EQYSW5RA-FrKFY6NJ.js} +1 -1
- package/dist/ui/dist/assets/{sankeyDiagram-SY24JHO5-D7Tn2Gbs.js → sankeyDiagram-SY24JHO5-BDxI6RDX.js} +1 -1
- package/dist/ui/dist/assets/{sequenceDiagram-BLEHNHQU-CyjUDBaQ.js → sequenceDiagram-BLEHNHQU-pV1XcKX7.js} +1 -1
- package/dist/ui/dist/assets/{src-BiC9XNcI.js → src-snNJTXXq.js} +1 -1
- package/dist/ui/dist/assets/{stateDiagram-v2-A6IESKWZ-CMp1VCO9.js → stateDiagram-v2-A6IESKWZ-BSc_5aAf.js} +1 -1
- package/dist/ui/dist/assets/{swimlanes-B3ENRKFQ-KEciLd6r.js → swimlanes-B3ENRKFQ-DC6qUXLh.js} +1 -1
- package/dist/ui/dist/assets/swimlanesDiagram-AYQRV4AK-F1HykV3o.js +8 -0
- package/dist/ui/dist/assets/{timeline-definition-JXYKGLGB-C8YQtv7M.js → timeline-definition-JXYKGLGB-C8L0Dxtu.js} +1 -1
- package/dist/ui/dist/assets/{treeView-D4JQ5SDB-DgAzPaOO.js → treeView-D4JQ5SDB-DDyZIG5T.js} +1 -1
- package/dist/ui/dist/assets/{treemap-SAJKECNS-eCRqZMYc.js → treemap-SAJKECNS-CUaLgge0.js} +1 -1
- package/dist/ui/dist/assets/{usecaseDiagram-WPOLBNNX-Dirryw9G.js → usecaseDiagram-WPOLBNNX-BHRBd5pV.js} +1 -1
- package/dist/ui/dist/assets/{vennDiagram-Q3Y3IDCW-BjxQbAUx.js → vennDiagram-Q3Y3IDCW-Du4iwwkh.js} +1 -1
- package/dist/ui/dist/assets/{wardley-7MLQ67FV-CqHX5RUz.js → wardley-7MLQ67FV-DUgENI0s.js} +1 -1
- package/dist/ui/dist/assets/{wardleyDiagram-IVAIDKWA-Ds1HoEUY.js → wardleyDiagram-IVAIDKWA-B86zOdke.js} +1 -1
- package/dist/ui/dist/assets/{xychartDiagram-4URNHDU4-kodzDb12.js → xychartDiagram-4URNHDU4-twq9irqO.js} +1 -1
- package/dist/ui/dist/index.html +2 -2
- package/package.json +1 -1
- package/skills/follow-me/SKILL.md +5 -3
- package/dist/ui/dist/assets/channel-DPDY0XJP.js +0 -1
- package/dist/ui/dist/assets/flowDiagram-IUGLLWBU-C1IBh_GZ.js +0 -1
- package/dist/ui/dist/assets/index-8BehwQ7E.js +0 -134
- package/dist/ui/dist/assets/index-mC2OW2Av.css +0 -1
- package/dist/ui/dist/assets/swimlanesDiagram-AYQRV4AK-DzestpDE.js +0 -8
package/dist/src/server.js
CHANGED
|
@@ -9,7 +9,7 @@ import { serializeCoverage, staleFiles } from "./coverage.js";
|
|
|
9
9
|
import { definitionIndex, isIdentifier } from "./definition.js";
|
|
10
10
|
import { isRepoPath } from "./diff.js";
|
|
11
11
|
import { carryConcerns, carrySession } from "./evolve.js";
|
|
12
|
-
import { isConcernId, isPlanVersion } from "./plan.js";
|
|
12
|
+
import { isConcernId, isOfferId, isPlanVersion } from "./plan.js";
|
|
13
13
|
import { renderReport, reportItems } from "./prompt.js";
|
|
14
14
|
import { coverageAt, isLockToken, readCoverageIn, SessionFileError } from "./session.js";
|
|
15
15
|
/** The requested port is taken; host.ts decides whether that is our server or a stranger. */
|
|
@@ -94,6 +94,7 @@ export async function loadDraft(reviewsDir, version) {
|
|
|
94
94
|
earlierReplies: [],
|
|
95
95
|
carried: null,
|
|
96
96
|
carriedConcerns: [],
|
|
97
|
+
dismissedOffers: [],
|
|
97
98
|
};
|
|
98
99
|
}
|
|
99
100
|
throw error;
|
|
@@ -258,6 +259,8 @@ function viewOf(registration, loaded, draft, earlier = loaded.earlier) {
|
|
|
258
259
|
unitIds: new Set(state.units.map((u) => u.id)),
|
|
259
260
|
hunkRows: new Map(state.units.flatMap((u) => u.kind === "hunk" ? [[u.id, u.body.length]] : [])),
|
|
260
261
|
concernIds: new Set(state.commits.flatMap((c) => (c.concerns ?? []).map((k) => k.id))),
|
|
262
|
+
offers: new Map(state.commits.flatMap((c) => (c.offers ?? []).map((offer) => [offer.id, { offer, commit: c.index }]))),
|
|
263
|
+
dismissedOffers: new Set(draft.dismissedOffers),
|
|
261
264
|
definitions: definitionIndex(loaded.repo, state.anchor.tip, new Map(state.units.map((u) => [u.id, u])), state.commits),
|
|
262
265
|
draftFile: draftPath(reviewsDir, state.version),
|
|
263
266
|
reviewFile: join(reviewsDir, `v${state.version}.json`),
|
|
@@ -314,6 +317,21 @@ function findSaid(view, id) {
|
|
|
314
317
|
view.loaded.previous?.comments.find((c) => c.id === id) ??
|
|
315
318
|
view.earlier?.find((c) => c.comment.id === id)?.comment);
|
|
316
319
|
}
|
|
320
|
+
/** The comment of this review, on this version or an earlier one, that accepted the offer. */
|
|
321
|
+
function acceptedBy(view, offer) {
|
|
322
|
+
const said = [...view.comments.values(), ...(view.earlier ?? []).map((c) => c.comment)];
|
|
323
|
+
return said.find((c) => c.offer === offer);
|
|
324
|
+
}
|
|
325
|
+
/** Why a comment may not accept this offer, or null when it may. */
|
|
326
|
+
function offerProblem(view, offer) {
|
|
327
|
+
if (!view.offers.has(offer)) {
|
|
328
|
+
return `offer ${offer} is not in plan v${view.loaded.state.version}`;
|
|
329
|
+
}
|
|
330
|
+
const by = acceptedBy(view, offer);
|
|
331
|
+
if (by !== undefined)
|
|
332
|
+
return `offer ${offer} is already accepted by ${by.id}`;
|
|
333
|
+
return view.dismissedOffers.has(offer) ? `offer ${offer} was dismissed` : null;
|
|
334
|
+
}
|
|
317
335
|
function earlierOf(view) {
|
|
318
336
|
return [...view.earlierReplies].map(([comment, replies]) => ({ comment, replies }));
|
|
319
337
|
}
|
|
@@ -414,6 +432,7 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
414
432
|
const resolved = [...view.resolved];
|
|
415
433
|
const excluded = excludedOf();
|
|
416
434
|
const earlierReplies = earlierOf(view);
|
|
435
|
+
const dismissedOffers = [...view.dismissedOffers];
|
|
417
436
|
const snapshot = JSON.stringify({
|
|
418
437
|
schema: "follow-me/review-draft@1",
|
|
419
438
|
planVersion: state.version,
|
|
@@ -423,6 +442,7 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
423
442
|
...(excluded === null ? {} : { excluded }),
|
|
424
443
|
...(earlierReplies.length === 0 ? {} : { earlierReplies }),
|
|
425
444
|
...carriedRefs(view),
|
|
445
|
+
...(dismissedOffers.length === 0 ? {} : { dismissedOffers }),
|
|
426
446
|
}, null, 2);
|
|
427
447
|
const dir = view.loaded.reviewsDir;
|
|
428
448
|
writes = writes.then(async () => {
|
|
@@ -458,6 +478,7 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
458
478
|
const resolved = [...view.resolved];
|
|
459
479
|
const excluded = excludedOf();
|
|
460
480
|
const earlierReplies = earlierOf(view);
|
|
481
|
+
const dismissedOffers = [...view.dismissedOffers];
|
|
461
482
|
return {
|
|
462
483
|
schema: "follow-me/review@1",
|
|
463
484
|
mode: view.loaded.state.mode,
|
|
@@ -470,6 +491,7 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
470
491
|
...(excluded === null ? {} : { excluded }),
|
|
471
492
|
...(earlierReplies.length === 0 ? {} : { earlierReplies }),
|
|
472
493
|
...carriedRefs(view),
|
|
494
|
+
...(dismissedOffers.length === 0 ? {} : { dismissedOffers }),
|
|
473
495
|
};
|
|
474
496
|
};
|
|
475
497
|
const reportOptions = async () => {
|
|
@@ -510,7 +532,10 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
510
532
|
}
|
|
511
533
|
return coverage;
|
|
512
534
|
};
|
|
513
|
-
const hasWork = () => view.comments.size > 0 ||
|
|
535
|
+
const hasWork = () => view.comments.size > 0 ||
|
|
536
|
+
view.decisions.size > 0 ||
|
|
537
|
+
view.earlierReplies.size > 0 ||
|
|
538
|
+
view.dismissedOffers.size > 0;
|
|
514
539
|
return {
|
|
515
540
|
id,
|
|
516
541
|
done,
|
|
@@ -534,6 +559,7 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
534
559
|
concerns: [...view.decisions.values()],
|
|
535
560
|
resolved: [...view.resolved],
|
|
536
561
|
excluded: { comments: [...view.excludedComments], concerns: [...view.excludedConcerns] },
|
|
562
|
+
dismissedOffers: [...view.dismissedOffers],
|
|
537
563
|
seq: events.length,
|
|
538
564
|
previous: previousOf(view),
|
|
539
565
|
carried: carriedOf(view),
|
|
@@ -595,6 +621,9 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
595
621
|
throw new HttpError(400, "malformed comment");
|
|
596
622
|
const commentId = mintCommentId(new Set([...view.comments.keys(), ...(view.earlier ?? []).map((c) => c.comment.id)]));
|
|
597
623
|
const comment = withReplies(accept(parseComment({ ...raw, id: commentId, createdAt: new Date().toISOString() })), undefined);
|
|
624
|
+
const problem = comment.offer === undefined ? null : offerProblem(view, comment.offer);
|
|
625
|
+
if (problem !== null)
|
|
626
|
+
throw new HttpError(400, problem);
|
|
598
627
|
view.comments.set(commentId, comment);
|
|
599
628
|
emit({ type: "comment", comment });
|
|
600
629
|
await saveDraft();
|
|
@@ -605,6 +634,14 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
605
634
|
const parsed = withReplies(accept(parseComment(raw)), undefined);
|
|
606
635
|
if (parsed.id !== target)
|
|
607
636
|
throw new HttpError(400, "comment id does not match the URL");
|
|
637
|
+
const before = view.comments.get(target);
|
|
638
|
+
if (parsed.offer !== before?.offer) {
|
|
639
|
+
const problem = before !== undefined || parsed.offer === undefined
|
|
640
|
+
? "a comment keeps the offer it accepted"
|
|
641
|
+
: offerProblem(view, parsed.offer);
|
|
642
|
+
if (problem !== null)
|
|
643
|
+
throw new HttpError(400, problem);
|
|
644
|
+
}
|
|
608
645
|
// Replies belong to the conversation, not to the page's copy of the comment.
|
|
609
646
|
const comment = withReplies(parsed, view.comments.get(target)?.replies);
|
|
610
647
|
view.comments.set(comment.id, comment);
|
|
@@ -671,6 +708,25 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
671
708
|
await saveDraft();
|
|
672
709
|
return decision;
|
|
673
710
|
},
|
|
711
|
+
/**
|
|
712
|
+
* Waves an offer of this plan away. It stays dismissed for the rest of the review, across
|
|
713
|
+
* versions; dismissing it again changes nothing, and an accepted offer cannot be dismissed.
|
|
714
|
+
*/
|
|
715
|
+
dismissOffer: async (target) => {
|
|
716
|
+
open();
|
|
717
|
+
if (!isOfferId(target) || !view.offers.has(target)) {
|
|
718
|
+
throw new HttpError(404, "no such offer in this plan");
|
|
719
|
+
}
|
|
720
|
+
const by = acceptedBy(view, target);
|
|
721
|
+
if (by !== undefined)
|
|
722
|
+
throw new HttpError(400, `offer ${target} is already accepted by ${by.id}`);
|
|
723
|
+
if (!view.dismissedOffers.has(target)) {
|
|
724
|
+
view.dismissedOffers.add(target);
|
|
725
|
+
emit({ type: "offer-dismissed", offer: target });
|
|
726
|
+
await saveDraft();
|
|
727
|
+
}
|
|
728
|
+
return [...view.dismissedOffers];
|
|
729
|
+
},
|
|
674
730
|
/** Leaves a comment or an agent concern out of the hand-off, or puts it back. */
|
|
675
731
|
exclude: async (raw) => {
|
|
676
732
|
open();
|
|
@@ -764,13 +820,15 @@ function hostSession(id, registration, loaded, draft, load) {
|
|
|
764
820
|
comments: [...view.excludedComments],
|
|
765
821
|
concerns: [...view.excludedConcerns].filter(stillNamed),
|
|
766
822
|
},
|
|
823
|
+
dismissedOffers: [...view.dismissedOffers],
|
|
767
824
|
}, earlier);
|
|
768
825
|
const carrying = earlier.comments.length +
|
|
769
826
|
earlier.concerns.length +
|
|
770
827
|
view.decisions.size +
|
|
771
828
|
view.resolved.size +
|
|
772
829
|
view.excludedComments.size +
|
|
773
|
-
view.excludedConcerns.size
|
|
830
|
+
view.excludedConcerns.size +
|
|
831
|
+
view.dismissedOffers.size;
|
|
774
832
|
if (carrying > 0)
|
|
775
833
|
await saveDraft();
|
|
776
834
|
emit({ type: "version", version, hash, carried: carriedOf(view) });
|
|
@@ -1031,6 +1089,10 @@ export function startServer(opts) {
|
|
|
1031
1089
|
if (replies !== undefined && method === "POST") {
|
|
1032
1090
|
return sendJson(res, 201, { id: await session.reply(replies, await readJson(req)) });
|
|
1033
1091
|
}
|
|
1092
|
+
const offer = /^\/api\/offers\/([^/]+)\/dismiss$/.exec(rest ?? "")?.[1];
|
|
1093
|
+
if (offer !== undefined && method === "POST") {
|
|
1094
|
+
return sendJson(res, 200, { dismissedOffers: await session.dismissOffer(offer) });
|
|
1095
|
+
}
|
|
1034
1096
|
const concern = /^\/api\/concerns\/([^/]+)$/.exec(rest ?? "")?.[1];
|
|
1035
1097
|
if (concern !== undefined && method === "POST") {
|
|
1036
1098
|
return sendJson(res, 200, await session.decide(concern, await readJson(req)));
|
package/dist/src/session.js
CHANGED
|
@@ -343,6 +343,7 @@ function makeSession(root, dir, anchor, diff) {
|
|
|
343
343
|
},
|
|
344
344
|
coverage: () => readCoverageIn(dir),
|
|
345
345
|
writeCoverage: (coverage) => writeJson(coveragePath(dir), serializeCoverage(coverage)),
|
|
346
|
+
clearCoverage: () => rmSync(coveragePath(dir), { force: true }),
|
|
346
347
|
lock: (command) => acquireLock(dir, anchor.branch, command),
|
|
347
348
|
adoptLock: (from, command) => adoptLock(dir, from, command),
|
|
348
349
|
lockState: () => readLock(join(dir, "lock")),
|
package/dist/ui/dist/assets/{abnfDiagram-WEYOIA3C-cHEJvcBn.js → abnfDiagram-WEYOIA3C-DztIEwNE.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,t}from"./mermaid-parser.core-
|
|
1
|
+
import{m as e,t}from"./mermaid-parser.core-Btsk294z.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-snNJTXXq.js";import"./chunk-DSNLSHJZ-CfWeHABr.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-BXBjaqd1.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-B4llDSFO.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-
|
|
1
|
+
import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-DLlKIWBp.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i){if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
|
package/dist/ui/dist/assets/{architecture-WOLXFQ4H-B3hvvNV2.js → architecture-WOLXFQ4H-BQYTB92_.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-
|
|
1
|
+
import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-Btsk294z.js";
|