@hir4ta/memoria 0.3.3 → 0.4.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.
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.1.18 | 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-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--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}}}@layer theme{:root,:host{--color-green-600:oklch(62.7% .194 149.214);--color-blue-600:oklch(54.6% .245 262.881);--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-geist-sans);--default-mono-font-family:var(--font-geist-mono)}}@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}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.z-50{z-index:50}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.h-4{height:calc(var(--spacing)*4)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-14{height:calc(var(--spacing)*14)}.min-h-\[100px\]{min-height:100px}.min-h-\[calc\(100vh-3\.5rem\)\]{min-height:calc(100vh - 3.5rem)}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing)*4)}.w-56{width:calc(var(--spacing)*56)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.cursor-pointer{cursor:pointer}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.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-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}: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-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--border)}.border-input{border-color:var(--input)}.border-transparent{border-color:#0000}.bg-background,.bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-card{background-color:var(--card)}.bg-destructive{background-color:var(--destructive)}.bg-muted,.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--muted)40%,transparent)}}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.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-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-2{padding-block:calc(var(--spacing)*2)}.py-6{padding-block:calc(var(--spacing)*6)}.py-12{padding-block:calc(var(--spacing)*12)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.text-center{text-align:center}.font-mono{font-family:var(--font-geist-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.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)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground{color:var(--muted-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur{--tw-backdrop-blur:blur(8px);-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-\[color\,box-shadow\]{transition-property:color,box-shadow;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))}.outline-none{--tw-outline-style:none;outline-style:none}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@media(min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}@media(hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}a.\[a\&\]\:hover\:underline:hover{text-decoration-line:underline}}}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--font-geist-sans:ui-sans-serif,system-ui,sans-serif;--font-geist-mono:ui-monospace,monospace}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}@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-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@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}
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>memoria - Dashboard</title>
7
7
  <link rel="icon" type="image/x-icon" href="/favicon.ico" />
8
- <script type="module" crossorigin src="/assets/index-BpBWarmo.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-CC2t4_6M.css">
8
+ <script type="module" crossorigin src="/assets/index-CzFDrDqS.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-klQerreI.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
package/dist/server.js CHANGED
@@ -3055,151 +3055,6 @@ app.delete("/api/decisions/:id", async (c) => {
3055
3055
  return c.json({ error: "Failed to delete decision" }, 500);
3056
3056
  }
3057
3057
  });
3058
- app.get("/api/patterns", async (c) => {
3059
- const patternsDir = path.join(getMemoriaDir(), "patterns");
3060
- try {
3061
- if (!fs.existsSync(patternsDir)) {
3062
- return c.json([]);
3063
- }
3064
- const files = fs.readdirSync(patternsDir).filter((f) => f.endsWith(".json"));
3065
- const patterns = files.map((file) => {
3066
- const content = fs.readFileSync(path.join(patternsDir, file), "utf-8");
3067
- const data = JSON.parse(content);
3068
- return { user: file.replace(".json", ""), ...data };
3069
- });
3070
- return c.json(patterns);
3071
- } catch {
3072
- return c.json({ error: "Failed to read patterns" }, 500);
3073
- }
3074
- });
3075
- app.get("/api/patterns/:user", async (c) => {
3076
- const user = c.req.param("user");
3077
- const patternsDir = path.join(getMemoriaDir(), "patterns");
3078
- try {
3079
- const filePath = path.join(patternsDir, `${user}.json`);
3080
- if (!fs.existsSync(filePath)) {
3081
- return c.json({ error: "Pattern not found" }, 404);
3082
- }
3083
- const content = fs.readFileSync(filePath, "utf-8");
3084
- const data = JSON.parse(content);
3085
- return c.json({ user, ...data });
3086
- } catch {
3087
- return c.json({ error: "Failed to read pattern" }, 500);
3088
- }
3089
- });
3090
- app.post("/api/patterns", async (c) => {
3091
- const patternsDir = path.join(getMemoriaDir(), "patterns");
3092
- try {
3093
- if (!fs.existsSync(patternsDir)) {
3094
- fs.mkdirSync(patternsDir, { recursive: true });
3095
- }
3096
- const body = await c.req.json();
3097
- const user = body.user;
3098
- if (!user) {
3099
- return c.json({ error: "user is required" }, 400);
3100
- }
3101
- const filePath = path.join(patternsDir, `${user}.json`);
3102
- const existing = fs.existsSync(filePath) ? JSON.parse(fs.readFileSync(filePath, "utf-8")) : { patterns: [] };
3103
- existing.patterns = body.patterns || existing.patterns;
3104
- existing.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
3105
- fs.writeFileSync(filePath, JSON.stringify(existing, null, 2));
3106
- return c.json({ user, ...existing }, 201);
3107
- } catch {
3108
- return c.json({ error: "Failed to save pattern" }, 500);
3109
- }
3110
- });
3111
- app.delete("/api/patterns/:user", async (c) => {
3112
- const user = c.req.param("user");
3113
- const patternsDir = path.join(getMemoriaDir(), "patterns");
3114
- try {
3115
- const filePath = path.join(patternsDir, `${user}.json`);
3116
- if (!fs.existsSync(filePath)) {
3117
- return c.json({ error: "Pattern not found" }, 404);
3118
- }
3119
- fs.unlinkSync(filePath);
3120
- return c.json({ success: true });
3121
- } catch {
3122
- return c.json({ error: "Failed to delete pattern" }, 500);
3123
- }
3124
- });
3125
- app.get("/api/rules", async (c) => {
3126
- const rulesDir = path.join(getMemoriaDir(), "rules");
3127
- try {
3128
- if (!fs.existsSync(rulesDir)) {
3129
- return c.json([]);
3130
- }
3131
- const files = fs.readdirSync(rulesDir).filter((f) => f.endsWith(".json"));
3132
- const rules = files.map((file) => {
3133
- const content = fs.readFileSync(path.join(rulesDir, file), "utf-8");
3134
- return JSON.parse(content);
3135
- });
3136
- return c.json(rules);
3137
- } catch {
3138
- return c.json({ error: "Failed to read rules" }, 500);
3139
- }
3140
- });
3141
- app.get("/api/rules/:id", async (c) => {
3142
- const id = c.req.param("id");
3143
- const rulesDir = path.join(getMemoriaDir(), "rules");
3144
- try {
3145
- const filePath = path.join(rulesDir, `${id}.json`);
3146
- if (!fs.existsSync(filePath)) {
3147
- return c.json({ error: "Rules not found" }, 404);
3148
- }
3149
- const content = fs.readFileSync(filePath, "utf-8");
3150
- return c.json(JSON.parse(content));
3151
- } catch {
3152
- return c.json({ error: "Failed to read rules" }, 500);
3153
- }
3154
- });
3155
- app.post("/api/rules", async (c) => {
3156
- const rulesDir = path.join(getMemoriaDir(), "rules");
3157
- try {
3158
- if (!fs.existsSync(rulesDir)) {
3159
- fs.mkdirSync(rulesDir, { recursive: true });
3160
- }
3161
- const body = await c.req.json();
3162
- const id = body.id || "coding-standards";
3163
- body.id = id;
3164
- body.createdAt = body.createdAt || (/* @__PURE__ */ new Date()).toISOString();
3165
- body.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
3166
- const filePath = path.join(rulesDir, `${id}.json`);
3167
- fs.writeFileSync(filePath, JSON.stringify(body, null, 2));
3168
- return c.json(body, 201);
3169
- } catch {
3170
- return c.json({ error: "Failed to create rules" }, 500);
3171
- }
3172
- });
3173
- app.put("/api/rules/:id", async (c) => {
3174
- const id = c.req.param("id");
3175
- const rulesDir = path.join(getMemoriaDir(), "rules");
3176
- try {
3177
- const filePath = path.join(rulesDir, `${id}.json`);
3178
- if (!fs.existsSync(filePath)) {
3179
- return c.json({ error: "Rules not found" }, 404);
3180
- }
3181
- const body = await c.req.json();
3182
- body.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
3183
- fs.writeFileSync(filePath, JSON.stringify(body, null, 2));
3184
- return c.json(body);
3185
- } catch {
3186
- return c.json({ error: "Failed to update rules" }, 500);
3187
- }
3188
- });
3189
- app.delete("/api/rules/:id", async (c) => {
3190
- const id = c.req.param("id");
3191
- const rulesDir = path.join(getMemoriaDir(), "rules");
3192
- try {
3193
- const filePath = path.join(rulesDir, `${id}.json`);
3194
- if (!fs.existsSync(filePath)) {
3195
- return c.json({ error: "Rules not found" }, 404);
3196
- }
3197
- fs.unlinkSync(filePath);
3198
- return c.json({ success: true });
3199
- } catch {
3200
- return c.json({ error: "Failed to delete rules" }, 500);
3201
- }
3202
- });
3203
3058
  app.get("/api/info", async (c) => {
3204
3059
  const projectRoot = getProjectRoot();
3205
3060
  const memoriaDir = getMemoriaDir();
@@ -231,12 +231,12 @@ if [ "$decision_count" -gt 0 ]; then
231
231
  # Extract a title from the text (first significant sentence)
232
232
  title=$(echo "$text" | head -c 500 | grep -oE '(決定|採用|選択|方針|実装)[^。.\n]{5,50}' | head -1 || echo "Auto-detected decision")
233
233
  if [ -z "$title" ] || [ "$title" = "Auto-detected decision" ]; then
234
- title=$(echo "$text" | head -c 100 | tr '\n' ' ' | sed 's/^[[:space:]]*//' | cut -c1-50)
234
+ title=$(echo "$text" | head -c 100 | LC_ALL=C tr '\n' ' ' | sed 's/^[[:space:]]*//' | cut -c1-50)
235
235
  [ -n "$title" ] && title="${title}..."
236
236
  fi
237
237
 
238
238
  # Extract key decision content (sentences with decision keywords)
239
- decision_content=$(echo "$text" | grep -oE '[^。.\n]*?(決定|採用|選択|することにした|ことにする|方針)[^。.\n]*[。.]?' | head -3 | tr '\n' ' ' || echo "$text" | head -c 200)
239
+ decision_content=$(echo "$text" | grep -oE '[^。.\n]*?(決定|採用|選択|することにした|ことにする|方針)[^。.\n]*[。.]?' | head -3 | LC_ALL=C tr '\n' ' ' || echo "$text" | head -c 200)
240
240
 
241
241
  # Build decision JSON
242
242
  decision_json=$(jq -n \
@@ -80,7 +80,7 @@ if [ -n "$related_sessions" ]; then
80
80
  fi
81
81
 
82
82
  if [ -n "$draft_decisions" ]; then
83
- context_parts="${context_parts}\n\n[memoria] 未レビューの設計決定(自動検出):\n\n${draft_decisions}\nダッシュボードで確認・編集できます: \`npx @hir4ta/memoria --dashboard\`"
83
+ context_parts="${context_parts}\n\n[memoria] 未レビューの技術的な判断(自動検出):\n\n${draft_decisions}\nダッシュボードで確認・編集できます: \`npx @hir4ta/memoria --dashboard\`"
84
84
  fi
85
85
 
86
86
  # Escape for JSON
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hir4ta/memoria",
3
- "version": "0.3.3",
4
- "description": "Claude Code の長期記憶プラグイン - セッション自動保存、設計決定の記録、Webダッシュボード",
3
+ "version": "0.4.0",
4
+ "description": "Claude Code の長期記憶プラグイン - セッション自動保存、技術的な判断の記録、Webダッシュボード",
5
5
  "keywords": [
6
6
  "claude",
7
7
  "claude-code",
@@ -66,4 +66,4 @@
66
66
  "volta": {
67
67
  "node": "24.12.0"
68
68
  }
69
- }
69
+ }
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: decision
3
- description: 設計決定を記録する。
3
+ description: 技術的な判断を記録する。
4
4
  ---
5
5
 
6
6
  # /memoria:decision
7
7
 
8
- 設計決定(ADR: Architecture Decision Record)を記録するスキルです。
8
+ 技術的な判断(ADR: Architecture Decision Record)を記録するスキルです。
9
9
 
10
10
  ## 自動保存 vs 手動保存
11
11
 
@@ -14,7 +14,7 @@ description: 設計決定を記録する。
14
14
  | **自動** | セッション終了時 | `draft`(要レビュー) |
15
15
  | **手動** | `/memoria:decision` 実行時 | `active`(確定) |
16
16
 
17
- - **自動保存**: セッション終了時に会話から設計決定を自動検出・保存(`status: draft`)
17
+ - **自動保存**: セッション終了時に会話から技術的な判断を自動検出・保存(`status: draft`)
18
18
  - **手動保存**: このコマンドで明示的に記録(`status: active`)
19
19
 
20
20
  自動検出された決定はダッシュボードでレビュー・編集できます。
@@ -25,7 +25,7 @@ description: 設計決定を記録する。
25
25
  /memoria:decision "タイトル"
26
26
  ```
27
27
 
28
- 対話形式で設計決定を記録します。
28
+ 対話形式で技術的な判断を記録します。
29
29
 
30
30
  ## 実行手順
31
31
 
@@ -47,7 +47,7 @@ mkdir -p .memoria/decisions
47
47
  Write: .memoria/decisions/jwt-auth-001.json
48
48
  ```
49
49
 
50
- ## 設計決定JSONスキーマ
50
+ ## 技術的な判断JSONスキーマ
51
51
 
52
52
  ```json
53
53
  {
@@ -108,7 +108,7 @@ Write: .memoria/decisions/jwt-auth-001.json
108
108
  ```
109
109
  > /memoria:decision "認証方式の選択"
110
110
 
111
- 設計決定を記録します。
111
+ 技術的な判断を記録します。
112
112
 
113
113
  決定内容を入力してください:
114
114
  > セッション管理にJWTを採用する
@@ -125,7 +125,7 @@ Write: .memoria/decisions/jwt-auth-001.json
125
125
 
126
126
  ### 会話コンテキストからの自動抽出
127
127
 
128
- 現在の会話で設計決定がすでに議論されている場合、Claudeがコンテキストから自動的に抽出して記録します。
128
+ 現在の会話で技術的な判断がすでに議論されている場合、Claudeがコンテキストから自動的に抽出して記録します。
129
129
 
130
130
  ```
131
131
  > /memoria:decision "認証方式の選択"
@@ -142,7 +142,7 @@ Write: .memoria/decisions/jwt-auth-001.json
142
142
  ## 出力フォーマット
143
143
 
144
144
  ```
145
- 設計決定を保存しました。
145
+ 技術的な判断を保存しました。
146
146
 
147
147
  ID: jwt-auth-001
148
148
  タイトル: 認証方式の選択
@@ -5,7 +5,7 @@ description: ナレッジを検索する。
5
5
 
6
6
  # /memoria:search
7
7
 
8
- 保存されたセッション、設計決定、パターンを検索するスキルです。
8
+ 保存されたセッション、技術的な判断、パターンを検索するスキルです。
9
9
 
10
10
  ## 使い方
11
11
 
@@ -58,7 +58,7 @@ Read: .memoria/{type}/{filename}.json
58
58
  - `messages[].content` - メッセージ内容
59
59
  - `tags` - タグ
60
60
 
61
- ### 設計決定 (.memoria/decisions/*.json)
61
+ ### 技術的な判断 (.memoria/decisions/*.json)
62
62
  - `title` - タイトル
63
63
  - `decision` - 決定内容
64
64
  - `reasoning` - 理由
@@ -11,19 +11,19 @@ memoriaはClaude Codeに長期記憶を与えるプラグインです。
11
11
 
12
12
  1. **セッション自動保存**: セッション終了時・コンパクト時に会話履歴を自動保存
13
13
  2. **セッション再開**: `/memoria:resume` で過去のセッションを復元
14
- 3. **設計決定記録**: セッション終了時に自動検出 + `/memoria:decision` で手動記録
14
+ 3. **技術的な判断の記録**: セッション終了時に自動検出 + `/memoria:decision` で手動記録
15
15
  4. **ナレッジ検索**: `/memoria:search` で保存した情報を検索
16
- 5. **Webダッシュボード**: セッション・決定・パターンを視覚的に管理
16
+ 5. **Webダッシュボード**: セッション・判断記録を視覚的に管理
17
17
 
18
- ## 設計決定の自動保存
18
+ ## 技術的な判断の自動保存
19
19
 
20
20
  | 保存方式 | タイミング | ステータス |
21
21
  |---------|-----------|-----------|
22
22
  | **自動** | セッション終了時 | `draft`(要レビュー) |
23
23
  | **手動** | `/memoria:decision` 実行時 | `active`(確定) |
24
24
 
25
- セッション終了時に、会話から設計決定を自動検出して保存します(`status: draft`)。
26
- 自動検出された決定はダッシュボードでレビュー・編集できます。
25
+ セッション終了時に、会話から技術的な判断を自動検出して保存します(`status: draft`)。
26
+ 自動検出された判断はダッシュボードでレビュー・編集できます。
27
27
 
28
28
  ## コマンド
29
29
 
@@ -31,9 +31,8 @@ memoriaはClaude Codeに長期記憶を与えるプラグインです。
31
31
  |---------|------|
32
32
  | `/memoria:resume [id]` | セッションを再開(ID省略で一覧) |
33
33
  | `/memoria:save` | 現在のセッションを手動保存 |
34
- | `/memoria:decision "タイトル"` | 設計決定を記録(確定) |
34
+ | `/memoria:decision "タイトル"` | 技術的な判断を記録(確定) |
35
35
  | `/memoria:search <query>` | ナレッジを検索 |
36
- | `/memoria:dashboard` | ダッシュボードURL表示 |
37
36
 
38
37
  ## ダッシュボード
39
38
 
@@ -50,9 +49,7 @@ npx @hir4ta/memoria --dashboard
50
49
  ```
51
50
  .memoria/
52
51
  ├── sessions/ # セッション履歴
53
- ├── decisions/ # 設計決定(ADR)
54
- ├── patterns/ # 開発者パターン
55
- └── rules/ # コーディングルール
52
+ └── decisions/ # 技術的な判断
56
53
  ```
57
54
 
58
55
  ## 重要: ファイル操作方法
@@ -86,7 +83,7 @@ npx @hir4ta/memoria --dashboard
86
83
  }
87
84
  ```
88
85
 
89
- ## 設計決定JSONスキーマ
86
+ ## 技術的な判断JSONスキーマ
90
87
 
91
88
  ```json
92
89
  {
@@ -109,7 +106,7 @@ npx @hir4ta/memoria --dashboard
109
106
  |---|------|
110
107
  | `draft` | 自動検出(要レビュー) |
111
108
  | `active` | 確定済み |
112
- | `superseded` | 後の決定で置き換え |
109
+ | `superseded` | 後の判断で置き換え |
113
110
  | `deprecated` | 非推奨 |
114
111
 
115
112
  ### source フィールド