p-backlog 0.2.3 → 0.3.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 +51 -1
- package/README.md +40 -14
- package/README.ru.md +38 -13
- package/dist/cli.js +2544 -1536
- package/dist/web/assets/{ChartTooltip-BYCfK3J2.js → ChartTooltip-DwQKHXkN.js} +2 -2
- package/dist/web/assets/CodeTab-BGxsIZMH.js +1 -0
- package/dist/web/assets/CostTab-B21EB-7P.js +1 -0
- package/dist/web/assets/EffectTab-97OFZkWY.js +1 -0
- package/dist/web/assets/Figure-CiIqHKnb.js +1 -0
- package/dist/web/assets/OverviewTab-DeoTLTwg.css +1 -0
- package/dist/web/assets/OverviewTab-X_g8WfUl.js +1 -0
- package/dist/web/assets/QualityTab-DYnFz37G.js +1 -0
- package/dist/web/assets/StatsPage-D9gJHHQg.js +1 -0
- package/dist/web/assets/StatsTabState-DbuUIt-D.js +1 -0
- package/dist/web/assets/StatsTable-Bd3vAxKU.js +1 -0
- package/dist/web/assets/UnavailableRepos-D2iehY7u.js +1 -0
- package/dist/web/assets/cx-BZTW4xgb.js +58 -0
- package/dist/web/assets/index-BrkoyuWi.js +38 -0
- package/dist/web/assets/index-CAKUAPJF.css +1 -0
- package/dist/web/assets/paths-ZO6w2vYU.js +1 -0
- package/dist/web/assets/value-dot-kiMizZCu.js +1 -0
- package/dist/web/index.html +4 -4
- package/package.json +2 -3
- package/skill/backlog/SKILL.md +10 -5
- package/skill/backlog-en/SKILL.md +11 -6
- package/dist/server.js +0 -3887
- package/dist/web/assets/CodeTab-LYNoYtUt.js +0 -1
- package/dist/web/assets/CostTab-BNukfYQ_.js +0 -1
- package/dist/web/assets/CostTab-CtmH2WbT.css +0 -1
- package/dist/web/assets/EffectTab-Bk8BtfaR.js +0 -1
- package/dist/web/assets/Figure-BcMtR7CN.js +0 -1
- package/dist/web/assets/OverviewTab-Bv0rKc6p.js +0 -1
- package/dist/web/assets/OverviewTab-C-NPX9JB.css +0 -1
- package/dist/web/assets/QualityTab-N81paNFO.js +0 -1
- package/dist/web/assets/StatsPage-D4P63bqv.js +0 -1
- package/dist/web/assets/StatsTabState-BcFrx-N3.js +0 -1
- package/dist/web/assets/StatsTable-C8h-1NJ7.js +0 -1
- package/dist/web/assets/UnavailableRepos-COXy5-Dn.js +0 -1
- package/dist/web/assets/i18n-BO0kwLac.js +0 -58
- package/dist/web/assets/i18n-BlPq0Oql.css +0 -1
- package/dist/web/assets/index-C-8JzRpY.js +0 -38
- package/dist/web/assets/index-DyGLN1aL.css +0 -1
- package/dist/web/assets/value-dot-X354sZLx.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._button_1q8qz_1{padding:6px var(--space-3);border-radius:var(--radius-control);cursor:pointer;transition:background var(--duration) var(--ease-out), border-color var(--duration) var(--ease-out), color var(--duration) var(--ease-out), scale var(--duration) var(--ease-out);border:1px solid #0000;font-weight:500}._button_1q8qz_1:active:not(:disabled,[aria-disabled=true]){scale:.96}._secondary_1q8qz_15{border-color:var(--line-strong);background:var(--surface);color:var(--ink-muted)}._secondary_1q8qz_15:hover{border-color:var(--ink-subtle);color:var(--ink)}._primary_1q8qz_26{background:var(--action);color:var(--ink-inverse);font-weight:600}._primary_1q8qz_26:hover{background:var(--action-hover)}._button_1q8qz_1:disabled,._button_1q8qz_1[aria-disabled=true]{background:var(--surface-sunken);border-color:var(--line);color:var(--ink-subtle);cursor:not-allowed}._button_1q8qz_1[aria-busy=true]{cursor:progress}._wrap_t6xj6_1{align-items:flex-start;gap:var(--space-1);flex-direction:column;margin-top:auto;display:flex}._switch_t6xj6_9{border:1px solid var(--line);border-radius:var(--radius-chip);background:var(--surface-sunken);gap:2px;padding:2px;display:inline-flex}._switch_t6xj6_9:has(button:disabled){opacity:.6}._button_t6xj6_22{padding:3px var(--space-2);border-radius:var(--radius-chip);color:var(--ink-muted);font-size:var(--text-sm);cursor:pointer;transition:background var(--duration) var(--ease-out), color var(--duration) var(--ease-out);background:0 0;border:0;font-weight:600}._button_t6xj6_22:hover{color:var(--ink)}._button_t6xj6_22:focus-visible{outline:2px solid var(--accent);outline-offset:2px}._button_t6xj6_22:disabled{cursor:not-allowed}._pressed_t6xj6_47{background:var(--surface-selected);color:var(--ink)}._error_t6xj6_52{text-wrap:pretty;max-width:220px;color:var(--danger-ink);font-size:var(--text-sm)}._dialog_luij2_1{width:min(420px, calc(100vw - 2 * var(--space-4)));padding:var(--space-4);border:1px solid var(--line);border-radius:var(--radius-panel);background:var(--surface-raised);color:var(--ink);box-shadow:var(--shadow-panel)}._dialog_luij2_1::backdrop{background:var(--scrim)}._title_luij2_15{margin:0 0 var(--space-2);font-size:var(--text-lg);font-weight:600}._description_luij2_21{margin:0 0 var(--space-3);color:var(--ink-muted)}._field_luij2_26{gap:var(--space-1);color:var(--ink-subtle);font-size:var(--text-sm);flex-direction:column;display:flex}._actions_luij2_34{justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-4);display:flex}._checkbox_9cq3e_1{cursor:pointer;flex:none;justify-content:center;align-items:center;width:24px;height:24px;display:inline-flex}._checkbox_9cq3e_1 input{width:14px;height:14px;margin:0}._delete_9cq3e_17{border-radius:var(--radius-control);width:24px;height:24px;color:var(--ink-subtle);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}._delete_9cq3e_17:hover{background:var(--surface-hover);color:var(--danger-ink)}._error_9cq3e_37{contain:inline-size;text-wrap:pretty;color:var(--danger-ink);font-size:var(--text-sm);flex-basis:100%;order:1;margin-inline-end:calc(var(--row-gap,0px) * -1);padding-inline-start:var(--project-error-indent,calc(24px + var(--row-gap,0px)))}._skipLink_1rs5g_1:focus{top:var(--space-2);left:var(--space-2);z-index:var(--z-dialog);width:auto;height:auto;padding:var(--space-2) var(--space-3);clip-path:none;white-space:normal;border-radius:var(--radius-control);background:var(--surface-raised);color:var(--ink);margin:0;position:fixed;overflow:visible}._shell_1rs5g_18{background:var(--surface);grid-template-rows:minmax(0,1fr);grid-template-columns:260px minmax(0,1fr);height:100%;display:grid}._sidebar_1rs5g_26{gap:var(--space-4);padding:var(--space-4) var(--space-3);border-right:1px solid var(--line);background:var(--surface-sunken);flex-direction:column;display:flex;overflow-y:auto}._brand_1rs5g_36{padding:0 var(--space-2);font-size:var(--text-lg);letter-spacing:-.02em;text-transform:lowercase;color:var(--ink);align-self:flex-start;align-items:baseline;gap:2px;font-weight:700;text-decoration:none;display:inline-flex}._brandMark_1rs5g_50{background:var(--accent);border-radius:1px;width:6px;height:6px}._projects_1rs5g_57{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}._row_1rs5g_66{--row-gap:var(--space-2);align-items:center;gap:var(--row-gap);padding:6px var(--space-2);border-radius:var(--radius-control);color:var(--ink-muted);transition:background var(--duration) var(--ease-out), color var(--duration) var(--ease-out);flex-wrap:wrap;display:flex}._scope_1rs5g_78{flex-direction:column;gap:2px;display:flex}._scopeRow_1rs5g_84{color:var(--ink)}._scopeCurrent_1rs5g_88{background:var(--surface-selected);font-weight:600}._scopeName_1rs5g_93{font-weight:600}._scopeNote_1rs5g_97{padding:0 var(--space-2) 0 calc(var(--space-2) + 24px + var(--space-2));color:var(--ink-subtle);font-size:var(--text-sm);margin:0}._graphNotes_1rs5g_104{flex-direction:column;margin:auto 0 0;display:flex}._graphNote_1rs5g_104{gap:var(--space-1);padding:var(--space-2);color:var(--ink-subtle);font-size:var(--text-sm);flex-direction:column;margin:0;display:flex}._graphNote_1rs5g_104 code{overflow-wrap:anywhere}._disclosure_1rs5g_124{border-radius:var(--radius-chip);width:24px;height:24px;color:var(--ink-muted);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}._muted_1rs5g_139 ._projectName_1rs5g_139,._muted_1rs5g_139 ._count_1rs5g_140{color:var(--ink-subtle)}._number_1rs5g_144{font-variant-numeric:tabular-nums}._row_1rs5g_66:hover{background:var(--surface-hover);color:var(--ink)}._row_1rs5g_66:has(a[aria-current=true]){background:var(--surface-selected);color:var(--ink);font-weight:600}._scopeRow_1rs5g_84:hover{background:var(--surface-hover)}._rowLink_1rs5g_163{min-width:0;color:inherit;flex:1;text-decoration:none}._project_1rs5g_57{justify-content:space-between;align-items:center;gap:var(--space-2);padding:6px var(--space-2);border-radius:var(--radius-control);color:var(--ink-muted);transition:background var(--duration) var(--ease-out), color var(--duration) var(--ease-out);text-decoration:none;display:flex}._project_1rs5g_57:hover{background:var(--surface-hover);color:var(--ink)}._projectActive_1rs5g_187{background:var(--surface-selected);color:var(--ink);font-weight:600}._projectName_1rs5g_139{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._count_1rs5g_140{font-size:var(--text-sm);font-variant-numeric:tabular-nums;color:var(--ink-subtle)}._signalCount_1rs5g_205{color:var(--warn);font-weight:600}@media (width<=900px){._shell_1rs5g_18{--main-overflow:visible;grid-template-rows:auto 1fr;grid-template-columns:minmax(0,1fr);height:auto;min-height:100%}._sidebar_1rs5g_26{align-items:center;gap:var(--space-2);border-right:none;border-bottom:1px solid var(--line);flex-flow:wrap;overflow-y:visible}._projects_1rs5g_57{--project-error-indent:0;align-items:flex-start;gap:var(--space-2);flex-flow:wrap}}._wrap_1nio7_1{align-items:center;gap:var(--space-2);display:flex}._track_1nio7_7{background:var(--line);border-radius:2px;flex:1;min-width:48px;height:4px;overflow:hidden}._fill_1nio7_16{background:var(--ink-subtle);transform-origin:0;width:100%;height:100%;transition:transform var(--duration) var(--ease-out);display:block}._value_1nio7_25{font-size:var(--text-sm);font-variant-numeric:tabular-nums;color:var(--ink-muted);white-space:nowrap}._lastDay_1nio7_32 ._fill_1nio7_16{background:var(--accent)}._lastDay_1nio7_32 ._value_1nio7_25{color:var(--accent-ink)}._bar_1nio7_40{vertical-align:text-bottom;background:var(--line);border-radius:2px;flex:none;width:3px;height:1.1em;display:inline-block;overflow:hidden}._barFill_1nio7_51{background:var(--ink-subtle);transform-origin:bottom;width:100%;height:100%;display:block}._lastDay_1nio7_32._bar_1nio7_40{background:var(--accent-soft)}._lastDay_1nio7_32 ._barFill_1nio7_51{background:var(--accent)}._wrap_1cpve_1{align-items:center;gap:var(--space-2);display:flex}._track_1cpve_7{background:var(--line);border-radius:2px;flex:1;min-width:48px;height:4px;overflow:hidden}._fill_1cpve_16{background:var(--ink-subtle);transform-origin:0;width:100%;height:100%;transition:transform var(--duration) var(--ease-out);display:block}._value_1cpve_25{min-width:34px;font-size:var(--text-sm);font-variant-numeric:tabular-nums;color:var(--ink-muted);text-align:right}._done_1cpve_33 ._fill_1cpve_16{background:var(--ok)}._drawer_1m3ig_1{--drawer-pad-block-start:var(--space-4);gap:var(--space-4);width:var(--panel-width);min-height:0;padding:var(--drawer-pad-block-start) var(--space-5) var(--space-6);border-left:1px solid var(--line);background:var(--surface-raised);overflow-wrap:anywhere;flex-direction:column;display:flex;overflow-y:auto}._drawer_1m3ig_1:focus{outline:none}@media (width<=1160px){._drawer_1m3ig_1{z-index:var(--z-panel);width:min(var(--panel-width), 100%);box-shadow:var(--shadow-panel), 0 0 0 100vmax var(--scrim);overscroll-behavior:contain;position:fixed;inset:0 0 0 auto}html:has(._drawer_1m3ig_1){overflow:hidden}}._header_1m3ig_34{justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}._close_1m3ig_41{border-radius:var(--radius-chip);min-width:24px;min-height:24px;color:var(--ink-subtle);cursor:pointer;background:0 0;border:none;flex-shrink:0;place-items:center;padding:0;display:inline-grid}._close_1m3ig_41:hover{color:var(--ink)}._badge_xxffe_1{font-size:var(--text-sm);color:var(--ink-muted);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}._dot_xxffe_10{background:var(--ink-subtle);border-radius:50%;width:7px;height:7px}._backlog_xxffe_17 ._dot_xxffe_10{background:var(--ink-subtle)}._inProgress_xxffe_21 ._dot_xxffe_10{background:var(--ink)}._blocked_xxffe_25 ._dot_xxffe_10{background:var(--warn)}._done_xxffe_29 ._dot_xxffe_10{background:var(--ok)}._cancelled_xxffe_33{color:var(--ink-subtle);text-decoration:line-through}._body_jt1t9_1{gap:var(--space-3);flex-direction:column;display:flex}._markdown_jt1t9_7{max-width:70ch;color:var(--ink);line-height:1.55}._markdown_jt1t9_7 h1,._markdown_jt1t9_7 h2,._markdown_jt1t9_7 h3{margin:var(--space-4) 0 var(--space-2);font-size:var(--text-md);text-wrap:balance;font-weight:600}._markdown_jt1t9_7 p,._markdown_jt1t9_7 ul,._markdown_jt1t9_7 ol{margin:0 0 var(--space-3);text-wrap:pretty}._markdown_jt1t9_7 ul{padding-left:var(--space-4)}._checkItem_jt1t9_33{margin-left:calc(var(--space-4) * -1);list-style:none}._checkItem_jt1t9_33 label{align-items:baseline;gap:var(--space-2);padding:2px var(--space-2);border-radius:var(--radius-chip);cursor:pointer;transition:background var(--duration) var(--ease-out);display:flex}._checkItem_jt1t9_33 label:hover{background:var(--surface-hover)}._checkItem_jt1t9_33 input:checked+span{color:var(--ink-muted)}._markdown_jt1t9_7 a{color:var(--ink);-webkit-text-decoration-color:var(--ink-subtle);text-decoration-color:var(--ink-subtle);text-underline-offset:2px}._markdown_jt1t9_7 a:hover{color:var(--accent-ink);text-decoration-color:currentColor}._markdown_jt1t9_7 pre{padding:var(--space-3);border-radius:var(--radius-control);background:var(--surface-sunken);font-size:var(--text-sm);overflow-x:auto}._tableScroll_jt1t9_75{margin:0 0 var(--space-3);overflow-wrap:normal;overflow-x:auto}._editor_jt1t9_81{gap:var(--space-2);flex-direction:column;display:flex}._editor_jt1t9_81 textarea{width:100%;padding:var(--space-3);font-family:var(--font-mono);font-size:var(--text-sm)}._editorActions_jt1t9_94{gap:var(--space-2);display:flex}._edit_jt1t9_81{align-self:flex-start}._grid_g41r9_1{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(min(100%,10.5rem),1fr));display:grid}._grid_g41r9_1 label,._tags_g41r9_8{gap:var(--space-1);font-size:var(--text-sm);color:var(--ink-subtle);flex-direction:column;display:flex}._grid_g41r9_1 :is(select,input),._tags_g41r9_8 input{font-size:var(--text-base)}._fieldError_g41r9_21{color:var(--danger-ink);font-size:var(--text-sm)}._section_102zu_1{gap:var(--space-2);flex-direction:column;display:flex}._heading_102zu_7{color:var(--ink-subtle);font-size:var(--text-sm);margin:0;font-weight:500}._items_102zu_14{gap:var(--space-1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._item_102zu_14{align-items:baseline;gap:var(--space-2);font-size:var(--text-sm);display:flex}._id_102zu_30{font-family:var(--font-mono);color:var(--ink-muted)}._title_102zu_35{min-width:0;color:var(--ink);flex:1;text-decoration:none}a._title_102zu_35:hover{text-underline-offset:2px;text-decoration:underline}._remove_102zu_47{border-radius:var(--radius-chip);min-width:24px;min-height:24px;color:var(--ink-subtle);cursor:pointer;background:0 0;border:none;place-items:center;padding:0;display:inline-grid}._remove_102zu_47:hover{color:var(--danger-ink)}._add_102zu_64{gap:var(--space-2);display:flex}._add_102zu_64 input{flex:1;min-width:0}._fieldError_102zu_74{color:var(--danger-ink);font-size:var(--text-sm)}._id_14k85_1{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--ink-muted)}._id_14k85_1[data-epic-tone]{padding:1px var(--space-2);border-radius:var(--radius-chip);background:var(--tone-soft);box-shadow:inset 3px 0 0 var(--tone-line);color:var(--tone-ink)}._title_14k85_15{width:100%;padding:var(--space-2);margin-left:calc(var(--space-2) * -1);font-size:var(--text-lg);resize:none;background:0 0;border-color:#0000;flex-shrink:0;font-weight:600;display:block;overflow:hidden}._title_14k85_15:hover{border-color:var(--line)}._title_14k85_15:focus{border-color:var(--line-strong);background:var(--surface)}._meta_14k85_38{align-items:center;gap:var(--space-3);font-size:var(--text-sm);color:var(--ink-subtle);flex-wrap:wrap;display:flex}._source_14k85_47{font-family:var(--font-mono)}._closure_14k85_51{gap:var(--space-2);padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius-control);background:var(--surface-sunken);font-size:var(--text-sm);color:var(--ink-muted);flex-direction:column;display:flex}._closure_14k85_51 p{margin:0}._restore_14k85_67{align-self:flex-start}._conflict_14k85_71{padding:var(--space-2) var(--space-3);border:1px solid var(--danger-line);border-radius:var(--radius-control);background:var(--danger-soft);color:var(--danger-ink);margin:0}._warnings_14k85_80{padding:var(--space-2) var(--space-3) var(--space-2) var(--space-5);border:1px solid var(--warn);border-radius:var(--radius-control);background:var(--warn-soft);color:var(--ink);margin:0}._readonlyRefs_14k85_89 h2{margin:0 0 var(--space-2);color:var(--ink);font-size:var(--text-sm);font-weight:600}._readonlyRefs_14k85_89 ul{gap:var(--space-1);font-size:var(--text-sm);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._refLink_14k85_106{color:var(--ink);text-decoration:none}._refClosed_14k85_111 ._refLink_14k85_106{color:var(--ink-subtle)}._refLink_14k85_106:hover{text-underline-offset:2px;text-decoration:underline}._saving_14k85_120{min-height:1lh;color:var(--ink-subtle);font-size:var(--text-sm);flex-shrink:0;margin:0}._saving_14k85_120:not(:empty),._conflict_14k85_71{top:calc(var(--drawer-pad-block-start) * -1);z-index:1;position:sticky}._saving_14k85_120:not(:empty){background:var(--surface-raised);box-shadow:0 var(--space-2) 0 var(--surface-raised), 0 calc(var(--space-2) + 1px) 0 var(--line)}:has(>._conflict_14k85_71){scroll-padding-top:calc(4lh + var(--space-4))}._chip_36904_1{padding:3px var(--space-2);border:1px solid var(--line-strong);border-radius:var(--radius-chip);background:var(--surface);color:var(--ink-muted);font-size:var(--text-sm);font-variant-numeric:tabular-nums;white-space:nowrap;cursor:pointer;transition:background var(--duration) var(--ease-out), border-color var(--duration) var(--ease-out), color var(--duration) var(--ease-out), scale var(--duration) var(--ease-out);align-items:center;display:inline-flex}._chip_36904_1:not(._static_36904_17,[aria-disabled=true]):active{scale:.96}._chip_36904_1:not(._static_36904_17,[aria-disabled=true]):hover{border-color:var(--ink-subtle);color:var(--ink)}._pressed_36904_26{border-color:var(--line-strong);background:var(--surface-selected);color:var(--ink);font-weight:600}._chip_36904_1[aria-disabled=true]{cursor:not-allowed}._label_36904_37{display:inline-grid}._text_36904_41{grid-area:1/1}._label_36904_37:after{content:attr(data-bold-width);visibility:hidden;grid-area:1/1;height:0;font-weight:600}._static_36904_17{cursor:default}._anchor_uubtj_1{min-width:0;max-width:100%;display:inline-flex;position:relative}._panel_uubtj_8{top:calc(100% + var(--space-1));z-index:var(--z-dropdown);width:min(420px, calc(100vw - 2 * var(--space-4)));max-height:min(360px,60vh);padding:var(--space-2);border:1px solid var(--line);border-radius:calc(var(--radius-chip) + var(--space-2));background:var(--surface-raised);box-shadow:var(--shadow-panel);flex-direction:column;display:flex;position:absolute;left:0;overflow:hidden}._selection_17l9i_1{align-items:center;gap:var(--space-1);min-width:0;max-width:100%;display:inline-flex}._toggle_17l9i_9{align-items:center;gap:var(--space-2);min-width:0;max-width:320px;display:inline-flex}._chosenTitle_17l9i_17{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._dot_17l9i_23{background:var(--tone-line,var(--ink-subtle));border-radius:50%;flex:none;width:8px;height:8px}._reset_17l9i_31{min-width:24px;min-height:24px;color:var(--ink-subtle);cursor:pointer;background:0 0;border:none;place-items:center;display:inline-grid}._reset_17l9i_31:hover{color:var(--ink)}._options_17l9i_46{flex-direction:column;gap:2px;min-height:0;display:flex;overflow-y:auto}._options_17l9i_46 :focus-visible{outline-offset:-2px}._option_17l9i_46{align-items:center;gap:var(--space-2);min-height:32px;padding:var(--space-1) var(--space-2);border-radius:var(--radius-chip);color:var(--ink-muted);font:inherit;font-size:var(--text-base);text-align:left;cursor:pointer;background:0 0;border:none;display:flex}._option_17l9i_46:hover{background:var(--surface-hover);color:var(--ink)}._pressed_17l9i_79{background:var(--surface-selected);color:var(--ink);font-weight:600}._epics_17l9i_85{margin-top:var(--space-1);padding-top:var(--space-1);border-top:1px solid var(--line);flex-direction:column;gap:2px;display:flex}._id_17l9i_94{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--ink-subtle)}._title_17l9i_100{flex:1;min-width:0}._count_17l9i_105{color:var(--ink-subtle);font-size:var(--text-sm);font-variant-numeric:tabular-nums;margin-left:auto}._toolbar_16bwi_1{gap:var(--space-4);padding:var(--space-3) var(--space-5);border-bottom:1px solid var(--line);flex-direction:column;display:flex}._line_16bwi_9{align-items:center;gap:var(--space-2) var(--space-3);flex-wrap:wrap;display:flex}._search_16bwi_16{flex:1;min-width:220px}._group_16bwi_21{align-items:center;gap:var(--space-1);flex-wrap:wrap;display:flex}._tagPicker_16bwi_28{align-items:center;gap:var(--space-1);flex-wrap:wrap;min-width:0;display:flex}._tagSearch_16bwi_36{margin-bottom:var(--space-2);flex:none}._tagOptions_16bwi_41{gap:var(--space-1);flex-wrap:wrap;min-height:0;display:flex;overflow-y:auto}._tagOptions_16bwi_41 :focus-visible{outline-offset:-2px}._count_16bwi_53{color:var(--ink-subtle)}._cell_rjack_1{gap:var(--space-1);flex-wrap:wrap;width:200px;display:flex;position:relative;overflow:clip}._cell_rjack_1 :focus-visible{outline-offset:-2px}._more_rjack_14{padding:3px var(--space-2);border:1px solid var(--line);border-radius:var(--radius-chip);background:var(--surface);color:var(--ink-muted);font:inherit;font-size:var(--text-sm);white-space:nowrap;cursor:pointer}._more_rjack_14:hover{border-color:var(--line-strong);color:var(--ink)}._ruler_rjack_31{visibility:hidden;pointer-events:none;display:flex;position:absolute;top:0;left:0}._rulerTags_rjack_40{display:flex}._table_1tmcn_1{border-collapse:collapse;width:100%;font-size:var(--text-base)}._table_1tmcn_1 thead th{z-index:1;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line);background:var(--surface);color:var(--ink-subtle);font-size:var(--text-sm);text-align:left;white-space:nowrap;font-weight:500;position:sticky;top:0}._table_1tmcn_1 td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line);vertical-align:middle}._sortButton_1tmcn_27{align-items:center;gap:var(--space-1);color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;padding:0;display:inline-flex}._sortButton_1tmcn_27:hover,._sorted_1tmcn_40{color:var(--ink)}._sortMark_1tmcn_44{min-width:1ch}._row_1tmcn_48:hover td{background:var(--surface-hover)}._selected_1tmcn_52 td{background:var(--surface-selected)}._id_1tmcn_56{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--ink-muted);white-space:nowrap;text-decoration:none}._id_1tmcn_56:hover{color:var(--accent-ink)}._title_1tmcn_68{color:var(--ink);overflow-wrap:anywhere;text-decoration:none}._title_1tmcn_68:hover{text-underline-offset:2px;text-decoration:underline}._newBadge_1tmcn_79{margin-right:var(--space-2);border-radius:var(--radius-chip);background:var(--ink);color:var(--ink-inverse);font-size:var(--text-sm);white-space:nowrap;padding:1px 6px;font-weight:600;display:inline-block}._marker_1tmcn_91{margin-left:var(--space-2);border:1px solid var(--line);border-radius:var(--radius-chip);color:var(--ink-subtle);font-size:var(--text-sm);white-space:nowrap;padding:1px 6px;display:inline-block}._row_1tmcn_48[data-epic-tone] td:first-child{box-shadow:inset 3px 0 0 var(--tone-line)}._row_1tmcn_48[data-epic-tone] ._epicMarker_1tmcn_106{background:var(--tone-soft);color:var(--tone-ink);border-color:#0000}._priorityCell_1tmcn_112{white-space:nowrap}._low_1tmcn_116{color:var(--ink-subtle)}._medium_1tmcn_120{color:var(--ink-muted)}._high_1tmcn_124{color:var(--ink)}._critical_1tmcn_128{color:var(--accent-ink);font-weight:600}._date_1tmcn_133{color:var(--ink-subtle);font-variant-numeric:tabular-nums;white-space:nowrap}@container (width<=940px){td._tags_1tmcn_140,th._tags_1tmcn_140,._date_1tmcn_133{display:none}}@container (width<=700px){._priorityCell_1tmcn_112{display:none}}._table_1tmcn_1 th:first-child,._table_1tmcn_1 td:first-child{padding-inline-start:var(--space-5)}._table_1tmcn_1 ._date_1tmcn_133{padding-inline-end:var(--space-5)}@container (width<=940px){._table_1tmcn_1 ._priorityCell_1tmcn_112{padding-inline-end:var(--space-5)}}@container (width<=700px){._table_1tmcn_1 ._statusCell_1tmcn_169{padding-inline-end:var(--space-5)}}@container (width<=480px){._title_1tmcn_68{-webkit-hyphens:auto;hyphens:auto;hyphenate-limit-chars:12 5 5}._marker_1tmcn_91{white-space:normal}._table_1tmcn_1 th:first-child,._table_1tmcn_1 td:first-child{padding-inline-start:var(--space-3)}._table_1tmcn_1 ._statusCell_1tmcn_169{padding-inline-end:var(--space-3)}}._page_11yau_1{min-height:0;overflow:var(--main-overflow,hidden);grid-template-columns:minmax(0,1fr) auto;display:grid}._list_11yau_8{min-width:0;overflow-y:var(--main-overflow,auto);flex-direction:column;display:flex;container-type:inline-size}._heading_11yau_16{padding:var(--space-4) var(--space-5) 0;font-size:var(--text-lg);text-wrap:balance;margin:0;font-weight:600}._tableWrap_11yau_24{padding-bottom:var(--space-6)}._hint_11yau_28{max-width:60ch;margin:var(--space-6) var(--space-5);color:var(--ink-muted)}._hint_11yau_28 p{margin:0 0 var(--space-3)}._warning_11yau_38{margin:var(--space-3) var(--space-5) 0;padding:var(--space-3) var(--space-4);border:1px solid var(--warn);border-radius:var(--radius-control);background:var(--warn-soft);color:var(--ink)}._warning_11yau_38 ul{margin:var(--space-2) 0 0;padding-left:var(--space-4)}._crash_1hdjj_1{max-width:60ch;margin:var(--space-6) var(--space-5)}._crash_1hdjj_1 h1{font-size:var(--text-lg);font-weight:600}._settingsError_yx9df_1{align-items:flex-start;gap:var(--space-3);max-width:60ch;margin:var(--space-6) var(--space-5);flex-direction:column;display:flex}:root{--surface:oklch(25% 0 0);--surface-sunken:oklch(21.5% 0 0);--surface-raised:oklch(29% 0 0);--surface-hover:oklch(31% 0 0);--surface-selected:oklch(35% 0 0);--ink:oklch(94% 0 0);--ink-muted:oklch(80% 0 0);--ink-subtle:oklch(73% 0 0);--ink-inverse:oklch(20% 0 0);--line:oklch(36% 0 0);--line-strong:oklch(58% 0 0);--accent:oklch(66% .16 27.2);--accent-hover:oklch(72% .15 27.2);--accent-soft:oklch(35% .06 27.2);--accent-ink:oklch(76% .13 27.2);--danger-line:oklch(66% .16 27.2);--danger-ink:oklch(76% .13 27.2);--danger-soft:oklch(35% .06 27.2);--focus-ring:oklch(66% .16 27.2);--action:oklch(94% 0 0);--action-hover:oklch(100% 0 0);--warn:oklch(76% .12 75);--warn-soft:oklch(33% .05 75);--ok:oklch(74% .1 152);--ok-soft:oklch(31% .04 152);--epic-tone-1-line:oklch(70% .13 300);--epic-tone-1-ink:oklch(82% .1 300);--epic-tone-1-soft:oklch(34% .06 300);--epic-tone-2-line:oklch(70% .13 250);--epic-tone-2-ink:oklch(82% .09 250);--epic-tone-2-soft:oklch(34% .06 250);--epic-tone-3-line:oklch(70% .115 200);--epic-tone-3-ink:oklch(82% .1 200);--epic-tone-3-soft:oklch(34% .055 200);--epic-tone-4-line:oklch(70% .13 340);--epic-tone-4-ink:oklch(82% .1 340);--epic-tone-4-soft:oklch(34% .06 340);--epic-tone-5-line:oklch(70% .13 115);--epic-tone-5-ink:oklch(82% .1 115);--epic-tone-5-soft:oklch(34% .06 115);--chart-bar-warm:oklch(60% .11 27.2);--chart-bar-neutral:oklch(54% 0 0);--chart-bar-green:oklch(60% .09 152);--chart-line-green:oklch(86% .15 152);--chart-line-yellow:oklch(88% .14 90);--chart-line-blue:oklch(80% .11 250);--chart-line-bright:oklch(96% 0 0);--panel-width:420px;--radius-chip:4px;--radius-control:6px;--radius-panel:10px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--text-sm:.75rem;--text-base:.875rem;--text-md:1rem;--text-lg:1.125rem;--text-xl:1.375rem;--font-ui:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, monospace;--shadow-panel:0 1px 2px oklch(0% 0 0/.4), 0 8px 24px oklch(0% 0 0/.35);--shadow-dialog:0 24px 60px oklch(0% 0 0/.5);--scrim:oklch(0% 0 0/.5);--z-dropdown:10;--z-panel:20;--z-dialog:30;--ease-out:cubic-bezier(.22, 1, .36, 1);--duration:.16s;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--surface);color:var(--ink);font-family:var(--font-ui);font-size:var(--text-base);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;line-height:1.45}button,input,select,textarea{font:inherit;color:inherit}input,select,textarea{padding:6px var(--space-2);border:1px solid var(--line-strong);border-radius:var(--radius-control);background:var(--surface);color:var(--ink)}input[type=checkbox]{accent-color:var(--accent);padding:0}textarea{resize:vertical}code{font-family:var(--font-mono)}.inline-code{border-radius:var(--radius-chip);background:var(--surface-sunken);font-size:var(--text-sm);padding:1px 4px}::placeholder{color:var(--ink-subtle)}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}[data-epic-tone="1"]{--tone-line:var(--epic-tone-1-line);--tone-ink:var(--epic-tone-1-ink);--tone-soft:var(--epic-tone-1-soft)}[data-epic-tone="2"]{--tone-line:var(--epic-tone-2-line);--tone-ink:var(--epic-tone-2-ink);--tone-soft:var(--epic-tone-2-soft)}[data-epic-tone="3"]{--tone-line:var(--epic-tone-3-line);--tone-ink:var(--epic-tone-3-ink);--tone-soft:var(--epic-tone-3-soft)}[data-epic-tone="4"]{--tone-line:var(--epic-tone-4-line);--tone-ink:var(--epic-tone-4-ink);--tone-soft:var(--epic-tone-4-soft)}[data-epic-tone="5"]{--tone-line:var(--epic-tone-5-line);--tone-ink:var(--epic-tone-5-ink);--tone-soft:var(--epic-tone-5-soft)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$t as t,At as n,Bt as r,Et as i,Ft as a,Gt as o,Ht as s,It as c,Jt as l,Kt as u,Lt as d,Mt as f,Nt as p,Pt as m,Qt as h,Rt as g,St as _,Ut as v,Vt as y,Wt as b,Xt as x,Yt as S,Zt as C,_t as w,an as T,bt as E,en as D,gt as O,in as k,kt as A,nn as j,on as M,qt as N,rn as P,tn as F,vt as I,wn as ee,wt as L,xt as R,yt as te,zt as z}from"./cx-BZTW4xgb.js";var B={};function V(e,t){!e&&!B[t]&&(B[t]=!0,console.warn(t))}var H=e(ee(),1),ne=[`HydrateFallback`,`hydrateFallbackElement`],re=class{status=`pending`;promise;resolve;reject;constructor(){this.promise=new Promise((e,t)=>{this.resolve=t=>{this.status===`pending`&&(this.status=`resolved`,e(t))},this.reject=e=>{this.status===`pending`&&(this.status=`rejected`,t(e))}})}};function ie({router:e,flushSync:t,onError:n,useTransitions:i}){i=y()||i;let[o,s]=H.useState(e.state),[l,u]=(0,H.useOptimistic)(o),[d,h]=H.useState(),[g,_]=H.useState({isTransitioning:!1}),[v,b]=H.useState(),[x,C]=H.useState(),[w,T]=H.useState(),E=H.useRef(new Map),D=H.useCallback((r,{deletedFetchers:a,newErrors:o,flushSync:c,viewTransitionOpts:l})=>{o&&n&&Object.values(o).forEach(e=>n(e,{location:r.location,params:r.matches[0]?.params??{},pattern:S(r.matches)})),r.fetchers.forEach((e,t)=>{e.data!==void 0&&E.current.set(t,e.data)}),a.forEach(e=>E.current.delete(e)),V(c===!1||t!=null,'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from "react-router/dom"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.');let d=e.window!=null&&e.window.document!=null&&typeof e.window.document.startViewTransition==`function`;if(V(l==null||d,"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available."),!l||!d){t&&c?t(()=>s(r)):i===!1?s(r):H.startTransition(()=>{i===!0&&u(e=>U(e,r)),s(r)});return}if(t&&c){t(()=>{x&&(v?.resolve(),x.skipTransition()),_({isTransitioning:!0,flushSync:!0,currentLocation:l.currentLocation,nextLocation:l.nextLocation})});let n=e.window.document.startViewTransition(()=>{t(()=>s(r))});n.finished.finally(()=>{t(()=>{b(void 0),C(void 0),h(void 0),_({isTransitioning:!1})})}),t(()=>C(n));return}x?(v?.resolve(),x.skipTransition(),T({state:r,currentLocation:l.currentLocation,nextLocation:l.nextLocation})):(h(r),_({isTransitioning:!0,flushSync:!1,currentLocation:l.currentLocation,nextLocation:l.nextLocation}))},[e.window,t,x,v,i,u,n]);H.useLayoutEffect(()=>e.subscribe(D),[e,D]),H.useEffect(()=>{g.isTransitioning&&!g.flushSync&&b(new re)},[g]),H.useEffect(()=>{if(v&&d&&e.window){let t=d,n=v.promise,r=e.window.document.startViewTransition(async()=>{i===!1?s(t):H.startTransition(()=>{i===!0&&u(e=>U(e,t)),s(t)}),await n});r.finished.finally(()=>{b(void 0),C(void 0),h(void 0),_({isTransitioning:!1})}),C(r)}},[d,v,e.window,i,u]),H.useEffect(()=>{v&&d&&l.location.key===d.location.key&&v.resolve()},[v,x,l.location,d]),H.useEffect(()=>{!g.isTransitioning&&w&&(h(w.state),_({isTransitioning:!0,flushSync:!1,currentLocation:w.currentLocation,nextLocation:w.nextLocation}),T(void 0))},[g.isTransitioning,w]);let O=H.useMemo(()=>({createHref:e.createHref,createURL:e.createURL,encodeLocation:e.encodeLocation,go:t=>e.navigate(t),push:(t,n,r)=>e.navigate(t,{state:n,preventScrollReset:r?.preventScrollReset}),replace:(t,n,r)=>e.navigate(t,{replace:!0,state:n,preventScrollReset:r?.preventScrollReset})}),[e]),k=e.basename||`/`,A=H.useMemo(()=>({router:e,navigator:O,static:!1,basename:k,onError:n}),[e,O,k,n]),j=H.useMemo(()=>({historyAction:l.historyAction,location:l.location,matches:l.matches,initialized:l.initialized,renderFallback:l.renderFallback,restoreScrollPosition:l.restoreScrollPosition,preventScrollReset:l.preventScrollReset,blockers:l.blockers}),[l.historyAction,l.location,l.matches,l.initialized,l.renderFallback,l.restoreScrollPosition,l.preventScrollReset,l.blockers]),M=H.useMemo(()=>({navigation:l.navigation,revalidation:l.revalidation}),[l.navigation,l.revalidation]),N=H.useMemo(()=>({loaderData:l.loaderData,actionData:l.actionData,errors:l.errors}),[l.loaderData,l.actionData,l.errors]),P=H.useMemo(()=>({fetchers:l.fetchers,fetcherData:E.current}),[l.fetchers]);return H.createElement(H.Fragment,null,H.createElement(f.Provider,{value:A},H.createElement(a.Provider,{value:j},H.createElement(m.Provider,{value:M},H.createElement(p.Provider,{value:N},H.createElement(c.Provider,{value:P},H.createElement(r.Provider,{value:g},H.createElement(le,{basename:k,location:l.location,navigationType:l.historyAction,navigator:O,useTransitions:i},H.createElement(ae,{routes:e.routes,manifest:e.manifest,state:l,isStatic:!1,onError:n})))))))),null)}function U(e,t){return{...e,navigation:t.navigation.state===`idle`?e.navigation:t.navigation,revalidation:t.revalidation===`idle`?e.revalidation:t.revalidation,actionData:t.navigation.state===`submitting`?e.actionData:t.actionData,fetchers:t.fetchers}}var ae=H.memo(oe);function oe({routes:e,manifest:t,state:r,isStatic:i,onError:a}){let o=H.useContext(f);return P(o,`You must render this element inside a <DataRouterContext.Provider> element`),n(e,void 0,{router:o.router,manifest:t,state:r,isStatic:i,onError:a})}function se({to:e,replace:n,state:r,relative:i}){P(R(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:a,navigator:o}=H.useContext(g);T(!a,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:s}=H.useContext(z),{pathname:c}=_(),u=L(),d=t(e,l(s),c,i===`path`);b(typeof e==`string`?e:j(e),o.createHref(d),v(o),`reject`);let f=JSON.stringify(d);return H.useEffect(()=>{u(JSON.parse(f),{replace:n,state:r,relative:i})},[u,f,i,n,r]),null}function ce(e){return i(e.context)}function le({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){P(!R(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=H.useMemo(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=k(n));let{pathname:l=`/`,search:u=``,hash:f=``,state:p=null,key:m=`default`,mask:h}=n,_=H.useMemo(()=>{let e=D(l,s);return e==null?null:{location:{pathname:e,search:u,hash:f,state:p,key:m,mask:h},navigationType:r}},[s,l,u,f,p,m,r,h]);return T(_!=null,`<Router basename="${s}"> is not able to match the URL "${l}${u}${f}" because it does not start with the basename, so the <Router> won't render anything.`),_==null?null:H.createElement(g.Provider,{value:c},H.createElement(d.Provider,{children:t,value:_}))}H.Component;var W=`application/x-www-form-urlencoded`;function G(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function ue(e){return G(e)&&e.tagName.toLowerCase()===`button`}function de(e){return G(e)&&e.tagName.toLowerCase()===`form`}function fe(e){return G(e)&&e.tagName.toLowerCase()===`input`}function pe(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function me(e,t){return e.button===0&&(!t||t===`_self`)&&!pe(e)}function K(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function he(e,t){let n=K(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var q=null;function ge(){if(q===null)try{new FormData(document.createElement(`form`),0),q=!1}catch{q=!0}return q}var _e=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function J(e){return e!=null&&!_e.has(e)?(T(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${W}"`),null):e}function ve(e,t){let n,r,i,a,o;if(de(e)){let o=e.getAttribute(`action`);r=o?D(o,t):null,n=e.getAttribute(`method`)||`get`,i=J(e.getAttribute(`enctype`))||W,a=new FormData(e)}else if(ue(e)||fe(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?D(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||`get`,i=J(e.getAttribute(`formenctype`))||J(o.getAttribute(`enctype`))||W,a=new FormData(o,e),!ge()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(G(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=`get`,r=null,i=W,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}function ye(e,t){if(e===!1||e==null)throw Error(t)}function Y(e,t){let n=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return n.pathname=n.pathname.endsWith(`/`)?`${n.pathname}_.${t}`:`${n.pathname}.${t}`,n}var be=`modulepreload`,xe=function(e){return`/`+e},Se={},Ce=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=xe(t,n),t=s(t),t in Se)return;Se[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:be,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};async function we(e,t){if(e.id in t)return t[e.id];try{let n=await Ce(()=>import(e.module),[]);return t[e.id]=n,n}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function Te(e){return e!=null&&typeof e.page==`string`}function Ee(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function De(e,t,n){return Me((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await we(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Ee).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Oe(e,t,n,r,i,a){let o=(e,t)=>!n[t]||e.route.id!==n[t].route.id,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function ke(e,t,{includeHydrateFallback:n}={}){return Ae(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function Ae(e){return[...new Set(e)]}function je(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function Me(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Te(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(je(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}var X=H.createContext(void 0);X.displayName=`FrameworkContext`;function Z(){let e=H.useContext(X);return ye(e,`You must render this element inside a <HydratedRouter> element`),e}function Ne(e,t){let n=H.useContext(X),[r,i]=H.useState(!1),[a,o]=H.useState(!1),{onFocus:s,onBlur:c,onMouseEnter:l,onMouseLeave:u,onTouchStart:d}=t,f=H.useRef(null);H.useEffect(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return f.current&&e.observe(f.current),()=>{e.disconnect()}}},[e]),H.useEffect(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let p=()=>{i(!0)},m=()=>{i(!1),o(!1)};return n?e===`intent`?[a,f,{onFocus:Q(s,p),onBlur:Q(c,m),onMouseEnter:Q(l,p),onMouseLeave:Q(u,m),onTouchStart:Q(d,p)}]:[a,f,{}]:[!1,f,{}]}function Q(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function Pe({page:e,...t}){let n=y(),{nonce:r}=Z(),{router:i}=w(`PrefetchPageLinks`),a=H.useMemo(()=>i.match(e),[i,i.routes,e]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),n?H.createElement(Ie,{page:e,matches:a,...t}):H.createElement(Le,{page:e,matches:a,...t})):null}function Fe(e){let{manifest:t,routeModules:n}=Z(),[r,i]=H.useState([]);return H.useEffect(()=>{let r=!1;return De(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function Ie({page:e,matches:t,...n}){let r=_(),i=H.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=Y(e,`rsc`),i=!1,a=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?i=!0:a.push(e.route.id);return i&&a.length>0&&n.searchParams.set(`_routes`,a.join(`,`)),[n.pathname+n.search]},[e,r,t]);return H.createElement(H.Fragment,null,i.map(e=>H.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function Le({page:e,matches:t,...n}){let r=_(),{manifest:i,routeModules:a}=Z(),{matches:o}=te(`PrefetchPageLinks`),{loaderData:s}=I(`PrefetchPageLinks`),c=H.useMemo(()=>Oe(e,t,o,i,r,`data`),[e,t,o,i,r]),l=H.useMemo(()=>Oe(e,t,o,i,r,`assets`),[e,t,o,i,r]),u=H.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,o=!1;if(t.forEach(e=>{let t=i.routes[e.route.id];t&&t.hasLoader&&(!c.some(t=>t.route.id===e.route.id)&&e.route.id in s&&a[e.route.id]?.shouldRevalidate||t.hasClientLoader?o=!0:n.add(e.route.id))}),n.size===0)return[];let l=Y(e,`data`);return o&&n.size>0&&l.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[l.pathname+l.search]},[s,r,i,c,t,e,a]),d=H.useMemo(()=>ke(l,i),[l,i]),f=Fe(l);return H.createElement(H.Fragment,null,u.map(e=>H.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),d.map(e=>H.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),f.map(({key:e,link:t})=>H.createElement(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function Re(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}var ze=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{ze&&(window.__reactRouterVersion=`8`)}catch{}function Be(e,t){return s({basename:t?.basename,getContext:t?.getContext,future:t?.future,history:F({window:t?.window}),hydrationData:t?.hydrationData||Ve(),routes:e,mapRouteProperties:N,hydrationRouteProperties:ne,dataStrategy:t?.dataStrategy,patchRoutesOnNavigation:t?.patchRoutesOnNavigation,window:t?.window,instrumentations:t?.instrumentations}).initialize()}function Ve(){let e=window?.__staticRouterHydrationData;return e&&e.errors&&(e={...e,errors:He(e.errors)}),e}function He(e){if(!e)return null;let t=Object.entries(e),n={};for(let[e,r]of t)if(r&&r.__type===`RouteErrorResponse`)n[e]=new o(r.status,r.statusText,r.data,r.internal===!0);else if(r&&r.__type===`Error`){if(typeof r.__subType==`string`&&u.includes(r.__subType)){let t=window[r.__subType];if(typeof t==`function`)try{let i=new t(r.message);i.stack=``,n[e]=i}catch{}}if(n[e]==null){let t=Error(r.message);t.stack=``,n[e]=t}}else n[e]=r;return n}var $=H.forwardRef(function({onClick:e,discover:n=`render`,prefetch:r=`none`,relative:i,reloadDocument:a,replace:o,mask:s,state:c,target:l,to:u,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p,...m},v){let{basename:y,navigator:b,useTransitions:S}=H.useContext(g),C=typeof u==`string`&&M.test(u),w=h(u,y);u=w.to;let T=E(u,{relative:i}),D=_(),O=null;if(s){let e=t(s,[],D.mask?D.mask.pathname:`/`,!0);y!==`/`&&(e.pathname=e.pathname===`/`?y:x([y,e.pathname])),O=b.createHref(e)}let[k,A,j]=Ne(r,m),N=Ge(u,{replace:o,mask:s,state:c,target:l,preventScrollReset:d,relative:i,viewTransition:f,defaultShouldRevalidate:p,useTransitions:S});function P(t){e&&e(t),t.defaultPrevented||N(t)}let F=!(w.isExternal||a),I=H.createElement(`a`,{...m,...j,href:(F?O:void 0)||w.absoluteURL||T,onClick:F?P:e,ref:Re(v,A),target:l,"data-discover":!C&&n===`render`?`true`:void 0});return k&&!C?H.createElement(H.Fragment,null,I,H.createElement(Pe,{page:T})):I});$.displayName=`Link`;var Ue=H.forwardRef(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:a,viewTransition:o,children:s,...c},l){let u=A(a,{relative:c.relative}),d=_(),f=H.useContext(m),{navigator:p,basename:h}=H.useContext(g),v=f!=null&&Qe(u)&&o===!0,y=p.encodeLocation?p.encodeLocation(u).pathname:u.pathname,b=d.pathname,x=f?.navigation.location?f.navigation.location.pathname:null;t||(b=b.toLowerCase(),x=x?x.toLowerCase():null,y=y.toLowerCase()),x&&h&&(x=D(x,h)||x);let S=y!==`/`&&y.endsWith(`/`)?y.length-1:y.length,C=b===y||!r&&b.startsWith(y)&&b.charAt(S)===`/`,w=x!=null&&(x===y||!r&&x.startsWith(y)&&x.charAt(S)===`/`),T={isActive:C,isPending:w,isTransitioning:v},E=C?e:void 0,O;O=typeof n==`function`?n(T):[n,C?`active`:null,w?`pending`:null,v?`transitioning`:null].filter(Boolean).join(` `);let k=typeof i==`function`?i(T):i;return H.createElement($,{...c,"aria-current":E,className:O,ref:l,style:k,to:a,viewTransition:o},typeof s==`function`?s(T):s)});Ue.displayName=`NavLink`;var We=H.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=`get`,action:s,onSubmit:c,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m)=>{let{useTransitions:h}=H.useContext(g),_=Ye(),v=Xe(s,{relative:l}),y=o.toLowerCase()===`get`?`get`:`post`,b=typeof s==`string`&&M.test(s);return H.createElement(`form`,{ref:m,method:y,action:v,onSubmit:r?c:e=>{if(c&&c(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,s=r?.getAttribute(`formmethod`)||o,p=()=>_(r||e.currentTarget,{fetcherKey:t,method:s,navigate:n,replace:i,state:a,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f});h&&n!==!1?H.startTransition(()=>p()):p()},...p,"data-discover":!b&&e===`render`?`true`:void 0})});We.displayName=`Form`;function Ge(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let u=L(),d=_(),f=A(e,{relative:o});return H.useCallback(p=>{if(me(p,t)){p.preventDefault();let t=n===void 0?j(d)===j(f):n,m=()=>u(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?H.startTransition(()=>m()):m()}},[d,u,f,n,r,i,t,e,a,o,s,c,l])}function Ke(e){T(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=H.useRef(K(e)),n=H.useRef(!1),r=_(),i=H.useMemo(()=>he(r.search,n.current?null:t.current),[r.search]),a=L();return[i,H.useCallback((e,t)=>{let r=K(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var qe=0,Je=()=>`__${String(++qe)}__`;function Ye(){let{router:e}=w(`useSubmit`),{basename:t}=H.useContext(g),n=O(`useSubmit`),r=e.fetch,i=e.navigate;return H.useCallback(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=ve(e,t);a.navigate===!1?await r(a.fetcherKey||Je(),n,a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,relative:a.relative,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,flushSync:a.flushSync}):await i(a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,relative:a.relative,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,t,n])}function Xe(e,{relative:t}={}){let{basename:n}=H.useContext(g),r=H.useContext(z);P(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...A(e||`.`,{relative:t})},o=_();if(e==null){a.search=o.search;let e=new URLSearchParams(a.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();a.search=n?`?${n}`:``}}return(!e||e===`.`)&&i.route.index&&(a.search=a.search?a.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(a.pathname=a.pathname===`/`?n:x([n,a.pathname])),j(a)}function Ze(e,t){let{capture:n}=t||{};H.useEffect(()=>{let t=n==null?void 0:{capture:n};return window.addEventListener(`beforeunload`,e,t),()=>{window.removeEventListener(`beforeunload`,e,t)}},[e,n])}function Qe(e,{relative:t}={}){let n=H.useContext(r);P(n!=null,"`useViewTransitionState` must be used within `react-router/dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:i}=w(`useViewTransitionState`),a=A(e,{relative:t});if(!n.isTransitioning)return!1;let o=D(n.currentLocation.pathname,i)||n.currentLocation.pathname,s=D(n.nextLocation.pathname,i)||n.nextLocation.pathname;return C(a.pathname,s)!=null||C(a.pathname,o)!=null}function $e(e){return e===void 0?`/`:`/p/${e}`}function et(e,t){return e===void 0?`/t/${t}`:`${$e(e)}/t/${t}`}function tt(e){return e===void 0?`/stats`:`/p/${e}/stats`}export{Ue as a,Ke as c,ce as d,ie as f,$ as i,Ce as l,tt as n,Be as o,et as r,Ze as s,$e as t,se as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Cn as t,wn as n}from"./cx-BZTW4xgb.js";import{$ as r,B as i,C as a,Ct as o,Dt as s,E as c,Et as l,F as u,I as d,K as f,L as p,M as m,N as h,O as g,Ot as _,P as v,Q as y,R as b,St as x,T as S,Tt as C,U as w,V as T,W as ee,Y as E,at as te,b as ne,bt as D,ct as re,et as ie,ft as O,gt as k,ht as A,it as j,k as ae,lt as M,mt as N,ot as oe,p as se,pt as ce,q as le,rt as ue,tt as de,ut as fe,w as pe,wt as me,x as he,xt as ge,y as _e,yt as P}from"./ChartTooltip-DwQKHXkN.js";var F=e(n());function I(){return I=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},I.apply(null,arguments)}var L=e=>{var t=e.cx,n=e.cy,r=e.r,i=e.className,a=_(`recharts-dot`,i);return D(t)&&D(n)&&D(r)?F.createElement(`circle`,I({},l(e),A(e),{className:a,cx:t,cy:n,r})):null},ve=[`points`];function R(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function z(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?R(Object(n),!0).forEach(function(t){ye(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):R(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ye(e,t,n){return(t=be(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function be(e){var t=xe(e,`string`);return typeof t==`symbol`?t:t+``}function xe(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function B(){return B=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},B.apply(null,arguments)}function Se(e,t){if(e==null)return{};var n,r,i=Ce(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function Ce(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function we(e){var t=e.option,n=e.dotProps,r=e.className;if((0,F.isValidElement)(t))return(0,F.cloneElement)(t,n);if(typeof t==`function`)return t(n);var i=_(r,typeof t==`boolean`?``:t.className),a=n??{};a.points;var o=Se(a,ve);return F.createElement(L,B({},o,{className:i}))}function Te(e,t){return e==null?!1:t?!0:e.length===1}function V(e){var t=e.points,n=e.dot,r=e.className,i=e.dotClassName,a=e.dataKey,s=e.baseProps,c=e.needClip,l=e.clipPathId,u=e.zIndex,f=u===void 0?E.scatter:u;if(!Te(t,n))return null;var p=d(n),m=C(n),h=t.map((e,r)=>{var o=z(z(z({r:3},s),m),{},{index:r,cx:e.x??void 0,cy:e.y??void 0,dataKey:a,value:e.value,payload:e.payload,points:t});return F.createElement(we,{key:`dot-${r}`,option:n,dotProps:o,className:i})}),g={};return c&&l!=null&&(g.clipPath=`url(#clipPath-${p?``:`dots-`}${l})`),F.createElement(T,{zIndex:f},F.createElement(o,B({className:r},g),h))}function H(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function U(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?H(Object(n),!0).forEach(function(t){Ee(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):H(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ee(e,t,n){return(t=De(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function De(e){var t=Oe(e,`string`);return typeof t==`symbol`?t:t+``}function Oe(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var ke=e=>{var t=e.point,n=e.childIndex,r=e.mainColor,i=e.activeDot,a=e.dataKey,c=e.clipPath;if(i===!1||t.x==null||t.y==null)return null;var l=U(U(U({},{index:n,dataKey:a,cx:t.x,cy:t.y,r:4,fill:r??`none`,strokeWidth:2,stroke:`#fff`,payload:t.payload,value:t.value}),s(i)),A(i)),u=(0,F.isValidElement)(i)?(0,F.cloneElement)(i,l):typeof i==`function`?i(l):F.createElement(L,l);return F.createElement(o,{className:`recharts-active-dot`,clipPath:c},u)};function W(e){var t=e.points,n=e.mainColor,r=e.activeDot,i=e.itemDataKey,o=e.clipPath,s=e.zIndex,c=s===void 0?E.activeDot:s,l=ce(w),u=a();if(t==null||u==null)return null;var d=t.find(e=>u.includes(e.payload));return P(d)?null:F.createElement(T,{zIndex:c},F.createElement(ke,{point:d,childIndex:Number(l),mainColor:n,dataKey:i,activeDot:r,clipPath:o}))}var Ae=[`animationElapsedTime`,`isAnimating`,`isEntrance`,`visibleLength`,`strokeDasharray`,`connectNulls`];function G(){return G=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},G.apply(null,arguments)}function je(e,t){if(e==null)return{};var n,r,i=Me(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function Me(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function Ne(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function K(e,t){return`${t}px ${e}px`}function Pe(e){return e.length%2==0?e:[...e,...e]}function Fe(e,t){for(var n=[],r=0;r<t;++r)n.push(...e);return n}function Ie(e,t,n){var r=Pe(n),i=r.reduce((e,t)=>e+t,0);if(!i)return K(t,e);for(var a=Math.floor(e/i),o=e%i,s=[],c=0,l=0;c<r.length;l+=(u=r[c])??0,++c){var u,d=r[c];if(d!=null&&l+d>o){s=[...r.slice(0,c),o-l];break}}var f=s.length%2==0?[0,t]:[t];return[...Fe(r,a),...s,...f].map(e=>`${e}px`).join(`, `)}function Le(e,t,n){return e?Ie(n,t,`${e}`.split(/[,\s]+/gim).map(e=>parseFloat(e))):K(t,n)}function Re(e){e.animationElapsedTime,e.isAnimating,e.isEntrance;var t=e.visibleLength,n=e.strokeDasharray,i=e.connectNulls,a=je(e,Ae),o=i??!1,s;if(t!=null){var c=a.pathRef;s=Le(n,Ne(c?.current??null),t)}else n!=null&&(s=String(n));return F.createElement(r,G({},a,{connectNulls:o,strokeDasharray:s}))}function ze(e){var t=(0,F.useRef)(0),n=(0,F.useRef)(0),r=(0,F.useRef)(!1),i=(0,F.useRef)(e);return i.current!==e&&(t.current=n.current,i.current=e),(0,F.useCallback)((e,i)=>{if(r.current)return null;var a=Math.min(x(t.current+e*i),i);return e>0&&i>0&&(n.current=Math.max(n.current,a),a>=i)?(r.current=!0,null):a},[])}var q=(e,t,n,r)=>ee(e,`xAxis`,t,r),J=(e,t,n,r)=>f(e,`xAxis`,t,r),Be=(e,t,n,r)=>ee(e,`yAxis`,n,r),Ve=(e,t,n,r)=>f(e,`yAxis`,n,r),He=O([de,q,Be,J,Ve],(e,t,n,r,i)=>fe(e,`xAxis`)?te(t,r,!1):te(n,i,!1)),Ue=(e,t,n,r,i)=>i;function We(e){return e.type===`line`}var Ge=O([le,Ue],(e,t)=>e.filter(We).find(e=>e.id===t)),Ke=O([de,q,Be,J,Ve,Ge,He,y],(e,t,n,r,i,a,o,s)=>{var c=s.chartData,l=s.dataStartIndex,u=s.dataEndIndex;if(!(a==null||t==null||n==null||r==null||i==null||r.length===0||i.length===0||o==null||e!==`horizontal`&&e!==`vertical`)){var d=a.dataKey,f=a.data,p=f!=null&&f.length>0?f:c?.slice(l,u+1);if(p!=null)return mt({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:i,dataKey:d,bandSize:o,displayedData:p})}});function qe(e){var t=s(e),n=3,r=2;if(t!=null){var i=t.r,a=t.strokeWidth,o=Number(i),c=Number(a);return(Number.isNaN(o)||o<0)&&(o=n),(Number.isNaN(c)||c<0)&&(c=r),{r:o,strokeWidth:c}}return{r:n,strokeWidth:r}}var Je=[`id`],Ye=[`type`,`layout`,`connectNulls`,`needClip`,`shape`,`strokeDasharray`],Xe=[`activeDot`,`animateNewValues`,`animationBegin`,`animationDuration`,`animationEasing`,`connectNulls`,`dot`,`hide`,`isAnimationActive`,`label`,`legendType`,`xAxisId`,`yAxisId`,`id`];function Y(){return Y=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Y.apply(null,arguments)}function X(e,t){if(e==null)return{};var n,r,i=Ze(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function Ze(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function Qe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Z(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Qe(Object(n),!0).forEach(function(t){$e(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qe(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function $e(e,t,n){return(t=et(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function et(e){var t=tt(e,`string`);return typeof t==`symbol`?t:t+``}function tt(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function nt(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function rt(e){var t=0,n=0;for(var r of e)r.status===`matched`&&r.prev.x!=null&&r.next.x!=null&&(t+=r.next.x-r.prev.x,n++);return n>0?t/n:0}var Q={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:`ease`,animationInterpolateFn:(e,t)=>{if(e==null)return[];if(t===1)return e.flatMap(e=>e.status===`removed`?[]:[e.next]);var n=rt(e),r=[];for(var i of e)if(i.status===`matched`)r.push(Z(Z({},i.next),{},{x:k(i.prev.x,i.next.x,t),y:k(i.prev.y,i.next.y,t)}));else if(i.status===`added`){if(i.next.x!=null){var a=i.next.x-n;r.push(Z(Z({},i.next),{},{x:k(a,i.next.x,t),y:i.next.y}))}else r.push(i.next)}else if(i.status===`removed`&&i.prev.x!=null){var o=i.prev.x+n;r.push(Z(Z({},i.prev),{},{x:k(i.prev.x,o,t),y:i.prev.y}))}return r},animationMatchBy:m,connectNulls:!1,dot:!0,fill:`#fff`,hide:!1,isAnimationActive:`auto`,label:!1,legendType:`line`,shape:Re,stroke:`#3182bd`,strokeWidth:1,xAxisId:0,yAxisId:0,zIndex:E.line,type:`linear`},it=e=>{var t=e.dataKey,n=e.name,r=e.stroke,i=e.legendType;return[{inactive:e.hide,dataKey:t,type:i,color:r,value:re(n,t),payload:e}]},at=F.memo(e=>{var t=e.dataKey,n=e.data,r=e.stroke,i=e.strokeWidth,a=e.fill,o=e.name,s=e.hide,c=e.unit,l=e.formatter,u=e.tooltipType,d=e.id,f={dataDefinedOnItem:n,getPosition:ge,settings:{stroke:r,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:re(o,t),hide:s,type:u,color:r,unit:c,formatter:l,graphicalItemId:d}};return F.createElement(v,{tooltipEntrySettings:f})});function ot(e){var t=e.clipPathId,n=e.points,r=e.props,i=r.dot,a=r.dataKey,o=r.needClip;r.id;var s=X(r,Je),c=l(s);return F.createElement(V,{points:n,dot:i,className:`recharts-line-dots`,dotClassName:`recharts-line-dot`,dataKey:a,baseProps:c,needClip:o,clipPathId:t})}function st(e){var t=e.showLabels,n=e.children,r=e.points,i=(0,F.useMemo)(()=>r?.map(e=>{var t={x:e.x??0,y:e.y??0,width:0,lowerWidth:0,upperWidth:0,height:0};return Z(Z({},t),{},{value:e.value,payload:e.payload,viewBox:t,parentViewBox:void 0,fill:void 0})}),[r]);return F.createElement(p,{value:t?i:void 0},n)}function ct(e){var t=e.clipPathId,n=e.pathRef,r=e.points,i=e.props,a=e.animationElapsedTime,o=e.isAnimating,s=e.isEntrance,c=e.visibleLength,l=i.type,d=i.layout,f=i.connectNulls,p=i.needClip,m=i.shape,h=i.strokeDasharray,g=X(i,Ye),_=Z(Z({},me(g)),{},{fill:`none`,className:`recharts-line-curve`,clipPath:p?`url(#clipPath-${t})`:void 0,points:r,type:l,layout:d,connectNulls:f,strokeDasharray:h??i.strokeDasharray,pathRef:n,animationElapsedTime:a,isAnimating:o,isEntrance:i.animateNewValues?s:!1,visibleLength:c});return F.createElement(F.Fragment,null,r?.length>1&&F.createElement(u,{option:m,DefaultShape:Q.shape,shapeProps:_}),F.createElement(ot,{points:r,clipPathId:t,props:i}))}function lt(e){var t=e.clipPathId,n=e.props,r=e.pathRef,i=e.previousPointsRef,a=n.points,o=n.isAnimationActive,s=n.animationBegin,c=n.animationDuration,l=n.animationEasing,u=n.animationMatchBy,d=n.animationInterpolateFn,f=n.layout,p=nt(r.current),m=ae(n.onAnimationStart,n.onAnimationEnd),h=m.isAnimating,_=m.handleAnimationStart,v=m.handleAnimationEnd,y=!h,x=ze(a),S=(0,F.useCallback)(e=>e>0&&p>0,[p]);return F.createElement(st,{points:a,showLabels:y},n.children,F.createElement(g,{animationInput:a,animationIdPrefix:`recharts-line-`,items:a,previousItemsRef:i,isAnimationActive:o,animationBegin:s,animationDuration:c,animationEasing:l,onAnimationStart:_,onAnimationEnd:v,animationInterpolateFn:d,animationMatchBy:u,shouldUpdatePreviousRef:S,layout:f},(e,i,a)=>{var o=h||i<1,s=o?x(i,p):null;return F.createElement(ct,{props:n,points:e,clipPathId:t,pathRef:r,animationElapsedTime:i,isAnimating:o,isEntrance:a,visibleLength:s})}),F.createElement(b,{label:n.label}))}function ut(e){var t=e.clipPathId,n=e.props,r=(0,F.useRef)(null),i=(0,F.useRef)(null);return F.createElement(lt,{props:n,clipPathId:t,previousPointsRef:r,pathRef:i})}var dt=(e,t)=>({x:e.x??void 0,y:e.y??void 0,value:e.value,errorVal:M(e.payload,t)}),ft=class extends F.Component{render(){var e=this.props,t=e.hide,n=e.dot,r=e.points,i=e.className,a=e.xAxisId,s=e.yAxisId,c=e.top,l=e.left,u=e.width,f=e.height,p=e.id,m=e.needClip,h=e.zIndex;if(t)return null;var g=_(`recharts-line`,i),v=p,y=qe(n),b=y.r,x=y.strokeWidth,S=d(n),C=b*2+x,w=m?`url(#clipPath-${S?``:`dots-`}${v})`:void 0;return F.createElement(T,{zIndex:h},F.createElement(o,{className:g},m&&F.createElement(`defs`,null,F.createElement(_e,{clipPathId:v,xAxisId:a,yAxisId:s}),!S&&F.createElement(`clipPath`,{id:`clipPath-dots-${v}`},F.createElement(`rect`,{x:l-C/2,y:c-C/2,width:u+C,height:f+C}))),F.createElement(he,{xAxisId:a,yAxisId:s,data:r,dataPointFormatter:dt,errorBarOffset:0},F.createElement(ut,{props:this.props,clipPathId:v}))),F.createElement(W,{activeDot:this.props.activeDot,points:r,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:w}))}};function pt(e){var t=N(e,Q),n=t.activeDot,r=t.animateNewValues,i=t.animationBegin,a=t.animationDuration,o=t.animationEasing,s=t.connectNulls,c=t.dot,l=t.hide,u=t.isAnimationActive,d=t.label,f=t.legendType,p=t.xAxisId,m=t.yAxisId,h=t.id,g=X(t,Xe),_=ne(p,m).needClip,v=pe(),y=ue(),b=j(),x=ce(e=>Ke(e,p,m,b,h));if(y!==`horizontal`&&y!==`vertical`||x==null||v==null)return null;var S=v.height,C=v.width,w=v.x,T=v.y;return F.createElement(ft,Y({},g,{id:h,connectNulls:s,dot:c,activeDot:n,animateNewValues:r,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:u,hide:l,label:d,legendType:f,xAxisId:p,yAxisId:m,points:x,layout:y,height:S,width:C,left:w,top:T,needClip:_}))}function mt(e){var t=e.layout,n=e.xAxis,r=e.yAxis,i=e.xAxisTicks,a=e.yAxisTicks,o=e.dataKey,s=e.bandSize;return e.displayedData.map((e,c)=>{var l=M(e,o);if(t===`horizontal`)return{x:oe({axis:n,ticks:i,bandSize:s,entry:e,index:c}),y:(P(l)?null:r.scale.map(l))??null,value:l,payload:e};var u=P(l)?null:n.scale.map(l),d=oe({axis:r,ticks:a,bandSize:s,entry:e,index:c});return u==null||d==null?null:{x:u,y:d,value:l,payload:e}}).filter(Boolean)}function ht(e){var t=N(e,Q),n=j();return F.createElement(c,{id:t.id,type:`line`},e=>F.createElement(F.Fragment,null,F.createElement(h,{legendPayload:it(t)}),F.createElement(at,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,formatter:t.formatter,tooltipType:t.tooltipType,id:e}),F.createElement(S,{type:`line`,id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),F.createElement(pt,Y({},t,{id:e}))))}var $=F.memo(ht,ie);$.displayName=`Line`;var gt=[`axis`],_t=(0,F.forwardRef)((e,t)=>F.createElement(se,{chartName:`ComposedChart`,defaultTooltipEventType:`axis`,validateTooltipEventTypes:gt,tooltipPayloadSearcher:i,categoricalChartProps:e,ref:t})),vt=t(),yt=3.5;function bt(e){return function({cx:t,cy:n,value:r,index:i}){return typeof r!=`number`||r===0||t===void 0||n===void 0?(0,vt.jsx)(`g`,{},i):(0,vt.jsx)(`circle`,{cx:t,cy:n,r:yt,fill:e,stroke:`var(--surface-raised)`,strokeWidth:1.5},i)}}export{W as a,qe as i,_t as n,V as o,$ as r,bt as t};
|
package/dist/web/index.html
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>Backlog</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-BrkoyuWi.js"></script>
|
|
8
8
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
10
|
-
<link rel="
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/cx-BZTW4xgb.js">
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/paths-ZO6w2vYU.js">
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CAKUAPJF.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "p-backlog",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Keep pull requests clean and audit findings safe: a local, autonomous backlog for Claude Code. The agent files out-of-scope issues as Markdown tasks with context and re-checks them as code changes. Optional web UI with metrics.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
7
7
|
"claude",
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
},
|
|
35
35
|
"files": [
|
|
36
36
|
"dist/cli.js",
|
|
37
|
-
"dist/server.js",
|
|
38
37
|
"dist/web",
|
|
39
38
|
"skill",
|
|
40
39
|
"README.md",
|
package/skill/backlog/SKILL.md
CHANGED
|
@@ -84,14 +84,15 @@ description: Use when, while working on code, you notice a problem outside the c
|
|
|
84
84
|
«Возьми SPA-12» → `backlog take SPA-12`. «Возьми следующую» → `backlog take --next` (проект — по текущему
|
|
85
85
|
репозиторию; из другого каталога добавь `--project <id>`). «Возьми все задачи по src/web/stats» →
|
|
86
86
|
`backlog take --path src/web/stats`: берёт все открытые задачи, чей `source` внутри пути (заблокированные
|
|
87
|
-
пропускает), и печатает их подряд через `---` — исправляй их вместе,
|
|
87
|
+
пропускает), и печатает их подряд через `---` (с `--json` — одним JSON-массивом) — исправляй их вместе,
|
|
88
|
+
закрывай каждую.
|
|
88
89
|
|
|
89
90
|
| Код | Что случилось | Что делать |
|
|
90
91
|
|---|---|---|
|
|
91
92
|
| 0 | Статус стал `in-progress`, выведены путь, связи и текст задачи | Работать |
|
|
92
93
|
| 1 | Это эпик | Показать пользователю задачи эпика из вывода и спросить, какую взять |
|
|
93
94
|
| 2 | Задача или проект не найдены, открытых задач нет | Сообщить пользователю |
|
|
94
|
-
| 3 | Открытые блокеры или задача уже закрыта; при `--next` и `--path` — все подходящие задачи заблокированы | Перечислить блокеры и остановиться.
|
|
95
|
+
| 3 | Открытые блокеры или задача уже закрыта; при `--next` и `--path` — все подходящие задачи заблокированы | Перечислить блокеры и остановиться. `take <ID> --force` — только по прямой просьбе пользователя |
|
|
95
96
|
|
|
96
97
|
1. Прочитай описание и `source`; нужные связанные задачи — `backlog show <ID>`.
|
|
97
98
|
2. Делай работу. Выполнил пункт чеклиста — сразу отметь его в файле задачи (`- [ ]` → `- [x]`, путь есть
|
|
@@ -118,12 +119,15 @@ description: Use when, while working on code, you notice a problem outside the c
|
|
|
118
119
|
завершённые эпики и сдвинутые `source` он уже исправил сам — это поле `fixed`, список `{ kind, taskId, … }`:
|
|
119
120
|
`references-removed` — убраны ссылки на несуществующие задачи `ids`; `epic-closed` — эпик закрыт, все его
|
|
120
121
|
задачи `childIds` закрыты; `source-moved` — `source` сдвинулся `from` → `to`. Перескажи его пользователю
|
|
121
|
-
одной строкой.
|
|
122
|
+
одной строкой. Код выхода 5 — не сбой: есть кандидаты или проблемы задач, которые надо разобрать; 0 —
|
|
123
|
+
разбирать нечего.
|
|
122
124
|
2. У кандидата `source-changed` в JSON уже есть `problem` — первый абзац описания задачи, `snippet` —
|
|
123
125
|
текущий код вокруг `source` с номерами строк — и `diff` — изменения файла с последней проверки (у
|
|
124
126
|
обрезанного `diffOmittedLines` — сколько строк не показано). Обычно этого хватает: реши по ним, не вызывая
|
|
125
127
|
`show`, `grep` и `git show`. Читай задачу (`backlog show <ID>`) и код целиком,
|
|
126
|
-
только если по `snippet` и `diff` не понять; у `duplicate` и `
|
|
128
|
+
только если по `snippet` и `diff` не понять; у `duplicate` и `source-missing` читай задачи всегда.
|
|
129
|
+
Если у кандидата есть поле `source` — строки задачи сдвинулись, это её место в текущем файле, и `snippet`
|
|
130
|
+
показан по нему. Подтверждаешь проблему — `backlog verify <ID> --source <этот source>`.
|
|
127
131
|
3. Реши:
|
|
128
132
|
|
|
129
133
|
| Что видно в коде | Команда |
|
|
@@ -147,7 +151,8 @@ description: Use when, while working on code, you notice a problem outside the c
|
|
|
147
151
|
4. `problems` — список `{ kind, … }`. `file-not-parsed`: файл `path` не разбирается, причины в `problems` —
|
|
148
152
|
поправь YAML руками, не меняя `id`. Остальное перечисли пользователю: `task-invalid` (ошибка `problem`
|
|
149
153
|
в задаче `taskId`), `fix-failed` (исправление не записалось, причина `cause`), `epics-wait-for-files`,
|
|
150
|
-
`project-without-repos`, `project-repos-missing
|
|
154
|
+
`project-without-repos`, `project-repos-missing`, `project-repo-not-git`, `project-history-unreadable`,
|
|
155
|
+
`prefix-shared` (у проектов `projectIds` один префикс — ID задач пересекаются).
|
|
151
156
|
5. В конце ответа — блок, по которому пользователь найдёт закрытое:
|
|
152
157
|
```
|
|
153
158
|
Закрыто в беклоге:
|
|
@@ -91,15 +91,15 @@ out of its epic. An epic closes on its own once all its tasks are closed.
|
|
|
91
91
|
"Take SPA-12" → `backlog take SPA-12`. "Take the next one" → `backlog take --next` (the project is picked
|
|
92
92
|
from the current repository; from another directory add `--project <id>`). "Take all tasks for
|
|
93
93
|
src/web/stats" → `backlog take --path src/web/stats`: takes every open task whose `source` is inside that
|
|
94
|
-
path (skipping blocked ones), and prints them one after another separated by `---` —
|
|
95
|
-
closing each one.
|
|
94
|
+
path (skipping blocked ones), and prints them one after another separated by `---` (with `--json` — one JSON
|
|
95
|
+
array) — fix them together, closing each one.
|
|
96
96
|
|
|
97
97
|
| Code | What happened | What to do |
|
|
98
98
|
|---|---|---|
|
|
99
99
|
| 0 | Status became `in-progress`, the path, links, and task text were printed | Work on it |
|
|
100
100
|
| 1 | It's an epic | Show the user the epic's tasks from the output and ask which one to take |
|
|
101
101
|
| 2 | Task or project not found, no open tasks | Tell the user |
|
|
102
|
-
| 3 | Open blockers, or the task is already closed; with `--next` and `--path` — every matching task is blocked | List the blockers and stop.
|
|
102
|
+
| 3 | Open blockers, or the task is already closed; with `--next` and `--path` — every matching task is blocked | List the blockers and stop. `take <ID> --force` — only on the user's direct request |
|
|
103
103
|
|
|
104
104
|
1. Read the description and `source`; for related tasks you need, use `backlog show <ID>`.
|
|
105
105
|
2. Do the work. Finished a checklist item — mark it in the task file right away (`- [ ]` → `- [x]`, the
|
|
@@ -127,12 +127,16 @@ When: the hook message "code changed for tasks since the last check", a request
|
|
|
127
127
|
Dangling references, completed epics, and shifted `source` — it already fixed those itself; that's the
|
|
128
128
|
`fixed` field, a list of `{ kind, taskId, … }`: `references-removed` — references to missing tasks `ids`
|
|
129
129
|
removed; `epic-closed` — the epic closed, all its tasks `childIds` are closed; `source-moved` — `source`
|
|
130
|
-
moved `from` → `to`. Relay it to the user in one line.
|
|
130
|
+
moved `from` → `to`. Relay it to the user in one line. Exit code 5 is not a failure: there are candidates or
|
|
131
|
+
task problems to work through; 0 means there is nothing to work through.
|
|
131
132
|
2. A `source-changed` candidate already has `problem` in the JSON — the task description's first
|
|
132
133
|
paragraph — `snippet` — the current code around `source` with line numbers — and `diff` — the file's
|
|
133
134
|
changes since the last check (when cut short, `diffOmittedLines` says how many lines are not shown).
|
|
134
135
|
That's usually enough: decide from them without calling `show`, `grep`, or `git show`. Read the task (`backlog show <ID>`) and the whole file only when `snippet` and `diff`
|
|
135
|
-
aren't enough to tell; for `duplicate` and `
|
|
136
|
+
aren't enough to tell; for `duplicate` and `source-missing` always read the task.
|
|
137
|
+
If the candidate has a `source` field, the task's lines have shifted: that is its place in the current
|
|
138
|
+
file, and `snippet` is shown around it. When the problem is still there — `backlog verify <ID> --source
|
|
139
|
+
<that source>`.
|
|
136
140
|
3. Decide:
|
|
137
141
|
|
|
138
142
|
| What the code shows | Command |
|
|
@@ -158,7 +162,8 @@ When: the hook message "code changed for tasks since the last check", a request
|
|
|
158
162
|
4. `problems` — a list of `{ kind, … }`. `file-not-parsed`: the file `path` doesn't parse, reasons in
|
|
159
163
|
`problems` — fix the YAML by hand without changing `id`. List the rest for the user: `task-invalid` (error
|
|
160
164
|
`problem` in task `taskId`), `fix-failed` (the fix wasn't written, reason `cause`), `epics-wait-for-files`,
|
|
161
|
-
`project-without-repos`, `project-repos-missing
|
|
165
|
+
`project-without-repos`, `project-repos-missing`, `project-repo-not-git`, `project-history-unreadable`,
|
|
166
|
+
`prefix-shared` (projects `projectIds` share one prefix — their task IDs collide).
|
|
162
167
|
5. End your answer with a block the user can use to find what was closed:
|
|
163
168
|
```
|
|
164
169
|
Closed in the backlog:
|