kaizen-agent 1.6.3 → 1.6.5

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 CHANGED
@@ -297,7 +297,7 @@ backlog; `⋯` on a card runs, edits, rejects, abandons or archives. `Clear` on
297
297
  every finished run to the archive (`.kaizen/archive.md`, a list, nothing moves), and
298
298
  `Archive` in the strip shows what is there, with `Restore` on each card. The gear at the top right holds the browser's theme
299
299
  and every `kaizen settings` knob, same rows, same `config.yml`. `--port N` picks a port, `--no-open` just
300
- serves, `?all=1` in the URL opens on every project. `--daemon` starts the server
300
+ serves, the board opens on every project; `?all=0` in the URL narrows it to the one it was started in. `--daemon` starts the server
301
301
  detached so it outlives the terminal (pid kept in `~/.kaizen/web.pid`); `--stop` ends it. `kaizen web --shortcut` adds a launcher
302
302
  the OS can find — Spotlight on macOS, the app menu on Linux, a Desktop shortcut on Windows.
303
303
 
package/cli/install.ts CHANGED
@@ -478,20 +478,22 @@ async function resolveRepoQuietly() {
478
478
 
479
479
  async function resolveRepo() {
480
480
  const here = dirname(import.meta.dir);
481
- if (existsSync(join(here, ".git"))) return here;
482
-
483
481
  const dest = process.env.KAIZEN_HOME ?? join(home, "kaizen");
484
- if (existsSync(join(dest, ".git"))) {
482
+ // The launcher runs the clone itself, so an upgrade from inside it must pull
483
+ // that clone -- returning it untouched was "Up to date" at whatever was there.
484
+ for (const dir of [here, dest]) {
485
+ if (!existsSync(join(dir, ".git"))) continue;
486
+ if (!upgrade && dir === here) return dir;
485
487
  // A pull can refuse for reasons that have nothing to do with linking -- local
486
488
  // edits, a detached head, no network. Linking the checkout already on disk
487
489
  // still works, so say what happened and carry on.
488
490
  try {
489
- await Bun.$`git -C ${dest} pull --ff-only`.quiet();
490
- step(`updated ${tilde(dest)}`);
491
+ await Bun.$`git -C ${dir} pull --ff-only`.quiet();
492
+ step(`updated ${tilde(dir)}`);
491
493
  } catch {
492
- step(`kept ${tilde(dest)} ${c.dim("(could not pull)")}`);
494
+ step(`kept ${tilde(dir)} ${c.dim("(could not pull)")}`);
493
495
  }
494
- return dest;
496
+ return dir;
495
497
  }
496
498
  // A copy made before git was installed can never be pulled, so it keeps upgrading
497
499
  // through npm and its caches. Once git is here, replace it with a real clone --
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kaizen-agent",
3
- "version": "1.6.3",
3
+ "version": "1.6.5",
4
4
  "description": "Staged workflow for AI agents — code, writing, research, operations: plan, human approval, build, independent review, bounded fix loop.",
5
5
  "type": "module",
6
6
  "bin": {
package/web/board.html CHANGED
@@ -229,7 +229,7 @@ const ICON={idea:"idea",starting:"start",running:"run",stalled:"stall",waiting:"
229
229
  const WORD={idea:"idea",starting:"starting",running:"running",stalled:"stalled",waiting:"waiting on you",done:"done",abandoned:"abandoned"};
230
230
 
231
231
  let S={project:null,projects:[],cards:[],now:Date.now(),all:false};
232
- let all=new URLSearchParams(location.search).get("all")==="1",openKey=null,mode=null,modeKey=null,filter=null,menuKey=null,tab=0,runDoc=null;
232
+ let all=new URLSearchParams(location.search).get("all")!=="0",openKey=null,mode=null,modeKey=null,filter=null,menuKey=null,tab=0,runDoc=null;
233
233
  // A column shows this many cards, then a "more" line; Done is where it matters.
234
234
  const FOLD=6;const unfolded=new Set();
235
235
  let archive=false;
@@ -302,7 +302,7 @@ function render(){
302
302
  strip.push(`<span class="sp"></span><span>${cs.filter(c=>c.kind==="idea").length} ideas · ${cs.filter(c=>c.kind==="run").length} runs</span>`,`<button class="${archive?"on":""}" data-f="__archive">${archive?"Back to board":"Archive "+nArch}</button>`);
303
303
  $("strip").innerHTML=strip.join("");
304
304
  $("strip").querySelectorAll("button").forEach(c=>c.onclick=()=>{if(c.dataset.f==="__archive"){archive=!archive;filter=null;render();return}filter=filter===c.dataset.f?null:c.dataset.f;render()});
305
- const sel=$("proj");sel.innerHTML=(S.project?`<option value="cur">${esc(S.project)}</option>`:"")+`<option value="all">All projects</option>`;sel.value=all||!S.project?"all":"cur";
305
+ const sel=$("proj");sel.innerHTML=`<option value="all">All projects</option>`+(S.project?`<option value="cur">${esc(S.project)}</option>`:"");sel.value=all||!S.project?"all":"cur";
306
306
  if(!cs.length&&mode!=="new"){b.innerHTML=archive?'<div class="empty"><div class="mascot"></div><div>Nothing archived.</div></div>':'<div class="empty"><div class="mascot"></div><div>Nothing here yet.</div><button class="btn pri" id="newempty">New idea</button></div>';if(!archive)$("newempty").onclick=()=>{mode="new";render()};}
307
307
  COLS.forEach((name,ci)=>{
308
308
  const s=document.createElement("section");const list=cs.filter(c=>c.column===ci&&(!filter||c.status===filter));