@yorz/cli 0.5.1 → 0.5.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/dist/cli/index.js +209 -13
- package/dist/gui/assets/{abnfDiagram-VRR7QNED-1dYBKtgk.js → abnfDiagram-VRR7QNED-DhLcjtGN.js} +1 -1
- package/dist/gui/assets/{arc-OAvgDu2T.js → arc-BL0qZm8w.js} +1 -1
- package/dist/gui/assets/{architectureDiagram-ZJ3FMSHR-DjLIXpVy.js → architectureDiagram-ZJ3FMSHR-CWjMvcMF.js} +1 -1
- package/dist/gui/assets/{blockDiagram-677ZJIJ3-vDgSpIYO.js → blockDiagram-677ZJIJ3-Uz7zEOKL.js} +1 -1
- package/dist/gui/assets/{c4Diagram-LMCZKHZV-CfqG7l8_.js → c4Diagram-LMCZKHZV-BvZ1lBzh.js} +1 -1
- package/dist/gui/assets/channel-DXW7D-GH.js +1 -0
- package/dist/gui/assets/{chunk-2Q5K7J3B-BYR_jfQf.js → chunk-2Q5K7J3B-BbQyCdmr.js} +1 -1
- package/dist/gui/assets/{chunk-32BRIVSS-DCFUKQRk.js → chunk-32BRIVSS-Ds1IHaZm.js} +1 -1
- package/dist/gui/assets/{chunk-5VM5RSS4-DrMq6ZH_.js → chunk-5VM5RSS4-D9JdEyHt.js} +1 -1
- package/dist/gui/assets/{chunk-EX3LRPZG-n95iKZ_F.js → chunk-EX3LRPZG-oX3EhQot.js} +1 -1
- package/dist/gui/assets/{chunk-JWPE2WC7-7X3iMA5d.js → chunk-JWPE2WC7-BbYRospG.js} +1 -1
- package/dist/gui/assets/{chunk-MOJQB5TN-BfJ7bYKG.js → chunk-MOJQB5TN-_7tOgu0t.js} +1 -1
- package/dist/gui/assets/{chunk-RYQCIY6F-DMrZx7LT.js → chunk-RYQCIY6F-BFRq_dy8.js} +1 -1
- package/dist/gui/assets/{chunk-V7JOEXUC-DEQ2ipfO.js → chunk-V7JOEXUC-DaT-HFaL.js} +1 -1
- package/dist/gui/assets/{chunk-VR4S4FIN-CEv2d05O.js → chunk-VR4S4FIN-B-e98k7C.js} +1 -1
- package/dist/gui/assets/{chunk-XXDRQBXY-B4TFXQyu.js → chunk-XXDRQBXY-RIATjTXU.js} +1 -1
- package/dist/gui/assets/classDiagram-OUVF2IWQ-CemKJkww.js +1 -0
- package/dist/gui/assets/classDiagram-v2-EOCWNBFH-CemKJkww.js +1 -0
- package/dist/gui/assets/{cose-bilkent-JH36ORCC-BvtDQXS8.js → cose-bilkent-JH36ORCC-DNBPTk-r.js} +1 -1
- package/dist/gui/assets/{cynefin-VYW2F7L2-CACe6Hnx.js → cynefin-VYW2F7L2-BQXFmXSG.js} +1 -1
- package/dist/gui/assets/{cynefinDiagram-TSTJHNR4-CYwNcXDx.js → cynefinDiagram-TSTJHNR4-BjRZryO9.js} +1 -1
- package/dist/gui/assets/{dagre-VKFMJZFB-CM67mFp0.js → dagre-VKFMJZFB-iYsJkVs4.js} +1 -1
- package/dist/gui/assets/{diagram-FQU43EPY-DhY2YJ4E.js → diagram-FQU43EPY-BhNypTaO.js} +1 -1
- package/dist/gui/assets/{diagram-G47NLZAW-SnGssRZe.js → diagram-G47NLZAW-Cf0W_-2H.js} +1 -1
- package/dist/gui/assets/{diagram-NH7WQ7WH-Bg3XxHtm.js → diagram-NH7WQ7WH-B_FprRMM.js} +1 -1
- package/dist/gui/assets/{diagram-OA4YK3LP-C90tCphz.js → diagram-OA4YK3LP-CumfdhaI.js} +1 -1
- package/dist/gui/assets/{diagram-WEI45ONY-C_rdqlGR.js → diagram-WEI45ONY-LqS6bbEJ.js} +1 -1
- package/dist/gui/assets/{ebnfDiagram-CCIWWBDH-C8tetpau.js → ebnfDiagram-CCIWWBDH-C0VU_mlO.js} +1 -1
- package/dist/gui/assets/{erDiagram-Q63AITRT-DeBf62pI.js → erDiagram-Q63AITRT-Dv5O47LN.js} +1 -1
- package/dist/gui/assets/{flowDiagram-23GEKE2U-ONut2CN0.js → flowDiagram-23GEKE2U-DtKrQdQs.js} +1 -1
- package/dist/gui/assets/{ganttDiagram-NO4QXBWP-R0S1U9l5.js → ganttDiagram-NO4QXBWP-DriDYXqA.js} +1 -1
- package/dist/gui/assets/{gitGraphDiagram-IHSO6WYX-1dBOeSWA.js → gitGraphDiagram-IHSO6WYX-BdKJo-ZF.js} +1 -1
- package/dist/gui/assets/index-BhiRKuE5.js +36 -0
- package/dist/gui/assets/{infoDiagram-FWYZ7A6U-Bizux-u4.js → infoDiagram-FWYZ7A6U-CIiOkocS.js} +1 -1
- package/dist/gui/assets/{ishikawaDiagram-FXEZZL3T-BQn9HrOR.js → ishikawaDiagram-FXEZZL3T-DPIQoqmt.js} +1 -1
- package/dist/gui/assets/{journeyDiagram-5HDEW3XC-omxxk4CD.js → journeyDiagram-5HDEW3XC-U4jmPfY2.js} +1 -1
- package/dist/gui/assets/{kanban-definition-HUTT4EX6-ZSvya-tv.js → kanban-definition-HUTT4EX6-IyRTaw34.js} +1 -1
- package/dist/gui/assets/{linear-DTfQvMfL.js → linear-CBAHw7_a.js} +1 -1
- package/dist/gui/assets/{mermaid.core-D2k98UhU.js → mermaid.core-DZkDfFY_.js} +4 -4
- package/dist/gui/assets/{mindmap-definition-LN4V7U3C-qF0S5c0K.js → mindmap-definition-LN4V7U3C-bL7Ll4F2.js} +1 -1
- package/dist/gui/assets/{pegDiagram-2B236MQR-C6QhP9Ha.js → pegDiagram-2B236MQR-BpsIcyGU.js} +1 -1
- package/dist/gui/assets/{pieDiagram-ENE6RG2P-Cq_W5lD8.js → pieDiagram-ENE6RG2P-CCmNCxks.js} +1 -1
- package/dist/gui/assets/{quadrantDiagram-ABIIQ3AL-eKua4eTN.js → quadrantDiagram-ABIIQ3AL-Bob4IJnj.js} +1 -1
- package/dist/gui/assets/{railroadDiagram-RFXS5EU6-C6BzISnO.js → railroadDiagram-RFXS5EU6-HuVPehU_.js} +1 -1
- package/dist/gui/assets/{requirementDiagram-TGXJPOKE-Bb6d91xE.js → requirementDiagram-TGXJPOKE-DEfnUjAp.js} +1 -1
- package/dist/gui/assets/{sankeyDiagram-HTMAVEWB-D9QeyLBf.js → sankeyDiagram-HTMAVEWB-DrFCyp3y.js} +1 -1
- package/dist/gui/assets/{sequenceDiagram-DBY2YBRQ-CM4PvotC.js → sequenceDiagram-DBY2YBRQ-DpdcL9St.js} +1 -1
- package/dist/gui/assets/{sizeCapture-X5ZJPWSS-BpbgtMCY.js → sizeCapture-X5ZJPWSS-C_Jr0rzu.js} +1 -1
- package/dist/gui/assets/{stateDiagram-2N3HPSRC-KJiPWD0D.js → stateDiagram-2N3HPSRC-BMvSL0gZ.js} +1 -1
- package/dist/gui/assets/stateDiagram-v2-6OUMAXLB-Ce8AqLzK.js +1 -0
- package/dist/gui/assets/{swimlanes-5IMT3BWC-Pwo1O0dM.js → swimlanes-5IMT3BWC-B8vajQdN.js} +2 -2
- package/dist/gui/assets/swimlanesDiagram-G3AALYLV-XWsxZefl.js +8 -0
- package/dist/gui/assets/{timeline-definition-FHXFAJF6-CnQl8hPb.js → timeline-definition-FHXFAJF6-BYPr5oRM.js} +1 -1
- package/dist/gui/assets/{vennDiagram-L72KCM5P-CRw4PEIG.js → vennDiagram-L72KCM5P-Zxsd6OOL.js} +1 -1
- package/dist/gui/assets/{wardleyDiagram-EHGQE667-DN0P5gP_.js → wardleyDiagram-EHGQE667-5hM1OnjP.js} +1 -1
- package/dist/gui/assets/{xychartDiagram-FW5EYKEG-BpfpKwUH.js → xychartDiagram-FW5EYKEG-pkI7p278.js} +1 -1
- package/dist/gui/index.html +1 -1
- package/package.json +1 -1
- package/dist/gui/assets/channel-BEkoHvmA.js +0 -1
- package/dist/gui/assets/classDiagram-OUVF2IWQ-BholqSXk.js +0 -1
- package/dist/gui/assets/classDiagram-v2-EOCWNBFH-BholqSXk.js +0 -1
- package/dist/gui/assets/index-CPS7XVHi.js +0 -36
- package/dist/gui/assets/stateDiagram-v2-6OUMAXLB-eLHi55Yt.js +0 -1
- package/dist/gui/assets/swimlanesDiagram-G3AALYLV-BI7926G2.js +0 -8
package/dist/cli/index.js
CHANGED
|
@@ -22,7 +22,7 @@ import { createOpencode } from "@opencode-ai/sdk";
|
|
|
22
22
|
import { createInterface as createInterface$1 } from "node:readline/promises";
|
|
23
23
|
import MarkdownIt from "markdown-it";
|
|
24
24
|
const name = "@yorz/cli";
|
|
25
|
-
const version = "0.5.
|
|
25
|
+
const version = "0.5.2";
|
|
26
26
|
const type = "module";
|
|
27
27
|
const description = "";
|
|
28
28
|
const bin = { "yorz": "./dist/cli/index.js" };
|
|
@@ -58,6 +58,9 @@ const DEFAULT_GLOBAL_AGENT = { defaultKind: "claude" };
|
|
|
58
58
|
const DEFAULT_NOTIFICATIONS = {
|
|
59
59
|
sessionEnd: { banner: false, sound: false }
|
|
60
60
|
};
|
|
61
|
+
const DEFAULT_POWER = {
|
|
62
|
+
inhibitWhenRunning: "system-default"
|
|
63
|
+
};
|
|
61
64
|
const SHORTCUT_ACTION_IDS = [
|
|
62
65
|
"newSpec",
|
|
63
66
|
"toggleSpecDetailFullscreen",
|
|
@@ -129,7 +132,8 @@ function normalizeConfig$1(value) {
|
|
|
129
132
|
projects,
|
|
130
133
|
agent: normalizeAgent$1(obj.agent),
|
|
131
134
|
notifications: normalizeNotifications(obj.notifications),
|
|
132
|
-
shortcuts: normalizeShortcuts(obj.shortcuts)
|
|
135
|
+
shortcuts: normalizeShortcuts(obj.shortcuts),
|
|
136
|
+
power: normalizePower(obj.power)
|
|
133
137
|
};
|
|
134
138
|
}
|
|
135
139
|
function defaultGlobalConfig() {
|
|
@@ -143,7 +147,10 @@ function defaultGlobalConfig() {
|
|
|
143
147
|
sound: DEFAULT_NOTIFICATIONS.sessionEnd.sound
|
|
144
148
|
}
|
|
145
149
|
},
|
|
146
|
-
shortcuts: {}
|
|
150
|
+
shortcuts: {},
|
|
151
|
+
power: {
|
|
152
|
+
inhibitWhenRunning: DEFAULT_POWER.inhibitWhenRunning
|
|
153
|
+
}
|
|
147
154
|
};
|
|
148
155
|
}
|
|
149
156
|
function normalizeAgent$1(value) {
|
|
@@ -183,6 +190,17 @@ function normalizeShortcuts(value) {
|
|
|
183
190
|
}
|
|
184
191
|
return shortcuts;
|
|
185
192
|
}
|
|
193
|
+
function normalizePower(value) {
|
|
194
|
+
if (!value || typeof value !== "object") {
|
|
195
|
+
return { inhibitWhenRunning: DEFAULT_POWER.inhibitWhenRunning };
|
|
196
|
+
}
|
|
197
|
+
const obj = value;
|
|
198
|
+
const mode = obj.inhibitWhenRunning;
|
|
199
|
+
if (mode === "prevent-display-sleep" || mode === "keep-system-awake" || mode === "system-default") {
|
|
200
|
+
return { inhibitWhenRunning: mode };
|
|
201
|
+
}
|
|
202
|
+
return { inhibitWhenRunning: DEFAULT_POWER.inhibitWhenRunning };
|
|
203
|
+
}
|
|
186
204
|
function normalizeShortcutBinding(value) {
|
|
187
205
|
const parts = value.split("+").map((part) => part.trim()).filter(Boolean);
|
|
188
206
|
let key = "";
|
|
@@ -2622,11 +2640,152 @@ function parseSpecsDir(value) {
|
|
|
2622
2640
|
}
|
|
2623
2641
|
return { value: trimmed };
|
|
2624
2642
|
}
|
|
2625
|
-
|
|
2643
|
+
const powerLog = () => getLogger().child("power");
|
|
2644
|
+
const controllers = /* @__PURE__ */ new Map();
|
|
2645
|
+
class PowerInhibitController {
|
|
2646
|
+
globalConfigPath;
|
|
2647
|
+
platform;
|
|
2648
|
+
spawnCommand;
|
|
2649
|
+
runningSessions = /* @__PURE__ */ new Set();
|
|
2650
|
+
currentMode = "system-default";
|
|
2651
|
+
process = null;
|
|
2652
|
+
refreshPromise = Promise.resolve();
|
|
2653
|
+
constructor(opts = {}) {
|
|
2654
|
+
this.globalConfigPath = opts.globalConfigPath;
|
|
2655
|
+
this.platform = opts.platform ?? platform();
|
|
2656
|
+
this.spawnCommand = opts.spawnCommand ?? ((command, args, options) => spawn(command, args, options));
|
|
2657
|
+
}
|
|
2658
|
+
setSessionRunning(sessionId, running) {
|
|
2659
|
+
if (running) this.runningSessions.add(sessionId);
|
|
2660
|
+
else this.runningSessions.delete(sessionId);
|
|
2661
|
+
this.scheduleRefresh();
|
|
2662
|
+
}
|
|
2663
|
+
async refresh() {
|
|
2664
|
+
const cfg = await loadGlobalConfig(this.globalConfigPath);
|
|
2665
|
+
const mode = this.runningSessions.size > 0 ? cfg.power.inhibitWhenRunning : "system-default";
|
|
2666
|
+
this.applyMode(mode);
|
|
2667
|
+
}
|
|
2668
|
+
dispose() {
|
|
2669
|
+
this.runningSessions.clear();
|
|
2670
|
+
this.applyMode("system-default");
|
|
2671
|
+
}
|
|
2672
|
+
scheduleRefresh() {
|
|
2673
|
+
this.refreshPromise = this.refreshPromise.catch(() => {
|
|
2674
|
+
}).then(() => this.refresh()).catch((err) => {
|
|
2675
|
+
powerLog().warn("failed to refresh power inhibit state", {
|
|
2676
|
+
message: err instanceof Error ? err.message : String(err)
|
|
2677
|
+
});
|
|
2678
|
+
});
|
|
2679
|
+
}
|
|
2680
|
+
applyMode(mode) {
|
|
2681
|
+
if (mode === this.currentMode) return;
|
|
2682
|
+
this.stopCurrent();
|
|
2683
|
+
this.currentMode = mode;
|
|
2684
|
+
if (mode === "system-default") return;
|
|
2685
|
+
const command = this.commandFor(mode);
|
|
2686
|
+
if (!command) {
|
|
2687
|
+
powerLog().debug("power inhibit mode ignored on unsupported platform", {
|
|
2688
|
+
mode,
|
|
2689
|
+
platform: this.platform
|
|
2690
|
+
});
|
|
2691
|
+
return;
|
|
2692
|
+
}
|
|
2693
|
+
const child = this.spawnCommand(command.command, command.args, { stdio: "ignore" });
|
|
2694
|
+
child.on?.("error", (err) => {
|
|
2695
|
+
if (this.process === child) {
|
|
2696
|
+
this.process = null;
|
|
2697
|
+
this.currentMode = "system-default";
|
|
2698
|
+
}
|
|
2699
|
+
powerLog().warn("power inhibit process failed", { message: err.message });
|
|
2700
|
+
});
|
|
2701
|
+
child.on?.("exit", () => {
|
|
2702
|
+
if (this.process === child) {
|
|
2703
|
+
this.process = null;
|
|
2704
|
+
this.currentMode = "system-default";
|
|
2705
|
+
}
|
|
2706
|
+
});
|
|
2707
|
+
child.unref?.();
|
|
2708
|
+
this.process = child;
|
|
2709
|
+
powerLog().debug("started power inhibit process", {
|
|
2710
|
+
mode,
|
|
2711
|
+
command: command.command,
|
|
2712
|
+
args: command.args
|
|
2713
|
+
});
|
|
2714
|
+
}
|
|
2715
|
+
commandFor(mode) {
|
|
2716
|
+
if (this.platform === "darwin") {
|
|
2717
|
+
return {
|
|
2718
|
+
command: "caffeinate",
|
|
2719
|
+
args: mode === "prevent-display-sleep" ? ["-d"] : ["-i"]
|
|
2720
|
+
};
|
|
2721
|
+
}
|
|
2722
|
+
if (this.platform === "linux") {
|
|
2723
|
+
return {
|
|
2724
|
+
command: "systemd-inhibit",
|
|
2725
|
+
args: [
|
|
2726
|
+
`--what=${mode === "prevent-display-sleep" ? "idle" : "idle:sleep"}`,
|
|
2727
|
+
"--why=YorZ agent task running",
|
|
2728
|
+
"sleep",
|
|
2729
|
+
"infinity"
|
|
2730
|
+
]
|
|
2731
|
+
};
|
|
2732
|
+
}
|
|
2733
|
+
if (this.platform === "win32") {
|
|
2734
|
+
const flags = mode === "prevent-display-sleep" ? "0x80000002" : "0x80000001";
|
|
2735
|
+
return {
|
|
2736
|
+
command: "powershell.exe",
|
|
2737
|
+
args: [
|
|
2738
|
+
"-NoProfile",
|
|
2739
|
+
"-ExecutionPolicy",
|
|
2740
|
+
"Bypass",
|
|
2741
|
+
"-Command",
|
|
2742
|
+
windowsExecutionStateScript(flags)
|
|
2743
|
+
]
|
|
2744
|
+
};
|
|
2745
|
+
}
|
|
2746
|
+
return null;
|
|
2747
|
+
}
|
|
2748
|
+
stopCurrent() {
|
|
2749
|
+
if (!this.process) return;
|
|
2750
|
+
try {
|
|
2751
|
+
this.process.kill();
|
|
2752
|
+
} catch {
|
|
2753
|
+
} finally {
|
|
2754
|
+
this.process = null;
|
|
2755
|
+
}
|
|
2756
|
+
}
|
|
2757
|
+
}
|
|
2758
|
+
function windowsExecutionStateScript(flags) {
|
|
2759
|
+
return [
|
|
2760
|
+
`$signature = '[DllImport("kernel32.dll")] public static extern uint SetThreadExecutionState(uint esFlags);';`,
|
|
2761
|
+
"$native = Add-Type -MemberDefinition $signature -Name YorZPowerInhibit -Namespace YorZ -PassThru;",
|
|
2762
|
+
"try {",
|
|
2763
|
+
` [void]$native::SetThreadExecutionState(${flags});`,
|
|
2764
|
+
" while ($true) { Start-Sleep -Seconds 3600; }",
|
|
2765
|
+
"} finally {",
|
|
2766
|
+
" [void]$native::SetThreadExecutionState(0x80000000);",
|
|
2767
|
+
"}"
|
|
2768
|
+
].join(" ");
|
|
2769
|
+
}
|
|
2770
|
+
function getPowerInhibitController(globalConfigPath) {
|
|
2771
|
+
const key = globalConfigPath ?? resolveGlobalConfigPath();
|
|
2772
|
+
let controller = controllers.get(key);
|
|
2773
|
+
if (!controller) {
|
|
2774
|
+
controller = new PowerInhibitController({ globalConfigPath });
|
|
2775
|
+
controllers.set(key, controller);
|
|
2776
|
+
}
|
|
2777
|
+
return controller;
|
|
2778
|
+
}
|
|
2779
|
+
function createGlobalConfigRoutes(globalConfigPath, powerController = getPowerInhibitController(globalConfigPath)) {
|
|
2626
2780
|
const app = new Hono();
|
|
2627
2781
|
app.get("/global-config", async (c) => {
|
|
2628
2782
|
const cfg = await loadGlobalConfig(globalConfigPath);
|
|
2629
|
-
return c.json({
|
|
2783
|
+
return c.json({
|
|
2784
|
+
agent: cfg.agent,
|
|
2785
|
+
notifications: cfg.notifications,
|
|
2786
|
+
shortcuts: cfg.shortcuts,
|
|
2787
|
+
power: cfg.power
|
|
2788
|
+
});
|
|
2630
2789
|
});
|
|
2631
2790
|
app.put("/global-config", async (c) => {
|
|
2632
2791
|
let raw;
|
|
@@ -2641,10 +2800,17 @@ function createGlobalConfigRoutes(globalConfigPath) {
|
|
|
2641
2800
|
cfg.agent = parsed.agent;
|
|
2642
2801
|
cfg.notifications = parsed.notifications;
|
|
2643
2802
|
cfg.shortcuts = parsed.shortcuts;
|
|
2803
|
+
cfg.power = parsed.power;
|
|
2644
2804
|
await saveGlobalConfig(cfg, globalConfigPath);
|
|
2805
|
+
await powerController.refresh();
|
|
2645
2806
|
return c.json({
|
|
2646
2807
|
ok: true,
|
|
2647
|
-
config: {
|
|
2808
|
+
config: {
|
|
2809
|
+
agent: cfg.agent,
|
|
2810
|
+
notifications: cfg.notifications,
|
|
2811
|
+
shortcuts: cfg.shortcuts,
|
|
2812
|
+
power: cfg.power
|
|
2813
|
+
}
|
|
2648
2814
|
});
|
|
2649
2815
|
});
|
|
2650
2816
|
return app;
|
|
@@ -2694,10 +2860,20 @@ function parseBody(value) {
|
|
|
2694
2860
|
return { error: `shortcuts.${key} is not a valid shortcut binding` };
|
|
2695
2861
|
}
|
|
2696
2862
|
}
|
|
2863
|
+
const powerRaw = obj.power ?? DEFAULT_POWER;
|
|
2864
|
+
if (!powerRaw || typeof powerRaw !== "object") return { error: "power must be an object" };
|
|
2865
|
+
const p = powerRaw;
|
|
2866
|
+
const inhibitWhenRunning = p.inhibitWhenRunning;
|
|
2867
|
+
if (inhibitWhenRunning !== "system-default" && inhibitWhenRunning !== "prevent-display-sleep" && inhibitWhenRunning !== "keep-system-awake") {
|
|
2868
|
+
return {
|
|
2869
|
+
error: "power.inhibitWhenRunning must be system-default | prevent-display-sleep | keep-system-awake"
|
|
2870
|
+
};
|
|
2871
|
+
}
|
|
2697
2872
|
return {
|
|
2698
2873
|
agent: { defaultKind },
|
|
2699
2874
|
notifications: { sessionEnd: { banner: s.banner, sound: s.sound } },
|
|
2700
|
-
shortcuts: normalizeShortcuts(shortcutObj)
|
|
2875
|
+
shortcuts: normalizeShortcuts(shortcutObj),
|
|
2876
|
+
power: { inhibitWhenRunning }
|
|
2701
2877
|
};
|
|
2702
2878
|
}
|
|
2703
2879
|
function createSpecDraftsRoutes(resolveProject) {
|
|
@@ -5695,7 +5871,15 @@ class SessionManager {
|
|
|
5695
5871
|
setRunning(sid, running) {
|
|
5696
5872
|
if (running) this.running.add(sid);
|
|
5697
5873
|
else this.running.delete(sid);
|
|
5698
|
-
|
|
5874
|
+
const event = { sessionId: sid, running };
|
|
5875
|
+
this.statusEmitter.emit("status", event);
|
|
5876
|
+
void Promise.resolve(this.opts.onSessionStatusChange?.(event)).catch((err) => {
|
|
5877
|
+
agentLog().warn("session status callback failed", {
|
|
5878
|
+
sessionId: sid,
|
|
5879
|
+
running,
|
|
5880
|
+
message: err instanceof Error ? err.message : String(err)
|
|
5881
|
+
});
|
|
5882
|
+
});
|
|
5699
5883
|
}
|
|
5700
5884
|
async maybeUpdateTitleFromPrompt(sid, prompt) {
|
|
5701
5885
|
const indexed = await this.store.get(sid);
|
|
@@ -6018,9 +6202,13 @@ class ProjectRegistry {
|
|
|
6018
6202
|
globalConfigPath: this.globalConfigPath,
|
|
6019
6203
|
projectName: basename(input.path)
|
|
6020
6204
|
});
|
|
6205
|
+
const powerInhibit = getPowerInhibitController(this.globalConfigPath);
|
|
6021
6206
|
const defaultKind = resolveProjectAgentKind(cfg.agent, globalCfg.agent.defaultKind);
|
|
6022
6207
|
const sessions = new SessionManager(input.path, defaultKind, sessionStore, {
|
|
6023
|
-
onSessionEnd: notifySessionEnded
|
|
6208
|
+
onSessionEnd: notifySessionEnded,
|
|
6209
|
+
onSessionStatusChange: (ev) => {
|
|
6210
|
+
powerInhibit.setSessionRunning(`${input.id}:${ev.sessionId}`, ev.running);
|
|
6211
|
+
}
|
|
6024
6212
|
});
|
|
6025
6213
|
const commands = getCommandManager(input.path);
|
|
6026
6214
|
const stopChatDebugCleanup = scheduleChatDebugCleanup(input.path);
|
|
@@ -6113,6 +6301,7 @@ class SystemNotificationCenter {
|
|
|
6113
6301
|
upsertVersionUpdate(info) {
|
|
6114
6302
|
const now = Date.now();
|
|
6115
6303
|
const current = this.items.get(VERSION_NOTIFICATION_ID);
|
|
6304
|
+
const sameLatest = current?.metadata?.latestVersion === info.latest;
|
|
6116
6305
|
const next = {
|
|
6117
6306
|
id: VERSION_NOTIFICATION_ID,
|
|
6118
6307
|
kind: "version-update",
|
|
@@ -6120,7 +6309,7 @@ class SystemNotificationCenter {
|
|
|
6120
6309
|
message: `YorZ ${info.latest} is available. Current version: ${info.current}.`,
|
|
6121
6310
|
createdAt: current?.createdAt ?? now,
|
|
6122
6311
|
updatedAt: now,
|
|
6123
|
-
action: current?.action === "restart-ready" ? "restart-ready" : "update-available",
|
|
6312
|
+
action: current?.action === "restart-ready" && sameLatest ? "restart-ready" : "update-available",
|
|
6124
6313
|
metadata: { currentVersion: info.current, latestVersion: info.latest }
|
|
6125
6314
|
};
|
|
6126
6315
|
this.items.set(next.id, next);
|
|
@@ -6214,9 +6403,9 @@ function compareVersions(a, b) {
|
|
|
6214
6403
|
}
|
|
6215
6404
|
return 0;
|
|
6216
6405
|
}
|
|
6217
|
-
function resolveGlobalInstallCommand(env = process.env) {
|
|
6218
|
-
const
|
|
6219
|
-
const manager =
|
|
6406
|
+
function resolveGlobalInstallCommand(env = process.env, argv = process.argv) {
|
|
6407
|
+
const envManager = detectPackageManager([env.npm_config_user_agent, env.npm_execpath]);
|
|
6408
|
+
const manager = envManager ?? detectPackageManager([env.NODE_PATH, ...argv]) ?? "npm";
|
|
6220
6409
|
switch (manager) {
|
|
6221
6410
|
case "pnpm":
|
|
6222
6411
|
return { cmd: "pnpm", args: ["add", "-g", "@yorz/cli@latest"] };
|
|
@@ -6228,6 +6417,13 @@ function resolveGlobalInstallCommand(env = process.env) {
|
|
|
6228
6417
|
return { cmd: "npm", args: ["install", "-g", "@yorz/cli@latest"] };
|
|
6229
6418
|
}
|
|
6230
6419
|
}
|
|
6420
|
+
function detectPackageManager(values) {
|
|
6421
|
+
const source = values.filter(Boolean).join(" ").toLowerCase();
|
|
6422
|
+
if (source.includes("pnpm")) return "pnpm";
|
|
6423
|
+
if (source.includes("bun")) return "bun";
|
|
6424
|
+
if (source.includes("yarn")) return "yarn";
|
|
6425
|
+
return null;
|
|
6426
|
+
}
|
|
6231
6427
|
function parseVersion(value) {
|
|
6232
6428
|
const m = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(value.trim());
|
|
6233
6429
|
if (!m) return null;
|
package/dist/gui/assets/{abnfDiagram-VRR7QNED-1dYBKtgk.js → abnfDiagram-VRR7QNED-DhLcjtGN.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-_7tOgu0t.js";import{p as f}from"./chunk-JWPE2WC7-BbYRospG.js";import{_ as n,l as o}from"./mermaid.core-DZkDfFY_.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-BQXFmXSG.js";import"./index-BhiRKuE5.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-DZkDfFY_.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|