backnotprop/plannotator

The workspace to stay in the loop and on top of agents - shape, decide, plan, annotate, review code, share with team, and send all feedback to agents with one click.

TypeScript★ 10,536+108 that day#5 on trending

Analyzed November 14, 2026 at 4638c7a (main) with jscpd v5 in 6.1s.

C57.8/100
Project health1,359,704 lines of code (XL)
Duplication55
7.4% in typescript, tsx, bash, astro, javascript, powershell, batch, python, sql, docker
Dead code94
0.7%
Complexity38
70.6%

The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.

2.43%duplicated code · 16,270 of 668,588 lines
1,035clones in code
2,509code files of 5,941 scanned
9.82%duplicated over all files · 10,511 clones

The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 4 generated files: apps/hook/hooks/mod/inbox-default-tools.ts, packages/inbox/pulls/githubShortcodes.ts, packages/shared/shape/stamp-data.ts, packages/system/src/recipe/text.ts.

Largest clones in the code

  • 1986 lines in 2 placestypescript10,121 tokens
    11export const INBOX_TOOL_NAME = 'plannotator_inbox'
    12
    13/**
    14 * The Inbox MCP tools the agent tool may carry, in the order it lists them.
    15 * Only those the running Inbox offers become actions; an Inbox without one
    16 * (an older binary) simply has no such action.
    17 */
    18export const INBOX_TOOL_ACTIONS = [
    19  'send_message',
    20  'read_thread',
    

    First 10 of 1986 lines.

  • 885 lines in 2 placestypescript4,672 tokens
    13export const PLANNOTATOR_TOOL_NAME = 'plannotator'
    14
    15export type PlannotatorToolAction = 'annotate' | 'review' | 'last' | 'list' | 'close'
    16
    17/** The actions that open a review page. */
    18export type PlannotatorToolOpenAction = 'annotate' | 'review' | 'last'
    19
    20export interface PlannotatorToolInput {
    21  action: PlannotatorToolAction
    22  /**
    

    First 10 of 885 lines.

  • 241 lines in 2 placestypescript1,459 tokens
    1664    : buildAgentReviewUserMessage(launchPatch, launchDiffType as DiffType, userMessageOptions, launchPrMeta, isCustomReview);
    1665const jobLabel = workspacePrompt ? "Workspace Review" : "Code Review";
    1666
    1667if (provider === "codex") {
    1668    const model = typeof config?.model === "string" && config.model ? config.model : undefined;
    1669    const reasoningEffort = typeof config?.reasoningEffort === "string" && config.reasoningEffort ? config.reasoningEffort : undefined;
    1670    const fastMode = config?.fastMode === true;
    1671    const outputPath = generateOutputPath();
    1672    const prompt = composeCodexReviewPrompt(userMessage, reviewProfile);
    1673    const command = await buildCodexCommand({ cwd, outputPath, prompt, model, reasoningEffort, fastMode });
    

    First 10 of 241 lines.

7 more
Largest clones over all files, tests and data included
By format, code only
FormatFilesLinesClonesDuplicated linesDuplication
typescript1,742431,75871412,5762.91%
tsx647211,2632883,3461.58%
css142,911151394.77%
html292,74810873.17%
javascript253,98251012.54%
powershell22,9712150.5%
bash144,911160.12%
astro296,690000%
python51,277000%
sql277000%
By format, all files
FormatFilesLinesClonesDuplicated linesDuplication
typescript3,681917,1085,06155,8636.09%
tsx1,368414,5063,90644,53410.74%
json16754,7511,30543,74379.89%
css11019,267921,2116.29%
yaml518,300506998.42%
markdown25842,437334200.99%
markup444,076312275.57%
bash8010,236101081.06%
html302,75810873.15%
javascript345,94381242.09%

Trending appearances

DayRankStarsFilesLinesClonesAll filesCodeHealthCommit
Nov 14, 2026#510,536 (+108)5,9411,498,07910,5119.82%2.43%C 57.84638c7a

Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.