sillyspec 3.7.13 → 3.7.15
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/.claude/skills/sillyspec-archive/SKILL.md +77 -0
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +591 -0
- package/.claude/skills/sillyspec-continue/SKILL.md +44 -0
- package/.claude/skills/sillyspec-execute/SKILL.md +233 -0
- package/.claude/skills/sillyspec-explore/SKILL.md +96 -0
- package/.claude/skills/sillyspec-export/SKILL.md +53 -0
- package/.claude/skills/sillyspec-init/SKILL.md +171 -0
- package/.claude/skills/sillyspec-plan/SKILL.md +263 -0
- package/.claude/skills/sillyspec-propose/SKILL.md +248 -0
- package/.claude/skills/sillyspec-quick/SKILL.md +102 -0
- package/.claude/skills/sillyspec-resume/SKILL.md +111 -0
- package/{templates/scan.md → .claude/skills/sillyspec-scan/SKILL.md} +22 -60
- package/.claude/skills/sillyspec-state/SKILL.md +54 -0
- package/.claude/skills/sillyspec-status/SKILL.md +131 -0
- package/.claude/skills/sillyspec-verify/SKILL.md +146 -0
- package/.claude/skills/sillyspec-workspace/SKILL.md +149 -0
- package/.sillyspec/changes/run-command-design/design.md +1230 -0
- package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
- package/.sillyspec/knowledge/INDEX.md +8 -0
- package/.sillyspec/knowledge/uncategorized.md +3 -0
- package/.sillyspec/projects/sillyspec.yaml +3 -0
- package/README.md +4 -0
- package/logo.jpg +0 -0
- package/package.json +7 -1
- package/packages/dashboard/dist/assets/index-Bx0cgoK_.js +7446 -0
- package/packages/dashboard/dist/assets/index-DbkUSsNO.css +1 -0
- package/packages/dashboard/dist/favicon.jpg +0 -0
- package/packages/dashboard/dist/index.html +2 -2
- package/packages/dashboard/dist/logo.jpg +0 -0
- package/packages/dashboard/package-lock.json +220 -0
- package/packages/dashboard/package.json +8 -5
- package/packages/dashboard/public/favicon.jpg +0 -0
- package/packages/dashboard/public/logo.jpg +0 -0
- package/packages/dashboard/server/index.js +92 -4
- package/packages/dashboard/server/parser.js +252 -28
- package/packages/dashboard/src/App.vue +139 -9
- package/packages/dashboard/src/components/ActionBar.vue +23 -39
- package/packages/dashboard/src/components/CommandPalette.vue +40 -65
- package/packages/dashboard/src/components/DetailPanel.vue +68 -53
- package/packages/dashboard/src/components/DocPreview.vue +137 -20
- package/packages/dashboard/src/components/DocTree.vue +48 -26
- package/packages/dashboard/src/components/LogStream.vue +12 -32
- package/packages/dashboard/src/components/PipelineStage.vue +8 -8
- package/packages/dashboard/src/components/PipelineView.vue +35 -43
- package/packages/dashboard/src/components/ProjectList.vue +52 -77
- package/packages/dashboard/src/components/ProjectOverview.vue +178 -0
- package/packages/dashboard/src/components/StageBadge.vue +13 -13
- package/packages/dashboard/src/components/StepCard.vue +11 -11
- package/packages/dashboard/src/components/detail/DocsDetail.vue +48 -0
- package/packages/dashboard/src/components/detail/GitDetail.vue +61 -0
- package/packages/dashboard/src/components/detail/TechDetail.vue +43 -0
- package/packages/dashboard/src/main.js +4 -1
- package/packages/dashboard/src/style.css +13 -13
- package/src/index.js +55 -8
- package/src/init.js +66 -196
- package/src/migrate.js +1 -18
- package/src/progress.js +279 -281
- package/src/run.js +320 -0
- package/src/setup.js +1 -9
- package/src/stages/brainstorm.js +210 -0
- package/src/stages/execute.js +190 -0
- package/src/stages/index.js +22 -0
- package/src/stages/plan.js +118 -0
- package/src/stages/propose.js +115 -0
- package/src/stages/verify.js +98 -0
- package/packages/dashboard/dist/assets/index-5Rrvs0Rl.css +0 -1
- package/packages/dashboard/dist/assets/index-ZNToqi9V.js +0 -17
- package/templates/archive.md +0 -121
- package/templates/brainstorm.md +0 -246
- package/templates/commit.md +0 -123
- package/templates/continue.md +0 -32
- package/templates/execute.md +0 -314
- package/templates/explore.md +0 -60
- package/templates/export.md +0 -21
- package/templates/init.md +0 -61
- package/templates/plan.md +0 -157
- package/templates/progress-format.md +0 -90
- package/templates/propose.md +0 -73
- package/templates/quick.md +0 -135
- package/templates/resume-dialog.md +0 -55
- package/templates/resume.md +0 -53
- package/templates/scan-quick.md +0 -49
- package/templates/skills/playwright-e2e/SKILL.md +0 -340
- package/templates/status.md +0 -72
- package/templates/verify.md +0 -253
- package/templates/workspace-sync.md +0 -89
- package/templates/workspace.md +0 -67
- /package/.sillyspec/{docs/sillyspec/brainstorm → changes/brainstorm-archive}/2026-04-05-dashboard-design.md +0 -0
- /package/.sillyspec/{docs/sillyspec/brainstorm → changes/brainstorm-archive}/2026-04-05-unified-docs-design.md +0 -0
- /package/.sillyspec/{specs/2026-04-05-dashboard-design.md → changes/dashboard/design.md.braindraft} +0 -0
- /package/.sillyspec/{specs/2026-04-05-unified-docs-design.md → changes/unified-docs-design/design.md} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.slide-enter-active[data-v-b5f771a9],.slide-leave-active[data-v-b5f771a9]{transition:all .2s ease}.slide-enter-from[data-v-b5f771a9],.slide-leave-to[data-v-b5f771a9]{opacity:0;max-height:0;overflow:hidden}.slide-enter-to[data-v-b5f771a9],.slide-leave-from[data-v-b5f771a9]{max-height:300px}.line-clamp-2[data-v-0511fd83]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.doc-preview[data-v-fc57afbe]{font-size:13px;line-height:1.7;color:#374151}.doc-preview[data-v-fc57afbe] h1{color:#d97706;font-size:18px;font-weight:700;margin:0 0 16px;border-bottom:1px solid #E5E5EA;padding-bottom:8px}.doc-preview[data-v-fc57afbe] h2{color:#1c1c1e;font-size:15px;font-weight:600;margin:20px 0 10px}.doc-preview[data-v-fc57afbe] h3{color:#d97706;font-size:14px;font-weight:600;margin:16px 0 8px}.doc-preview[data-v-fc57afbe] p{margin:8px 0}.doc-preview[data-v-fc57afbe] strong{color:#1c1c1e;font-weight:600}.doc-preview[data-v-fc57afbe] a{color:#d97706;text-decoration:none}.doc-preview[data-v-fc57afbe] a:hover{text-decoration:underline}.doc-preview[data-v-fc57afbe] code{background:#e5e5ea;color:#1c1c1e;padding:1px 5px;border-radius:3px;font-size:12px;font-family:JetBrains Mono,monospace}.doc-preview[data-v-fc57afbe] pre{background:#1c1c1e;color:#e5e5e7;border:1px solid #E5E5EA;border-radius:6px;padding:12px 16px;overflow-x:auto;font-size:12px;margin:8px 0;line-height:1.5}.doc-preview[data-v-fc57afbe] pre code{background:none;color:inherit;padding:0;border-radius:0;font-size:inherit}.doc-preview[data-v-fc57afbe] ul,.doc-preview[data-v-fc57afbe] ol{padding-left:20px;margin:8px 0;color:#374151}.doc-preview[data-v-fc57afbe] li{margin:4px 0}.doc-preview[data-v-fc57afbe] blockquote{border-left:3px solid #D97706;padding-left:12px;margin:12px 0;color:#636366;font-style:italic}.doc-preview[data-v-fc57afbe] table{width:100%;border-collapse:collapse;margin:12px 0;font-size:12px}.doc-preview[data-v-fc57afbe] thead th{background:#f0f0f3;color:#1c1c1e;font-weight:600;text-align:left;padding:8px 12px;border:1px solid #E5E5EA}.doc-preview[data-v-fc57afbe] tbody td{padding:6px 12px;border:1px solid #E5E5EA;color:#374151}.doc-preview[data-v-fc57afbe] tbody tr:hover{background:#f9fafb}.doc-preview[data-v-fc57afbe] hr{border:none;border-top:1px solid #E5E5EA;margin:16px 0}.project-overview[data-v-543019d4]{display:flex;align-items:center;background:#fff;border-bottom:1px solid #E5E5EA;padding:8px 16px;min-height:48px;gap:8px;flex-shrink:0;overflow-x:auto}.ov-section[data-v-543019d4]{display:flex;align-items:center;gap:6px;white-space:nowrap;flex-shrink:0}.ov-clickable[data-v-543019d4]{cursor:pointer;border-radius:4px;padding:2px 6px;margin:-2px -6px;transition:background .15s}.ov-clickable[data-v-543019d4]:hover{background:#d977060f}.ov-name[data-v-543019d4]{font-weight:600;font-size:13px;color:#1c1c1e}.ov-path[data-v-543019d4],.ov-label[data-v-543019d4]{font-size:11px;color:#636366}.ov-value[data-v-543019d4]{font-size:12px;color:#1c1c1e;font-weight:500}.ov-tag[data-v-543019d4]{font-size:10px;padding:1px 8px;border-radius:10px;background:#d9770614;color:#d97706;font-weight:500}.ov-divider[data-v-543019d4]{width:1px;height:20px;background:#e5e5ea;flex-shrink:0}.ov-git[data-v-543019d4]{margin-left:auto;gap:10px}.ov-branch[data-v-543019d4]{font-size:11px;color:#636366;background:#f5f5f7;padding:1px 8px;border-radius:4px}.ov-commit[data-v-543019d4]{font-size:11px;color:#636366;max-width:200px;overflow:hidden;text-overflow:ellipsis}.ov-dirty[data-v-543019d4]{font-size:11px;color:#d97706;font-weight:500}*{margin:0;padding:0;box-sizing:border-box}body{font-family:DM Sans,-apple-system,BlinkMacSystemFont,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{width:100vw;height:100vh;overflow:hidden}/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--animate-pulse-dot:pulse-dot 1.5s ease-in-out infinite}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-20{z-index:20}.mx-4{margin-inline:calc(var(--spacing) * 4)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.hidden{display:none}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing) * 1)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-12{height:calc(var(--spacing) * 12)}.h-\[2px\]{height:2px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-72{max-height:calc(var(--spacing) * 72)}.w-0{width:calc(var(--spacing) * 0)}.w-1{width:calc(var(--spacing) * 1)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-\[2px\]{width:2px}.w-\[200px\]{width:200px}.w-\[340px\]{width:340px}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.rotate-180{rotate:180deg}.animate-pulse-dot{animation:var(--animate-pulse-dot)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px * var(--tw-space-y-reverse));margin-block-end:calc(1px * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.p-3{padding:calc(var(--spacing) * 3)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-px{padding-block:1px}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pl-3\.5{padding-left:calc(var(--spacing) * 3.5)}.pl-\[3px\]{padding-left:3px}.text-center{text-align:center}.font-\[DM_Sans\,sans-serif\]{font-family:DM Sans,sans-serif}.font-\[JetBrains_Mono\,monospace\]{font-family:JetBrains Mono,monospace}.font-mono{font-family:var(--font-mono)}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[18px\]{font-size:18px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.15em\]{--tw-tracking:.15em;letter-spacing:.15em}.tracking-\[0\.25em\]{--tw-tracking:.25em;letter-spacing:.25em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-black{color:var(--color-black)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-0{opacity:0}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hover\:bg-\[\#D97706\]:hover{background-color:#d97706}.hover\:bg-\[\#FEF3C7\]:hover{background-color:#fef3c7}}.active\:bg-\[\#D97706\]:active{background-color:#d97706}}@keyframes pulse-glow{0%,to{box-shadow:0 0 #fbbf2466}50%{box-shadow:0 0 12px 2px #fbbf2426}}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(1.5)}}@keyframes breathe{0%,to{opacity:.5}50%{opacity:1}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes slide-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes glow-border{0%,to{border-color:#fbbf2426}50%{border-color:#fbbf2480}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.font-mono-log{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.noise-bg{position:relative}.noise-bg:before{content:"";pointer-events:none;z-index:0;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");position:absolute;top:0;right:0;bottom:0;left:0}.accent-stripe{background:repeating-linear-gradient(-45deg,#0000,#0000 8px,#fbbf2408 8px,#fbbf2408 9px)}.progress-gradient{background:linear-gradient(90deg,#fbbf24,#f59e0b,#fb923c)}.skeleton-shimmer{background:linear-gradient(90deg,#1a1e28 25%,#2a3040,#1a1e28 75%) 0 0/200% 100%;animation:1.5s ease-in-out infinite shimmer}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#2a3040;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#3a4555}*{scrollbar-width:thin;scrollbar-color:#2a2a2d transparent}::selection{color:#fbbf24;background:#fbbf2433}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
|
|
Binary file
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-Bx0cgoK_.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DbkUSsNO.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body style="background-color: #0A0A0B; margin: 0;">
|
|
14
14
|
<div id="app"></div>
|
|
Binary file
|
|
@@ -8,7 +8,10 @@
|
|
|
8
8
|
"name": "@sillyspec/dashboard",
|
|
9
9
|
"version": "1.0.0",
|
|
10
10
|
"dependencies": {
|
|
11
|
+
"@vicons/ionicons5": "^0.13.0",
|
|
11
12
|
"chokidar": "^4.0",
|
|
13
|
+
"marked": "^17.0.6",
|
|
14
|
+
"naive-ui": "^2.44.1",
|
|
12
15
|
"open": "^10.1",
|
|
13
16
|
"vue": "^3.5",
|
|
14
17
|
"ws": "^8.18"
|
|
@@ -66,6 +69,30 @@
|
|
|
66
69
|
"node": ">=6.9.0"
|
|
67
70
|
}
|
|
68
71
|
},
|
|
72
|
+
"node_modules/@css-render/plugin-bem": {
|
|
73
|
+
"version": "0.15.14",
|
|
74
|
+
"resolved": "https://registry.npmmirror.com/@css-render/plugin-bem/-/plugin-bem-0.15.14.tgz",
|
|
75
|
+
"integrity": "sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==",
|
|
76
|
+
"license": "MIT",
|
|
77
|
+
"peerDependencies": {
|
|
78
|
+
"css-render": "~0.15.14"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"node_modules/@css-render/vue3-ssr": {
|
|
82
|
+
"version": "0.15.14",
|
|
83
|
+
"resolved": "https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz",
|
|
84
|
+
"integrity": "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==",
|
|
85
|
+
"license": "MIT",
|
|
86
|
+
"peerDependencies": {
|
|
87
|
+
"vue": "^3.0.11"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"node_modules/@emotion/hash": {
|
|
91
|
+
"version": "0.8.0",
|
|
92
|
+
"resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz",
|
|
93
|
+
"integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==",
|
|
94
|
+
"license": "MIT"
|
|
95
|
+
},
|
|
69
96
|
"node_modules/@esbuild/aix-ppc64": {
|
|
70
97
|
"version": "0.25.12",
|
|
71
98
|
"resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
|
|
@@ -557,6 +584,12 @@
|
|
|
557
584
|
"@jridgewell/sourcemap-codec": "^1.4.14"
|
|
558
585
|
}
|
|
559
586
|
},
|
|
587
|
+
"node_modules/@juggle/resize-observer": {
|
|
588
|
+
"version": "3.4.0",
|
|
589
|
+
"resolved": "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
|
|
590
|
+
"integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==",
|
|
591
|
+
"license": "Apache-2.0"
|
|
592
|
+
},
|
|
560
593
|
"node_modules/@rollup/rollup-android-arm-eabi": {
|
|
561
594
|
"version": "4.60.1",
|
|
562
595
|
"resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz",
|
|
@@ -1186,6 +1219,27 @@
|
|
|
1186
1219
|
"dev": true,
|
|
1187
1220
|
"license": "MIT"
|
|
1188
1221
|
},
|
|
1222
|
+
"node_modules/@types/lodash": {
|
|
1223
|
+
"version": "4.17.24",
|
|
1224
|
+
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz",
|
|
1225
|
+
"integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==",
|
|
1226
|
+
"license": "MIT"
|
|
1227
|
+
},
|
|
1228
|
+
"node_modules/@types/lodash-es": {
|
|
1229
|
+
"version": "4.17.12",
|
|
1230
|
+
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
|
|
1231
|
+
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
|
|
1232
|
+
"license": "MIT",
|
|
1233
|
+
"dependencies": {
|
|
1234
|
+
"@types/lodash": "*"
|
|
1235
|
+
}
|
|
1236
|
+
},
|
|
1237
|
+
"node_modules/@vicons/ionicons5": {
|
|
1238
|
+
"version": "0.13.0",
|
|
1239
|
+
"resolved": "https://registry.npmmirror.com/@vicons/ionicons5/-/ionicons5-0.13.0.tgz",
|
|
1240
|
+
"integrity": "sha512-zvZKBPjEXKN7AXNo2Na2uy+nvuv6SP4KAMQxpKL2vfHMj0fSvuw7JZcOPCjQC3e7ayssKnaoFVAhbYcW6v41qQ==",
|
|
1241
|
+
"license": "MIT"
|
|
1242
|
+
},
|
|
1189
1243
|
"node_modules/@vitejs/plugin-vue": {
|
|
1190
1244
|
"version": "5.2.4",
|
|
1191
1245
|
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
|
|
@@ -1300,6 +1354,12 @@
|
|
|
1300
1354
|
"integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==",
|
|
1301
1355
|
"license": "MIT"
|
|
1302
1356
|
},
|
|
1357
|
+
"node_modules/async-validator": {
|
|
1358
|
+
"version": "4.2.5",
|
|
1359
|
+
"resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
|
|
1360
|
+
"integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
|
|
1361
|
+
"license": "MIT"
|
|
1362
|
+
},
|
|
1303
1363
|
"node_modules/bundle-name": {
|
|
1304
1364
|
"version": "4.1.0",
|
|
1305
1365
|
"resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz",
|
|
@@ -1330,12 +1390,47 @@
|
|
|
1330
1390
|
"url": "https://paulmillr.com/funding/"
|
|
1331
1391
|
}
|
|
1332
1392
|
},
|
|
1393
|
+
"node_modules/css-render": {
|
|
1394
|
+
"version": "0.15.14",
|
|
1395
|
+
"resolved": "https://registry.npmmirror.com/css-render/-/css-render-0.15.14.tgz",
|
|
1396
|
+
"integrity": "sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==",
|
|
1397
|
+
"license": "MIT",
|
|
1398
|
+
"dependencies": {
|
|
1399
|
+
"@emotion/hash": "~0.8.0",
|
|
1400
|
+
"csstype": "~3.0.5"
|
|
1401
|
+
}
|
|
1402
|
+
},
|
|
1403
|
+
"node_modules/css-render/node_modules/csstype": {
|
|
1404
|
+
"version": "3.0.11",
|
|
1405
|
+
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.0.11.tgz",
|
|
1406
|
+
"integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==",
|
|
1407
|
+
"license": "MIT"
|
|
1408
|
+
},
|
|
1333
1409
|
"node_modules/csstype": {
|
|
1334
1410
|
"version": "3.2.3",
|
|
1335
1411
|
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
|
|
1336
1412
|
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
|
1337
1413
|
"license": "MIT"
|
|
1338
1414
|
},
|
|
1415
|
+
"node_modules/date-fns": {
|
|
1416
|
+
"version": "4.1.0",
|
|
1417
|
+
"resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz",
|
|
1418
|
+
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
|
|
1419
|
+
"license": "MIT",
|
|
1420
|
+
"funding": {
|
|
1421
|
+
"type": "github",
|
|
1422
|
+
"url": "https://github.com/sponsors/kossnocorp"
|
|
1423
|
+
}
|
|
1424
|
+
},
|
|
1425
|
+
"node_modules/date-fns-tz": {
|
|
1426
|
+
"version": "3.2.0",
|
|
1427
|
+
"resolved": "https://registry.npmmirror.com/date-fns-tz/-/date-fns-tz-3.2.0.tgz",
|
|
1428
|
+
"integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==",
|
|
1429
|
+
"license": "MIT",
|
|
1430
|
+
"peerDependencies": {
|
|
1431
|
+
"date-fns": "^3.0.0 || ^4.0.0"
|
|
1432
|
+
}
|
|
1433
|
+
},
|
|
1339
1434
|
"node_modules/default-browser": {
|
|
1340
1435
|
"version": "5.5.0",
|
|
1341
1436
|
"resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.5.0.tgz",
|
|
@@ -1460,6 +1555,12 @@
|
|
|
1460
1555
|
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
|
1461
1556
|
"license": "MIT"
|
|
1462
1557
|
},
|
|
1558
|
+
"node_modules/evtd": {
|
|
1559
|
+
"version": "0.2.4",
|
|
1560
|
+
"resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz",
|
|
1561
|
+
"integrity": "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==",
|
|
1562
|
+
"license": "MIT"
|
|
1563
|
+
},
|
|
1463
1564
|
"node_modules/fdir": {
|
|
1464
1565
|
"version": "6.5.0",
|
|
1465
1566
|
"resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz",
|
|
@@ -1500,6 +1601,15 @@
|
|
|
1500
1601
|
"dev": true,
|
|
1501
1602
|
"license": "ISC"
|
|
1502
1603
|
},
|
|
1604
|
+
"node_modules/highlight.js": {
|
|
1605
|
+
"version": "11.11.1",
|
|
1606
|
+
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.11.1.tgz",
|
|
1607
|
+
"integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
|
|
1608
|
+
"license": "BSD-3-Clause",
|
|
1609
|
+
"engines": {
|
|
1610
|
+
"node": ">=12.0.0"
|
|
1611
|
+
}
|
|
1612
|
+
},
|
|
1503
1613
|
"node_modules/is-docker": {
|
|
1504
1614
|
"version": "3.0.0",
|
|
1505
1615
|
"resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz",
|
|
@@ -1819,6 +1929,18 @@
|
|
|
1819
1929
|
"url": "https://opencollective.com/parcel"
|
|
1820
1930
|
}
|
|
1821
1931
|
},
|
|
1932
|
+
"node_modules/lodash": {
|
|
1933
|
+
"version": "4.18.1",
|
|
1934
|
+
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.18.1.tgz",
|
|
1935
|
+
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
|
|
1936
|
+
"license": "MIT"
|
|
1937
|
+
},
|
|
1938
|
+
"node_modules/lodash-es": {
|
|
1939
|
+
"version": "4.18.1",
|
|
1940
|
+
"resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz",
|
|
1941
|
+
"integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
|
|
1942
|
+
"license": "MIT"
|
|
1943
|
+
},
|
|
1822
1944
|
"node_modules/magic-string": {
|
|
1823
1945
|
"version": "0.30.21",
|
|
1824
1946
|
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
|
|
@@ -1828,6 +1950,50 @@
|
|
|
1828
1950
|
"@jridgewell/sourcemap-codec": "^1.5.5"
|
|
1829
1951
|
}
|
|
1830
1952
|
},
|
|
1953
|
+
"node_modules/marked": {
|
|
1954
|
+
"version": "17.0.6",
|
|
1955
|
+
"resolved": "https://registry.npmmirror.com/marked/-/marked-17.0.6.tgz",
|
|
1956
|
+
"integrity": "sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==",
|
|
1957
|
+
"license": "MIT",
|
|
1958
|
+
"bin": {
|
|
1959
|
+
"marked": "bin/marked.js"
|
|
1960
|
+
},
|
|
1961
|
+
"engines": {
|
|
1962
|
+
"node": ">= 20"
|
|
1963
|
+
}
|
|
1964
|
+
},
|
|
1965
|
+
"node_modules/naive-ui": {
|
|
1966
|
+
"version": "2.44.1",
|
|
1967
|
+
"resolved": "https://registry.npmmirror.com/naive-ui/-/naive-ui-2.44.1.tgz",
|
|
1968
|
+
"integrity": "sha512-reo8Esw0p58liZwbUutC7meW24Xbn3EwNv91zReWKm2W4JPu+zfgJRn/F7aO0BFmvN+h2brA2M5lRvYqLq4kuA==",
|
|
1969
|
+
"license": "MIT",
|
|
1970
|
+
"dependencies": {
|
|
1971
|
+
"@css-render/plugin-bem": "^0.15.14",
|
|
1972
|
+
"@css-render/vue3-ssr": "^0.15.14",
|
|
1973
|
+
"@types/lodash": "^4.17.20",
|
|
1974
|
+
"@types/lodash-es": "^4.17.12",
|
|
1975
|
+
"async-validator": "^4.2.5",
|
|
1976
|
+
"css-render": "^0.15.14",
|
|
1977
|
+
"csstype": "^3.1.3",
|
|
1978
|
+
"date-fns": "^4.1.0",
|
|
1979
|
+
"date-fns-tz": "^3.2.0",
|
|
1980
|
+
"evtd": "^0.2.4",
|
|
1981
|
+
"highlight.js": "^11.8.0",
|
|
1982
|
+
"lodash": "^4.17.21",
|
|
1983
|
+
"lodash-es": "^4.17.21",
|
|
1984
|
+
"seemly": "^0.3.10",
|
|
1985
|
+
"treemate": "^0.3.11",
|
|
1986
|
+
"vdirs": "^0.1.8",
|
|
1987
|
+
"vooks": "^0.2.12",
|
|
1988
|
+
"vueuc": "^0.4.65"
|
|
1989
|
+
},
|
|
1990
|
+
"engines": {
|
|
1991
|
+
"node": ">=20"
|
|
1992
|
+
},
|
|
1993
|
+
"peerDependencies": {
|
|
1994
|
+
"vue": "^3.0.0"
|
|
1995
|
+
}
|
|
1996
|
+
},
|
|
1831
1997
|
"node_modules/nanoid": {
|
|
1832
1998
|
"version": "3.3.11",
|
|
1833
1999
|
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
|
|
@@ -1981,6 +2147,12 @@
|
|
|
1981
2147
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
1982
2148
|
}
|
|
1983
2149
|
},
|
|
2150
|
+
"node_modules/seemly": {
|
|
2151
|
+
"version": "0.3.10",
|
|
2152
|
+
"resolved": "https://registry.npmmirror.com/seemly/-/seemly-0.3.10.tgz",
|
|
2153
|
+
"integrity": "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==",
|
|
2154
|
+
"license": "MIT"
|
|
2155
|
+
},
|
|
1984
2156
|
"node_modules/source-map-js": {
|
|
1985
2157
|
"version": "1.2.1",
|
|
1986
2158
|
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
|
|
@@ -2028,6 +2200,24 @@
|
|
|
2028
2200
|
"url": "https://github.com/sponsors/SuperchupuDev"
|
|
2029
2201
|
}
|
|
2030
2202
|
},
|
|
2203
|
+
"node_modules/treemate": {
|
|
2204
|
+
"version": "0.3.11",
|
|
2205
|
+
"resolved": "https://registry.npmmirror.com/treemate/-/treemate-0.3.11.tgz",
|
|
2206
|
+
"integrity": "sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==",
|
|
2207
|
+
"license": "MIT"
|
|
2208
|
+
},
|
|
2209
|
+
"node_modules/vdirs": {
|
|
2210
|
+
"version": "0.1.8",
|
|
2211
|
+
"resolved": "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz",
|
|
2212
|
+
"integrity": "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==",
|
|
2213
|
+
"license": "MIT",
|
|
2214
|
+
"dependencies": {
|
|
2215
|
+
"evtd": "^0.2.2"
|
|
2216
|
+
},
|
|
2217
|
+
"peerDependencies": {
|
|
2218
|
+
"vue": "^3.0.11"
|
|
2219
|
+
}
|
|
2220
|
+
},
|
|
2031
2221
|
"node_modules/vite": {
|
|
2032
2222
|
"version": "6.4.1",
|
|
2033
2223
|
"resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.1.tgz",
|
|
@@ -2103,6 +2293,18 @@
|
|
|
2103
2293
|
}
|
|
2104
2294
|
}
|
|
2105
2295
|
},
|
|
2296
|
+
"node_modules/vooks": {
|
|
2297
|
+
"version": "0.2.12",
|
|
2298
|
+
"resolved": "https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz",
|
|
2299
|
+
"integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==",
|
|
2300
|
+
"license": "MIT",
|
|
2301
|
+
"dependencies": {
|
|
2302
|
+
"evtd": "^0.2.2"
|
|
2303
|
+
},
|
|
2304
|
+
"peerDependencies": {
|
|
2305
|
+
"vue": "^3.0.0"
|
|
2306
|
+
}
|
|
2307
|
+
},
|
|
2106
2308
|
"node_modules/vue": {
|
|
2107
2309
|
"version": "3.5.32",
|
|
2108
2310
|
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.32.tgz",
|
|
@@ -2124,6 +2326,24 @@
|
|
|
2124
2326
|
}
|
|
2125
2327
|
}
|
|
2126
2328
|
},
|
|
2329
|
+
"node_modules/vueuc": {
|
|
2330
|
+
"version": "0.4.65",
|
|
2331
|
+
"resolved": "https://registry.npmmirror.com/vueuc/-/vueuc-0.4.65.tgz",
|
|
2332
|
+
"integrity": "sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==",
|
|
2333
|
+
"license": "MIT",
|
|
2334
|
+
"dependencies": {
|
|
2335
|
+
"@css-render/vue3-ssr": "^0.15.10",
|
|
2336
|
+
"@juggle/resize-observer": "^3.3.1",
|
|
2337
|
+
"css-render": "^0.15.10",
|
|
2338
|
+
"evtd": "^0.2.4",
|
|
2339
|
+
"seemly": "^0.3.6",
|
|
2340
|
+
"vdirs": "^0.1.4",
|
|
2341
|
+
"vooks": "^0.2.4"
|
|
2342
|
+
},
|
|
2343
|
+
"peerDependencies": {
|
|
2344
|
+
"vue": "^3.0.11"
|
|
2345
|
+
}
|
|
2346
|
+
},
|
|
2127
2347
|
"node_modules/ws": {
|
|
2128
2348
|
"version": "8.20.0",
|
|
2129
2349
|
"resolved": "https://registry.npmmirror.com/ws/-/ws-8.20.0.tgz",
|
|
@@ -8,15 +8,18 @@
|
|
|
8
8
|
"preview": "vite preview"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"
|
|
12
|
-
"ws": "^8.18",
|
|
11
|
+
"@vicons/ionicons5": "^0.13.0",
|
|
13
12
|
"chokidar": "^4.0",
|
|
14
|
-
"
|
|
13
|
+
"marked": "^17.0.6",
|
|
14
|
+
"naive-ui": "^2.44.1",
|
|
15
|
+
"open": "^10.1",
|
|
16
|
+
"vue": "^3.5",
|
|
17
|
+
"ws": "^8.18"
|
|
15
18
|
},
|
|
16
19
|
"devDependencies": {
|
|
20
|
+
"@tailwindcss/vite": "^4.0",
|
|
17
21
|
"@vitejs/plugin-vue": "^5.2",
|
|
18
|
-
"vite": "^6.0",
|
|
19
22
|
"tailwindcss": "^4.0",
|
|
20
|
-
"
|
|
23
|
+
"vite": "^6.0"
|
|
21
24
|
}
|
|
22
25
|
}
|
|
Binary file
|
|
Binary file
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createServer } from 'http'
|
|
2
2
|
import { WebSocketServer } from 'ws'
|
|
3
|
-
import { existsSync, readFileSync, readdirSync, realpathSync } from 'fs'
|
|
4
|
-
import { join, dirname, basename, sep } from 'path'
|
|
3
|
+
import { existsSync, readFileSync, readdirSync, realpathSync, watch } from 'fs'
|
|
4
|
+
import { join, dirname, basename, sep, resolve } from 'path'
|
|
5
5
|
import { fileURLToPath } from 'url'
|
|
6
6
|
import { homedir } from 'os'
|
|
7
7
|
import open from 'open'
|
|
8
|
-
import { parseProjectState, parseDocsTree } from './parser.js'
|
|
8
|
+
import { parseProjectState, parseDocsTree, parseProjectOverview, parseGitDetail, parseTechStackDetail, parseDocsList } from './parser.js'
|
|
9
9
|
import { startWatcher, stopWatcher, addCustomScanPath, removeCustomScanPath, getCustomScanPaths, customScanPaths } from './watcher.js'
|
|
10
10
|
import { executeCommand } from './executor.js'
|
|
11
11
|
|
|
@@ -15,6 +15,44 @@ const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
|
15
15
|
let wss = null
|
|
16
16
|
const activeProcesses = new Map()
|
|
17
17
|
|
|
18
|
+
// Progress file watchers: projectPath -> { watcher, timer, refCount }
|
|
19
|
+
const progressWatchers = new Map()
|
|
20
|
+
|
|
21
|
+
function startProgressWatch(projectPath) {
|
|
22
|
+
if (progressWatchers.has(projectPath)) {
|
|
23
|
+
progressWatchers.get(projectPath).refCount++
|
|
24
|
+
return
|
|
25
|
+
}
|
|
26
|
+
const progressFile = join(projectPath, '.sillyspec', '.runtime', 'progress.json')
|
|
27
|
+
if (!existsSync(progressFile)) return
|
|
28
|
+
|
|
29
|
+
let timer = null
|
|
30
|
+
try {
|
|
31
|
+
const watcher = watch(progressFile, (eventType) => {
|
|
32
|
+
if (timer) clearTimeout(timer)
|
|
33
|
+
timer = setTimeout(() => {
|
|
34
|
+
timer = null
|
|
35
|
+
try {
|
|
36
|
+
const state = parseProjectState(projectPath)
|
|
37
|
+
broadcast({ type: 'project:update', data: { path: projectPath, state } })
|
|
38
|
+
} catch {}
|
|
39
|
+
}, 200)
|
|
40
|
+
})
|
|
41
|
+
progressWatchers.set(projectPath, { watcher, timer, refCount: 1 })
|
|
42
|
+
} catch {}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function stopProgressWatch(projectPath) {
|
|
46
|
+
const entry = progressWatchers.get(projectPath)
|
|
47
|
+
if (!entry) return
|
|
48
|
+
entry.refCount--
|
|
49
|
+
if (entry.refCount <= 0) {
|
|
50
|
+
entry.watcher.close()
|
|
51
|
+
if (entry.timer) clearTimeout(entry.timer)
|
|
52
|
+
progressWatchers.delete(projectPath)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
18
56
|
/**
|
|
19
57
|
* Broadcast message to all connected WebSocket clients
|
|
20
58
|
* @param {object} data - Data to broadcast
|
|
@@ -205,6 +243,44 @@ function startServer({ port = 3456, open: openBrowser = true } = {}) {
|
|
|
205
243
|
return
|
|
206
244
|
}
|
|
207
245
|
|
|
246
|
+
// Detail API
|
|
247
|
+
const detailMatch = req.url?.match(/^\/api\/projects\/(.+)\/detail(\?|$)/)
|
|
248
|
+
if (detailMatch) {
|
|
249
|
+
const projectPath = decodeURIComponent(detailMatch[1])
|
|
250
|
+
const url = new URL(req.url, `http://${req.headers.host}`)
|
|
251
|
+
const type = url.searchParams.get('type')
|
|
252
|
+
let data
|
|
253
|
+
try {
|
|
254
|
+
if (type === 'git') data = parseGitDetail(projectPath)
|
|
255
|
+
else if (type === 'tech') data = parseTechStackDetail(projectPath)
|
|
256
|
+
else if (type === 'docs') data = parseDocsList(projectPath)
|
|
257
|
+
else { res.writeHead(400); res.end(JSON.stringify({ error: 'Invalid type' })); return }
|
|
258
|
+
res.setHeader('Content-Type', 'application/json')
|
|
259
|
+
res.writeHead(200)
|
|
260
|
+
res.end(JSON.stringify(data))
|
|
261
|
+
} catch (err) {
|
|
262
|
+
res.writeHead(500)
|
|
263
|
+
res.end(JSON.stringify({ error: err.message }))
|
|
264
|
+
}
|
|
265
|
+
return
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Overview API
|
|
269
|
+
if (req.url?.startsWith('/api/projects/') && req.url.endsWith('/overview')) {
|
|
270
|
+
const parts = req.url.replace('/api/projects/', '').replace('/overview', '').split('/')
|
|
271
|
+
const projectPath = decodeURIComponent(parts.join('/'))
|
|
272
|
+
try {
|
|
273
|
+
const overview = parseProjectOverview(projectPath)
|
|
274
|
+
res.setHeader('Content-Type', 'application/json')
|
|
275
|
+
res.writeHead(200)
|
|
276
|
+
res.end(JSON.stringify(overview))
|
|
277
|
+
} catch (err) {
|
|
278
|
+
res.writeHead(500)
|
|
279
|
+
res.end(JSON.stringify({ error: err.message }))
|
|
280
|
+
}
|
|
281
|
+
return
|
|
282
|
+
}
|
|
283
|
+
|
|
208
284
|
if (req.url?.startsWith('/api/project/')) {
|
|
209
285
|
const projectName = decodeURIComponent(req.url.split('/').pop())
|
|
210
286
|
discoverProjects().then(projects => {
|
|
@@ -311,7 +387,8 @@ function startServer({ port = 3456, open: openBrowser = true } = {}) {
|
|
|
311
387
|
discoverProjects().then(projects => {
|
|
312
388
|
const projectsWithState = projects.map(p => ({
|
|
313
389
|
...p,
|
|
314
|
-
state: parseProjectState(p.path)
|
|
390
|
+
state: parseProjectState(p.path),
|
|
391
|
+
overview: parseProjectOverview(p.path)
|
|
315
392
|
}))
|
|
316
393
|
|
|
317
394
|
ws.send(JSON.stringify({
|
|
@@ -319,6 +396,11 @@ function startServer({ port = 3456, open: openBrowser = true } = {}) {
|
|
|
319
396
|
data: projectsWithState
|
|
320
397
|
}))
|
|
321
398
|
|
|
399
|
+
// Start watching progress files for all discovered projects
|
|
400
|
+
for (const p of projectsWithState) {
|
|
401
|
+
startProgressWatch(p.path)
|
|
402
|
+
}
|
|
403
|
+
|
|
322
404
|
// Send current scan paths
|
|
323
405
|
ws.send(JSON.stringify({
|
|
324
406
|
type: 'scan:paths',
|
|
@@ -382,6 +464,12 @@ function startServer({ port = 3456, open: openBrowser = true } = {}) {
|
|
|
382
464
|
|
|
383
465
|
ws.on('close', () => {
|
|
384
466
|
console.log('WebSocket client disconnected')
|
|
467
|
+
// Decrement progress watchers — we track which projects this client was watching
|
|
468
|
+
// via the initial projects:init. For simplicity, stop all that we started.
|
|
469
|
+
// (Other clients will re-start via their connection if still active)
|
|
470
|
+
for (const [path] of progressWatchers) {
|
|
471
|
+
stopProgressWatch(path)
|
|
472
|
+
}
|
|
385
473
|
})
|
|
386
474
|
|
|
387
475
|
ws.on('error', (err) => {
|