miki-moni 0.3.1
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/LICENSE +21 -0
- package/README.md +283 -0
- package/README.zh-CN.md +275 -0
- package/README.zh-TW.md +275 -0
- package/bin/miki.mjs +49 -0
- package/dist/web/assets/favicon-DFpLtP36.svg +13 -0
- package/dist/web/assets/index--89DkyV1.css +1 -0
- package/dist/web/assets/index-CyPlxvOn.js +64 -0
- package/dist/web/index.html +20 -0
- package/dist/web/pair-info.html +138 -0
- package/dist/web-phone/assets/app-CyQWCdKZ.js +64 -0
- package/dist/web-phone/assets/index-D5BUh7Uf.js +1 -0
- package/dist/web-phone/assets/index-D8vY_9ld.css +1 -0
- package/dist/web-phone/index.html +20 -0
- package/hooks/miki-emit.ps1 +56 -0
- package/package.json +89 -0
- package/shared/i18n.ts +915 -0
- package/src/cli/i18n-cli.ts +149 -0
- package/src/cli/miki.ts +168 -0
- package/src/cli/pair.ts +534 -0
- package/src/cli/prompt.ts +6 -0
- package/src/cli/pushable-iter.ts +45 -0
- package/src/cli/setup-self-host.ts +292 -0
- package/src/cli/setup-wizard.ts +130 -0
- package/src/cli/wrap.ts +742 -0
- package/src/config.ts +121 -0
- package/src/crypto.ts +66 -0
- package/src/data-dir.ts +31 -0
- package/src/ext-registry.ts +47 -0
- package/src/hook-handler.ts +86 -0
- package/src/index.ts +279 -0
- package/src/install-hooks.ts +107 -0
- package/src/notifier.ts +21 -0
- package/src/pairing.ts +100 -0
- package/src/protocol-ext.ts +46 -0
- package/src/relay-client.ts +468 -0
- package/src/relay-protocol.ts +57 -0
- package/src/server.ts +1134 -0
- package/src/session-resolver.ts +437 -0
- package/src/session-store.ts +131 -0
- package/src/types.ts +33 -0
- package/src/vscode-bridge.ts +407 -0
- package/src/wrap-process.ts +183 -0
- package/tools/tray.ps1 +286 -0
- package/worker/package.json +24 -0
- package/worker/src/daemon-relay.ts +348 -0
- package/worker/src/env.ts +11 -0
- package/worker/src/handshake.ts +63 -0
- package/worker/src/index.ts +81 -0
- package/worker/src/pairing-code.ts +39 -0
- package/worker/src/pairing-coordinator.ts +145 -0
- package/worker/wrangler-selfhost.toml +36 -0
- package/worker/wrangler.toml +29 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.static{position:static}.sticky{position:sticky}.top-0{top:0}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-6{margin-bottom:1.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.flex{display:flex}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-px{height:1px}.max-h-64{max-height:16rem}.min-h-screen{min-height:100vh}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-md{max-width:28rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-red-800{--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-950{--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.bg-slate-500{--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/50{background-color:#0f172a80}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tracking-widest{letter-spacing:.1em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{--sl1: #fcfcfd;--sl2: #f9f9fb;--sl3: #f0f0f3;--sl4: #e8e8ec;--sl5: #e0e1e6;--sl6: #d9d9e0;--sl7: #cdced6;--sl8: #b9bbc6;--sl9: #8b8d98;--sl10: #80828d;--sl11: #60646c;--sl12: #1c2024;--bg: #ffffff;--bg-elev: var(--sl1);--card: var(--sl2);--border: var(--sl4);--border-hi: var(--sl7);--fg: var(--sl12);--fg-muted: var(--sl11);--fg-subtle: var(--sl9);--btn-bg: var(--sl3);--cell-bg: rgba(255, 255, 255, .7);--cell-bg-hover: rgba(255, 255, 255, .95);--cell-bg-stale: rgba(252, 220, 230, .85);--cell-bg-stale-hover: rgba(248, 205, 220, .95);--pass: #1f7a4d;--warn: #a3661f;--neutral: #4b556a;--accent: #b3261e}[data-theme=dark]{--sl1: #000000;--sl2: #161618;--sl3: #1f2024;--sl4: #292a2f;--sl5: #3a3b40;--sl6: #4a4a4f;--sl7: #585860;--sl8: #6f6f76;--sl9: #858589;--sl10: #9f9fa3;--sl11: #c8c8c8;--sl12: #e6e6e6;--bg: var(--sl1);--bg-elev: var(--sl2);--card: var(--sl2);--border: var(--sl5);--border-hi: var(--sl6);--fg: var(--sl12);--fg-muted: var(--sl11);--fg-subtle: var(--sl9);--btn-bg: var(--sl3);--cell-bg: var(--sl2);--cell-bg-hover: var(--sl3);--cell-bg-stale: rgba(244, 71, 71, .1);--cell-bg-stale-hover: rgba(244, 71, 71, .16);--pass: #4ec9b0;--warn: #ce9178;--neutral: #569cd6;--accent: #f44747}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:Inter,Noto Sans TC,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;font-feature-settings:"tnum" 1,"cv11" 1;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:hover{color:var(--fg)}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-thumb{background:var(--sl7);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--sl9)}button{font-family:inherit;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}input,textarea,select{font-family:inherit;font-size:13px;color:var(--fg);background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:6px 10px;outline:none;transition:border-color .12s ease}input:hover,textarea:hover,select:hover{border-color:var(--border-hi)}input:focus,textarea:focus,select:focus{border-color:var(--sl8);box-shadow:0 0 0 2px var(--sl3)}textarea{resize:vertical}@media (pointer: coarse){input,textarea,select{font-size:16px!important}}.btn-ghost{display:inline-flex;align-items:center;gap:6px;background:transparent;color:var(--fg-muted);border:none;border-radius:6px;padding:5px 10px;font-size:13px;transition:background .12s ease,color .12s ease}.btn-ghost:hover{background:var(--sl3);color:var(--fg)}.btn-outline{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:7px;font-size:13px;transition:border-color .12s ease,background .12s ease}.btn-outline:hover{border-color:var(--border-hi);background:var(--sl2)}.btn-primary{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px;background:var(--fg);color:var(--bg);border:none;border-radius:7px;font-size:13px;font-weight:500;transition:opacity .12s ease}.btn-primary:hover{opacity:.88}.btn-warn{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px;background:var(--accent);color:#fff;border:none;border-radius:7px;font-size:13px;font-weight:500;transition:opacity .12s ease}.btn-warn:hover{opacity:.9}.header-stat{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;font-size:12px;color:var(--fg-muted);background:transparent;border:1px solid transparent;border-radius:6px;font-family:inherit;cursor:pointer;transition:background .12s ease,color .12s ease}.header-stat:hover,.header-stat.is-active{background:var(--sl3);color:var(--fg)}.header-stat strong{font-weight:600;font-variant-numeric:tabular-nums;color:var(--fg)}.header-stat .dot{width:6px;height:6px}.section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-subtle)}.card{background:var(--bg);border:1px solid var(--border);border-radius:8px;transition:border-color .12s ease}.card:hover{border-color:var(--border-hi)}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.dot-active{background:var(--pass)}.dot-waiting{background:var(--warn)}.dot-idle{background:var(--neutral)}.dot-stale{background:var(--accent)}.toolbox{border:1px solid rgba(180,130,40,.22);border-radius:6px;overflow:hidden;background:transparent;font-size:12px}.toolbox-head{display:flex;align-items:center;gap:8px;padding:6px 10px;background:transparent;border-bottom:1px solid rgba(180,130,40,.18);font-weight:500;color:var(--fg-muted)}.toolbox-row{display:grid;grid-template-columns:36px 1fr;align-items:start}.toolbox-row+.toolbox-row{border-top:1px solid rgba(180,130,40,.18)}.toolbox-label{padding:6px 8px;background:transparent;border-right:1px solid rgba(180,130,40,.18);font-size:10px;font-weight:600;color:var(--fg-subtle);text-transform:uppercase;letter-spacing:.08em;text-align:center}.toolbox-content{padding:6px 10px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12px;white-space:pre-wrap;word-break:break-word;color:var(--fg);max-height:260px;overflow-y:auto}.toolbox-content.is-error{color:var(--accent)}.md{color:var(--fg);font-size:13px}.md>*{margin:0 0 6px}.md>*:last-child{margin-bottom:0}.md h1,.md h2,.md h3,.md h4{margin:10px 0 4px;font-weight:600;color:var(--fg);line-height:1.3}.md h1{font-size:17px}.md h2{font-size:15px}.md h3{font-size:14px}.md h4{font-size:13px;color:var(--fg-muted)}.md code{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:.875em;padding:1px 5px;background:var(--sl3);border-radius:3px}.md pre{padding:10px 12px;background:var(--sl2);border:1px solid var(--border);border-radius:6px;overflow-x:auto}.md pre code{background:none;padding:0;font-size:12px;color:var(--fg)}.md ul,.md ol{padding-left:20px}.md li{margin:2px 0}.md blockquote{padding:4px 0 4px 12px;border-left:3px solid var(--border-hi);color:var(--fg-muted)}.md a{color:var(--neutral);text-decoration:underline;text-decoration-color:var(--border-hi)}.md a:hover{text-decoration-color:var(--neutral)}.md table{width:100%;border-collapse:collapse;font-size:12px}.md th,.md td{padding:6px 10px;border:1px solid var(--border);text-align:left}.md th{background:var(--sl2);font-weight:600}.md hr{border:0;border-top:1px solid var(--border)}.tabbar{display:flex;align-items:stretch;gap:2px;border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:thin}.tab{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:13px;color:var(--fg-muted);border:1px solid transparent;border-bottom:none;border-top-left-radius:6px;border-top-right-radius:6px;margin-bottom:-1px;white-space:nowrap;transition:background .12s ease,color .12s ease;cursor:pointer;background:transparent}.tab:hover{background:var(--sl2);color:var(--fg)}.tab.active{background:var(--bg);color:var(--fg);font-weight:500;border-color:var(--border);border-bottom-color:var(--bg)}.tab .tab-close{margin-left:4px;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;border-radius:3px;color:var(--fg-subtle);font-size:14px;line-height:1}.tab .tab-close:hover{background:var(--sl4);color:var(--accent)}.cwd-group{border-radius:10px;padding:12px;margin-bottom:16px;border:1px solid var(--border)}.cwd-group-header{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:12px;color:var(--fg-muted);font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.cwd-group-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;align-items:stretch}.cwd-group-grid>.cell{height:100%}@media (max-width: 720px){.cwd-group-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 480px){.cwd-group-grid{grid-template-columns:1fr}.cwd-group-grid>.cell{height:auto}.cell-turn-assistant .cell-turn-body{-webkit-line-clamp:3}.cell-preview{overflow:visible}}html,body{overflow-x:hidden;max-width:100vw}.app-shell{max-width:1280px;margin:0 auto;padding:16px 24px 64px}@media (max-width: 480px){.app-shell{padding:10px 10px 48px}}.cell{min-width:0;overflow:hidden}.cell-preview,.cell-convo,.cell-head,.cell-cwd,.cell-foot,.cell-turn{min-width:0}.cell-turn-body{min-width:0;overflow-wrap:anywhere}.cell-title{min-width:0}.md,.md *{overflow-wrap:anywhere;max-width:100%}.md pre,.md code{white-space:pre-wrap;word-break:break-all}.cell{background:var(--cell-bg);border:1px solid var(--border);border-radius:0;padding:10px 12px;cursor:default;transition:border-color .12s ease,background .12s ease,transform .06s ease;position:relative;display:flex;flex-direction:column;min-height:130px}.cell:hover{border-color:var(--border-hi);background:var(--cell-bg-hover)}.cell:active{transform:scale(.995)}.cell-head{display:flex;align-items:center;gap:6px;margin-bottom:4px}.cell-title{font-weight:500;font-size:13px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cell-status{font-size:10px;color:var(--fg-subtle);text-transform:uppercase;letter-spacing:.06em}.cell-cwd{font-size:10px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cell-preview{flex:1;margin-top:4px;color:var(--fg-muted);font-size:12px;line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical}.cell-empty{color:var(--fg-subtle);font-style:italic}.cell-convo{display:flex;flex-direction:column;gap:6px;-webkit-line-clamp:unset;-webkit-box-orient:unset;overflow:hidden}.cell-turn{display:grid;grid-template-columns:56px 1fr;gap:6px;align-items:start;padding:4px 6px;border-radius:4px;font-size:11.5px;line-height:1.45}.cell-turn-role{font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;padding-top:1px;display:flex;flex-direction:column;gap:2px}.cell-turn-ts{font-size:9px;font-weight:400;text-transform:none;letter-spacing:0;color:var(--fg-subtle);font-family:ui-monospace,monospace}.streaming-cursor{display:inline-block;margin-left:2px;color:var(--pass);font-weight:600;animation:stream-blink 1s steps(2,start) infinite}@keyframes stream-blink{to{visibility:hidden}}.cell-turn-body{color:var(--fg);overflow:hidden;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;word-break:break-word}.cell-turn-user{background:var(--turn-bg-user)}.cell-turn-user .cell-turn-role{color:var(--neutral, #607080)}.cell-turn-assistant{background:var(--turn-bg-assistant)}.cell-turn-assistant .cell-turn-role{color:var(--pass, #1f8a5a)}.cell-turn-assistant,.cell-turn-user{min-height:76px}.cell-turn-tool{background:#b4822812;padding:2px 6px;font-size:11px}.cell-turn-tool .cell-turn-role{color:#a8740d}.cell-tool-inline{display:flex;align-items:baseline;gap:3px;font-size:10px;color:var(--fg-muted);min-width:0;white-space:nowrap;flex:1 1 auto}.cell-tool-inline .cell-tool-icon{color:#a8740d;flex-shrink:0}.cell-tool-inline strong{font-weight:600;color:var(--fg);flex-shrink:0}.cell-tool-inline .cell-tool-desc{color:var(--fg-subtle);flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis}.cell-tool-inline .cell-tool-ts{color:var(--fg-subtle);font-family:ui-monospace,monospace;flex-shrink:0;margin-left:2px}.cell-turn-tool .cell-turn-body{-webkit-line-clamp:1;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes cell-flash-yellow{0%,to{background:transparent;box-shadow:none}50%{background:#ffe16e52;box-shadow:0 0 0 2px #dcaa1e59}}.cell-flash{animation:cell-flash-yellow 1s ease-in-out infinite}.cell-activity{display:inline-flex;align-items:center;gap:4px;margin-left:6px;padding:0;font-size:10px;font-weight:500;color:#3b82f6;background:transparent;border:none;white-space:nowrap;animation:cell-activity-text-blink 1.4s ease-in-out infinite}.cell-activity-dot{width:6px;height:6px;border-radius:50%;background:#3b82f6}@keyframes cell-activity-text-blink{0%,to{opacity:.45}50%{opacity:1}}@keyframes cell-flash-update{0%,to{background:transparent;box-shadow:none}20%{background:#5096ff38;box-shadow:0 0 0 2px #3c82eb52}60%{background:#5096ff1a;box-shadow:0 0 0 2px #3c82eb29}}.cell-flash-update{animation:cell-flash-update 1.2s ease-in-out 1}.client-badge{display:inline-flex;align-items:center;font-size:10px;font-weight:600;line-height:1;padding:2px 6px;border-radius:10px;border:1px solid transparent;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;font-family:inherit;transition:filter .15s}.client-badge:hover{filter:brightness(.95)}.client-badge-md{font-size:11px;padding:3px 8px}.client-badge-vscode{background:#286ec81f;color:#2c5fa8;border-color:#286ec840}.client-badge-cli{background:#b4822829;color:#8a5d0a;border-color:#b4822859}.client-badge-wrap{background:#6e3cc824;color:#5a2db8;border-color:#6e3cc852;cursor:default}.ask-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#0000002e}.ask-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(560px,90vw);max-height:80vh;overflow-y:auto;background:var(--bg);border:1px solid var(--border-hi);border-radius:10px;box-shadow:0 12px 40px #00000047;padding:16px;z-index:1001}.ask-tab{font-size:11px;padding:4px 10px;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--fg-muted);cursor:pointer}.ask-tab:hover{background:var(--sl3)}.ask-tab-active{background:var(--sl3);color:var(--fg);border-color:var(--border-hi);font-weight:500}.ask-tab-done{color:var(--pass)}.ask-option{display:grid;grid-template-columns:22px 1fr;gap:8px;align-items:start;padding:8px 10px;border:1px solid var(--border);border-radius:6px;cursor:pointer;background:var(--bg);transition:background .12s,border-color .12s}.ask-option:hover{background:var(--sl2)}.ask-option-checked{background:#286ec80f;border-color:#286ec866}.ask-option input{margin-top:3px}@keyframes cell-ask-pulse{0%,to{background:transparent;box-shadow:0 0 #dc323200}50%{background:#dc323214;box-shadow:0 0 0 2px #dc323273}}.cell-ask-pending{animation:cell-ask-pulse 1.4s ease-in-out infinite}.cell-waiting-stale{background:var(--cell-bg-stale)}.cell-waiting-stale:hover{background:var(--cell-bg-stale-hover)}.cell-ask-bell{font-size:10px;font-weight:600;padding:2px 8px;border-radius:999px;border:1px solid rgba(220,50,50,.45);background:#dc32321a;color:#b3261e;cursor:pointer;white-space:nowrap;margin-left:4px;animation:cell-ask-bell-pulse 1.2s ease-in-out infinite}.cell-ask-bell:hover{background:#dc32322e}@keyframes cell-ask-bell-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}.cell-modal-ask-banner{display:flex;align-items:center;gap:12px;padding:10px 16px;background:#dc32321a;border-bottom:1px solid rgba(220,50,50,.35);font-size:12px;color:#b3261e;flex-shrink:0}.cell-modal-ask-banner>span{flex:1;font-weight:500}.pmode-badge-auto{background:#288c6424;color:#1f7a4d;border-color:#288c6459;cursor:default}.pmode-badge-bypass{background:#c8322824;color:#b3261e;border-color:#c8322861;cursor:default}.pmode-badge-plan{background:#286ec824;color:#2c5fa8;border-color:#286ec852;cursor:default}.pmode-chip-wrap{position:relative;display:inline-flex;align-items:center}.pmode-chip{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;font-size:9.5px;font-weight:600;letter-spacing:.02em;border-radius:3px;border:1px solid transparent;font-family:ui-monospace,monospace;white-space:nowrap;cursor:pointer;transition:filter .15s}.pmode-chip svg{flex-shrink:0}.pmode-chip:hover:not(:disabled){filter:brightness(.94)}.pmode-chip:disabled{cursor:default;opacity:.6}.pmode-menu{position:absolute;bottom:calc(100% + 4px);right:0;z-index:30;min-width:260px;max-width:calc(100vw - 16px);background:var(--bg);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px #00000029;padding:6px;display:flex;flex-direction:column;gap:1px;font-family:inherit}.pmode-menu.pmode-menu-left{right:auto;left:0;min-width:220px}.pmode-menu-head{font-size:11px;font-weight:600;color:var(--fg-subtle);letter-spacing:.04em;padding:4px 8px 6px;border-bottom:1px solid var(--border);margin-bottom:2px}.pmode-menu-item{display:flex;align-items:center;gap:10px;padding:7px 8px;color:var(--fg);background:transparent;border:1px solid transparent;border-radius:4px;text-align:left;cursor:pointer;font-family:inherit;width:100%}.pmode-menu-item:hover:not(:disabled){background:var(--sl3)}.pmode-menu-item:disabled{cursor:default;opacity:.5}.pmode-menu-item.is-current{background:var(--sl3)}.pmode-menu-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px}.pmode-menu-item.pmode-chip-default .pmode-menu-icon{color:#60646c}.pmode-menu-item.pmode-chip-auto .pmode-menu-icon{color:#1f7a4d}.pmode-menu-item.pmode-chip-plan .pmode-menu-icon{color:#2c5fa8}.pmode-menu-item.pmode-chip-autopick .pmode-menu-icon{color:#7b3fb8}.pmode-menu-item.pmode-chip-bypass .pmode-menu-icon{color:#b3261e}[data-theme=dark] .pmode-menu-item.pmode-chip-default .pmode-menu-icon{color:#c8c8c8}[data-theme=dark] .pmode-menu-item.pmode-chip-auto .pmode-menu-icon{color:#4ec9b0}[data-theme=dark] .pmode-menu-item.pmode-chip-plan .pmode-menu-icon{color:#569cd6}[data-theme=dark] .pmode-menu-item.pmode-chip-autopick .pmode-menu-icon{color:#c586c0}[data-theme=dark] .pmode-menu-item.pmode-chip-bypass .pmode-menu-icon{color:#f44747}.pmode-menu-text{flex:1;min-width:0}.pmode-menu-label{font-size:12px;font-weight:600;color:var(--fg);line-height:1.2}.pmode-menu-desc{font-size:10.5px;color:var(--fg-subtle);margin-top:1px;line-height:1.3}.pmode-check{margin-left:6px;color:var(--pass);font-weight:700;flex-shrink:0}.pmode-err{font-size:10px;color:var(--accent);padding:4px 8px;border-top:1px solid var(--border);margin-top:4px}.pmode-chip-default{background:#7882961a;color:#60646c;border-color:#78829640}.pmode-chip-auto{background:#288c641f;color:#1f7a4d;border-color:#288c6452}.pmode-chip-bypass{background:#c832281f;color:#b3261e;border-color:#c832285c}.pmode-chip-plan{background:#286ec81f;color:#2c5fa8;border-color:#286ec84d}.pmode-chip-autopick{background:#aa6edc1f;color:#7b3fb8;border-color:#aa6edc4d}.pmode-chip-neutral{background:var(--sl2);color:var(--fg-muted);border-color:var(--border)}.pmode-chip-neutral:hover:not(:disabled){background:var(--sl3);border-color:var(--border-hi);color:var(--fg);filter:none}:root{--turn-bg-user: rgba(120, 130, 150, .08);--turn-bg-assistant: rgba(40, 140, 100, .06);--turn-bg-tool: rgba(200, 160, 50, .1)}[data-theme=dark]{--turn-bg-user: transparent;--turn-bg-assistant: transparent;--turn-bg-tool: transparent}.turn-bg-user{background:var(--turn-bg-user)}.turn-bg-assistant{background:var(--turn-bg-assistant)}.turn-bg-tool{background:var(--turn-bg-tool)}.turn-row{display:flex;padding:5px 12px}.turn-row.turn-row-user{justify-content:flex-end}.turn-row.turn-row-other{justify-content:flex-start}.turn-bubble{max-width:85%;min-width:0;padding:8px 12px;border:1px solid var(--border);border-radius:14px}.turn-row-user .turn-bubble{border-top-right-radius:4px}.turn-row-other .turn-bubble{border-top-left-radius:4px}.turn-bubble.turn-bubble-tool{padding:4px 8px}.turn-bubble.turn-bg-user{background:var(--turn-bg-user)}.turn-bubble.turn-bg-assistant{background:var(--turn-bg-assistant)}.turn-bubble.turn-bg-tool{background:var(--turn-bg-tool)}[data-theme=dark] .turn-bubble.turn-bg-user{background:#1f2937}[data-theme=dark] .turn-bubble.turn-bg-assistant{background:#0f1f1a}[data-theme=dark] .turn-bubble.turn-bg-tool{background:#1f1b12}@media (max-width: 640px){.turn-row{padding:4px 8px}.turn-bubble{max-width:92%;padding:7px 11px}}.cell-foot{display:flex;align-items:center;gap:6px;font-size:10px;color:var(--fg-subtle);font-family:ui-monospace,monospace;margin:6px -12px -10px;padding:6px 12px 10px}@keyframes cell-status-pulse{0%,to{opacity:1}50%{opacity:.4}}.cell-foot-active .cell-status{color:var(--pass);animation:cell-status-pulse 1.4s ease-in-out infinite}.cell-foot-waiting .cell-status{color:var(--accent);font-weight:600}.cell-open-tab{margin-left:auto;padding:2px 6px;font-size:10px;color:var(--fg-subtle);border:1px solid var(--border);border-radius:4px;background:var(--bg)}.cell-open-tab:hover{color:var(--fg);border-color:var(--border-hi)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;line-height:1}.icon-btn svg{display:block}.cell-send-btn{margin-left:auto;padding:2px 8px;font-size:10px;color:var(--fg);border:1px solid var(--border);border-radius:4px;background:var(--bg);cursor:pointer;font-family:inherit}.cell-send-btn:hover{border-color:var(--pass, #1f8a5a);color:var(--pass, #1f8a5a);background:var(--bg)}.cell-wrap-btn-icon{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;font-size:12px;line-height:1;color:var(--fg);border:1px solid var(--border);border-radius:4px;background:var(--bg);cursor:pointer;font-family:inherit;transition:border-color .12s ease,color .12s ease,transform .08s ease}.cell-wrap-btn-icon:hover:not(:disabled){border-color:var(--pass, #1f7a4d);transform:scale(1.06)}.cell-wrap-btn-icon:disabled{opacity:.6;cursor:progress}.cell-clickable{cursor:pointer}@keyframes miki-toast-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.spawn-pending-spinner{display:inline-block;font-size:14px;margin-top:1px;color:var(--pass);animation:miki-spin 1.1s linear infinite}@keyframes miki-spin{to{transform:rotate(360deg)}}.settings-popover::-webkit-scrollbar{width:8px}.settings-popover::-webkit-scrollbar-thumb{background:var(--sl8);border-radius:4px}.settings-popover::-webkit-scrollbar-thumb:hover{background:var(--sl10)}.settings-popover{scrollbar-width:thin}.cell-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#00000052;display:flex;align-items:center;justify-content:center;padding:24px;animation:cell-modal-fade-in .12s ease-out}@keyframes cell-modal-fade-in{0%{opacity:0}to{opacity:1}}.cell-modal{position:relative;width:min(760px,100%);height:min(85vh,900px);background:var(--bg);border:1px solid var(--border);border-radius:8px;box-shadow:0 20px 60px #00000047;display:flex;flex-direction:column;overflow:hidden;overscroll-behavior:contain}.cell-modal-backdrop{overscroll-behavior:contain}@media (max-width: 640px){.cell-modal-backdrop{padding:0}.cell-modal{width:100%;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh;border:none;border-radius:0;box-shadow:none}}.cell-modal-close{position:absolute;top:8px;right:8px;z-index:1;width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:18px;line-height:1;color:var(--fg-subtle);background:transparent;border:1px solid transparent;border-radius:4px;cursor:pointer}@media (max-width: 640px){.cell-modal-close{top:4px;right:4px;width:24px;height:24px;font-size:16px}}.cell-modal-close:hover{color:var(--fg);background:var(--bg-subtle);border-color:var(--border)}.popover-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0000000a}.popover{position:fixed;z-index:51;background:var(--bg);border:1px solid var(--border-hi);border-radius:8px;box-shadow:0 8px 24px #0000001a,0 2px 6px #0000000d;padding:12px;width:360px;max-width:calc(100vw - 16px)}@media (max-width: 560px){.popover-backdrop{background:#00000052}.popover{width:calc(100vw - 16px)}}.log-entry{padding:4px 12px;font-size:12px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.log-entry-info{color:var(--fg-muted)}.log-entry-warn{color:var(--warn)}.log-entry-error{color:var(--accent)}.log-time,.log-ctx{color:var(--fg-subtle)}@keyframes mm-spin{to{transform:rotate(360deg)}}.hover\:bg-indigo-500:hover{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-600:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.hover\:text-slate-300:hover{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity, 1))}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-60:disabled{opacity:.6}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-Hant-TW">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
6
|
+
<title>miki-moni</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
|
+
<link
|
|
10
|
+
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Noto+Sans+TC:wght@400;500;600&display=swap"
|
|
11
|
+
rel="stylesheet"
|
|
12
|
+
/>
|
|
13
|
+
<!-- Stylesheets are imported via main-tunnel.tsx so Vite bundles them. -->
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-D5BUh7Uf.js"></script>
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D8vY_9ld.css">
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="app"></div>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# miki-moni hook emitter — invoked by ~/.claude/settings.json hooks
|
|
2
|
+
# Usage: miki-emit.ps1 <event_type>
|
|
3
|
+
# Reads hook payload from stdin (Claude Code convention).
|
|
4
|
+
# Fails silently on any error to never block Claude.
|
|
5
|
+
|
|
6
|
+
param([Parameter(Mandatory)][string]$EventType)
|
|
7
|
+
|
|
8
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
9
|
+
|
|
10
|
+
try {
|
|
11
|
+
$stdin = [Console]::In.ReadToEnd()
|
|
12
|
+
$payload = $null
|
|
13
|
+
if ($stdin) { $payload = $stdin | ConvertFrom-Json }
|
|
14
|
+
|
|
15
|
+
# Resolve port (falls back to 8765 if port file missing)
|
|
16
|
+
$portFile = Join-Path $HOME ".miki-moni\port"
|
|
17
|
+
$port = 8765
|
|
18
|
+
if (Test-Path $portFile) {
|
|
19
|
+
$portFromFile = Get-Content $portFile -ErrorAction SilentlyContinue
|
|
20
|
+
if ($portFromFile -match '^\d+$') { $port = [int]$portFromFile }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
# Map Claude's event_type names to ours (validated in Task 3 spike)
|
|
24
|
+
$typeMap = @{
|
|
25
|
+
"SessionStart" = "session_start"
|
|
26
|
+
"Stop" = "stop"
|
|
27
|
+
"UserPromptSubmit" = "user_prompt"
|
|
28
|
+
"PreToolUse" = "pre_tool_use"
|
|
29
|
+
"PostToolUse" = "post_tool_use"
|
|
30
|
+
}
|
|
31
|
+
$ourType = $typeMap[$EventType]
|
|
32
|
+
if (-not $ourType) { return }
|
|
33
|
+
|
|
34
|
+
# Best-effort extraction — exact field names confirmed in spike doc
|
|
35
|
+
$cwd = $payload.cwd
|
|
36
|
+
if (-not $cwd) { $cwd = $env:CLAUDE_PROJECT_DIR }
|
|
37
|
+
if (-not $cwd) { $cwd = (Get-Location).Path }
|
|
38
|
+
|
|
39
|
+
$sessionId = $payload.session_id
|
|
40
|
+
if (-not $sessionId) { $sessionId = $env:CLAUDE_SESSION_ID }
|
|
41
|
+
|
|
42
|
+
$body = @{
|
|
43
|
+
event_type = $ourType
|
|
44
|
+
cwd = $cwd
|
|
45
|
+
session_uuid = $sessionId
|
|
46
|
+
timestamp = [DateTimeOffset]::Now.ToUnixTimeMilliseconds()
|
|
47
|
+
} | ConvertTo-Json -Compress
|
|
48
|
+
|
|
49
|
+
Invoke-RestMethod -Uri "http://127.0.0.1:$port/event" `
|
|
50
|
+
-Method Post -Body $body -ContentType "application/json" `
|
|
51
|
+
-TimeoutSec 2 | Out-Null
|
|
52
|
+
} catch {
|
|
53
|
+
# swallow — never block Claude
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
exit 0
|
package/package.json
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "miki-moni",
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/WarmBed/Miki-Moni.git"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/WarmBed/Miki-Moni",
|
|
10
|
+
"bugs": "https://github.com/WarmBed/Miki-Moni/issues",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"description": "Miki-Moni / 巫女 — weave multiple VSCode Claude Code panel sessions into one local dashboard, with optional encrypted relay to a phone client. See docs/naming.md.",
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=20"
|
|
15
|
+
},
|
|
16
|
+
"bin": {
|
|
17
|
+
"miki": "./bin/miki.mjs"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"bin",
|
|
21
|
+
"src",
|
|
22
|
+
"shared",
|
|
23
|
+
"hooks/miki-emit.ps1",
|
|
24
|
+
"tools/tray.ps1",
|
|
25
|
+
"dist/web",
|
|
26
|
+
"dist/web-phone",
|
|
27
|
+
"worker/src",
|
|
28
|
+
"worker/wrangler.toml",
|
|
29
|
+
"worker/wrangler-selfhost.toml",
|
|
30
|
+
"worker/package.json",
|
|
31
|
+
"README.md",
|
|
32
|
+
"README.zh-TW.md",
|
|
33
|
+
"README.zh-CN.md",
|
|
34
|
+
"LICENSE"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"dev": "tsx watch src/index.ts",
|
|
38
|
+
"start": "tsx src/index.ts",
|
|
39
|
+
"build:web": "vite build",
|
|
40
|
+
"build:phone": "vite build --config vite-phone.config.ts",
|
|
41
|
+
"build:all": "pnpm build:web && pnpm build:phone",
|
|
42
|
+
"test": "vitest run",
|
|
43
|
+
"test:watch": "vitest",
|
|
44
|
+
"typecheck": "tsc --noEmit",
|
|
45
|
+
"install:hooks": "tsx src/install-hooks.ts",
|
|
46
|
+
"install-helper": "node scripts/install-helper.mjs",
|
|
47
|
+
"pair": "tsx src/cli/pair.ts",
|
|
48
|
+
"miki": "tsx src/cli/miki.ts",
|
|
49
|
+
"wrap": "tsx src/cli/wrap.ts",
|
|
50
|
+
"mock-worker": "tsx tools/mock-worker/server.ts",
|
|
51
|
+
"dev:all": "tsx tools/dev/start-all.ts",
|
|
52
|
+
"verify": "tsx tools/dev/verify-relay.ts",
|
|
53
|
+
"prepublishOnly": "pnpm build:web"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@anthropic-ai/claude-agent-sdk": "^0.3.143",
|
|
57
|
+
"@inquirer/prompts": "^8.4.3",
|
|
58
|
+
"better-sqlite3": "^11.3.0",
|
|
59
|
+
"express": "^5.0.0",
|
|
60
|
+
"jsqr": "^1.4.0",
|
|
61
|
+
"marked": "^18.0.3",
|
|
62
|
+
"node-notifier": "^10.0.1",
|
|
63
|
+
"pino": "^9.4.0",
|
|
64
|
+
"qrcode-terminal": "^0.12.0",
|
|
65
|
+
"tsx": "^4.19.1",
|
|
66
|
+
"tweetnacl": "^1.0.3",
|
|
67
|
+
"tweetnacl-util": "^0.15.1",
|
|
68
|
+
"ws": "^8.18.0"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@types/better-sqlite3": "^7.6.11",
|
|
72
|
+
"@types/express": "^5.0.0",
|
|
73
|
+
"@types/node": "^20.16.0",
|
|
74
|
+
"@types/node-notifier": "^8.0.5",
|
|
75
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
76
|
+
"@types/supertest": "^6.0.2",
|
|
77
|
+
"@types/ws": "^8.5.12",
|
|
78
|
+
"autoprefixer": "^10.5.0",
|
|
79
|
+
"fake-indexeddb": "^6.2.5",
|
|
80
|
+
"playwright": "^1.60.0",
|
|
81
|
+
"postcss": "^8.5.14",
|
|
82
|
+
"preact": "^10.24.0",
|
|
83
|
+
"supertest": "^7.0.0",
|
|
84
|
+
"tailwindcss": "^3.4.13",
|
|
85
|
+
"typescript": "^5.6.2",
|
|
86
|
+
"vite": "^5.4.8",
|
|
87
|
+
"vitest": "^2.1.1"
|
|
88
|
+
}
|
|
89
|
+
}
|