@qlucent/fishi 0.15.0 → 0.16.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.
Files changed (2) hide show
  1. package/dist/index.js +47 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2566,13 +2566,18 @@ import {
2566
2566
  getSandboxPolicyTemplate,
2567
2567
  getMonitorEmitterScript,
2568
2568
  getFileLockHookScript,
2569
+ getPhaseGuardHook,
2569
2570
  getSessionStartHook,
2570
2571
  getAutoCheckpointHook,
2571
2572
  getAgentCompleteHook,
2572
2573
  getGateManagerScript,
2573
- getWorktreeManagerScript
2574
+ getWorktreeManagerScript,
2575
+ getInitCommand,
2576
+ getStatusCommand,
2577
+ getGateCommand,
2578
+ getBoardCommand
2574
2579
  } from "@qlucent/fishi-core";
2575
- var CURRENT_VERSION = "0.14.4";
2580
+ var CURRENT_VERSION = "0.16.0";
2576
2581
  function fixHooksFormat(settings) {
2577
2582
  if (!settings.hooks) return false;
2578
2583
  let fixed = false;
@@ -2698,7 +2703,8 @@ async function upgradeCommand() {
2698
2703
  { name: "gate-manager.mjs", getter: getGateManagerScript },
2699
2704
  { name: "worktree-manager.mjs", getter: getWorktreeManagerScript },
2700
2705
  { name: "monitor-emitter.mjs", getter: getMonitorEmitterScript },
2701
- { name: "file-lock-hook.mjs", getter: getFileLockHookScript }
2706
+ { name: "file-lock-hook.mjs", getter: getFileLockHookScript },
2707
+ { name: "phase-guard.mjs", getter: getPhaseGuardHook }
2702
2708
  ];
2703
2709
  const scriptsDir = path16.join(targetDir, ".fishi", "scripts");
2704
2710
  if (fs16.existsSync(scriptsDir)) {
@@ -2711,6 +2717,43 @@ async function upgradeCommand() {
2711
2717
  }
2712
2718
  }
2713
2719
  }
2720
+ const commandsDir = path16.join(targetDir, ".claude", "commands");
2721
+ if (fs16.existsSync(commandsDir)) {
2722
+ const commandsToRegenerate = [
2723
+ { name: "fishi-init.md", getter: getInitCommand },
2724
+ { name: "fishi-status.md", getter: getStatusCommand },
2725
+ { name: "fishi-gate.md", getter: getGateCommand },
2726
+ { name: "fishi-board.md", getter: getBoardCommand }
2727
+ ];
2728
+ for (const cmd of commandsToRegenerate) {
2729
+ try {
2730
+ fs16.writeFileSync(path16.join(commandsDir, cmd.name), cmd.getter(), "utf-8");
2731
+ updated.push(`.claude/commands/${cmd.name} (orchestration enforcement)`);
2732
+ } catch {
2733
+ }
2734
+ }
2735
+ }
2736
+ const settingsPath2 = path16.join(targetDir, ".claude", "settings.json");
2737
+ if (fs16.existsSync(settingsPath2)) {
2738
+ try {
2739
+ const existing2 = JSON.parse(fs16.readFileSync(settingsPath2, "utf-8"));
2740
+ const preToolUse = existing2.hooks?.PreToolUse || [];
2741
+ const hasPhaseGuard = preToolUse.some(
2742
+ (h) => h.hooks?.some((hook) => hook.command?.includes("phase-guard"))
2743
+ );
2744
+ if (!hasPhaseGuard) {
2745
+ if (!existing2.hooks) existing2.hooks = {};
2746
+ if (!existing2.hooks.PreToolUse) existing2.hooks.PreToolUse = [];
2747
+ existing2.hooks.PreToolUse.push({
2748
+ matcher: "Write|Edit",
2749
+ hooks: [{ type: "command", command: "node .fishi/scripts/phase-guard.mjs" }]
2750
+ });
2751
+ fs16.writeFileSync(settingsPath2, JSON.stringify(existing2, null, 2) + "\n", "utf-8");
2752
+ updated.push(".claude/settings.json (added phase-guard hook)");
2753
+ }
2754
+ } catch {
2755
+ }
2756
+ }
2714
2757
  spinner.succeed("Upgrade complete");
2715
2758
  console.log("");
2716
2759
  if (updated.length > 0) {
@@ -2735,7 +2778,7 @@ async function upgradeCommand() {
2735
2778
  var program = new Command();
2736
2779
  program.name("fishi").description(
2737
2780
  chalk15.cyan("\u{1F41F} FISHI") + " \u2014 AI-Powered Software Delivery Pipeline\n Autonomous AI development with human governance"
2738
- ).version("0.15.0");
2781
+ ).version("0.16.1");
2739
2782
  program.command("init").description("Initialize FISHI in the current directory").argument("[description]", "Project description (skip wizard with zero-config)").option("-l, --language <lang>", "Primary language (e.g., typescript, python)").option("-f, --framework <framework>", "Framework (e.g., nextjs, express, django)").option(
2740
2783
  "-c, --cost-mode <mode>",
2741
2784
  "Cost mode: performance | balanced | economy",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qlucent/fishi",
3
- "version": "0.15.0",
3
+ "version": "0.16.1",
4
4
  "description": "FISHI — Your AI Dev Team That Actually Ships. Autonomous agent framework for Claude Code.",
5
5
  "license": "MIT",
6
6
  "type": "module",