@kw-yeh/vibeflow 4.5.0 → 4.5.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/dist/vibeflow.mjs +39 -17
- 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/{GVhAr0pZILduxKDBurk9J → 2iwmsskDbEWs3K3yxNplb}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{GVhAr0pZILduxKDBurk9J → 2iwmsskDbEWs3K3yxNplb}/_ssgManifest.js +0 -0
package/dist/vibeflow.mjs
CHANGED
|
@@ -4546,29 +4546,51 @@ async function readWorktreeSpecs(worktreePath, baseBranch) {
|
|
|
4546
4546
|
}
|
|
4547
4547
|
return specs.sort((a, b) => a.path.localeCompare(b.path));
|
|
4548
4548
|
}
|
|
4549
|
-
async function readBranchSpecs(projectPath, branch, baseBranch, changedPaths) {
|
|
4550
|
-
const ref
|
|
4549
|
+
async function readBranchSpecs(projectPath, branch, baseBranch, changedPaths, launchedAt) {
|
|
4550
|
+
for (const ref of [`refs/heads/${branch}`, `refs/remotes/origin/${branch}`]) {
|
|
4551
|
+
if (!await refExists(projectPath, ref)) continue;
|
|
4552
|
+
const paths = changedPaths ?? await diffNames(projectPath, `${await resolveBaseRef(projectPath, baseBranch)}...${ref}`);
|
|
4553
|
+
const specs = await readSpecsAt(projectPath, ref, paths);
|
|
4554
|
+
if (specs.length > 0) return specs;
|
|
4555
|
+
}
|
|
4556
|
+
const merge = await findPullRequestMerge(projectPath, branch, baseBranch, launchedAt);
|
|
4557
|
+
if (!merge) return [];
|
|
4558
|
+
return readSpecsAt(projectPath, `${merge}^2`, await diffNames(projectPath, `${merge}^1`, merge));
|
|
4559
|
+
}
|
|
4560
|
+
async function refExists(cwd, ref) {
|
|
4551
4561
|
try {
|
|
4552
|
-
await git(
|
|
4562
|
+
await git(cwd, ["rev-parse", "--verify", "--quiet", ref]);
|
|
4563
|
+
return true;
|
|
4553
4564
|
} catch {
|
|
4554
|
-
return
|
|
4565
|
+
return false;
|
|
4555
4566
|
}
|
|
4556
|
-
|
|
4557
|
-
|
|
4558
|
-
|
|
4559
|
-
|
|
4560
|
-
|
|
4561
|
-
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4567
|
+
}
|
|
4568
|
+
async function diffNames(cwd, ...range) {
|
|
4569
|
+
const names = await git(cwd, ["diff", "--name-only", "--diff-filter=d", ...range]).catch(() => "");
|
|
4570
|
+
return names.split("\n").map((l) => l.trim());
|
|
4571
|
+
}
|
|
4572
|
+
async function findPullRequestMerge(cwd, branch, baseBranch, launchedAt) {
|
|
4573
|
+
const baseRef = await resolveBaseRef(cwd, baseBranch);
|
|
4574
|
+
const log = await git(cwd, [
|
|
4575
|
+
"log",
|
|
4576
|
+
"--merges",
|
|
4577
|
+
"--first-parent",
|
|
4578
|
+
"--format=%H %s",
|
|
4579
|
+
...launchedAt ? [`--since=${new Date(launchedAt).toISOString()}`] : [],
|
|
4580
|
+
baseRef
|
|
4581
|
+
]).catch(() => "");
|
|
4582
|
+
for (const line of log.split("\n")) {
|
|
4583
|
+
const match = /^(\S+) Merge pull request #\d+ from [^/\s]+\/(\S+)$/.exec(line.trim());
|
|
4584
|
+
if (match && match[2] === branch) return match[1];
|
|
4566
4585
|
}
|
|
4586
|
+
return null;
|
|
4587
|
+
}
|
|
4588
|
+
async function readSpecsAt(cwd, ref, paths) {
|
|
4567
4589
|
const specs = [];
|
|
4568
4590
|
for (const p of paths.filter(isSpecPath)) {
|
|
4569
4591
|
try {
|
|
4570
|
-
const content = await git(
|
|
4571
|
-
const ct = await git(
|
|
4592
|
+
const content = await git(cwd, ["show", `${ref}:${p}`]);
|
|
4593
|
+
const ct = await git(cwd, ["log", "-1", "--format=%ct", ref, "--", p]);
|
|
4572
4594
|
specs.push({
|
|
4573
4595
|
path: p,
|
|
4574
4596
|
...clip2(Buffer.from(content, "utf8")),
|
|
@@ -5448,7 +5470,7 @@ function createCore({ sessions, bus, version }) {
|
|
|
5448
5470
|
if (task.worktreePath) return readWorktreeSpecs(task.worktreePath, base);
|
|
5449
5471
|
if (!task.projectPath || !task.launchedAt) return [];
|
|
5450
5472
|
const changed = task.outcome?.files.filter((f) => f.status !== "D").map((f) => f.path);
|
|
5451
|
-
return readBranchSpecs(task.projectPath, task.branch, base, changed);
|
|
5473
|
+
return readBranchSpecs(task.projectPath, task.branch, base, changed, task.launchedAt);
|
|
5452
5474
|
},
|
|
5453
5475
|
"board:getCliLaunchInfo": () => boardCliLaunchInfo(),
|
|
5454
5476
|
"library:list": async () => listLibrary(await libraryRoot(), builtinSkillsDir()),
|
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/24b804d01aa3af3c.css" as="style"/><link rel="stylesheet" href="/_next/static/css/24b804d01aa3af3c.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-2a4ae532bdcab6f2.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/24b804d01aa3af3c.css" as="style"/><link rel="stylesheet" href="/_next/static/css/24b804d01aa3af3c.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-2a4ae532bdcab6f2.js" defer=""></script><script src="/_next/static/chunks/pages/_error-8f65b0f8749f42d2.js" defer=""></script><script src="/_next/static/2iwmsskDbEWs3K3yxNplb/_buildManifest.js" defer=""></script><script src="/_next/static/2iwmsskDbEWs3K3yxNplb/_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":"2iwmsskDbEWs3K3yxNplb","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/24b804d01aa3af3c.css" as="style"/><link rel="stylesheet" href="/_next/static/css/24b804d01aa3af3c.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-2a4ae532bdcab6f2.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/24b804d01aa3af3c.css" as="style"/><link rel="stylesheet" href="/_next/static/css/24b804d01aa3af3c.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-2a4ae532bdcab6f2.js" defer=""></script><script src="/_next/static/chunks/pages/_error-8f65b0f8749f42d2.js" defer=""></script><script src="/_next/static/2iwmsskDbEWs3K3yxNplb/_buildManifest.js" defer=""></script><script src="/_next/static/2iwmsskDbEWs3K3yxNplb/_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":"2iwmsskDbEWs3K3yxNplb","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/24b804d01aa3af3c.css" as="style"/><link rel="stylesheet" href="/_next/static/css/24b804d01aa3af3c.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-2a4ae532bdcab6f2.js" defer=""></script><script src="/_next/static/chunks/2524-abaf3a55023f6066.js" defer=""></script><script src="/_next/static/chunks/pages/home-a511856e480ddb33.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/24b804d01aa3af3c.css" as="style"/><link rel="stylesheet" href="/_next/static/css/24b804d01aa3af3c.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-2a4ae532bdcab6f2.js" defer=""></script><script src="/_next/static/chunks/2524-abaf3a55023f6066.js" defer=""></script><script src="/_next/static/chunks/pages/home-a511856e480ddb33.js" defer=""></script><script src="/_next/static/2iwmsskDbEWs3K3yxNplb/_buildManifest.js" defer=""></script><script src="/_next/static/2iwmsskDbEWs3K3yxNplb/_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":"2iwmsskDbEWs3K3yxNplb","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
package/package.json
CHANGED
/package/dist/web/_next/static/{GVhAr0pZILduxKDBurk9J → 2iwmsskDbEWs3K3yxNplb}/_buildManifest.js
RENAMED
|
File without changes
|
/package/dist/web/_next/static/{GVhAr0pZILduxKDBurk9J → 2iwmsskDbEWs3K3yxNplb}/_ssgManifest.js
RENAMED
|
File without changes
|