@erdemtuna/doc-review 0.11.1 → 0.13.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 +23 -25
- package/lib/SKILL.md +65 -202
- package/lib/agent-handoff.js +24 -0
- package/lib/agent-output.js +287 -0
- package/lib/anchor-text.js +31 -19
- package/lib/chrome-api.js +23 -4
- package/lib/chrome.html +3 -25
- package/lib/cli.js +282 -104
- package/lib/comment-target.js +4 -0
- package/lib/contracts/agent.js +122 -0
- package/lib/contracts/feedback.js +369 -1
- package/lib/contracts/frame.js +87 -0
- package/lib/contracts/history.js +189 -1
- package/lib/contracts/index.js +7 -2
- package/lib/contracts/page-boundary.js +187 -0
- package/lib/contracts/validation.js +200 -0
- package/lib/conversation-anchor-controller.js +84 -0
- package/lib/conversation-capture.js +81 -0
- package/lib/conversation-controller.js +798 -0
- package/lib/conversation-save.js +175 -0
- package/lib/conversation-server.js +184 -0
- package/lib/conversation-shell.js +1013 -0
- package/lib/conversation-store.js +809 -0
- package/lib/frame-controller.js +188 -23
- package/lib/frame-host.js +10 -0
- package/lib/frame-policy.js +1 -0
- package/lib/history-policy.js +4 -15
- package/lib/history-server.js +42 -326
- package/lib/html-transform.js +19 -4
- package/lib/icons.js +323 -0
- package/lib/new-message-target.js +27 -0
- package/lib/paths.js +4 -4
- package/lib/poll-transport.js +109 -26
- package/lib/positioning.js +51 -0
- package/lib/recovery-controller.js +9 -0
- package/lib/references/context-and-recovery.md +130 -0
- package/lib/references/response-contract.md +108 -0
- package/lib/references/source-edits.md +47 -0
- package/lib/review-palette.js +97 -0
- package/lib/revision-store.js +1 -1
- package/lib/save-controller.js +28 -14
- package/lib/sdk.js +568 -92
- package/lib/server.js +73 -595
- package/lib/setup.js +17 -48
- package/lib/state.js +21 -7
- package/lib/thread-anchor-controller.js +56 -0
- package/lib/toolbar-controller.js +3 -3
- package/lib/ui/THIRD_PARTY_NOTICES.md +127 -8
- package/lib/ui/chrome.css +1220 -2733
- package/lib/ui/chrome.js +81 -17
- package/package.json +2 -2
- package/lib/chrome-client.js +0 -1700
package/lib/setup.js
CHANGED
|
@@ -41,55 +41,19 @@ export function shellQuote(arg) {
|
|
|
41
41
|
/** The skill lives in its own markdown file so nothing needs escaping. */
|
|
42
42
|
export const readSkill = () => fs.readFileSync(path.join(here, "SKILL.md"), "utf8");
|
|
43
43
|
export const skillFor = (cmd) => readSkill().replaceAll(NPX_COMMAND, cmd);
|
|
44
|
-
const
|
|
45
|
-
## Reviewing files and localhost pages with doc-review
|
|
44
|
+
const codexBlock = () => `## Interactive reviews with doc-review
|
|
46
45
|
|
|
47
|
-
Start only when the user explicitly invokes /doc-review or requests an
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
review step is not user permission. Otherwise respond normally.
|
|
46
|
+
Start only when the user explicitly invokes /doc-review or requests an interactive
|
|
47
|
+
browser review. Another skill's automatic review step is not user permission.
|
|
48
|
+
Otherwise do not open a review or poll.
|
|
51
49
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
If it prints \`{"status":"timeout"}\`, no feedback arrived yet — run the same
|
|
58
|
-
poll command again to keep waiting. When a \`{"status":"feedback"}\` batch
|
|
59
|
-
arrives, handle every item, then run the exact acknowledgement command in its
|
|
60
|
-
\`next_step\`, which uses \`--ack <batch_id>\`. Keep that exact batch ID on retries;
|
|
61
|
-
never acknowledge an unhandled batch.
|
|
50
|
+
On activation, read [.agents/skills/doc-review/SKILL.md](.agents/skills/doc-review/SKILL.md)
|
|
51
|
+
and load its relative references only when needed. Preserve review/submission
|
|
52
|
+
identity, per-message permissions and exact edit evidence. Use the generated
|
|
53
|
+
commands and complete response template; retry the same response file/requestId,
|
|
54
|
+
never source edits after uncertain acceptance.
|
|
62
55
|
|
|
63
|
-
|
|
64
|
-
\`--timeout\` is one end-to-end deadline, including server discovery and reconnect
|
|
65
|
-
attempts. Keep using the bounded foreground \`--timeout 600\` loop above;
|
|
66
|
-
those polls do not wait 12 hours.
|
|
67
|
-
|
|
68
|
-
Keep the poll command in the foreground and do not end the turn while it waits.
|
|
69
|
-
If the shell returns a process or session handle, keep waiting on that handle until
|
|
70
|
-
the command exits. \`${NPX_COMMAND} status <target>\` reports instantly
|
|
71
|
-
whether feedback is already waiting, without blocking.
|
|
72
|
-
|
|
73
|
-
The batch groups feedback by page under \`pages\`, so fix every page listed. Items
|
|
74
|
-
under \`edits\` are changes the user already made. For non-truncated edits,
|
|
75
|
-
\`after\` is their exact wording: carry it across verbatim and never revert it.
|
|
76
|
-
If the HTML was generated from MDX or Markdown, apply complete edits to the
|
|
77
|
-
source too.
|
|
78
|
-
|
|
79
|
-
Edit fields are limited to 200,000 Unicode code points each. An edit with
|
|
80
|
-
\`truncated: true\` identifies clipped fields in the \`truncated_fields\` array.
|
|
81
|
-
Never apply incomplete text or HTML as a complete replacement or invent missing
|
|
82
|
-
text. Recover the full edit only from an authoritative source; otherwise ask the
|
|
83
|
-
user for the complete edit. Do not acknowledge the batch until every item,
|
|
84
|
-
including truncated edits, has been handled.
|
|
85
|
-
|
|
86
|
-
Markdown files open rendered
|
|
87
|
-
and are never written by doc-review: apply their comments and edits to the
|
|
88
|
-
Markdown source, keeping its syntax. There is no reply channel; the user sees
|
|
89
|
-
your work when the page reloads. For a localhost page, direct edits and deletions
|
|
90
|
-
arrive with \`kind: "url"\`; find and update the matching MDX, TSX, template, or
|
|
91
|
-
component source. Never write the rendered HTTP response over project source.
|
|
92
|
-
`;
|
|
56
|
+
The skill and references are installed together by doc-review setup.`;
|
|
93
57
|
export function installSkills(cwd, { global: isGlobal = false, home = os.homedir(), command } = {}) {
|
|
94
58
|
const done = [];
|
|
95
59
|
const cmd = command || invocation();
|
|
@@ -102,7 +66,7 @@ export function installSkills(cwd, { global: isGlobal = false, home = os.homedir
|
|
|
102
66
|
if (!Buffer.from(existing, "utf8").equals(bytes)) {
|
|
103
67
|
throw new Error("AGENTS.md is not valid UTF-8; convert it before re-running setup. No setup files were changed.");
|
|
104
68
|
}
|
|
105
|
-
guidance = updateGuidance(existing,
|
|
69
|
+
guidance = updateGuidance(existing, codexBlock().replaceAll(NPX_COMMAND, cmd));
|
|
106
70
|
}
|
|
107
71
|
const skillRoots = isGlobal
|
|
108
72
|
? [
|
|
@@ -110,11 +74,16 @@ export function installSkills(cwd, { global: isGlobal = false, home = os.homedir
|
|
|
110
74
|
["Codex", path.join(home, ".codex")],
|
|
111
75
|
["Shared agents", path.join(home, ".agents")],
|
|
112
76
|
]
|
|
113
|
-
: [["Claude Code", path.join(cwd, ".claude")]];
|
|
77
|
+
: [["Claude Code", path.join(cwd, ".claude")], ["Shared agents", path.join(cwd, ".agents")]];
|
|
114
78
|
for (const [agent, base] of skillRoots) {
|
|
115
79
|
const skillFile = path.join(base, "skills", "doc-review", "SKILL.md");
|
|
116
80
|
fs.mkdirSync(path.dirname(skillFile), { recursive: true });
|
|
117
81
|
fs.writeFileSync(skillFile, skillFor(cmd));
|
|
82
|
+
const refs = path.join(path.dirname(skillFile), "references");
|
|
83
|
+
fs.mkdirSync(refs, { recursive: true });
|
|
84
|
+
for (const name of fs.readdirSync(path.join(here, "references"))) {
|
|
85
|
+
fs.writeFileSync(path.join(refs, name), fs.readFileSync(path.join(here, "references", name), "utf8").replaceAll(NPX_COMMAND, cmd));
|
|
86
|
+
}
|
|
118
87
|
done.push(`${agent} skill ${skillFile}${isGlobal ? " (all projects)" : ""}`);
|
|
119
88
|
}
|
|
120
89
|
if (!isGlobal) {
|
package/lib/state.js
CHANGED
|
@@ -8,12 +8,14 @@ import { atomicWrite } from "./atomic-write.js";
|
|
|
8
8
|
import { RevisionStore } from "./revision-store.js";
|
|
9
9
|
import { CAPTURE_LEASE_MS, HISTORY_SCHEMA_VERSION, normalizeHistoryTargets, revisionError } from "./revision-schema.js";
|
|
10
10
|
import { historyRevisionReferences, retainHistory } from "./history-policy.js";
|
|
11
|
+
import { Conversations, emptyConversations, validateConversations } from "./conversation-store.js";
|
|
12
|
+
import { ContractError } from "./contracts/validation.js";
|
|
11
13
|
/** Anything untouched this long is review debris, not work in progress. */
|
|
12
14
|
const PRUNE_AGE_MS = 30 * 24 * 60 * 60 * 1000;
|
|
13
15
|
const DELIVERY_STATES = new Set(["queued", "possibly_delivered", "delivered"]);
|
|
14
16
|
const fresh = (entry, now) => !!entry && now - (entry.updatedAt || 0) < PRUNE_AGE_MS;
|
|
15
17
|
const batchId = () => `b_${crypto.randomBytes(12).toString("hex")}`;
|
|
16
|
-
const emptyState = () => ({ pages: {}, batches: {}, receipts: {}, histories: {} });
|
|
18
|
+
const emptyState = () => ({ schemaVersion: 1, conversations: emptyConversations(), pages: {}, batches: {}, receipts: {}, histories: {} });
|
|
17
19
|
const historyId = (prefix) => `${prefix}_${crypto.randomBytes(12).toString("hex")}`;
|
|
18
20
|
function historyRound(data, entryKey, roundId) {
|
|
19
21
|
return data.histories[entryKey]?.rounds.find((round) => round.roundId === roundId) || null;
|
|
@@ -49,7 +51,8 @@ function finishCapture(round) {
|
|
|
49
51
|
function pruneData(data, now = Date.now()) {
|
|
50
52
|
let changed = retainHistory(data);
|
|
51
53
|
for (const [key, page] of Object.entries(data.pages)) {
|
|
52
|
-
const protectedPage =
|
|
54
|
+
const protectedPage = Object.values(data.conversations?.reviews || {}).some((record) => Object.hasOwn(record.pages, key)) ||
|
|
55
|
+
page.comments?.length || page.edits?.length || page.revisionRefs?.length ||
|
|
53
56
|
data.batches[key] || Object.values(data.batches).some((record) => record.cleanup.some((item) => item.key === key)) ||
|
|
54
57
|
Object.values(data.histories).some((history) => history.rounds.some((round) => round.targets.some((target) => target.key === key)));
|
|
55
58
|
if (protectedPage)
|
|
@@ -72,10 +75,13 @@ function pruneData(data, now = Date.now()) {
|
|
|
72
75
|
return changed;
|
|
73
76
|
}
|
|
74
77
|
function normalizeState(parsed, makeBatchId) {
|
|
78
|
+
validateConversations(parsed);
|
|
75
79
|
if (!parsed || typeof parsed !== "object" || !parsed.pages || typeof parsed.pages !== "object") {
|
|
76
80
|
throw new Error("Invalid doc-review state: expected a pages object.");
|
|
77
81
|
}
|
|
78
82
|
const data = {
|
|
83
|
+
schemaVersion: parsed.schemaVersion,
|
|
84
|
+
conversations: parsed.conversations,
|
|
79
85
|
pages: parsed.pages,
|
|
80
86
|
batches: parsed.batches && typeof parsed.batches === "object" ? parsed.batches : {},
|
|
81
87
|
receipts: parsed.receipts && typeof parsed.receipts === "object" ? parsed.receipts : {},
|
|
@@ -163,12 +169,13 @@ function normalizeState(parsed, makeBatchId) {
|
|
|
163
169
|
* means "your feedback is safe" stays true across server restarts.
|
|
164
170
|
*/
|
|
165
171
|
export class Store {
|
|
166
|
-
constructor({ write = atomicWrite, makeBatchId = batchId, revisions = new RevisionStore() } = {}) {
|
|
172
|
+
constructor({ write = atomicWrite, makeBatchId = batchId, revisions = new RevisionStore(), writeSource = atomicWrite } = {}) {
|
|
167
173
|
this.data = emptyState();
|
|
168
174
|
this.write = write;
|
|
169
175
|
this.makeBatchId = makeBatchId;
|
|
170
176
|
this.revisions = revisions;
|
|
171
177
|
this.load();
|
|
178
|
+
this.conversations = new Conversations(this, { writeSource });
|
|
172
179
|
}
|
|
173
180
|
load() {
|
|
174
181
|
let parsed;
|
|
@@ -177,8 +184,10 @@ export class Store {
|
|
|
177
184
|
parsed = JSON.parse(raw);
|
|
178
185
|
}
|
|
179
186
|
catch (err) {
|
|
180
|
-
if (err.code === "ENOENT")
|
|
187
|
+
if (err.code === "ENOENT") {
|
|
188
|
+
this.persist(this.data);
|
|
181
189
|
return this.data;
|
|
190
|
+
}
|
|
182
191
|
throw err;
|
|
183
192
|
}
|
|
184
193
|
const normalized = normalizeState(parsed, this.makeBatchId);
|
|
@@ -189,8 +198,13 @@ export class Store {
|
|
|
189
198
|
return this.data;
|
|
190
199
|
}
|
|
191
200
|
persist(data) {
|
|
192
|
-
|
|
193
|
-
|
|
201
|
+
try {
|
|
202
|
+
ensureStateDir();
|
|
203
|
+
this.write(statePath(), JSON.stringify(data, null, 2));
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
throw new ContractError("STATE_PERSIST_FAILED", `State was not accepted: ${error.message}. Source writes, if any, must be reconciled separately.`);
|
|
207
|
+
}
|
|
194
208
|
}
|
|
195
209
|
/** Replace durable state once, then publish the committed draft in memory. */
|
|
196
210
|
transaction(mutator) {
|
|
@@ -202,7 +216,7 @@ export class Store {
|
|
|
202
216
|
pruneData(draft);
|
|
203
217
|
this.persist(draft);
|
|
204
218
|
this.data = draft;
|
|
205
|
-
return result;
|
|
219
|
+
return structuredClone(result);
|
|
206
220
|
}
|
|
207
221
|
/** Persist deliberate direct changes used by maintenance and tests. */
|
|
208
222
|
save() {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { frameAnchorsSchema, sameFrameAnchorProjection, validateFrameAnchorStates, validateFrameThreadAction, } from "./contracts/frame.js";
|
|
2
|
+
import { reject } from "./contracts/validation.js";
|
|
3
|
+
/** Frame-local metadata only. The shell separately validates every report/action. */
|
|
4
|
+
export function createThreadAnchorController(options) {
|
|
5
|
+
let projection = null;
|
|
6
|
+
let signature = "";
|
|
7
|
+
function measure(current) {
|
|
8
|
+
return validateFrameAnchorStates({
|
|
9
|
+
...current, type: "eh:threadAnchorStates",
|
|
10
|
+
anchors: current.anchors.map(options.resolve),
|
|
11
|
+
}, current);
|
|
12
|
+
}
|
|
13
|
+
function publish(states) {
|
|
14
|
+
options.reconcile?.(projection, states);
|
|
15
|
+
const next = JSON.stringify(states);
|
|
16
|
+
if (signature !== next) {
|
|
17
|
+
options.changed(projection, states);
|
|
18
|
+
signature = next;
|
|
19
|
+
}
|
|
20
|
+
return states;
|
|
21
|
+
}
|
|
22
|
+
function refresh() {
|
|
23
|
+
return projection ? publish(measure(projection)) : null;
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
get projection() { return projection; },
|
|
27
|
+
refresh,
|
|
28
|
+
project(input) {
|
|
29
|
+
const next = frameAnchorsSchema.parse(input);
|
|
30
|
+
if (next.capability !== options.channel.capability || next.generation !== options.channel.generation ||
|
|
31
|
+
next.pageKey !== options.channel.pageKey || (projection &&
|
|
32
|
+
(next.reviewId !== projection.reviewId || next.renderId !== projection.renderId))) {
|
|
33
|
+
reject("SCOPE_MISMATCH", "Projection does not belong to this bound frame.");
|
|
34
|
+
}
|
|
35
|
+
if (projection && (next.projectionRevision < projection.projectionRevision ||
|
|
36
|
+
(next.projectionRevision === projection.projectionRevision && !sameFrameAnchorProjection(next, projection)))) {
|
|
37
|
+
reject("SCOPE_MISMATCH", "Stale or reused anchor projection revision.");
|
|
38
|
+
}
|
|
39
|
+
const states = measure(next);
|
|
40
|
+
projection = next;
|
|
41
|
+
signature = "";
|
|
42
|
+
return publish(states);
|
|
43
|
+
},
|
|
44
|
+
action(input) {
|
|
45
|
+
if (!projection)
|
|
46
|
+
return reject("SCOPE_MISMATCH", "No current thread projection.");
|
|
47
|
+
const action = validateFrameThreadAction(input, projection);
|
|
48
|
+
if (action.action !== "dismiss") {
|
|
49
|
+
const state = refresh().anchors.find((anchor) => anchor.threadId === action.threadId);
|
|
50
|
+
if (state?.state !== "found")
|
|
51
|
+
reject("INVALID_INPUT", "Target is not currently available; use Feedback.");
|
|
52
|
+
}
|
|
53
|
+
return action;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
@@ -23,9 +23,9 @@ export function createToolbarController(read, commands) {
|
|
|
23
23
|
if (!state.ended && !state.comparing)
|
|
24
24
|
commands.openComments();
|
|
25
25
|
},
|
|
26
|
-
|
|
27
|
-
if (!read().ended)
|
|
28
|
-
commands.
|
|
26
|
+
setTheme(theme) {
|
|
27
|
+
if (!read().ended && read().theme !== theme)
|
|
28
|
+
commands.setTheme(theme);
|
|
29
29
|
},
|
|
30
30
|
},
|
|
31
31
|
};
|
|
@@ -142,6 +142,30 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
142
142
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
143
143
|
SOFTWARE.
|
|
144
144
|
|
|
145
|
+
## @radix-ui/react-checkbox - 1.3.11 (MIT)
|
|
146
|
+
|
|
147
|
+
MIT License
|
|
148
|
+
|
|
149
|
+
Copyright (c) 2022 WorkOS
|
|
150
|
+
|
|
151
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
152
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
153
|
+
in the Software without restriction, including without limitation the rights
|
|
154
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
155
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
156
|
+
furnished to do so, subject to the following conditions:
|
|
157
|
+
|
|
158
|
+
The above copyright notice and this permission notice shall be included in all
|
|
159
|
+
copies or substantial portions of the Software.
|
|
160
|
+
|
|
161
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
162
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
163
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
164
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
165
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
166
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
167
|
+
SOFTWARE.
|
|
168
|
+
|
|
145
169
|
## @radix-ui/react-collection - 1.1.15 (MIT)
|
|
146
170
|
|
|
147
171
|
MIT License
|
|
@@ -382,7 +406,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
382
406
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
383
407
|
SOFTWARE.
|
|
384
408
|
|
|
385
|
-
## @radix-ui/react-
|
|
409
|
+
## @radix-ui/react-menu - 2.1.24 (MIT)
|
|
386
410
|
|
|
387
411
|
MIT License
|
|
388
412
|
|
|
@@ -406,7 +430,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
406
430
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
407
431
|
SOFTWARE.
|
|
408
432
|
|
|
409
|
-
## @radix-ui/react-
|
|
433
|
+
## @radix-ui/react-popper - 1.3.7 (MIT)
|
|
410
434
|
|
|
411
435
|
MIT License
|
|
412
436
|
|
|
@@ -430,7 +454,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
430
454
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
431
455
|
SOFTWARE.
|
|
432
456
|
|
|
433
|
-
## @radix-ui/react-
|
|
457
|
+
## @radix-ui/react-portal - 1.1.17 (MIT)
|
|
434
458
|
|
|
435
459
|
MIT License
|
|
436
460
|
|
|
@@ -454,7 +478,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
454
478
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
455
479
|
SOFTWARE.
|
|
456
480
|
|
|
457
|
-
## @radix-ui/react-
|
|
481
|
+
## @radix-ui/react-presence - 1.1.10 (MIT)
|
|
458
482
|
|
|
459
483
|
MIT License
|
|
460
484
|
|
|
@@ -478,7 +502,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
478
502
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
479
503
|
SOFTWARE.
|
|
480
504
|
|
|
481
|
-
## @radix-ui/react-
|
|
505
|
+
## @radix-ui/react-primitive - 2.1.10 (MIT)
|
|
482
506
|
|
|
483
507
|
MIT License
|
|
484
508
|
|
|
@@ -502,7 +526,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
502
526
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
503
527
|
SOFTWARE.
|
|
504
528
|
|
|
505
|
-
## @radix-ui/react-
|
|
529
|
+
## @radix-ui/react-roving-focus - 1.1.19 (MIT)
|
|
506
530
|
|
|
507
531
|
MIT License
|
|
508
532
|
|
|
@@ -526,7 +550,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
526
550
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
527
551
|
SOFTWARE.
|
|
528
552
|
|
|
529
|
-
## @radix-ui/react-
|
|
553
|
+
## @radix-ui/react-slot - 1.3.3 (MIT)
|
|
530
554
|
|
|
531
555
|
MIT License
|
|
532
556
|
|
|
@@ -550,7 +574,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
550
574
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
551
575
|
SOFTWARE.
|
|
552
576
|
|
|
553
|
-
## @radix-ui/react-
|
|
577
|
+
## @radix-ui/react-toast - 1.2.23 (MIT)
|
|
578
|
+
|
|
579
|
+
MIT License
|
|
580
|
+
|
|
581
|
+
Copyright (c) 2022 WorkOS
|
|
582
|
+
|
|
583
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
584
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
585
|
+
in the Software without restriction, including without limitation the rights
|
|
586
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
587
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
588
|
+
furnished to do so, subject to the following conditions:
|
|
589
|
+
|
|
590
|
+
The above copyright notice and this permission notice shall be included in all
|
|
591
|
+
copies or substantial portions of the Software.
|
|
592
|
+
|
|
593
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
594
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
595
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
596
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
597
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
598
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
599
|
+
SOFTWARE.
|
|
600
|
+
|
|
601
|
+
## @radix-ui/react-tooltip - 1.2.16 (MIT)
|
|
554
602
|
|
|
555
603
|
MIT License
|
|
556
604
|
|
|
@@ -718,6 +766,30 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
718
766
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
719
767
|
SOFTWARE.
|
|
720
768
|
|
|
769
|
+
## @radix-ui/react-visually-hidden - 1.2.11 (MIT)
|
|
770
|
+
|
|
771
|
+
MIT License
|
|
772
|
+
|
|
773
|
+
Copyright (c) 2022 WorkOS
|
|
774
|
+
|
|
775
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
776
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
777
|
+
in the Software without restriction, including without limitation the rights
|
|
778
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
779
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
780
|
+
furnished to do so, subject to the following conditions:
|
|
781
|
+
|
|
782
|
+
The above copyright notice and this permission notice shall be included in all
|
|
783
|
+
copies or substantial portions of the Software.
|
|
784
|
+
|
|
785
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
786
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
787
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
788
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
789
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
790
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
791
|
+
SOFTWARE.
|
|
792
|
+
|
|
721
793
|
## aria-hidden - 1.2.6 (MIT)
|
|
722
794
|
|
|
723
795
|
MIT License
|
|
@@ -971,6 +1043,53 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
971
1043
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
972
1044
|
SOFTWARE.
|
|
973
1045
|
|
|
1046
|
+
## marked - 18.0.12 (MIT)
|
|
1047
|
+
|
|
1048
|
+
# License information
|
|
1049
|
+
|
|
1050
|
+
## Contribution License Agreement
|
|
1051
|
+
|
|
1052
|
+
If you contribute code to this project, you are implicitly allowing your code
|
|
1053
|
+
to be distributed under the MIT license. You are also implicitly verifying that
|
|
1054
|
+
all code is your original work. `</legalese>`
|
|
1055
|
+
|
|
1056
|
+
## Marked
|
|
1057
|
+
|
|
1058
|
+
Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/)
|
|
1059
|
+
Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
|
|
1060
|
+
|
|
1061
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
1062
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
1063
|
+
in the Software without restriction, including without limitation the rights
|
|
1064
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
1065
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
1066
|
+
furnished to do so, subject to the following conditions:
|
|
1067
|
+
|
|
1068
|
+
The above copyright notice and this permission notice shall be included in
|
|
1069
|
+
all copies or substantial portions of the Software.
|
|
1070
|
+
|
|
1071
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
1072
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
1073
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
1074
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
1075
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
1076
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
1077
|
+
THE SOFTWARE.
|
|
1078
|
+
|
|
1079
|
+
## Markdown
|
|
1080
|
+
|
|
1081
|
+
Copyright © 2004, John Gruber
|
|
1082
|
+
http://daringfireball.net/
|
|
1083
|
+
All rights reserved.
|
|
1084
|
+
|
|
1085
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
1086
|
+
|
|
1087
|
+
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
1088
|
+
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
1089
|
+
* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
1090
|
+
|
|
1091
|
+
This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
|
|
1092
|
+
|
|
974
1093
|
## react-dom - 19.3.0 (MIT)
|
|
975
1094
|
|
|
976
1095
|
MIT License
|