@kw-yeh/vibeflow 4.6.1 → 4.6.2
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/README.md +1 -1
- package/dist/vibeflow.mjs +11 -3
- package/dist/web/404/index.html +1 -1
- package/dist/web/404.html +1 -1
- package/dist/web/home/index.html +1 -1
- package/package.json +1 -1
- /package/dist/web/_next/static/{EJjFPosO-lar71yjnoaPb → 1-jD1GlcBxcAPCb5OcjRK}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{EJjFPosO-lar71yjnoaPb → 1-jD1GlcBxcAPCb5OcjRK}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -137,7 +137,7 @@ vibeflow task create … # 不開 UI 直接建卡,選項見 vibeflow tas
|
|
|
137
137
|
|
|
138
138
|
VibeFlow 的本機伺服器能啟動 agent、寫入終端機,因此:
|
|
139
139
|
|
|
140
|
-
- 只綁定 `127.0.0.1`/`::1
|
|
140
|
+
- 只綁定 `127.0.0.1`/`::1`,預設固定用 port 47820(被占用時改用隨機 port),瀏覽器的通知權限才不會在 host 重啟後失效。
|
|
141
141
|
- 每次啟動產生一組 token,網址帶上它才能進入;載入後換成 HttpOnly、SameSite=Strict 的 cookie,並從網址列移除。
|
|
142
142
|
- WebSocket 連線同時檢查 cookie 與 `Origin`,`Host` 必須是 loopback,其他網頁無法從你的瀏覽器連進來。
|
|
143
143
|
- API 只接受 VibeFlow 認得的卡片 id,不接受任意路徑或指令。
|
package/dist/vibeflow.mjs
CHANGED
|
@@ -6621,7 +6621,13 @@ Content-Length: 0\r
|
|
|
6621
6621
|
});
|
|
6622
6622
|
});
|
|
6623
6623
|
}
|
|
6624
|
-
|
|
6624
|
+
let v4;
|
|
6625
|
+
try {
|
|
6626
|
+
v4 = await listen("127.0.0.1", port);
|
|
6627
|
+
} catch (err) {
|
|
6628
|
+
if (!options.fallbackToFreePort || port === 0 || err.code !== "EADDRINUSE") throw err;
|
|
6629
|
+
v4 = await listen("127.0.0.1", 0);
|
|
6630
|
+
}
|
|
6625
6631
|
servers.push(v4);
|
|
6626
6632
|
port = v4.address().port;
|
|
6627
6633
|
try {
|
|
@@ -6639,6 +6645,7 @@ Content-Length: 0\r
|
|
|
6639
6645
|
}
|
|
6640
6646
|
|
|
6641
6647
|
// packages/cli/src/host.ts
|
|
6648
|
+
var DEFAULT_HOST_PORT = 47820;
|
|
6642
6649
|
async function waitForPort(userDataDir, timeoutMs = 1e4) {
|
|
6643
6650
|
const deadline = Date.now() + timeoutMs;
|
|
6644
6651
|
while (Date.now() < deadline) {
|
|
@@ -6697,7 +6704,8 @@ async function startHost(options) {
|
|
|
6697
6704
|
bus,
|
|
6698
6705
|
token: lock.token,
|
|
6699
6706
|
staticDir: options.staticDir,
|
|
6700
|
-
port: options.port
|
|
6707
|
+
port: options.port ?? DEFAULT_HOST_PORT,
|
|
6708
|
+
fallbackToFreePort: options.port === void 0
|
|
6701
6709
|
});
|
|
6702
6710
|
lock.port = server.port;
|
|
6703
6711
|
updateLock(options.userDataDir, lock);
|
|
@@ -7025,7 +7033,7 @@ Options:
|
|
|
7025
7033
|
--profile dev|prod Store profile (dev = the "(development)" store npm run dev uses)
|
|
7026
7034
|
--store-path <dir> Explicit store directory
|
|
7027
7035
|
--backend auto|tmux|pty Session backend for a new host (default: auto = tmux when installed)
|
|
7028
|
-
--port <n> Port for a new host (default:
|
|
7036
|
+
--port <n> Port for a new host (default: 47820, or a free one when taken)
|
|
7029
7037
|
--no-open Do not open a browser
|
|
7030
7038
|
--json Machine-readable output (status)
|
|
7031
7039
|
-v, --version Print the version
|
package/dist/web/404/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="icon" href="/favicon.ico" sizes="any" data-next-head=""/><link rel="icon" href="/logo.svg" type="image/svg+xml" data-next-head=""/><link rel="apple-touch-icon" href="/apple-touch-icon.png" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/css/7b78ec950bc90c91.css" as="style"/><link rel="stylesheet" href="/_next/static/css/7b78ec950bc90c91.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c8aa5df0425f6b7b.js" defer=""></script><script src="/_next/static/chunks/framework-b92a367cf1ad4bf7.js" defer=""></script><script src="/_next/static/chunks/main-ec7fd4c371d06729.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d965862fbafe3116.js" defer=""></script><script src="/_next/static/chunks/pages/_error-8f65b0f8749f42d2.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="icon" href="/favicon.ico" sizes="any" data-next-head=""/><link rel="icon" href="/logo.svg" type="image/svg+xml" data-next-head=""/><link rel="apple-touch-icon" href="/apple-touch-icon.png" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/css/7b78ec950bc90c91.css" as="style"/><link rel="stylesheet" href="/_next/static/css/7b78ec950bc90c91.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c8aa5df0425f6b7b.js" defer=""></script><script src="/_next/static/chunks/framework-b92a367cf1ad4bf7.js" defer=""></script><script src="/_next/static/chunks/main-ec7fd4c371d06729.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d965862fbafe3116.js" defer=""></script><script src="/_next/static/chunks/pages/_error-8f65b0f8749f42d2.js" defer=""></script><script src="/_next/static/1-jD1GlcBxcAPCb5OcjRK/_buildManifest.js" defer=""></script><script src="/_next/static/1-jD1GlcBxcAPCb5OcjRK/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"1-jD1GlcBxcAPCb5OcjRK","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
package/dist/web/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="icon" href="/favicon.ico" sizes="any" data-next-head=""/><link rel="icon" href="/logo.svg" type="image/svg+xml" data-next-head=""/><link rel="apple-touch-icon" href="/apple-touch-icon.png" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/css/7b78ec950bc90c91.css" as="style"/><link rel="stylesheet" href="/_next/static/css/7b78ec950bc90c91.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c8aa5df0425f6b7b.js" defer=""></script><script src="/_next/static/chunks/framework-b92a367cf1ad4bf7.js" defer=""></script><script src="/_next/static/chunks/main-ec7fd4c371d06729.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d965862fbafe3116.js" defer=""></script><script src="/_next/static/chunks/pages/_error-8f65b0f8749f42d2.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="icon" href="/favicon.ico" sizes="any" data-next-head=""/><link rel="icon" href="/logo.svg" type="image/svg+xml" data-next-head=""/><link rel="apple-touch-icon" href="/apple-touch-icon.png" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/css/7b78ec950bc90c91.css" as="style"/><link rel="stylesheet" href="/_next/static/css/7b78ec950bc90c91.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c8aa5df0425f6b7b.js" defer=""></script><script src="/_next/static/chunks/framework-b92a367cf1ad4bf7.js" defer=""></script><script src="/_next/static/chunks/main-ec7fd4c371d06729.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d965862fbafe3116.js" defer=""></script><script src="/_next/static/chunks/pages/_error-8f65b0f8749f42d2.js" defer=""></script><script src="/_next/static/1-jD1GlcBxcAPCb5OcjRK/_buildManifest.js" defer=""></script><script src="/_next/static/1-jD1GlcBxcAPCb5OcjRK/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"1-jD1GlcBxcAPCb5OcjRK","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
package/dist/web/home/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="icon" href="/favicon.ico" sizes="any" data-next-head=""/><link rel="icon" href="/logo.svg" type="image/svg+xml" data-next-head=""/><link rel="apple-touch-icon" href="/apple-touch-icon.png" data-next-head=""/><title data-next-head="">VibeFlow</title><link rel="preload" href="/_next/static/css/7b78ec950bc90c91.css" as="style"/><link rel="stylesheet" href="/_next/static/css/7b78ec950bc90c91.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c8aa5df0425f6b7b.js" defer=""></script><script src="/_next/static/chunks/framework-b92a367cf1ad4bf7.js" defer=""></script><script src="/_next/static/chunks/main-ec7fd4c371d06729.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d965862fbafe3116.js" defer=""></script><script src="/_next/static/chunks/8527-5442098d5121c96b.js" defer=""></script><script src="/_next/static/chunks/pages/home-f31c4cf97ed808cf.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="icon" href="/favicon.ico" sizes="any" data-next-head=""/><link rel="icon" href="/logo.svg" type="image/svg+xml" data-next-head=""/><link rel="apple-touch-icon" href="/apple-touch-icon.png" data-next-head=""/><title data-next-head="">VibeFlow</title><link rel="preload" href="/_next/static/css/7b78ec950bc90c91.css" as="style"/><link rel="stylesheet" href="/_next/static/css/7b78ec950bc90c91.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c8aa5df0425f6b7b.js" defer=""></script><script src="/_next/static/chunks/framework-b92a367cf1ad4bf7.js" defer=""></script><script src="/_next/static/chunks/main-ec7fd4c371d06729.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d965862fbafe3116.js" defer=""></script><script src="/_next/static/chunks/8527-5442098d5121c96b.js" defer=""></script><script src="/_next/static/chunks/pages/home-f31c4cf97ed808cf.js" defer=""></script><script src="/_next/static/1-jD1GlcBxcAPCb5OcjRK/_buildManifest.js" defer=""></script><script src="/_next/static/1-jD1GlcBxcAPCb5OcjRK/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="bg-background text-foreground"><div class="flex min-h-screen items-center justify-center bg-background text-base text-muted-foreground">載入中…</div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/home","query":{},"buildId":"1-jD1GlcBxcAPCb5OcjRK","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
package/package.json
CHANGED
/package/dist/web/_next/static/{EJjFPosO-lar71yjnoaPb → 1-jD1GlcBxcAPCb5OcjRK}/_buildManifest.js
RENAMED
|
File without changes
|
/package/dist/web/_next/static/{EJjFPosO-lar71yjnoaPb → 1-jD1GlcBxcAPCb5OcjRK}/_ssgManifest.js
RENAMED
|
File without changes
|